read_config_from_string Subroutine

public subroutine read_config_from_string(text, cfg, schema, ierr)

In-memory sibling of read_config: build + strict-parse + apply a namelist held entirely in the text buffer (newline- separated), with NO filesystem touch — no temp file, no chdir, no cleanup. Same validation behaviour as the file path (the schema parser and the native &ocean_bc_nml read both run from the in-memory line array); same error stop default and same optional non-aborting ierr as read_config.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: text

Whole namelist as one string (records separated by ‘\n’).

type(config_t), intent(out), target :: cfg
type(nml_schema_t), intent(out), optional :: schema
integer, intent(out), optional :: ierr

Non-zero on a strict-parse failure when present; absent behaves as today (error stop). The natural FFI/create() door: a bad namelist string becomes a returned status instead of aborting the host process.


Calls

proc~~read_config_from_string~~CallsGraph proc~read_config_from_string read_config_from_string proc~read_config_from_string_impl read_config_from_string_impl proc~read_config_from_string->proc~read_config_from_string_impl error error proc~read_config_from_string_impl->error parse_errors parse_errors proc~read_config_from_string_impl->parse_errors proc~apply_cartesian_degrees apply_cartesian_degrees proc~read_config_from_string_impl->proc~apply_cartesian_degrees proc~apply_time_unit_cascade apply_time_unit_cascade proc~read_config_from_string_impl->proc~apply_time_unit_cascade proc~build_rdb_schema build_rdb_schema proc~read_config_from_string_impl->proc~build_rdb_schema proc~error_ring_push error_ring_push proc~read_config_from_string_impl->proc~error_ring_push proc~schema_parse_lines nml_schema_t%schema_parse_lines proc~read_config_from_string_impl->proc~schema_parse_lines proc~split_to_lines split_to_lines proc~read_config_from_string_impl->proc~split_to_lines proc~apply_cartesian_degrees->error info info proc~apply_cartesian_degrees->info to_string to_string proc~apply_cartesian_degrees->to_string proc~apply_time_unit_cascade->error proc~register_boundary register_boundary proc~build_rdb_schema->proc~register_boundary proc~register_conv register_conv proc~build_rdb_schema->proc~register_conv proc~register_ddiff register_ddiff proc~build_rdb_schema->proc~register_ddiff proc~register_epbl register_epbl proc~build_rdb_schema->proc~register_epbl proc~register_foxkemper register_foxkemper proc~build_rdb_schema->proc~register_foxkemper proc~register_gm register_gm proc~build_rdb_schema->proc~register_gm proc~register_grid register_grid proc~build_rdb_schema->proc~register_grid proc~register_initial_condition register_initial_condition proc~build_rdb_schema->proc~register_initial_condition proc~register_kappa_shear register_kappa_shear proc~build_rdb_schema->proc~register_kappa_shear proc~register_logging register_logging proc~build_rdb_schema->proc~register_logging proc~register_meke register_meke proc~build_rdb_schema->proc~register_meke proc~register_mpi register_mpi proc~build_rdb_schema->proc~register_mpi proc~register_nonhydrostatic register_nonhydrostatic proc~build_rdb_schema->proc~register_nonhydrostatic proc~register_ocean_bc register_ocean_bc proc~build_rdb_schema->proc~register_ocean_bc proc~register_ocean_bdrag register_ocean_bdrag proc~build_rdb_schema->proc~register_ocean_bdrag proc~register_ocean_bt register_ocean_bt proc~build_rdb_schema->proc~register_ocean_bt proc~register_ocean_cavity_dyn register_ocean_cavity_dyn proc~build_rdb_schema->proc~register_ocean_cavity_dyn proc~register_ocean_cavity_melt register_ocean_cavity_melt proc~build_rdb_schema->proc~register_ocean_cavity_melt proc~register_ocean_continuity register_ocean_continuity proc~build_rdb_schema->proc~register_ocean_continuity proc~register_ocean_coriolis register_ocean_coriolis proc~build_rdb_schema->proc~register_ocean_coriolis proc~register_ocean_data register_ocean_data proc~build_rdb_schema->proc~register_ocean_data proc~register_ocean_dataovr register_ocean_dataovr proc~build_rdb_schema->proc~register_ocean_dataovr proc~register_ocean_debug register_ocean_debug proc~build_rdb_schema->proc~register_ocean_debug proc~register_ocean_diag register_ocean_diag proc~build_rdb_schema->proc~register_ocean_diag proc~register_ocean_eos register_ocean_eos proc~build_rdb_schema->proc~register_ocean_eos proc~register_ocean_forcing register_ocean_forcing proc~build_rdb_schema->proc~register_ocean_forcing proc~register_ocean_geothermal register_ocean_geothermal proc~build_rdb_schema->proc~register_ocean_geothermal proc~register_ocean_grid register_ocean_grid proc~build_rdb_schema->proc~register_ocean_grid proc~register_ocean_hdiff register_ocean_hdiff proc~build_rdb_schema->proc~register_ocean_hdiff proc~register_ocean_hvisc register_ocean_hvisc proc~build_rdb_schema->proc~register_ocean_hvisc proc~register_ocean_ic register_ocean_ic proc~build_rdb_schema->proc~register_ocean_ic proc~register_ocean_ice register_ocean_ice proc~build_rdb_schema->proc~register_ocean_ice proc~register_ocean_ice_ic register_ocean_ice_ic proc~build_rdb_schema->proc~register_ocean_ice_ic proc~register_ocean_isopycnal register_ocean_isopycnal proc~build_rdb_schema->proc~register_ocean_isopycnal proc~register_ocean_mpi register_ocean_mpi proc~build_rdb_schema->proc~register_ocean_mpi proc~register_ocean_pgf register_ocean_pgf proc~build_rdb_schema->proc~register_ocean_pgf proc~register_ocean_psurf register_ocean_psurf proc~build_rdb_schema->proc~register_ocean_psurf proc~register_ocean_restore register_ocean_restore proc~build_rdb_schema->proc~register_ocean_restore proc~register_ocean_sponge register_ocean_sponge proc~build_rdb_schema->proc~register_ocean_sponge proc~register_ocean_tdrag register_ocean_tdrag proc~build_rdb_schema->proc~register_ocean_tdrag proc~register_ocean_thermo register_ocean_thermo proc~build_rdb_schema->proc~register_ocean_thermo proc~register_ocean_tides register_ocean_tides proc~build_rdb_schema->proc~register_ocean_tides proc~register_ocean_topo register_ocean_topo proc~build_rdb_schema->proc~register_ocean_topo proc~register_ocean_tracers register_ocean_tracers proc~build_rdb_schema->proc~register_ocean_tracers proc~register_ocean_vdiff register_ocean_vdiff proc~build_rdb_schema->proc~register_ocean_vdiff proc~register_ocean_vmix register_ocean_vmix proc~build_rdb_schema->proc~register_ocean_vmix proc~register_ocean_wetdry register_ocean_wetdry proc~build_rdb_schema->proc~register_ocean_wetdry proc~register_ocean_zinit register_ocean_zinit proc~build_rdb_schema->proc~register_ocean_zinit proc~register_output register_output proc~build_rdb_schema->proc~register_output proc~register_physics register_physics proc~build_rdb_schema->proc~register_physics proc~register_porous register_porous proc~build_rdb_schema->proc~register_porous proc~register_redi register_redi proc~build_rdb_schema->proc~register_redi proc~register_sim register_sim proc~build_rdb_schema->proc~register_sim proc~register_slopes register_slopes proc~build_rdb_schema->proc~register_slopes proc~register_tidal_mixing register_tidal_mixing proc~build_rdb_schema->proc~register_tidal_mixing proc~register_time register_time proc~build_rdb_schema->proc~register_time proc~register_tracer register_tracer proc~build_rdb_schema->proc~register_tracer proc~register_varmix register_varmix proc~build_rdb_schema->proc~register_varmix proc~register_vcoord register_vcoord proc~build_rdb_schema->proc~register_vcoord proc~register_wavespeed register_wavespeed proc~build_rdb_schema->proc~register_wavespeed proc~parse_from_lines parse_from_lines proc~schema_parse_lines->proc~parse_from_lines proc~post_parse_validate post_parse_validate proc~schema_parse_lines->proc~post_parse_validate proc~reset_state reset_state proc~schema_parse_lines->proc~reset_state proc~add_err add_err proc~parse_from_lines->proc~add_err proc~dispatch_group dispatch_group proc~parse_from_lines->proc~dispatch_group proc~make_prefix make_prefix proc~parse_from_lines->proc~make_prefix proc~next_amp next_amp proc~parse_from_lines->proc~next_amp proc~read_group_name read_group_name proc~parse_from_lines->proc~read_group_name proc~skip_to_slash skip_to_slash proc~parse_from_lines->proc~skip_to_slash proc~post_parse_validate->error proc~post_parse_validate->proc~error_ring_push proc~post_parse_validate->proc~add_err proc~group_add nml_group_t%group_add proc~register_boundary->proc~group_add proc~nml_enum nml_enum proc~register_boundary->proc~nml_enum proc~nml_int nml_int proc~register_boundary->proc~nml_int proc~nml_real nml_real proc~register_boundary->proc~nml_real proc~nml_real_array nml_real_array proc~register_boundary->proc~nml_real_array proc~schema_add_group nml_schema_t%schema_add_group proc~register_boundary->proc~schema_add_group proc~register_conv->proc~group_add proc~nml_logical nml_logical proc~register_conv->proc~nml_logical proc~register_conv->proc~nml_real proc~register_conv->proc~schema_add_group proc~register_ddiff->proc~group_add proc~register_ddiff->proc~nml_logical proc~register_ddiff->proc~nml_real proc~register_ddiff->proc~schema_add_group proc~register_epbl->proc~group_add proc~register_epbl->proc~nml_enum proc~register_epbl->proc~nml_int proc~register_epbl->proc~nml_logical proc~register_epbl->proc~nml_real proc~register_epbl->proc~schema_add_group proc~register_foxkemper->proc~group_add proc~register_foxkemper->proc~nml_logical proc~register_foxkemper->proc~nml_real proc~register_foxkemper->proc~schema_add_group proc~register_gm->proc~group_add proc~register_gm->proc~nml_logical proc~register_gm->proc~nml_real proc~register_gm->proc~schema_add_group proc~register_grid->proc~group_add proc~register_grid->proc~nml_int proc~register_grid->proc~nml_real proc~register_grid->proc~schema_add_group proc~register_initial_condition->proc~group_add proc~register_initial_condition->proc~nml_real proc~register_initial_condition->proc~schema_add_group proc~register_kappa_shear->proc~group_add proc~register_kappa_shear->proc~nml_int proc~register_kappa_shear->proc~nml_logical proc~register_kappa_shear->proc~nml_real proc~register_kappa_shear->proc~schema_add_group proc~register_logging->proc~group_add proc~register_logging->proc~nml_enum proc~register_logging->proc~nml_real proc~register_logging->proc~schema_add_group proc~register_meke->proc~group_add proc~register_meke->proc~nml_logical proc~register_meke->proc~nml_real proc~register_meke->proc~schema_add_group proc~register_mpi->proc~group_add proc~register_mpi->proc~nml_int proc~register_mpi->proc~schema_add_group proc~register_nonhydrostatic->proc~group_add proc~register_nonhydrostatic->proc~nml_int proc~register_nonhydrostatic->proc~nml_logical proc~register_nonhydrostatic->proc~nml_real proc~register_nonhydrostatic->proc~schema_add_group proc~register_ocean_bc->proc~group_add proc~register_ocean_bc->proc~nml_enum proc~register_ocean_bc->proc~nml_int proc~register_ocean_bc->proc~nml_logical proc~register_ocean_bc->proc~nml_real proc~register_ocean_bc->proc~nml_real_array proc~register_ocean_bc->proc~schema_add_group proc~register_ocean_bdrag->proc~group_add proc~register_ocean_bdrag->proc~nml_enum proc~register_ocean_bdrag->proc~nml_logical proc~register_ocean_bdrag->proc~nml_real proc~register_ocean_bdrag->proc~schema_add_group proc~register_ocean_bt->proc~group_add proc~register_ocean_bt->proc~nml_enum proc~register_ocean_bt->proc~nml_int proc~register_ocean_bt->proc~nml_logical proc~register_ocean_bt->proc~nml_real proc~nml_string nml_string proc~register_ocean_bt->proc~nml_string proc~register_ocean_bt->proc~schema_add_group proc~register_ocean_cavity_dyn->proc~group_add proc~register_ocean_cavity_dyn->proc~nml_enum proc~register_ocean_cavity_dyn->proc~nml_logical proc~register_ocean_cavity_dyn->proc~nml_real proc~register_ocean_cavity_dyn->proc~nml_string proc~register_ocean_cavity_dyn->proc~schema_add_group proc~register_ocean_cavity_melt->proc~group_add proc~register_ocean_cavity_melt->proc~nml_enum proc~register_ocean_cavity_melt->proc~nml_logical proc~register_ocean_cavity_melt->proc~nml_real proc~register_ocean_cavity_melt->proc~schema_add_group proc~register_ocean_continuity->proc~group_add proc~register_ocean_continuity->proc~nml_logical proc~register_ocean_continuity->proc~nml_real proc~register_ocean_continuity->proc~schema_add_group proc~register_ocean_coriolis->proc~group_add proc~register_ocean_coriolis->proc~nml_enum proc~register_ocean_coriolis->proc~nml_logical proc~register_ocean_coriolis->proc~schema_add_group proc~register_ocean_data->proc~group_add proc~register_ocean_data->proc~nml_int proc~register_ocean_data->proc~nml_logical proc~register_ocean_data->proc~schema_add_group proc~add_dataovr_entry add_dataovr_entry proc~register_ocean_dataovr->proc~add_dataovr_entry proc~register_ocean_dataovr->proc~group_add proc~register_ocean_dataovr->proc~nml_enum proc~register_ocean_dataovr->proc~nml_logical proc~register_ocean_dataovr->proc~nml_real proc~register_ocean_dataovr->proc~schema_add_group proc~register_ocean_debug->proc~group_add proc~register_ocean_debug->proc~nml_int proc~register_ocean_debug->proc~nml_logical proc~register_ocean_debug->proc~schema_add_group proc~register_ocean_diag->proc~group_add proc~register_ocean_diag->proc~nml_enum proc~register_ocean_diag->proc~nml_int proc~register_ocean_diag->proc~nml_logical proc~register_ocean_diag->proc~nml_real proc~register_ocean_diag->proc~nml_real_array proc~register_ocean_diag->proc~nml_string proc~register_ocean_diag->proc~schema_add_group proc~register_ocean_eos->proc~group_add proc~register_ocean_eos->proc~nml_enum proc~register_ocean_eos->proc~nml_real proc~register_ocean_eos->proc~schema_add_group proc~register_ocean_forcing->proc~group_add proc~register_ocean_forcing->proc~nml_logical proc~register_ocean_forcing->proc~schema_add_group proc~register_ocean_geothermal->proc~group_add proc~register_ocean_geothermal->proc~nml_logical proc~register_ocean_geothermal->proc~nml_real proc~register_ocean_geothermal->proc~schema_add_group proc~register_ocean_grid->proc~group_add proc~register_ocean_grid->proc~nml_enum proc~register_ocean_grid->proc~nml_real proc~register_ocean_grid->proc~nml_string proc~register_ocean_grid->proc~schema_add_group proc~register_ocean_hdiff->proc~group_add proc~register_ocean_hdiff->proc~nml_real proc~register_ocean_hdiff->proc~schema_add_group proc~register_ocean_hvisc->proc~group_add proc~register_ocean_hvisc->proc~nml_enum proc~register_ocean_hvisc->proc~nml_int proc~register_ocean_hvisc->proc~nml_logical proc~register_ocean_hvisc->proc~nml_real proc~register_ocean_hvisc->proc~nml_real_array proc~register_ocean_hvisc->proc~schema_add_group proc~register_ocean_ic->proc~group_add proc~register_ocean_ic->proc~nml_enum proc~register_ocean_ic->proc~nml_int proc~register_ocean_ic->proc~nml_real proc~register_ocean_ic->proc~nml_real_array proc~register_ocean_ic->proc~schema_add_group proc~register_ocean_ice->proc~group_add proc~register_ocean_ice->proc~nml_int proc~register_ocean_ice->proc~nml_logical proc~register_ocean_ice->proc~nml_real proc~register_ocean_ice->proc~nml_real_array proc~register_ocean_ice->proc~schema_add_group proc~register_ocean_ice_ic->proc~group_add proc~register_ocean_ice_ic->proc~nml_enum proc~register_ocean_ice_ic->proc~nml_real proc~register_ocean_ice_ic->proc~schema_add_group proc~register_ocean_isopycnal->proc~group_add proc~register_ocean_isopycnal->proc~nml_logical proc~register_ocean_isopycnal->proc~nml_real proc~register_ocean_isopycnal->proc~schema_add_group proc~register_ocean_mpi->proc~group_add proc~register_ocean_mpi->proc~nml_logical proc~register_ocean_mpi->proc~schema_add_group proc~register_ocean_pgf->proc~group_add proc~register_ocean_pgf->proc~nml_enum proc~register_ocean_pgf->proc~nml_int proc~register_ocean_pgf->proc~nml_logical proc~register_ocean_pgf->proc~nml_real proc~register_ocean_pgf->proc~schema_add_group proc~register_ocean_psurf->proc~group_add proc~register_ocean_psurf->proc~nml_logical proc~register_ocean_psurf->proc~nml_real proc~register_ocean_psurf->proc~schema_add_group proc~register_ocean_restore->proc~group_add proc~register_ocean_restore->proc~nml_logical proc~register_ocean_restore->proc~nml_real proc~register_ocean_restore->proc~schema_add_group proc~register_ocean_sponge->proc~group_add proc~register_ocean_sponge->proc~nml_enum proc~register_ocean_sponge->proc~nml_int proc~register_ocean_sponge->proc~nml_logical proc~register_ocean_sponge->proc~nml_real proc~register_ocean_sponge->proc~schema_add_group proc~register_ocean_tdrag->proc~group_add proc~register_ocean_tdrag->proc~nml_enum proc~register_ocean_tdrag->proc~nml_logical proc~register_ocean_tdrag->proc~nml_real proc~register_ocean_tdrag->proc~schema_add_group proc~register_ocean_thermo->proc~group_add proc~register_ocean_thermo->proc~nml_enum proc~register_ocean_thermo->proc~nml_logical proc~register_ocean_thermo->proc~nml_real proc~register_ocean_thermo->proc~schema_add_group proc~register_ocean_tides->proc~group_add proc~register_ocean_tides->proc~nml_logical proc~register_ocean_tides->proc~nml_real proc~register_ocean_tides->proc~nml_string proc~register_ocean_tides->proc~schema_add_group proc~register_ocean_topo->proc~group_add proc~register_ocean_topo->proc~nml_enum proc~register_ocean_topo->proc~nml_real proc~register_ocean_topo->proc~schema_add_group proc~register_ocean_tracers->proc~group_add proc~register_ocean_tracers->proc~nml_logical proc~register_ocean_tracers->proc~nml_real proc~register_ocean_tracers->proc~schema_add_group proc~register_ocean_vdiff->proc~group_add proc~register_ocean_vdiff->proc~nml_logical proc~register_ocean_vdiff->proc~nml_real proc~register_ocean_vdiff->proc~schema_add_group proc~register_ocean_vmix->proc~group_add proc~register_ocean_vmix->proc~nml_enum proc~register_ocean_vmix->proc~nml_int proc~register_ocean_vmix->proc~nml_logical proc~register_ocean_vmix->proc~nml_real proc~register_ocean_vmix->proc~schema_add_group proc~register_ocean_wetdry->proc~group_add proc~register_ocean_wetdry->proc~nml_logical proc~register_ocean_wetdry->proc~nml_real proc~register_ocean_wetdry->proc~schema_add_group proc~register_ocean_zinit->proc~group_add proc~register_ocean_zinit->proc~nml_enum proc~register_ocean_zinit->proc~nml_logical proc~register_ocean_zinit->proc~nml_real proc~register_ocean_zinit->proc~nml_string proc~register_ocean_zinit->proc~schema_add_group proc~register_output->proc~group_add proc~register_output->proc~nml_int proc~register_output->proc~nml_logical proc~register_output->proc~nml_real proc~register_output->proc~nml_string proc~register_output->proc~schema_add_group proc~register_physics->proc~group_add proc~register_physics->proc~nml_real proc~register_physics->proc~schema_add_group proc~register_porous->proc~group_add proc~register_porous->proc~nml_enum proc~register_porous->proc~nml_logical proc~register_porous->proc~nml_real proc~register_porous->proc~schema_add_group proc~register_redi->proc~group_add proc~register_redi->proc~nml_logical proc~register_redi->proc~nml_real proc~register_redi->proc~schema_add_group proc~register_sim->proc~group_add proc~register_sim->proc~nml_enum proc~register_sim->proc~schema_add_group proc~register_slopes->proc~group_add proc~register_slopes->proc~nml_logical proc~register_slopes->proc~nml_real proc~register_slopes->proc~schema_add_group proc~register_tidal_mixing->proc~group_add proc~register_tidal_mixing->proc~nml_logical proc~register_tidal_mixing->proc~nml_real proc~register_tidal_mixing->proc~schema_add_group proc~register_time->proc~group_add proc~register_time->proc~nml_int proc~register_time->proc~nml_real proc~register_time->proc~nml_string proc~register_time->proc~schema_add_group proc~register_tracer->proc~group_add proc~register_tracer->proc~nml_real proc~register_tracer->proc~schema_add_group proc~register_varmix->proc~group_add proc~register_varmix->proc~nml_int proc~register_varmix->proc~nml_logical proc~register_varmix->proc~nml_real proc~register_varmix->proc~schema_add_group proc~register_vcoord->proc~group_add proc~register_vcoord->proc~nml_enum proc~register_vcoord->proc~nml_int proc~register_vcoord->proc~nml_logical proc~register_vcoord->proc~nml_real proc~register_vcoord->proc~nml_real_array proc~register_vcoord->proc~schema_add_group proc~register_wavespeed->proc~group_add proc~register_wavespeed->proc~nml_int proc~register_wavespeed->proc~nml_logical proc~register_wavespeed->proc~nml_real proc~register_wavespeed->proc~schema_add_group proc~add_dataovr_entry->proc~group_add proc~add_dataovr_entry->proc~nml_real proc~add_dataovr_entry->proc~nml_string proc~dispatch_group->proc~add_err proc~dispatch_group->proc~skip_to_slash names names proc~dispatch_group->names proc~group_name_list group_name_list proc~dispatch_group->proc~group_name_list proc~parse_group_body parse_group_body proc~dispatch_group->proc~parse_group_body proc~schema_find_group nml_schema_t%schema_find_group proc~dispatch_group->proc~schema_find_group proc~schema_is_external nml_schema_t%schema_is_external proc~dispatch_group->proc~schema_is_external proc~strip_nml strip_nml proc~dispatch_group->proc~strip_nml proc~suggest suggest proc~dispatch_group->proc~suggest proc~group_add->error proc~lower lower proc~group_add->proc~lower proc~fmt_int fmt_int proc~make_prefix->proc~fmt_int proc~strip_comment strip_comment proc~next_amp->proc~strip_comment proc~is_ident_char is_ident_char proc~read_group_name->proc~is_ident_char proc~read_group_name->proc~strip_comment proc~schema_add_group->error proc~schema_add_group->proc~lower proc~move_group move_group proc~schema_add_group->proc~move_group proc~skip_to_slash->proc~strip_comment

