register_tag Subroutine

private subroutine register_tag(cfg, e, tag, reader, grid, oor, dn1, dn2, di0, dj0, id, nx_extra, ny_extra, ierr)

Register one tag if it names a file, else leave id = 0. Shared time-axis settings come from the group; scale/add are per tag.

Arguments

Type IntentOptional Attributes Name
type(ocean_dataovr_config_t), intent(in) :: cfg
type(dataovr_entry_config_t), intent(in) :: e
character(len=*), intent(in) :: tag
type(ocean_data_input_t), intent(inout) :: reader
type(hgrid_t), intent(in) :: grid
integer, intent(in) :: oor
integer, intent(in) :: dn1
integer, intent(in) :: dn2
integer, intent(in) :: di0
integer, intent(in) :: dj0
integer, intent(out) :: id
integer, intent(in), optional :: nx_extra

Face-field slab widening; forwarded to the reader.

integer, intent(in), optional :: ny_extra

Face-field slab widening; forwarded to the reader.

integer, intent(out), optional :: ierr

Calls

proc~~register_tag~~CallsGraph proc~register_tag register_tag info info proc~register_tag->info proc~fail fail proc~register_tag->proc~fail proc~ocean_data_input_register_2d ocean_data_input_register_2d proc~register_tag->proc~ocean_data_input_register_2d to_string to_string proc~register_tag->to_string error error proc~fail->error proc~error_ring_push error_ring_push proc~fail->proc~error_ring_push proc~register_common register_common proc~ocean_data_input_register_2d->proc~register_common proc~register_common->proc~fail proc~register_common->to_string proc~register_common->error nf90_inq_varid nf90_inq_varid proc~register_common->nf90_inq_varid nf90_inquire_dimension nf90_inquire_dimension proc~register_common->nf90_inquire_dimension nf90_inquire_variable nf90_inquire_variable proc~register_common->nf90_inquire_variable proc~data_input_read_slab_impl data_input_read_slab_impl proc~register_common->proc~data_input_read_slab_impl proc~data_input_time_mode_from_string data_input_time_mode_from_string proc~register_common->proc~data_input_time_mode_from_string proc~data_input_time_scale_from_units data_input_time_scale_from_units proc~register_common->proc~data_input_time_scale_from_units proc~dims_geometry_ok dims_geometry_ok proc~register_common->proc~dims_geometry_ok proc~nc_check nc_check proc~register_common->proc~nc_check proc~nc_close nc_close proc~register_common->proc~nc_close proc~nc_get_att_text nc_get_att_text proc~register_common->proc~nc_get_att_text proc~nc_get_var_1d nc_get_var_1d proc~register_common->proc~nc_get_var_1d proc~nc_open_read nc_open_read proc~register_common->proc~nc_open_read proc~reg_io_ok reg_io_ok proc~register_common->proc~reg_io_ok proc~resolve_time_var resolve_time_var proc~register_common->proc~resolve_time_var proc~data_input_workspace_ensure data_input_workspace_ensure proc~data_input_read_slab_impl->proc~data_input_workspace_ensure proc~nc_get_var_slab_3d nc_get_var_slab_3d proc~data_input_read_slab_impl->proc~nc_get_var_slab_3d proc~data_input_time_mode_from_string->error to_lower to_lower proc~data_input_time_mode_from_string->to_lower proc~data_input_time_scale_from_units->to_lower proc~nc_check->proc~fail nf90_strerror nf90_strerror proc~nc_check->nf90_strerror proc~nc_close->proc~nc_check nf90_close nf90_close proc~nc_close->nf90_close nf90_get_att nf90_get_att proc~nc_get_att_text->nf90_get_att proc~nc_get_var_1d->proc~nc_check nf90_get_var nf90_get_var proc~nc_get_var_1d->nf90_get_var proc~nc_open_read->proc~nc_check nf90_open nf90_open proc~nc_open_read->nf90_open proc~reg_io_ok->proc~nc_close proc~resolve_time_var->nf90_inq_varid proc~resolve_time_var->nf90_inquire_dimension proc~nc_get_var_slab_3d->proc~nc_check proc~nc_get_var_slab_3d->nf90_get_var

Called by

proc~~register_tag~~CalledByGraph proc~register_tag register_tag proc~ocean_data_forcing_configure ocean_data_forcing_configure proc~ocean_data_forcing_configure->proc~register_tag proc~engine_setup engine_setup proc~engine_setup->proc~ocean_data_forcing_configure 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

Source Code

   subroutine register_tag(cfg, e, tag, reader, grid, oor, dn1, dn2, di0, dj0, id, &
                           nx_extra, ny_extra, ierr)
      !! Register one tag if it names a file, else leave `id = 0`.
      !! Shared time-axis settings come from the group; `scale`/`add`
      !! are per tag.
      type(ocean_dataovr_config_t), intent(in) :: cfg
      type(dataovr_entry_config_t), intent(in) :: e
      character(len=*), intent(in) :: tag
      type(ocean_data_input_t), intent(inout) :: reader
      type(hgrid_t), intent(in) :: grid
      integer, intent(in) :: oor, dn1, dn2, di0, dj0
      integer, intent(out) :: id
      integer, intent(in), optional :: nx_extra, ny_extra
         !! Face-field slab widening; forwarded to the reader.
      integer, intent(out), optional :: ierr

      if (present(ierr)) ierr = OCEAN_STATUS_OK
      id = 0
      if (len_trim(e%file) == 0) return

      if (len_trim(e%var) == 0) then
         call fail("&ocean_dataovr_nml: "//tag//"_file is set ('"//trim(e%file)// &
                   "') but "//tag//"_var is blank — name the variable explicitly "// &
                   "(no guessed fallbacks for forcing)", ierr, OCEAN_STATUS_ERR_SETUP)
         return
      end if

      call ocean_data_input_register_2d(reader, trim(e%file), trim(e%var), grid, &
                                        dn1, dn2, di0, dj0, id, &
                                        time_mode=trim(cfg%time_mode), &
                                        cycle_period=cfg%cycle_period, &
                                        t_offset=cfg%t_offset, &
                                        scale=e%scale, add_offset=e%add_offset, &
                                        oor=oor, nx_extra=nx_extra, ny_extra=ny_extra, ierr=ierr)
      if (present(ierr)) then
         if (ierr /= OCEAN_STATUS_OK) return
      end if

      call logger%info("ocean_dataovr: "//tag//" <- '"//trim(e%var)//"' in "//trim(e%file)// &
                       " (mode "//trim(cfg%time_mode)//", id "//to_string(id)//")")
   end subroutine register_tag