group_add Subroutine

private subroutine group_add(this, key)

Add a key to the group (sourced-allocate into a box). Error stop on duplicate key name (programming error).

Type Bound

nml_group_t

Arguments

Type IntentOptional Attributes Name
class(nml_group_t), intent(inout) :: this
class(nml_key_t), intent(in) :: key

Calls

proc~~group_add~~CallsGraph proc~group_add nml_group_t%group_add error error proc~group_add->error proc~lower lower proc~group_add->proc~lower

Called by

proc~~group_add~~CalledByGraph proc~group_add nml_group_t%group_add proc~add_dataovr_entry add_dataovr_entry proc~add_dataovr_entry->proc~group_add proc~register_boundary register_boundary proc~register_boundary->proc~group_add proc~register_conv register_conv proc~register_conv->proc~group_add proc~register_ddiff register_ddiff proc~register_ddiff->proc~group_add proc~register_epbl register_epbl proc~register_epbl->proc~group_add proc~register_foxkemper register_foxkemper proc~register_foxkemper->proc~group_add proc~register_gm register_gm proc~register_gm->proc~group_add proc~register_grid register_grid proc~register_grid->proc~group_add proc~register_initial_condition register_initial_condition proc~register_initial_condition->proc~group_add proc~register_kappa_shear register_kappa_shear proc~register_kappa_shear->proc~group_add proc~register_logging register_logging proc~register_logging->proc~group_add proc~register_meke register_meke proc~register_meke->proc~group_add proc~register_mpi register_mpi proc~register_mpi->proc~group_add proc~register_nonhydrostatic register_nonhydrostatic proc~register_nonhydrostatic->proc~group_add proc~register_ocean_bc register_ocean_bc proc~register_ocean_bc->proc~group_add proc~register_ocean_bdrag register_ocean_bdrag proc~register_ocean_bdrag->proc~group_add proc~register_ocean_bt register_ocean_bt proc~register_ocean_bt->proc~group_add proc~register_ocean_cavity_dyn register_ocean_cavity_dyn proc~register_ocean_cavity_dyn->proc~group_add proc~register_ocean_cavity_melt register_ocean_cavity_melt proc~register_ocean_cavity_melt->proc~group_add proc~register_ocean_continuity register_ocean_continuity proc~register_ocean_continuity->proc~group_add proc~register_ocean_coriolis register_ocean_coriolis proc~register_ocean_coriolis->proc~group_add proc~register_ocean_data register_ocean_data proc~register_ocean_data->proc~group_add proc~register_ocean_dataovr register_ocean_dataovr proc~register_ocean_dataovr->proc~group_add proc~register_ocean_dataovr->proc~add_dataovr_entry proc~register_ocean_debug register_ocean_debug proc~register_ocean_debug->proc~group_add proc~register_ocean_diag register_ocean_diag proc~register_ocean_diag->proc~group_add proc~register_ocean_eos register_ocean_eos proc~register_ocean_eos->proc~group_add proc~register_ocean_forcing register_ocean_forcing proc~register_ocean_forcing->proc~group_add proc~register_ocean_geothermal register_ocean_geothermal proc~register_ocean_geothermal->proc~group_add proc~register_ocean_grid register_ocean_grid proc~register_ocean_grid->proc~group_add proc~register_ocean_hdiff register_ocean_hdiff proc~register_ocean_hdiff->proc~group_add proc~register_ocean_hvisc register_ocean_hvisc proc~register_ocean_hvisc->proc~group_add proc~register_ocean_ic register_ocean_ic proc~register_ocean_ic->proc~group_add proc~register_ocean_ice register_ocean_ice proc~register_ocean_ice->proc~group_add proc~register_ocean_ice_ic register_ocean_ice_ic proc~register_ocean_ice_ic->proc~group_add proc~register_ocean_isopycnal register_ocean_isopycnal proc~register_ocean_isopycnal->proc~group_add proc~register_ocean_mpi register_ocean_mpi proc~register_ocean_mpi->proc~group_add proc~register_ocean_pgf register_ocean_pgf proc~register_ocean_pgf->proc~group_add proc~register_ocean_psurf register_ocean_psurf proc~register_ocean_psurf->proc~group_add proc~register_ocean_restore register_ocean_restore proc~register_ocean_restore->proc~group_add proc~register_ocean_sponge register_ocean_sponge proc~register_ocean_sponge->proc~group_add proc~register_ocean_tdrag register_ocean_tdrag proc~register_ocean_tdrag->proc~group_add proc~register_ocean_thermo register_ocean_thermo proc~register_ocean_thermo->proc~group_add proc~register_ocean_tides register_ocean_tides proc~register_ocean_tides->proc~group_add proc~register_ocean_topo register_ocean_topo proc~register_ocean_topo->proc~group_add proc~register_ocean_tracers register_ocean_tracers proc~register_ocean_tracers->proc~group_add proc~register_ocean_vdiff register_ocean_vdiff proc~register_ocean_vdiff->proc~group_add proc~register_ocean_vmix register_ocean_vmix proc~register_ocean_vmix->proc~group_add proc~register_ocean_wetdry register_ocean_wetdry proc~register_ocean_wetdry->proc~group_add proc~register_ocean_zinit register_ocean_zinit proc~register_ocean_zinit->proc~group_add proc~register_output register_output proc~register_output->proc~group_add proc~register_physics register_physics proc~register_physics->proc~group_add proc~register_porous register_porous proc~register_porous->proc~group_add proc~register_redi register_redi proc~register_redi->proc~group_add proc~register_sim register_sim proc~register_sim->proc~group_add proc~register_slopes register_slopes proc~register_slopes->proc~group_add proc~register_tidal_mixing register_tidal_mixing proc~register_tidal_mixing->proc~group_add proc~register_time register_time proc~register_time->proc~group_add proc~register_tracer register_tracer proc~register_tracer->proc~group_add proc~register_varmix register_varmix proc~register_varmix->proc~group_add proc~register_vcoord register_vcoord proc~register_vcoord->proc~group_add proc~register_wavespeed register_wavespeed proc~register_wavespeed->proc~group_add 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_key_box_t), private, allocatable :: tmp(:)

Source Code

   subroutine group_add(this, key)
      !! Add a key to the group (sourced-allocate into a box).  Error
      !! stop on duplicate key name (programming error).
      class(nml_group_t), intent(inout) :: this
      class(nml_key_t), intent(in) :: key
      type(nml_key_box_t), allocatable :: tmp(:)
      integer :: n, i

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