subroutine Track_a_ray_time(RADIATION_FLAG,SPIN_FLAG) use madx_ptc_module use pointer_lattice implicit none type(layout), pointer :: ALS REAL(dp) X0(6),X(6),R,DT TYPE(PROBE) XS TYPE(TEMPORAL_PROBE) XT TYPE(INTERNAL_STATE) STATE LOGICAL(LP) RADIATION_FLAG,SPIN_FLAG integer i als=>M_U%start STATE=DEFAULT+TOTALPATH IF(RADIATION_FLAG) THEN STATE=STATE+RADIATION0 WRITE(6,*) "RADIATION IS ON " ENDIF IF(SPIN_FLAG) THEN STATE=STATE+SPIN0 WRITE(6,*) "SPIN IS ON " ENDIF WRITE(6,*) " " WRITE(6,*) " GIVE INITIAL VALUE (ONE NUMBER) FOR X(1:6)= R " READ(5,*) R X0(1:6)=R call FILL_SURVEY_DATA_IN_NODE_LAYOUT(ALS) XS=X0 XT%XS=XS XT%POS=0.D0 XT%NODE=>ALS%T%START XT%DS=0.D0 DT=(0.19683851D+03+1.D-3)/10 r=zero do i=1,10 CALL TRACK_time(XT,DT,STATE) IF(CHECK_STABLE) THEN write(6,*) "T = ",i*dt WRITE(6,*) " POSITION " WRITE(6,'(6(1x,E15.8))') XT%POS WRITE(6,*) XT%NODE%PARENT_FIBRE%POS, XT%NODE%PARENT_FIBRE%MAG%NAME ENDIF enddo IF(CHECK_STABLE) THEN WRITE(6,*) " TIME TRACKING ALL THE WAY ", 10*dt WRITE(6,'(6(1x,E15.8))') XT%XS%X WRITE(6,*) " SPINORS " WRITE(6,'(6(1x,E15.8))') XT%XS%S(1) WRITE(6,'(6(1x,E15.8))') XT%XS%S(2) WRITE(6,'(6(1x,E15.8))') XT%XS%S(3) WRITE(6,*) " POSITION " WRITE(6,'(6(1x,E15.8))') XT%POS WRITE(6,*) XT%NODE%PARENT_FIBRE%POS, XT%NODE%PARENT_FIBRE%MAG%NAME ELSE WRITE(6,"(A255)") MESSAGELOST WRITE(6,"(A24)") LOST_FIBRE%MAG%NAME WRITE(6,*) " FIBRE POSITION ",LOST_FIBRE%POS WRITE(6,*) " NODE POSITION ",LOST_NODE%POS ENDIF end subroutine Track_a_ray_time