!====================================================================== ! Description: Module for generic writing of NetCDF data ! Sep 2002 P. Dirmeyer ! $Log: drv_writenf_mod.f90,v $ ! Revision 1.1 2002/09/17 17:16:38 guo ! Initial revision ! !====================================================================== module drv_writenf_mod use netcdf INTERFACE drv_writetime MODULE PROCEDURE drv_writetime_real, drv_writetime_int END INTERFACE ! drv_writetime INTERFACE drv_writenf1 MODULE PROCEDURE drv_writenf1_real, drv_writenf1_int END INTERFACE ! drv_writenf1 contains subroutine drv_writetime_real(ncid, irec, varid, value) ! ! Purposen: This routine updates the time vectors for a given NetCDF ! file. P. Dirmeyer 8/2001 ! ! fileid# = NCID ! implicit none ! ! ARGUMENTS ! INTEGER, INTENT(IN) :: ncid,irec INTEGER, INTENT(IN) :: varid REAL, INTENT(IN) :: value ! ! LOCAL ! INTEGER :: i, iret ! iret = NF90_PUT_VAR(ncid, varid, value, start = (/ irec /)) ! IF (iret .NE. NF90_NOERR ) THEN WRITE (6,1000) irec,varid,ncid STOP 'drv_writetime_real' ENDIF ! 1000 format(' Could not write irec=',i6,'for NetCDF variable ',i4,' to file ',i4) ! end subroutine drv_writetime_real !--------------------------------------------------------------------- subroutine drv_writetime_int(ncid, irec, varid, value) ! ! Purposen: This routine updates the time vectors for a given NetCDF ! file. P. Dirmeyer 8/2001 ! ! fileid# = NCID ! implicit none ! ! ARGUMENTS ! INTEGER, INTENT(IN) :: ncid,irec INTEGER, INTENT(IN) :: varid INTEGER, INTENT(IN) :: value ! ! LOCAL ! INTEGER :: i, iret ! write(6,*) ncid,irec,varid,value iret = NF90_PUT_VAR(ncid, varid, value, start = (/ irec /)) ! IF (iret .NE. NF90_NOERR ) THEN WRITE (6,1000) irec,varid,ncid STOP 'drv_writetime_int' ENDIF ! 1000 format(' Could not write irec=',i6,'for NetCDF variable ',i4,' to file ',i4) ! end subroutine drv_writetime_int !--------------------------------------------------------------------- subroutine drv_writenf1_real(ncid,varid,var,lpnts) ! ! Purpose: This routine writes a single vector to a NetCDF file ! P. Dirmeyer 8/2001 ! ! fileid# = NCID ! variable# = VARID ! IMPLICIT NONE ! ! ARGUMENTS ! INTEGER, INTENT(IN) :: ncid INTEGER, INTENT(IN) :: varid INTEGER, INTENT(IN) :: lpnts REAL, INTENT(IN) :: var(lpnts) ! ! LOCAL ! INTEGER :: iret ! iret = NF90_PUT_VAR(ncid, varid, var) ! IF (iret /= NF90_NOERR ) THEN WRITE (6,*) ' Could not write NetCDF variable ',varid,' to file ',ncid STOP 'drv_writenf1' ENDIF ! end subroutine drv_writenf1_real !--------------------------------------------------------------------- subroutine drv_writenf1_int(ncid,varid,var,lpnts) ! ! Purpose: This routine writes a single vector to a NetCDF file ! P. Dirmeyer 8/2001 ! ! fileid# = NCID ! variable# = VARID ! IMPLICIT NONE ! ! ARGUMENTS ! INTEGER, INTENT(IN) :: ncid INTEGER, INTENT(IN) :: varid INTEGER, INTENT(IN) :: lpnts INTEGER, INTENT(IN) :: var(lpnts) ! ! LOCAL ! INTEGER :: iret ! iret = NF90_PUT_VAR(ncid, varid, var) ! IF (iret /= NF90_NOERR ) THEN WRITE (6,*) ' Could not write NetCDF variable ',varid,' to file ',ncid STOP 'drv_writenf1' ENDIF ! end subroutine drv_writenf1_int !--------------------------------------------------------------------- subroutine drv_writenf2(ncid,varid,irec,var,lpnts) ! ! Purpose: This routine writes a vector for a given time irec to a ! NetCDF file P. Dirmeyer 8/2001 ! ! fileid# = NCID ! variable# = VARID ! implicit none ! ! ARGUMENTS ! INTEGER, INTENT(IN) :: ncid INTEGER, INTENT(IN) :: varid INTEGER, INTENT(IN) :: irec INTEGER, INTENT(IN) :: lpnts REAL, INTENT(IN) :: var(lpnts) ! ! LOCAL ! INTEGER :: i, iret, istart(2), icount(2) ! istart(2) = irec istart(1) = 1 icount(2) = 1 icount(1) = lpnts ! iret = NF90_PUT_VAR(ncid, varid, var, istart, icount) ! IF (iret /= NF90_NOERR ) then WRITE (6,1000) istart,icount,varid,ncid 1000 format(' Could not write istart=',2i6,', icount=',2i6,'for NetCDF variable ',i4,' to file ',i4) stop 'drv_writenf2 ' endif ! end subroutine drv_writenf2 !--------------------------------------------------------------------- subroutine drv_writenf3(ncid,varid,irec,var,lpnts,zdim) ! ! purpose: This routine writes an X-Z array for a given time irec ! to a NetCDF file. P. Dirmeyer 8/2001 ! ! fileid# = NCID ! variable# = VARID ! IMPLICIT NONE ! ! ARGUMENTS ! INTEGER, INTENT(IN) :: ncid INTEGER, INTENT(IN) :: varid INTEGER, INTENT(IN) :: irec INTEGER, INTENT(IN) :: lpnts,zdim REAL, INTENT(IN) :: var(lpnts,zdim) ! ! LOCAL ! INTEGER :: i, iret, istart(3), icount(3) ! istart(3) = irec istart(2) = 1 istart(1) = 1 icount(3) = 1 icount(2) = zdim icount(1) = lpnts ! iret = NF90_PUT_VAR(ncid, varid, var, istart, icount) ! IF (iret .NE. NF90_NOERR ) THEN WRITE (6,1000) istart,icount,varid,ncid 1000 format(' Could not write istart=',3i6,', icount=',3i6,'for NetCDF variable ',i4,' to file ',i4) STOP 'drv_writenf3 ' ENDIF ! end subroutine drv_writenf3 !--------------------------------------------------------------------- subroutine check_err(iret) implicit none integer :: iret if(iret /= NF90_NOERR) then print*, NF90_STRERROR(iret) stop endif end subroutine check_err end module drv_writenf_mod