Skip to content

Commit

Permalink
Move read of jmaxb0,jmaxb1,wc2wjb0 from pftcon to LunaMod and r_mort …
Browse files Browse the repository at this point in the history
…to CNGapMortality
  • Loading branch information
olyson committed Oct 26, 2024
1 parent f91cd8a commit 1571076
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 34 deletions.
38 changes: 35 additions & 3 deletions src/biogeochem/CNGapMortalityMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ module CNGapMortalityMod
!
! !USES:
use shr_kind_mod , only : r8 => shr_kind_r8
use shr_infnan_mod , only : nan => shr_infnan_nan, assignment(=)
use decompMod , only : bounds_type
use abortutils , only : endrun
use shr_log_mod , only : errMsg => shr_log_errMsg
use clm_varpar , only : mxpft
use pftconMod , only : pftcon
use CNDVType , only : dgvs_type
use CNVegCarbonStateType , only : cnveg_carbonstate_type, spinup_factor_deadwood
Expand All @@ -35,6 +37,9 @@ module CNGapMortalityMod

type, private :: params_type
real(r8):: k_mort ! coeff. of growth efficiency in mortality equation
real(r8), allocatable :: r_mort(:) ! Mortality rate (1/year)
contains
procedure, private :: allocParams ! Allocate the parameters
end type params_type
!
type(params_type), private :: params_inst
Expand All @@ -48,6 +53,24 @@ module CNGapMortalityMod

contains

!-----------------------------------------------------------------------
subroutine allocParams ( this )
!
implicit none

! !ARGUMENTS:
class(params_type) :: this
!
! !LOCAL VARIABLES:
character(len=32) :: subname = 'allocParams'
!-----------------------------------------------------------------------

! allocate parameters

allocate( this%r_mort (0:mxpft) ) ; this%r_mort(:) = nan

end subroutine allocParams

!-----------------------------------------------------------------------
subroutine readParams ( ncid )
!
Expand All @@ -66,13 +89,21 @@ subroutine readParams ( ncid )
character(len=100) :: errCode = '-Error reading in parameters file:'
logical :: readv ! has variable been read in or not
real(r8) :: tempr ! temporary to read in constant
real(r8) :: temp1d(0:mxpft) ! temporary to read in parameter
character(len=100) :: tString ! temp. var for reading
!-----------------------------------------------------------------------

