!+ ! Subroutine bmad_calc_bunch_params (bunch, bunch_params, c_err) ! ! Routine to calculate bunch parameters like the emittance, etc. ! ! ! Input: ! bunch -- CPP_bunch: Bunch at s_start. ! ! Output: ! bunch_params -- CPP_bunch_params: Bunch parameters. ! c_err -- logical(c_bool): Error flag. !- subroutine bmad_calc_bunch_params (bunch, bunch_params, c_err) use bmad_common_mod use beam_utils implicit none type (c_ptr), value :: bunch, bunch_params type (bunch_struct), target :: f_bunch type (lat_struct), pointer :: lat type (bunch_params_struct), target :: f_bunch_params character(*), parameter :: r_name = 'bmad_calc_bunch_params' logical(c_bool) c_err logical err ! c_err = c_logic(.true.) call bunch_to_f (bunch, c_loc(f_bunch)) call calc_bunch_params (f_bunch, f_bunch_params, err) if (err) return call bunch_params_to_c (c_loc(f_bunch_params), bunch_params) c_err = c_logic(.false.) end subroutine