subroutine check_bypass_linearity(lat,orbit, mode,ix_start, ix_end, osc_param) use bmad use beam_mod use mode3_mod use da_mod implicit none type (lat_struct) lat type (beam_struct) beam, beam_start, beam_end type(beam_init_struct)beam_init type(coord_struct), allocatable :: orbit(:) type (osc_param_struct) osc_param type (normal_modes_struct) mode integer i,j integer ix_start, ix_end integer nparticle/1000/ real(rp)emit_x, emit_y, sig_z,sig_pz, ds real(rp) vec(6) logical err_flag character*1 word ! call radiation_integrals(lat,orbit,mode) write(111,'(a,i10)')'nparticle = ',nparticle do i=0,4 write(word,'(i1)')i emit_x = mode%a%emittance * (1+2.5*(i-1)) emit_y = emit_x *0.5 ! mode%b%emittance if(i == 0)then emit_x = mode%a%emittance emit_y=mode%b%emittance endif sig_z = mode%sig_z sig_pz = mode%sigE_E write(111,'(4(a,es12.4))')' emitx_'//word//' = ', emit_x,'; emity_'//word//' = ', emit_y,'; sigz_'//word//' = ', sig_z,'; sige_'//word//'=',sig_pz end do write(111,'(a)')'exit' do i=0,4 emit_x = mode%a%emittance * (1+2.5*(i-1)) emit_y = emit_x *0.5 ! mode%b%emittance if(i == 0)then emit_x = mode%a%emittance emit_y=mode%b%emittance endif sig_z = mode%sig_z sig_pz = mode%sigE_E beam_init%n_bunch = 1 beam_init%dt_bunch = 0 beam_init%n_particle=nparticle beam_init%bunch_charge = 1 beam_init%a_emit = emit_x beam_init%b_emit = emit_y beam_init%sig_z = sig_z beam_init%sig_pz = sig_pz beam_init%center = orbit(0)%vec call init_beam_distribution(lat%ele(0), lat%param, beam_init, beam) beam_start = beam beam_end = beam call track_beam(lat,beam_start,ele1=lat%ele(0),ele2=lat%ele(ix_start), err=err_flag) call track_beam(lat,beam_end,ele1=lat%ele(0),ele2=lat%ele(ix_end), err=err_flag) write(111,'(a1,4(a8,es12.4))')'#',' emitx = ', emit_x,' emity = ', emit_y,' sigz = ', sig_z,' sige = ',sig_pz write(111,'(a1,a16,4x,6a16,4x,6a16)')'#','ds', 'x_pickup','xp_pickup','y_pickup','yp_pickup','z_pickup','pz_pickup', & 'x_kicker','xp_kicker','y_kicker','yp_kicker','z_kicker','pz_kicker' do j=1, nparticle vec = beam_start%bunch(1)%particle(j)%vec -orbit(ix_start)%vec ds = osc_param%tmat(5,1)*vec(1) + osc_param%tmat(5,2)*vec(2) + osc_param%tmat(5,6)*vec(6) write(111,'(es16.6,4x,6es16.6,4x,6es16.6)')ds, & beam_start%bunch(1)%particle(j)%vec(1:6) - orbit(ix_start)%vec(1:6),& beam_end%bunch(1)%particle(j)%vec(1:6) - orbit(ix_end)%vec(1:6) end do write(111,'(/,a1,/)')'#' end do return end