!+ ! Subroutine bmad_auto_scale_phase (ix_lat, c_err) ! ! Routine to compute the RF phase for maximal acceleration. ! ! Input: ! ix_lat -- Integer: Index of lattice. ! ix_ele -- Integer: Index of RF element. ! ! Output: ! phase_out -- Real(rp): Phase set to. ! c_err -- logical(c_bool): Error flag. !- subroutine bmad_auto_scale_phase (ix_lat, c_err) use bmad_common_mod use bookkeeper_mod implicit none type (lat_struct), pointer :: lat real(rp), pointer :: field_ptr, phase_ptr integer ix_lat, i logical(c_bool) c_err logical err_flag, err character(24), parameter :: r_name = 'bmad_auto_scale_phase' ! c_err = c_logic(.true.) call bmad_set_lat_pointer (err, r_name, ix_lat, lat, can_be_in_init = .true.) if (err) return do i = 1, lat%n_ele_max if (lat%ele(i)%key /= lcavity$ .and. lat%ele(i)%key /= rfcavity$) cycle lat%ele(i)%value(autoscale_phase$) = true$ enddo call lat_compute_ref_energy_and_time (lat, err) if (err) return do i = 1, lat%n_ele_max if (lat%ele(i)%key /= lcavity$ .and. lat%ele(i)%key /= rfcavity$) cycle lat%ele(i)%value(autoscale_phase$) = false$ enddo call lattice_bookkeeper (lat) c_err = c_logic(.false.) end subroutine