ocean_pseudo_salt_register Subroutine

public subroutine ocean_pseudo_salt_register(ms, grid)

Setup-time entry point: registers the “pseudo_salt” passive tracer (name/units/long_name copied verbatim from Shao 2016) and records its slot on ms%idx_pseudo_salt. MUST be called after ms%init and before enter_data — and, on the ocean path, before ocean_bc_state_init sizes bc%n_tracers (the register_passive_tracer contract). error stops on refusal (mirrors rdb_state.F90’s treatment of a fatal setup misconfiguration — a caller that reaches here has already decided to register, so a silent no-op would be worse than a loud abort).

Arguments

Type IntentOptional Attributes Name
type(multilayer_state_t), intent(inout) :: ms
type(hgrid_t), intent(in) :: grid

Calls

proc~~ocean_pseudo_salt_register~~CallsGraph proc~ocean_pseudo_salt_register ocean_pseudo_salt_register error error proc~ocean_pseudo_salt_register->error proc~error_ring_push error_ring_push proc~ocean_pseudo_salt_register->proc~error_ring_push proc~multilayer_register_passive_tracer multilayer_state_t%multilayer_register_passive_tracer proc~ocean_pseudo_salt_register->proc~multilayer_register_passive_tracer proc~multilayer_register_passive_tracer->error proc~multilayer_register_passive_tracer->proc~error_ring_push proc~tracer_init tracer_t%tracer_init proc~multilayer_register_passive_tracer->proc~tracer_init

Called by

proc~~ocean_pseudo_salt_register~~CalledByGraph proc~ocean_pseudo_salt_register ocean_pseudo_salt_register proc~ocean_state_init ocean_state_t%ocean_state_init proc~ocean_state_init->proc~ocean_pseudo_salt_register proc~ocean_state_init_from_config ocean_state_t%ocean_state_init_from_config proc~ocean_state_init_from_config->proc~ocean_state_init proc~engine_setup engine_setup proc~engine_setup->proc~ocean_state_init_from_config proc~complete_ocean_create complete_ocean_create proc~complete_ocean_create->proc~engine_setup proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_setup proc~driver_validate driver_validate proc~driver_validate->proc~engine_setup proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean proc~rdb_ocean_create_finalize rdb_ocean_create_finalize proc~rdb_ocean_create_finalize->proc~complete_ocean_create proc~rdb_ocean_create_from_string rdb_ocean_create_from_string proc~rdb_ocean_create_from_string->proc~complete_ocean_create

Variables

Type Visibility Attributes Name Initial
integer, private :: idx

Source Code

   subroutine ocean_pseudo_salt_register(ms, grid)
      !! Setup-time entry point: registers the "pseudo_salt" passive
      !! tracer (name/units/long_name copied verbatim from Shao 2016)
      !! and records its slot on `ms%idx_pseudo_salt`.  MUST be called
      !! after `ms%init` and before `enter_data` — and, on the ocean
      !! path, before `ocean_bc_state_init` sizes `bc%n_tracers` (the
      !! `register_passive_tracer` contract).  `error stop`s on
      !! refusal (mirrors `rdb_state.F90`'s treatment of a fatal setup
      !! misconfiguration — a caller that reaches here has already
      !! decided to register, so a silent no-op would be worse than a
      !! loud abort).
      type(multilayer_state_t), intent(inout) :: ms
      type(hgrid_t), intent(in) :: grid

      integer :: idx

      call ms%register_passive_tracer(grid, "pseudo_salt", "psu", &
                                      "Pseudo salt passive tracer", idx)
      if (idx <= 0) then
         call error_ring_push("ocean_pseudo_salt_register: "// &
                              "register_passive_tracer refused (registry "// &
                              "not initialised, or already locked by enter_data)")
         call global_logger%error("ocean_pseudo_salt_register: "// &
                                  "register_passive_tracer refused (registry "// &
                                  "not initialised, or already locked by enter_data)")
         error stop "ocean_pseudo_salt_register: registration refused"
      end if
      ms%idx_pseudo_salt = idx
   end subroutine ocean_pseudo_salt_register