LCOV - code coverage report
Current view: top level - utils - wrap_nf.F90 (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 182 0.0 %
Date: 2025-01-13 21:54:50 Functions: 0 38 0.0 %

          Line data    Source code
       1             : !-------------------------------------------------------------------------------
       2             : !
       3             : ! WARNING: USE OF THIS MODULE WITHIN CAM IS DEPRECATED. ALL
       4             : !          HANDLING OF NETCDF FILES SHOULD ULTIMATELY BE DONE
       5             : !          BY PIO, OR FOR PORTABLE CODE, SHOULD CONTACT THE
       6             : !          NETCDF F90 INTERFACE DIRECTLY.
       7             : !
       8             : !          DO NOT USE THIS MODULE.
       9             : !
      10             : !-------------------------------------------------------------------------------
      11             : 
      12             : module wrap_nf
      13             :   use shr_kind_mod,     only: r8 => shr_kind_r8, r4 => shr_kind_r4
      14             :   use cam_abortutils,   only: endrun
      15             :   use cam_logfile,      only: iulog
      16             :   use netcdf
      17             : 
      18             : !-------------------------------------------------------------------------------
      19             : !
      20             : ! Purpose:
      21             : !
      22             : ! Wrapper routines for the netCDF library for input and output data.
      23             : !
      24             : ! Author: Jim Rosinski
      25             : !
      26             : ! $Id$
      27             : !
      28             : !-------------------------------------------------------------------------------
      29             : 
      30             : 
      31             : contains
      32             : !===============================================================================
      33             : 
      34             : !===============================================================================
      35             : 
      36           0 :    subroutine wrap_redef (nfid)
      37             :    implicit none
      38             :    
      39             :    integer, intent(in):: nfid
      40             : 
      41             :    integer ret      ! NetCDF return code
      42             : 
      43           0 :    ret = nf90_redef (nfid)
      44           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
      45             :    
      46           0 :    end subroutine wrap_redef
      47             : !===============================================================================
      48             : 
      49           0 :    subroutine wrap_enddef (nfid)
      50             :    implicit none
      51             :    
      52             :    
      53             :    integer, intent(in):: nfid
      54             : 
      55             :    integer ret      ! NetCDF return code
      56             : 
      57           0 :    ret = nf90_enddef (nfid)
      58           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
      59             : 
      60           0 :    end subroutine wrap_enddef
      61             : 
      62           0 :    subroutine wrap_create (path, cmode, ncid)
      63             :    implicit none
      64             : !-------------------------------------------------------------------------------
      65             : !
      66             : ! Purpose:
      67             : !
      68             : ! Create a netCDF file for reading and/or writing
      69             : !
      70             : !-------------------------------------------------------------------------------
      71             :    
      72             :    character*(*), intent(in):: path
      73             :    integer, intent(in):: cmode
      74             :    integer, intent(out):: ncid
      75             : 
      76             :    integer ret      ! NetCDF return code
      77             : 
      78           0 :    ret = nf90_create (path, cmode, ncid)
      79           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
      80             : 
      81           0 :    end subroutine wrap_create
      82             : 
      83             : !===============================================================================
      84             : 
      85           0 :   subroutine wrap_inq_unlimdim (nfid, dimid)
      86             :     implicit none
      87             :     !-------------------------------------------------------------------------------
      88             :     !
      89             :     ! Purpose:
      90             :     !
      91             :     ! Get dimid for the unlimited dimension.
      92             :     !
      93             :     !-------------------------------------------------------------------------------
      94             :     integer, intent(in)::  nfid
      95             :     integer, intent(out):: dimid
      96             : 
      97             :     integer ret      ! NetCDF return code
      98             : 
      99           0 :     ret = nf90_inquire(nfid, unlimitedDimId=dimid)
     100           0 :     if (ret/=NF90_NOERR) call handle_error (ret)
     101           0 :   end subroutine wrap_inq_unlimdim
     102             : 
     103           0 :    subroutine wrap_inq_dim (nfid, dimid, dimname, dimlen)
     104             :    implicit none
     105             : !-------------------------------------------------------------------------------
     106             : !
     107             : ! Purpose:
     108             : !
     109             : ! Gets dimension name for a given dimension id
     110             : !
     111             : !-------------------------------------------------------------------------------
     112             :    integer, intent(in)::  nfid
     113             :    integer, intent(in):: dimid
     114             :    integer, intent(out):: dimlen
     115             :    character*(*), intent(out):: dimname
     116             : 
     117             :    integer ret      ! NetCDF return code
     118             : 
     119           0 :    ret = nf90_inquire_dimension (nfid, dimid, dimname, dimlen)
     120           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     121             : 
     122           0 :    end subroutine wrap_inq_dim
     123             : 
     124           0 :    subroutine wrap_inq_nvars (nfid, nvars)
     125             : !-------------------------------------------------------------------------------
     126             : !
     127             : ! Purpose:
     128             : !
     129             : ! Gets number of variables in file
     130             : !
     131             : !-------------------------------------------------------------------------------
     132             :    implicit none
     133             : 
     134             :    integer, intent(in)::  nfid
     135             :    integer, intent(out):: nvars
     136             : 
     137             :    integer ret      ! NetCDF return code
     138             : 
     139           0 :    ret = nf90_inquire (nfid, nvars)
     140           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     141             : 
     142           0 :    end subroutine wrap_inq_nvars
     143             : 
     144           0 :    subroutine wrap_inq_ndims (nfid, ndims)
     145             :    implicit none
     146             : !-------------------------------------------------------------------------------
     147             : !
     148             : ! Purpose:
     149             : !
     150             : ! Gets number of dimensions in file
     151             : !
     152             : !-------------------------------------------------------------------------------
     153             :    integer, intent(in)::  nfid
     154             :    integer, intent(out):: ndims
     155             : 
     156             :    integer ret      ! NetCDF return code
     157             : 
     158           0 :    ret = nf90_inquire(nfid, ndims)
     159           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     160             : 
     161           0 :  end subroutine wrap_inq_ndims
     162             : 
     163             : !===============================================================================
     164             : 
     165           0 :    subroutine wrap_inq_dimid (nfid, dimname, dimid)
     166             :    implicit none
     167             : !-------------------------------------------------------------------------------
     168             : !
     169             : ! Purpose:
     170             : !
     171             : ! Gets the dimension id
     172             : !
     173             : !-------------------------------------------------------------------------------
     174             :    
     175             :    integer, intent(in):: nfid
     176             :    integer, intent(out):: dimid
     177             :    character*(*), intent(in):: dimname
     178             : 
     179             :    integer ret      ! NetCDF return code
     180             : 
     181           0 :    ret = nf90_inq_dimid (nfid, dimname, dimid)
     182           0 :    if(ret==NF90_NOERR) return
     183           0 :    if (ret/=NF90_EBADDIM) call handle_error (ret)
     184           0 :    dimid=-1  ! do not exist on bad dim.  This allows the user to check for dims that may not
     185             :              ! be in the file  
     186             :    end subroutine wrap_inq_dimid
     187             : 
     188             : !===============================================================================
     189             : 
     190           0 :    subroutine wrap_inq_dimlen (nfid, dimid, dimlen)
     191             :    implicit none
     192             : !-------------------------------------------------------------------------------
     193             : !
     194             : ! Purpose:
     195             : !
     196             : ! Gets the dimension length for a given dimension
     197             : !
     198             : !-------------------------------------------------------------------------------
     199             :    
     200             :    integer, intent(in)::  nfid
     201             :    integer, intent(in)::  dimid 
     202             :    integer, intent(out):: dimlen
     203             :    
     204             :    integer ret      ! NetCDF return code
     205             : 
     206           0 :    ret = nf90_inquire_dimension (nfid, dimid, len=dimlen)
     207           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     208           0 :    end subroutine wrap_inq_dimlen
     209             : 
     210             : !===============================================================================
     211             : 
     212           0 :    subroutine wrap_inq_vardimid (nfid, varid, dimids)
     213             : !-------------------------------------------------------------------------------
     214             : !
     215             : ! Purpose:
     216             : !
     217             : ! Returns the dimension Id's from a variable
     218             : !
     219             : !-------------------------------------------------------------------------------
     220             :    implicit none
     221             :    
     222             :    integer, intent(in):: nfid
     223             :    integer, intent(in):: varid
     224             :    integer, intent(out)::  dimids(:)
     225             :    
     226             :    integer ret      ! NetCDF return code
     227             : 
     228           0 :    ret = nf90_inquire_variable (nfid, varid, dimids=dimids)
     229           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     230           0 :    end subroutine wrap_inq_vardimid
     231             : 
     232             : !===============================================================================
     233             : 
     234           0 :    subroutine wrap_inq_varndims (nfid, varid, ndims)
     235             : !-------------------------------------------------------------------------------
     236             : !
     237             : ! Purpose:
     238             : !
     239             : ! Returns the dimension Id's from a variable
     240             : !
     241             : !-------------------------------------------------------------------------------
     242             :    implicit none
     243             :    
     244             :    integer, intent(in):: nfid
     245             :    integer, intent(in):: varid
     246             :    integer, intent(out):: ndims
     247             :    
     248             :    integer ret      ! NetCDF return code
     249             : 
     250           0 :    ret = nf90_inquire_variable (nfid, varid, ndims=ndims)
     251           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     252           0 :    end subroutine wrap_inq_varndims
     253             : 
     254             : !===============================================================================
     255             : 
     256           0 :    subroutine wrap_inq_varid (nfid, varname, varid, abort)
     257             : !-------------------------------------------------------------------------------
     258             : !
     259             : ! Purpose:
     260             : !
     261             : ! Returns the variable ID
     262             : !
     263             : !-------------------------------------------------------------------------------
     264             :    implicit none
     265             :    
     266             :    integer, intent(in):: nfid
     267             :    integer, intent(out):: varid
     268             :    character*(*), intent(in):: varname
     269             :    logical, optional :: abort
     270             :  
     271             :    integer ret      ! NetCDF return code
     272             :    logical :: call_endrun
     273             : 
     274           0 :    ret = nf90_inq_varid (nfid, varname, varid)
     275           0 :    if (ret/=NF90_NOERR ) then
     276           0 :       call_endrun = .true.
     277           0 :       if ( present(abort) ) then
     278           0 :          call_endrun = abort
     279             :       endif
     280             : 
     281           0 :       if ( call_endrun ) then
     282           0 :          write(iulog,*)'wrap_inq_varid: id for ',trim(varname),' not found'
     283           0 :          call handle_error (ret)
     284             :       else
     285           0 :          varid = -1
     286             :       endif
     287             :    end if
     288           0 :    end subroutine wrap_inq_varid
     289             : 
     290             : !===============================================================================
     291             : 
     292           0 :    subroutine wrap_inq_var (nfid, varid, varname, xtype, ndims, &
     293           0 :                             dimids, natts)
     294             : !-------------------------------------------------------------------------------
     295             : !
     296             : ! Purpose:
     297             : !
     298             : ! Returns the variable name, type, number of dimensions, dimension ID's, and number of attributes
     299             : !
     300             : !-------------------------------------------------------------------------------
     301             :    implicit none
     302             : 
     303             :    integer, intent(in):: nfid
     304             :    integer, intent(in):: varid
     305             :    integer, intent(out):: xtype
     306             :    integer, intent(out):: ndims
     307             :    integer, intent(out):: dimids(:)
     308             :    integer, intent(out):: natts
     309             :    character*(*), intent(out):: varname
     310             : 
     311             :    integer ret      ! NetCDF return code
     312             : 
     313             :    ret = nf90_inquire_variable (nfid, varid, varname, xtype, ndims, dimids, &
     314           0 :                      natts)
     315           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     316           0 :    end subroutine wrap_inq_var
     317             : 
     318             : !===============================================================================
     319             : 
     320           0 :    subroutine wrap_inq_varname (nfid, varid, varname)
     321             : !-------------------------------------------------------------------------------
     322             : !
     323             : ! Purpose:
     324             : !
     325             : ! Returns the variable name from the dimension ID
     326             : !
     327             : !-------------------------------------------------------------------------------
     328             :    implicit none
     329             : 
     330             :    integer ret      ! NetCDF return code
     331             : 
     332             :    integer, intent(in):: nfid
     333             :    integer, intent(in):: varid
     334             :    character*(*), intent(out):: varname
     335             : 
     336           0 :    ret = nf90_inquire_variable(nfid, varid, varname)
     337           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     338           0 :    end subroutine wrap_inq_varname
     339             : 
     340             : !===============================================================================
     341             : 
     342           0 :    subroutine wrap_get_att_text (nfid, varid, attname, atttext)
     343             : !-------------------------------------------------------------------------------
     344             : !
     345             : ! Purpose:
     346             : !
     347             : ! Returns the attribute text from the given variable ID and attribute name
     348             : !
     349             : !-------------------------------------------------------------------------------
     350             :    implicit none
     351             :    
     352             :    integer, intent(in):: nfid
     353             :    integer, intent(in):: varid
     354             :    character*(*), intent(in):: attname
     355             :    character*(*), intent(out):: atttext
     356             : 
     357             :    integer ret      ! NetCDF return code
     358             : 
     359           0 :    ret = nf90_get_att(nfid, varid, attname, atttext)
     360           0 :    if (ret/=NF90_NOERR) then
     361           0 :       write(iulog,*)'WRAP_GET_ATT_TEXT: error reading attribute '//trim(attname)
     362           0 :       call handle_error (ret)
     363             :    endif
     364           0 :    end subroutine wrap_get_att_text
     365             : 
     366             : !===============================================================================
     367             : 
     368           0 :    subroutine wrap_put_att_text (nfid, varid, attname, atttext)
     369             : !-------------------------------------------------------------------------------
     370             : !
     371             : ! Purpose:
     372             : !
     373             : ! Puts the given attribute text to variable ID.
     374             : !
     375             : ! This routine violates the convetion that the wrapper codes take an identical
     376             : ! set of arguments as the netcdf library code.  The length of the character
     377             : ! argument is computed inside the wrapper.
     378             : !
     379             : !-------------------------------------------------------------------------------
     380             :    implicit none
     381             :    
     382             :    integer, intent(in):: nfid
     383             :    integer, intent(in):: varid
     384             :    character*(*), intent(in):: attname
     385             :    character*(*), intent(in):: atttext
     386             : 
     387             :    integer ret      ! NetCDF return code
     388             :    integer siz
     389             : 
     390           0 :    ret = nf90_put_att(nfid, varid, attname, atttext)
     391           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     392           0 :    end subroutine wrap_put_att_text
     393             : 
     394             : !===============================================================================
     395             : 
     396           0 :    subroutine wrap_put_att_realx (nfid, varid, attname, xtype, len, &
     397           0 :                                   attval)
     398             : !-------------------------------------------------------------------------------
     399             : !
     400             : ! Purpose:
     401             : !
     402             : ! Puts the given real attribute to the variable id
     403             : !
     404             : !-------------------------------------------------------------------------------
     405             :    implicit none
     406             :    
     407             :    integer , intent(in):: nfid
     408             :    integer , intent(in):: varid
     409             :    integer , intent(in):: xtype
     410             :    integer , intent(in):: len
     411             :    character*(*) , intent(in):: attname
     412             :    real(r8) , intent(in):: attval(len)
     413             : 
     414             :    integer ret      ! NetCDF return code
     415             : 
     416           0 :    ret = nf90_put_att(nfid, varid, attname, attval)
     417           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     418           0 :    end subroutine wrap_put_att_realx
     419             : !===============================================================================
     420             : 
     421           0 :    subroutine wrap_def_dim (nfid, dimname, len, dimid)
     422             : !-------------------------------------------------------------------------------
     423             : !
     424             : ! Purpose:
     425             : !
     426             : ! Defines the input dimension
     427             : !
     428             : !-------------------------------------------------------------------------------
     429             :    implicit none
     430             :    integer, intent(in):: nfid
     431             :    integer, intent(in):: len
     432             :    integer, intent(out):: dimid
     433             :    character*(*), intent(in):: dimname
     434             :    
     435             :    integer ret      ! NetCDF return code
     436             : 
     437           0 :    ret = nf90_def_dim (nfid, dimname, len, dimid)
     438           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     439           0 :    end subroutine wrap_def_dim
     440             : 
     441             : !===============================================================================
     442             : 
     443           0 :    subroutine wrap_def_var (nfid, name, xtype, nvdims, vdims, varid)
     444             : !-------------------------------------------------------------------------------
     445             : !
     446             : ! Purpose:
     447             : !
     448             : ! Defines the given variable
     449             : !
     450             : !-------------------------------------------------------------------------------
     451             :    implicit none
     452             : 
     453             :    integer, intent(in):: nfid
     454             :    integer, intent(in)::xtype
     455             :    integer, intent(in)::nvdims
     456             :    integer, intent(out)::varid
     457             :    integer, intent(in):: vdims(nvdims)
     458             :    character*(*), intent(in):: name
     459             :    
     460             :    integer ret      ! NetCDF return code
     461             : 
     462           0 :    ret = nf90_def_var(nfid, name, xtype, vdims, varid)
     463           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     464           0 :    end subroutine wrap_def_var
     465             : 
     466             : !===============================================================================
     467             : 
     468           0 :    subroutine wrap_get_var_realx (nfid, varid, arr)
     469             : !-------------------------------------------------------------------------------
     470             : !
     471             : ! Purpose:
     472             : !
     473             : ! Gets the given real variable from a input file
     474             : !
     475             : !-------------------------------------------------------------------------------
     476             :    implicit none
     477             : 
     478             :    integer, intent(in):: nfid
     479             :    integer, intent(in):: varid
     480             :    real(r8), intent(out):: arr(:)
     481             : 
     482             :    integer ret      ! NetCDF return code
     483             : 
     484           0 :    ret = nf90_get_var (nfid, varid, arr)
     485           0 :    if (ret/=NF90_NOERR) then
     486           0 :      write(iulog,*)'WRAP_GET_VAR_REALX: error reading varid =', varid
     487           0 :      call handle_error (ret)
     488             :    end if
     489           0 :    end subroutine wrap_get_var_realx
     490             : 
     491             : !===============================================================================
     492             : 
     493           0 :    subroutine wrap_get_var_real4 (nfid, varid, arr)
     494             : !-------------------------------------------------------------------------------
     495             : !
     496             : ! Purpose:
     497             : !
     498             : ! Gets the given real variable from a input file
     499             : !
     500             : !-------------------------------------------------------------------------------
     501             :    implicit none
     502             : 
     503             :    integer, intent(in):: nfid
     504             :    integer, intent(in):: varid
     505             :    real(r4), intent(out):: arr(:)
     506             : 
     507             :    integer ret      ! NetCDF return code
     508             : 
     509           0 :    ret = nf90_get_var (nfid, varid, arr)
     510           0 :    if (ret/=NF90_NOERR) then
     511           0 :      write(iulog,*)'WRAP_GET_VAR_REAL4: error reading varid =', varid
     512           0 :      call handle_error (ret)
     513             :    end if
     514           0 :    end subroutine wrap_get_var_real4
     515             : 
     516             : !===============================================================================
     517             : 
     518           0 :    subroutine wrap_get_scalar_realx (nfid, varid, x)
     519             : !-------------------------------------------------------------------------------
     520             : !
     521             : ! Purpose:
     522             : !
     523             : ! Gets the given real variable from a input file
     524             : !
     525             : !-------------------------------------------------------------------------------
     526             :    implicit none
     527             : 
     528             :    integer, intent(in):: nfid
     529             :    integer, intent(in):: varid
     530             :    real(r8), intent(out):: x
     531             : 
     532             :    integer ret      ! NetCDF return code
     533             : 
     534           0 :    ret = nf90_get_var (nfid, varid, x)
     535           0 :    if (ret/=NF90_NOERR) then
     536           0 :      write(iulog,*)'WRAP_GET_SCALAR_REALX: error reading varid =', varid
     537           0 :      call handle_error (ret)
     538             :    end if
     539           0 :    end subroutine wrap_get_scalar_realx
     540             : 
     541             : !===============================================================================
     542             : 
     543           0 :    subroutine wrap_get_var_int (nfid, varid, arr)
     544             : !-------------------------------------------------------------------------------
     545             : !
     546             : ! Purpose:
     547             : !
     548             : ! Gets the given integer variable from a input file
     549             : !
     550             : !-------------------------------------------------------------------------------
     551             :    implicit none
     552             : 
     553             :    integer, intent(in):: nfid
     554             :    integer, intent(in):: varid
     555             :    integer, intent(out):: arr(:)
     556             : 
     557             :    integer ret      ! NetCDF return code
     558             : 
     559           0 :    ret = nf90_get_var (nfid, varid, arr)
     560           0 :    if (ret/=NF90_NOERR) then
     561           0 :      write(iulog,*)'WRAP_GET_VAR_INT: error reading varid =', varid
     562           0 :      call handle_error (ret)
     563             :    end if
     564           0 :    end subroutine wrap_get_var_int
     565             : 
     566             : !===============================================================================
     567             : 
     568           0 :    subroutine wrap_get_scalar_int (nfid, varid, x)
     569             : !-------------------------------------------------------------------------------
     570             : !
     571             : ! Purpose:
     572             : !
     573             : ! Gets the given integer variable from a input file
     574             : !
     575             : !-------------------------------------------------------------------------------
     576             :    implicit none
     577             : 
     578             :    integer, intent(in):: nfid
     579             :    integer, intent(in):: varid
     580             :    integer, intent(out):: x
     581             : 
     582             :    integer ret      ! NetCDF return code
     583             : 
     584           0 :    ret = nf90_get_var (nfid, varid, x)
     585           0 :    if (ret/=NF90_NOERR) then
     586           0 :      write(iulog,*)'WRAP_GET_SCALAR_INT: error reading varid =', varid
     587           0 :      call handle_error (ret)
     588             :    end if
     589           0 :    end subroutine wrap_get_scalar_int
     590             : 
     591             : !===============================================================================
     592             : 
     593           0 :    subroutine wrap_get_vara_realx (nfid, varid, start, count, arr)
     594             : !-------------------------------------------------------------------------------
     595             : !
     596             : ! Purpose:
     597             : !
     598             : ! Gets a range of the given real variable from a input file
     599             : !
     600             : !-------------------------------------------------------------------------------
     601             :    implicit none
     602             : 
     603             :    integer, intent(in):: nfid
     604             :    integer, intent(in)::varid
     605             :    integer, intent(in)::start(:)
     606             :    integer, intent(in)::count(:)
     607             :    real(r8), intent(out):: arr(:)
     608             : 
     609             :    integer ret      ! NetCDF return code
     610             : 
     611           0 :    ret = nf90_get_var (nfid, varid, arr, start, count)
     612           0 :    if (ret/=NF90_NOERR) then
     613           0 :      write(iulog,*)'WRAP_GET_VARA_REALX: error reading varid =', varid
     614           0 :      call handle_error (ret)
     615             :    end if
     616           0 :    end subroutine wrap_get_vara_realx
     617             : 
     618             : !===============================================================================
     619             : 
     620           0 :    subroutine wrap_get_vara_int (nfid, varid, start, count, arr)
     621             : !-------------------------------------------------------------------------------
     622             : !
     623             : ! Purpose:
     624             : !
     625             : ! Gets a range of the given integer variable from a input file.
     626             : !
     627             : !-------------------------------------------------------------------------------
     628             :    implicit none
     629             : 
     630             :    integer, intent(in):: nfid
     631             :    integer, intent(in):: varid
     632             :    integer, intent(in):: start(:)
     633             :    integer, intent(in):: count(:)
     634             :    integer, intent(out):: arr(:)
     635             : 
     636             :    integer ret      ! NetCDF return code
     637             : 
     638           0 :    ret = nf90_get_var (nfid, varid, arr, start, count)
     639           0 :    if (ret/=NF90_NOERR) then
     640           0 :      write(iulog,*)'WRAP_GET_VARA_INT: error reading varid =', varid
     641           0 :      call handle_error (ret)
     642             :    end if
     643           0 :    end subroutine wrap_get_vara_int
     644             : 
     645             : !===============================================================================
     646             : 
     647           0 :    subroutine wrap_get_vara_text (nfid, varid, start, count, text)
     648             : !-------------------------------------------------------------------------------
     649             : !
     650             : ! Purpose:
     651             : !
     652             : ! Gets a range of the given text variable to input file.
     653             : !
     654             : !-------------------------------------------------------------------------------
     655             :    implicit none
     656             : 
     657             :    integer, intent(in):: nfid
     658             :    integer, intent(in):: varid
     659             :    integer, intent(in):: start(:)
     660             :    integer, intent(in):: count(:)
     661             :    character(len=*), intent(out):: text(:)
     662             : 
     663             :    integer ret      ! NetCDF return code
     664             : 
     665           0 :    ret = nf90_get_var (nfid, varid, text, start, count)
     666           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     667           0 :    end subroutine wrap_get_vara_text
     668             : 
     669             : !===============================================================================
     670             : 
     671           0 :    subroutine wrap_open (path, omode, ncid)
     672             : !-------------------------------------------------------------------------------
     673             : !
     674             : ! Purpose:
     675             : !
     676             : ! Open a netCDF file
     677             : !
     678             : !-------------------------------------------------------------------------------
     679             :    implicit none
     680             : 
     681             :    character*(*), intent(in):: path
     682             :    integer, intent(in):: omode
     683             :    integer, intent(out):: ncid
     684             : 
     685             :    integer ret      ! NetCDF return code
     686             : 
     687           0 :    ret = nf90_open (path, omode, ncid)
     688           0 :    if (ret/=NF90_NOERR) then
     689           0 :      write(iulog,*)'WRAP_OPEN: nf90_open failed for file ',path
     690           0 :      call handle_error (ret)
     691             :    end if
     692           0 :    end subroutine wrap_open
     693             : 
     694             : !===============================================================================
     695             : 
     696           0 :    subroutine wrap_close (ncid)
     697             : !-------------------------------------------------------------------------------
     698             : !
     699             : ! Purpose:
     700             : !
     701             : ! Close netCDF file
     702             : !
     703             : !-------------------------------------------------------------------------------
     704             :    implicit none
     705             : 
     706             :    integer, intent(in):: ncid
     707             : 
     708             :    integer ret      ! NetCDF return code
     709             : 
     710           0 :    ret = nf90_close (ncid)
     711           0 :    if (ret/=NF90_NOERR) then
     712           0 :      write(iulog,*)'WRAP_CLOSE: nf90_close failed for id ',ncid
     713           0 :      call handle_error (ret)
     714             :    end if
     715           0 :    end subroutine wrap_close
     716             : 
     717             : !===============================================================================
     718             : 
     719           0 :    subroutine wrap_put_var_int (nfid, varid, arr)
     720             : !-------------------------------------------------------------------------------
     721             : !
     722             : ! Purpose:
     723             : !
     724             : ! Put a integer variable on output file.
     725             : !
     726             : !-------------------------------------------------------------------------------
     727             :    implicit none
     728             : 
     729             :    integer, intent(in):: nfid
     730             :    integer, intent(in):: varid
     731             :    integer, intent(in):: arr(:)
     732             : 
     733             :    integer ret      ! NetCDF return code
     734             : 
     735           0 :    ret = nf90_put_var (nfid, varid, arr)
     736           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     737           0 :    end subroutine wrap_put_var_int
     738             : 
     739             : !===============================================================================
     740             : 
     741           0 :    subroutine wrap_put_var1_int (nfid, varid, index, ival)
     742             : !-------------------------------------------------------------------------------
     743             : !
     744             : ! Purpose:
     745             : !
     746             : ! Put a variable on output file at a given index.
     747             : !
     748             : !-------------------------------------------------------------------------------
     749             :    implicit none
     750             : 
     751             :    integer, intent(in):: nfid
     752             :    integer, intent(in):: varid
     753             :    integer, intent(in):: index(:)
     754             :    integer, intent(in):: ival
     755             : 
     756             :    integer ret      ! NetCDF return code
     757             : 
     758           0 :    ret = nf90_put_var (nfid, varid, ival, index)
     759           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     760           0 :    end subroutine wrap_put_var1_int
     761             : 
     762             : !===============================================================================
     763             : 
     764           0 :    subroutine wrap_put_vara_int (nfid, varid, start, count, arr)
     765             : !-------------------------------------------------------------------------------
     766             : !
     767             : ! Purpose:
     768             : !
     769             : ! Put a range of a integer variable on a output file.
     770             : !
     771             : !-------------------------------------------------------------------------------
     772             :    implicit none
     773             : 
     774             :    integer, intent(in):: nfid
     775             :    integer, intent(in):: varid
     776             :    integer, intent(in):: start(:)
     777             :    integer, intent(in):: count(:)
     778             :    integer, intent(in):: arr(:)
     779             : 
     780             :    integer ret      ! NetCDF return code
     781             : 
     782           0 :    ret = nf90_put_var (nfid, varid, arr, start, count)
     783           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     784           0 :    end subroutine wrap_put_vara_int
     785             : 
     786             : !===============================================================================
     787             : 
     788           0 :    subroutine wrap_put_vara_text (nfid, varid, start, count, text)
     789             : !-------------------------------------------------------------------------------
     790             : !
     791             : ! Purpose:
     792             : !
     793             : ! Put a range of the given text variable to output file.
     794             : !
     795             : !-------------------------------------------------------------------------------
     796             :    implicit none
     797             : 
     798             :    integer, intent(in):: nfid
     799             :    integer, intent(in):: varid
     800             :    integer, intent(in):: start(:)
     801             :    integer, intent(in):: count(:)
     802             :    character(len=*), intent(in):: text(:)
     803             : 
     804             :    integer ret      ! NetCDF return code
     805             : 
     806           0 :    ret = nf90_put_var (nfid, varid, text, start, count)
     807           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     808           0 :    end subroutine wrap_put_vara_text
     809             : 
     810             : !===============================================================================
     811             : 
     812           0 :    subroutine wrap_put_var1_realx (nfid, varid, index, val)
     813             : !-------------------------------------------------------------------------------
     814             : !
     815             : ! Purpose:
     816             : !
     817             : ! Put the given real variable to output file at given index.
     818             : !
     819             : !-------------------------------------------------------------------------------
     820             :    implicit none
     821             : 
     822             :    integer, intent(in):: nfid
     823             :    integer, intent(in):: varid
     824             :    integer, intent(in):: index(:)
     825             :    real(r8), intent(in):: val
     826             : 
     827             :    integer ret      ! NetCDF return code
     828             : 
     829           0 :    ret = nf90_put_var (nfid, varid, val, index)
     830           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     831           0 :    end subroutine wrap_put_var1_realx
     832             : 
     833             : !===============================================================================
     834             : 
     835           0 :    subroutine wrap_put_vara_realx (nfid, varid, start, count, arr)
     836             : !-------------------------------------------------------------------------------
     837             : !
     838             : ! Purpose:
     839             : !
     840             : ! Output the given portion of the real array.
     841             : !
     842             : !-------------------------------------------------------------------------------
     843             :    implicit none
     844             : 
     845             :    integer, intent(in):: nfid
     846             :    integer, intent(in):: varid
     847             :    integer, intent(in):: start(:)
     848             :    integer, intent(in):: count(:)
     849             :    real(r8), intent(in):: arr(:)
     850             : 
     851             :    integer ret      ! NetCDF return code
     852           0 :    ret = nf90_put_var (nfid, varid, arr, start, count)
     853           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     854           0 :    end subroutine wrap_put_vara_realx
     855             : 
     856             : !===============================================================================
     857             : 
     858           0 :    subroutine wrap_put_vara_real (nfid, varid, start, count, arr)
     859             : !-------------------------------------------------------------------------------
     860             : !
     861             : ! Purpose:
     862             : !
     863             : ! Output the given portion of the real array.
     864             : !
     865             : !-------------------------------------------------------------------------------
     866             :    implicit none
     867             : 
     868             :    integer, intent(in):: nfid
     869             :    integer, intent(in):: varid
     870             :    integer, intent(in):: start(:)
     871             :    integer, intent(in):: count(:)
     872             :    real(r4), intent(in):: arr(:)
     873             : 
     874             :    integer ret      ! NetCDF return code
     875           0 :    ret = nf90_put_var (nfid, varid, arr, start, count)
     876           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     877           0 :    end subroutine wrap_put_vara_real
     878             : 
     879             : !===============================================================================
     880             : 
     881           0 :    subroutine wrap_put_var_realx (nfid, varid, arr)
     882             : !-------------------------------------------------------------------------------
     883             : !
     884             : ! Purpose:
     885             : !
     886             : ! Put the given real variable to output file.
     887             : !
     888             : !-------------------------------------------------------------------------------
     889             :    implicit none
     890             : 
     891             :    integer, intent(in):: nfid
     892             :    integer, intent(in):: varid
     893             :    real(r8), intent(in):: arr(:)
     894             : 
     895             :    integer ret      ! NetCDF return code
     896             : 
     897           0 :    ret = nf90_put_var (nfid, varid, arr)
     898           0 :    if (ret/=NF90_NOERR) call handle_error (ret)
     899           0 :    end subroutine wrap_put_var_realx
     900             : 
     901             : !===============================================================================
     902             : 
     903           0 :    subroutine handle_error(ret)
     904             : !-------------------------------------------------------------------------------
     905             : !
     906             : ! Purpose:
     907             : !
     908             : ! Handle netCDF errors.
     909             : !
     910             : !-------------------------------------------------------------------------------
     911             : 
     912             :    implicit none
     913             : 
     914             :    integer, intent(in):: ret
     915             :    
     916           0 :    write(iulog,*)nf90_strerror(ret)
     917           0 :    call endrun ('HANDLE_ERROR')
     918           0 :    end subroutine handle_error
     919             : 
     920             : !===============================================================================
     921             :  end module wrap_nf

Generated by: LCOV version 1.14