Presentation is loading. Please wait.

Presentation is loading. Please wait.

Documentation of the Library FPP 高エネルギー加速器研究機構 KEK Etienne Forest and Yukiko Nogiwa With the help of Frank Schmidt and Piotr Skowronski FPP creates a type.

Similar presentations


Presentation on theme: "Documentation of the Library FPP 高エネルギー加速器研究機構 KEK Etienne Forest and Yukiko Nogiwa With the help of Frank Schmidt and Piotr Skowronski FPP creates a type."— Presentation transcript:

1 Documentation of the Library FPP 高エネルギー加速器研究機構 KEK Etienne Forest and Yukiko Nogiwa With the help of Frank Schmidt and Piotr Skowronski 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 EXAMPLE USE POLYMORPHIC_COMPLEXTAYLOR IMPLICIT NONE INTEGER NO,NV TYPE(TAYLOR) F,DF 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,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.D0 DF=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 DESTROYED END PROGRAM EXAMPLE PROGRAM EXAMPLE USE POLYMORPHIC_COMPLEXTAYLOR IMPLICIT NONE INTEGER NO,NV TYPE(TAYLOR) F,DF NO=4; NV= 2; ! NO: THE ORDER OF THE POLYNOMIAL NV: THE NUMBER OF VARIABLES CALL INIT(NO,NV) ! INITIALIZES TAYLPROGRAM EXAMPLE USE POLYMORPHIC_COMPLEXTAYLOR IMPLICIT NONE INTEGER NO,NV REAL(DP) R TYPE(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=0 J(1)=1;J(2)=2; K=0 K(1)=3;K(2)=1; F=(2.D0.MONO.J) + 5.D0 ! CREATES 2.D0 X_1 X_ 2 ^2 + 5.D0 R=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.D0 R=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.D0 R=F.SUB.'13' ! PEEKS COEFFICIENT 4.D0 CALL PRINT( F,6) WRITE(6,*) R DEALLOCATE(J) CALL KILL(F,G) ! MUST BE DESTROYED END 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=DF RESIDUAL=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=RDF RESIDUAL=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_COMPLEXTAYLOR IMPLICIT NONE TYPE(VECFIELD) F REAL(DP) L,K ! DRIFT PART F%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_COMPLEXTAYLOR IMPLICIT NONE TYPE(PBFIELD) H REAL(DP) L,K ! DRIFT PART H=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 MAPS USE POLYMORPHIC_COMPLEXTAYLOR TYPE(DAMAP) ID, MAP, RESIDUAL REAL(DP) L1,KICK1,L2,KICK2,LD REAL(DP) :: PREC = 1.D-10 TYPE(VECFIELD) F TYPE(ONELIEEXPONENT) SINGLE TYPE(DRAGTFINN) DF TYPE(REVERSEDRAGTFINN) RDF INTEGER I INTEGER MF,ME MF=20 OPEN(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=1 MAP=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_PTC USE MADX_KEYWORDS IMPLICIT NONE REAL(DP) X_ORBIT(6) INTEGER I,NO TYPE(FIBRE), POINTER :: P TYPE(LAYOUT), POINTER :: MY_RING REAL(DP) BETA_X,BETA_Z TYPE(REAL_8) X_POL(6) TYPE(DAMAP) ID TYPE(NORMALFORM) NFORM TYPE(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%START P=>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+ID ELSE X_POL=X_ORBIT ENDIF 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. Theory Computer Implementation


Download ppt "Documentation of the Library FPP 高エネルギー加速器研究機構 KEK Etienne Forest and Yukiko Nogiwa With the help of Frank Schmidt and Piotr Skowronski FPP creates a type."

Similar presentations


Ads by Google