Skip to content

Commit

Permalink
Added parameters to the CASA PFT parameter file.
Browse files Browse the repository at this point in the history
Using the xkNlimiting min and max in the N limitation calculations.
Using the Carbon Use Efficiency (CUE) in CASACNP organic matter transformations.
Addresses #26 and #27.
  • Loading branch information
melanniehartman committed Dec 23, 2019
1 parent e8af3b1 commit 380b892
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 19 deletions.
49 changes: 36 additions & 13 deletions SOURCE_CODE/casa_cnp.f90
Original file line number Diff line number Diff line change
Expand Up @@ -716,7 +716,7 @@ SUBROUTINE casa_coeffsoil(xklitter,xksoil,veg,soil,casabiome,casaflux,casamet)
TYPE (casa_met), INTENT(INOUT) :: casamet

! local variables
INTEGER j,k,kk,nland !i: for plant pool, j for litter, k for soil
INTEGER j,k,kk,nland,nv !i: for plant pool, j for litter, k for soil

casaflux%fromLtoS(:,:,:) = 0.0
casaflux%fromStoS(:,:,:) = 0.0
Expand Down Expand Up @@ -751,27 +751,50 @@ SUBROUTINE casa_coeffsoil(xklitter,xksoil,veg,soil,casabiome,casaflux,casamet)
casaflux%ksoil(:,pass) = casaflux%ksoil(:,pass)* 1.5
ENDWHERE !

! flow from litter to soil
casaflux%fromLtoS(:,mic,metb) = 0.45
!! Allow carbon use efficiencies to be read from the casa pft parameter file. -MDH 12/23/2019
! ! flow from litter to soil
! casaflux%fromLtoS(:,mic,metb) = 0.45
! ! metb -> mic
! casaflux%fromLtoS(:,mic,str) = 0.45*(1.0-casabiome%fracLigninplant(veg%iveg(:),leaf))
! ! str -> mic
! casaflux%fromLtoS(:,slow,str) = 0.7 * casabiome%fracLigninplant(veg%iveg(:),leaf)
! ! str -> slow
! casaflux%fromLtoS(:,mic,cwd) = 0.40*(1.0 - casabiome%fracLigninplant(veg%iveg(:),wood))
! ! CWD -> fmic
! casaflux%fromLtoS(:,slow,cwd) = 0.7 * casabiome%fracLigninplant(veg%iveg(:),wood)
! ! CWD -> slow
!
!! set the following two backflow to set (see Bolker 199x)
! casaflux%fromStoS(:,mic,slow) = 0.45 * (0.997 - 0.009 *soil%clay(:))
! casaflux%fromStoS(:,mic,pass) = 0.45
!
! casaflux%fromStoS(:,slow,mic) = (0.85 - 0.68 * (soil%clay(:)+soil%silt(:))) &
! * (0.997 - 0.032*soil%clay(:))
! casaflux%fromStoS(:,pass,mic) = (0.85 - 0.68 * (soil%clay(:)+soil%silt(:))) &
! * (0.003 + 0.032*soil%clay(:))
! casaflux%fromStoS(:,pass,slow) = 0.45 * (0.003 + 0.009 * soil%clay(:))


casaflux%fromLtoS(:,mic,metb) = casabiome%CUEmetbmic(veg%iveg(:))
! metb -> mic
casaflux%fromLtoS(:,mic,str) = 0.45*(1.0-casabiome%fracLigninplant(veg%iveg(:),leaf))
casaflux%fromLtoS(:,mic,str) = casabiome%CUEstrmic(veg%iveg(:)) * (1.0-casabiome%fracLigninplant(veg%iveg(:),leaf))
! str -> mic
casaflux%fromLtoS(:,slow,str) = 0.7 * casabiome%fracLigninplant(veg%iveg(:),leaf)
casaflux%fromLtoS(:,slow,str) = casabiome%CUEstrslow(veg%iveg(:)) * casabiome%fracLigninplant(veg%iveg(:),leaf)
! str -> slow
casaflux%fromLtoS(:,mic,cwd) = 0.40*(1.0 - casabiome%fracLigninplant(veg%iveg(:),wood))
casaflux%fromLtoS(:,mic,cwd) = casabiome%CUEcwdmic(veg%iveg(:)) * (1.0-casabiome%fracLigninplant(veg%iveg(:),wood))
! CWD -> fmic
casaflux%fromLtoS(:,slow,cwd) = 0.7 * casabiome%fracLigninplant(veg%iveg(:),wood)
casaflux%fromLtoS(:,slow,cwd) = casabiome%CUEcwdslow(veg%iveg(:)) * casabiome%fracLigninplant(veg%iveg(:),wood)
! CWD -> slow

