function rdb_ocean_required_halo(pv_adv_scheme, pv_adv_scheme_len, &
tracer_recon, tracer_recon_len, &
periodic, tripolar_fold, decomposed, &
kappa_shear_at_vertex) result(ng) &
bind(c, name="rdb_ocean_required_halo")
!! Stateless (no handle required — like `rdb_working_precision`):
!! the minimum `nghost` for a given scheme/topology selection,
!! folding the six scattered per-scheme/per-topology minimums behind
!! `rdb_ocean_halo_width::required_halo` so a Python caller sizing
!! a grid's halo before `create()` agrees with what `engine_setup`
!! will itself enforce. A zero-length scheme string means "unset"
!! (baseline 2), matching the Fortran function's
!! absent-optional-argument behaviour.
integer(c_int), intent(in), value :: pv_adv_scheme_len
character(kind=c_char), intent(in) :: pv_adv_scheme(pv_adv_scheme_len)
integer(c_int), intent(in), value :: tracer_recon_len
character(kind=c_char), intent(in) :: tracer_recon(tracer_recon_len)
integer(c_int), intent(in), value :: periodic, tripolar_fold, decomposed
integer(c_int), intent(in), value :: kappa_shear_at_vertex
integer(c_int) :: ng
character(len=:), allocatable :: pv_s, tr_s
call c_to_f_string(pv_adv_scheme, pv_adv_scheme_len, pv_s)
call c_to_f_string(tracer_recon, tracer_recon_len, tr_s)
ng = int(required_halo(pv_adv_scheme=pv_s, tracer_recon=tr_s, &
periodic=(periodic /= 0_c_int), &
tripolar_fold=(tripolar_fold /= 0_c_int), &
decomposed=(decomposed /= 0_c_int), &
kappa_shear_at_vertex=(kappa_shear_at_vertex /= 0_c_int)), c_int)
end function rdb_ocean_required_halo