schema_add_group Subroutine

private subroutine schema_add_group(this, g)

MOVE a locally-built group into the schema — g is consumed (allocatables transferred). Move semantics on purpose: intrinsic assignment deep-copies the polymorphic key boxes, which NVHPC miscompiles (heap corruption); move_alloc transfers descriptors only. Error stop on duplicate name.

Type Bound

nml_schema_t

Arguments

Type IntentOptional Attributes Name
class(nml_schema_t), intent(inout) :: this
type(nml_group_t), intent(inout) :: g

Calls

proc~~schema_add_group~~CallsGraph proc~schema_add_group nml_schema_t%schema_add_group error error proc~schema_add_group->error proc~lower lower proc~schema_add_group->proc~lower proc~move_group move_group proc~schema_add_group->proc~move_group

Called by

proc~~schema_add_group~~CalledByGraph proc~schema_add_group nml_schema_t%schema_add_group proc~register_boundary register_boundary proc~register_boundary->proc~schema_add_group proc~register_conv register_conv proc~register_conv->proc~schema_add_group proc~register_ddiff register_ddiff proc~register_ddiff->proc~schema_add_group proc~register_epbl register_epbl proc~register_epbl->proc~schema_add_group proc~register_foxkemper register_foxkemper proc~register_foxkemper->proc~schema_add_group proc~register_gm register_gm proc~register_gm->proc~schema_add_group proc~register_grid register_grid proc~register_grid->proc~schema_add_group proc~register_initial_condition register_initial_condition proc~register_initial_condition->proc~schema_add_group proc~register_kappa_shear register_kappa_shear proc~register_kappa_shear->proc~schema_add_group proc~register_logging register_logging proc~register_logging->proc~schema_add_group proc~register_meke register_meke proc~register_meke->proc~schema_add_group proc~register_mpi register_mpi proc~register_mpi->proc~schema_add_group proc~register_nonhydrostatic register_nonhydrostatic proc~register_nonhydrostatic->proc~schema_add_group proc~register_ocean_bc register_ocean_bc proc~register_ocean_bc->proc~schema_add_group proc~register_ocean_bdrag register_ocean_bdrag proc~register_ocean_bdrag->proc~schema_add_group proc~register_ocean_bt register_ocean_bt proc~register_ocean_bt->proc~schema_add_group proc~register_ocean_cavity_dyn register_ocean_cavity_dyn proc~register_ocean_cavity_dyn->proc~schema_add_group proc~register_ocean_cavity_melt register_ocean_cavity_melt proc~register_ocean_cavity_melt->proc~schema_add_group proc~register_ocean_continuity register_ocean_continuity proc~register_ocean_continuity->proc~schema_add_group proc~register_ocean_coriolis register_ocean_coriolis proc~register_ocean_coriolis->proc~schema_add_group proc~register_ocean_data register_ocean_data proc~register_ocean_data->proc~schema_add_group proc~register_ocean_dataovr register_ocean_dataovr proc~register_ocean_dataovr->proc~schema_add_group proc~register_ocean_debug register_ocean_debug proc~register_ocean_debug->proc~schema_add_group proc~register_ocean_diag register_ocean_diag proc~register_ocean_diag->proc~schema_add_group proc~register_ocean_eos register_ocean_eos proc~register_ocean_eos->proc~schema_add_group proc~register_ocean_forcing register_ocean_forcing proc~register_ocean_forcing->proc~schema_add_group proc~register_ocean_geothermal register_ocean_geothermal proc~register_ocean_geothermal->proc~schema_add_group proc~register_ocean_grid register_ocean_grid proc~register_ocean_grid->proc~schema_add_group proc~register_ocean_hdiff register_ocean_hdiff proc~register_ocean_hdiff->proc~schema_add_group proc~register_ocean_hvisc register_ocean_hvisc proc~register_ocean_hvisc->proc~schema_add_group proc~register_ocean_ic register_ocean_ic proc~register_ocean_ic->proc~schema_add_group proc~register_ocean_ice register_ocean_ice proc~register_ocean_ice->proc~schema_add_group proc~register_ocean_ice_ic register_ocean_ice_ic proc~register_ocean_ice_ic->proc~schema_add_group proc~register_ocean_isopycnal register_ocean_isopycnal proc~register_ocean_isopycnal->proc~schema_add_group proc~register_ocean_mpi register_ocean_mpi proc~register_ocean_mpi->proc~schema_add_group proc~register_ocean_pgf register_ocean_pgf proc~register_ocean_pgf->proc~schema_add_group proc~register_ocean_psurf register_ocean_psurf proc~register_ocean_psurf->proc~schema_add_group proc~register_ocean_restore register_ocean_restore proc~register_ocean_restore->proc~schema_add_group proc~register_ocean_sponge register_ocean_sponge proc~register_ocean_sponge->proc~schema_add_group proc~register_ocean_tdrag register_ocean_tdrag proc~register_ocean_tdrag->proc~schema_add_group proc~register_ocean_thermo register_ocean_thermo proc~register_ocean_thermo->proc~schema_add_group proc~register_ocean_tides register_ocean_tides proc~register_ocean_tides->proc~schema_add_group proc~register_ocean_topo register_ocean_topo proc~register_ocean_topo->proc~schema_add_group proc~register_ocean_tracers register_ocean_tracers proc~register_ocean_tracers->proc~schema_add_group proc~register_ocean_vdiff register_ocean_vdiff proc~register_ocean_vdiff->proc~schema_add_group proc~register_ocean_vmix register_ocean_vmix proc~register_ocean_vmix->proc~schema_add_group proc~register_ocean_wetdry register_ocean_wetdry proc~register_ocean_wetdry->proc~schema_add_group proc~register_ocean_zinit register_ocean_zinit proc~register_ocean_zinit->proc~schema_add_group proc~register_output register_output proc~register_output->proc~schema_add_group proc~register_physics register_physics proc~register_physics->proc~schema_add_group proc~register_porous register_porous proc~register_porous->proc~schema_add_group proc~register_redi register_redi proc~register_redi->proc~schema_add_group proc~register_sim register_sim proc~register_sim->proc~schema_add_group proc~register_slopes register_slopes proc~register_slopes->proc~schema_add_group proc~register_tidal_mixing register_tidal_mixing proc~register_tidal_mixing->proc~schema_add_group proc~register_time register_time proc~register_time->proc~schema_add_group proc~register_tracer register_tracer proc~register_tracer->proc~schema_add_group proc~register_varmix register_varmix proc~register_varmix->proc~schema_add_group proc~register_vcoord register_vcoord proc~register_vcoord->proc~schema_add_group proc~register_wavespeed register_wavespeed proc~register_wavespeed->proc~schema_add_group proc~build_rdb_schema build_rdb_schema proc~build_rdb_schema->proc~register_boundary proc~build_rdb_schema->proc~register_conv proc~build_rdb_schema->proc~register_ddiff proc~build_rdb_schema->proc~register_epbl proc~build_rdb_schema->proc~register_foxkemper proc~build_rdb_schema->proc~register_gm proc~build_rdb_schema->proc~register_grid proc~build_rdb_schema->proc~register_initial_condition proc~build_rdb_schema->proc~register_kappa_shear proc~build_rdb_schema->proc~register_logging proc~build_rdb_schema->proc~register_meke proc~build_rdb_schema->proc~register_mpi proc~build_rdb_schema->proc~register_nonhydrostatic proc~build_rdb_schema->proc~register_ocean_bc proc~build_rdb_schema->proc~register_ocean_bdrag proc~build_rdb_schema->proc~register_ocean_bt proc~build_rdb_schema->proc~register_ocean_cavity_dyn proc~build_rdb_schema->proc~register_ocean_cavity_melt proc~build_rdb_schema->proc~register_ocean_continuity proc~build_rdb_schema->proc~register_ocean_coriolis proc~build_rdb_schema->proc~register_ocean_data proc~build_rdb_schema->proc~register_ocean_dataovr proc~build_rdb_schema->proc~register_ocean_debug proc~build_rdb_schema->proc~register_ocean_diag proc~build_rdb_schema->proc~register_ocean_eos proc~build_rdb_schema->proc~register_ocean_forcing proc~build_rdb_schema->proc~register_ocean_geothermal proc~build_rdb_schema->proc~register_ocean_grid proc~build_rdb_schema->proc~register_ocean_hdiff proc~build_rdb_schema->proc~register_ocean_hvisc proc~build_rdb_schema->proc~register_ocean_ic proc~build_rdb_schema->proc~register_ocean_ice proc~build_rdb_schema->proc~register_ocean_ice_ic proc~build_rdb_schema->proc~register_ocean_isopycnal proc~build_rdb_schema->proc~register_ocean_mpi proc~build_rdb_schema->proc~register_ocean_pgf proc~build_rdb_schema->proc~register_ocean_psurf proc~build_rdb_schema->proc~register_ocean_restore proc~build_rdb_schema->proc~register_ocean_sponge proc~build_rdb_schema->proc~register_ocean_tdrag proc~build_rdb_schema->proc~register_ocean_thermo proc~build_rdb_schema->proc~register_ocean_tides proc~build_rdb_schema->proc~register_ocean_topo proc~build_rdb_schema->proc~register_ocean_tracers proc~build_rdb_schema->proc~register_ocean_vdiff proc~build_rdb_schema->proc~register_ocean_vmix proc~build_rdb_schema->proc~register_ocean_wetdry proc~build_rdb_schema->proc~register_ocean_zinit proc~build_rdb_schema->proc~register_output proc~build_rdb_schema->proc~register_physics proc~build_rdb_schema->proc~register_porous proc~build_rdb_schema->proc~register_redi proc~build_rdb_schema->proc~register_sim proc~build_rdb_schema->proc~register_slopes proc~build_rdb_schema->proc~register_tidal_mixing proc~build_rdb_schema->proc~register_time proc~build_rdb_schema->proc~register_tracer proc~build_rdb_schema->proc~register_varmix proc~build_rdb_schema->proc~register_vcoord proc~build_rdb_schema->proc~register_wavespeed proc~read_config_from_string_impl read_config_from_string_impl proc~read_config_from_string_impl->proc~build_rdb_schema proc~read_config_impl read_config_impl proc~read_config_impl->proc~build_rdb_schema proc~read_config read_config proc~read_config->proc~read_config_impl proc~read_config_from_string read_config_from_string proc~read_config_from_string->proc~read_config_from_string_impl proc~build_pending_handle build_pending_handle proc~build_pending_handle->proc~read_config_from_string

