From 8c414538edb03541e594f18c96d110afa57c0a39 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 10 Jan 2019 14:28:30 +0100 Subject: [PATCH] Philippe 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages + some corrections in the error messages --- src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 | 9 +- src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 | 151 +++++++------- src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 | 66 +++--- src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 | 220 +++++++++++--------- 4 files changed, 231 insertions(+), 215 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 index 8a6c45a71..34b375157 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2018-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2018-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -12,6 +12,7 @@ ! Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN ! + move IOFREEFLU and IONEWFLU to mode_io_file_lfi.f90 ! + move management of NNCID and NLFIFLU to the nc4 and lfi subroutines +! Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages ! !----------------------------------------------------------------- #if defined(MNH_IOCDF4) @@ -20,7 +21,7 @@ module mode_io_file_nc4 use modd_io_ll, only: tfiledata use modd_netcdf, only: IDCDF_KIND -use mode_io_tools_nc4, only: handle_err, io_set_knowndims_nc4, newiocdf +use mode_io_tools_nc4, only: io_handle_err_nc4, io_set_knowndims_nc4, newiocdf use mode_msg use NETCDF, only: NF90_CLOBBER, NF90_GLOBAL, NF90_NETCDF4, NF90_NOERR, NF90_NOWRITE, & @@ -178,7 +179,7 @@ subroutine io_set_cleanly_closed_nc4(tpfile) call print_msg(NVERB_DEBUG,'IO','io_set_cleanly_closed_nc4','called for '//trim(tpfile%cname)) istatus = NF90_PUT_ATT(tpfile%nncid, NF90_GLOBAL, 'MNH_cleanly_closed', 'yes') - if (istatus /= NF90_NOERR) call handle_err(istatus,__LINE__,'io_set_cleanly_closed_nc4[NF90_PUT_ATT]') + if (istatus /= NF90_NOERR) call io_handle_err_nc4(istatus,'io_set_cleanly_closed_nc4','NF90_PUT_ATT','MNH_cleanly_closed') end subroutine io_set_cleanly_closed_nc4 @@ -190,7 +191,7 @@ subroutine io_set_not_cleanly_closed_nc4(tpfile) call print_msg(NVERB_DEBUG,'IO','io_set_not_cleanly_closed_nc4','called for '//trim(tpfile%cname)) istatus = NF90_PUT_ATT(tpfile%nncid, NF90_GLOBAL, 'MNH_cleanly_closed', 'no') - if (istatus /= NF90_NOERR) call handle_err(istatus,__LINE__,'io_set_not_cleanly_closed_nc4[NF90_PUT_ATT]') + if (istatus /= NF90_NOERR) call io_handle_err_nc4(istatus,'io_set_not_cleanly_closed_nc4','NF90_PUT_ATT','MNH_cleanly_closed') end subroutine io_set_not_cleanly_closed_nc4 end module mode_io_file_nc4 diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 index b5853626c..9fb6870ad 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -8,6 +8,7 @@ ! J.Escobar : 14/12/2017 : Correction for MNH_INT=8 ! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet : 13/12/2018 : split of mode_netcdf into multiple modules/files +! Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages !----------------------------------------------------------------- #if defined(MNH_IOCDF4) module mode_io_read_nc4 @@ -16,7 +17,7 @@ use modd_io_ll, only: tfiledata use modd_netcdf, only: IDCDF_KIND use mode_field, only: tfielddata -use mode_io_tools_nc4, only: cleanmnhname, handle_err +use mode_io_tools_nc4, only: cleanmnhname, io_handle_err_nc4 use mode_msg use NETCDF, only: NF90_CHAR, NF90_DOUBLE, NF90_FLOAT, NF90_INT, NF90_INT1, NF90_INT64, & @@ -279,11 +280,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X0[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X0[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -292,7 +293,7 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X0[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X0','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF ! Read and check attributes of variable @@ -336,11 +337,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X1[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X1[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -348,13 +349,13 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 IF (IDIMS == 1 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X1[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) IF (IDIMLEN == SIZE(PFIELD)) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X1[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF ! Read and check attributes of variable @@ -403,11 +404,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X2[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X2[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -415,7 +416,7 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 !Treat special case of a degenerated 3D array (3rd dimension size is 1) IF (IDIMS==3) THEN STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) IF (IDIMLEN(3)==1) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)// & ': reading 3D array with degenerated third dimension in 2D array for '//TRIM(YVARNAME)) @@ -428,15 +429,15 @@ END IF IF (IDIMS == 2 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) IF (IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2)) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X2[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF ! Read and check attributes of variable @@ -485,11 +486,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X3[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X3[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -497,17 +498,17 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 IF (IDIMS == 3 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X3[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X3[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X3[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) IF (IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. IDIMLEN(3) == SIZE(PFIELD,3)) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X3[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF ! Read and check attributes of variable @@ -556,11 +557,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X4[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X4[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -568,20 +569,20 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 IF (IDIMS == 4 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X4[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X4[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X4[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(4), LEN=IDIMLEN(4)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X4[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) IF ( IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. & IDIMLEN(3) == SIZE(PFIELD,3) .AND. IDIMLEN(4) == SIZE(PFIELD,4)) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X4[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF ! Read and check attributes of variable @@ -630,11 +631,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X5[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X5[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -642,15 +643,15 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 IF (IDIMS == 5 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X5[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X5[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X5[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(4), LEN=IDIMLEN(4)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X5[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(5), LEN=IDIMLEN(5)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X5[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) IF ( IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. & IDIMLEN(3) == SIZE(PFIELD,3) .AND. IDIMLEN(4) == SIZE(PFIELD,4) .AND. & @@ -658,7 +659,7 @@ IF (IDIMS == 5 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X5[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF ! Read and check attributes of variable @@ -707,11 +708,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X6[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_X6[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -719,17 +720,17 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 IF (IDIMS == 6 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X6[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X6[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X6[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(4), LEN=IDIMLEN(4)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X6[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(5), LEN=IDIMLEN(5)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X6[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(6), LEN=IDIMLEN(6)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X6[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) IF ( IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. & IDIMLEN(3) == SIZE(PFIELD,3) .AND. IDIMLEN(4) == SIZE(PFIELD,4) .AND. & @@ -737,7 +738,7 @@ IF (IDIMS == 6 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X6[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF ! Read and check attributes of variable @@ -784,11 +785,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N0[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) + GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_N0[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -798,7 +799,7 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64) ) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, KFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N0[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N0','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF ! Read and check attributes of variable @@ -842,11 +843,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N1[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_N1[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -855,13 +856,13 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 IF (IDIMS == 1 .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N1[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) IF (IDIMLEN == SIZE(KFIELD)) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, KFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N1[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF ! Read and check attributes of variable @@ -910,11 +911,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N2[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_N2[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -922,7 +923,7 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 !Treat special case of a degenerated 3D array (3rd dimension size is 1) IF (IDIMS==3) THEN STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) IF (IDIMLEN(3)==1) THEN CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)// & ': reading 3D array with degenerated third dimension in 2D array for '//TRIM(YVARNAME)) @@ -936,15 +937,15 @@ END IF IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N2[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) IF (IDIMLEN(1) == SIZE(KFIELD,1) .AND. IDIMLEN(2) == SIZE(KFIELD,2)) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, KFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_N2[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF ! Read and check attributes of variable @@ -991,11 +992,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_L0[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_L0[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -1006,7 +1007,7 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, IFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_L0[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L0','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF @@ -1064,11 +1065,11 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_L1[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_L1[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) !Neglect the time dimension (of size 1) IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 @@ -1078,13 +1079,13 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1 IF (IDIMS == 1 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF90_INT64) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_L1[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) IF (IDIMLEN == SIZE(OFIELD)) THEN ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, IFIELD) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_L1[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF @@ -1150,22 +1151,22 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_C0[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) + GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_C0[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) IF (IDIMS == 1 .AND. (ITYPE == NF90_CHAR) ) THEN ! Check size of variable before reading STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_C0[NF90_INQUIRE_DIMENSION] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) ! ALLOCATE(CHARACTER(LEN=IDIMLEN)::YSTR) ! Read variable STATUS = NF90_GET_VAR(INCID, IVARID, YSTR) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_C0[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF IF (LEN_TRIM(YSTR) > LEN(HFIELD)) & @@ -1218,17 +1219,17 @@ CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME) ! Get variable ID, NDIMS and TYPE STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_T0[NF90_INQ_VARID] '//TRIM(YVARNAME),IRESP) - GOTO 1000 + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_T0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) + GOTO 1000 END IF STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS) -IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(STATUS,__LINE__,'IO_READ_FIELD_NC4_T0[NF90_INQUIRE_VARIABLE] '//TRIM(YVARNAME)) +IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_T0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) IF (IDIMS == 0 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN ! Read time STATUS = NF90_GET_VAR(INCID, IVARID, TPDATA%TIME) IF (STATUS /= NF90_NOERR) THEN - CALL HANDLE_ERR(status,__LINE__,'IO_READ_FIELD_NC4_X0[NF90_GET_VAR] '//TRIM(YVARNAME),IRESP) + CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_T0','NF90_GET_VAR',TRIM(YVARNAME),IRESP) GOTO 1000 END IF ! Read and check attributes of variable diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 index a0c53f5fb..b66011fac 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -8,6 +8,7 @@ ! J.Escobar : 14/12/2017 : Correction for MNH_INT=8 ! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet : 13/12/2018 : split of mode_netcdf into multiple modules/files +! Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages !----------------------------------------------------------------- #if defined(MNH_IOCDF4) module mode_io_tools_nc4 @@ -26,7 +27,7 @@ implicit none private public :: io_find_dim_byname_nc4, io_guess_dimids_nc4, io_set_knowndims_nc4 -public :: cleaniocdf, cleanmnhname, fillvdims, getdimcdf, getstrdimid, handle_err, newiocdf +public :: cleaniocdf, cleanmnhname, fillvdims, getdimcdf, getstrdimid, io_handle_err_nc4, newiocdf contains @@ -480,7 +481,7 @@ IF (.NOT. ASSOCIATED(TMP)) THEN TMP%NAME = YDIMNAME TMP%LEN = KLEN STATUS = NF90_DEF_DIM(TPFILE%NNCID, TMP%NAME, KLEN, TMP%ID) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'GETDIMCDF[NF90_DEF_DIM]') + IF (STATUS /= NF90_NOERR) CALL io_handle_err_nc4(status,'GETDIMCDF','NF90_DEF_DIM',trim(TMP%NAME)) NULLIFY(TMP%NEXT) TMP%NEXT => PIOCDF%DIMLIST PIOCDF%DIMLIST => TMP @@ -523,7 +524,7 @@ IF (.NOT. ASSOCIATED(TMP)) THEN TMP%NAME = 'char'//TRIM(YSUFFIX) TMP%LEN = KLEN STATUS = NF90_DEF_DIM(TPFILE%NNCID, TMP%NAME, KLEN, TMP%ID) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'GETSTRDIMID[NF90_DEF_DIM]') + IF (STATUS /= NF90_NOERR) CALL io_handle_err_nc4(status,'GETSTRDIMID','NF90_DEF_DIM',trim(TMP%NAME)) NULLIFY(TMP%NEXT) TMP%NEXT => TPFILE%TNCDIMS%DIMSTR TZIOCDF => TPFILE%TNCDIMS @@ -553,33 +554,28 @@ NEWIOCDF=>TZIOCDF END FUNCTION NEWIOCDF -SUBROUTINE HANDLE_ERR(STATUS,LINE,TEXT,KRESP) -INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: STATUS -INTEGER, INTENT(IN) :: LINE -CHARACTER(LEN=*), INTENT(IN) :: TEXT -INTEGER, OPTIONAL, INTENT(OUT) :: KRESP - -CHARACTER(LEN=6) :: YLINE - -WRITE(YLINE,'( I6 )') LINE - -! Don't stop (by default) the code when KRESP is present -! and ensure KRESP is a negative integer -IF (STATUS /= NF90_NOERR) THEN - IF (PRESENT(KRESP)) THEN - IF (STATUS < 0) THEN - KRESP = STATUS - ELSE IF (STATUS == 0) THEN - KRESP = -1 - ELSE - KRESP = -STATUS - END IF - CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(TEXT),'netCDF error at line '//TRIM(YLINE)//': '//TRIM(NF90_STRERROR(STATUS))) - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO',TRIM(TEXT),'netCDF error at line '//TRIM(YLINE)//': '//TRIM(NF90_STRERROR(STATUS))) - END IF -END IF -END SUBROUTINE HANDLE_ERR +subroutine io_handle_err_nc4(kstatus,hsubr,hncsubr,hvar,kresp) +integer(kind=IDCDF_KIND),intent(in) :: kstatus +character(len=*), intent(in) :: hsubr +character(len=*), intent(in) :: hncsubr +character(len=*), intent(in) :: hvar +integer, optional, intent(out) :: kresp + +! Don't stop (by default) the code when kresp is present +! and ensure kresp is a negative integer +if (kstatus /= NF90_NOERR) then + if (present(kresp)) then + if (kstatus < 0) then + kresp = kstatus + else + kresp = -kstatus + end if + call print_msg(NVERB_WARNING,'IO',trim(hsubr),trim(hvar)//': '//trim(hncsubr)//': '//trim(NF90_STRERROR(kstatus))) + else + call print_msg(NVERB_ERROR, 'IO',trim(hsubr),trim(hvar)//': '//trim(hncsubr)//': '//trim(NF90_STRERROR(kstatus))) + end if +end if +end subroutine io_handle_err_nc4 SUBROUTINE CLEANMNHNAME(HINNAME,HOUTNAME) @@ -664,11 +660,11 @@ integer :: a, b CALL PRINT_MSG(NVERB_ERROR,'IO','getstrdimid','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF') end function getstrdimid ! -subroutine handle_err(a, b, c, d) +subroutine io_handle_err_nc4(a, b, c, d, e) use mode_msg -integer :: a, b, c, d -CALL PRINT_MSG(NVERB_ERROR,'IO','handle_err','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF') -end subroutine handle_err +integer :: a, b, c, d, e +CALL PRINT_MSG(NVERB_ERROR,'IO','io_handle_err_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF') +end subroutine io_handle_err_nc4 ! function newiocdf() use mode_msg diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 index a95c75a37..fef41bd3c 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -8,6 +8,7 @@ ! J.Escobar : 14/12/2017 : Correction for MNH_INT=8 ! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet : 13/12/2018 : split of mode_netcdf into multiple modules/files +! Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages !----------------------------------------------------------------- #if defined(MNH_IOCDF4) module mode_io_write_nc4 @@ -16,7 +17,7 @@ use modd_io_ll, only: gsmonoproc, tfiledata use modd_netcdf, only: dimcdf, IDCDF_KIND, iocdf use mode_field, only: tfielddata -use mode_io_tools_nc4, only: cleanmnhname, fillvdims, getdimcdf, getstrdimid, handle_err +use mode_io_tools_nc4, only: cleanmnhname, fillvdims, getdimcdf, getstrdimid, io_handle_err_nc4 use mode_msg use NETCDF, only: NF90_CHAR, NF90_DOUBLE, NF90_FLOAT, NF90_INT, NF90_INT1, NF90_INT64, & @@ -93,7 +94,8 @@ IF(LEN_TRIM(TPFIELD%CSTDNAME)==0) THEN CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CSTDNAME not set for variable '//TRIM(TPFIELD%CMNHNAME)) ELSE STATUS = NF90_PUT_ATT(INCID, KVARID,'standard_name', TRIM(TPFIELD%CSTDNAME)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','standard_name for ' & + //trim(TPFIELD%CMNHNAME)) ENDIF ! ! Long_name attribute definition (CF convention) @@ -101,7 +103,8 @@ IF(LEN_TRIM(TPFIELD%CLONGNAME)==0) THEN CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CLONGNAME not set for variable '//TRIM(TPFIELD%CMNHNAME)) ELSE STATUS = NF90_PUT_ATT(INCID, KVARID,'long_name', TRIM(TPFIELD%CLONGNAME)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','long_name for ' & + //trim(TPFIELD%CMNHNAME)) ENDIF ! ! Canonical units attribute definition (CF convention) @@ -109,7 +112,8 @@ IF(LEN_TRIM(TPFIELD%CUNITS)==0) THEN CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CUNITS not set for variable '//TRIM(TPFIELD%CMNHNAME)) ELSE STATUS = NF90_PUT_ATT(INCID, KVARID,'units', TRIM(TPFIELD%CUNITS)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','units for ' & + //trim(TPFIELD%CMNHNAME)) ENDIF ! ! GRID attribute definition @@ -118,7 +122,8 @@ IF(TPFIELD%NGRID<0) THEN !Do not write GRID attribute if NGRID=0 ELSE IF (TPFIELD%NGRID>0) THEN STATUS = NF90_PUT_ATT(INCID, KVARID, 'grid', TPFIELD%NGRID) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','grid for ' & + //trim(TPFIELD%CMNHNAME)) ENDIF ! ! COMMENT attribute definition @@ -126,14 +131,16 @@ IF(LEN_TRIM(TPFIELD%CCOMMENT)==0) THEN CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CCOMMENT not set for variable '//TRIM(TPFIELD%CMNHNAME)) ELSE STATUS = NF90_PUT_ATT(INCID, KVARID,'comment', TRIM(TPFIELD%CCOMMENT)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','comment for ' & + //trim(TPFIELD%CMNHNAME)) ENDIF ! ! Calendar (CF convention) IF(PRESENT(HCALENDAR)) THEN CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','CALENDAR provided for variable '//TRIM(TPFIELD%CMNHNAME)) STATUS = NF90_PUT_ATT(INCID, KVARID,'calendar', TRIM(HCALENDAR)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','calendar for ' & + //trim(TPFIELD%CMNHNAME)) ENDIF ! ! Coordinates (CF convention) @@ -167,7 +174,7 @@ IF (.NOT.GISCOORD) THEN END SELECT ! STATUS = NF90_PUT_ATT(INCID, KVARID,'coordinates',YCOORDS) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','coordinates') DEALLOCATE(YCOORDS) ELSE CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_ATTR_NC4','coordinates not implemented for variable ' & @@ -190,15 +197,15 @@ IF(TPFIELD%NTYPE==TYPEINT .AND. TPFIELD%NDIMS>0) THEN ! * it cannot be modified if some data has already been written (->check OEXISTED) IF(.NOT.OEXISTED) THEN STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', TPFIELD%NFILLVALUE) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','_FillValue') END IF ! ! Valid_min/max (CF/COMODO convention) STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_min', TPFIELD%NVALIDMIN) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_min') ! STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_max',TPFIELD%NVALIDMAX) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_max') ENDIF ! IF(TPFIELD%NTYPE==TYPEREAL .AND. TPFIELD%NDIMS>0) THEN @@ -216,7 +223,7 @@ IF(TPFIELD%NTYPE==TYPEREAL .AND. TPFIELD%NDIMS>0) THEN ELSE STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', TPFIELD%XFILLVALUE) END IF - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','_FillValue') END IF ! ! Valid_min/max (CF/COMODO convention) @@ -225,14 +232,14 @@ IF(TPFIELD%NTYPE==TYPEREAL .AND. TPFIELD%NDIMS>0) THEN ELSE STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_min', TPFIELD%XVALIDMIN) END IF - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_min') ! IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_max', REAL(TPFIELD%XVALIDMAX,KIND=4)) ELSE STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_max',TPFIELD%XVALIDMAX) END IF - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_max') ENDIF ! END SUBROUTINE IO_WRITE_FIELD_ATTR_NC4 @@ -275,7 +282,7 @@ IF (STATUS /= NF90_NOERR) THEN #else STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X0[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X0','NF90_DEF_VAR',trim(YVARNAME)) DEALLOCATE(IVDIMS) ELSE ! Define the scalar variable @@ -284,7 +291,7 @@ IF (STATUS /= NF90_NOERR) THEN #else STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X0[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X0','NF90_DEF_VAR',trim(YVARNAME)) END IF ELSE GEXISTED = .TRUE. @@ -295,7 +302,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X0[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X0','NF90_PUT_VAR',trim(YVARNAME),IRESP) KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_X0 @@ -348,11 +355,11 @@ IF (STATUS /= NF90_NOERR) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) #endif END IF - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X1[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X1','NF90_DEF_VAR',trim(YVARNAME)) ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X1[NF90_DEF_VAR_DEFLATE]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X1','NF90_DEF_VAR_DEFLATE',trim(YVARNAME)) END IF ELSE GEXISTED = .TRUE. @@ -363,7 +370,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X1[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X1','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS) @@ -443,11 +450,11 @@ IF (STATUS /= NF90_NOERR) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) #endif END IF - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X2[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X2','NF90_DEF_VAR',trim(YVARNAME)) ! Add compression if asked for IF (TZFILE%LNCCOMPRESS) THEN STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TZFILE%NNCCOMPRESS_LEVEL) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X2[NF90_DEF_VAR_DEFLATE]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X2','NF90_DEF_VAR_DEFLATE',trim(YVARNAME)) END IF ELSE GEXISTED = .TRUE. @@ -458,7 +465,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TZFILE,TZFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND),OISCOORD=OISCOORD) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X2[NF90_PUT_VAR] '//TRIM(TZFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X2','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS) @@ -514,12 +521,13 @@ IF (STATUS /= NF90_NOERR) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) #endif END IF + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X3','NF90_DEF_VAR',trim(YVARNAME)) + ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X3[NF90_DEF_VAR_DEFLATE]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X3','NF90_DEF_VAR_DEFLATE',trim(YVARNAME)) END IF - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X3[NF90_DEF_VAR]') ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') @@ -529,7 +537,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X3[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X3','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS) @@ -585,12 +593,13 @@ IF (STATUS /= NF90_NOERR) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) #endif END IF + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X4','NF90_DEF_VAR',trim(YVARNAME)) + ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X4[NF90_DEF_VAR_DEFLATE]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X4','NF90_DEF_VAR_DEFLATE',trim(YVARNAME)) END IF - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X4[NF90_DEF_VAR]') ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') @@ -600,7 +609,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X4[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X4','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS) @@ -656,12 +665,13 @@ IF (STATUS /= NF90_NOERR) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) #endif END IF + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X5','NF90_DEF_VAR',trim(YVARNAME)) + ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X5[NF90_DEF_VAR_DEFLATE]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X5','NF90_DEF_VAR_DEFLATE',trim(YVARNAME)) END IF - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X5[NF90_DEF_VAR]') ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') @@ -671,7 +681,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X5[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X5','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS) @@ -727,12 +737,13 @@ IF (STATUS /= NF90_NOERR) THEN STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIMS, IVARID) #endif END IF - ! Add compression if asked for + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X6','NF90_DEF_VAR',trim(YVARNAME)) + + ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X6[NF90_DEF_VAR_DEFLATE]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X6','NF90_DEF_VAR_DEFLATE',trim(YVARNAME)) END IF - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X6[NF90_DEF_VAR]') ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') @@ -742,7 +753,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X6[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X6','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS) @@ -794,7 +805,7 @@ IF (STATUS /= NF90_NOERR) THEN #else STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N0[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N0','NF90_DEF_VAR',trim(YVARNAME)) DEALLOCATE(IVDIMS) ELSE ! Define the scalar variable @@ -803,7 +814,7 @@ IF (STATUS /= NF90_NOERR) THEN #else STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N0[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N0','NF90_DEF_VAR',trim(YVARNAME)) END IF ELSE GEXISTED = .TRUE. @@ -814,7 +825,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N0[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N0','NF90_PUT_VAR',trim(YVARNAME),IRESP) ! ! Use IMAX, JMAX, KMAX to define DIM_NI, DIM_NJ, DIM_LEVEL @@ -888,7 +899,7 @@ IF (STATUS /= NF90_NOERR) THEN #else STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N1[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N1','NF90_DEF_VAR',trim(YVARNAME)) ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') @@ -898,7 +909,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N1[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N1','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS) @@ -950,11 +961,11 @@ IF (STATUS /= NF90_NOERR) THEN #else STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N2[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N2','NF90_DEF_VAR',trim(YVARNAME)) ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N2[NF90_DEF_VAR_DEFLATE]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N2','NF90_DEF_VAR_DEFLATE',trim(YVARNAME)) END IF ELSE GEXISTED = .TRUE. @@ -965,7 +976,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N2[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N2','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS) @@ -1016,11 +1027,11 @@ IF (STATUS /= NF90_NOERR) THEN #else STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N3[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N3','NF90_DEF_VAR',trim(YVARNAME)) ! Add compression if asked for IF (TPFILE%LNCCOMPRESS) THEN STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N3[NF90_DEF_VAR_DEFLATE]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N3','NF90_DEF_VAR_DEFLATE',trim(YVARNAME)) END IF ELSE GEXISTED = .TRUE. @@ -1031,7 +1042,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N3[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N3','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS) @@ -1075,13 +1086,13 @@ IF (STATUS /= NF90_NOERR) THEN ! Define the variable ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT1, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_L0[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L0','NF90_DEF_VAR',trim(YVARNAME)) DEALLOCATE(IVDIMS) ELSE ! Define the scalar variable ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT1, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_L0[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L0','NF90_DEF_VAR',trim(YVARNAME)) END IF ELSE GEXISTED = .TRUE. @@ -1099,7 +1110,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, IFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_L0[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L0','NF90_PUT_VAR',trim(YVARNAME),IRESP) KRESP = IRESP END SUBROUTINE IO_WRITE_FIELD_NC4_L0 @@ -1147,7 +1158,7 @@ IF (STATUS /= NF90_NOERR) THEN ! Define the variable ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT1, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_L1[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L1','NF90_DEF_VAR',trim(YVARNAME)) ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') @@ -1164,7 +1175,7 @@ END WHERE CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, IFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_L1[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L1','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS) @@ -1215,7 +1226,7 @@ IF (STATUS /= NF90_NOERR) THEN IVDIMS(1) = GETSTRDIMID(TPFILE,INT(ILEN,KIND=IDCDF_KIND)) ! Define the variable STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_CHAR, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_C0[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C0','NF90_DEF_VAR',trim(YVARNAME)) ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') @@ -1228,7 +1239,7 @@ YFIELD(LEN_TRIM(HFIELD)+1:)=' ' CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, YFIELD) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_C0[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C0','NF90_PUT_VAR',trim(YVARNAME),IRESP) DEALLOCATE(YFIELD) KRESP = IRESP @@ -1285,7 +1296,7 @@ IF (STATUS /= NF90_NOERR) THEN IVDIMS(2) = IVDIMSTMP(1) ! Define the variable STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_CHAR, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_C1[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C1','NF90_DEF_VAR',trim(YVARNAME)) ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_C1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') @@ -1295,7 +1306,7 @@ END IF CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, HFIELD(1:ISIZE)(1:ILEN), START=(/IONE,IONE/), COUNT=(/ILEN,ISIZE/)) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_C1[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C1','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF(ALLOCATED(IVDIMSTMP)) DEALLOCATE(IVDIMSTMP) @@ -1372,7 +1383,7 @@ IF (STATUS /= NF90_NOERR) THEN #else STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_T0[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_DEF_VAR',trim(YVARNAME)) ELSE GEXISTED = .TRUE. CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined') @@ -1386,7 +1397,7 @@ CALL DATETIME_DISTANCE(TZREF,TPDATA,ZDELTATIME) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, ZDELTATIME) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X0[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_PUT_VAR',trim(YVARNAME),IRESP) IF (IRESP/=0) THEN KRESP = IRESP @@ -1412,7 +1423,7 @@ IF (STATUS /= NF90_NOERR) THEN ! Define the variable STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_INT, IVDIMS, IVARID) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_T0[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_DEF_VAR',trim(TZFIELD%CMNHNAME)) CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED) ELSE CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(TZFIELD%CMNHNAME)//' already defined') @@ -1420,7 +1431,7 @@ END IF ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, ITDATE) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_T0[NF90_PUT_VAR] '//TRIM(TZFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_PUT_VAR',trim(TZFIELD%CMNHNAME),IRESP) IF (IRESP/=0) THEN KRESP = IRESP @@ -1443,7 +1454,7 @@ IF (STATUS /= NF90_NOERR) THEN #else STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_FLOAT, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_T0[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_DEF_VAR',trim(TZFIELD%CMNHNAME)) CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED) ELSE GEXISTED = .TRUE. @@ -1452,7 +1463,7 @@ END IF ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, TPDATA%TIME) -IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_T0[NF90_PUT_VAR] '//TRIM(TZFIELD%CMNHNAME),IRESP) +IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_PUT_VAR',trim(TZFIELD%CMNHNAME),IRESP) #endif KRESP = IRESP @@ -1672,31 +1683,33 @@ SUBROUTINE WRITE_HOR_COORD(TDIM,HLONGNAME,HSTDNAME,HAXIS,PSHIFT,KBOUNDLOW,KBOUND #else STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIM, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_DEF_VAR',trim(YVARNAME)) ELSE - CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_NC_COORDS_VAR',TRIM(YVARNAME)//' already defined') + CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_HOR_COORD',TRIM(YVARNAME)//' already defined') END IF ! Write metadata STATUS = NF90_PUT_ATT(INCID, IVARID, 'long_name',HLONGNAME) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID, 'standard_name',HSTDNAME) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME)) IF (PRESENT(PCOORDS)) THEN STATUS = NF90_PUT_ATT(INCID, IVARID, 'units','m') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME)) END IF STATUS = NF90_PUT_ATT(INCID, IVARID, 'axis',HAXIS) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_axis_shift',PSHIFT) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','c_grid_axis_shift for ' & + //trim(YVARNAME)) WRITE(YRANGE,'( I0,":",I0 )') 1+KBOUNDLOW,ISIZE-KBOUNDHIGH STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_dynamic_range',TRIM(YRANGE)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','c_grid_dynamic_range for ' & + //trim(YVARNAME)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, ZTAB) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_VAR',trim(YVARNAME),IRESP) END IF IF (GALLOC) DEALLOCATE(ZTAB) @@ -1777,55 +1790,60 @@ SUBROUTINE WRITE_VER_COORD(TDIM,HLONGNAME,HSTDNAME,HCOMPNAME,PSHIFT,KBOUNDLOW,KB IF (STATUS /= NF90_NOERR) THEN ! Define the coordinate variable #if (MNH_REAL == 8) - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID) + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID) #else - STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIM, IVARID) + STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIM, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_DEF_VAR',trim(YVARNAME)) ELSE - CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_NC_COORDS_VAR',TRIM(YVARNAME)//' already defined') + CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_VER_COORD',TRIM(YVARNAME)//' already defined') END IF ! Write metadata STATUS = NF90_PUT_ATT(INCID, IVARID, 'long_name',HLONGNAME) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID, 'standard_name',HSTDNAME) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID, 'units','m') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID, 'axis','Z') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID, 'positive','up') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','positive for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_axis_shift',PSHIFT) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','c_grid_axis_shift for ' & + //trim(YVARNAME)) WRITE(YRANGE,'( I0,":",I0 )') 1+KBOUNDLOW,ISIZE-KBOUNDHIGH STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_dynamic_range',TRIM(YRANGE)) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','c_grid_dynamic_range for ' & + //trim(YVARNAME)) ! IF (GSLEVE) THEN !Remark: ZS, ZSMT and ZTOP in the formula are the same for mass point or flux point STATUS = NF90_PUT_ATT(INCID, IVARID,'formula_terms','s: '//TRIM(YVARNAME)// & ' height: ZTOP oro_ls: ZSMT oro: ZS len1: LEN1 len2: LEN2') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_terms for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID, 'formula_definition','z(n,k,j,i)=s(k)'// & '+ oro_ls(j,i)*sinh((height/len1)**1.35-(s(k)/len1)**1.35)/sinh((s(k)/len1)**1.35)'// & '+(oro(j,i)-oro_ls(j,i))*sinh((height/len2)**1.35-(s(k)/len2)**1.35)/sinh((s(k)/len2)**1.35)') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_definition for ' & + //trim(YVARNAME)) ELSE !Remark: ZS and ZTOP in the formula are the same for mass point or flux point STATUS = NF90_PUT_ATT(INCID, IVARID, 'formula_terms','s: '//TRIM(YVARNAME)//' height: ZTOP orog: ZS') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_terms for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID, 'formula_definition','z(n,k,j,i)=s(k)*(height-orog(j,i))/height+orog(j,i)') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_definition for ' & + //trim(YVARNAME)) ENDIF ! STATUS = NF90_PUT_ATT(INCID, IVARID, 'computed_standard_name',HCOMPNAME) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','computed_standard_name for ' & + //trim(YVARNAME)) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, PCOORDS) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_VAR',trim(YVARNAME)) END SUBROUTINE WRITE_VER_COORD @@ -1860,24 +1878,24 @@ SUBROUTINE WRITE_TIME_COORD(TDIM) #else STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT, IVDIM, IVARID) #endif - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_TIME_COORD[NF90_DEF_VAR]') + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_DEF_VAR',trim(YVARNAME)) ELSE CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_TIME_COORD',TRIM(YVARNAME)//' already defined') END IF ! Write metadata STATUS = NF90_PUT_ATT(INCID, IVARID, 'long_name','time axis') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID, 'standard_name','time') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME)) WRITE(YUNITS,'( "seconds since ",I4.4,"-",I2.2,"-",I2.2," 00:00:00 +0:00" )') & TDTMOD%TDATE%YEAR,TDTMOD%TDATE%MONTH,TDTMOD%TDATE%DAY STATUS = NF90_PUT_ATT(INCID, IVARID, 'units',YUNITS) - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID, 'axis','T') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME)) STATUS = NF90_PUT_ATT(INCID, IVARID,'calendar','standard') - IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_ATT]') + IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','calendar for '//trim(YVARNAME)) ! Model beginning date (TDTMOD%TDATE) is used as the reference date ! Reference time is set to 0. @@ -1887,7 +1905,7 @@ SUBROUTINE WRITE_TIME_COORD(TDIM) CALL DATETIME_DISTANCE(TZREF,TDTCUR,ZDELTATIME) ! Write the data STATUS = NF90_PUT_VAR(INCID, IVARID, ZDELTATIME) - IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) + IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_VAR',trim(YVARNAME)) END IF END SUBROUTINE WRITE_TIME_COORD @@ -1907,21 +1925,21 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_NC4','called for file '//TRIM(T ! IF (TPFILE%LMASTER) THEN ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'Conventions', 'CF-1.7 COMODO-1.4') - IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__,'IO_FILE_WRITE_HEADER[NF90_PUT_ATT]') + IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','Conventions') #if (MNH_REAL == 8) ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_REAL', '8') #else ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_REAL', '4') #endif - IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__,'IO_FILE_WRITE_HEADER[NF90_PUT_ATT]') + IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','MNH_REAL') #if (MNH_INT == 4) ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_INT', '4') #else ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_INT', '8') #endif - IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__,'IO_FILE_WRITE_HEADER[NF90_PUT_ATT]') + IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','MNH_INT') !title @@ -1964,7 +1982,7 @@ IF (TPFILE%LMASTER) THEN IF (ISTATUS == NF90_NOERR) THEN ALLOCATE(CHARACTER(LEN=ILEN_PREV) :: YHISTORY_PREV) ISTATUS = NF90_GET_ATT(TPFILE%NNCID, NF90_GLOBAL, 'history', YHISTORY_PREV) - IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__,'IO_APPEND_HISTORY_NC4[NF90_GET_ATT]') + IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(ISTATUS,'IO_APPEND_HISTORY_NC4','NF90_GET_ATT','history') YHISTORY_PREV = YHISTORY_PREV ELSE ILEN_PREV = 0 @@ -1990,7 +2008,7 @@ IF (TPFILE%LMASTER) THEN YHISTORY = YHISTORY_NEW//NEW_LINE('A')//YHISTORY_PREV END IF ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'history', YHISTORY ) - IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__,'IO_APPEND_HISTORY_NC4[NF90_PUT_ATT]') + IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_APPEND_HISTORY_NC4','NF90_PUT_ATT','history') END IF END SUBROUTINE IO_APPEND_HISTORY_NC4 -- GitLab