Upload
sharyl-thornton
View
214
Download
1
Embed Size (px)
Citation preview
Documentation of the Library FPPDocumentation of the Library FPP高エネルギー加速器研究機構高エネルギー加速器研究機構
KEKKEKEtienne Forest and Yukiko NogiwaEtienne Forest and Yukiko Nogiwa
With the help of Frank Schmidt and Piotr SkowronskiWith the help of Frank Schmidt and Piotr Skowronski
po lymo rph ic_ comp lex taylo r
p o lymo rph ic_ taylo r
c om p le x_ ta y lo r
tp sa l ie_ an alys is
tp sa l ie
tp sa
d efin it io n
d abn ew
lie lib _ b erz
d a_ arrays
p rec is io n _ con s tan tsfi le_ h and ler
my_own_1D _TP SAgau ss_ d is
L B L V ersion of B erz orig in al p ackag e,p orted in F ortran 9 0 .
B erz's m aster arrays for the T aylor seriesare now d ynam ically a llocated
L B L V ersion of F orest orig inalana lysis tools, a lso p orted in F ortran 9 0 .
O verload ing of B erz's D ab n ewacting on typ e ta y lo r.
O verload ing of F orest's lib rary actingon variou s typ es: dam ap , no rm a lfo rm ,d ra g tfin n , in versed ra g tfinn , etc ...
C om p letes the overload ing of B erz'sD ab new and a lso creates a typ e ca lledcom p lex ta ylo r .
C reates tw o p olym orp hic typ es:rea l_ 8 an d dou b le_ com p lex .
FPP
S ch em a tic V iew o f F P P
M ap P ost P rocessor
T aylorM ap
A n a ly s is : N o rm a lFo rm
A b erra tio n se tc . . . M ap P ost P rocessor
P o ly m orp h ic In tegra tor(P T C for exa m p le)
T aylor M ap
A n a ly s is : N o rm a lFo rm
A b erra tio n se tc . . .
L attice(s )D es crip tion
M ap P ost P rocessor
P ro du c e M a ps a n y wa y y o uwa n t (C O SY -In fin i tym e th o ds fo r e x a m ple )
T aylor M ap
A n a ly s is : N o rm a lFo rm
A b erra tio n se tc . . .
L attice(s )D es crip tion
FPPFPP FPP
W a y s to u se F P P in A cce lera to r P h y sics
FPP creates a type Taylor to overload the LBL version of Berz’s “DA” package and the associated Lielib of Forest. Out of this Taylor type, we creates a polymorphic taylor type that can switch between double and Taylor at execution time.
mad.web.cern.ch/mad/PTC_proper
PROGRAM EXAMPLEUSE POLYMORPHIC_COMPLEXTAYLORIMPLICIT NONE INTEGER NO,NVTYPE(TAYLOR) F,DF
NO=4; NV= 2; ! NO: THE ORDER OF THE POLYNOMIAL !NV: THE NUMBER OF VARIABLESCALL INIT(NO,NV) ! INITIALIZES TAYLOR SERIES WITHOUT MAPS
CALL ALLOC(F,DF) ! MUST BE CONSTRUCTED AFTER INIT
F=(2.D0.MONO.'12') + (3.D0.MONO.'11') + 4.D0 ! CREATES 2.D0 X_1 X_ 2 ^2+3.D0 X_1X_2 +4.D0DF=F.D.2 ! DF/DX_2 CREATES 4.D0 X_1X_2 + 3.D0 X_1
CALL PRINT(F,6)CALL PRINT(DF,6)
CALL KILL(F,DF) ! MUST BE DESTROYEDEND PROGRAM EXAMPLE
PROGRAM EXAMPLEUSE POLYMORPHIC_COMPLEXTAYLORIMPLICIT NONE INTEGER NO,NVTYPE(TAYLOR) F,DF
NO=4; NV= 2; ! NO: THE ORDER OF THE POLYNOMIAL NV: THE NUMBER OF VARIABLESCALL INIT(NO,NV) ! INITIALIZES TAYLPROGRAM EXAMPLEUSE POLYMORPHIC_COMPLEXTAYLORIMPLICIT NONE INTEGER NO,NVREAL(DP) RTYPE(TAYLOR) F,G
INTEGER, ALLOCATABLE :: J(:),K(:)
NO=4; NV= 2; ! NO: THE ORDER OF THE POLYNOMIAL NV: THE NUMBER OF VARIABLES CALL INIT(NO,NV) ! INITIALIZES TAYLOR SERIES WITHOUT MAPS
CALL ALLOC(F,G) ! MUST BE CONSTRUCTED AFTER INIT
ALLOCATE(J(NV))ALLOCATE(K(NV)) J=0J(1)=1;J(2)=2;
K=0K(1)=3;K(2)=1;
F=(2.D0.MONO.J) + 5.D0 ! CREATES 2.D0 X_1 X_ 2 ^2 + 5.D0R=F.SUB.J ! PEEKS COEFFICIENT 2.D0
CALL PRINT( F,6)WRITE(6,*) R
F=(2.D0.MONO.J) + (4.D0.MONO.K) + 5.D0 ! CREATES 2.D0 X_1 X_ 2 ^2 + 4.D0 X_1 ^3 X_ 2 + 5.D0R=F.SUB.K ! PEEKS COEFFICIENT 4.D0
CALL PRINT( F,6)WRITE(6,*) R
F=(2.D0.MONO.'12' ) + (4.D0.MONO.'13' ) + ( 3.D0.MONO.'01') + 5.D0 ! CREATES 2.D0 X_1 X_ 2 ^2 + 4.D0 X_1 X_ 2 ^3 + 3.D0 X_ 2 + 5.D0R=F.SUB.'13' ! PEEKS COEFFICIENT 4.D0
CALL PRINT( F,6)WRITE(6,*) R
DEALLOCATE(J)CALL KILL(F,G) ! MUST BE DESTROYEDEND PROGRAM EXAMPLER SERIES WITHOUT MAPS
WRITE(MF,*) " "WRITE(MF,*) " ORIGINAL VECTOR FIELD - COMPUTED ONE LIE EXPONENT "CALL PRINT(RESIDUAL,MF,PREC)
DF=MAP
WRITE(MF,*) " "WRITE(MF,*) " DRAGT-FINN REPRESENTATION "WRITE(MF,*) " "CALL PRINT(DF,MF,PREC)
RESIDUAL=DFRESIDUAL=MAP-RESIDUAL
WRITE(MF,*) " "WRITE(MF,*) " ORIGINAL MAP - COMPUTED DRAGT-FINN "WRITE(MF,*) " "CALL PRINT(RESIDUAL,MF,PREC)
RDF=MAP
WRITE(MF,*) " "WRITE(MF,*) " REVERSE DRAGT-FINN REPRESENTATION "WRITE(MF,*) " "CALL PRINT(RDF,MF,PREC)
RESIDUAL=RDFRESIDUAL=MAP-RESIDUAL
WRITE(MF,*) " "WRITE(MF,*) " ORIGINAL MAP - COMPUTED REVERSE DRAGT-FINN "WRITE(MF,*) " "CALL PRINT(RESIDUAL,MF,PREC)
CALL KILL(ID, MAP, RESIDUAL)CALL KILL(F); CALL KILL(SINGLE);CALL KILL(DF);CALL KILL(RDF);CLOSE(MF);END PROGRAM MAPS
SUBROUTINE VECFIELD_QUAD(L,K,F)USE POLYMORPHIC_COMPLEXTAYLORIMPLICIT NONETYPE(VECFIELD) FREAL(DP) L,K
! DRIFT PARTF%V(1)=L*(1.D0.MONO.'01') /SQRT(1.D0-(1.D0.MONO.'02')-(1.D0.MONO.'0002'))F%V(3)=L*(1.D0.MONO.'0001')/SQRT(1.D0-(1.D0.MONO.'02')-(1.D0.MONO.'0002'))
! QUADRUPOLE PART
F%V(2)=-L*K*(1.D0.MONO.'1')F%V(4)= L*K*(1.D0.MONO.'001')
END SUBROUTINE VECFIELD_QUAD
SUBROUTINE PBFIELD_QUAD(L,K,H)USE POLYMORPHIC_COMPLEXTAYLORIMPLICIT NONETYPE(PBFIELD) HREAL(DP) L,K
! DRIFT PARTH=L*SQRT(1.D0-(1.D0.MONO.'02')-(1.D0.MONO.'0002'))
! QUADRUPOLE PART
H%H=H%H-(L*K/2.D0)*((1.D0.MONO.'2')-(1.D0.MONO.'002'))
END SUBROUTINE PBFIELD_QUAD
PROGRAM MAPSUSE POLYMORPHIC_COMPLEXTAYLORTYPE(DAMAP) ID, MAP, RESIDUALREAL(DP) L1,KICK1,L2,KICK2,LD REAL(DP) :: PREC = 1.D-10TYPE(VECFIELD) FTYPE(ONELIEEXPONENT) SINGLETYPE(DRAGTFINN) DFTYPE(REVERSEDRAGTFINN) RDFINTEGER I
INTEGER MF,MEMF=20OPEN(UNIT=MF,FILE='RESULTS.TXT')CALL INIT(NO1=4,ND1=2,NP1=0,NDPT1 =0) ! -INIT FOR MAPS IN ND1 DEGREES OF FREEDOM
CALL ALLOC(ID, MAP, RESIDUAL) ;CALL ALLOC(F); CALL ALLOC(SINGLE);CALL ALLOC(DF);CALL ALLOC(RDF);
KICK2=-0.9D0; L2=0.1D0
CALL VECFIELD_QUAD(L2,KICK2,F)
F%V(1)=0.01D0+F%V(1)F%V(2)=0.02D0+F%V(2)
ID=1MAP=TEXP(F,ID)
CALL PRINT(MAP,MF)
SINGLE=MAP
DO I=1,C_%ND2 RESIDUAL%V(I)=SINGLE%VECTOR%V(I)-F%V(I)ENDDO
Illustrating vector fields by creating a quadrupole Taylor map using
“COSY-INFINITY-style” methods
PROGRAM TWISS_PTCUSE MADX_KEYWORDSIMPLICIT NONEREAL(DP) X_ORBIT(6)INTEGER I,NOTYPE(FIBRE), POINTER :: PTYPE(LAYOUT), POINTER :: MY_RINGREAL(DP) BETA_X,BETA_ZTYPE(REAL_8) X_POL(6)TYPE(DAMAP) IDTYPE(NORMALFORM) NFORMTYPE(MAD_UNIVERSE) M_U
CALL SET_UP_UNIVERSE(M_U)CALL APPEND_EMPTY_LAYOUT(M_U)CALL READ_INTO_VIRGIN_LAYOUT(M_U%START,"ALS.TXT")
MY_RING=>M_U%STARTP=>MY_RING%START
CALL ALLOC(X_POL);
X_ORBIT=0.D0; CALL FIND_ORBIT(MY_RING,X_ORBIT,1,DEFAULT,1.D-6)WRITE(6,*) X_ORBIT
WRITE(6,*) "GIVE ORDER OF TAYLOR MAP ";READ(5,*) NO;
IF(NO>0) THEN CALL INIT(DEFAULT,NO,0,BERZ) CALL ALLOC(ID);CALL ALLOC(NFORM); ID=1 X_POL=X_ORBIT+IDELSE X_POL=X_ORBITENDIF
CALL TRACK(MY_RING,X_POL,1,DEFAULT)
WRITE(6,*) "POLYMORPHS PRINTED "CALL PRINT(X_POL,6)
IF(NO>0) THEN ! WE WILL DO A TWISS CALCULATION OF BETA_X
NFORM=X_POL
WRITE(6,*) NFORM%TUNE
X_POL=X_ORBIT+NFORM%A_T
BETA_X= (X_POL(1).SUB.'100000')**2+(X_POL(1).SUB.'010000')**2 BETA_Z= (X_POL(6).SUB.'000010')**2+(X_POL(6).SUB.'000001')**2
WRITE(6,*) 'POS = ',0,' BETA_X = ', BETA_X WRITE(6,*) ' BETA_Z = ', BETA_Z
DO I=1,MY_RING%N CALL TRACK(MY_RING,X_POL,I,I+1,DEFAULT) BETA_X= (X_POL(1).SUB.'100000')**2+(X_POL(1).SUB.'010000')**2 BETA_Z= (X_POL(6).SUB.'000010')**2+(X_POL(6).SUB.'000001')**2 IF(MOD(I,50)==1.OR.I==MY_RING%N) THEN WRITE(6,*) 'POS = ',I,' BETA_X = ', BETA_X WRITE(6,*) ' BETA_Z = ', BETA_Z ENDIF
ENDDO
ENDIF
CALL KILL(X_POL);IF(NO>1) THEN CALL KILL(ID);ENDIF
END PROGRAM TWISS_PTC
Simple calculation of x and z in a tracking code, here PTC using FPP.
TheoryCom
puter Implem
entation