Variables

Type Visibility Attributes Name Initial
integer, private :: i
integer, private :: n
type(nml_group_t), private, allocatable :: tmp(:)

Source Code

   subroutine schema_add_group(this, g)
      !! MOVE a locally-built group into the schema — `g` is consumed
      !! (allocatables transferred). Move semantics on purpose: intrinsic
      !! assignment deep-copies the polymorphic key boxes, which NVHPC
      !! miscompiles (heap corruption); move_alloc transfers descriptors
      !! only. Error stop on duplicate name.
      class(nml_schema_t), intent(inout) :: this
      type(nml_group_t), intent(inout) :: g
      type(nml_group_t), allocatable :: tmp(:)
      integer :: n, i

      if (.not. allocated(this%groups)) allocate (this%groups(0))
      n = size(this%groups)
      do i = 1, n
         if (lower(this%groups(i)%name) == lower(g%name)) then
            call global_logger%error("duplicate group '"//g%name//"' in schema")
            error stop "rdb_nml_schema: duplicate group registration"
         end if
      end do
      allocate (tmp(n + 1))
      do i = 1, n
         call move_group(this%groups(i), tmp(i))
      end do
      call move_group(g, tmp(n + 1))
      call move_alloc(tmp, this%groups)
   end subroutine schema_add_group