Called by

proc~~read_config_from_string~~CalledByGraph proc~read_config_from_string read_config_from_string proc~build_pending_handle build_pending_handle proc~build_pending_handle->proc~read_config_from_string proc~rdb_ocean_create_from_string rdb_ocean_create_from_string proc~rdb_ocean_create_from_string->proc~build_pending_handle proc~rdb_ocean_create_pending rdb_ocean_create_pending proc~rdb_ocean_create_pending->proc~build_pending_handle

Source Code

   subroutine read_config_from_string(text, cfg, schema, ierr)
      !! In-memory sibling of [[read_config]]: build + strict-parse +
      !! apply a namelist held entirely in the `text` buffer (newline-
      !! separated), with NO filesystem touch — no temp file, no `chdir`,
      !! no cleanup.  Same validation behaviour as the file path (the
      !! schema parser and the native &ocean_bc_nml read both run from
      !! the in-memory line array); same `error stop` default and same
      !! optional non-aborting `ierr` as [[read_config]].
      character(len=*), intent(in) :: text
         !! Whole namelist as one string (records separated by '\n').
      type(config_t), target, intent(out) :: cfg
      type(nml_schema_t), intent(out), optional :: schema
      integer, intent(out), optional :: ierr
         !! Non-zero on a strict-parse failure when present; absent
         !! behaves as today (`error stop`). The natural FFI/create()
         !! door: a bad namelist string becomes a returned status
         !! instead of aborting the host process.

      if (present(schema)) then
         call read_config_from_string_impl(text, cfg, schema, ierr=ierr)
      else
         block
            type(nml_schema_t) :: sch
            call read_config_from_string_impl(text, cfg, sch, ierr=ierr)
         end block
      end if
   end subroutine read_config_from_string