!! set the following two backflow to set (see Bolker 199x)
! casaflux%fromStoS(:,mic,slow) = 0.45 * (0.997 - 0.009 *soil%clay(:))
! casaflux%fromStoS(:,mic,pass) = 0.45
!! set the following two backflow to set (see Bolker 199x)
!casaflux%fromStoS(nv,mic,slow) = 0.0
!casaflux%fromStoS(nv,mic,pass) = 0.0

casaflux%fromStoS(:,slow,mic) = (0.85 - 0.68 * (soil%clay(:)+soil%silt(:))) &
casaflux%fromStoS(:,slow,mic) = casabiome%CUEmicslow(veg%iveg(:)) * (0.85 - 0.68*(soil%clay(:)+soil%silt(:))) &
* (0.997 - 0.032*soil%clay(:))
casaflux%fromStoS(:,pass,mic) = (0.85 - 0.68 * (soil%clay(:)+soil%silt(:))) &
casaflux%fromStoS(:,pass,mic) = casabiome%CUEmicpass(veg%iveg(:)) * (0.85 - 0.68*(soil%clay(:)+soil%silt(:))) &
* (0.003 + 0.032*soil%clay(:))
casaflux%fromStoS(:,pass,slow) = 0.45 * (0.003 + 0.009 * soil%clay(:) )
casaflux%fromStoS(:,pass,slow) = casabiome%CUEpassslow(veg%iveg(:)) * (0.003 + 0.009*soil%clay(:))

ENDWHERE

Expand Down
46 changes: 43 additions & 3 deletions SOURCE_CODE/casa_inout.f90
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,12 @@
! for each grid cell are read directly from a file rather than assigned
! from soil type (1-7).
!
! Melannie D. Hartman, March 2014 - November 2017
! Melannie D. Hartman, March 2014 - December 2019
! Removed NPP and LAI from met.nc files. -mdh 11/6/2017
! Echo CASA parameter values as they are read in (subroutine casa_readbiome). -mdh 11/6/2017
! Echo restart file contents (subroutine casa_init). -mdh 11/6/2017
! Add N fluxes to netCDF output. -mdh 11/25/2019
! Added new set of parameters to the botton of the CASA PFT parameter file. -mdh 12/23/2019
!--------------------------------------------------------------------------------

SUBROUTINE casa_readbiome(fname_cnpbiome,filename_soilprop,mvt,mst)
Expand All @@ -61,9 +62,9 @@ SUBROUTINE casa_readbiome(fname_cnpbiome,filename_soilprop,mvt,mst)
implicit none
character(len=100) fname_cnpbiome
character(len=100) filename_soilprop
character(len=200) buffer
character(len=300) buffer
integer mvt,mst
integer i,iv1,nv,ns,nv0,nv1,nv2,nv3,nv4,nv5,nv6,nv7,nv8,nv9,nv10,nv11,npt,iv,is,iso
integer i,iv1,nv,ns,nv0,nv1,nv2,nv3,nv4,nv5,nv6,nv7,nv8,nv9,nv10,nv11,nv12,npt,iv,is,iso
real(r_2), dimension(mvt) :: leafage,frootage,woodage
real(r_2), dimension(mvt) :: totroot
real(r_2), dimension(mvt) :: cwdage,metage,strage
Expand Down Expand Up @@ -390,6 +391,45 @@ SUBROUTINE casa_readbiome(fname_cnpbiome,filename_soilprop,mvt,mst)
ENDDO
!@@@@@@@@@@@@@@@@@@@@@

!!-------------------------------------------------------------------------------------------
!! Added this section (-MDH 12/23/2019)

! Set default values
casabiome%xkNlimitmin(:) = 0.50
casabiome%xkNlimitmax(:) = 2.0
casabiome%fracRootExud(:) = 0.0
casabiome%CNRootExud(:) = 15.0
casabiome%CUEmetbmic(:) = 0.45
casabiome%CUEstrmic(:) = 0.45
casabiome%CUEstrslow(:) = 0.70
casabiome%CUEcwdmic(:) = 0.40
casabiome%CUEcwdslow(:) = 0.70
casabiome%CUEmicslow(:) = 1.0
casabiome%CUEmicpass(:) = 1.0
casabiome%CUEpassslow(:) = 0.45

