Initial commit of code to rewrite C-LAMP output from CLM3 for the Earth System Grid (ESG)
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/.hgignore Sun Sep 21 21:59:01 2008 -0400
1.3 @@ -0,0 +1,6 @@
1.4 +syntax: glob
1.5 +*.o
1.6 +*.mod
1.7 +
1.8 +c-lamp_rewrite
1.9 +C-LAMP_L1_table
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/Makefile Sun Sep 21 21:59:01 2008 -0400
2.3 @@ -0,0 +1,40 @@
2.4 +# On thing1, do the following first:
2.5 +# $ module load pgi
2.6 +# $ module load netcdf
2.7 +# $ module load cmor
2.8 +#
2.9 +FC=pgf90
2.10 +#CMOR=~hof/src/cmor/CMOR_V1.2
2.11 +#NETCDF=/apps/netcdf/3.6.2/jaguar
2.12 +#NETCDF=/apps/netcdf/3.6.1/hawk_x86_64
2.13 +#NETCDF=/apps/netcdf/3.6.1/ewok_x86_64_pgi625
2.14 +#NETCDF=$(HOME)/robin1/netcdf-3.6.2
2.15 +# jaguar
2.16 +#NETCDF=$(NETCDF_DIR)
2.17 +#UDUNITS=/apps/udunits/1.12.4/robin1/udunits-1.12.4
2.18 +FFLAGS=-I$(INC_CMOR) -I$(INC_NETCDF)
2.19 +LIBS=-L$(LIB_CMOR) -L$(LIB_NETCDF) -lcmor -ludunits -lnetcdf
2.20 +#
2.21 +OBJS=c-lamp_rewrite.o kind_mod.o clm_mod.o
2.22 +MODS=kind_mod.mod clm_mod.mod
2.23 +
2.24 +.SUFFIXES: .f90 .o
2.25 +
2.26 +.f90.o:
2.27 + $(FC) $(FFLAGS) -c $<
2.28 +
2.29 +all: c-lamp_rewrite
2.30 +
2.31 +c-lamp_rewrite: c-lamp_rewrite.o kind_mod.o clm_mod.o
2.32 + $(FC) $(FFLAGS) -o $@ c-lamp_rewrite.o kind_mod.o clm_mod.o $(LIBS)
2.33 +
2.34 +clean:
2.35 + $(RM) -f c-lamp_rewrite $(OBJS) $(MODS)
2.36 +
2.37 +install: all
2.38 + cp -p c-lamp_rewrite $(HOME)/bin/
2.39 +
2.40 +#
2.41 +c-lamp_rewrite.o: clm_mod.o kind_mod.o c-lamp_rewrite.f90
2.42 +clm_mod.o: kind_mod.o clm_mod.f90
2.43 +kind_mod.o: kind_mod.f90
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/c-lamp_rewrite.f90 Sun Sep 21 21:59:01 2008 -0400
3.3 @@ -0,0 +1,229 @@
3.4 + program clamp_rewrite
3.5 +
3.6 +! Program to use CMOR routines to rewrite model results from the simulations
3.7 +! for the Carbon-Land Model Intercomparison Project (C-LAMP).
3.8 +!
3.9 +! Forrest M. Hoffman <forrest@climatemodeling.org>
3.10 +! Created: Fri Jun 8 11:50:01 EDT 2007
3.11 +
3.12 +
3.13 + use cmor_users_functions
3.14 + use netcdf
3.15 + use kind_mod
3.16 + use clm_mod, only: namelen, varnamelen, coord, var_data, &
3.17 + clm_read_coord, clm_copy_grid_data, clm_read_data, clm_convert_data, &
3.18 + clm_free_data
3.19 + implicit none
3.20 +
3.21 + integer, parameter :: maxf = 2500
3.22 + integer, parameter :: maxv = 200
3.23 + integer :: i, numf, numv
3.24 +
3.25 + integer, allocatable :: iaxis(:) ! CMOR handle for axes (time, [hour,] [z-level,] latitude, longitude)
3.26 + integer :: ivar ! CMOR handle for variable
3.27 + integer :: ierr ! error flag
3.28 + integer :: axis_num ! axis counter
3.29 + integer :: realization ! model run realization
3.30 + character (len=128) :: input_path ! input path
3.31 + character (len=128) :: fnames(maxf) = '' ! input file names
3.32 + integer :: tshift(maxf) = 0 ! time shift for files
3.33 + character (len=128) :: output_path ! output path
3.34 + character (len=128) :: input_table ! CMOR table path
3.35 + character (len=32) :: vnames(maxv) = '' ! input variable names
3.36 + character (len=256) :: source = '' ! source global attribute
3.37 + character (len=128) :: experiment = '' ! experiment_id global attribute
3.38 + logical :: casa_flux_bug ! scale fluxes due to bug in CASA'
3.39 +
3.40 + real(r4) :: imissing = 1.0e+36 ! missing-data flag on input
3.41 + real(r4) :: omissing = 1.0e+36 ! missing-data flag on output
3.42 +
3.43 + casa_flux_bug = .false.
3.44 +
3.45 + namelist /inparm/ input_table, output_path, experiment, source, &
3.46 + realization, input_path, fnames, tshift, vnames, casa_flux_bug
3.47 +
3.48 + open(10, file='namelist', status='old')
3.49 + ierr = 1
3.50 + do while(ierr /= 0)
3.51 + read(10, inparm, iostat=ierr)
3.52 + if (ierr < 0) then
3.53 + stop 'End of file on namelist read'
3.54 + end if
3.55 + end do
3.56 + close(10)
3.57 +
3.58 + ! Count number of input data files
3.59 + numf = 0
3.60 + do i = 1, maxf
3.61 + if (trim(fnames(i)) /= '') numf = numf + 1
3.62 + end do
3.63 + ! Count number of variables
3.64 + numv = 0
3.65 + do i = 1, maxv
3.66 + if (trim(vnames(i)) /= '') numv = numv + 1
3.67 + end do
3.68 +
3.69 + print *, 'Reading input files for coordinates and counts...'
3.70 + call clm_read_coord(numf, input_path, fnames, .true.)
3.71 +
3.72 + do i = 1, numv
3.73 + select case (vnames(i))
3.74 + ! gca
3.75 + case ('area')
3.76 + call clm_copy_grid_data(vnames(i))
3.77 + ! lbm
3.78 + case ('landmask')
3.79 + call clm_copy_grid_data(vnames(i))
3.80 + ! orog
3.81 + case ('topo')
3.82 + call clm_copy_grid_data(vnames(i))
3.83 + ! sftlf
3.84 + case ('landfrac')
3.85 + call clm_copy_grid_data(vnames(i))
3.86 + case default
3.87 + print *, 'Reading input files for variable ', vnames(i)
3.88 + call clm_read_data(numf, input_path, fnames, tshift, vnames(i))
3.89 +
3.90 + !print *,'var_data%varname = ',var_data%varname
3.91 + !print *,'var_data%ndims = ',var_data%ndims
3.92 + !print *,'var_data%time = ',var_data%time
3.93 + !print *,'var_data%long_name = ',trim(var_data%long_name)
3.94 + !print *,'var_data%missing_value = ',var_data%missing_value
3.95 + !print *,'var_data%units = ',trim(var_data%units)
3.96 + end select
3.97 +
3.98 + print *, 'Performing unit conversion on data...'
3.99 + call clm_convert_data(casa_flux_bug)
3.100 +
3.101 + print *, 'Initializing CMOR...'
3.102 + ierr = cmor_setup(inpath='./',netcdf_file_action='preserve', &
3.103 + set_verbosity=2, exit_control=2)
3.104 +
3.105 + print *, 'Identifying output data sets for CMOR...'
3.106 + ierr = cmor_dataset( &
3.107 + outpath = output_path, &
3.108 + experiment_id = experiment, &
3.109 + institution = 'ORNL (Oak Ridge National Laboratory, Oak Ridge, Tennessee, USA)', &
3.110 + source = trim(source), &
3.111 + realization = realization, &
3.112 + calendar = 'noleap', &
3.113 + history = 'Extracted from case '//trim(coord%case_id), &
3.114 + comment = 'Initial dataset: '//trim(coord%inidat)// &
3.115 + '; surface dataset: '//trim(coord%surdat)//'; pft dataset: '//&
3.116 + trim(coord%pftdat)//'; rtm dataset: '//trim(coord%rtmdat), &
3.117 + references = 'http://www.climatemodeling.org/c-lamp', &
3.118 + contact = 'Forrest M. Hoffman <forrest@climatemodeling.org>')
3.119 +
3.120 + allocate(iaxis(var_data%ndims), stat=ierr)
3.121 + if (ierr /= 0) then
3.122 + print *, 'Cannot allocate iaxis'
3.123 + stop
3.124 + end if
3.125 +
3.126 + print *, 'Defining coordinates for CMOR output data...'
3.127 + axis_num = 1
3.128 +
3.129 + iaxis(axis_num) = cmor_axis( &
3.130 + table = input_table, &
3.131 + table_entry = 'longitude', &
3.132 + units = 'degrees_east', &
3.133 + length = coord%xsize, &
3.134 + coord_vals = coord%x)
3.135 + axis_num = axis_num + 1
3.136 +
3.137 + iaxis(axis_num) = cmor_axis( &
3.138 + table = input_table, &
3.139 + table_entry = 'latitude', &
3.140 + units = 'degrees_north', &
3.141 + length = coord%ysize, &
3.142 + coord_vals = coord%y)
3.143 + axis_num = axis_num + 1
3.144 +
3.145 + if (var_data%soil_layer_flag) then
3.146 + iaxis(axis_num) = cmor_axis( &
3.147 + table = input_table, &
3.148 + table_entry = 'depth_soil', &
3.149 + units = 'm', &
3.150 + length = coord%zsoi_size, &
3.151 + coord_vals = coord%zsoi)
3.152 + axis_num = axis_num + 1
3.153 + end if
3.154 +
3.155 + if (var_data%hour_flag) then
3.156 + iaxis(axis_num) = cmor_axis( &
3.157 + table = input_table, &
3.158 + table_entry = 'hour', &
3.159 + units = 'hours', &
3.160 + length = coord%hr_size, &
3.161 + coord_vals = coord%hr)
3.162 + axis_num = axis_num + 1
3.163 + end if
3.164 +
3.165 + if (var_data%ndims > 2) then
3.166 + iaxis(axis_num) = cmor_axis( &
3.167 + table = input_table, &
3.168 + table_entry = 'time', &
3.169 + units = 'days since 1798-01-01 00:00:00')
3.170 + axis_num = axis_num + 1
3.171 + end if
3.172 +
3.173 + print *, 'Defining CMOR output data variables...'
3.174 + if (var_data%positive == '') then
3.175 + ivar = cmor_variable( &
3.176 + table = input_table, &
3.177 + table_entry = var_data%out_varname, &
3.178 + original_name = var_data%varname, &
3.179 + units = var_data%units, &
3.180 + missing_value = var_data%missing_value, &
3.181 + axis_ids = iaxis)
3.182 + else
3.183 + ivar = cmor_variable( &
3.184 + table = input_table, &
3.185 + table_entry = var_data%out_varname, &
3.186 + original_name = var_data%varname, &
3.187 + units = var_data%units, &
3.188 + positive = var_data%positive, &
3.189 + missing_value = var_data%missing_value, &
3.190 + axis_ids = iaxis)
3.191 + end if
3.192 +
3.193 + print *, 'Writing CMOR output...'
3.194 + select case (var_data%ndims)
3.195 + case (2)
3.196 + if (var_data%int_type) then
3.197 + ierr = cmor_write( &
3.198 + var_id = ivar, &
3.199 + data = var_data%int2d)
3.200 + else
3.201 + ierr = cmor_write( &
3.202 + var_id = ivar, &
3.203 + data = var_data%var2d)
3.204 + end if
3.205 + case (3)
3.206 + ierr = cmor_write( &
3.207 + var_id = ivar, &
3.208 + data = var_data%var3d, &
3.209 + time_vals = var_data%time, &
3.210 + time_bnds = var_data%time_bounds)
3.211 + case (4)
3.212 + ierr = cmor_write( &
3.213 + var_id = ivar, &
3.214 + data = var_data%var4d, &
3.215 + time_vals = var_data%time, &
3.216 + time_bnds = var_data%time_bounds)
3.217 + case default
3.218 + print *, 'Unable to handle data with ', var_data%ndims, 'dimensions'
3.219 + stop
3.220 + end select
3.221 +
3.222 + print *, 'Closing CMOR file(s)...'
3.223 + ierr = cmor_close()
3.224 +
3.225 + deallocate(iaxis)
3.226 +
3.227 + print *, 'Freeing data...'
3.228 + call clm_free_data()
3.229 +
3.230 + end do ! loop over variables
3.231 +
3.232 + end program clamp_rewrite
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
4.2 +++ b/clm_mod.f90 Sun Sep 21 21:59:01 2008 -0400
4.3 @@ -0,0 +1,1371 @@
4.4 +module clm_mod
4.5 +
4.6 + use netcdf
4.7 + use kind_mod
4.8 + implicit none
4.9 +
4.10 + integer, parameter :: namelen = 128 ! string length for paths
4.11 + integer, parameter :: varnamelen = 32 ! string length for varnames
4.12 + integer, parameter :: posnamelen = 4 ! string length for positive attribute
4.13 + integer, parameter :: varattlen = 128 ! string length for variable attributes
4.14 + character (len=*), parameter :: xname = 'lon'
4.15 + character (len=*), parameter :: yname = 'lat'
4.16 + character (len=*), parameter :: zsoi_name = 'levsoi'
4.17 + character (len=*), parameter :: zlak_name = 'levlak'
4.18 + character (len=*), parameter :: tname = 'time'
4.19 + character (len=*), parameter :: hr_name = 'hour'
4.20 + character (len=*), parameter :: nsamples_name = 'nsamples'
4.21 + character (len=*), parameter :: hiname = 'hist_interval'
4.22 + character (len=*), parameter :: tbname = 'time_bounds'
4.23 + character (len=*), parameter :: aname = 'area'
4.24 + character (len=*), parameter :: lname = 'landfrac'
4.25 + character (len=*), parameter :: mname = 'landmask'
4.26 + character (len=*), parameter :: oname = 'topo'
4.27 + character (len=*), parameter :: long_name_name = 'long_name'
4.28 + character (len=*), parameter :: missing_value_name = 'missing_value'
4.29 + character (len=*), parameter :: units_name = 'units'
4.30 + character (len=*), parameter :: case_id_name = 'case_id'
4.31 + character (len=*), parameter :: inidat_name = 'Initial_conditions_dataset'
4.32 + character (len=*), parameter :: surdat_name = 'Surface_dataset'
4.33 + character (len=*), parameter :: pftdat_name = 'PFT_physiological_constants_dataset'
4.34 + character (len=*), parameter :: rtmdat_name = 'RTM_input_datset'
4.35 +
4.36 + type surface
4.37 + integer :: xsize ! number of longitude points (lon)
4.38 + integer :: ysize ! number of latitutde points (lat)
4.39 + integer :: psize ! number of pfts
4.40 + real(r8), pointer :: x(:) ! longitude values (lon)
4.41 + real(r8), pointer :: y(:) ! latitude values (lat)
4.42 + real(r8), pointer :: p(:) ! pft number
4.43 + real(r4), pointer :: pft(:,:,:) ! percent of each pft
4.44 + end type surface
4.45 +
4.46 + type coordinates
4.47 + integer :: xsize ! number of longitude points (lon)
4.48 + integer :: ysize ! number of latitutde points (lat)
4.49 + integer :: zsoi_size ! number of soil z-levels (levsoi)
4.50 + integer :: zlak_size ! number of lake z-levels (levlak)
4.51 + integer :: tsize ! number of time points (time)
4.52 + integer :: hr_size ! number of hour points (hour = 24)
4.53 + integer :: nsamples ! number of time samples in post-processing statistics
4.54 + real(r8), pointer :: x(:) ! longitude values (lon)
4.55 + real(r8), pointer :: y(:) ! latitude values (lat)
4.56 + real(r8), pointer :: zsoi(:) ! soil z-level values (levsoi)
4.57 + real(r8), pointer :: zlak(:) ! lake z-level values (levlak)
4.58 + real(r8), pointer :: hr(:) ! hour-of-day values (hour)
4.59 + real(r8), pointer :: area(:,:) ! gridcell areas
4.60 + real(r8), pointer :: landfrac(:,:) ! gridcell land fractions
4.61 + integer, pointer :: landmask(:,:) ! gridcell land/ocean mask
4.62 + real(r8), pointer :: orog(:,:) ! gridcell orography/topography
4.63 + character (len=namelen) :: case_id ! case name of run
4.64 + character (len=namelen) :: inidat ! initial dataset filename
4.65 + character (len=namelen) :: surdat ! surface dataset filename
4.66 + character (len=namelen) :: pftdat ! pft dataset filename
4.67 + character (len=namelen) :: rtmdat ! runoff dataset filename
4.68 + logical :: hour_flag ! flag for hour-of-day statistical summary files
4.69 + end type coordinates
4.70 +
4.71 + type variable_data
4.72 + character (len=varnamelen) :: varname
4.73 + integer :: ndims
4.74 + integer, pointer :: int2d(:,:)
4.75 + real(r4), pointer :: var2d(:,:)
4.76 + real(r4), pointer :: var3d(:,:,:)
4.77 + real(r4), pointer :: var4d(:,:,:,:)
4.78 + real(r8), pointer :: time(:)
4.79 + real(r8), pointer :: time_bounds(:,:)
4.80 + logical :: int_type ! set if type is integer
4.81 + logical :: soil_layer_flag
4.82 + logical :: hour_flag ! flag for hour-of-day statistical summary variable
4.83 + character (len=varattlen) :: long_name
4.84 + real(r4) :: missing_value
4.85 + character (len=varattlen) :: units
4.86 + character (len=posnamelen) :: positive
4.87 + character (len=varnamelen) :: out_varname
4.88 + end type variable_data
4.89 +
4.90 + type(surface), target :: surf
4.91 + type(coordinates), target :: coord
4.92 + type(variable_data), target :: var_data
4.93 + save
4.94 +
4.95 + public clm_read_surf
4.96 + public clm_free_surf
4.97 + public clm_read_coord
4.98 + public clm_copy_grid_data
4.99 + public clm_read_data
4.100 + public clm_convert_data
4.101 + public clm_free_data
4.102 + private nc_err
4.103 +
4.104 + contains
4.105 +
4.106 + !
4.107 + !--------------------------------------------------------------------------
4.108 + !
4.109 + subroutine clm_read_surf(fsurdat)
4.110 +
4.111 + implicit none
4.112 + character (len=namelen), intent(in) :: fsurdat ! input surface dataset
4.113 + integer :: i
4.114 + integer :: ierr
4.115 + integer :: ncid
4.116 + integer :: xdimid, xvarid, xlen
4.117 + integer :: ydimid, yvarid, ylen
4.118 + integer :: pdimid, pvarid, plen
4.119 + real(r8), allocatable :: longxy(:,:)
4.120 + real(r8), allocatable :: latixy(:,:)
4.121 + real(r4), allocatable :: pctpft(:,:,:)
4.122 +
4.123 + ! Read coordinated from surface dataset
4.124 + print *, 'Opening ',trim(fsurdat)
4.125 + call nc_err(nf90_open(path=trim(fsurdat), mode=nf90_nowrite, ncid=ncid))
4.126 + call nc_err(nf90_inq_dimid(ncid, 'lsmlon', xdimid))
4.127 + call nc_err(nf90_inq_dimid(ncid, 'lsmlat', ydimid))
4.128 + call nc_err(nf90_inq_dimid(ncid, 'lsmpft', pdimid))
4.129 +
4.130 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=xdimid, len=xlen))
4.131 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=ydimid, len=ylen))
4.132 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=pdimid, len=plen))
4.133 +
4.134 + call nc_err(nf90_inq_varid(ncid, 'LONGXY', xvarid))
4.135 + call nc_err(nf90_inq_varid(ncid, 'LATIXY', yvarid))
4.136 + call nc_err(nf90_inq_varid(ncid, 'PCT_PFT', pvarid))
4.137 +
4.138 + allocate(longxy(xlen, ylen), latixy(xlen, ylen), pctpft(xlen, ylen, plen), stat=ierr)
4.139 + if (ierr /= 0) then
4.140 + print *, 'clm_read_surf: Cannot allocate longxy, latixy, pctpft variables'
4.141 + stop
4.142 + end if
4.143 +
4.144 + call nc_err(nf90_get_var(ncid, xvarid, longxy))
4.145 + call nc_err(nf90_get_var(ncid, yvarid, latixy))
4.146 + call nc_err(nf90_get_var(ncid, pvarid, pctpft))
4.147 +
4.148 + print *, 'Closing ',trim(fsurdat)
4.149 + call nc_err(nf90_close(ncid))
4.150 +
4.151 + ! Allocate and fill in the surface derived data type
4.152 + surf%xsize = xlen
4.153 + surf%ysize = ylen
4.154 + surf%psize = plen
4.155 + allocate(surf%x(xlen), surf%y(ylen), surf%p(plen), surf%pft(xlen, ylen, plen), stat=ierr)
4.156 + if (ierr /= 0) then
4.157 + print *, 'clm_read_surf: Cannot allocate surface type variables'
4.158 + stop
4.159 + end if
4.160 + surf%x(:) = longxy(:,1)
4.161 + surf%y(:) = latixy(1,:)
4.162 + do i = 1, plen
4.163 + surf%p(i) = real(i)
4.164 + end do
4.165 + surf%pft = pctpft
4.166 +
4.167 + deallocate(longxy, latixy, pctpft)
4.168 +
4.169 + end subroutine clm_read_surf
4.170 + !
4.171 + !--------------------------------------------------------------------------
4.172 + !
4.173 + subroutine clm_free_surf()
4.174 +
4.175 + implicit none
4.176 +
4.177 + if (allocated(surf%x)) deallocate(surf%x)
4.178 + if (allocated(surf%y)) deallocate(surf%y)
4.179 + if (allocated(surf%p)) deallocate(surf%p)
4.180 + if (allocated(surf%pft)) deallocate(surf%pft)
4.181 +
4.182 + end subroutine clm_free_surf
4.183 + !
4.184 + !--------------------------------------------------------------------------
4.185 + !
4.186 + subroutine clm_read_coord(numf, input_path, fnames, read_grid_all)
4.187 +
4.188 + implicit none
4.189 + integer, intent(in) :: numf ! number of filenames
4.190 + character (len=namelen), intent(in) :: input_path ! input path
4.191 + character (len=namelen), intent(in) :: fnames(numf) ! input filenames
4.192 + logical, intent(in) :: read_grid_all ! flag to read area,...
4.193 + integer :: ncid
4.194 + integer :: xdimid, xvarid, xlen
4.195 + integer :: ydimid, yvarid, ylen
4.196 + integer :: zsoi_dimid, zsoi_varid, zsoi_len
4.197 + integer :: zlak_dimid, zlak_varid, zlak_len
4.198 + integer :: tdimid, tvarid, tlen
4.199 + integer :: hr_dimid, hr_varid, hr_len
4.200 + integer :: nsamples_dimid, nsamples_len
4.201 + integer :: avarid ! area (when read_grid_all true)
4.202 + integer :: lvarid ! landfrac (when read_grid_all true)
4.203 + integer :: mvarid ! landmask (when read_grid_all true)
4.204 + integer :: ovarid ! orog/topo (when read_grid_all true)
4.205 + integer(i8) :: i
4.206 + integer(i8) :: time_size
4.207 + real(r4), allocatable :: xvals(:)
4.208 + real(r4), allocatable :: yvals(:)
4.209 + real(r4), allocatable :: zsoi_vals(:)
4.210 + real(r4), allocatable :: zlak_vals(:)
4.211 + real(r4), allocatable :: hr_vals(:)
4.212 + real(r4), allocatable :: avals(:,:) ! area (when read_grid_all true)
4.213 + real(r4), allocatable :: lvals(:,:) ! landfrac (when read_grid_all true)
4.214 + integer, allocatable :: mvals(:,:) ! landmask (when read_grid_all true)
4.215 + real(r4), allocatable :: ovals(:,:) ! orog/topo (when read_grid_all true)
4.216 + character (len=namelen) :: case_id = ''
4.217 + character (len=namelen) :: inidat = ''
4.218 + character (len=namelen) :: surdat = ''
4.219 + character (len=namelen) :: pftdat = ''
4.220 + character (len=namelen) :: rtmdat = ''
4.221 + logical :: hrflag = .false.
4.222 + integer :: ierr
4.223 +
4.224 + ! Read coordinates from first file
4.225 + print *, 'Opening ',trim(input_path)//'/'//trim(fnames(1))
4.226 + call nc_err(nf90_open(path=trim(input_path)//'/'//trim(fnames(1)), mode=nf90_nowrite, ncid=ncid))
4.227 + call nc_err(nf90_inq_dimid(ncid, xname, xdimid))
4.228 + call nc_err(nf90_inq_dimid(ncid, yname, ydimid))
4.229 + call nc_err(nf90_inq_dimid(ncid, zsoi_name, zsoi_dimid))
4.230 + call nc_err(nf90_inq_dimid(ncid, zlak_name, zlak_dimid))
4.231 + call nc_err(nf90_inq_dimid(ncid, tname, tdimid))
4.232 + if (nf90_inq_dimid(ncid, hr_name, hr_dimid) == nf90_noerr) then
4.233 + call nc_err(nf90_inq_dimid(ncid, nsamples_name, nsamples_dimid))
4.234 + hrflag = .true.
4.235 + end if
4.236 +
4.237 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=xdimid, len=xlen))
4.238 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=ydimid, len=ylen))
4.239 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=zsoi_dimid, len=zsoi_len))
4.240 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=zlak_dimid, len=zlak_len))
4.241 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=tdimid, len=tlen))
4.242 + if (hrflag) then
4.243 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=hr_dimid, len=hr_len))
4.244 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=nsamples_dimid, len=nsamples_len))
4.245 + else
4.246 + hr_len = 0
4.247 + nsamples_len = 0
4.248 + end if
4.249 + print *, tlen,' values'
4.250 +
4.251 + allocate(xvals(xlen), yvals(ylen), zsoi_vals(zsoi_len), zlak_vals(zlak_len), hr_vals(hr_len), stat=ierr)
4.252 + if (ierr /= 0) then
4.253 + print *, 'clm_read_coord: Cannot allocate grid variables'
4.254 + stop
4.255 + end if
4.256 + if (read_grid_all) then
4.257 + allocate(avals(xlen, ylen), lvals(xlen, ylen), mvals(xlen, ylen), ovals(xlen, ylen), stat=ierr)
4.258 + if (ierr /= 0) then
4.259 + print *, 'clm_read_coord: Cannot allocate extra grid variables'
4.260 + stop
4.261 + end if
4.262 + end if
4.263 +
4.264 + call nc_err(nf90_inq_varid(ncid, xname, xvarid))
4.265 + call nc_err(nf90_inq_varid(ncid, yname, yvarid))
4.266 + call nc_err(nf90_inq_varid(ncid, zsoi_name, zsoi_varid))
4.267 + call nc_err(nf90_inq_varid(ncid, zlak_name, zlak_varid))
4.268 + call nc_err(nf90_inq_varid(ncid, tname, tvarid))
4.269 + if (hrflag) call nc_err(nf90_inq_varid(ncid, hr_name, hr_varid))
4.270 + if (read_grid_all) then
4.271 + call nc_err(nf90_inq_varid(ncid, aname, avarid))
4.272 + call nc_err(nf90_inq_varid(ncid, lname, lvarid))
4.273 + call nc_err(nf90_inq_varid(ncid, mname, mvarid))
4.274 + call nc_err(nf90_inq_varid(ncid, oname, ovarid))
4.275 + end if
4.276 +
4.277 + call nc_err(nf90_get_var(ncid, xvarid, xvals))
4.278 + call nc_err(nf90_get_var(ncid, yvarid, yvals))
4.279 + call nc_err(nf90_get_var(ncid, zsoi_varid, zsoi_vals))
4.280 + call nc_err(nf90_get_var(ncid, zlak_varid, zlak_vals))
4.281 + if (hrflag) call nc_err(nf90_get_var(ncid, hr_varid, hr_vals))
4.282 + if (read_grid_all) then
4.283 + call nc_err(nf90_get_var(ncid, avarid, avals))
4.284 + call nc_err(nf90_get_var(ncid, lvarid, lvals))
4.285 + call nc_err(nf90_get_var(ncid, mvarid, mvals))
4.286 + call nc_err(nf90_get_var(ncid, ovarid, ovals))
4.287 + end if
4.288 +
4.289 + ! Read global attributes
4.290 + call nc_err(nf90_get_att(ncid, nf90_global, case_id_name, case_id))
4.291 + call nc_err(nf90_get_att(ncid, nf90_global, inidat_name, inidat))
4.292 + call nc_err(nf90_get_att(ncid, nf90_global, surdat_name, surdat))
4.293 + call nc_err(nf90_get_att(ncid, nf90_global, pftdat_name, pftdat))
4.294 + call nc_err(nf90_get_att(ncid, nf90_global, rtmdat_name, rtmdat))
4.295 +
4.296 + call nc_err(nf90_close(ncid))
4.297 +
4.298 + time_size = tlen
4.299 + ! Loop over all remaining files, reading size of time dimension
4.300 + do i = 2, numf
4.301 + print *, 'Opening ',trim(input_path)//'/'//trim(fnames(i))
4.302 + call nc_err(nf90_open(path=trim(input_path)//'/'//trim(fnames(i)), &
4.303 + mode=nf90_nowrite, ncid=ncid))
4.304 + call nc_err(nf90_inq_dimid(ncid, tname, tdimid))
4.305 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=tdimid, len=tlen))
4.306 + call nc_err(nf90_close(ncid))
4.307 + print *, tlen,' values'
4.308 + time_size = time_size + tlen
4.309 + end do
4.310 +
4.311 + ! Allocate and fill the coordinates derived data type
4.312 + coord%xsize = xlen
4.313 + coord%ysize = ylen
4.314 + coord%zsoi_size = zsoi_len
4.315 + coord%zlak_size = zlak_len
4.316 + coord%tsize = time_size
4.317 + coord%hr_size = hr_len
4.318 + coord%nsamples = nsamples_len
4.319 + allocate(coord%x(xlen), coord%y(ylen), coord%zsoi(zsoi_len), coord%zlak(zlak_len), coord%hr(hr_len), stat=ierr)
4.320 + if (ierr /= 0) then
4.321 + print *, 'clm_read_coord: Cannot allocate grid variables'
4.322 + stop
4.323 + end if
4.324 + if (read_grid_all) then
4.325 + allocate(coord%area(xlen, ylen), coord%landfrac(xlen, ylen), coord%landmask(xlen, ylen), coord%orog(xlen, ylen), stat=ierr)
4.326 + if (ierr /= 0) then
4.327 + print *, 'clm_read_coord: Cannot allocate extra grid variables'
4.328 + stop
4.329 + end if
4.330 + end if
4.331 + coord%x = xvals
4.332 + coord%y = yvals
4.333 + coord%zsoi = zsoi_vals
4.334 + coord%zlak = zlak_vals
4.335 + if (hrflag) coord%hr = hr_vals
4.336 + if (read_grid_all) then
4.337 + coord%area = avals
4.338 + coord%landfrac = lvals
4.339 + coord%landmask = mvals
4.340 + coord%orog = ovals
4.341 + end if
4.342 + deallocate(xvals, yvals, zsoi_vals, zlak_vals, hr_vals)
4.343 + if (read_grid_all) then
4.344 + deallocate(avals, lvals, mvals, ovals)
4.345 + end if
4.346 + coord%case_id = trim(case_id)
4.347 + coord%inidat = trim(inidat)
4.348 + coord%surdat = trim(surdat)
4.349 + coord%pftdat = trim(pftdat)
4.350 + coord%rtmdat = trim(rtmdat)
4.351 + coord%hour_flag = hrflag
4.352 +
4.353 + end subroutine clm_read_coord
4.354 + !
4.355 + !--------------------------------------------------------------------------
4.356 + !
4.357 + subroutine clm_copy_grid_data(varname)
4.358 +
4.359 + implicit none
4.360 + character (len=varnamelen), intent(in) :: varname ! variable name
4.361 + integer :: ierr
4.362 +
4.363 + var_data%varname = varname
4.364 + var_data%ndims = 2
4.365 + var_data%missing_value = 1.0e+36
4.366 + if (varname == 'landmask') then
4.367 + var_data%int_type = .true.
4.368 + allocate(var_data%int2d(coord%xsize, coord%ysize), stat=ierr)
4.369 + if (ierr /= 0) then
4.370 + print *, 'clm_copy_grid_data: Cannot allocate 2d integer variable'
4.371 + stop
4.372 + end if
4.373 + else
4.374 + var_data%int_type = .false.
4.375 + allocate(var_data%var2d(coord%xsize, coord%ysize), stat=ierr)
4.376 + if (ierr /= 0) then
4.377 + print *, 'clm_copy_grid_data: Cannot allocate 2d real variable'
4.378 + stop
4.379 + end if
4.380 + end if
4.381 +
4.382 + select case (varname)
4.383 + case ('area')
4.384 + var_data%var2d = coord%area
4.385 + case ('landfrac')
4.386 + var_data%var2d = coord%landfrac
4.387 + case ('landmask')
4.388 + var_data%int2d = coord%landmask
4.389 + case ('topo')
4.390 + var_data%var2d = coord%orog
4.391 + case default
4.392 + print *,'clm_copy_grid_data: ',varname,' is not a known grid variable'
4.393 + stop
4.394 + end select
4.395 +
4.396 + end subroutine clm_copy_grid_data
4.397 + !
4.398 + !--------------------------------------------------------------------------
4.399 + !
4.400 + subroutine clm_read_data(numf, input_path, fnames, tshift, varname)
4.401 +
4.402 + implicit none
4.403 + integer, intent(in) :: numf ! number of filenames
4.404 + character (len=namelen), intent(in) :: input_path ! input path
4.405 + character (len=namelen), intent(in) :: fnames(numf) ! input filenames
4.406 + integer, intent(in) :: tshift(numf) ! time shift by file
4.407 + character (len=varnamelen), intent(in) :: varname ! variable name
4.408 + integer :: ncid
4.409 + integer :: tdimid, tvarid, tlen
4.410 + integer :: hidimid, hilen
4.411 + integer :: tbvarid
4.412 + integer :: varid, dimids(nf90_max_var_dims), dimlen
4.413 + integer :: zsize
4.414 + integer(i8) :: i, j, k, l
4.415 + integer(i8) :: time_size
4.416 + real(r4), allocatable :: tvals(:) ! temporary time values
4.417 + real(r4), allocatable :: tbvals(:,:) ! temporary time bounds values
4.418 + real(r4), allocatable :: vals(:,:) ! temporary data values
4.419 + character (len=varnamelen) :: dimname ! dimension name
4.420 + integer :: ierr
4.421 +
4.422 + ! Figure out the dimensionality of the variable and variable attributes
4.423 + ! from the first file
4.424 + print *, 'Opening ',trim(input_path)//'/'//trim(fnames(1)), &
4.425 + ' to check dimensionality of ',trim(varname)
4.426 + call nc_err(nf90_open(path=trim(input_path)//'/'//trim(fnames(1)), mode=nf90_nowrite, ncid=ncid))
4.427 + call nc_err(nf90_inq_varid(ncid, trim(varname), varid))
4.428 + call nc_err(nf90_inquire_variable(ncid, varid, name=var_data%varname, ndims=var_data%ndims, dimids=dimids))
4.429 + ! Figure out if there is a Z-dimension and/or an hour-dimension
4.430 + ierr = 0
4.431 + var_data%int_type = .false.
4.432 + var_data%hour_flag = .false.
4.433 + var_data%soil_layer_flag = .false.
4.434 + do i = 1, var_data%ndims
4.435 + call nc_err(nf90_inquire_dimension(ncid, dimids(i), name=dimname, len=dimlen))
4.436 + if (i == 1 .and. dimname /= xname) ierr = ierr + 1
4.437 + if (i == 2 .and. dimname /= yname) ierr = ierr + 1
4.438 + if (i > 2 .and. i < var_data%ndims) then
4.439 + if (dimname == hr_name) then
4.440 + var_data%hour_flag = .true.
4.441 + else if (dimname == zsoi_name) then
4.442 + var_data%soil_layer_flag = .true.
4.443 + !else if (dimname == zlak_name) then
4.444 + ! var_data%zdim_name = dimname
4.445 + else
4.446 + ierr = ierr + 1
4.447 + end if
4.448 + end if
4.449 + ! This is not a good assumption (that time is always there), so skip it
4.450 + !if (i == var_data%ndims .and. dimname /= tname) ierr = ierr + 1
4.451 + print *,'Dimension ',i,' is ',dimname
4.452 + end do
4.453 + if (ierr /= 0) then
4.454 + print *,'clm_read_data: Unexpected dimension combination'
4.455 + stop
4.456 + end if
4.457 + !
4.458 + call nc_err(nf90_get_att(ncid, varid, long_name_name, var_data%long_name))
4.459 + call nc_err(nf90_get_att(ncid, varid, missing_value_name, var_data%missing_value))
4.460 + call nc_err(nf90_get_att(ncid, varid, units_name, var_data%units))
4.461 + call nc_err(nf90_close(ncid))
4.462 +
4.463 + ! Allocate space for the variable of the correct dimensionality
4.464 + select case (var_data%ndims)
4.465 + case (2)
4.466 + allocate(var_data%var2d(coord%xsize, coord%ysize), stat=ierr)
4.467 + if (ierr /= 0) then
4.468 + print *, 'clm_read_data: Cannot allocate 2d variable'
4.469 + stop
4.470 + end if
4.471 + case (3)
4.472 + allocate(var_data%var3d(coord%xsize, coord%ysize, coord%tsize), stat=ierr)
4.473 + if (ierr /= 0) then
4.474 + print *, 'clm_read_data: Cannot allocate 3d variable'
4.475 + stop
4.476 + end if
4.477 + case (4)
4.478 + if (var_data%hour_flag) then
4.479 + zsize = coord%hr_size
4.480 + else if (var_data%soil_layer_flag) then
4.481 + zsize = coord%zsoi_size
4.482 + !else if (var_data%zdim_name == zlak_name) then
4.483 + ! zsize = coord%zlak_size
4.484 + else
4.485 + print *,'clm_read_data: Unexpected fourth dimension while allocating'
4.486 + stop
4.487 + end if
4.488 + allocate(var_data%var4d(coord%xsize, coord%ysize, zsize, coord%tsize), stat=ierr)
4.489 + if (ierr /= 0) then
4.490 + print *, 'clm_read_data: Cannot allocate 4d variable'
4.491 + stop
4.492 + end if
4.493 + case default
4.494 + print *, 'clm_read_data: Cannot handle variables of ', var_data%ndims, ' dimensions'
4.495 + stop
4.496 + end select
4.497 +
4.498 + ! Allocate space for time stamps and bounds
4.499 + allocate(var_data%time(coord%tsize), stat=ierr)
4.500 + if (ierr /= 0) then
4.501 + print *, 'clm_read_data: Cannot allocate time variable'
4.502 + stop
4.503 + end if
4.504 + allocate(var_data%time_bounds(2,coord%tsize), stat=ierr)
4.505 + if (ierr /= 0) then
4.506 + print *, 'clm_read_data: Cannot allocate time bounds variable'
4.507 + stop
4.508 + end if
4.509 +
4.510 + ! Allocate temporary space for the variable level-slice/time-slice */
4.511 + allocate(vals(coord%xsize, coord%ysize), stat=ierr)
4.512 + if (ierr /= 0) then
4.513 + print *, 'clm_read_data: Cannot allocate variable time-slice'
4.514 + stop
4.515 + end if
4.516 +
4.517 + if (var_data%ndims == 2) then
4.518 + ! No time axis, so just read the first instance from the first file
4.519 + print *, 'Opening ',trim(input_path)//'/'//trim(fnames(1))
4.520 + call nc_err(nf90_open(path=trim(input_path)//'/'//trim(fnames(1)), mode=nf90_nowrite, ncid=ncid))
4.521 + call nc_err(nf90_inq_varid(ncid, trim(varname), varid))
4.522 + call nc_err(nf90_get_var(ncid, varid, vals, start = (/ 1, 1 /), count = (/ coord%xsize, coord%ysize /)))
4.523 + var_data%var2d(:,:) = vals(:,:)
4.524 + call nc_err(nf90_close(ncid))
4.525 + else
4.526 + ! Otherwise, loop over all times
4.527 + time_size = 0
4.528 + ! Loop over all files, reading data
4.529 + do i = 1, numf
4.530 + print *, 'Opening ',trim(input_path)//'/'//trim(fnames(i))
4.531 + call nc_err(nf90_open(path=trim(input_path)//'/'//trim(fnames(i)), mode=nf90_nowrite, ncid=ncid))
4.532 + call nc_err(nf90_inq_dimid(ncid, tname, tdimid))
4.533 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=tdimid, len=tlen))
4.534 + call nc_err(nf90_inq_dimid(ncid, hiname, hidimid))
4.535 + call nc_err(nf90_inquire_dimension(ncid=ncid, dimid=hidimid, len=hilen))
4.536 +
4.537 + call nc_err(nf90_inq_varid(ncid, tname, tvarid))
4.538 + call nc_err(nf90_inq_varid(ncid, tbname, tbvarid))
4.539 + call nc_err(nf90_inq_varid(ncid, trim(varname), varid))
4.540 +
4.541 + ! Allocate temporary space for the time stamps and bounds
4.542 + allocate(tvals(tlen), stat=ierr)
4.543 + if (ierr /= 0) then
4.544 + print *, 'clm_read_data: Cannot allocate temporary time variable'
4.545 + stop
4.546 + end if
4.547 + allocate(tbvals(hilen,tlen), stat=ierr)
4.548 + if (ierr /= 0) then
4.549 + print *, 'clm_read_data: Cannot allocate temporary time bounds variable'
4.550 + stop
4.551 + end if
4.552 +
4.553 + ! Get the time stamps and bounds
4.554 + call nc_err(nf90_get_var(ncid, tvarid, tvals))
4.555 + call nc_err(nf90_get_var(ncid, tbvarid, tbvals))
4.556 +
4.557 + do j = 1, tlen
4.558 + ! Get and store a slab of data
4.559 + select case (var_data%ndims)
4.560 + case (3)
4.561 + !print *, 'Reading slice of data'
4.562 + call nc_err(nf90_get_var(ncid, varid, vals, start = (/ 1, 1, j /), count = (/ coord%xsize, coord%ysize, 1 /)))
4.563 + var_data%var3d(:,:,time_size + j) = vals(:,:)
4.564 + case (4)
4.565 + do k = 1, zsize
4.566 + call nc_err(nf90_get_var(ncid, varid, vals, start = (/ 1, 1, k, j /), count = (/ coord%xsize, coord%ysize, 1, 1 /)))
4.567 + var_data%var4d(:,:,k,time_size + j) = vals(:,:)
4.568 + end do
4.569 + case default
4.570 + print *, 'clm_read_data: Cannot handle variables of ', var_data%ndims, ' dimensions'
4.571 + stop
4.572 + end select
4.573 + ! Store each time stamp and bounds, including the time offset
4.574 + var_data%time(time_size + j) = tvals(j) + tshift(i)
4.575 + var_data%time_bounds(:,time_size + j) = tbvals(:,j) + tshift(i)
4.576 +
4.577 + end do
4.578 +
4.579 + call nc_err(nf90_close(ncid))
4.580 +
4.581 + deallocate(tvals)
4.582 + deallocate(tbvals)
4.583 +
4.584 + time_size = time_size + tlen
4.585 +
4.586 + end do
4.587 + end if
4.588 +
4.589 + deallocate(vals)
4.590 +
4.591 + end subroutine clm_read_data
4.592 + !
4.593 + !--------------------------------------------------------------------------
4.594 + !
4.595 + subroutine clm_convert_data(casa_flux_bug)
4.596 +
4.597 + implicit none
4.598 + logical, intent(in) :: casa_flux_bug
4.599 + real(r8) :: sfactor
4.600 + real(r8) :: offset
4.601 + integer :: ierr
4.602 + logical, allocatable :: mask2d(:,:)
4.603 + logical, allocatable :: mask3d(:,:,:)
4.604 + logical, allocatable :: mask4d(:,:,:,:)
4.605 +
4.606 + ! Default offset is zero
4.607 + offset = 0.
4.608 +
4.609 + ! Default var_data structure values
4.610 + var_data%positive = ''
4.611 +
4.612 + ! Set scale factor according to which variable is to be converted
4.613 + select case (var_data%varname)
4.614 +
4.615 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.616 + ! Atmospheric forcing
4.617 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.618 + ! husf
4.619 + case ('QBOT')
4.620 + ! QBOT: kg kg-1 -> kg kg-1
4.621 + sfactor = 1.0
4.622 + var_data%units = 'kg kg-1'
4.623 + var_data%out_varname = 'husf'
4.624 + ! prra
4.625 + case ('RAIN')
4.626 + ! RAIN: mm s-1 -> kg m-2 s-1
4.627 + sfactor = 1.0
4.628 + var_data%units = 'kg m-2 s-1'
4.629 + var_data%out_varname = 'prra'
4.630 + ! prsn
4.631 + case ('SNOW')
4.632 + ! SNOW: mm s-1 -> kg m-2 s-1
4.633 + sfactor = 1.0
4.634 + var_data%units = 'kg m-2 s-1'
4.635 + var_data%out_varname = 'prsn'
4.636 +
4.637 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.638 + ! Biogeochemistry
4.639 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.640 + ! agbc
4.641 + ! aglbc
4.642 + ! agnpp
4.643 + case ('AGNPP')
4.644 + ! AGNPP: g m-2 s-1 -> kg m-2 s-1
4.645 + sfactor = 1.0e-3
4.646 + var_data%units = 'kg m-2 s-1'
4.647 + var_data%out_varname = 'agnpp'
4.648 + ! ar
4.649 + case ('AR')
4.650 + ! AR: g m-2 s-1 -> kg m-2 s-1
4.651 + sfactor = 1.0e-3
4.652 + var_data%units = 'kg m-2 s-1'
4.653 + var_data%out_varname = 'ar'
4.654 + ! bco
4.655 + case ('BIOGENCO')
4.656 + ! BIOGENCO: ug m-2 h-1 -> kg m-2 s-1
4.657 + sfactor = 1.0e-9 * (1.0 / 3600.)
4.658 + var_data%units = 'kg m-2 s-1'
4.659 + var_data%out_varname = 'bco'
4.660 + ! bgbc
4.661 + ! bgnpp
4.662 + case ('BGNPP')
4.663 + ! BGNPP: g m-2 s-1 -> kg m-2 s-1
4.664 + sfactor = 1.0e-3
4.665 + var_data%units = 'kg m-2 s-1'
4.666 + var_data%out_varname = 'bgnpp'
4.667 + ! bipn
4.668 + case ('ISOPRENE')
4.669 + ! ISOPRENE: ug m-2 h-1 -> kg m-2 s-1
4.670 + sfactor = 1.0e-9 * (1.0 / 3600.)
4.671 + var_data%units = 'kg m-2 s-1'
4.672 + var_data%out_varname = 'bipn'
4.673 + ! bmtpn
4.674 + case ('MONOTERP')
4.675 + ! MONOTERP: ug m-2 h-1 -> kg m-2 s-1
4.676 + sfactor = 1.0e-9 * (1.0 / 3600.)
4.677 + var_data%units = 'kg m-2 s-1'
4.678 + var_data%out_varname = 'bmtpn'
4.679 + ! borvoc
4.680 + case ('ORVOC')
4.681 + ! ORVOC: ug m-2 h-1 -> kg m-2 s-1
4.682 + sfactor = 1.0e-9 * (1.0 / 3600.)
4.683 + var_data%units = 'kg m-2 s-1'
4.684 + var_data%out_varname = 'borvoc'
4.685 + ! bovoc
4.686 + case ('OVOC')
4.687 + ! OVOC: ug m-2 h-1 -> kg m-2 s-1
4.688 + sfactor = 1.0e-9 * (1.0 / 3600.)
4.689 + var_data%units = 'kg m-2 s-1'
4.690 + var_data%out_varname = 'bovoc'
4.691 + ! cwdc
4.692 + case ('CWDC')
4.693 + ! CWDC: g m-2 -> kg m-2
4.694 + sfactor = 1.0e-3
4.695 + var_data%units = 'kg m-2'
4.696 + var_data%out_varname = 'cwdc'
4.697 + ! cwdc_hr
4.698 + case ('CWDC_HR')
4.699 + ! CWDC_HR: g m-2 s-1 -> kg m-2 s-1
4.700 + sfactor = 1.0e-3
4.701 + var_data%units = 'kg m-2 s-1'
4.702 + var_data%out_varname = 'cwdc_hr'
4.703 + ! cwdc_loss
4.704 + case ('CWDC_LOSS')
4.705 + ! CWDC_LOSS: g m-2 s-1 -> kg m-2 s-1
4.706 + sfactor = 1.0e-3
4.707 + if (casa_flux_bug) then
4.708 + print *,'WARNING: casa_flux_bug set to true; dividing data by 1200'
4.709 + sfactor = sfactor * (1. / 1200.)
4.710 + end if
4.711 + var_data%units = 'kg m-2 s-1'
4.712 + var_data%out_varname = 'cwdc_loss'
4.713 + ! froot_litterc
4.714 + ! froot_litterc_hr
4.715 + ! froot_litterc_loss
4.716 + ! frootc
4.717 + case ('FROOTC')
4.718 + ! FROOTC: g m-2 -> kg m-2
4.719 + sfactor = 1.0e-3
4.720 + var_data%units = 'kg m-2'
4.721 + var_data%out_varname = 'frootc'
4.722 + ! frootc_alloc
4.723 + case ('FROOTC_ALLOC')
4.724 + ! FROOTC_ALLOC: g m-2 s-1 -> kg m-2 s-1
4.725 + sfactor = 1.0e-3
4.726 + if (casa_flux_bug) then
4.727 + print *,'WARNING: casa_flux_bug set to true; dividing data by 1200'
4.728 + sfactor = sfactor * (1. / 1200.)
4.729 + end if
4.730 + var_data%units = 'kg m-2 s-1'
4.731 + var_data%out_varname = 'frootc_alloc'
4.732 + ! frootc_loss
4.733 + case ('FROOTC_LOSS')
4.734 + ! FROOTC_LOSS: g m-2 s-1 -> kg m-2 s-1
4.735 + sfactor = 1.0e-3
4.736 + if (casa_flux_bug) then
4.737 + print *,'WARNING: casa_flux_bug set to true; dividing data by 1200'
4.738 + sfactor = sfactor * (1. / 1200.)
4.739 + end if
4.740 + var_data%units = 'kg m-2 s-1'
4.741 + var_data%out_varname = 'frootc_loss'
4.742 + ! gpp
4.743 + case ('GPP')
4.744 + ! GPP: g m-2 s-1 -> kg m-2 s-1
4.745 + sfactor = 1.0e-3
4.746 + var_data%units = 'kg m-2 s-1'
4.747 + var_data%out_varname = 'gpp'
4.748 + ! gnmin
4.749 + case ('GROSS_NMIN')
4.750 + ! GROSS_NMIN: g m-2 s-1 -> kg m-2 s-1
4.751 + sfactor = 1.0e-3
4.752 + var_data%units = 'kg m-2 s-1'
4.753 + var_data%out_varname = 'gnmin'
4.754 + ! hr
4.755 + case ('HR')
4.756 + ! HR: g m-2 s-1 -> kg m-2 s-1
4.757 + sfactor = 1.0e-3
4.758 + var_data%units = 'kg m-2 s-1'
4.759 + var_data%out_varname = 'hr'
4.760 + ! leaf_litterc
4.761 + ! leaf_litterc_hr
4.762 + ! leaf_litterc_loss
4.763 + ! leafc
4.764 + case ('LEAFC')
4.765 + ! LEAFC: g m-2 -> kg m-2
4.766 + sfactor = 1.0e-3
4.767 + var_data%units = 'kg m-2'
4.768 + var_data%out_varname = 'leafc'
4.769 + ! leafc_alloc
4.770 + case ('LEAFC_ALLOC')
4.771 + ! LEAFC_ALLOC: g m-2 s-1 -> kg m-2 s-1
4.772 + sfactor = 1.0e-3
4.773 + if (casa_flux_bug) then
4.774 + print *,'WARNING: casa_flux_bug set to true; dividing data by 1200'
4.775 + sfactor = sfactor * (1. / 1200.)
4.776 + end if
4.777 + var_data%units = 'kg m-2 s-1'
4.778 + var_data%out_varname = 'leafc_alloc'
4.779 + ! leafc_loss
4.780 + case ('LEAFC_LOSS')
4.781 + ! LEAFC_LOSS: g m-2 s-1 -> kg m-2 s-1
4.782 + sfactor = 1.0e-3
4.783 + if (casa_flux_bug) then
4.784 + print *,'WARNING: casa_flux_bug set to true; dividing data by 1200'
4.785 + sfactor = sfactor * (1. / 1200.)
4.786 + end if
4.787 + var_data%units = 'kg m-2 s-1'
4.788 + var_data%out_varname = 'leafc_loss'
4.789 + ! litterc
4.790 + case ('LITTERC')
4.791 + ! LITTERC: g m-2 -> kg m-2
4.792 + sfactor = 1.0e-3
4.793 + var_data%units = 'kg m-2'
4.794 + var_data%out_varname = 'litterc'
4.795 + ! litterc_hr
4.796 + case ('LITTERC_HR')
4.797 + ! LITTERC_HR: g m-2 s-1 -> kg m-2 s-1
4.798 + sfactor = 1.0e-3
4.799 + var_data%units = 'kg m-2 s-1'
4.800 + var_data%out_varname = 'litterc_hr'
4.801 + ! litterc_loss
4.802 + case ('LITTERC_LOSS')
4.803 + ! LITTERC_LOSS: g m-2 s-1 -> kg m-2 s-1
4.804 + sfactor = 1.0e-3
4.805 + if (casa_flux_bug) then
4.806 + print *,'WARNING: casa_flux_bug set to true; dividing data by 1200'
4.807 + sfactor = sfactor * (1. / 1200.)
4.808 + end if
4.809 + var_data%units = 'kg m-2 s-1'
4.810 + var_data%out_varname = 'litterc_loss'
4.811 + ! nee
4.812 + case ('NEE')
4.813 + ! NEE: g m-2 s-1 -> kg m-2 s-1
4.814 + sfactor = 1.0e-3
4.815 + var_data%units = 'kg m-2 s-1'
4.816 + var_data%out_varname = 'nee'
4.817 + ! nep
4.818 + case ('NEP')
4.819 + ! NEP: g m-2 s-1 -> kg m-2 s-1
4.820 + sfactor = 1.0e-3
4.821 + var_data%units = 'kg m-2 s-1'
4.822 + var_data%out_varname = 'nep'
4.823 + ! nnmin
4.824 + case ('NET_NMIN')
4.825 + ! NEP: g m-2 s-1 -> kg m-2 s-1
4.826 + sfactor = 1.0e-3
4.827 + var_data%units = 'kg m-2 s-1'
4.828 + var_data%out_varname = 'nnmin'
4.829 + ! npp
4.830 + case ('NPP')
4.831 + ! NPP: g m-2 s-1 -> kg m-2 s-1
4.832 + sfactor = 1.0e-3
4.833 + var_data%units = 'kg m-2 s-1'
4.834 + var_data%out_varname = 'npp'
4.835 + ! soilc
4.836 + case ('SOILC')
4.837 + ! SOILC: g m-2 -> kg m-2
4.838 + sfactor = 1.0e-3
4.839 + var_data%units = 'kg m-2'
4.840 + var_data%out_varname = 'soilc'
4.841 + ! soilc_hr
4.842 + case ('SOILC_HR')
4.843 + ! SOILC_HR: g m-2 s-1 -> kg m-2 s-1
4.844 + sfactor = 1.0e-3
4.845 + var_data%units = 'kg m-2 s-1'
4.846 + var_data%out_varname = 'soilc_hr'
4.847 + ! soilc_loss
4.848 + case ('SOILC_LOSS')
4.849 + ! SOILC_LOSS: g m-2 s-1 -> kg m-2 s-1
4.850 + sfactor = 1.0e-3
4.851 + if (casa_flux_bug) then
4.852 + print *,'WARNING: casa_flux_bug set to true; dividing data by 1200'
4.853 + sfactor = sfactor * (1. / 1200.)
4.854 + end if
4.855 + var_data%units = 'kg m-2 s-1'
4.856 + var_data%out_varname = 'soilc_loss'
4.857 + ! tbvoc
4.858 + case ('VOCFLXT')
4.859 + ! VOCFLXT: ug m-2 h-1 -> kg m-2 s-1
4.860 + sfactor = 1.0e-9 * (1.0 / 3600.)
4.861 + var_data%units = 'kg m-2 s-1'
4.862 + var_data%out_varname = 'tbvoc'
4.863 + ! woodc
4.864 + case ('WOODC')
4.865 + ! WOODC: g m-2 -> kg m-2
4.866 + sfactor = 1.0e-3
4.867 + var_data%units = 'kg m-2'
4.868 + var_data%out_varname = 'woodc'
4.869 + ! woodc_alloc
4.870 + case ('WOODC_ALLOC')
4.871 + ! WOODC_ALLOC: g m-2 s-1 -> kg m-2 s-1
4.872 + sfactor = 1.0e-3
4.873 + if (casa_flux_bug) then
4.874 + print *,'WARNING: casa_flux_bug set to true; dividing data by 1200'
4.875 + sfactor = sfactor * (1. / 1200.)
4.876 + end if
4.877 + var_data%units = 'kg m-2 s-1'
4.878 + var_data%out_varname = 'woodc_alloc'
4.879 + ! woodc_loss
4.880 + case ('WOODC_LOSS')
4.881 + ! WOODC_LOSS: g m-2 s-1 -> kg m-2 s-1
4.882 + sfactor = 1.0e-3
4.883 + if (casa_flux_bug) then
4.884 + print *,'WARNING: casa_flux_bug set to true; dividing data by 1200'
4.885 + sfactor = sfactor * (1. / 1200.)
4.886 + end if
4.887 + var_data%units = 'kg m-2 s-1'
4.888 + var_data%out_varname = 'woodc_loss'
4.889 +
4.890 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.891 + ! Energy
4.892 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.893 + ! hfg
4.894 + case ('FGR')
4.895 + ! FGR: W m-2 -> W m-2
4.896 + sfactor = 1.0
4.897 + var_data%units = 'W m-2'
4.898 + var_data%positive = 'down'
4.899 + var_data%out_varname = 'hfg'
4.900 + ! hfls
4.901 + case ('LATENT')
4.902 + ! LATENT: W m-2 -> W m-2
4.903 + sfactor = 1.0
4.904 + var_data%units = 'W m-2'
4.905 + var_data%positive = 'up'
4.906 + var_data%out_varname = 'hfls'
4.907 + ! hfss
4.908 + case ('FSH')
4.909 + ! FSH: W m-2 -> W m-2
4.910 + sfactor = 1.0
4.911 + var_data%units = 'W m-2'
4.912 + var_data%positive = 'up'
4.913 + var_data%out_varname = 'hfss'
4.914 + ! hfssg
4.915 + case ('FSH_G')
4.916 + ! FSH_G: W m-2 -> W m-2
4.917 + sfactor = 1.0
4.918 + var_data%units = 'W m-2'
4.919 + var_data%positive = 'up'
4.920 + var_data%out_varname = 'hfssg'
4.921 + ! hfssv
4.922 + case ('FSH_V')
4.923 + ! FSH_V: W m-2 -> W m-2
4.924 + sfactor = 1.0
4.925 + var_data%units = 'W m-2'
4.926 + var_data%positive = 'up'
4.927 + var_data%out_varname = 'hfssv'
4.928 +
4.929 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.930 + ! Grid
4.931 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.932 + ! gca
4.933 + case ('area')
4.934 + ! area: km2 -> m2
4.935 + sfactor = 1.0e+3
4.936 + var_data%units = 'm2'
4.937 + var_data%out_varname = 'gca'
4.938 + ! lbm
4.939 + case ('landmask')
4.940 + ! landmask: 1 -> 1
4.941 + var_data%units = '1'
4.942 + var_data%out_varname = 'lbm'
4.943 + ! Do not convert integer landmask, just return
4.944 + return
4.945 + ! lcf
4.946 + ! lcn
4.947 + ! orog
4.948 + case ('topo')
4.949 + ! topo: m -> m
4.950 + sfactor = 1.0
4.951 + var_data%units = 'm'
4.952 + var_data%out_varname = 'orog'
4.953 + ! sftlf
4.954 + case ('landfrac')
4.955 + ! landfrac: 1 -> 1
4.956 + sfactor = 1.0
4.957 + var_data%units = '1'
4.958 + var_data%out_varname = 'sftlf'
4.959 +
4.960 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.961 + ! Humidity
4.962 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.963 + ! hur2m
4.964 + case ('RH2M')
4.965 + ! RH2M: % -> %
4.966 + sfactor = 1.0
4.967 + var_data%units = '%'
4.968 + var_data%out_varname = 'hur2m'
4.969 + ! hus2m
4.970 + case ('Q2M')
4.971 + ! Q2M: kg kg-1 -> kg kg-1
4.972 + sfactor = 1.0
4.973 + var_data%units = 'kg kg-1'
4.974 + var_data%out_varname = 'hus2m'
4.975 +
4.976 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.977 + ! Hydrology
4.978 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.979 + ! btran
4.980 + case ('BTRAN')
4.981 + ! BTRAN: 1 -> 1
4.982 + sfactor = 1.0
4.983 + var_data%units = '1'
4.984 + var_data%out_varname = 'btran'
4.985 + ! et
4.986 + case ('ET')
4.987 + ! ET: m s-1 -> kg m-2 s-1
4.988 + sfactor = 1.0e+3
4.989 + var_data%units = 'kg m-2 s-1'
4.990 + var_data%out_varname = 'et'
4.991 + ! evspsblsoi
4.992 + case ('QSOIL')
4.993 + ! QSOIL: mm s-1 -> kg m-2 s-1
4.994 + sfactor = 1.0
4.995 + var_data%units = 'kg m-2 s-1'
4.996 + var_data%out_varname = 'evspsblsoi'
4.997 + ! evspsblveg
4.998 + case ('QVEGE')
4.999 + ! QVEGE: mm s-1 -> kg m-2 s-1
4.1000 + sfactor = 1.0
4.1001 + var_data%units = 'kg m-2 s-1'
4.1002 + var_data%out_varname = 'evspsblveg'
4.1003 + ! mrfsl (multi-level)
4.1004 + case ('SOILICE')
4.1005 + ! SOILICE: kg m-2 -> kg m-2
4.1006 + sfactor = 1.0
4.1007 + var_data%units = 'kg m-2'
4.1008 + var_data%out_varname = 'mrfsl'
4.1009 + ! mrfso
4.1010 + case ('TOTAL_SOILICE')
4.1011 + ! TOTAL_SOILICE: kg m-2 -> kg m-2
4.1012 + sfactor = 1.0
4.1013 + var_data%units = 'kg m-2'
4.1014 + var_data%out_varname = 'mrfso'
4.1015 + ! mrlsl (multi-level)
4.1016 + case ('SOILLIQ')
4.1017 + ! SOILLIQ: kg m-2 -> kg m-2
4.1018 + sfactor = 1.0
4.1019 + var_data%units = 'kg m-2'
4.1020 + var_data%out_varname = 'mrlsl'
4.1021 + ! mrlso
4.1022 + case ('TOTAL_SOILLIQ')
4.1023 + ! TOTAL_SOILLIQ: kg m-2 -> kg m-2
4.1024 + sfactor = 1.0
4.1025 + var_data%units = 'kg m-2'
4.1026 + var_data%out_varname = 'mrlso'
4.1027 + ! mrros
4.1028 + case ('QOVER')
4.1029 + ! QOVER: mm s-1 -> kg m-2 s-1
4.1030 + sfactor = 1.0
4.1031 + var_data%units = 'kg m-2 s-1'
4.1032 + var_data%out_varname = 'mrros'
4.1033 + ! mrross
4.1034 + case ('QDRAI')
4.1035 + ! QDRAI: mm s-1 -> kg m-2 s-1
4.1036 + sfactor = 1.0
4.1037 + var_data%units = 'kg m-2 s-1'
4.1038 + var_data%out_varname = 'mrross'
4.1039 + ! prveg
4.1040 + case ('QINTR')
4.1041 + ! QINTR: mm s-1 -> kg m-2 s-1
4.1042 + sfactor = 1.0
4.1043 + var_data%units = 'kg m-2 s-1'
4.1044 + var_data%out_varname = 'prveg'
4.1045 + ! snd
4.1046 + case ('H2OSNO')
4.1047 + ! H2OSNO: mm -> m
4.1048 + sfactor = 1.0e-3
4.1049 + var_data%units = 'm'
4.1050 + var_data%out_varname = 'snd'
4.1051 + ! tran
4.1052 + case ('QVEGT')
4.1053 + ! QVEGT: mm s-1 -> kg m-2 s-1
4.1054 + sfactor = 1.0
4.1055 + var_data%units = 'kg m-2 s-1'
4.1056 + var_data%out_varname = 'tran'
4.1057 + ! vfwsl (multi-level)
4.1058 + case ('H2OSOI')
4.1059 + ! H2OSOI: mm3 mm-3 -> m3 m-3
4.1060 + sfactor = 1.0
4.1061 + var_data%units = 'm3 m-3'
4.1062 + var_data%out_varname = 'vfwsl'
4.1063 + ! wpsl (multi-level)
4.1064 + case ('SOILPSI')
4.1065 + ! SOILPSI: Pa -> Pa
4.1066 + sfactor = 1.0
4.1067 + var_data%units = 'Pa'
4.1068 + var_data%out_varname = 'wpsl'
4.1069 +
4.1070 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.1071 + ! Radiation
4.1072 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.1073 + ! alsas
4.1074 + case ('ALL_SKY_ALBEDO')
4.1075 + ! ALL_SKY_ALBEDO: 1 -> 1
4.1076 + sfactor = 1.0
4.1077 + var_data%units = '1'
4.1078 + var_data%out_varname = 'alsas'
4.1079 + ! alsbs
4.1080 + case ('BLACK_SKY_ALBEDO')
4.1081 + ! BLACK_SKY_ALBEDO: 1 -> 1
4.1082 + sfactor = 1.0
4.1083 + var_data%units = '1'
4.1084 + var_data%out_varname = 'alsbs'
4.1085 + ! laisha
4.1086 + case ('LAISHA')
4.1087 + ! LAISHA: m2 m-2 -> m2 m-2
4.1088 + sfactor = 1.0
4.1089 + var_data%units = 'm2 m-2'
4.1090 + var_data%out_varname = 'laisha'
4.1091 + ! laisun
4.1092 + case ('LAISUN')
4.1093 + ! LAISUN: m2 m-2 -> m2 m-2
4.1094 + sfactor = 1.0
4.1095 + var_data%units = 'm2 m-2'
4.1096 + var_data%out_varname = 'laisun'
4.1097 + ! rlds
4.1098 + case ('FLDS')
4.1099 + ! FLDS: W m-2 -> W m-2
4.1100 + sfactor = 1.0
4.1101 + var_data%units = 'W m-2'
4.1102 + var_data%positive = 'down'
4.1103 + var_data%out_varname = 'rlds'
4.1104 + ! rls
4.1105 + case ('FIRA')
4.1106 + ! FIRA: W m-2 -> W m-2
4.1107 + sfactor = 1.0
4.1108 + var_data%units = 'W m-2'
4.1109 + var_data%positive = 'down'
4.1110 + var_data%out_varname = 'rls'
4.1111 + ! rlus
4.1112 + case ('FIRE')
4.1113 + ! FIRE: W m-2 -> W m-2
4.1114 + sfactor = 1.0
4.1115 + var_data%units = 'W m-2'
4.1116 + var_data%positive = 'up'
4.1117 + var_data%out_varname = 'rlus'
4.1118 + ! rs
4.1119 + case ('NETRAD')
4.1120 + ! NETRAD: W m-2 -> W m-2
4.1121 + sfactor = 1.0
4.1122 + var_data%units = 'W m-2'
4.1123 + var_data%positive = 'down'
4.1124 + var_data%out_varname = 'rs'
4.1125 + ! rsas
4.1126 + case ('FSA')
4.1127 + ! FSA: W m-2 -> W m-2
4.1128 + sfactor = 1.0
4.1129 + var_data%units = 'W m-2'
4.1130 + var_data%positive = 'down'
4.1131 + var_data%out_varname = 'rsas'
4.1132 + ! rsasg
4.1133 + case ('SABG')
4.1134 + ! SABG: W m-2 -> W m-2
4.1135 + sfactor = 1.0
4.1136 + var_data%units = 'W m-2'
4.1137 + var_data%positive = 'down'
4.1138 + var_data%out_varname = 'rsasg'
4.1139 + ! rsasv
4.1140 + case ('SABV')
4.1141 + ! SABV: W m-2 -> W m-2
4.1142 + sfactor = 1.0
4.1143 + var_data%units = 'W m-2'
4.1144 + var_data%positive = 'down'
4.1145 + var_data%out_varname = 'rsasv'
4.1146 + ! rsds
4.1147 + case ('FSDS')
4.1148 + ! FSDS: W m-2 -> W m-2
4.1149 + sfactor = 1.0
4.1150 + var_data%units = 'W m-2'
4.1151 + var_data%positive = 'down'
4.1152 + var_data%out_varname = 'rsds'
4.1153 + ! rsus
4.1154 + case ('FSR')
4.1155 + ! FSR: W m-2 -> W m-2
4.1156 + sfactor = 1.0
4.1157 + var_data%units = 'W m-2'
4.1158 + var_data%positive = 'up'
4.1159 + var_data%out_varname = 'rsus'
4.1160 + ! snc
4.1161 + case ('FSNO')
4.1162 + ! FSNO: 1 -> 1
4.1163 + sfactor = 1.0
4.1164 + var_data%units = '1'
4.1165 + var_data%out_varname = 'snc'
4.1166 +
4.1167 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.1168 + ! Temperature
4.1169 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.1170 + ! degday
4.1171 + case ('DEGDAY')
4.1172 + ! DEGDAY: C -> K
4.1173 + sfactor = 1.0
4.1174 + offset = 273.15
4.1175 + var_data%units = 'K'
4.1176 + var_data%out_varname = 'degday'
4.1177 + ! ta2m
4.1178 + case ('TSA')
4.1179 + ! TSA: K -> K
4.1180 + sfactor = 1.0
4.1181 + var_data%units = 'K'
4.1182 + var_data%out_varname = 'ta2m'
4.1183 + ! ta2mdmax
4.1184 + case ('TREFMXAV')
4.1185 + ! TREFMXAV: K -> K
4.1186 + sfactor = 1.0
4.1187 + var_data%units = 'K'
4.1188 + var_data%out_varname = 'ta2mdmax'
4.1189 + ! ta2mdmin
4.1190 + case ('TREFMNAV')
4.1191 + ! TREFMNAV: K -> K
4.1192 + sfactor = 1.0
4.1193 + var_data%units = 'K'
4.1194 + var_data%out_varname = 'ta2mdmin'
4.1195 + ! tsl (multi-level)
4.1196 + case ('TSOI')
4.1197 + ! TSOI: K -> K
4.1198 + sfactor = 1.0
4.1199 + var_data%units = 'K'
4.1200 + var_data%out_varname = 'tsl'
4.1201 + ! tv
4.1202 + case ('TV')
4.1203 + ! TV: K -> K
4.1204 + sfactor = 1.0
4.1205 + var_data%units = 'K'
4.1206 + var_data%out_varname = 'tv'
4.1207 +
4.1208 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.1209 + ! Vegetation phenology
4.1210 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.1211 + ! laiexp
4.1212 + case ('ELAI')
4.1213 + ! ELAI: m2 m-2 -> m2 m-2
4.1214 + sfactor = 1.0
4.1215 + var_data%units = 'm2 m-2'
4.1216 + var_data%out_varname = 'laiexp'
4.1217 + ! laitot
4.1218 + case ('TLAI')
4.1219 + ! TLAI: m2 m-2 -> m2 m-2
4.1220 + sfactor = 1.0
4.1221 + var_data%units = 'm2 m-2'
4.1222 + var_data%out_varname = 'laitot'
4.1223 + ! saiexp
4.1224 + case ('ESAI')
4.1225 + ! ESAI: m2 m-2 -> m2 m-2
4.1226 + sfactor = 1.0
4.1227 + var_data%units = 'm2 m-2'
4.1228 + var_data%out_varname = 'saiexp'
4.1229 + ! saitot
4.1230 + case ('TSAI')
4.1231 + ! TSAI: m2 m-2 -> m2 m-2
4.1232 + sfactor = 1.0
4.1233 + var_data%units = 'm2 m-2'
4.1234 + var_data%out_varname = 'saitot'
4.1235 +
4.1236 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.1237 + ! Vegetation physiology
4.1238 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4.1239 + ! psn
4.1240 + case ('FPSN')
4.1241 + ! FPSN: umol m-2 s-1 -> kg m-2 s-1
4.1242 + sfactor = 12.0 * 1.0e-6 * 1.0e-3
4.1243 + var_data%units = 'kg m-2 s-1'
4.1244 + var_data%out_varname = 'psn'
4.1245 + ! rssha
4.1246 + case ('RSSHA')
4.1247 + ! RSSHA: s m-1 -> s m-1
4.1248 + sfactor = 1.0
4.1249 + var_data%units = 's m-1'
4.1250 + var_data%out_varname = 'rssha'
4.1251 + ! rssun
4.1252 + case ('RSSUN')
4.1253 + ! RSSUN: s m-1 -> s m-1
4.1254 + sfactor = 1.0
4.1255 + var_data%units = 's m-1'
4.1256 + var_data%out_varname = 'rssun'
4.1257 +
4.1258 + case default
4.1259 + print *, 'clm_convert_data: Unknown variable name ', var_data%varname
4.1260 + stop
4.1261 + end select
4.1262 +
4.1263 + ! Convert to the desired units using the offset and scale factor (sfactor)
4.1264 + select case (var_data%ndims)
4.1265 + case (2)
4.1266 + allocate(mask2d(coord%xsize, coord%ysize), stat=ierr)
4.1267 + if (ierr /= 0) then
4.1268 + print *, 'clm_convert_data: Cannot allocate 2d mask'
4.1269 + stop
4.1270 + end if
4.1271 + mask2d = .false.
4.1272 + if (var_data%int_type) then
4.1273 + where (var_data%int2d /= var_data%missing_value)
4.1274 + var_data%int2d = int(var_data%int2d * sfactor + offset)
4.1275 + mask2d = .true.
4.1276 + end where
4.1277 + print *, var_data%out_varname, &
4.1278 + ' min:', minval(var_data%int2d, mask=mask2d), &
4.1279 + ' max:', maxval(var_data%int2d, mask=mask2d)
4.1280 + else
4.1281 + where (var_data%var2d /= var_data%missing_value)
4.1282 + var_data%var2d = var_data%var2d * sfactor + offset
4.1283 + mask2d = .true.
4.1284 + end where
4.1285 + print *, var_data%out_varname, &
4.1286 + ' min:', minval(var_data%var2d, mask=mask2d), &
4.1287 + ' max:', maxval(var_data%var2d, mask=mask2d)
4.1288 + end if
4.1289 + if (allocated(mask2d)) deallocate(mask2d)
4.1290 + case (3)
4.1291 + allocate(mask3d(coord%xsize, coord%ysize, coord%tsize), stat=ierr)
4.1292 + if (ierr /= 0) then
4.1293 + print *, 'clm_convert_data: Cannot allocate 3d mask'
4.1294 + stop
4.1295 + end if
4.1296 + mask3d = .false.
4.1297 + where (var_data%var3d /= var_data%missing_value)
4.1298 + var_data%var3d = (var_data%var3d + offset) * sfactor
4.1299 + mask3d = .true.
4.1300 + end where
4.1301 + print *, var_data%out_varname, &
4.1302 + ' min:', minval(var_data%var3d, mask=mask3d), &
4.1303 + ' max:', maxval(var_data%var3d, mask=mask3d)
4.1304 + if (allocated(mask3d)) deallocate(mask3d)
4.1305 + case (4)
4.1306 + if (var_data%soil_layer_flag) then
4.1307 + allocate(mask4d(coord%xsize, coord%ysize, coord%zsoi_size, coord%tsize), stat=ierr)
4.1308 + if (ierr /= 0) then
4.1309 + print *, 'clm_convert_data: Cannot allocate 4d mask'
4.1310 + stop
4.1311 + end if
4.1312 + mask4d = .false.
4.1313 + where (var_data%var4d /= var_data%missing_value)
4.1314 + var_data%var4d = (var_data%var4d + offset) * sfactor
4.1315 + mask4d = .true.
4.1316 + end where
4.1317 + print *, var_data%out_varname, &
4.1318 + ' min:', minval(var_data%var4d, mask=mask4d), &
4.1319 + ' max:', maxval(var_data%var4d, mask=mask4d)
4.1320 + if (allocated(mask4d)) deallocate(mask4d)
4.1321 + else
4.1322 + print *,'clm_convert_data: Unknown data dimension'
4.1323 + stop
4.1324 + end if
4.1325 + case default
4.1326 + print *,'clm_convert_data: Dimension count not supported'
4.1327 + stop
4.1328 + end select
4.1329 +
4.1330 + end subroutine clm_convert_data
4.1331 + !
4.1332 + !--------------------------------------------------------------------------
4.1333 + !
4.1334 + subroutine clm_free_data
4.1335 +
4.1336 + implicit none
4.1337 +
4.1338 + var_data%varname = ''
4.1339 + var_data%ndims = 0
4.1340 + if (allocated(var_data%int2d)) deallocate(var_data%int2d)
4.1341 + if (allocated(var_data%var2d)) deallocate(var_data%var2d)
4.1342 + if (allocated(var_data%var3d)) deallocate(var_data%var3d)
4.1343 + if (allocated(var_data%var4d)) deallocate(var_data%var4d)
4.1344 + if (allocated(var_data%time)) deallocate(var_data%time)
4.1345 + if (allocated(var_data%time_bounds)) deallocate(var_data%time_bounds)
4.1346 + var_data%int_type = .false.
4.1347 + var_data%soil_layer_flag = .false.
4.1348 + var_data%hour_flag = .false.
4.1349 + var_data%long_name = ''
4.1350 + var_data%missing_value = 0.
4.1351 + var_data%units = ''
4.1352 + var_data%positive = ''
4.1353 + var_data%out_varname = ''
4.1354 +
4.1355 + end subroutine clm_free_data
4.1356 + !
4.1357 + !--------------------------------------------------------------------------
4.1358 + !
4.1359 + subroutine nc_err(status)
4.1360 +
4.1361 + implicit none
4.1362 + integer :: status ! status code
4.1363 +
4.1364 + if (status /= nf90_noerr) then
4.1365 + print *, nf90_strerror(status)
4.1366 + stop 'Program stopped after encountering netCDF error.'
4.1367 + end if
4.1368 +
4.1369 + end subroutine nc_err
4.1370 + !
4.1371 + !--------------------------------------------------------------------------
4.1372 + !
4.1373 +
4.1374 +end module clm_mod
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/do_c-lamp_rewrite.bash Sun Sep 21 21:59:01 2008 -0400
5.3 @@ -0,0 +1,25 @@
5.4 +#!/bin/bash
5.5 +#
5.6 +# Rewrites C-LAMP Experiment 1 model output for distribution on the Earth
5.7 +# System Grid (ESG).
5.8 +#
5.9 +ESGROOT=/u3/forrest/ESG/c-lamp
5.10 +#
5.11 +echo "`date` -- Rewriting C-LAMP model output for distribution on ESG"
5.12 +for model in clm3_casa clm3_cn; do
5.13 + for exp in exp1_2 exp1_3 exp1_4 exp1_6 exp1_7; do
5.14 + for run in run1; do
5.15 + for stat in monthly_mean; do
5.16 + rm -rf ${ESGROOT}/${model}/${exp}/${run}/${stat}
5.17 + mkdir -p ${ESGROOT}/${model}/${exp}/${run}/${stat}
5.18 + chmod 755 ${ESGROOT}/${model}/${exp}/${run}/${stat}
5.19 + cp -p namelist.${model}.${exp}.${run}.${stat} namelist
5.20 + echo "`date` -- Rewriting output for ${model}.${exp}.${run}.${stat}"
5.21 + time ./c-lamp_rewrite >& c-lamp_rewrite.${model}.${exp}.${run}.${stat}.log
5.22 + echo "`date` -- Computing SHA1 checksums for ${model}.${exp}.${run}.${stat}"
5.23 + (cd ${ESGROOT}/${model}/${exp}/${run}/${stat} ; time sha1sum *.nc > SHA1SUM; chmod 644 *)
5.24 + done
5.25 + done
5.26 + done
5.27 +done
5.28 +echo "`date` -- Done"
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/kind_mod.f90 Sun Sep 21 21:59:01 2008 -0400
6.3 @@ -0,0 +1,13 @@
6.4 + module kind_mod
6.5 +
6.6 + implicit none
6.7 + integer, parameter :: r8 = selected_real_kind(12) ! 8 byte real
6.8 + integer, parameter :: r4 = selected_real_kind( 6) ! 4 byte real
6.9 + integer, parameter :: nr = kind(1.0) ! native real
6.10 + integer, parameter :: i8 = selected_int_kind(13) ! 8 byte integer
6.11 + integer, parameter :: i4 = selected_int_kind( 6) ! 4 byte integer
6.12 + integer, parameter :: ni = kind(1) ! native integer
6.13 +
6.14 + save
6.15 +
6.16 + end module kind_mod
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
7.2 +++ b/namelist.clm3_casa.exp1_2.run1.monthly_mean Sun Sep 21 21:59:01 2008 -0400
7.3 @@ -0,0 +1,12 @@
7.4 + &inparm
7.5 + output_path = '/u3/forrest/ESG/c-lamp/clm3_casa/exp1_2/run1/monthly_mean/'
7.6 + input_table = 'C-LAMP_L1_table'
7.7 + source = "Community Climate System Model: CCSM3.1 (ccsm3_1_beta40); Community Land Model: CLM3 (bgcmip05_clm3_expa_72); CASA' biogeochemistry"
7.8 + experiment = 'Experiment 1.2 (Control)'
7.9 + realization = 1
7.10 + input_path = '/u3/forrest/C-LAMP/Exp1.2/clm3-casa'
7.11 + fnames = 'i01.06casa.clm2.h0.1798-1799.nc','i01.06casa.clm2.h0.1800-1809.nc','i01.06casa.clm2.h0.1810-1819.nc','i01.06casa.clm2.h0.1820-1829.nc','i01.06casa.clm2.h0.1830-1839.nc','i01.06casa.clm2.h0.1840-1849.nc','i01.06casa.clm2.h0.1850-1859.nc','i01.06casa.clm2.h0.1860-1869.nc','i01.06casa.clm2.h0.1870-1879.nc','i01.06casa.clm2.h0.1880-1889.nc','i01.06casa.clm2.h0.1890-1899.nc','i01.06casa.clm2.h0.1900-1909.nc','i01.06casa.clm2.h0.1910-1919.nc','i01.06casa.clm2.h0.1920-1929.nc','i01.06casa.clm2.h0.1930-1939.nc','i01.06casa.clm2.h0.1940-1949.nc','i01.06casa.clm2.h0.1950-1959.nc','i01.06casa.clm2.h0.1960-1969.nc','i01.06casa.clm2.h0.1970-1979.nc','i01.06casa.clm2.h0.1980-1989.nc','i01.06casa.clm2.h0.1990-1999.nc','i01.06casa.clm2.h0.2000-2004.nc'
7.12 + tshift = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
7.13 + vnames = 'area','landmask','topo','landfrac','QBOT','RAIN','SNOW','AGNPP','AR','BIOGENCO','BGNPP','ISOPRENE','MONOTERP','ORVOC','OVOC','CWDC','CWDC_HR','CWDC_LOSS','FROOTC','FROOTC_ALLOC','FROOTC_LOSS','GPP','HR','LEAFC_ALLOC','LEAFC_LOSS','LITTERC','LITTERC_HR','LITTERC_LOSS','NEE','NEP','NPP','SOILC','SOILC_HR','SOILC_LOSS','VOCFLXT','WOODC','WOODC_ALLOC','WOODC_LOSS','FGR','LATENT','FSH','FSH_G','FSH_V','RH2M','Q2M','BTRAN','ET','QSOIL','QVEGE','SOILICE','TOTAL_SOILICE','SOILLIQ','TOTAL_SOILLIQ','QOVER','QDRAI','QINTR','H2OSNO','QVEGT','H2OSOI','SOILPSI','ALL_SKY_ALBEDO','BLACK_SKY_ALBEDO','LAISHA','LAISUN','FLDS','FIRA','FIRE','NETRAD','FSA','SABG','SABV','FSDS','FSR','FSNO','DEGDAY','TSA','TREFMXAV','TREFMNAV','TSOI','TV','ELAI','TLAI','ESAI','TSAI','FPSN','RSSHA','RSSUN'
7.14 + casa_flux_bug = .true.
7.15 + /
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
8.2 +++ b/namelist.clm3_casa.exp1_3.run1.monthly_mean Sun Sep 21 21:59:01 2008 -0400
8.3 @@ -0,0 +1,12 @@
8.4 + &inparm
8.5 + output_path = '/u3/forrest/ESG/c-lamp/clm3_casa/exp1_3/run1/monthly_mean/'
8.6 + input_table = 'C-LAMP_L1_table'
8.7 + source = "Community Climate System Model: CCSM3.1 (ccsm3_1_beta40); Community Land Model: CLM3 (bgcmip05_clm3_expa_72); CASA' biogeochemistry"
8.8 + experiment = 'Experiment 1.3 (Varying Climate)'
8.9 + realization = 1
8.10 + input_path = '/u3/forrest/C-LAMP/Exp1.3/clm3-casa'
8.11 + fnames = 'i01.07casa.clm2.h0.1948-1949.nc','i01.07casa.clm2.h0.1950-1959.nc','i01.07casa.clm2.h0.1960-1969.nc','i01.07casa.clm2.h0.1970-1979.nc','i01.07casa.clm2.h0.1980-1989.nc','i01.07casa.clm2.h0.1990-1999.nc','i01.07casa.clm2.h0.2000-2004.nc'
8.12 + tshift = 54750,54750,54750,54750,54750,54750,54750
8.13 + vnames = 'area','landmask','topo','landfrac','QBOT','RAIN','SNOW','AGNPP','AR','BIOGENCO','BGNPP','ISOPRENE','MONOTERP','ORVOC','OVOC','CWDC','CWDC_HR','CWDC_LOSS','FROOTC','FROOTC_ALLOC','FROOTC_LOSS','GPP','HR','LEAFC_ALLOC','LEAFC_LOSS','LITTERC','LITTERC_HR','LITTERC_LOSS','NEE','NEP','NPP','SOILC','SOILC_HR','SOILC_LOSS','VOCFLXT','WOODC','WOODC_ALLOC','WOODC_LOSS','FGR','LATENT','FSH','FSH_G','FSH_V','RH2M','Q2M','BTRAN','ET','QSOIL','QVEGE','SOILICE','TOTAL_SOILICE','SOILLIQ','TOTAL_SOILLIQ','QOVER','QDRAI','QINTR','H2OSNO','QVEGT','H2OSOI','SOILPSI','ALL_SKY_ALBEDO','BLACK_SKY_ALBEDO','LAISHA','LAISUN','FLDS','FIRA','FIRE','NETRAD','FSA','SABG','SABV','FSDS','FSR','FSNO','DEGDAY','TSA','TREFMXAV','TREFMNAV','TSOI','TV','ELAI','TLAI','ESAI','TSAI','FPSN','RSSHA','RSSUN'
8.14 + casa_flux_bug = .true.
8.15 + /
9.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
9.2 +++ b/namelist.clm3_casa.exp1_4.run1.monthly_mean Sun Sep 21 21:59:01 2008 -0400
9.3 @@ -0,0 +1,12 @@
9.4 + &inparm
9.5 + output_path = '/u3/forrest/ESG/c-lamp/clm3_casa/exp1_4/run1/monthly_mean/'
9.6 + input_table = 'C-LAMP_L1_table'
9.7 + source = "Community Climate System Model: CCSM3.1 (ccsm3_1_beta40); Community Land Model: CLM3 (bgcmip05_clm3_expa_72); CASA' biogeochemistry"
9.8 + experiment = 'Experiment 1.4 (Varying Climate, CO2, and N Deposition)'
9.9 + realization = 1
9.10 + input_path = '/u3/forrest/C-LAMP/Exp1.4/clm3-casa'
9.11 + fnames = 'i01.08casa.clm2.h0.1798-1799.nc','i01.08casa.clm2.h0.1800-1809.nc','i01.08casa.clm2.h0.1810-1819.nc','i01.08casa.clm2.h0.1820-1829.nc','i01.08casa.clm2.h0.1830-1839.nc','i01.08casa.clm2.h0.1840-1849.nc','i01.08casa.clm2.h0.1850-1859.nc','i01.08casa.clm2.h0.1860-1869.nc','i01.08casa.clm2.h0.1870-1879.nc','i01.08casa.clm2.h0.1880-1889.nc','i01.08casa.clm2.h0.1890-1899.nc','i01.08casa.clm2.h0.1900-1909.nc','i01.08casa.clm2.h0.1910-1919.nc','i01.08casa.clm2.h0.1920-1929.nc','i01.08casa.clm2.h0.1930-1939.nc','i01.08casa.clm2.h0.1940-1947.nc','i01.10casa.clm2.h0.1948-1949.nc','i01.10casa.clm2.h0.1950-1959.nc','i01.10casa.clm2.h0.1960-1969.nc','i01.10casa.clm2.h0.1970-1979.nc','i01.10casa.clm2.h0.1980-1989.nc','i01.10casa.clm2.h0.1990-1999.nc','i01.10casa.clm2.h0.2000-2004.nc'
9.12 + tshift = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54750,54750,54750,54750,54750,54750,54750
9.13 + vnames = 'area','landmask','topo','landfrac','QBOT','RAIN','SNOW','AGNPP','AR','BIOGENCO','BGNPP','ISOPRENE','MONOTERP','ORVOC','OVOC','CWDC','CWDC_HR','CWDC_LOSS','FROOTC','FROOTC_ALLOC','FROOTC_LOSS','GPP','HR','LEAFC_ALLOC','LEAFC_LOSS','LITTERC','LITTERC_HR','LITTERC_LOSS','NEE','NEP','NPP','SOILC','SOILC_HR','SOILC_LOSS','VOCFLXT','WOODC','WOODC_ALLOC','WOODC_LOSS','FGR','LATENT','FSH','FSH_G','FSH_V','RH2M','Q2M','BTRAN','ET','QSOIL','QVEGE','SOILICE','TOTAL_SOILICE','SOILLIQ','TOTAL_SOILLIQ','QOVER','QDRAI','QINTR','H2OSNO','QVEGT','H2OSOI','SOILPSI','ALL_SKY_ALBEDO','BLACK_SKY_ALBEDO','LAISHA','LAISUN','FLDS','FIRA','FIRE','NETRAD','FSA','SABG','SABV','FSDS','FSR','FSNO','DEGDAY','TSA','TREFMXAV','TREFMNAV','TSOI','TV','ELAI','TLAI','ESAI','TSAI','FPSN','RSSHA','RSSUN'
9.14 + casa_flux_bug = .true.
9.15 + /
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
10.2 +++ b/namelist.clm3_casa.exp1_6.run1.monthly_mean Sun Sep 21 21:59:01 2008 -0400
10.3 @@ -0,0 +1,12 @@
10.4 + &inparm
10.5 + output_path = '/u3/forrest/ESG/c-lamp/clm3_casa/exp1_6/run1/monthly_mean/'
10.6 + input_table = 'C-LAMP_L1_table'
10.7 + source = "Community Climate System Model: CCSM3.1 (ccsm3_1_beta40); Community Land Model: CLM3 (bgcmip08_clm3_expa_72); CASA' biogeochemistry"
10.8 + experiment = 'Experiment 1.6 (FACE Control varying Climate, CO2, and N Deposition)'
10.9 + realization = 1
10.10 + input_path = '/u3/forrest/C-LAMP/Exp1.6/clm3-casa'
10.11 + fnames = 'i01.11casa.clm2.h0.1997-1999.nc','i01.11casa.clm2.h0.2000-2009.nc','i01.11casa.clm2.h0.2010-2019.nc','i01.11casa.clm2.h0.2020-2029.nc','i01.11casa.clm2.h0.2030-2039.nc','i01.11casa.clm2.h0.2040-2049.nc','i01.11casa.clm2.h0.2050-2059.nc','i01.11casa.clm2.h0.2060-2069.nc','i01.11casa.clm2.h0.2070-2079.nc','i01.11casa.clm2.h0.2080-2089.nc','i01.11casa.clm2.h0.2090-2099.nc','i01.11casa.clm2.h0.2100-2100.nc'
10.12 + tshift = 52735,52735,52735,52735,52735,52735,52735,52735,52735,52735,52735,52735
10.13 + vnames = 'area','landmask','topo','landfrac','QBOT','RAIN','SNOW','AGNPP','AR','BIOGENCO','BGNPP','ISOPRENE','MONOTERP','ORVOC','OVOC','CWDC','CWDC_HR','CWDC_LOSS','FROOTC','FROOTC_ALLOC','FROOTC_LOSS','GPP','HR','LEAFC_ALLOC','LEAFC_LOSS','LITTERC','LITTERC_HR','LITTERC_LOSS','NEE','NEP','NPP','SOILC','SOILC_HR','SOILC_LOSS','VOCFLXT','WOODC','WOODC_ALLOC','WOODC_LOSS','FGR','LATENT','FSH','FSH_G','FSH_V','RH2M','Q2M','BTRAN','ET','QSOIL','QVEGE','SOILICE','TOTAL_SOILICE','SOILLIQ','TOTAL_SOILLIQ','QOVER','QDRAI','QINTR','H2OSNO','QVEGT','H2OSOI','SOILPSI','ALL_SKY_ALBEDO','BLACK_SKY_ALBEDO','LAISHA','LAISUN','FLDS','FIRA','FIRE','NETRAD','FSA','SABG','SABV','FSDS','FSR','FSNO','DEGDAY','TSA','TREFMXAV','TREFMNAV','TSOI','TV','ELAI','TLAI','ESAI','TSAI','FPSN','RSSHA','RSSUN'
10.14 + casa_flux_bug = .false.
10.15 + /
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
11.2 +++ b/namelist.clm3_casa.exp1_7.run1.monthly_mean Sun Sep 21 21:59:01 2008 -0400
11.3 @@ -0,0 +1,12 @@
11.4 + &inparm
11.5 + output_path = '/u3/forrest/ESG/c-lamp/clm3_casa/exp1_7/run1/monthly_mean/'
11.6 + input_table = 'C-LAMP_L1_table'
11.7 + source = "Community Climate System Model: CCSM3.1 (ccsm3_1_beta40); Community Land Model: CLM3 (bgcmip08_clm3_expa_72); CASA' biogeochemistry"
11.8 + experiment = 'Experiment 1.7 (FACE Transient varying Climate, CO2, and N Deposition)'
11.9 + realization = 1
11.10 + input_path = '/u3/forrest/C-LAMP/Exp1.7/clm3-casa'
11.11 + fnames = 'i01.12casa.clm2.h0.1997-1999.nc','i01.12casa.clm2.h0.2000-2009.nc','i01.12casa.clm2.h0.2010-2019.nc','i01.12casa.clm2.h0.2020-2029.nc','i01.12casa.clm2.h0.2030-2039.nc','i01.12casa.clm2.h0.2040-2049.nc','i01.12casa.clm2.h0.2050-2059.nc','i01.12casa.clm2.h0.2060-2069.nc','i01.12casa.clm2.h0.2070-2079.nc','i01.12casa.clm2.h0.2080-2089.nc','i01.12casa.clm2.h0.2090-2099.nc','i01.12casa.clm2.h0.2100-2100.nc'
11.12 + tshift = 52735,52735,52735,52735,52735,52735,52735,52735,52735,52735,52735,52735
11.13 + vnames = 'area','landmask','topo','landfrac','QBOT','RAIN','SNOW','AGNPP','AR','BIOGENCO','BGNPP','ISOPRENE','MONOTERP','ORVOC','OVOC','CWDC','CWDC_HR','CWDC_LOSS','FROOTC','FROOTC_ALLOC','FROOTC_LOSS','GPP','HR','LEAFC_ALLOC','LEAFC_LOSS','LITTERC','LITTERC_HR','LITTERC_LOSS','NEE','NEP','NPP','SOILC','SOILC_HR','SOILC_LOSS','VOCFLXT','WOODC','WOODC_ALLOC','WOODC_LOSS','FGR','LATENT','FSH','FSH_G','FSH_V','RH2M','Q2M','BTRAN','ET','QSOIL','QVEGE','SOILICE','TOTAL_SOILICE','SOILLIQ','TOTAL_SOILLIQ','QOVER','QDRAI','QINTR','H2OSNO','QVEGT','H2OSOI','SOILPSI','ALL_SKY_ALBEDO','BLACK_SKY_ALBEDO','LAISHA','LAISUN','FLDS','FIRA','FIRE','NETRAD','FSA','SABG','SABV','FSDS','FSR','FSNO','DEGDAY','TSA','TREFMXAV','TREFMNAV','TSOI','TV','ELAI','TLAI','ESAI','TSAI','FPSN','RSSHA','RSSUN'
11.14 + casa_flux_bug = .false.
11.15 + /
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
12.2 +++ b/namelist.clm3_cn.exp1_2.run1.monthly_mean Sun Sep 21 21:59:01 2008 -0400
12.3 @@ -0,0 +1,12 @@
12.4 + &inparm
12.5 + output_path = '/u3/forrest/ESG/c-lamp/clm3_cn/exp1_2/run1/monthly_mean/'
12.6 + input_table = 'C-LAMP_L1_table'
12.7 + source = "Community Climate System Model: CCSM3.1 (ccsm3_1_beta40); Community Land Model: CLM3 (bgcmip05_clm3_expa_72); CN biogeochemistry"
12.8 + experiment = 'Experiment 1.2 (Control)'
12.9 + realization = 1
12.10 + input_path = '/u3/forrest/C-LAMP/Exp1.2/clm3-cn'
12.11 + fnames = 'i01.06cn.clm2.h0.1798-1799.nc','i01.06cn.clm2.h0.1800-1809.nc','i01.06cn.clm2.h0.1810-1819.nc','i01.06cn.clm2.h0.1820-1829.nc','i01.06cn.clm2.h0.1830-1839.nc','i01.06cn.clm2.h0.1840-1849.nc','i01.06cn.clm2.h0.1850-1859.nc','i01.06cn.clm2.h0.1860-1869.nc','i01.06cn.clm2.h0.1870-1879.nc','i01.06cn.clm2.h0.1880-1889.nc','i01.06cn.clm2.h0.1890-1899.nc','i01.06cn.clm2.h0.1900-1909.nc','i01.06cn.clm2.h0.1910-1919.nc','i01.06cn.clm2.h0.1920-1929.nc','i01.06cn.clm2.h0.1930-1939.nc','i01.06cn.clm2.h0.1940-1949.nc','i01.06cn.clm2.h0.1950-1959.nc','i01.06cn.clm2.h0.1960-1969.nc','i01.06cn.clm2.h0.1970-1979.nc','i01.06cn.clm2.h0.1980-1989.nc','i01.06cn.clm2.h0.1990-1999.nc','i01.06cn.clm2.h0.2000-2004.nc'
12.12 + tshift = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
12.13 + vnames = 'area','landmask','topo','landfrac','QBOT','RAIN','SNOW','AGNPP','AR','BIOGENCO','BGNPP','ISOPRENE','MONOTERP','ORVOC','OVOC','CWDC','CWDC_HR','CWDC_LOSS','FROOTC','FROOTC_ALLOC','FROOTC_LOSS','GPP','GROSS_NMIN','HR','LEAFC_ALLOC','LEAFC_LOSS','LITTERC','LITTERC_HR','LITTERC_LOSS','NEE','NEP','NET_NMIN','NPP','SOILC','SOILC_HR','SOILC_LOSS','VOCFLXT','WOODC','WOODC_ALLOC','WOODC_LOSS','FGR','LATENT','FSH','FSH_G','FSH_V','RH2M','Q2M','BTRAN','ET','QSOIL','QVEGE','SOILICE','TOTAL_SOILICE','SOILLIQ','TOTAL_SOILLIQ','QOVER','QDRAI','QINTR','H2OSNO','QVEGT','H2OSOI','SOILPSI','ALL_SKY_ALBEDO','BLACK_SKY_ALBEDO','LAISHA','LAISUN','FLDS','FIRA','FIRE','NETRAD','FSA','SABG','SABV','FSDS','FSR','FSNO','TSA','TREFMXAV','TREFMNAV','TSOI','TV','ELAI','TLAI','ESAI','TSAI','FPSN','RSSHA','RSSUN'
12.14 + casa_flux_bug = .false.
12.15 + /
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
13.2 +++ b/namelist.clm3_cn.exp1_3.run1.monthly_mean Sun Sep 21 21:59:01 2008 -0400
13.3 @@ -0,0 +1,12 @@
13.4 + &inparm
13.5 + output_path = '/u3/forrest/ESG/c-lamp/clm3_cn/exp1_3/run1/monthly_mean/'
13.6 + input_table = 'C-LAMP_L1_table'
13.7 + source = "Community Climate System Model: CCSM3.1 (ccsm3_1_beta40); Community Land Model: CLM3 (bgcmip05_clm3_expa_72); CN biogeochemistry"
13.8 + experiment = 'Experiment 1.3 (Varying Climate)'
13.9 + realization = 1
13.10 + input_path = '/u3/forrest/C-LAMP/Exp1.3/clm3-cn'
13.11 + fnames = 'i01.07cn.clm2.h0.1948-1949.nc','i01.07cn.clm2.h0.1950-1959.nc','i01.07cn.clm2.h0.1960-1969.nc','i01.07cn.clm2.h0.1970-1979.nc','i01.07cn.clm2.h0.1980-1989.nc','i01.07cn.clm2.h0.1990-1999.nc','i01.07cn.clm2.h0.2000-2004.nc'
13.12 + tshift = 54750,54750,54750,54750,54750,54750,54750
13.13 + vnames = 'area','landmask','topo','landfrac','QBOT','RAIN','SNOW','AGNPP','AR','BIOGENCO','BGNPP','ISOPRENE','MONOTERP','ORVOC','OVOC','CWDC','CWDC_HR','CWDC_LOSS','FROOTC','FROOTC_ALLOC','FROOTC_LOSS','GPP','GROSS_NMIN','HR','LEAFC_ALLOC','LEAFC_LOSS','LITTERC','LITTERC_HR','LITTERC_LOSS','NEE','NEP','NET_NMIN','NPP','SOILC','SOILC_HR','SOILC_LOSS','VOCFLXT','WOODC','WOODC_ALLOC','WOODC_LOSS','FGR','LATENT','FSH','FSH_G','FSH_V','RH2M','Q2M','BTRAN','ET','QSOIL','QVEGE','SOILICE','TOTAL_SOILICE','SOILLIQ','TOTAL_SOILLIQ','QOVER','QDRAI','QINTR','H2OSNO','QVEGT','H2OSOI','SOILPSI','ALL_SKY_ALBEDO','BLACK_SKY_ALBEDO','LAISHA','LAISUN','FLDS','FIRA','FIRE','NETRAD','FSA','SABG','SABV','FSDS','FSR','FSNO','TSA','TREFMXAV','TREFMNAV','TSOI','TV','ELAI','TLAI','ESAI','TSAI','FPSN','RSSHA','RSSUN'
13.14 + casa_flux_bug = .false.
13.15 + /
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
14.2 +++ b/namelist.clm3_cn.exp1_4.run1.monthly_mean Sun Sep 21 21:59:01 2008 -0400
14.3 @@ -0,0 +1,12 @@
14.4 + &inparm
14.5 + output_path = '/u3/forrest/ESG/c-lamp/clm3_cn/exp1_4/run1/monthly_mean/'
14.6 + input_table = 'C-LAMP_L1_table'
14.7 + source = "Community Climate System Model: CCSM3.1 (ccsm3_1_beta40); Community Land Model: CLM3 (bgcmip05_clm3_expa_72); CN biogeochemistry"
14.8 + experiment = 'Experiment 1.4 (Varying Climate, CO2, and N Deposition)'
14.9 + realization = 1
14.10 + input_path = '/u3/forrest/C-LAMP/Exp1.4/clm3-cn'
14.11 + fnames = 'i01.08cn.clm2.h0.1798-1799.nc','i01.08cn.clm2.h0.1800-1809.nc','i01.08cn.clm2.h0.1810-1819.nc','i01.08cn.clm2.h0.1820-1829.nc','i01.08cn.clm2.h0.1830-1839.nc','i01.08cn.clm2.h0.1840-1849.nc','i01.08cn.clm2.h0.1850-1859.nc','i01.08cn.clm2.h0.1860-1869.nc','i01.08cn.clm2.h0.1870-1879.nc','i01.08cn.clm2.h0.1880-1889.nc','i01.09cn.clm2.h0.1890-1899.nc','i01.09cn.clm2.h0.1900-1909.nc','i01.09cn.clm2.h0.1910-1919.nc','i01.09cn.clm2.h0.1920-1929.nc','i01.09cn.clm2.h0.1930-1939.nc','i01.09cn.clm2.h0.1940-1947.nc','i01.10cn.clm2.h0.1948-1949.nc','i01.10cn.clm2.h0.1950-1959.nc','i01.10cn.clm2.h0.1960-1969.nc','i01.10cn.clm2.h0.1970-1979.nc','i01.10cn.clm2.h0.1980-1989.nc','i01.10cn.clm2.h0.1990-1999.nc','i01.10cn.clm2.h0.2000-2004.nc'
14.12 + tshift = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54750,54750,54750,54750,54750,54750,54750
14.13 + vnames = 'area','landmask','topo','landfrac','QBOT','RAIN','SNOW','AGNPP','AR','BIOGENCO','BGNPP','ISOPRENE','MONOTERP','ORVOC','OVOC','CWDC','CWDC_HR','CWDC_LOSS','FROOTC','FROOTC_ALLOC','FROOTC_LOSS','GPP','GROSS_NMIN','HR','LEAFC_ALLOC','LEAFC_LOSS','LITTERC','LITTERC_HR','LITTERC_LOSS','NEE','NEP','NET_NMIN','NPP','SOILC','SOILC_HR','SOILC_LOSS','VOCFLXT','WOODC','WOODC_ALLOC','WOODC_LOSS','FGR','LATENT','FSH','FSH_G','FSH_V','RH2M','Q2M','BTRAN','ET','QSOIL','QVEGE','SOILICE','TOTAL_SOILICE','SOILLIQ','TOTAL_SOILLIQ','QOVER','QDRAI','QINTR','H2OSNO','QVEGT','H2OSOI','SOILPSI','ALL_SKY_ALBEDO','BLACK_SKY_ALBEDO','LAISHA','LAISUN','FLDS','FIRA','FIRE','NETRAD','FSA','SABG','SABV','FSDS','FSR','FSNO','TSA','TREFMXAV','TREFMNAV','TSOI','TV','ELAI','TLAI','ESAI','TSAI','FPSN','RSSHA','RSSUN'
14.14 + casa_flux_bug = .false.
14.15 + /
15.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
15.2 +++ b/namelist.clm3_cn.exp1_6.run1.monthly_mean Sun Sep 21 21:59:01 2008 -0400
15.3 @@ -0,0 +1,12 @@
15.4 + &inparm
15.5 + output_path = '/u3/forrest/ESG/c-lamp/clm3_cn/exp1_6/run1/monthly_mean/'
15.6 + input_table = 'C-LAMP_L1_table'
15.7 + source = "Community Climate System Model: CCSM3.1 (ccsm3_1_beta40); Community Land Model: CLM3 (bgcmip08_clm3_expa_72); CN biogeochemistry"
15.8 + experiment = 'Experiment 1.6 (FACE Control varying Climate, CO2, and N Deposition)'
15.9 + realization = 1
15.10 + input_path = '/u3/forrest/C-LAMP/Exp1.6/clm3-cn'
15.11 + fnames = 'i01.11cn.clm2.h0.1997-1999.nc','i01.11cn.clm2.h0.2000-2009.nc','i01.11cn.clm2.h0.2010-2019.nc','i01.11cn.clm2.h0.2020-2029.nc','i01.11cn.clm2.h0.2030-2039.nc','i01.11cn.clm2.h0.2040-2049.nc','i01.11cn.clm2.h0.2050-2059.nc','i01.11cn.clm2.h0.2060-2069.nc','i01.11cn.clm2.h0.2070-2079.nc','i01.11cn.clm2.h0.2080-2089.nc','i01.11cn.clm2.h0.2090-2099.nc','i01.11cn.clm2.h0.2100-2100.nc'
15.12 + tshift = 52735,52735,52735,52735,52735,52735,52735,52735,52735,52735,52735,52735
15.13 + vnames = 'area','landmask','topo','landfrac','QBOT','RAIN','SNOW','AGNPP','AR','BIOGENCO','BGNPP','ISOPRENE','MONOTERP','ORVOC','OVOC','CWDC','CWDC_HR','CWDC_LOSS','FROOTC','FROOTC_ALLOC','FROOTC_LOSS','GPP','GROSS_NMIN','HR','LEAFC_ALLOC','LEAFC_LOSS','LITTERC','LITTERC_HR','LITTERC_LOSS','NEE','NEP','NET_NMIN','NPP','SOILC','SOILC_HR','SOILC_LOSS','VOCFLXT','WOODC','WOODC_ALLOC','WOODC_LOSS','FGR','LATENT','FSH','FSH_G','FSH_V','RH2M','Q2M','BTRAN','ET','QSOIL','QVEGE','SOILICE','TOTAL_SOILICE','SOILLIQ','TOTAL_SOILLIQ','QOVER','QDRAI','QINTR','H2OSNO','QVEGT','H2OSOI','SOILPSI','ALL_SKY_ALBEDO','BLACK_SKY_ALBEDO','LAISHA','LAISUN','FLDS','FIRA','FIRE','NETRAD','FSA','SABG','SABV','FSDS','FSR','FSNO','TSA','TREFMXAV','TREFMNAV','TSOI','TV','ELAI','TLAI','ESAI','TSAI','FPSN','RSSHA','RSSUN'
15.14 + casa_flux_bug = .false.
15.15 + /
16.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
16.2 +++ b/namelist.clm3_cn.exp1_7.run1.monthly_mean Sun Sep 21 21:59:01 2008 -0400
16.3 @@ -0,0 +1,12 @@
16.4 + &inparm
16.5 + output_path = '/u3/forrest/ESG/c-lamp/clm3_cn/exp1_7/run1/monthly_mean/'
16.6 + input_table = 'C-LAMP_L1_table'
16.7 + source = "Community Climate System Model: CCSM3.1 (ccsm3_1_beta40); Community Land Model: CLM3 (bgcmip08_clm3_expa_72); CN biogeochemistry"
16.8 + experiment = 'Experiment 1.7 (FACE Transient varying Climate, CO2, and N Deposition)'
16.9 + realization = 1
16.10 + input_path = '/u3/forrest/C-LAMP/Exp1.7/clm3-cn'
16.11 + fnames = 'i01.12cn.clm2.h0.1997-1999.nc','i01.12cn.clm2.h0.2000-2009.nc','i01.12cn.clm2.h0.2010-2019.nc','i01.12cn.clm2.h0.2020-2029.nc','i01.12cn.clm2.h0.2030-2039.nc','i01.12cn.clm2.h0.2040-2049.nc','i01.12cn.clm2.h0.2050-2059.nc','i01.12cn.clm2.h0.2060-2069.nc','i01.12cn.clm2.h0.2070-2079.nc','i01.12cn.clm2.h0.2080-2089.nc','i01.12cn.clm2.h0.2090-2099.nc','i01.12cn.clm2.h0.2100-2100.nc'
16.12 + tshift = 52735,52735,52735,52735,52735,52735,52735,52735,52735,52735,52735,52735
16.13 + vnames = 'area','landmask','topo','landfrac','QBOT','RAIN','SNOW','AGNPP','AR','BIOGENCO','BGNPP','ISOPRENE','MONOTERP','ORVOC','OVOC','CWDC','CWDC_HR','CWDC_LOSS','FROOTC','FROOTC_ALLOC','FROOTC_LOSS','GPP','GROSS_NMIN','HR','LEAFC_ALLOC','LEAFC_LOSS','LITTERC','LITTERC_HR','LITTERC_LOSS','NEE','NEP','NET_NMIN','NPP','SOILC','SOILC_HR','SOILC_LOSS','VOCFLXT','WOODC','WOODC_ALLOC','WOODC_LOSS','FGR','LATENT','FSH','FSH_G','FSH_V','RH2M','Q2M','BTRAN','ET','QSOIL','QVEGE','SOILICE','TOTAL_SOILICE','SOILLIQ','TOTAL_SOILLIQ','QOVER','QDRAI','QINTR','H2OSNO','QVEGT','H2OSOI','SOILPSI','ALL_SKY_ALBEDO','BLACK_SKY_ALBEDO','LAISHA','LAISUN','FLDS','FIRA','FIRE','NETRAD','FSA','SABG','SABV','FSDS','FSR','FSNO','TSA','TREFMXAV','TREFMNAV','TSOI','TV','ELAI','TLAI','ESAI','TSAI','FPSN','RSSHA','RSSUN'
16.14 + casa_flux_bug = .false.
16.15 + /