Changeset 1658 in lmdz_wrf


Ignore:
Timestamp:
Sep 27, 2017, 6:22:00 PM (8 years ago)
Author:
lfita
Message:

Adding:

  • `handle_errf': Subroutine to provide the error message when something with netCDF went wrong (including fname)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/module_generic.f90

    r1655 r1658  
    1919!!!
    2020! create_NCfile: Subroutine to create a netCDF file
     21! handle_err: Subroutine to provide the error message when something with netCDF went wrong
     22! handle_errf: Subroutine to provide the error message when something with netCDF went wrong (including fname)
    2123! isin_file: Function to tell if a given variable is inside a file
    2224! isin_ncunit: Function to tell if a given variable is inside a netcdf file unit
     
    412414  USE netcdf
    413415
    414   INTEGER, INTENT(IN)                                    :: st
     416  INTEGER, INTENT(in)                                    :: st
     417
     418!!!!!!! Variables
     419! fn: function name from which it is used
    415420
    416421  IF (st /= nf90_noerr) THEN
    417422    PRINT *, TRIM(emsg)
    418     PRINT *, TRIM(nf90_strerror(st))
     423    PRINT *, '  ' // TRIM(nf90_strerror(st))
    419424    STOP "Stopped"
    420425  END IF
    421426
    422427  END SUBROUTINE handle_err
     428
     429! From UNIDATA: https://www.unidata.ucar.edu/software/netcdf/docs/netcdf-f90.html
     430  SUBROUTINE handle_errf(st, fn)
     431! Subroutine to provide the error message when something with netCDF went wrong (including fname)
     432
     433  USE netcdf
     434
     435  INTEGER, INTENT(in)                                    :: st
     436  CHARACTER(len=*), INTENT(in)                           :: fn
     437
     438!!!!!!! Variables
     439! st: netCDF status number
     440! fn: function name from which it is used
     441
     442  IF (st /= nf90_noerr) THEN
     443    PRINT *, TRIM(emsg)
     444    PRINT *, '  ' // TRIM(fn) // ': ' // TRIM(nf90_strerror(st))
     445    STOP "Stopped"
     446  END IF
     447
     448  END SUBROUTINE handle_errf
    423449
    424450  SUBROUTINE create_NCfile(filename, dimsfile, namelistfile, varsfile, ncid)
     
    460486! Opening creation status
    461487    rcode = nf90_create(TRIM(filename), NF90_NETCDF4, ncid)
    462     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     488    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    463489
    464490! Reading dimensions file
     
    504530        END IF
    505531        rcode = nf90_def_dim(ncid, TRIM(valsline(1)), dimsize, dimid)
    506         IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     532        IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    507533        vs = valsline(2)
    508534        CALL removeChar(vs, ' ')
     
    578604       
    579605        rcode = nf90_def_var(ncid, vname, vartype, dimsvar, idvarnew)
    580         IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     606        IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    581607
    582608! Adding attributes
    583609        rcode = nf90_put_att(ncid, idvarnew, 'standard_name', TRIM(valsline(2)))
    584         IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     610        IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    585611        rcode = nf90_put_att(ncid, idvarnew, 'long_name', TRIM(valsline(3)))
    586         IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     612        IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    587613        rcode = nf90_put_att(ncid, idvarnew, 'units', TRIM(valsline(4)))
    588         IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     614        IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    589615
    590616        idvarnew = idvarnew + 1
     
    596622
    597623    rcode = NF90_ENDDEF(ncid)
    598     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     624    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    599625
    600626    DEALLOCATE(valsline)
     
    624650
    625651    fname = 'get_var2dims_file'
    626     PRINT *,TRIM(fname)
     652    !PRINT *,TRIM(fname)
    627653
    628654! Opening creation status
    629655    rcode = nf90_open(TRIM(filename), NF90_NOWRITE, nid)
    630     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     656    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    631657
    632658    rcode = nf90_inq_varid(nid, varname, vid)
    633     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     659    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    634660
    635661    rcode = nf90_inquire_variable(nid, vid, NDIMS = Ndims)
    636     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     662    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    637663
    638664    IF (Ndims /= 2) THEN
     
    642668
    643669    rcode = nf90_inquire_variable(nid, vid, DIMIDS = dimsid)
    644     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     670    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    645671
    646672    rcode = nf90_inquire_dimension(nid, dimsid(1), LEN = get_var2dims_file(1))
    647     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     673    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    648674
    649675    rcode = nf90_inquire_dimension(nid, dimsid(2), LEN = get_var2dims_file(2))
    650     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     676    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    651677
    652678    rcode = NF90_CLOSE(nid)
    653     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     679    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    654680
    655681  END FUNCTION get_var2dims_file
     
    670696    INTEGER                                              :: rcode
    671697    INTEGER, DIMENSION(3)                                :: dimsid
    672     CHARACTER(LEN=250)                                   :: msg
     698
    673699
    674700!!!!!!! Variables
     
    677703
    678704    fname = 'get_var3dims_file'
    679     PRINT *,TRIM(fname)
     705    !PRINT *,TRIM(fname)
    680706
    681707! Opening creation status
    682708    rcode = nf90_open(TRIM(filename), NF90_NOWRITE, nid)
    683     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     709    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    684710
    685711    rcode = nf90_inq_varid(nid, varname, vid)
    686     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     712    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    687713
    688714    rcode = nf90_inquire_variable(nid, vid, NDIMS = Ndims)
    689     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     715    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    690716
    691717    IF (Ndims /= 3) THEN
     
    695721
    696722    rcode = nf90_inquire_variable(nid, vid, DIMIDS = dimsid)
    697     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     723    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    698724
    699725    rcode = nf90_inquire_dimension(nid, dimsid(1), LEN = get_var3dims_file(1))
    700     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     726    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    701727
    702728    rcode = nf90_inquire_dimension(nid, dimsid(2), LEN = get_var3dims_file(2))
    703     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     729    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    704730
    705731    rcode = nf90_inquire_dimension(nid, dimsid(3), LEN = get_var3dims_file(3))
    706     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     732    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    707733
    708734    rcode = NF90_CLOSE(nid)
    709     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     735    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    710736
    711737  END FUNCTION get_var3dims_file
     
    727753    INTEGER                                              :: rcode
    728754    INTEGER, DIMENSION(1)                                :: dimsid
    729     CHARACTER(LEN=250)                                   :: msg
     755
    730756
    731757!!!!!!! Variables
     
    734760
    735761    fname = 'get_var1dims_ncunit'
    736     PRINT *,TRIM(fname)
     762    !PRINT *,TRIM(fname)
    737763
    738764    rcode = nf90_inq_varid(nid, varname, vid)
    739     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     765    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    740766
    741767    rcode = nf90_inquire_variable(nid, vid, NDIMS = Ndims)
    742     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     768    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    743769
    744770    IF (Ndims /= 1) THEN
     
    748774
    749775    rcode = nf90_inquire_variable(nid, vid, DIMIDS = dimsid)
    750     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     776    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
     777
     778    rcode = nf90_inquire_dimension(nid, dimsid(1), name=msg)
    751779
    752780    rcode = nf90_inquire_dimension(nid, dimsid(1), LEN = get_var1dims_ncunit(1))
    753     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     781    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    754782
    755783  END FUNCTION get_var1dims_ncunit
     
    771799    INTEGER                                              :: rcode
    772800    INTEGER, DIMENSION(2)                                :: dimsid
    773     CHARACTER(LEN=250)                                   :: msg
     801
    774802
    775803!!!!!!! Variables
     
    778806
    779807    fname = 'get_var2dims_ncunit'
    780     PRINT *,TRIM(fname)
     808    !PRINT *,TRIM(fname)
    781809
    782810    rcode = nf90_inq_varid(nid, varname, vid)
    783     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     811    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    784812
    785813    rcode = nf90_inquire_variable(nid, vid, NDIMS = Ndims)
    786     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     814    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    787815
    788816    IF (Ndims /= 2) THEN
     
    792820
    793821    rcode = nf90_inquire_variable(nid, vid, DIMIDS = dimsid)
    794     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     822    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    795823
    796824    rcode = nf90_inquire_dimension(nid, dimsid(1), LEN = get_var2dims_ncunit(1))
    797     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     825    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    798826
    799827    rcode = nf90_inquire_dimension(nid, dimsid(2), LEN = get_var2dims_ncunit(2))
    800     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     828    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    801829
    802830  END FUNCTION get_var2dims_ncunit
     
    818846    INTEGER                                              :: rcode
    819847    INTEGER, DIMENSION(3)                                :: dimsid
    820     CHARACTER(LEN=250)                                   :: msg
     848
    821849
    822850!!!!!!! Variables
     
    825853
    826854    fname = 'get_var3dims_ncunit'
    827     PRINT *,TRIM(fname)
     855    !PRINT *,TRIM(fname)
    828856
    829857    rcode = nf90_inq_varid(nid, varname, vid)
    830     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     858    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    831859
    832860    rcode = nf90_inquire_variable(nid, vid, NDIMS = Ndims)
    833     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     861    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    834862
    835863    IF (Ndims /= 3) THEN
     
    839867
    840868    rcode = nf90_inquire_variable(nid, vid, DIMIDS = dimsid)
    841     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     869    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    842870
    843871    rcode = nf90_inquire_dimension(nid, dimsid(1), LEN = get_var3dims_ncunit(1))
    844     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     872    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    845873
    846874    rcode = nf90_inquire_dimension(nid, dimsid(2), LEN = get_var3dims_ncunit(2))
    847     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     875    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    848876
    849877    rcode = nf90_inquire_dimension(nid, dimsid(3), LEN = get_var3dims_ncunit(3))
    850     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     878    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    851879
    852880  END FUNCTION get_var3dims_ncunit
     
    867895    INTEGER                                              :: rcode
    868896    INTEGER, DIMENSION(4)                                :: dimsid
    869     CHARACTER(LEN=250)                                   :: msg
     897
    870898
    871899!!!!!!! Variables
     
    874902
    875903    fname = 'get_var4dims_file'
    876     PRINT *,TRIM(fname)
     904    !PRINT *,TRIM(fname)
    877905
    878906! Opening creation status
    879907    rcode = nf90_open(TRIM(filename), NF90_NOWRITE, nid)
    880     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     908    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    881909
    882910    rcode = nf90_inq_varid(nid, varname, vid)
    883     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     911    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    884912
    885913    rcode = nf90_inquire_variable(nid, vid, NDIMS = Ndims)
    886     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     914    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    887915
    888916    IF (Ndims /= 4) THEN
     
    892920
    893921    rcode = nf90_inquire_variable(nid, vid, DIMIDS = dimsid)
    894     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     922    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    895923
    896924    rcode = nf90_inquire_dimension(nid, dimsid(1), LEN = get_var4dims_file(1))
    897     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     925    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    898926
    899927    rcode = nf90_inquire_dimension(nid, dimsid(2), LEN = get_var4dims_file(2))
    900     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     928    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    901929
    902930    rcode = nf90_inquire_dimension(nid, dimsid(3), LEN = get_var4dims_file(3))
    903     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     931    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    904932
    905933    rcode = nf90_inquire_dimension(nid, dimsid(4), LEN = get_var4dims_file(4))
    906     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     934    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    907935
    908936    rcode = NF90_CLOSE(nid)
    909     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     937    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    910938
    911939  END FUNCTION get_var4dims_file
     
    929957
    930958    fname = 'get_varNdims_file'
    931     PRINT *,TRIM(fname)
     959    !PRINT *,TRIM(fname)
    932960
    933961! Opening creation status
    934962    rcode = nf90_open(TRIM(filename), NF90_NOWRITE, nid)
    935     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     963    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    936964
    937965    rcode = nf90_inq_varid(nid, varname, vid)
    938     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     966    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    939967
    940968    rcode = nf90_inquire_variable(nid, vid, NDIMS = get_varNdims_file)
    941     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     969    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    942970
    943971    rcode = NF90_CLOSE(nid)
    944     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     972    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    945973
    946974  END FUNCTION get_varNdims_file
     
    965993
    966994    fname = 'get_varNdims_ncunit'
    967     PRINT *,TRIM(fname)
     995    !PRINT *,TRIM(fname)
    968996
    969997    rcode = nf90_inq_varid(nid, varname, vid)
    970     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     998    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    971999
    9721000    rcode = nf90_inquire_variable(nid, vid, NDIMS = get_varNdims_ncunit)
    973     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1001    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    9741002
    9751003  END FUNCTION get_varNdims_ncunit
     
    9881016    INTEGER                                              :: iv, rcode
    9891017    CHARACTER(LEN=1000)                                  :: varinfile
    990     CHARACTER(LEN=250)                                   :: msg
    9911018
    9921019!!!!!!! Variables
     
    9981025! Opening creation status
    9991026    rcode = nf90_open(TRIM(filename), NF90_NOWRITE, nid)
    1000     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1027    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    10011028
    10021029    rcode = nf90_inquire(nid, Ndims, Nvars)
    1003     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1030    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    10041031
    10051032    DO iv=1, Nvars
    10061033      rcode = nf90_inquire_variable(nid, iv, name=varinfile)
    1007       IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1034      IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    10081035      IF (TRIM(varinfile) == TRIM(varname)) THEN
    10091036        isin_file = .TRUE.
     
    10151042
    10161043    rcode = NF90_CLOSE(nid)
    1017     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1044    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    10181045   
    10191046  END FUNCTION isin_file
     
    10331060    INTEGER                                              :: iv, rcode
    10341061    CHARACTER(LEN=1000)                                  :: varinfile
    1035     CHARACTER(LEN=250)                                   :: msg
    10361062
    10371063!!!!!!! Variables
     
    10421068
    10431069    rcode = nf90_inquire(nid, Ndims, Nvars)
    1044     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1070    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    10451071
    10461072    DO iv=1, Nvars
    10471073      rcode = nf90_inquire_variable(nid, iv, name=varinfile)
    1048       IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1074      IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    10491075      IF (TRIM(varinfile) == TRIM(varname)) THEN
    10501076        isin_ncunit = .TRUE.
     
    11031129          CALL removeChar(ncvarname, ' ')
    11041130          rcode = nf90_inq_varid(ncid, ncvarname, varid)
    1105           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1131          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    11061132
    11071133          rcode = nf90_put_var(ncid, varid, vals)         
    1108           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1134          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    11091135          vfound = .TRUE.
    11101136          CYCLE
     
    11701196          CALL removeChar(ncvarname, ' ')
    11711197          rcode = nf90_inq_varid(ncid, ncvarname, varid)
    1172           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1198          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    11731199
    11741200          rcode = nf90_put_var(ncid, varid, vals)         
    1175           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1201          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    11761202          vfound = .TRUE.
    11771203          CYCLE
     
    12371263          CALL removeChar(ncvarname, ' ')
    12381264          rcode = nf90_inq_varid(ncid, ncvarname, varid)
    1239           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1265          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    12401266
    12411267          rcode = nf90_put_var(ncid, varid, vals)         
    1242           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1268          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    12431269          vfound = .TRUE.
    12441270          CYCLE
     
    13061332          CALL removeChar(ncvarname, ' ')
    13071333          rcode = nf90_inq_varid(ncid, ncvarname, varid)
    1308           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1334          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    13091335
    13101336          rcode = nf90_put_var(ncid, varid, vals, start=(/1,it/), count=(/d1,1/))
    1311           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1337          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    13121338          vfound = .TRUE.
    13131339          CYCLE
     
    13751401          CALL removeChar(ncvarname, ' ')
    13761402          rcode = nf90_inq_varid(ncid, ncvarname, varid)
    1377           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1403          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    13781404
    13791405          rcode = nf90_put_var(ncid, varid, vals, start=(/1,1,it/), count=(/d1,d2,1/))
    1380           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1406          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    13811407          vfound = .TRUE.
    13821408          CYCLE
     
    14441470          CALL removeChar(ncvarname, ' ')
    14451471          rcode = nf90_inq_varid(ncid, ncvarname, varid)
    1446           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1472          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    14471473
    14481474          rcode = nf90_put_var(ncid, varid, vals, start=(/1,1,1,it/), count=(/d1,d2,d3,1/))
    1449           IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1475          IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    14501476          vfound = .TRUE.
    14511477          CYCLE
     
    14841510! d1: shape of the matrix
    14851511! vals: values to get
    1486 ! vname: name of the variable to get
     1512! vname: name of the variable to getºº
    14871513
    14881514    fname = 'get_varI1D_ncunit'
     
    14961522
    14971523    rcode = nf90_inq_varid(ncid, vname, varid)
    1498     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1524    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    14991525
    15001526    rcode = nf90_get_var(ncid, varid, vals)         
    1501     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1527    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    15021528
    15031529  END SUBROUTINE get_varI1D_ncunit
    1504 
    15051530
    15061531  SUBROUTINE get_varI2D_ncunit(ncid, d1, d2, vname, vals)
     
    15351560
    15361561    rcode = nf90_inq_varid(ncid, vname, varid)
    1537     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1562    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    15381563
    15391564    rcode = nf90_get_var(ncid, varid, vals)         
    1540     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1565    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    15411566
    15421567  END SUBROUTINE get_varI2D_ncunit
     1568
     1569  SUBROUTINE get_varI3D_ncunit(ncid, d1, d2, d3, vname, vals)
     1570! Subroutine to get a 2D integer variable from a netCDF file unit
     1571
     1572    USE netcdf
     1573
     1574    IMPLICIT NONE
     1575
     1576    INTEGER, INTENT(in)                                  :: ncid, d1, d2, d3
     1577    CHARACTER(LEN=*), INTENT(in)                         :: vname
     1578    INTEGER, DIMENSION(d1,d2,d3), INTENT(out)            :: vals
     1579 
     1580! Local
     1581    INTEGER                                              :: rcode, varid
     1582    LOGICAL                                              :: vfound
     1583
     1584!!!!!!! Variables
     1585! ncid: netCDF file identifier
     1586! d1: shape of the matrix
     1587! vals: values to get
     1588! vname: name of the variable to get
     1589
     1590    fname = 'get_varI3D_ncunit'
     1591
     1592    vfound = isin_ncunit(ncid, vname)
     1593
     1594    IF (.NOT.vfound) THEN
     1595      msg = "Unit file does not have variable '" // TRIM(vname) // "'"
     1596      CALL ErrMsg(msg, fname, -1)
     1597    END IF
     1598
     1599    rcode = nf90_inq_varid(ncid, vname, varid)
     1600    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
     1601
     1602    rcode = nf90_get_var(ncid, varid, vals)         
     1603    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
     1604
     1605  END SUBROUTINE get_varI3D_ncunit
    15431606
    15441607  SUBROUTINE get_varRK0D_ncunit(ncid, vname, vals)
     
    15721635
    15731636    rcode = nf90_inq_varid(ncid, vname, varid)
    1574     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1637    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    15751638
    15761639    rcode = nf90_get_var(ncid, varid, vals)         
    1577     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1640    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    15781641
    15791642  END SUBROUTINE get_varRK0D_ncunit
     
    16101673
    16111674    rcode = nf90_inq_varid(ncid, vname, varid)
    1612     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1675    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    16131676
    16141677    rcode = nf90_get_var(ncid, varid, vals)         
    1615     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1678    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    16161679
    16171680  END SUBROUTINE get_varRK1D_ncunit
     
    16481711
    16491712    rcode = nf90_inq_varid(ncid, vname, varid)
    1650     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1713    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    16511714
    16521715    rcode = nf90_get_var(ncid, varid, vals)         
    1653     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1716    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    16541717
    16551718  END SUBROUTINE get_varRK2D_ncunit
     
    16861749
    16871750    rcode = nf90_inq_varid(ncid, vname, varid)
    1688     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1751    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    16891752
    16901753    rcode = nf90_get_var(ncid, varid, vals)         
    1691     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1754    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    16921755
    16931756  END SUBROUTINE get_varRK3D_ncunit
     
    17241787
    17251788    rcode = nf90_inq_varid(ncid, vname, varid)
    1726     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1789    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    17271790
    17281791    rcode = nf90_get_var(ncid, varid, vals)         
    1729     IF (rcode /= NF90_NOERR) CALL handle_err(rcode)
     1792    IF (rcode /= NF90_NOERR) CALL handle_errf(rcode, fname)
    17301793
    17311794  END SUBROUTINE get_varRK4D_ncunit
Note: See TracChangeset for help on using the changeset viewer.