! Handle unexpected end of file
read(101,'(a)', end=999) buffer
write(*,*) trim(buffer)
read(101,'(a)',end=999) buffer
write(*,*) trim(buffer)
DO nv=1,mvt
read(101,*,end=999) nv12, &
casabiome%xkNlimitmin(nv),casabiome%xkNlimitmax(nv),casabiome%fracRootExud(nv), &
casabiome%CNRootExud(nv),casabiome%CUEmetbmic(nv),casabiome%CUEstrmic(nv), &
casabiome%CUEstrslow(nv),casabiome%CUEcwdmic(nv),casabiome%CUEcwdslow(nv), &
casabiome%CUEmicslow(nv),casabiome%CUEmicpass(nv),casabiome%CUEpassslow(nv)
write(*,'(i2,1x,12(f7.4,1x))') nv12, &
casabiome%xkNlimitmin(nv),casabiome%xkNlimitmax(nv),casabiome%fracRootExud(nv), &
casabiome%CNRootExud(nv),casabiome%CUEmetbmic(nv),casabiome%CUEstrmic(nv), &
casabiome%CUEstrslow(nv),casabiome%CUEcwdmic(nv),casabiome%CUEcwdslow(nv), &
casabiome%CUEmicslow(nv),casabiome%CUEmicpass(nv),casabiome%CUEpassslow(nv)
!print *, 'nv12',nv12

ENDDO
!!-------------------------------------------------------------------------------------------

999 continue
close(101)
write(*,*) "Done reading CASA biome-specific parameters from file ", fname_cnpbiome, "..."

Expand Down
10 changes: 8 additions & 2 deletions SOURCE_CODE/casa_nlim.f90
Original file line number Diff line number Diff line change
Expand Up @@ -206,14 +206,20 @@ SUBROUTINE casa_xkN2(xkNlimiting,casapool,casaflux,casamet,casabiome,veg)
ENDDO

! Now check if there is sufficient mineral N
! Use parameters from CASA PFT parameter file. -mdh 12/23/2019
! casabiome%xkNlimitmin(veg%iveg(:)) replaces 0.5
! casabiome%xkNlimitmax(veg%iveg(:)) replaces 2.0
WHERE(casamet%iveg2(:)/=icewater)
WHERE((casapool%Nsoilmin(:)-2.0) > 0.0)
!WHERE((casapool%Nsoilmin(:)-2.0) > 0.0)
WHERE((casapool%Nsoilmin(:)-casabiome%xkNlimitmax(veg%iveg(:))) > 0.0)
xkNlimiting(:) = 1.0
ELSEWHERE
! Linear ramp from 0.0 to 1.0 for 0.5 < casapool%Nsoilmin(:) < 2.0
! y = (y2 - y1) / (x2 - x1) * (x - x2) + y2

xkNlimiting(:) = (1.0 - 0.0) / (2.0 - 0.5) * (casapool%Nsoilmin(:) - 2.0) + 1.0
!xkNlimiting(:) = (1.0 - 0.0) / (2.0 - 0.5) * (casapool%Nsoilmin(:) - 2.0) + 1.0
xkNlimiting(:) = (1.0 - 0.0) / (casabiome%xkNlimitmax(veg%iveg(:)) - casabiome%xkNlimitmin(veg%iveg(:))) &
* (casapool%Nsoilmin(:) - casabiome%xkNlimitmax(veg%iveg(:))) + 1.0
xkNlimiting(:) = MAX(0.0, xkNlimiting(:))
xkNlimiting(:) = MIN(1.0, xkNlimiting(:))
ENDWHERE
Expand Down
29 changes: 28 additions & 1 deletion SOURCE_CODE/casa_variable.f90
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,20 @@ MODULE casavariable
maxfinelitter, &
maxcwd, &
nintercept, &
nslope
nslope, &

xkNlimitmin, &
xkNlimitmax, &
fracRootExud, &
CNRootExud, &
CUEmetbmic, &
CUEstrmic, &
CUEstrslow, &
CUEcwdmic, &
CUEcwdslow, &
CUEmicslow, &
CUEmicpass, &
CUEpassslow

REAL(r_2), DIMENSION(:,:),POINTER :: plantrate, &
rmplant, &
Expand Down Expand Up @@ -475,6 +488,20 @@ SUBROUTINE alloc_casavariable(mp,mvtype,ms)
casabiome%maxcwd(mvtype), &
casabiome%nintercept(mvtype), &
casabiome%nslope(mvtype), &

casabiome%xkNlimitmin(mvtype), &
casabiome%xkNlimitmax(mvtype), &
casabiome%fracRootExud(mvtype), &
casabiome%CNRootExud(mvtype), &
casabiome%CUEmetbmic(mvtype), &
casabiome%CUEstrmic(mvtype), &
casabiome%CUEstrslow(mvtype), &
casabiome%CUEcwdmic(mvtype), &
casabiome%CUEcwdslow(mvtype), &
casabiome%CUEmicslow(mvtype), &
casabiome%CUEmicpass(mvtype), &
casabiome%CUEpassslow(mvtype), &

casabiome%plantrate(mvtype,mplant), &
casabiome%rmplant(mvtype,mplant), &
casabiome%fracnpptoP(mvtype,mplant), &
Expand Down

0 comments on commit 380b892

Please sign in to comment.