LCOV - code coverage report
Current view: | top level - hemco/HEMCO/src/Shared/NcdfUtil - hco_m_netcdf_io_read.F90 (source / functions) |  |  | Hit | Total | Coverage
Test: | coverage.info |  | Lines: | 0 | 251 | 0.0 %
Date: | 2024-12-17 22:39:59 |  | Functions: | 0 | 22 | 0.0 %

              Line data    Source code
           1             : !-------------------------------------------------------------------------
           2             : !  NASA/GFSC, SIVO, Code 610.3
           3             : !-------------------------------------------------------------------------
           4             : !BOP
           5             : !
           6             : ! !MODULE:  HCO_m_netcdf_io_read
           7             : !
           8             : ! !INTERFACE:
           9             : !
          10             : MODULE HCO_m_netcdf_io_read
          11             : !
          12             : ! !USES:
          13             : !
          14             :   IMPLICIT NONE
          15             :   PRIVATE
          16             : !
          17             : ! !PUBLIC MEMBER FUNCTIONS:
          18             : !
          19             :   ! Public interface
          20             :   PUBLIC :: NcRd
          21             :
          22             :   ! Private methods overloaded by public interface
          23             :   ! (see below for info about these routines & the arguments they take)
          24             :   INTERFACE NcRd
          25             :      MODULE PROCEDURE Ncrd_Scal
          26             :      MODULE PROCEDURE Ncrd_Scal_Int
          27             :      MODULE PROCEDURE Ncrd_1d_R8
          28             :      MODULE PROCEDURE Ncrd_1d_R4
          29             :      MODULE PROCEDURE Ncrd_1d_Int
          30             :      MODULE PROCEDURE Ncrd_1d_Char
          31             :      MODULE PROCEDURE Ncrd_2d_R8
          32             :      MODULE PROCEDURE Ncrd_2d_R4
          33             :      MODULE PROCEDURE Ncrd_2d_Int
          34             :      MODULE PROCEDURE Ncrd_2d_Char
          35             :      MODULE PROCEDURE Ncrd_3d_R8
          36             :      MODULE PROCEDURE Ncrd_3d_R4
          37             :      MODULE PROCEDURE Ncrd_3d_Int
          38             :      MODULE PROCEDURE Ncrd_4d_R8
          39             :      MODULE PROCEDURE Ncrd_4d_R4
          40             :      MODULE PROCEDURE Ncrd_4d_Int
          41             :      MODULE PROCEDURE Ncrd_5d_R8
          42             :      MODULE PROCEDURE Ncrd_5d_R4
          43             :      MODULE PROCEDURE Ncrd_6d_R8
          44             :      MODULE PROCEDURE Ncrd_6d_R4
          45             :      MODULE PROCEDURE Ncrd_7d_R8
          46             :      MODULE PROCEDURE Ncrd_7d_R4
          47             :   END INTERFACE NcRd
          48             : !
          49             : ! !DESCRIPTION: Routines for reading variables in a netCDF file.
          50             : !\\
          51             : !\\
          52             : ! !AUTHOR:
          53             : !  Jules Kouatchou
          54             : !
          55             : ! !REVISION HISTORY:
          56             : !  See https://github.com/geoschem/hemco for complete history
          57             : !EOP
          58             : !-------------------------------------------------------------------------
          59             : !BOC
          60             : CONTAINS
          61             : !EOC
          62             : !-------------------------------------------------------------------------
          63             : !BOP
          64             : !
          65             : ! !IROUTINE: Ncrd_Scal
          66             : !
          67             : ! !INTERFACE:
          68             : !
          69           0 :   subroutine Ncrd_Scal(varrd_scal, ncid, varname)
          70             : !
          71             : ! !USES:
          72             : !
          73             :     use netCDF
          74             :     use m_do_err_out
          75             : !
          76             : ! !INPUT PARAMETERS:
          77             : !!  ncid       : netCDF file id to read variable from
          78             : !!  varname    : netCDF variable name
          79             :     integer          , intent(in)   :: ncid
          80             :     character (len=*), intent(in)   :: varname
          81             : !
          82             : ! !OUTPUT PARAMETERS:
          83             : !!  varrd_scal : variable to fill
          84             :     real*8           , intent(out)  :: varrd_scal
          85             : !
          86             : ! !DESCRIPTION: Reads in a netCDF scalar variable.
          87             : !\\
          88             : !\\
          89             : ! !AUTHOR:
          90             : !  John Tannahill (LLNL) and Jules Kouatchou
          91             : !
          92             : ! !REVISION HISTORY:
          93             : !  See https://github.com/geoschem/hemco for complete history
          94             : !EOP
          95             : !-------------------------------------------------------------------------
          96             : !BOC
          97             : !
          98             : ! !LOCAL VARIABLES:
          99             :     character (len=512) :: err_msg
         100             :     integer             :: ierr
         101             :     integer             :: varid
         102             :     real*4              :: varrd_scal_tmp
         103             : !
         104           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         105             :
         106           0 :     if (ierr /= NF90_NOERR) then
         107             :        err_msg = 'In Ncrd_Scal #1:  ' // Trim (varname) // &
         108           0 :             ', ' // NF90_Strerror(ierr)
         109           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         110             :     end if
         111             :
         112           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_scal_tmp)
         113             :
         114           0 :     if (ierr /= NF90_NOERR) then
         115           0 :        err_msg = 'In Ncrd_Scal #2:  ' // NF90_Strerror(ierr)
         116           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         117             :     end if
         118             :
         119           0 :     varrd_scal = varrd_scal_tmp
         120             :
         121           0 :     return
         122             :
         123             :   end subroutine Ncrd_Scal
         124             : !EOC
         125             : !-------------------------------------------------------------------------
         126             : !BOP
         127             : !
         128             : ! !IROUTINE: Ncrd_Scal_Int
         129             : !
         130             : ! !INTERFACE:
         131             : !
         132           0 :   subroutine Ncrd_Scal_Int(varrd_scali, ncid, varname)
         133             : !
         134             : ! !USES:
         135             : !
         136             :     use netCDF
         137             :     use m_do_err_out
         138             : !
         139             : ! !INPUT PARAMETERS:
         140             : !!  ncid       : netCDF file id to read variable from
         141             : !!  varname    : netCDF variable name
         142             :     integer          , intent(in)   :: ncid
         143             :     character (len=*), intent(in)   :: varname
         144             : !
         145             : ! !OUTPUT PARAMETERS:
         146             : !!  varrd_scali : integer variable to fill
         147             :     integer          , intent(out)  :: varrd_scali
         148             : !
         149             : ! !DESCRIPTION: Reads in a netCDF integer scalar variable.
         150             : !\\
         151             : !\\
         152             : ! !AUTHOR:
         153             : !  John Tannahill (LLNL) and Jules Kouatchou
         154             : !
         155             : ! !REVISION HISTORY:
         156             : !  See https://github.com/geoschem/hemco for complete history
         157             : !EOP
         158             : !-------------------------------------------------------------------------
         159             : !BOC
         160             : !
         161             : ! !LOCAL VARIABLES:
         162             :     character (len=512) :: err_msg
         163             :     integer             :: ierr
         164             :     integer             :: varid
         165             : !
         166           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         167             :
         168           0 :     if (ierr /= NF90_NOERR) then
         169             :        err_msg = 'In Ncrd_Scal_Int #1:  ' // Trim (varname) // &
         170           0 :                  ', ' // NF90_Strerror(ierr)
         171           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         172             :     end if
         173             :
         174           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_scali)
         175             :
         176           0 :     if (ierr /= NF90_NOERR) then
         177           0 :        err_msg = 'In Ncrd_Scal_Int #2:  ' // NF90_Strerror(ierr)
         178           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         179             :     end if
         180             :
         181           0 :     return
         182             :
         183             :   end subroutine Ncrd_Scal_Int
         184             : !EOC
         185             : !-------------------------------------------------------------------------
         186             : !BOP
         187             : !
         188             : ! !IROUTINE: Ncrd_1d_R8
         189             : !
         190             : ! !INTERFACE:
         191             : !
         192           0 :   subroutine Ncrd_1d_R8(varrd_1d, ncid, varname, strt1d, cnt1d, err_stop, stat)
         193             : !
         194             : ! !USES:
         195             : !
         196             :     use netCDF
         197             :     use m_do_err_out
         198             : !
         199             : ! !INPUT PARAMETERS:
         200             : !!  ncid     : netCDF file id to read array input data from
         201             : !!  varname  : netCDF variable name for array
         202             : !!  strt1d   : vector specifying the index in varrd_1d where
         203             : !!             the first of the data values will be read
         204             : !!  cnt1d    : varrd_1d dimension
         205             :     integer          , intent(in)   :: ncid
         206             :     character (len=*), intent(in)   :: varname
         207             :     integer          , intent(in)   :: strt1d(1)
         208             :     integer          , intent(in)   :: cnt1d (1)
         209             :     logical, optional, intent(in)   :: err_stop
         210             : !
         211             : ! !OUTPUT PARAMETERS:
         212             : !!  varrd_1d : array to fill
         213             :     real*8           , intent(out)  :: varrd_1d(cnt1d(1))
         214             :     integer, optional, intent(out)  :: stat
         215             : !
         216             : ! !DESCRIPTION: Reads in a 1D netCDF real array and does some error checking.
         217             : !\\
         218             : !\\
         219             : ! !AUTHOR:
         220             : !  John Tannahill (LLNL) and Jules Kouatchou
         221             : !
         222             : ! !REVISION HISTORY:
         223             : !  See https://github.com/geoschem/hemco for complete history
         224             : !EOP
         225             : !-------------------------------------------------------------------------
         226             : !BOC
         227             : !
         228             : ! !LOCAL VARIABLES:
         229             : !
         230             :     character (len=512) :: err_msg
         231             :     integer             :: ierr
         232             :     integer             :: varid
         233             :     logical             :: dostop
         234             :
         235             :     ! set dostop flag
         236           0 :     dostop = .true.
         237           0 :     if ( present ( err_stop ) ) dostop = err_stop
         238             :
         239           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         240             :
         241           0 :     if (ierr /= NF90_NOERR) then
         242           0 :        if ( dostop ) then
         243             :           err_msg = 'In Ncrd_1d_R8 #1:  ' // Trim (varname) // &
         244           0 :                ', ' // NF90_Strerror(ierr)
         245           0 :           call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         246             :        else
         247           0 :           varrd_1d(:) = -999d0
         248           0 :           if ( present ( stat ) ) stat = 1
         249           0 :           return
         250             :        end if
         251             :     end if
         252             :
         253           0 :     ierr =  NF90_Get_Var(ncid, varid, varrd_1d, start=strt1d, count=cnt1d)
         254             :
         255           0 :     if (ierr /= NF90_NOERR) then
         256           0 :        if ( dostop ) then
         257           0 :           err_msg = 'In Ncrd_1d_R8 #2:  ' // NF90_Strerror(ierr)
         258           0 :           call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         259             :        else
         260           0 :           varrd_1d(:) = -999d0
         261           0 :           if ( present ( stat ) ) stat = 2
         262           0 :           return
         263             :        endif
         264             :     end if
         265             :
         266             :     ! set stat to 0 (= success)
         267           0 :     if ( present ( stat ) ) stat = 0
         268             :
         269             :   end subroutine Ncrd_1d_R8
         270             : !EOC
         271             : !-------------------------------------------------------------------------
         272             : !BOP
         273             : !
         274             : ! !IROUTINE: Ncrd_1d_R4
         275             : !
         276             : ! !INTERFACE:
         277             : !
         278           0 :   subroutine Ncrd_1d_R4(varrd_1d, ncid, varname, strt1d, cnt1d, err_stop, stat)
         279             : !
         280             : ! !USES:
         281             : !
         282             :     use netCDF
         283             :     use m_do_err_out
         284             : !
         285             : ! !INPUT PARAMETERS:
         286             : !!  ncid     : netCDF file id to read array input data from
         287             : !!  varname  : netCDF variable name for array
         288             : !!  strt1d   : vector specifying the index in varrd_1d where
         289             : !!             the first of the data values will be read
         290             : !!  cnt1d    : varrd_1d dimension
         291             :     integer          , intent(in)   :: ncid
         292             :     character (len=*), intent(in)   :: varname
         293             :     integer          , intent(in)   :: strt1d(1)
         294             :     integer          , intent(in)   :: cnt1d (1)
         295             :     logical, optional, intent(in)   :: err_stop
         296             : !
         297             : ! !OUTPUT PARAMETERS:
         298             : !!  varrd_1d : array to fill
         299             :     real*4           , intent(out)  :: varrd_1d(cnt1d(1))
         300             :     integer, optional, intent(out)  :: stat
         301             : !
         302             : ! !DESCRIPTION: Reads in a 1D netCDF real array and does some error checking.
         303             : !\\
         304             : !\\
         305             : ! !AUTHOR:
         306             : !  John Tannahill (LLNL) and Jules Kouatchou
         307             : !
         308             : ! !REVISION HISTORY:
         309             : !  See https://github.com/geoschem/hemco for complete history
         310             : !EOP
         311             : !-------------------------------------------------------------------------
         312             : !BOC
         313             : !
         314             : ! !LOCAL VARIABLES:
         315             : !
         316             :     character (len=512) :: err_msg
         317             :     integer             :: ierr
         318             :     integer             :: varid
         319             :     logical             :: dostop
         320             :
         321             :     ! set dostop flag
         322           0 :     dostop = .true.
         323           0 :     if ( present ( err_stop ) ) dostop = err_stop
         324             :
         325           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         326             :
         327           0 :     if (ierr /= NF90_NOERR) then
         328           0 :        if ( dostop ) then
         329             :           err_msg = 'In Ncrd_1d_R4 #1:  ' // Trim (varname) // &
         330           0 :                      ', ' // NF90_Strerror(ierr)
         331           0 :           call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         332             :        else
         333           0 :           varrd_1d(:) = -999.0
         334           0 :           if ( present ( stat ) ) stat = 1
         335           0 :           return
         336             :        end if
         337             :     end if
         338             :
         339           0 :     ierr =  NF90_Get_Var(ncid, varid, varrd_1d, start=strt1d, count=cnt1d)
         340             :
         341           0 :     if (ierr /= NF90_NOERR) then
         342           0 :        if ( dostop ) then
         343           0 :           err_msg = 'In Ncrd_1d_R4 #2:  ' // NF90_Strerror(ierr)
         344           0 :           call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         345             :        else
         346           0 :           varrd_1d(:) = -999.0
         347           0 :           if ( present ( stat ) ) stat = 2
         348           0 :           return
         349             :        endif
         350             :     end if
         351             :
         352             :     ! set stat to 0 (= success)
         353           0 :     if ( present ( stat ) ) stat = 0
         354             :     return
         355             :
         356             :   end subroutine Ncrd_1d_R4
         357             : !EOC
         358             : !-------------------------------------------------------------------------
         359             : !BOP
         360             : !
         361             : ! !IROUTINE: Ncrd_1d_Int
         362             : !
         363             : ! !INTERFACE:
         364             : !
         365           0 :   subroutine Ncrd_1d_Int(varrd_1di, ncid,     varname, strt1d, &
         366             :                          cnt1d,     err_stop, stat)
         367             : !
         368             : ! !USES:
         369             : !
         370             :     use netCDF
         371             :     use m_do_err_out
         372             : !
         373             : ! !INPUT PARAMETERS:
         374             : !
         375             : !!  ncid     : netCDF file id to read array input data from
         376             : !!  varname  : netCDF variable name for array
         377             : !!  strt1d   : vector specifying the index in varrd_1di where
         378             : !!             the first of the data values will be read
         379             : !!  cnt1d    : varrd_1di dimension
         380             :     integer          , intent(in)   :: ncid
         381             :     character (len=*), intent(in)   :: varname
         382             :     integer          , intent(in)   :: strt1d(1)
         383             :     integer          , intent(in)   :: cnt1d (1)
         384             :     logical, optional, intent(in)   :: err_stop
         385             : !
         386             : ! !OUTPUT PARAMETERS:
         387             : !!  varrd_1di : intger array to fill
         388             :     integer          , intent(out)  :: varrd_1di(cnt1d(1))
         389             :     integer, optional, intent(out)  :: stat
         390             : !
         391             : ! !DESCRIPTION: Reads in a 1D netCDF integer array and does some error
         392             : !  checking.
         393             : !\\
         394             : !\\
         395             : ! !AUTHOR:
         396             : !  John Tannahill (LLNL) and Jules Kouatchou
         397             : !
         398             : ! !REVISION HISTORY:
         399             : !  See https://github.com/geoschem/hemco for complete history
         400             : !EOP
         401             : !-------------------------------------------------------------------------
         402             : !BOC
         403             : !
         404             : ! !LOCAL VARIABLES:
         405             : !
         406             :     character (len=512) :: err_msg
         407             :     integer             :: ierr
         408             :     integer             :: varid
         409             :     logical             :: dostop
         410             :
         411             :     ! set dostop flag
         412           0 :     dostop = .true.
         413           0 :     if ( present ( err_stop ) ) dostop = err_stop
         414             :
         415           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         416             :
         417           0 :     if (ierr /= NF90_NOERR) then
         418           0 :        if ( dostop ) then
         419             :           err_msg = 'In Ncrd_1d_Int #1:  ' // Trim (varname) // &
         420           0 :                     ', ' // NF90_Strerror(ierr)
         421           0 :           call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         422             :        else
         423           0 :           varrd_1di(:) = -999
         424           0 :           if ( present ( stat ) ) stat = 1
         425           0 :           return
         426             :        end if
         427             :     end if
         428             :
         429           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_1di, start=strt1d, count=cnt1d)
         430             :
         431           0 :     if (ierr /= NF90_NOERR) then
         432           0 :        if ( dostop ) then
         433           0 :           err_msg = 'In Ncrd_1d_Int #2:  ' // NF90_Strerror(ierr)
         434           0 :           call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         435             :        else
         436           0 :           varrd_1di(:) = -999
         437           0 :           if ( present ( stat ) ) stat = 2
         438           0 :           return
         439             :        endif
         440             :     end if
         441             :
         442             :     ! set stat to 0 (= success)
         443           0 :     if ( present ( stat ) ) stat = 0
         444             :
         445             :     return
         446             :
         447             :   end subroutine Ncrd_1d_Int
         448             : !EOC
         449             : !-------------------------------------------------------------------------
         450             : !BOP
         451             : !
         452             : ! !IROUTINE: Ncrd_2d_R8
         453             : !
         454             : ! !INTERFACE:
         455             : !
         456           0 :   subroutine Ncrd_2d_R8(varrd_2d, ncid, varname, strt2d, cnt2d)
         457             : !
         458             : ! !USES:
         459             : !
         460             :     use netCDF
         461             :     use m_do_err_out
         462             :
         463             : !!  ncid     : netCDF file id to read array input data from
         464             : !!  varname  : netCDF variable name for array
         465             : !!  strt2d   : vector specifying the index in varrd_2d where
         466             : !!               the first of the data values will be read
         467             : !!  cnt2d    : varrd_2d dimensions
         468             :     integer          , intent(in)   :: ncid
         469             :     character (len=*), intent(in)   :: varname
         470             :     integer          , intent(in)   :: strt2d(2)
         471             :     integer          , intent(in)   :: cnt2d (2)
         472             : !
         473             : ! !OUTPUT PARAMETERS:
         474             : !!  varrd_2d : array to fill
         475             :     real*8           , intent(out)  :: varrd_2d(cnt2d(1), cnt2d(2))
         476             : !
         477             : ! !DESCRIPTION: Reads in a 2D netCDF real array and does some error checking.
         478             : !\\
         479             : !\\
         480             : ! !AUTHOR:
         481             : !  John Tannahill (LLNL) and Jules Kouatchou
         482             : !
         483             : ! !REVISION HISTORY:
         484             : !  See https://github.com/geoschem/hemco for complete history
         485             : !EOP
         486             : !-------------------------------------------------------------------------
         487             : !BOC
         488             : !
         489             : ! !LOCAL VARIABLES:
         490             :     character (len=512) :: err_msg
         491             :     integer             :: ierr
         492             :     integer             :: varid
         493             : !
         494           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         495             :
         496           0 :     if (ierr /= NF90_NOERR) then
         497             :        err_msg = 'In Ncrd_2d_R8 #1:  ' // Trim (varname) // &
         498           0 :                  ', ' // NF90_Strerror(ierr)
         499           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         500             :     end if
         501             :
         502           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_2d, start=strt2d, count=cnt2d)
         503             :
         504           0 :     if (ierr /= NF90_NOERR) then
         505           0 :        err_msg = 'In Ncrd_2d_R8 #2:  ' // NF90_Strerror(ierr)
         506           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         507             :     end if
         508             :
         509           0 :   end subroutine Ncrd_2d_R8
         510             : !EOC
         511             : !-------------------------------------------------------------------------
         512             : !BOP
         513             : !
         514             : ! !IROUTINE: Ncrd_2d_R4
         515             : !
         516             : ! !INTERFACE:
         517             : !
         518           0 :   subroutine Ncrd_2d_R4(varrd_2d, ncid, varname, strt2d, cnt2d)
         519             : !
         520             : ! !USES:
         521             : !
         522             :     use netCDF
         523             :     use m_do_err_out
         524             : !
         525             : ! !INPUT PARAMETERS:
         526             : !!  ncid     : netCDF file id to read array input data from
         527             : !!  varname  : netCDF variable name for array
         528             : !!  strt2d   : vector specifying the index in varrd_2d where
         529             : !!             the first of the data values will be read
         530             : !!  cnt2d    : varrd_2d dimensions
         531             :     integer          , intent(in)   :: ncid
         532             :     character (len=*), intent(in)   :: varname
         533             :     integer          , intent(in)   :: strt2d(2)
         534             :     integer          , intent(in)   :: cnt2d (2)
         535             : !
         536             : ! !OUTPUT PARAMETERS:
         537             : !!  varrd_2d : array to fill
         538             :     real*4           , intent(out)  :: varrd_2d(cnt2d(1), cnt2d(2))
         539             : !
         540             : ! !DESCRIPTION: Reads in a 2D netCDF real array and does some error checking.
         541             : !\\
         542             : !\\
         543             : ! !AUTHOR:
         544             : !  John Tannahill (LLNL) and Jules Kouatchou
         545             : !
         546             : ! !REVISION HISTORY:
         547             : !  See https://github.com/geoschem/hemco for complete history
         548             : !EOP
         549             : !-------------------------------------------------------------------------
         550             : !BOC
         551             : !
         552             : ! !LOCAL VARIABLES:
         553             :     character (len=512) :: err_msg
         554             :     integer             :: ierr
         555             :     integer             :: varid
         556             : !
         557           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         558             :
         559           0 :     if (ierr /= NF90_NOERR) then
         560             :        err_msg = 'In Ncrd_2d_R4 #1:  ' // Trim (varname) // &
         561           0 :                   ', ' // NF90_Strerror(ierr)
         562           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         563             :     end if
         564             :
         565           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_2d, start=strt2d, count=cnt2d)
         566             :
         567           0 :     if (ierr /= NF90_NOERR) then
         568           0 :        err_msg = 'In Ncrd_2d_R4 #2:  ' // NF90_Strerror(ierr)
         569           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         570             :     end if
         571             :
         572           0 :   end subroutine Ncrd_2d_R4
         573             : !EOC
         574             : !-------------------------------------------------------------------------
         575             : !BOP
         576             : !
         577             : ! !IROUTINE: Ncrd_2d_Int
         578             : !
         579             : ! !INTERFACE:
         580             : !
         581           0 :   subroutine Ncrd_2d_Int(varrd_2di, ncid, varname, strt2d, cnt2d)
         582             : !
         583             : ! !USES:
         584             : !
         585             :     use netCDF
         586             :     use m_do_err_out
         587             : !
         588             : ! !INPUT PARAMETERS:
         589             : !!  ncid     : netCDF file id to read array input data from
         590             : !!  varname  : netCDF variable name for array
         591             : !!  strt2d   : vector specifying the index in varrd_2d where
         592             : !!             the first of the data values will be read
         593             : !!  cnt2d    : varrd_2di dimensions
         594             :     integer          , intent(in)   :: ncid
         595             :     character (len=*), intent(in)   :: varname
         596             :     integer          , intent(in)   :: strt2d(2)
         597             :     integer          , intent(in)   :: cnt2d (2)
         598             : !
         599             : ! !OUTPUT PARAMETERS:
         600             : !!  varrd_2di : intger array to fill
         601             :     integer          , intent(out)  :: varrd_2di(cnt2d(1), cnt2d(2))
         602             : !
         603             : ! !DESCRIPTION: Reads in a 2D netCDF integer array and does some error
         604             : !  checking.
         605             : !\\
         606             : !\\
         607             : ! !AUTHOR:
         608             : !  John Tannahill (LLNL) and Jules Kouatchou
         609             : !
         610             : ! !REVISION HISTORY:
         611             : !  See https://github.com/geoschem/hemco for complete history
         612             : !EOP
         613             : !-------------------------------------------------------------------------
         614             : !BOC
         615             : !
         616             : ! !LOCAL VARIABLES:
         617             :     character (len=512) :: err_msg
         618             :     integer             :: ierr
         619             :     integer             :: varid
         620             : !
         621           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         622             :
         623           0 :     if (ierr /= NF90_NOERR) then
         624             :        err_msg = 'In Ncrd_2d_Int #1:  ' // Trim (varname) // &
         625           0 :                   ', ' // NF90_Strerror(ierr)
         626           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         627             :     end if
         628             :
         629           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_2di, start=strt2d, count=cnt2d)
         630             :
         631           0 :     if (ierr /= NF90_NOERR) then
         632           0 :        err_msg = 'In Ncrd_2d_Int #2:  ' // NF90_Strerror(ierr)
         633           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         634             :     end if
         635             :
         636           0 :   end subroutine Ncrd_2d_Int
         637             : !EOC
         638             : !-------------------------------------------------------------------------
         639             : !BOP
         640             : !
         641             : ! !IROUTINE: Ncrd_3d_R8
         642             : !
         643             : ! !INTERFACE:
         644             : !
         645           0 :   subroutine Ncrd_3d_R8(varrd_3d, ncid, varname, strt3d, cnt3d)
         646             : !
         647             : ! !USES:
         648             : !
         649             :     use netCDF
         650             :     use m_do_err_out
         651             : !
         652             : ! !INPUT PARAMETERS:
         653             : !!  ncid     : netCDF file id to read array input data from
         654             : !!  varname  : netCDF variable name for array
         655             : !!  strt3d   : vector specifying the index in varrd_3d where
         656             : !!               the first of the data values will be read
         657             : !!  cnt3d    : varrd_3d dimensions
         658             :     integer          , intent(in)   :: ncid
         659             :     character (len=*), intent(in)   :: varname
         660             :     integer          , intent(in)   :: strt3d(3)
         661             :     integer          , intent(in)   :: cnt3d (3)
         662             : !
         663             : ! !OUTPUT PARAMETERS:
         664             : !!  varrd_3d : array to fill
         665             :     real*8           , intent(out)  :: varrd_3d(cnt3d(1), cnt3d(2), &
         666             :                                                 cnt3d(3))
         667             : !
         668             : ! !DESCRIPTION: Reads in a 3D netCDF real array and does some error checking.
         669             : !\\
         670             : !\\
         671             : ! !AUTHOR:
         672             : !  John Tannahill (LLNL) and Jules Kouatchou
         673             : !
         674             : ! !REVISION HISTORY:
         675             : !  See https://github.com/geoschem/hemco for complete history
         676             : !EOP
         677             : !-------------------------------------------------------------------------
         678             : !BOC
         679             : !
         680             : ! !LOCAL VARIABLES:
         681             :     character (len=512) :: err_msg
         682             :     integer             :: ierr
         683             :     integer             :: varid
         684             : !
         685           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         686             :
         687           0 :     if (ierr /= NF90_NOERR) then
         688             :        err_msg = 'In Ncrd_3d_R8 #1:  ' // Trim (varname) // &
         689           0 :                  ', ' // NF90_Strerror(ierr)
         690           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         691             :     end if
         692             :
         693           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_3d, start=strt3d, count=cnt3d)
         694             :
         695           0 :     if (ierr /= NF90_NOERR) then
         696           0 :        err_msg = 'In Ncrd_3d_R8 #2:  ' // NF90_Strerror(ierr)
         697           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         698             :     end if
         699             :
         700           0 :   end subroutine Ncrd_3d_R8
         701             : !EOC
         702             : !-------------------------------------------------------------------------
         703             : !BOP
         704             : !
         705             : ! !IROUTINE: Ncrd_3d_R4
         706             : !
         707             : ! !INTERFACE:
         708             : !
         709           0 :   subroutine Ncrd_3d_R4(varrd_3d, ncid, varname, strt3d, cnt3d)
         710             : !
         711             : ! !USES:
         712             : !
         713             :     use netCDF
         714             :     use m_do_err_out
         715             : !
         716             : ! !INPUT PARAMETERS:
         717             : !!  ncid     : netCDF file id to read array input data from
         718             : !!  varname  : netCDF variable name for array
         719             : !!  strt3d   : vector specifying the index in varrd_3d where
         720             : !!             the first of the data values will be read
         721             : !!  cnt3d    : varrd_3d dimensions
         722             :     integer          , intent(in)   :: ncid
         723             :     character (len=*), intent(in)   :: varname
         724             :     integer          , intent(in)   :: strt3d(3)
         725             :     integer          , intent(in)   :: cnt3d (3)
         726             : !
         727             : ! !OUTPUT PARAMETERS:
         728             : !!  varrd_3d : array to fill
         729             :     real*4           , intent(out)  :: varrd_3d(cnt3d(1), cnt3d(2), &
         730             :                                                 cnt3d(3))
         731             : !
         732             : ! !DESCRIPTION: Reads in a 3D netCDF real array and does some error checking.
         733             : !\\
         734             : !\\
         735             : ! !AUTHOR:
         736             : !  John Tannahill (LLNL) and Jules Kouatchou
         737             : !
         738             : ! !REVISION HISTORY:
         739             : !  See https://github.com/geoschem/hemco for complete history
         740             : !EOP
         741             : !-------------------------------------------------------------------------
         742             : !BOC
         743             : !
         744             : ! !LOCAL VARIABLES:
         745             :     character (len=512) :: err_msg
         746             :     integer             :: ierr
         747             :     integer             :: varid
         748             : !
         749           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         750             :
         751           0 :     if (ierr /= NF90_NOERR) then
         752             :        err_msg = 'In Ncrd_3d_R4 #1:  ' // Trim (varname) // &
         753           0 :                  ', ' // NF90_Strerror(ierr)
         754           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         755             :     end if
         756             :
         757           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_3d, start=strt3d, count=cnt3d)
         758             :
         759           0 :     if (ierr /= NF90_NOERR) then
         760           0 :        err_msg = 'In Ncrd_3d_R4 #2:  ' // NF90_Strerror(ierr)
         761           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         762             :     end if
         763             :
         764           0 :   end subroutine Ncrd_3d_R4
         765             : !EOC
         766             : !-------------------------------------------------------------------------
         767             : !BOP
         768             : !
         769             : ! !IROUTINE: Ncrd_3d_Int
         770             : !
         771             : ! !INTERFACE:
         772             : !
         773           0 :   subroutine Ncrd_3d_Int(varrd_3di, ncid, varname, strt3d, cnt3d)
         774             : !
         775             : ! !USES:
         776             : !
         777             :     use netCDF
         778             :     use m_do_err_out
         779             : !
         780             : ! !INPUT PARAMETERS:
         781             : !!  ncid     : netCDF file id to read array input data from
         782             : !!  varname  : netCDF variable name for array
         783             : !!  strt3d   : vector specifying the index in varrd_3d where
         784             : !!             the first of the data values will be read
         785             : !!  cnt3d    : varrd_3di dimensions
         786             :     integer          , intent(in)   :: ncid
         787             :     character (len=*), intent(in)   :: varname
         788             :     integer          , intent(in)   :: strt3d(3)
         789             :     integer          , intent(in)   :: cnt3d (3)
         790             : !
         791             : ! !OUTPUT PARAMETERS:
         792             : !!  varrd_3di : intger array to fill
         793             :     integer          , intent(out)  :: varrd_3di(cnt3d(1), cnt3d(2), &
         794             :                                                  cnt3d(3))
         795             : !
         796             : ! !DESCRIPTION: Reads in a 3D netCDF integer array and does some error
         797             : !  checking.
         798             : !\\
         799             : !\\
         800             : ! !AUTHOR:
         801             : !  John Tannahill (LLNL) and Jules Kouatchou
         802             : !
         803             : ! !REVISION HISTORY:
         804             : !  See https://github.com/geoschem/hemco for complete history
         805             : !EOP
         806             : !-------------------------------------------------------------------------
         807             : !BOC
         808             : !
         809             : ! !LOCAL VARIABLES:
         810             :     character (len=512) :: err_msg
         811             :     integer             :: ierr
         812             :     integer             :: varid
         813             : !
         814           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         815             :
         816           0 :     if (ierr /= NF90_NOERR) then
         817             :        err_msg = 'In Ncrd_3d_Int #1:  ' // Trim (varname) // &
         818           0 :                   ', ' // NF90_Strerror(ierr)
         819           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         820             :     end if
         821             :
         822           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_3di, start=strt3d, count=cnt3d)
         823             :
         824           0 :     if (ierr /= NF90_NOERR) then
         825           0 :        err_msg = 'In Ncrd_3d_Int #2:  ' // NF90_Strerror(ierr)
         826           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         827             :     end if
         828             :
         829           0 :   end subroutine Ncrd_3d_Int
         830             : !EOC
         831             : !-------------------------------------------------------------------------
         832             : !BOP
         833             : !
         834             : ! !IROUTINE: Ncrd_4d_R8
         835             : !
         836             : ! !INTERFACE:
         837             : !
         838           0 :   subroutine Ncrd_4d_R8(varrd_4d, ncid, varname, strt4d, cnt4d)
         839             : !
         840             : ! !USES:
         841             : !
         842             :     use netCDF
         843             :     use m_do_err_out
         844             : !
         845             :     implicit none
         846             : !
         847             : ! !INPUT PARAMETERS:
         848             : !!  ncid     : netCDF file id to read array input data from
         849             : !!  varname  : netCDF variable name for array
         850             : !!  strt4d   : vector specifying the index in varrd_4d where
         851             : !!             the first of the data values will be read
         852             : !!  cnt4d    : varrd_4d dimensions
         853             :     integer          , intent(in)   :: ncid
         854             :     character (len=*), intent(in)   :: varname
         855             :     integer          , intent(in)   :: strt4d(4)
         856             :     integer          , intent(in)   :: cnt4d (4)
         857             : !
         858             : ! !OUTPUT PARAMETERS:
         859             : !!  varrd_4d : array to fill
         860             :     real*8           , intent(out)  :: varrd_4d(cnt4d(1), cnt4d(2), &
         861             :                                                 cnt4d(3), cnt4d(4))
         862             : !
         863             : ! !DESCRIPTION: Reads in a 4D netCDF real array and does some error checking.
         864             : !\\
         865             : !\\
         866             : ! !AUTHOR:
         867             : !  John Tannahill (LLNL) and Jules Kouatchou
         868             : !
         869             : ! !REVISION HISTORY:
         870             : !  See https://github.com/geoschem/hemco for complete history
         871             : !EOP
         872             : !-------------------------------------------------------------------------
         873             : !BOC
         874             : !
         875             : ! !LOCAL VARIABLES:
         876             :     character (len=512) :: err_msg
         877             :     integer             :: ierr
         878             :     integer             :: varid
         879             : !
         880           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         881             :
         882           0 :     if (ierr /= NF90_NOERR) then
         883             :        err_msg = 'In Ncrd_4d_R8 #1:  ' // Trim (varname) // &
         884           0 :                  ', ' // NF90_Strerror(ierr)
         885           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         886             :     end if
         887             :
         888           0 :     ierr =  NF90_Get_Var(ncid, varid, varrd_4d, start=strt4d, count=cnt4d)
         889             :
         890           0 :     if (ierr /= NF90_NOERR) then
         891           0 :        err_msg = 'In Ncrd_4d_R8 #2:  ' // NF90_Strerror(ierr)
         892           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         893             :     end if
         894             :
         895           0 :   end subroutine Ncrd_4d_R8
         896             : !EOC
         897             : !-------------------------------------------------------------------------
         898             : !BOP
         899             : !
         900             : ! !IROUTINE: Ncrd_4d_R4
         901             : !
         902             : ! !INTERFACE:
         903             : !
         904           0 :   subroutine Ncrd_4d_R4(varrd_4d, ncid, varname, strt4d, cnt4d)
         905             : !
         906             : ! !USES:
         907             : !
         908             :     use netCDF
         909             :     use m_do_err_out
         910             : !
         911             : ! !INPUT PARAMETERS:
         912             : !!  ncid     : netCDF file id to read array input data from
         913             : !!  varname  : netCDF variable name for array
         914             : !!  strt4d   : vector specifying the index in varrd_4d where
         915             : !!             the first of the data values will be read
         916             : !!  cnt4d    : varrd_4d dimensions
         917             :     integer          , intent(in)   :: ncid
         918             :     character (len=*), intent(in)   :: varname
         919             :     integer          , intent(in)   :: strt4d(4)
         920             :     integer          , intent(in)   :: cnt4d (4)
         921             : !
         922             : ! !OUTPUT PARAMETERS:
         923             : !!  varrd_4d : array to fill
         924             :     real*4           , intent(out)  :: varrd_4d(cnt4d(1), cnt4d(2), &
         925             :                                                 cnt4d(3), cnt4d(4))
         926             : !
         927             : ! !DESCRIPTION: Reads in a 4D netCDF real array and does some error checking.
         928             : !\\
         929             : !\\
         930             : ! !AUTHOR:
         931             : !  John Tannahill (LLNL) and Jules Kouatchou
         932             : !
         933             : ! !REVISION HISTORY:
         934             : !  See https://github.com/geoschem/hemco for complete history
         935             : !EOP
         936             : !-------------------------------------------------------------------------
         937             : !BOC
         938             : !
         939             : ! !LOCAL VARIABLES:
         940             :     character (len=512) :: err_msg
         941             :     integer             :: ierr
         942             :     integer             :: varid
         943             : !
         944           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
         945             :
         946           0 :     if (ierr /= NF90_NOERR) then
         947             :        err_msg = 'In Ncrd_4d_R4 #1:  ' // Trim (varname) // &
         948           0 :                   ', ' // NF90_Strerror(ierr)
         949           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
         950             :     end if
         951             :
         952           0 :     ierr =  NF90_Get_Var(ncid, varid, varrd_4d, start=strt4d, count=cnt4d)
         953             :
         954           0 :     if (ierr /= NF90_NOERR) then
         955           0 :        err_msg = 'In Ncrd_4d_R4 #2:  ' // NF90_Strerror(ierr)
         956           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
         957             :     end if
         958             :
         959           0 :   end subroutine Ncrd_4d_R4
         960             : !EOC
         961             : !-------------------------------------------------------------------------
         962             : !BOP
         963             : !
         964             : ! !IROUTINE: Ncrd_4d_Int
         965             : !
         966             : ! !INTERFACE:
         967             : !
         968           0 :   subroutine Ncrd_4d_Int(varrd_4di, ncid, varname, strt4d, cnt4d)
         969             : !
         970             : ! !USES:
         971             : !
         972             :     use netCDF
         973             :     use m_do_err_out
         974             : !
         975             : ! !INPUT PARAMETERS:
         976             : !!  ncid     : netCDF file id to read array input data from
         977             : !!  varname  : netCDF variable name for array
         978             : !!  strt3d   : vector specifying the index in varrd_3d where
         979             : !!             the first of the data values will be read
         980             : !!  cnt3d    : varrd_3di dimensions
         981             :     integer          , intent(in)   :: ncid
         982             :     character (len=*), intent(in)   :: varname
         983             :     integer          , intent(in)   :: strt4d(4)
         984             :     integer          , intent(in)   :: cnt4d (4)
         985             : !
         986             : ! !OUTPUT PARAMETERS:
         987             : !!  varrd_3di : intger array to fill
         988             :     integer          , intent(out)  :: varrd_4di(cnt4d(1), cnt4d(2), &
         989             :                                                  cnt4d(3), cnt4d(4))
         990             : !
         991             : ! !DESCRIPTION: Reads in a 3D netCDF integer array and does some error
         992             : !  checking.
         993             : !\\
         994             : !\\
         995             : ! !AUTHOR:
         996             : !  John Tannahill (LLNL) and Jules Kouatchou
         997             : !
         998             : ! !REVISION HISTORY:
         999             : !  See https://github.com/geoschem/hemco for complete history
        1000             : !EOP
        1001             : !-------------------------------------------------------------------------
        1002             : !BOC
        1003             : !
        1004             : ! !LOCAL VARIABLES:
        1005             :     character (len=512) :: err_msg
        1006             :     integer             :: ierr
        1007             :     integer             :: varid
        1008             : !
        1009           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
        1010             :
        1011           0 :     if (ierr /= NF90_NOERR) then
        1012             :        err_msg = 'In Ncrd_3d_Int #1:  ' // Trim (varname) // &
        1013           0 :                   ', ' // NF90_Strerror(ierr)
        1014           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
        1015             :     end if
        1016             :
        1017           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_4di, start=strt4d, count=cnt4d)
        1018             :
        1019           0 :     if (ierr /= NF90_NOERR) then
        1020           0 :        err_msg = 'In Ncrd_3d_Int #2:  ' // NF90_Strerror(ierr)
        1021           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
        1022             :     end if
        1023             :
        1024           0 :   end subroutine Ncrd_4d_Int
        1025             : !EOC
        1026             : !-------------------------------------------------------------------------
        1027             : !BOP
        1028             : !
        1029             : ! !IROUTINE: Ncrd_5d_R8
        1030             : !
        1031             : ! !INTERFACE:
        1032             : !
        1033           0 :       subroutine Ncrd_5d_R8 (varrd_5d, ncid, varname, strt5d, cnt5d)
        1034             : !
        1035             : ! !USES:
        1036             : !
        1037             :     use netCDF
        1038             :     use m_do_err_out
        1039             : !
        1040             : ! !INPUT PARAMETERS:
        1041             : !!  ncid     : netCDF file id to read array input data from
        1042             : !!  varname  : netCDF variable name for array
        1043             : !!  strt5d   : vector specifying the index in varrd_5d where
        1044             : !!             the first of the data values will be read
        1045             : !!  cnt5d    : varrd_5d dimensions
        1046             :     integer          , intent(in)   :: ncid
        1047             :     character (len=*), intent(in)   :: varname
        1048             :     integer          , intent(in)   :: strt5d(5)
        1049             :     integer          , intent(in)   :: cnt5d (5)
        1050             : !
        1051             : ! !OUTPUT PARAMETERS:
        1052             : !!  varrd_5d : array to fill
        1053             :     real*8         , intent(out)  :: varrd_5d(cnt5d(1), cnt5d(2), &
        1054             :                                               cnt5d(3), cnt5d(4), &
        1055             :                                               cnt5d(5))
        1056             : !
        1057             : ! !DESCRIPTION: Reads in a 5D netCDF real array and does some error checking.
        1058             : !\\
        1059             : !\\
        1060             : ! !AUTHOR:
        1061             : !  John Tannahill (LLNL) and Jules Kouatchou
        1062             : !
        1063             : ! !REVISION HISTORY:
        1064             : !  See https://github.com/geoschem/hemco for complete history
        1065             : !EOP
        1066             : !-------------------------------------------------------------------------
        1067             : !BOC
        1068             : !
        1069             : ! !LOCAL VARIABLES:
        1070             :     character (len=512) :: err_msg
        1071             :     integer             :: ierr
        1072             :     integer             :: varid
        1073             : !
        1074           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
        1075             :
        1076           0 :     if (ierr /= NF90_NOERR) then
        1077             :         err_msg = 'In Ncrd_5d_R8 #1:  ' // Trim (varname) // &
        1078           0 :                   ', ' // NF90_Strerror(ierr)
        1079           0 :         call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
        1080             :      end if
        1081             :
        1082           0 :      ierr = NF90_Get_Var(ncid, varid, varrd_5d, start=strt5d, count=cnt5d)
        1083             :
        1084           0 :      if (ierr /= NF90_NOERR) then
        1085           0 :         err_msg = 'In Ncrd_5d_R8 #2:  ' // NF90_Strerror(ierr)
        1086           0 :         call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
        1087             :      end if
        1088             :
        1089           0 :   end subroutine Ncrd_5d_R8
        1090             : !EOC
        1091             : !-------------------------------------------------------------------------
        1092             : !BOP
        1093             : !
        1094             : ! !IROUTINE: Ncrd_5d_R4
        1095             : !
        1096             : ! !INTERFACE:
        1097             : !
        1098           0 :   subroutine Ncrd_5d_R4(varrd_5d, ncid, varname, strt5d, cnt5d)
        1099             : !
        1100             : ! !USES:
        1101             : !
        1102             :     use netCDF
        1103             :     use m_do_err_out
        1104             : !
        1105             : ! !INPUT PARAMETERS:
        1106             : !!  ncid     : netCDF file id to read array input data from
        1107             : !!  varname  : netCDF variable name for array
        1108             : !!  strt5d   : vector specifying the index in varrd_5d where
        1109             : !!             the first of the data values will be read
        1110             : !!  cnt5d    : varrd_5d dimensions
        1111             :     integer          , intent(in)   :: ncid
        1112             :     character (len=*), intent(in)   :: varname
        1113             :     integer          , intent(in)   :: strt5d(5)
        1114             :     integer          , intent(in)   :: cnt5d (5)
        1115             : !
        1116             : ! !OUTPUT PARAMETERS:
        1117             : !!  varrd_5d : array to fill
        1118             :     real*4          , intent(out)  :: varrd_5d(cnt5d(1), cnt5d(2), &
        1119             :                                                 cnt5d(3), cnt5d(4), &
        1120             :                                                 cnt5d(5))
        1121             : !
        1122             : ! !DESCRIPTION: Reads in a 5D netCDF real array and does some error checking.
        1123             : !\\
        1124             : !\\
        1125             : ! !AUTHOR:
        1126             : !  John Tannahill (LLNL) and Jules Kouatchou
        1127             : !
        1128             : ! !REVISION HISTORY:
        1129             : !  See https://github.com/geoschem/hemco for complete history
        1130             : !EOP
        1131             : !-------------------------------------------------------------------------
        1132             : !BOC
        1133             : !
        1134             : ! !LOCAL VARIABLES:
        1135             :     character (len=512) :: err_msg
        1136             :     integer             :: ierr
        1137             :     integer             :: varid
        1138             : !
        1139           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
        1140             :
        1141           0 :     if (ierr /= NF90_NOERR) then
        1142             :        err_msg = 'In Ncrd_5d_R4 #1:  ' // Trim (varname) // &
        1143           0 :                   ', ' // NF90_Strerror(ierr)
        1144           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
        1145             :     end if
        1146             :
        1147           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_5d, start=strt5d, count=cnt5d)
        1148             :
        1149           0 :     if (ierr /= NF90_NOERR) then
        1150           0 :        err_msg = 'In Ncrd_5d_R4 #2:  ' // NF90_Strerror(ierr)
        1151           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
        1152             :     end if
        1153             :
        1154           0 :   end subroutine Ncrd_5d_R4
        1155             : !EOC
        1156             : !-------------------------------------------------------------------------
        1157             : !BOP
        1158             : !
        1159             : ! !IROUTINE: Ncrd_6d_R8
        1160             : !
        1161             : ! !INTERFACE:
        1162             : !
        1163           0 :   subroutine Ncrd_6d_R8(varrd_6d, ncid, varname, strt6d, cnt6d)
        1164             : !
        1165             : ! !USES:
        1166             : !
        1167             :     use netCDF
        1168             :     use m_do_err_out
        1169             : !
        1170             : ! !INPUT PARAMETERS:
        1171             : !!  ncid     : netCDF file id to read array input data from
        1172             : !!  varname  : netCDF variable name for array
        1173             : !!  strt5d   : vector specifying the index in varrd_5d where
        1174             : !!               the first of the data values will be read
        1175             : !!  cnt5d    : varrd_5d dimensions
        1176             :     integer          , intent(in)   :: ncid
        1177             :     character (len=*), intent(in)   :: varname
        1178             :     integer          , intent(in)   :: strt6d(6)
        1179             :     integer          , intent(in)   :: cnt6d (6)
        1180             : !
        1181             : ! !OUTPUT PARAMETERS:
        1182             : !!  varrd_5d : array to fill
        1183             :     real*8         , intent(out)  :: varrd_6d(cnt6d(1), cnt6d(2), &
        1184             :                                               cnt6d(3), cnt6d(4), &
        1185             :                                               cnt6d(5), cnt6d(6))
        1186             : !
        1187             : ! !DESCRIPTION: Reads in a 5D netCDF real array and does some error checking.
        1188             : !\\
        1189             : !\\
        1190             : ! !AUTHOR:
        1191             : !  John Tannahill (LLNL) and Jules Kouatchou
        1192             : !
        1193             : ! !REVISION HISTORY:
        1194             : !  20 Dec 2011 - R. Yantosca - Initial version
        1195             : !  See https://github.com/geoschem/hemco for complete history
        1196             : !EOP
        1197             : !-------------------------------------------------------------------------
        1198             : !BOC
        1199             : !
        1200             : ! !LOCAL VARIABLES:
        1201             :     character (len=512) :: err_msg
        1202             :     integer             :: ierr
        1203             :     integer             :: varid
        1204             : !
        1205           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
        1206             :
        1207           0 :     if (ierr /= NF90_NOERR) then
        1208             :        err_msg = 'In Ncrd_6d_R8 #1:  ' // Trim (varname) // &
        1209           0 :                  ', ' // NF90_Strerror(ierr)
        1210           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
        1211             :     end if
        1212             :
        1213           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_6d, start=strt6d, count=cnt6d)
        1214             :
        1215           0 :     if (ierr /= NF90_NOERR) then
        1216           0 :        err_msg = 'In Ncrd_6d_R8 #2:  ' // NF90_Strerror(ierr)
        1217           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
        1218             :     end if
        1219             :
        1220           0 :   end subroutine Ncrd_6d_R8
        1221             : !EOC
        1222             : !-------------------------------------------------------------------------
        1223             : !BOP
        1224             : !
        1225             : ! !IROUTINE: Ncrd_6d_R4
        1226             : !
        1227             : ! !INTERFACE:
        1228             : !
        1229           0 :   subroutine Ncrd_6d_R4(varrd_6d, ncid, varname, strt6d, cnt6d)
        1230             : !
        1231             : ! !USES:
        1232             : !
        1233             :     use netCDF
        1234             :     use m_do_err_out
        1235             : !
        1236             : ! !INPUT PARAMETERS:
        1237             : !!  ncid     : netCDF file id to read array input data from
        1238             : !!  varname  : netCDF variable name for array
        1239             : !!  strt5d   : vector specifying the index in varrd_5d where
        1240             : !!             the first of the data values will be read
        1241             : !!  cnt5d    : varrd_5d dimensions
        1242             :     integer          , intent(in)   :: ncid
        1243             :     character (len=*), intent(in)   :: varname
        1244             :     integer          , intent(in)   :: strt6d(6)
        1245             :     integer          , intent(in)   :: cnt6d (6)
        1246             : !
        1247             : ! !OUTPUT PARAMETERS:
        1248             : !!  varrd_5d : array to fill
        1249             :     real*4          , intent(out)  :: varrd_6d(cnt6d(1), cnt6d(2), &
        1250             :                                                cnt6d(3), cnt6d(4), &
        1251             :                                                cnt6d(5), cnt6d(6))
        1252             : !
        1253             : ! !DESCRIPTION: Reads in a 5D netCDF real array and does some error checking.
        1254             : !\\
        1255             : !\\
        1256             : ! !AUTHOR:
        1257             : !  John Tannahill (LLNL) and Jules Kouatchou
        1258             : !
        1259             : ! !REVISION HISTORY:
        1260             : !  See https://github.com/geoschem/hemco for complete history
        1261             : !EOP
        1262             : !-------------------------------------------------------------------------
        1263             : !BOC
        1264             : !
        1265             : ! !LOCAL VARIABLES:
        1266             :     character (len=512) :: err_msg
        1267             :     integer             :: ierr
        1268             :     integer             :: varid
        1269             : !
        1270           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
        1271             :
        1272           0 :     if ( ierr /= NF90_NOERR) then
        1273             :        err_msg = 'In Ncrd_6d_R4 #1:  ' // Trim (varname) // &
        1274           0 :                   ', ' // NF90_Strerror(ierr)
        1275           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
        1276             :     end if
        1277             :
        1278           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_6d, start=strt6d, count=cnt6d)
        1279             :
        1280           0 :     if (ierr /= NF90_NOERR) then
        1281           0 :        err_msg = 'In Ncrd_6d_R4 #2:  ' // NF90_Strerror(ierr)
        1282           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
        1283             :     end if
        1284             :
        1285           0 :   end subroutine Ncrd_6d_R4
        1286             : !EOC
        1287             : !-------------------------------------------------------------------------
        1288             : !BOP
        1289             : !
        1290             : ! !IROUTINE: Ncrd_7d_R8
        1291             : !
        1292             : ! !INTERFACE:
        1293             : !
        1294           0 :   subroutine Ncrd_7d_R8(varrd_7d, ncid, varname, strt7d, cnt7d)
        1295             : !
        1296             : ! !USES:
        1297             : !
        1298             :     use netCDF
        1299             :     use m_do_err_out
        1300             : !
        1301             : ! !INPUT PARAMETERS:
        1302             : !!  ncid     : netCDF file id to read array input data from
        1303             : !!  varname  : netCDF variable name for array
        1304             : !!  strt7d   : vector specifying the index in varrd_7d where
        1305             : !!             the first of the data values will be read
        1306             : !!  cnt7d    : varrd_7d dimensions
        1307             :     integer          , intent(in)   :: ncid
        1308             :     character (len=*), intent(in)   :: varname
        1309             :     integer          , intent(in)   :: strt7d(7)
        1310             :     integer          , intent(in)   :: cnt7d (7)
        1311             : !
        1312             : ! !OUTPUT PARAMETERS:
        1313             : !!  varrd_5d : array to fill
        1314             :     real*8           , intent(out)  :: varrd_7d(cnt7d(1), cnt7d(2), &
        1315             :                                                 cnt7d(3), cnt7d(4), &
        1316             :                                                 cnt7d(5), cnt7d(6), &
        1317             :                                                 cnt7d(7))
        1318             : !
        1319             : ! !DESCRIPTION: Reads in a 7D netCDF real array and does some error checking.
        1320             : !\\
        1321             : !\\
        1322             : ! !AUTHOR:
        1323             : !  John Tannahill (LLNL) and Jules Kouatchou
        1324             : !
        1325             : ! !REVISION HISTORY:
        1326             : !  20 Dec 2011 - R. Yantosca - Initial version
        1327             : !  See https://github.com/geoschem/hemco for complete history
        1328             : !EOP
        1329             : !-------------------------------------------------------------------------
        1330             : !BOC
        1331             : !
        1332             : ! !LOCAL VARIABLES:
        1333             :     character (len=512) :: err_msg
        1334             :     integer             :: ierr
        1335             :     integer             :: varid
        1336             : !
        1337           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
        1338             :
        1339           0 :     if (ierr /= NF90_NOERR) then
        1340             :        err_msg = 'In Ncrd_7d_R8 #1:  ' // Trim (varname) // &
        1341           0 :                   ', ' // NF90_Strerror(ierr)
        1342           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
        1343             :     end if
        1344             :
        1345           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_7d, start=strt7d, count=cnt7d)
        1346             :
        1347           0 :     if (ierr /= NF90_NOERR) then
        1348           0 :        err_msg = 'In Ncrd_7d_R8 #2:  ' // NF90_Strerror(ierr)
        1349           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
        1350             :     end if
        1351             :
        1352           0 :   end subroutine Ncrd_7d_R8
        1353             : !EOC
        1354             : !-------------------------------------------------------------------------
        1355             : !BOP
        1356             : !
        1357             : ! !IROUTINE: Ncrd_7d_R4
        1358             : !
        1359             : ! !INTERFACE:
        1360             : !
        1361           0 :   subroutine Ncrd_7d_R4(varrd_7d, ncid, varname, strt7d, cnt7d)
        1362             : !
        1363             : ! !USES:
        1364             : !
        1365             :     use netCDF
        1366             :     use m_do_err_out
        1367             : !
        1368             : ! !INPUT PARAMETERS:
        1369             : !!  ncid     : netCDF file id to read array input data from
        1370             : !!  varname  : netCDF variable name for array
        1371             : !!  strt7d   : vector specifying the index in varrd_7d where
        1372             : !!             the first of the data values will be read
        1373             : !!  cnt7d    : varrd_7d dimensions
        1374             :     integer          , intent(in)   :: ncid
        1375             :     character (len=*), intent(in)   :: varname
        1376             :     integer          , intent(in)   :: strt7d(7)
        1377             :     integer          , intent(in)   :: cnt7d (7)
        1378             : !
        1379             : ! !OUTPUT PARAMETERS:
        1380             : !!  varrd_7d : array to fill
        1381             :     real*4          , intent(out)  :: varrd_7d(cnt7d(1), cnt7d(2), &
        1382             :                                                cnt7d(3), cnt7d(4), &
        1383             :                                                cnt7d(5), cnt7d(6), &
        1384             :                                                cnt7d(7))
        1385             : !
        1386             : ! !DESCRIPTION: Reads in a 7D netCDF real array and does some error checking.
        1387             : !\\
        1388             : !\\
        1389             : ! !AUTHOR:
        1390             : !  John Tannahill (LLNL) and Jules Kouatchou
        1391             : !
        1392             : ! !REVISION HISTORY:
        1393             : !  20 Dec 2011 - R. Yantosca - Initial version
        1394             : !  See https://github.com/geoschem/hemco for complete history
        1395             : !EOP
        1396             : !-------------------------------------------------------------------------
        1397             : !BOC
        1398             : !
        1399             : ! !LOCAL VARIABLES:
        1400             :     character (len=512) :: err_msg
        1401             :     integer             :: ierr
        1402             :     integer             :: varid
        1403             : !
        1404           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
        1405             :
        1406           0 :     if (ierr /= NF90_NOERR) then
        1407             :        err_msg = 'In Ncrd_7d_R4 #1:  ' // Trim (varname) // &
        1408           0 :                  ', ' // NF90_Strerror(ierr)
        1409           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
        1410             :     end if
        1411             :
        1412           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_7d, start=strt7d, count=cnt7d)
        1413             :
        1414           0 :     if (ierr /= NF90_NOERR) then
        1415           0 :        err_msg = 'In Ncrd_7d_R4 #2:  ' // NF90_Strerror(ierr)
        1416           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
        1417             :     end if
        1418             :
        1419           0 :   end subroutine Ncrd_7d_R4
        1420             : !EOC
        1421             : !-------------------------------------------------------------------------
        1422             : !BOP
        1423             : !
        1424             : ! !IROUTINE: Ncrd_1d_Char
        1425             : !
        1426             : ! !INTERFACE:
        1427             : !
        1428           0 :   subroutine Ncrd_1d_Char(varrd_1dc, ncid, varname, strt1d, cnt1d)
        1429             : !
        1430             : ! !USES:
        1431             : !
        1432             :     use netCDF
        1433             :     use m_do_err_out
        1434             : !
        1435             : ! !INPUT PARAMETERS:
        1436             : !
        1437             : !!  ncid     : netCDF file id to read array input data from
        1438             : !!  varname  : netCDF variable name for array
        1439             : !!  strt1d   : vector specifying the index in varrd_1dc where
        1440             : !!             the first of the data values will be read
        1441             : !!  cnt1d    : varrd_1dc dimension
        1442             :     integer          , intent(in)   :: ncid
        1443             :     character (len=*), intent(in)   :: varname
        1444             :     integer          , intent(in)   :: strt1d(1)
        1445             :     integer          , intent(in)   :: cnt1d (1)
        1446             : !
        1447             : ! !OUTPUT PARAMETERS:
        1448             : !!  varrd_1dc : intger array to fill
        1449             :     character (len=1), intent(out)  :: varrd_1dc(cnt1d(1))
        1450             : !
        1451             : ! !DESCRIPTION: Reads in a 1D netCDF character array and does some error
        1452             : !  checking.
        1453             : !\\
        1454             : !\\ !AUTHOR:
        1455             : !  Jules Kouatchou
        1456             : !
        1457             : ! !REVISION HISTORY:
        1458             : !  See https://github.com/geoschem/hemco for complete history
        1459             : !EOP
        1460             : !-------------------------------------------------------------------------
        1461             : !BOC
        1462             : !
        1463             : ! !LOCAL VARIABLES:
        1464             :     character (len=512) :: err_msg
        1465             :     integer             :: ierr
        1466             :     integer             :: varid
        1467             : !
        1468           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
        1469             :
        1470           0 :     if (ierr /= NF90_NOERR) then
        1471             :        err_msg = 'In Ncrd_1d_Char #1:  ' // Trim (varname) // &
        1472           0 :                   ', ' // NF90_Strerror(ierr)
        1473           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
        1474             :     end if
        1475             :
        1476           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_1dc, start=strt1d, count=cnt1d)
        1477             :
        1478           0 :     if (ierr /= NF90_NOERR) then
        1479           0 :        err_msg = 'In Ncrd_1d_Char #2:  ' // NF90_Strerror(ierr)
        1480           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
        1481             :     end if
        1482             :
        1483           0 :   end subroutine Ncrd_1d_Char
        1484             : !EOC
        1485             : !-------------------------------------------------------------------------
        1486             : !BOP
        1487             : !
        1488             : ! !IROUTINE: Ncrd_2d_Char
        1489             : !
        1490             : ! !INTERFACE:
        1491             : !
        1492           0 :   subroutine Ncrd_2d_Char(varrd_2dc, ncid, varname, strt2d, cnt2d)
        1493             : !
        1494             : ! !USES:
        1495             : !
        1496             :     use netCDF
        1497             :     use m_do_err_out
        1498             : !
        1499             : ! !INPUT PARAMETERS:
        1500             : !!  ncid     : netCDF file id to read array input data from
        1501             : !!  varname  : netCDF variable name for array
        1502             : !!  strt2d   : vector specifying the index in varrd_2dc where
        1503             : !!             the first of the data values will be read
        1504             : !!  cnt2d    : varrd_2dc dimensions
        1505             :     integer          , intent(in)   :: ncid
        1506             :     character (len=*), intent(in)   :: varname
        1507             :     integer          , intent(in)   :: strt2d(2)
        1508             :     integer          , intent(in)   :: cnt2d (2)
        1509             : !
        1510             : ! !OUTPUT PARAMETERS:
        1511             : !!  varrd_2dc : charcter array to fill
        1512             :     character        , intent(out)  :: varrd_2dc(cnt2d(1), cnt2d(2))
        1513             : !
        1514             : ! !DESCRIPTION: Reads in a 2D netCDF character array and does some error
        1515             : !  checking.
        1516             : !\\
        1517             : !\\
        1518             : ! !AUTHOR:
        1519             : !  Jules Kouatchou
        1520             : !
        1521             : ! !REVISION HISTORY:
        1522             : !  See https://github.com/geoschem/hemco for complete history
        1523             : !EOP
        1524             : !-------------------------------------------------------------------------
        1525             : !BOC
        1526             : !
        1527             : ! !LOCAL VARIABLES:
        1528             :     character (len=512) :: err_msg
        1529             :     integer             :: ierr
        1530             :     integer             :: varid
        1531             : !
        1532           0 :     ierr = NF90_Inq_VarId(ncid, varname, varid)
        1533             :
        1534           0 :     if (ierr /= NF90_NOERR) then
        1535             :        err_msg = 'In Ncrd_2d_Char #1:  ' // Trim (varname) // &
        1536           0 :                   ', ' // NF90_Strerror(ierr)
        1537           0 :        call Do_Err_Out (err_msg, .true., 1, ncid, 0, 0, 0.0d0, 0.0d0)
        1538             :     end if
        1539             :
        1540           0 :     ierr = NF90_Get_Var(ncid, varid, varrd_2dc, start=strt2d, count=cnt2d)
        1541             :
        1542           0 :     if (ierr /= NF90_NOERR) then
        1543           0 :        err_msg = 'In Ncrd_2d_Char #2:  ' // NF90_Strerror(ierr)
        1544           0 :        call Do_Err_Out (err_msg, .true., 2, ncid, varid, 0, 0.0d0, 0.0d0)
        1545             :     end if
        1546             :
        1547           0 :   end subroutine Ncrd_2d_Char
        1548             : !EOC
        1549             : !------------------------------------------------------------------------
        1550             : end module HCO_m_netcdf_io_read
        1551             :

Generated by: LCOV version 1.14