#include <misc.h> #include <preproc.h> module organicFileMod 1,3 !----------------------------------------------------------------------- !BOP ! ! !MODULE: organicFileMod ! ! !DESCRIPTION: ! Contains methods for reading in organic matter data file which has ! organic matter density for each grid point and soil level ! ! !USES use abortutils , only : endrun use clm_varctl , only : iulog use shr_kind_mod , only : r8 => shr_kind_r8 ! ! !PUBLIC TYPES: implicit none private save ! ! !PUBLIC MEMBER FUNCTIONS: public :: organicrd ! Read organic matter dataset ! ! !REVISION HISTORY: ! Created by David Lawrence, 4 May 2006 ! Revised by David Lawrence, 21 September 2007 ! Revised by David Lawrence, 14 October 2008 ! !EOP ! !----------------------------------------------------------------------- contains !----------------------------------------------------------------------- !BOP ! ! !IROUTINE: organicrd ! ! !INTERFACE: subroutine organicrd(organic) 1,13 ! ! !DESCRIPTION: ! Read the organic matter dataset. ! ! !USES: use clm_varctl , only : fsurdat, single_column, scmlon, scmlat use clm_varpar , only : lsmlon, lsmlat, nlevsoi use ncdio , only : ncd_iolocal, check_dim, check_ret use fileutils , only : getfil use decompMod , only : get_proc_bounds use spmdMod , only : masterproc use clmtype , only : grlnd ! ! !ARGUMENTS: implicit none include 'netcdf.inc' real(r8), pointer :: organic(:,:) ! organic matter density (kg/m3) ! ! !CALLED FROM: ! subroutine initialize in module initializeMod ! ! !REVISION HISTORY: ! Created by David Lawrence, 4 May 2006 ! Revised by David Lawrence, 21 September 2007 ! ! ! !LOCAL VARIABLES: !EOP character(len=256) :: locfn ! local file name real(r8),pointer :: arrayl(:) ! generic global array integer :: ncid,dimid,varid ! netCDF id's integer :: begg,endg ! start/stop gridcells integer :: start(3),count(3) ! netcdf start/count arrays integer :: ier ! error status integer :: n ! indices integer :: closelatidx,closelonidx real(r8) :: closelat,closelon character(len=32) :: subname = 'organicrd' ! subroutine name !----------------------------------------------------------------------- call get_proc_bounds(begg,endg) ! Initialize data to zero - no organic matter dataset organic(:,:) = 0._r8 ! read data if file was specified in namelist if (fsurdat /= ' ') then count(1) = lsmlon count(2) = lsmlat start(1) = 1 start(2) = 1 start(3) = 1 count(3) = 1 ! Obtain netcdf file and read surface data if (masterproc) then write(iulog,*) 'Attempting to read organic matter data .....' call getfil (fsurdat, locfn, 0) call check_ret(nf_open(locfn, 0, ncid), subname) write(iulog,*) subname,trim(fsurdat) write(iulog,*) " Expected dimensions: lsmlon=",lsmlon," lsmlat=",lsmlat if (.not.single_column) then call check_dim(ncid, 'lsmlon' , lsmlon) call check_dim(ncid, 'lsmlat' , lsmlat) endif endif allocate(arrayl(begg:endg)) do n = 1,nlevsoi start(3) = n call ncd_iolocal(ncid,'ORGANIC','read',arrayl,grlnd,start,count) organic(begg:endg,n) = arrayl(begg:endg) enddo deallocate(arrayl) endif if ( masterproc )then write(iulog,*) 'Successfully read organic matter data' write(iulog,*) end if end subroutine organicrd end module organicFileMod