!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ! Subroutine find_steerings(cesr,hkick_ix,vkick_ix) ! ! Find horizontal and vertical steerings, for simulating ORM data. ! ! Input: ! cesr -- db_struct ! ! Output: ! hkick_ix(:) -- integer(:): ix_lat for horizontal steerings ! vkick_ix(:) -- integer(:): ix_lat for vertical steerings !-------------------------------------------------------------------------- subroutine find_steerings(cesr,hkick_ix,vkick_ix) use bmad use cesr_basic_mod implicit none type(db_struct) :: cesr integer, allocatable :: hkick_ix(:), vkick_ix(:) integer :: i, n_steering_h = 0, n_steering_v = 0, steering_index = 0 ! find all horiz, vert steerings: do i=1, ubound(cesr%h_steer,1) if (match_reg(cesr%h_steer(i)%bmad_name, 'DUMMY') .or. cesr%h_steer(i)%ix_lat == 0) cycle ! skip that element n_steering_h = n_steering_h + 1 enddo do i=1, ubound(cesr%v_steer,1) if (match_reg(cesr%v_steer(i)%bmad_name, 'DUMMY') .or. cesr%v_steer(i)%ix_lat == 0) cycle if (match_reg(cesr%v_steer(i)%bmad_name, 'SC_V.*')) cycle n_steering_v = n_steering_v + 1 enddo allocate(hkick_ix(n_steering_h),vkick_ix(n_steering_v)) steering_index = 1 do i=1, ubound(cesr%h_steer,1) ! first element in h_steer/v_steer arrays is a dummy (why?) if (match_reg(cesr%h_steer(i)%bmad_name, 'DUMMY') .or. cesr%h_steer(i)%ix_lat == 0) cycle ! skip that element hkick_ix(steering_index) = cesr%h_steer(i)%ix_lat steering_index = steering_index + 1 enddo steering_index = 1 do i=1, ubound(cesr%v_steer,1) if (match_reg(cesr%v_steer(i)%bmad_name, 'DUMMY') .or. cesr%v_steer(i)%ix_lat == 0) cycle if (match_reg(cesr%v_steer(i)%bmad_name, 'SC_V.*')) cycle vkick_ix(steering_index) = cesr%v_steer(i)%ix_lat steering_index = steering_index + 1 enddo end subroutine find_steerings