nc_check Subroutine

public subroutine nc_check(status, context, ierr)

Check NetCDF return status and log error if it failed

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: status

Return code from nf90_* call

character(len=*), intent(in) :: context

Description of what was being attempted

integer, intent(out), optional :: ierr

Non-zero (the raw nf90_* status) on failure when present; absent behaves as today (error stop). The specific reason is always logged via global_logger%error first, so the caller-facing code only needs to say THAT a read/write failed.


Calls

proc~~nc_check~~CallsGraph proc~nc_check nc_check nf90_strerror nf90_strerror proc~nc_check->nf90_strerror proc~fail fail proc~nc_check->proc~fail error error proc~fail->error proc~error_ring_push error_ring_push proc~fail->proc~error_ring_push

Called by

proc~~nc_check~~CalledByGraph proc~nc_check nc_check proc~load_bathymetry_into_array load_bathymetry_into_array proc~load_bathymetry_into_array->proc~nc_check proc~nc_close nc_close proc~load_bathymetry_into_array->proc~nc_close proc~nc_get_dim_len nc_get_dim_len proc~load_bathymetry_into_array->proc~nc_get_dim_len proc~nc_get_var_slab_2d nc_get_var_slab_2d proc~load_bathymetry_into_array->proc~nc_get_var_slab_2d proc~nc_open_read nc_open_read proc~load_bathymetry_into_array->proc~nc_open_read proc~bathy_io_ok bathy_io_ok proc~load_bathymetry_into_array->proc~bathy_io_ok proc~nc_close->proc~nc_check proc~nc_create_file nc_create_file proc~nc_create_file->proc~nc_check proc~nc_def_dim nc_def_dim proc~nc_def_dim->proc~nc_check proc~nc_def_var_2d nc_def_var_2d proc~nc_def_var_2d->proc~nc_check proc~nc_def_var_3d nc_def_var_3d proc~nc_def_var_3d->proc~nc_check proc~nc_def_var_4d nc_def_var_4d proc~nc_def_var_4d->proc~nc_check proc~nc_emit_post_fire nc_emit_post_fire proc~nc_emit_post_fire->proc~nc_check proc~nc_put_var_3d_slice nc_put_var_3d_slice proc~nc_emit_post_fire->proc~nc_put_var_3d_slice proc~nc_put_var_3d_slice_r4 nc_put_var_3d_slice_r4 proc~nc_emit_post_fire->proc~nc_put_var_3d_slice_r4 proc~nc_put_var_4d_slice nc_put_var_4d_slice proc~nc_emit_post_fire->proc~nc_put_var_4d_slice proc~nc_put_var_4d_slice_r4 nc_put_var_4d_slice_r4 proc~nc_emit_post_fire->proc~nc_put_var_4d_slice_r4 proc~nc_enddef nc_enddef proc~nc_enddef->proc~nc_check proc~nc_get_att_int nc_get_att_int proc~nc_get_att_int->proc~nc_check proc~nc_get_dim_len->proc~nc_check proc~nc_get_var_1d nc_get_var_1d proc~nc_get_var_1d->proc~nc_check proc~nc_get_var_2d nc_get_var_2d proc~nc_get_var_2d->proc~nc_check proc~nc_get_var_3d nc_get_var_3d proc~nc_get_var_3d->proc~nc_check proc~nc_get_var_slab_2d->proc~nc_check proc~nc_get_var_slab_3d nc_get_var_slab_3d proc~nc_get_var_slab_3d->proc~nc_check proc~nc_get_varid nc_get_varid proc~nc_get_varid->proc~nc_check proc~nc_get_varid~2 nc_get_varid proc~nc_get_varid~2->proc~nc_check proc~nc_open_read->proc~nc_check proc~nc_open_write nc_open_write proc~nc_open_write->proc~nc_check proc~nc_put_att nc_put_att proc~nc_put_att->proc~nc_check proc~nc_put_att_global nc_put_att_global proc~nc_put_att_global->proc~nc_check proc~nc_put_att_global_int nc_put_att_global_int proc~nc_put_att_global_int->proc~nc_check proc~nc_put_att_int nc_put_att_int proc~nc_put_att_int->proc~nc_check proc~nc_put_att_real nc_put_att_real proc~nc_put_att_real->proc~nc_check proc~nc_put_att_real_r4 nc_put_att_real_r4 proc~nc_put_att_real_r4->proc~nc_check proc~nc_put_var_2d nc_put_var_2d proc~nc_put_var_2d->proc~nc_check proc~nc_put_var_3d_slice->proc~nc_check proc~nc_put_var_3d_slice_r4->proc~nc_check proc~nc_put_var_4d_slice->proc~nc_check proc~nc_put_var_4d_slice_r4->proc~nc_check proc~ocean_restart_read_local ocean_restart_read_local proc~ocean_restart_read_local->proc~nc_check proc~ocean_restart_read_local->proc~nc_close proc~ocean_restart_read_local->proc~nc_get_varid proc~ocean_restart_read_local->proc~nc_open_read proc~ocean_restart_check_decomp ocean_restart_check_decomp proc~ocean_restart_read_local->proc~ocean_restart_check_decomp proc~ocean_restart_write_local ocean_restart_write_local proc~ocean_restart_write_local->proc~nc_check proc~ocean_restart_write_local->proc~nc_close proc~ocean_restart_write_local->proc~nc_create_file proc~ocean_restart_write_local->proc~nc_def_dim proc~ocean_restart_write_local->proc~nc_enddef proc~ocean_restart_write_local->proc~nc_put_att_global proc~ocean_restart_write_local->proc~nc_put_att_global_int proc~restart_io_ok restart_io_ok proc~ocean_restart_write_local->proc~restart_io_ok proc~rdb_def_var_1d rdb_def_var_1d proc~rdb_def_var_1d->proc~nc_check proc~rdb_put_var_1d rdb_put_var_1d proc~rdb_put_var_1d->proc~nc_check proc~rdb_put_var_2d_slice rdb_put_var_2d_slice proc~rdb_put_var_2d_slice->proc~nc_check proc~read_dims read_dims proc~read_dims->proc~nc_check proc~read_dims->proc~nc_close proc~zinit_io_ok zinit_io_ok proc~read_dims->proc~zinit_io_ok proc~register_common register_common proc~register_common->proc~nc_check proc~register_common->proc~nc_close proc~register_common->proc~nc_get_var_1d proc~register_common->proc~nc_open_read proc~data_input_read_slab_impl data_input_read_slab_impl proc~register_common->proc~data_input_read_slab_impl proc~reg_io_ok reg_io_ok proc~register_common->proc~reg_io_ok proc~bathy_io_ok->proc~nc_close proc~close_stream close_stream proc~close_stream->proc~nc_close proc~data_input_read_slab_impl->proc~nc_get_var_slab_3d proc~diag_io_ok diag_io_ok proc~diag_io_ok->proc~nc_close proc~find_var find_var proc~find_var->proc~nc_close proc~metrics_fill_from_supergrid metrics_fill_from_supergrid proc~metrics_fill_from_supergrid->proc~nc_close proc~metrics_fill_from_supergrid->proc~nc_get_dim_len proc~metrics_fill_from_supergrid->proc~nc_get_var_slab_2d proc~metrics_fill_from_supergrid->proc~nc_get_varid~2 proc~metrics_fill_from_supergrid->proc~nc_open_read proc~supergrid_io_ok supergrid_io_ok proc~metrics_fill_from_supergrid->proc~supergrid_io_ok proc~ocean_data_input_destroy ocean_data_input_t%ocean_data_input_destroy proc~ocean_data_input_destroy->proc~nc_close proc~ocean_data_input_register_2d ocean_data_input_register_2d proc~ocean_data_input_register_2d->proc~register_common proc~ocean_data_input_register_3d ocean_data_input_register_3d proc~ocean_data_input_register_3d->proc~register_common proc~ocean_data_input_register_segment_2d ocean_data_input_register_segment_2d proc~ocean_data_input_register_segment_2d->proc~register_common proc~ocean_data_input_register_segment_3d ocean_data_input_register_segment_3d proc~ocean_data_input_register_segment_3d->proc~register_common proc~ocean_restart_check_decomp->proc~nc_close proc~ocean_restart_check_decomp->proc~nc_get_att_int proc~ocean_restart_check_decomp->proc~nc_open_read proc~ocean_state_restart_read ocean_state_restart_read proc~ocean_state_restart_read->proc~ocean_restart_read_local proc~ocean_state_restart_write ocean_state_restart_write proc~ocean_state_restart_write->proc~ocean_restart_write_local proc~ocean_state_restart_write_drop_field ocean_state_restart_write_drop_field proc~ocean_state_restart_write_drop_field->proc~ocean_restart_write_local proc~ocean_state_seed_from_cfg ocean_state_seed_from_cfg proc~ocean_state_seed_from_cfg->proc~load_bathymetry_into_array proc~seed_zinit_overlay seed_zinit_overlay proc~ocean_state_seed_from_cfg->proc~seed_zinit_overlay proc~seed_cavity_draft seed_cavity_draft proc~ocean_state_seed_from_cfg->proc~seed_cavity_draft proc~open_stream open_stream proc~open_stream->proc~nc_create_file proc~open_stream->proc~nc_def_dim proc~open_stream->proc~nc_def_var_3d proc~open_stream->proc~nc_def_var_4d proc~open_stream->proc~nc_enddef proc~open_stream->proc~nc_put_att proc~open_stream->proc~nc_put_att_global proc~open_stream->proc~nc_put_att_global_int proc~open_stream->proc~nc_put_att_real proc~open_stream->proc~nc_put_att_real_r4 proc~open_stream->proc~rdb_def_var_1d proc~open_stream->proc~diag_io_ok proc~read_field_xyz read_field_xyz proc~read_field_xyz->proc~nc_get_var_slab_3d proc~reg_io_ok->proc~nc_close proc~restart_io_ok->proc~nc_close proc~seed_ts_from_zfile seed_ts_from_zfile proc~seed_ts_from_zfile->proc~nc_close proc~seed_ts_from_zfile->proc~nc_get_var_1d proc~seed_ts_from_zfile->proc~nc_open_read proc~seed_ts_from_zfile->proc~read_dims proc~seed_ts_from_zfile->proc~find_var proc~seed_ts_from_zfile->proc~read_field_xyz proc~seed_ts_from_zfile->proc~zinit_io_ok proc~supergrid_io_ok->proc~nc_close proc~zinit_io_ok->proc~nc_close proc~configure_ocean_metrics configure_ocean_metrics proc~configure_ocean_metrics->proc~metrics_fill_from_supergrid proc~data_input_refresh_brackets data_input_refresh_brackets proc~data_input_refresh_brackets->proc~data_input_read_slab_impl proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~ocean_state_restart_write proc~engine_setup engine_setup proc~driver_run_ocean->proc~engine_setup proc~engine_teardown engine_teardown proc~driver_run_ocean->proc~engine_teardown proc~engine_configure_diag engine_configure_diag proc~engine_configure_diag->proc~open_stream proc~engine_setup->proc~ocean_state_restart_read proc~engine_setup->proc~ocean_state_seed_from_cfg proc~engine_setup->proc~configure_ocean_metrics proc~engine_setup->proc~engine_configure_diag proc~ocean_data_forcing_configure ocean_data_forcing_configure proc~engine_setup->proc~ocean_data_forcing_configure proc~engine_teardown->proc~close_stream proc~ocean_data_input_init ocean_data_input_t%ocean_data_input_init proc~ocean_data_input_init->proc~ocean_data_input_destroy proc~ocean_data_input_load_static_2d ocean_data_input_load_static_2d proc~ocean_data_input_load_static_2d->proc~ocean_data_input_destroy proc~ocean_data_input_load_static_2d->proc~ocean_data_input_register_2d proc~ocean_data_input_load_static_2d->proc~ocean_data_input_init proc~register_tag register_tag proc~register_tag->proc~ocean_data_input_register_2d proc~seed_zinit_overlay->proc~seed_ts_from_zfile proc~complete_ocean_create complete_ocean_create proc~complete_ocean_create->proc~engine_setup proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean proc~driver_validate driver_validate proc~driver_validate->proc~engine_setup proc~driver_validate->proc~engine_teardown proc~ocean_data_forcing_configure->proc~register_tag proc~ocean_data_input_update_all ocean_data_input_update_all proc~ocean_data_input_update_all->proc~data_input_refresh_brackets proc~rdb_ocean_destroy rdb_ocean_destroy proc~rdb_ocean_destroy->proc~engine_teardown proc~seed_cavity_draft->proc~ocean_data_input_load_static_2d proc~engine_step engine_step proc~engine_step->proc~ocean_data_input_update_all 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 nc_check(status, context, ierr)
      !! Check NetCDF return status and log error if it failed
      integer, intent(in) :: status
         !! Return code from nf90_* call
      character(len=*), intent(in) :: context
         !! Description of what was being attempted
      integer, intent(out), optional :: ierr
         !! Non-zero (the raw `nf90_*` status) on failure when present;
         !! absent behaves as today (`error stop`).  The specific reason
         !! is always logged via `global_logger%error` first, so the
         !! caller-facing code only needs to say THAT a read/write failed.

      if (status /= nf90_noerr) then
         call fail("NetCDF error in "//trim(context)//": "// &
                   trim(nf90_strerror(status)), ierr, status)
         return
      end if

      if (present(ierr)) ierr = nf90_noerr

   end subroutine nc_check