tString='k_mort'
call ncd_io(varname=trim(tString),data=tempr, flag='read', ncid=ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%k_mort=tempr

call params_inst%allocParams()

tString='r_mort'
call ncd_io(varname=trim(tString),data=temp1d, flag='read', ncid=ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%r_mort=temp1d

end subroutine readParams

Expand Down Expand Up @@ -134,7 +165,6 @@ subroutine CNGapMortality (bounds, num_soilp, filter_soilp, &

leafcn => pftcon%leafcn , & ! Input: [real(r8) (:)] leaf C:N (gC/gN)
livewdcn => pftcon%livewdcn , & ! Input: [real(r8) (:)] live wood (phloem and ray parenchyma) C:N (gC/gN)
r_mort => pftcon%r_mort , & ! Input: [real(r8) (:)] Mortality rate (1/year)
laisun => canopystate_inst%laisun_patch , & ! Input: [real(r8) (:) ] sunlit projected leaf area index
laisha => canopystate_inst%laisha_patch , & ! Input: [real(r8) (:) ] shaded projected leaf area index
nind => dgvs_inst%nind_patch , & ! Output:[real(r8)(:)] number of individuals (#/m2) added by F. Li and S. Levis
Expand Down Expand Up @@ -209,12 +239,14 @@ subroutine CNGapMortality (bounds, num_soilp, filter_soilp, &
am = min(1._r8, am + heatstress(p))
else ! lpj didn't set this for grasses; cn does
! set the mortality rate based on annual rate
am = r_mort(ivt(p))
am = params_inst%r_mort(ivt(p))
end if

else
am = params_inst%r_mort(ivt(p))
end if

m = r_mort(ivt(p))/(get_average_days_per_year() * secspday)
m = am/(get_average_days_per_year() * secspday)

!------------------------------------------------------
! patch-level gap mortality carbon fluxes
Expand Down
56 changes: 49 additions & 7 deletions src/biogeophys/LunaMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@ module LunaMod
! !USES:
use shr_kind_mod , only : r8 => shr_kind_r8
use shr_log_mod , only : errMsg => shr_log_errMsg
use shr_infnan_mod , only : nan => shr_infnan_nan, assignment(=)
use clm_varcon , only : rgas, tfrz,spval
use abortutils , only : endrun
use clm_varctl , only : iulog
use clm_varpar , only : nlevcan
use clm_varpar , only : nlevcan, mxpft
use decompMod , only : bounds_type, subgrid_level_patch
use pftconMod , only : pftcon
use FrictionvelocityMod , only : frictionvel_type
Expand Down Expand Up @@ -49,6 +50,11 @@ module LunaMod
real(r8) :: enzyme_turnover_daily ! The daily turnover rate for photosynthetic enzyme at 25oC in view of ~7 days of half-life time for Rubisco (Suzuki et al. 2001) (unitless)
real(r8) :: relhExp ! Specifies the impact of relative humidity on electron transport rate (unitless)
real(r8) :: minrelh ! Minimum relative humidity for nitrogen optimization (fraction)
real(r8), allocatable :: jmaxb0(:) ! Baseline proportion of nitrogen allocated for electron transport (J)
real(r8), allocatable :: jmaxb1(:) ! Coefficient determining the response of electron transport rate to light availability (-)
real(r8), allocatable :: wc2wjb0(:) ! The baseline ratio of rubisco limited rate vs light limited photosynthetic rate (Wc:Wj) (-)
contains
procedure, private :: allocParams ! Allocate the parameters
end type params_type
type(params_type), private :: params_inst

Expand Down Expand Up @@ -88,11 +94,31 @@ module LunaMod

contains

!-----------------------------------------------------------------------
subroutine allocParams ( this )
!
implicit none

! !ARGUMENTS:
class(params_type) :: this
!
! !LOCAL VARIABLES:
character(len=32) :: subname = 'allocParams'
!-----------------------------------------------------------------------

! allocate parameters

allocate( this%jmaxb0 (0:mxpft) ) ; this%jmaxb0(:) = nan
allocate( this%jmaxb1 (0:mxpft) ) ; this%jmaxb1(:) = nan
allocate( this%wc2wjb0 (0:mxpft) ) ; this%wc2wjb0(:) = nan

end subroutine allocParams

!----------------------------------------------------------------------------
subroutine readParams( ncid )
!
! !USES:
use ncdio_pio, only: file_desc_t
use ncdio_pio, only: file_desc_t,ncd_io
use paramUtilMod, only: readNcdioScalar
!
! !ARGUMENTS:
Expand All @@ -101,6 +127,10 @@ subroutine readParams( ncid )
!
! !LOCAL VARIABLES:
character(len=*), parameter :: subname = 'readParams_Luna'
character(len=100) :: errCode = '-Error reading in parameters file:'
logical :: readv ! has variable been read in or not
real(r8) :: temp1d(0:mxpft) ! temporary to read in parameter
character(len=100) :: tString ! temp. var for reading
!--------------------------------------------------------------------

! CO2 compensation point at 25°C at present day O2 levels
Expand All @@ -121,6 +151,21 @@ subroutine readParams( ncid )
! Minimum relative humidity for nitrogen optimization (fraction)
call readNcdioScalar(ncid, 'minrelh', subname, params_inst%minrelh)

call params_inst%allocParams()

tString = "jmaxb0"
call ncd_io(varname=trim(tString),data=temp1d, flag='read', ncid=ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%jmaxb0=temp1d
tString = "jmaxb1"
call ncd_io(varname=trim(tString),data=temp1d, flag='read', ncid=ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%jmaxb1=temp1d
tString = "wc2wjb0"
call ncd_io(varname=trim(tString),data=temp1d, flag='read', ncid=ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=trim(errCode)//trim(tString)//errMsg(sourcefile, __LINE__))
params_inst%wc2wjb0=temp1d

end subroutine readParams

!-----------------------------------------------------------------------
Expand Down Expand Up @@ -247,9 +292,6 @@ subroutine Update_Photosynthesis_Capacity(bounds, fn, filterp, &
c3psn => pftcon%c3psn , & ! photosynthetic pathway: 0. = c4, 1. = c3
slatop => pftcon%slatop , & ! specific leaf area at top of canopy, projected area basis [m^2/gC]
leafcn => pftcon%leafcn , & ! leaf C:N (gC/gN)
jmaxb0 => pftcon%jmaxb0 , & ! Baseline proportion of nitrogen allocated for electron transport (J)
jmaxb1 => pftcon%jmaxb1 , & ! Coefficient determining the response of electron transport rate to light availability (-)
wc2wjb0 => pftcon%wc2wjb0 , & ! The baseline ratio of rubisco limited rate vs light limited photosynthetic rate (Wc:Wj) (-)
forc_pbot10 => atm2lnd_inst%forc_pbot240_downscaled_patch , & ! Input: [real(r8) (:) ] 10 day mean atmospheric pressure(Pa)
CO2_p240 => atm2lnd_inst%forc_pco2_240_patch , & ! Input: [real(r8) (:) ] 10-day mean CO2 partial pressure (Pa)
O2_p240 => atm2lnd_inst%forc_po2_240_patch , & ! Input: [real(r8) (:) ] 10-day mean O2 partial pressure (Pa)
Expand Down Expand Up @@ -375,7 +417,8 @@ subroutine Update_Photosynthesis_Capacity(bounds, fn, filterp, &
PNcbold = 0.0_r8
call NitrogenAllocation(FNCa,forc_pbot10(p), relh10, CO2a10, O2a10, PARi10, PARimx10, rb10v, hourpd, &
tair10, tleafd10, tleafn10, &
jmaxb0(ft), jmaxb1(ft), wc2wjb0(ft), PNlcold, PNetold, PNrespold, PNcbold, dayl_factor(p), &
params_inst%jmaxb0(ft), params_inst%jmaxb1(ft), params_inst%wc2wjb0(ft), PNlcold, PNetold, &
PNrespold, PNcbold, dayl_factor(p), &
o3coefjmax(p), PNstoreopt, PNlcopt, PNetopt, PNrespopt, PNcbopt)
vcmx25_opt= PNcbopt * FNCa * Fc25
jmx25_opt= PNetopt * FNCa * Fj25
Expand Down Expand Up @@ -1362,7 +1405,6 @@ subroutine Quadratic(a,b,c,r1,r2)
end if

end subroutine Quadratic


end module LunaMod

24 changes: 0 additions & 24 deletions src/main/pftconMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,6 @@ module pftconMod
real(r8), allocatable :: wood_density (:) ! wood density (kg/m3)
real(r8), allocatable :: crit_onset_gdd_sf(:)! scale factor for crit_onset_gdd
real(r8), allocatable :: ndays_on(:) ! number of days to complete leaf onset
real(r8), allocatable :: jmaxb0(:) ! Baseline proportion of nitrogen allocated for electron transport (J)
real(r8), allocatable :: jmaxb1(:) ! Coefficient determining the response of electron transport rate to light availability (-)
real(r8), allocatable :: wc2wjb0(:) ! The baseline ratio of rubisco limited rate vs light limited photosynthetic rate (Wc:Wj) (-)
real(r8), allocatable :: r_mort(:) ! Mortality rate (1/year)

! crop

Expand Down Expand Up @@ -510,10 +506,6 @@ subroutine InitAllocate (this)
allocate( this%wood_density (0:mxpft) )
allocate( this%crit_onset_gdd_sf (0:mxpft) )
allocate( this%ndays_on (0:mxpft) )
allocate( this%jmaxb0 (0:mxpft) )
allocate( this%jmaxb1 (0:mxpft) )
allocate( this%wc2wjb0 (0:mxpft) )
allocate( this%r_mort (0:mxpft) )

end subroutine InitAllocate

Expand Down Expand Up @@ -1025,18 +1017,6 @@ subroutine InitRead(this)
call ncd_io('medlynintercept', this%medlynintercept, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))

call ncd_io('jmaxb0', this%jmaxb0, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))

call ncd_io('jmaxb1', this%jmaxb1, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))

call ncd_io('wc2wjb0', this%wc2wjb0, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))

call ncd_io('r_mort', this%r_mort, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))

call ncd_io('mxmat', this%mxmat, 'read', ncid, readvar=readv)
if ( .not. readv ) call endrun(msg=' ERROR: error in reading in pft data'//errMsg(sourcefile, __LINE__))

Expand Down Expand Up @@ -1616,10 +1596,6 @@ subroutine Clean(this)
deallocate( this%taper)
deallocate( this%crit_onset_gdd_sf)
deallocate( this%ndays_on)
deallocate( this%jmaxb0)
deallocate( this%jmaxb1)
deallocate( this%wc2wjb0)
deallocate( this%r_mort)
end subroutine Clean

end module pftconMod
Expand Down

0 comments on commit 1571076

Please sign in to comment.