From a811f7540d5ee1f364f41e67334a49a337092cf6 Mon Sep 17 00:00:00 2001 From: Marcos Longo Date: Tue, 16 Oct 2012 17:04:15 -0400 Subject: [PATCH 1/2] Update .bzrignore for my automated backup --- .bzrignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.bzrignore b/.bzrignore index 05902bfef..3685de0d1 100644 --- a/.bzrignore +++ b/.bzrignore @@ -12160,3 +12160,9 @@ BRAMS/i12dbg/bin/therm_lib.mod BRAMS/i12dbg/bin/turb_coms.mod BRAMS/i12dbg/bin/var_tables.mod BRAMS/i12dbg/edbrams-opt +BRAMS/build +BRAMS/build/edbrams-srf +BRAMS/i10dbg/bin/include.mk.opt +ED/build/bin/budget_utils.mod +ED/dbgbuild/bin/budget_utils.mod +BRAMS/i12build From 5d9d23f6414d8b95ac52451632685a283b13d869 Mon Sep 17 00:00:00 2001 From: Marcos Longo Date: Sat, 20 Oct 2012 19:53:58 -0400 Subject: [PATCH 2/2] 1. Bug fix in multiple_scatter.f90. One variable was not initialised correctly. 2. Added several diagnostic variables to the output. --- .bzrignore | 2 + ED/Template/Template/ED2IN | 4 +- ED/Template/Template/plot_monthly.r | 67 +- ED/Template/Template/plot_yearly.r | 244 ++-- ED/Template/compare_results.r | 137 ++- ED/Template/epost.sh | 2 +- ED/Template/spawn_poly.sh | 8 +- ED/run/ED2IN | 4 +- ED/src/dynamics/disturbance.f90 | 63 +- ED/src/dynamics/hybrid_driver.f90 | 39 + ED/src/dynamics/multiple_scatter.f90 | 7 +- ED/src/dynamics/radiate_driver.f90 | 78 +- ED/src/dynamics/rk4_derivs.F90 | 57 + ED/src/dynamics/rk4_driver.F90 | 37 +- ED/src/dynamics/rk4_integ_utils.f90 | 39 + ED/src/dynamics/rk4_misc.f90 | 126 +- ED/src/init/ed_init_atm.F90 | 1 + ED/src/init/ed_type_init.f90 | 178 ++- ED/src/io/average_utils.f90 | 940 ++++++++++----- ED/src/io/ed_init_full_history.F90 | 247 +++- ED/src/io/edio.f90 | 54 +- ED/src/memory/ed_state_vars.f90 | 1540 ++++++++++++++++++++++--- ED/src/memory/rk4_coms.f90 | 203 ++-- ED/src/utils/fuse_fiss_utils.f90 | 811 ++++--------- ED/src/utils/update_derived_props.f90 | 150 +++ 25 files changed, 3513 insertions(+), 1525 deletions(-) diff --git a/.bzrignore b/.bzrignore index 3685de0d1..d1cea2efc 100644 --- a/.bzrignore +++ b/.bzrignore @@ -12166,3 +12166,5 @@ BRAMS/i10dbg/bin/include.mk.opt ED/build/bin/budget_utils.mod ED/dbgbuild/bin/budget_utils.mod BRAMS/i12build +ED/dbgbuild/bin/update_cohort_extensive_props_mod.f90 +ED/dbgbuild/bin/update_cohort_extensive_props_mod.mod diff --git a/ED/Template/Template/ED2IN b/ED/Template/Template/ED2IN index 53dc2c227..f0b666fde 100644 --- a/ED/Template/Template/ED2IN +++ b/ED/Template/Template/ED2IN @@ -249,8 +249,8 @@ $ED_NL ! Multiple timepoints should not be used in the history files ! ! if you intend to use these for HISTORY runs. ! !---------------------------------------------------------------------------------------! - NL%OUTFAST = 1. - NL%OUTSTATE = 1. + NL%OUTFAST = 0. + NL%OUTSTATE = 0. !---------------------------------------------------------------------------------------! diff --git a/ED/Template/Template/plot_monthly.r b/ED/Template/Template/plot_monthly.r index 269095524..2098431cc 100644 --- a/ED/Template/Template/plot_monthly.r +++ b/ED/Template/Template/plot_monthly.r @@ -655,30 +655,49 @@ for (place in myplaces){ # at any given time. # #---------------------------------------------------------------------------------------# empty = datum$nplantpftdbh == 0 - datum$agbpftdbh [empty] = NA - datum$basareapftdbh [empty] = NA - datum$laipftdbh [empty] = NA - datum$waipftdbh [empty] = NA - datum$taipftdbh [empty] = NA - datum$gpppftdbh [empty] = NA - datum$npppftdbh [empty] = NA - datum$mcopftdbh [empty] = NA - datum$cbapftdbh [empty] = NA - datum$cbalightpftdbh [empty] = NA - datum$cbamoistpftdbh [empty] = NA - datum$cbarelpftdbh [empty] = NA - datum$ldroppftdbh [empty] = NA - datum$fsopftdbh [empty] = NA - datum$demandpftdbh [empty] = NA - datum$supplypftdbh [empty] = NA - datum$mortpftdbh [empty] = NA - datum$agemortpftdbh [empty] = NA - datum$ncbmortpftdbh [empty] = NA - datum$tfallmortpftdbh [empty] = NA - datum$coldmortpftdbh [empty] = NA - datum$distmortpftdbh [empty] = NA - datum$growthpftdbh [empty] = NA - datum$nplantpftdbh [empty] = NA + datum$agbpftdbh [empty] = NA + datum$basareapftdbh [empty] = NA + datum$laipftdbh [empty] = NA + datum$waipftdbh [empty] = NA + datum$taipftdbh [empty] = NA + datum$gpppftdbh [empty] = NA + datum$npppftdbh [empty] = NA + datum$mcopftdbh [empty] = NA + datum$cbapftdbh [empty] = NA + datum$cbalightpftdbh [empty] = NA + datum$cbamoistpftdbh [empty] = NA + datum$cbal12lightpftdbh [empty] = NA + datum$cbal12moistpftdbh [empty] = NA + datum$cbarelpftdbh [empty] = NA + datum$ldroppftdbh [empty] = NA + datum$fsopftdbh [empty] = NA + datum$demandpftdbh [empty] = NA + datum$supplypftdbh [empty] = NA + datum$mortpftdbh [empty] = NA + datum$agemortpftdbh [empty] = NA + datum$ncbmortpftdbh [empty] = NA + datum$tfallmortpftdbh [empty] = NA + datum$coldmortpftdbh [empty] = NA + datum$distmortpftdbh [empty] = NA + datum$growthpftdbh [empty] = NA + datum$plresppftdbh [empty] = NA + datum$bstorepftdbh [empty] = NA + datum$hflxlcpftdbh [empty] = NA + datum$wflxlcpftdbh [empty] = NA + datum$transppftdbh [empty] = NA + datum$i.gpppftdbh [empty] = NA + datum$i.npppftdbh [empty] = NA + datum$i.plresppftdbh [empty] = NA + datum$i.mcopftdbh [empty] = NA + datum$i.cbapftdbh [empty] = NA + datum$i.cbalightpftdbh [empty] = NA + datum$i.cbamoistpftdbh [empty] = NA + datum$i.cbal12lightpftdbh[empty] = NA + datum$i.cbam12lightpftdbh[empty] = NA + datum$i.transppftdbh [empty] = NA + datum$i.wflxlcpftdbh [empty] = NA + datum$i.hflxlcpftdbh [empty] = NA + datum$nplantpftdbh [empty] = NA #---------------------------------------------------------------------------------------# diff --git a/ED/Template/Template/plot_yearly.r b/ED/Template/Template/plot_yearly.r index 1fdd797cf..e472f01ec 100644 --- a/ED/Template/Template/plot_yearly.r +++ b/ED/Template/Template/plot_yearly.r @@ -294,82 +294,119 @@ for (place in myplaces){ #---------------------------------------------------------------------------------------# cat (" - Finding the annual statistics for multi-dimensional variables...","\n") cat (" * Aggregating the annual mean of PFT-DBH variables...","\n") - datum$agbpftdbh = qapply(X=datum$agbpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$basareapftdbh = qapply(X=datum$basareapftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$laipftdbh = qapply(X=datum$laipftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$waipftdbh = qapply(X=datum$waipftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$taipftdbh = qapply(X=datum$taipftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$gpppftdbh = qapply(X=datum$gpppftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$npppftdbh = qapply(X=datum$npppftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$mcopftdbh = qapply(X=datum$mcopftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$cbapftdbh = qapply(X=datum$cbapftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$cbalightpftdbh = qapply(X=datum$cbalightpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$cbamoistpftdbh = qapply(X=datum$cbamoistpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$cbarelpftdbh = qapply(X=datum$cbarelpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$ldroppftdbh = qapply(X=datum$ldroppftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$fsopftdbh = qapply(X=datum$fsopftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$demandpftdbh = qapply(X=datum$demandpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$supplypftdbh = qapply(X=datum$supplypftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$nplantpftdbh = qapply(X=datum$nplantpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$mortpftdbh = qapply(X=datum$mortpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$agemortpftdbh = qapply(X=datum$agemortpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$ncbmortpftdbh = qapply(X=datum$ncbmortpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$tfallmortpftdbh = qapply(X=datum$tfallmortpftdbh,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$coldmortpftdbh = qapply(X=datum$coldmortpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$distmortpftdbh = qapply(X=datum$distmortpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$growthpftdbh = qapply(X=datum$growthpftdbh ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) + datum$agbpftdbh = qapply(datum$agbpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$basareapftdbh = qapply(datum$basareapftdbh ,yfac,1,mean,na.rm=TRUE) + datum$laipftdbh = qapply(datum$laipftdbh ,yfac,1,mean,na.rm=TRUE) + datum$waipftdbh = qapply(datum$waipftdbh ,yfac,1,mean,na.rm=TRUE) + datum$taipftdbh = qapply(datum$taipftdbh ,yfac,1,mean,na.rm=TRUE) + datum$gpppftdbh = qapply(datum$gpppftdbh ,yfac,1,mean,na.rm=TRUE) + datum$npppftdbh = qapply(datum$npppftdbh ,yfac,1,mean,na.rm=TRUE) + datum$mcopftdbh = qapply(datum$mcopftdbh ,yfac,1,mean,na.rm=TRUE) + datum$cbapftdbh = qapply(datum$cbapftdbh ,yfac,1,mean,na.rm=TRUE) + datum$cbalightpftdbh = qapply(datum$cbalightpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$cbamoistpftdbh = qapply(datum$cbamoistpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$cbal12lightpftdbh = qapply(datum$cbal12lightpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$cbal12moistpftdbh = qapply(datum$cbal12moistpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$cbarelpftdbh = qapply(datum$cbarelpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$ldroppftdbh = qapply(datum$ldroppftdbh ,yfac,1,mean,na.rm=TRUE) + datum$fsopftdbh = qapply(datum$fsopftdbh ,yfac,1,mean,na.rm=TRUE) + datum$demandpftdbh = qapply(datum$demandpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$supplypftdbh = qapply(datum$supplypftdbh ,yfac,1,mean,na.rm=TRUE) + datum$nplantpftdbh = qapply(datum$nplantpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$mortpftdbh = qapply(datum$mortpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$agemortpftdbh = qapply(datum$agemortpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$ncbmortpftdbh = qapply(datum$ncbmortpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$tfallmortpftdbh = qapply(datum$tfallmortpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$coldmortpftdbh = qapply(datum$coldmortpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$distmortpftdbh = qapply(datum$distmortpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$growthpftdbh = qapply(datum$growthpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$plresppftdbh = qapply(datum$plresppftdbh ,yfac,1,mean,na.rm=TRUE) + datum$bstorepftdbh = qapply(datum$bstorepftdbh ,yfac,1,mean,na.rm=TRUE) + datum$hflxlcpftdbh = qapply(datum$hflxlcpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$wflxlcpftdbh = qapply(datum$wflxlcpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$transppftdbh = qapply(datum$transppftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.gpppftdbh = qapply(datum$i.gpppftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.npppftdbh = qapply(datum$i.npppftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.plresppftdbh = qapply(datum$i.plresppftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.mcopftdbh = qapply(datum$i.mcopftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.cbapftdbh = qapply(datum$i.cbapftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.cbalightpftdbh = qapply(datum$i.cbalightpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.cbamoistpftdbh = qapply(datum$i.cbamoistpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.cbal12lightpftdbh = qapply(datum$i.cbal12lightpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.cbal12moistpftdbh = qapply(datum$i.cbal12moistpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.transppftdbh = qapply(datum$i.transppftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.wflxlcpftdbh = qapply(datum$i.wflxlcpftdbh ,yfac,1,mean,na.rm=TRUE) + datum$i.hflxlcpftdbh = qapply(datum$i.hflxlcpftdbh ,yfac,1,mean,na.rm=TRUE) #----- PFT arrays. The "+1" column contains the total. -------------------------------# cat (" * Aggregating the annual mean of PFT variables...","\n") - datum$agbpft = qapply(X=datum$agbpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$bseedspft = qapply(X=datum$bseedspft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$nplantpft = qapply(X=datum$nplantpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$laipft = qapply(X=datum$laipft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$waipft = qapply(X=datum$waipft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$taipft = qapply(X=datum$taipft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$gpppft = qapply(X=datum$gpppft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$npppft = qapply(X=datum$npppft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$mcopft = qapply(X=datum$mcopft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$cbapft = qapply(X=datum$cbapft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$cbalightpft = qapply(X=datum$cbalightpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$cbamoistpft = qapply(X=datum$cbamoistpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$cbarelpft = qapply(X=datum$cbarelpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$ldroppft = qapply(X=datum$ldroppft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$fsopft = qapply(X=datum$fsopft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$balivepft = qapply(X=datum$balivepft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$bdeadpft = qapply(X=datum$bdeadpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$bleafpft = qapply(X=datum$bleafpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$brootpft = qapply(X=datum$brootpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$bswoodpft = qapply(X=datum$bswoodpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$bstorepft = qapply(X=datum$bstorepft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$basareapft = qapply(X=datum$basareapft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$leafresppft = qapply(X=datum$leafresppft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$rootresppft = qapply(X=datum$rootresppft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$growthresppft = qapply(X=datum$growthresppft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$mortpft = qapply(X=datum$mortpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$agemortpft = qapply(X=datum$agemortpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$ncbmortpft = qapply(X=datum$ncbmortpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$tfallmortpft = qapply(X=datum$tfallmortpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$coldmortpft = qapply(X=datum$coldmortpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$distmortpft = qapply(X=datum$distmortpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$recrpft = qapply(X=datum$recrpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$growthpft = qapply(X=datum$growthpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$censusnplantpft = qapply(X=datum$censusnplantpft,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$censuslaipft = qapply(X=datum$censuslaipft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$censuswaipft = qapply(X=datum$censuswaipft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$censustaipft = qapply(X=datum$censustaipft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$censusagbpft = qapply(X=datum$censusagbpft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$censusbapft = qapply(X=datum$censusbapft ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) + datum$agbpft = qapply(datum$agbpft ,yfac,1,mean,na.rm=TRUE) + datum$bseedspft = qapply(datum$bseedspft ,yfac,1,mean,na.rm=TRUE) + datum$nplantpft = qapply(datum$nplantpft ,yfac,1,mean,na.rm=TRUE) + datum$laipft = qapply(datum$laipft ,yfac,1,mean,na.rm=TRUE) + datum$waipft = qapply(datum$waipft ,yfac,1,mean,na.rm=TRUE) + datum$taipft = qapply(datum$taipft ,yfac,1,mean,na.rm=TRUE) + datum$gpppft = qapply(datum$gpppft ,yfac,1,mean,na.rm=TRUE) + datum$npppft = qapply(datum$npppft ,yfac,1,mean,na.rm=TRUE) + datum$mcopft = qapply(datum$mcopft ,yfac,1,mean,na.rm=TRUE) + datum$cbapft = qapply(datum$cbapft ,yfac,1,mean,na.rm=TRUE) + datum$cbalightpft = qapply(datum$cbalightpft ,yfac,1,mean,na.rm=TRUE) + datum$cbamoistpft = qapply(datum$cbamoistpft ,yfac,1,mean,na.rm=TRUE) + datum$cbal12lightpft = qapply(datum$cbal12lightpft ,yfac,1,mean,na.rm=TRUE) + datum$cbal12moistpft = qapply(datum$cbal12moistpft ,yfac,1,mean,na.rm=TRUE) + datum$cbarelpft = qapply(datum$cbarelpft ,yfac,1,mean,na.rm=TRUE) + datum$ldroppft = qapply(datum$ldroppft ,yfac,1,mean,na.rm=TRUE) + datum$fsopft = qapply(datum$fsopft ,yfac,1,mean,na.rm=TRUE) + datum$balivepft = qapply(datum$balivepft ,yfac,1,mean,na.rm=TRUE) + datum$bdeadpft = qapply(datum$bdeadpft ,yfac,1,mean,na.rm=TRUE) + datum$bleafpft = qapply(datum$bleafpft ,yfac,1,mean,na.rm=TRUE) + datum$brootpft = qapply(datum$brootpft ,yfac,1,mean,na.rm=TRUE) + datum$bswoodpft = qapply(datum$bswoodpft ,yfac,1,mean,na.rm=TRUE) + datum$bstorepft = qapply(datum$bstorepft ,yfac,1,mean,na.rm=TRUE) + datum$basareapft = qapply(datum$basareapft ,yfac,1,mean,na.rm=TRUE) + datum$leafresppft = qapply(datum$leafresppft ,yfac,1,mean,na.rm=TRUE) + datum$rootresppft = qapply(datum$rootresppft ,yfac,1,mean,na.rm=TRUE) + datum$growthresppft = qapply(datum$growthresppft ,yfac,1,mean,na.rm=TRUE) + datum$plresppft = qapply(datum$plresppft ,yfac,1,mean,na.rm=TRUE) + datum$hflxlcpft = qapply(datum$hflxlcpft ,yfac,1,mean,na.rm=TRUE) + datum$wflxlcpft = qapply(datum$wflxlcpft ,yfac,1,mean,na.rm=TRUE) + datum$transppft = qapply(datum$transppft ,yfac,1,mean,na.rm=TRUE) + datum$i.gpppft = qapply(datum$i.gpppft ,yfac,1,mean,na.rm=TRUE) + datum$i.npppft = qapply(datum$i.npppft ,yfac,1,mean,na.rm=TRUE) + datum$i.plresppft = qapply(datum$i.plresppft ,yfac,1,mean,na.rm=TRUE) + datum$i.mcopft = qapply(datum$i.mcopft ,yfac,1,mean,na.rm=TRUE) + datum$i.cbapft = qapply(datum$i.cbapft ,yfac,1,mean,na.rm=TRUE) + datum$i.cbalightpft = qapply(datum$i.cbalightpft ,yfac,1,mean,na.rm=TRUE) + datum$i.cbamoistpft = qapply(datum$i.cbamoistpft ,yfac,1,mean,na.rm=TRUE) + datum$i.cbal12lightpft = qapply(datum$i.cbal12lightpft ,yfac,1,mean,na.rm=TRUE) + datum$i.cbal12moistpft = qapply(datum$i.cbal12moistpft ,yfac,1,mean,na.rm=TRUE) + datum$i.transppft = qapply(datum$i.transppft ,yfac,1,mean,na.rm=TRUE) + datum$i.wflxlcpft = qapply(datum$i.wflxlcpft ,yfac,1,mean,na.rm=TRUE) + datum$i.hflxlcpft = qapply(datum$i.hflxlcpft ,yfac,1,mean,na.rm=TRUE) + datum$mortpft = qapply(datum$mortpft ,yfac,1,mean,na.rm=TRUE) + datum$agemortpft = qapply(datum$agemortpft ,yfac,1,mean,na.rm=TRUE) + datum$ncbmortpft = qapply(datum$ncbmortpft ,yfac,1,mean,na.rm=TRUE) + datum$tfallmortpft = qapply(datum$tfallmortpft ,yfac,1,mean,na.rm=TRUE) + datum$coldmortpft = qapply(datum$coldmortpft ,yfac,1,mean,na.rm=TRUE) + datum$distmortpft = qapply(datum$distmortpft ,yfac,1,mean,na.rm=TRUE) + datum$recrpft = qapply(datum$recrpft ,yfac,1,mean,na.rm=TRUE) + datum$growthpft = qapply(datum$growthpft ,yfac,1,mean,na.rm=TRUE) + datum$censusnplantpft = qapply(datum$censusnplantpft ,yfac,1,mean,na.rm=TRUE) + datum$censuslaipft = qapply(datum$censuslaipft ,yfac,1,mean,na.rm=TRUE) + datum$censuswaipft = qapply(datum$censuswaipft ,yfac,1,mean,na.rm=TRUE) + datum$censustaipft = qapply(datum$censustaipft ,yfac,1,mean,na.rm=TRUE) + datum$censusagbpft = qapply(datum$censusagbpft ,yfac,1,mean,na.rm=TRUE) + datum$censusbapft = qapply(datum$censusbapft ,yfac,1,mean,na.rm=TRUE) #----- LU arrays. The "+1" column contains the total. --------------------------------# cat (" * Aggregating the annual mean of LU variables...","\n") - datum$agblu = qapply(X=datum$agblu ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$lailu = qapply(X=datum$lailu ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$gpplu = qapply(X=datum$gpplu ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$npplu = qapply(X=datum$npplu ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$arealu = qapply(X=datum$arealu ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) - datum$basarealu = qapply(X=datum$basarealu ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) + datum$agblu = qapply(datum$agblu ,yfac,1,mean,na.rm=TRUE) + datum$lailu = qapply(datum$lailu ,yfac,1,mean,na.rm=TRUE) + datum$gpplu = qapply(datum$gpplu ,yfac,1,mean,na.rm=TRUE) + datum$npplu = qapply(datum$npplu ,yfac,1,mean,na.rm=TRUE) + datum$arealu = qapply(datum$arealu ,yfac,1,mean,na.rm=TRUE) + datum$basarealu = qapply(datum$basarealu ,yfac,1,mean,na.rm=TRUE) #----- Miscellaneous arrays. -----------------------------------------------------------# cat (" * Aggregating the annual mean of DIST variables...","\n") - datum$dist = qapply(X=datum$dist ,DIM=1,INDEX=yfac,FUN=mean,na.rm=T) + datum$dist = qapply(datum$dist ,yfac,1,mean,na.rm=TRUE) #---------------------------------------------------------------------------------------# @@ -703,30 +740,49 @@ for (place in myplaces){ # at any given time. # #---------------------------------------------------------------------------------------# empty = datum$nplantpftdbh == 0 - datum$agbpftdbh [empty] = NA - datum$basareapftdbh [empty] = NA - datum$laipftdbh [empty] = NA - datum$waipftdbh [empty] = NA - datum$taipftdbh [empty] = NA - datum$gpppftdbh [empty] = NA - datum$npppftdbh [empty] = NA - datum$mcopftdbh [empty] = NA - datum$cbapftdbh [empty] = NA - datum$cbalightpftdbh [empty] = NA - datum$cbamoistpftdbh [empty] = NA - datum$cbarelpftdbh [empty] = NA - datum$ldroppftdbh [empty] = NA - datum$fsopftdbh [empty] = NA - datum$demandpftdbh [empty] = NA - datum$supplypftdbh [empty] = NA - datum$mortpftdbh [empty] = NA - datum$agemortpftdbh [empty] = NA - datum$ncbmortpftdbh [empty] = NA - datum$tfallmortpftdbh [empty] = NA - datum$coldmortpftdbh [empty] = NA - datum$distmortpftdbh [empty] = NA - datum$growthpftdbh [empty] = NA - datum$nplantpftdbh [empty] = NA + datum$agbpftdbh [empty] = NA + datum$basareapftdbh [empty] = NA + datum$laipftdbh [empty] = NA + datum$waipftdbh [empty] = NA + datum$taipftdbh [empty] = NA + datum$gpppftdbh [empty] = NA + datum$npppftdbh [empty] = NA + datum$mcopftdbh [empty] = NA + datum$cbapftdbh [empty] = NA + datum$cbalightpftdbh [empty] = NA + datum$cbamoistpftdbh [empty] = NA + datum$cbal12lightpftdbh [empty] = NA + datum$cbal12moistpftdbh [empty] = NA + datum$cbarelpftdbh [empty] = NA + datum$ldroppftdbh [empty] = NA + datum$fsopftdbh [empty] = NA + datum$demandpftdbh [empty] = NA + datum$supplypftdbh [empty] = NA + datum$mortpftdbh [empty] = NA + datum$agemortpftdbh [empty] = NA + datum$ncbmortpftdbh [empty] = NA + datum$tfallmortpftdbh [empty] = NA + datum$coldmortpftdbh [empty] = NA + datum$distmortpftdbh [empty] = NA + datum$growthpftdbh [empty] = NA + datum$plresppftdbh [empty] = NA + datum$bstorepftdbh [empty] = NA + datum$hflxlcpftdbh [empty] = NA + datum$wflxlcpftdbh [empty] = NA + datum$transppftdbh [empty] = NA + datum$i.gpppftdbh [empty] = NA + datum$i.npppftdbh [empty] = NA + datum$i.plresppftdbh [empty] = NA + datum$i.mcopftdbh [empty] = NA + datum$i.cbapftdbh [empty] = NA + datum$i.cbalightpftdbh [empty] = NA + datum$i.cbamoistpftdbh [empty] = NA + datum$i.cbal12lightpftdbh[empty] = NA + datum$i.cbal12moistpftdbh[empty] = NA + datum$i.transppftdbh [empty] = NA + datum$i.wflxlcpftdbh [empty] = NA + datum$i.hflxlcpftdbh [empty] = NA + datum$nplantpftdbh [empty] = NA #---------------------------------------------------------------------------------------# diff --git a/ED/Template/compare_results.r b/ED/Template/compare_results.r index fe1c1479c..807162ad0 100644 --- a/ED/Template/compare_results.r +++ b/ED/Template/compare_results.r @@ -16,24 +16,24 @@ graphics.off() #------------------------------------------------------------------------------------------# here = getwd() # Current directory srcdir = "/n/moorcroft_data/mlongo/util/Rsc" # Script directory -outroot = paste(here,"sizepft_comp",sep="/") # Output directory +outroot = paste(here,"twostream_comp",sep="/") # Output directory sites = c("gyf","cax","m34","s67","s77","s83","ban","pnz","rja","fns","pdg") simul = list() -simul[[1]] = list( name = "pft02_canrad01_sas" - , desc = "2 PFTs + SAS" +simul[[1]] = list( name = "pft00_canrad00_sas" + , desc = "Medvigy + SAS" , colour = "chartreuse" )#end list simul[[2]] = list( name = "pft00_canrad01_sas" - , desc = "5 PFTs + SAS" + , desc = "Zhao-Qualls + SAS" , colour = "chartreuse4" )#end list -simul[[3]] = list( name = "pft02_canrad01_ble" - , desc = "2 PFTs + Big Leaf" +simul[[3]] = list( name = "pft00_canrad00_ble" + , desc = "Medvigy + Big Leaf" , colour = "darkorange" )#end list simul[[4]] = list( name = "pft00_canrad01_ble" - , desc = "5 PFTs + Big Leaf" + , desc = "Zhao-Qualls + Big Leaf" , colour = "firebrick" )#end list #------------------------------------------------------------------------------------------# @@ -93,6 +93,7 @@ compvar[[ 1]] = list( vnam = "hflxca" , col.obser = c("grey42","grey21") , col.model = c("orange1","chocolate4") , leg.corner = "topleft" + , sunvar = FALSE )#end list compvar[[ 2]] = list( vnam = "wflxca" , desc = "Water vapour flux" @@ -100,6 +101,7 @@ compvar[[ 2]] = list( vnam = "wflxca" , col.obser = c("grey42","grey21") , col.model = c("deepskyblue","royalblue4") , leg.corner = "topleft" + , sunvar = FALSE )#end list compvar[[ 3]] = list( vnam = "cflxca" , desc = "Carbon dioxide flux" @@ -107,6 +109,7 @@ compvar[[ 3]] = list( vnam = "cflxca" , col.obser = c("grey42","grey21") , col.model = c("chartreuse2","darkgreen") , leg.corner = "bottomright" + , sunvar = FALSE )#end list compvar[[ 4]] = list( vnam = "cflxst" , desc = "Carbon dioxide storage" @@ -114,6 +117,7 @@ compvar[[ 4]] = list( vnam = "cflxst" , col.obser = c("grey42","grey21") , col.model = c("lightgoldenrod3","darkorange1") , leg.corner = "topleft" + , sunvar = FALSE )#end list compvar[[ 5]] = list( vnam = "gpp" , desc = "Gross primary productivity" @@ -121,6 +125,7 @@ compvar[[ 5]] = list( vnam = "gpp" , col.obser = c("grey42","grey21") , col.model = c("green3","darkgreen") , leg.corner = "topleft" + , sunvar = TRUE )#end list compvar[[ 6]] = list( vnam = "reco" , desc = "Ecosystem respiration" @@ -128,6 +133,7 @@ compvar[[ 6]] = list( vnam = "reco" , col.obser = c("grey42","grey21") , col.model = c("yellow3","peru") , leg.corner = "topleft" + , sunvar = FALSE )#end list compvar[[ 7]] = list( vnam = "nep" , desc = "Net ecosystem productivity" @@ -135,6 +141,7 @@ compvar[[ 7]] = list( vnam = "nep" , col.obser = c("grey42","grey21") , col.model = c("olivedrab2","darkolivegreen4") , leg.corner = "topleft" + , sunvar = FALSE )#end list compvar[[ 8]] = list( vnam = "nee" , desc = "Net ecosystem exchange" @@ -142,6 +149,7 @@ compvar[[ 8]] = list( vnam = "nee" , col.obser = c("grey42","grey21") , col.model = c("chartreuse","chartreuse4") , leg.corner = "bottomright" + , sunvar = FALSE )#end list compvar[[ 9]] = list( vnam = "ustar" , desc = "Friction velocity" @@ -149,6 +157,7 @@ compvar[[ 9]] = list( vnam = "ustar" , col.obser = c("grey42","grey21") , col.model = c("mediumpurple1","purple4") , leg.corner = "topleft" + , sunvar = FALSE )#end list compvar[[10]] = list( vnam = "rlongup" , desc = "Outgoing longwave radiation" @@ -156,6 +165,7 @@ compvar[[10]] = list( vnam = "rlongup" , col.obser = c("grey42","grey21") , col.model = c("gold","orangered") , leg.corner = "topleft" + , sunvar = FALSE )#end list compvar[[11]] = list( vnam = "rnet" , desc = "Net radiation" @@ -163,6 +173,7 @@ compvar[[11]] = list( vnam = "rnet" , col.obser = c("grey42","grey21") , col.model = c("gold","orangered") , leg.corner = "topleft" + , sunvar = FALSE )#end list compvar[[12]] = list( vnam = "albedo" , desc = "Albedo" @@ -170,6 +181,7 @@ compvar[[12]] = list( vnam = "albedo" , col.obser = c("grey42","grey21") , col.model = c("orange1","chocolate4") , leg.corner = "topleft" + , sunvar = TRUE )#end list compvar[[13]] = list( vnam = "parup" , desc = "Outgoing PAR" @@ -177,6 +189,7 @@ compvar[[13]] = list( vnam = "parup" , col.obser = c("grey42","grey21") , col.model = c("chartreuse4","darkolivegreen1") , leg.corner = "topleft" + , sunvar = TRUE )#end list compvar[[14]] = list( vnam = "rshortup" , desc = "Outgoing shortwave radiation" @@ -184,6 +197,7 @@ compvar[[14]] = list( vnam = "rshortup" , col.obser = c("grey42","grey21") , col.model = c("royalblue4","deepskyblue") , leg.corner = "topleft" + , sunvar = TRUE )#end list #------------------------------------------------------------------------------------------# @@ -254,22 +268,19 @@ good[[ 3]] = list( vnam = "r.squared" good[[ 4]] = list( vnam = "fvue" , desc = "Fraction of variability unexplained" )#end list -good[[ 5]] = list( vnam = "sw.p.value" - , desc = "Shapiro-Wilk p-value" - )#end list -good[[ 6]] = list( vnam = "sw.stat" +good[[ 5]] = list( vnam = "sw.stat" , desc = "Shapiro-Wilk statistic" )#end list -good[[ 7]] = list( vnam = "ks.stat" +good[[ 6]] = list( vnam = "ks.stat" , desc = "Kolmogorov-Smirnov statistic" )#end list -good[[ 8]] = list( vnam = "lsq.lnlike" +good[[ 7]] = list( vnam = "lsq.lnlike" , desc = "Scaled support based on least squares" )#end list -good[[ 9]] = list( vnam = "sn.lnlike" +good[[ 8]] = list( vnam = "sn.lnlike" , desc = "Scaled support based on skew normal distribution" )#end list -good[[10]] = list( vnam = "norm.lnlike" +good[[ 9]] = list( vnam = "norm.lnlike" , desc = "Scaled support based on normal distribution" )#end list #------------------------------------------------------------------------------------------# @@ -402,9 +413,11 @@ performance = array( data = NA )#end array for (v in 1:ncompvar){ #----- Copy the variable information. --------------------------------------------------# - this.vnam = compvar[[v]]$vnam - this.desc = compvar[[v]]$desc - this.unit = compvar[[v]]$unit + this.vnam = compvar[[v]]$vnam + this.desc = compvar[[v]]$desc + this.unit = compvar[[v]]$unit + this.sun = compvar[[v]]$sunvar + this.measured = paste("measured",this.vnam,sep=".") cat(" - ",this.desc,"...","\n") #---------------------------------------------------------------------------------------# @@ -430,14 +443,14 @@ for (v in 1:ncompvar){ #----- Create some variables to describe season and time of the day. ----------------# - if (! "season" %in% names(obs)) obs$season = season(obs$when) + if (! "season" %in% names(obs)) obs$season = season(obs$when,add.year=FALSE) if (! "diel" %in% names(obs)) obs$diel = (! obs$nighttime) + obs$highsun #------------------------------------------------------------------------------------# - #----- Find out when this output variable is finite. --------------------------------# - p.sel = is.finite(obs[[this.vnam]]) + #----- Find out when this output variable is finite and measured. -------------------# + p.sel = is.finite(obs[[this.vnam]]) & obs[[this.measured]] #------------------------------------------------------------------------------------# @@ -456,8 +469,10 @@ for (v in 1:ncompvar){ for (d in 1:ndiel){ #----- Select this diel (or everything for all day). --------------------------# d.sel = obs$diel == (d-1) | d == ndiel + d.sel = d.sel & ((! this.sun) | obs$highsun) #------------------------------------------------------------------------------# + #------------------------------------------------------------------------------# # Combine the selections. # #------------------------------------------------------------------------------# @@ -491,9 +506,9 @@ for (v in 1:ncompvar){ input.score[d,e,ncontrol,p] = mean(input.score[d,e,1:(ncontrol-1),p],na.rm=TRUE) output.nobs[d,e,p] = sum(sel,na.rm=TRUE) #------------------------------------------------------------------------------# - }#end for + }#end for (d in 1:ndiel) #---------------------------------------------------------------------------------# - }#end for + }#end for (e in 1:nseason) #------------------------------------------------------------------------------------# }#end for (p in 1:nsites) #---------------------------------------------------------------------------------------# @@ -524,6 +539,9 @@ for (v in 1:ncompvar){ # Loop over all sites and simulations, and grab the data. # #---------------------------------------------------------------------------------------# for (g in 1:ngood){ + nobs.good = output.nobs + + this.good = good[[g]]$vnam desc.good = good[[g]]$desc cat (" * ",desc.good,"\n") @@ -548,19 +566,15 @@ for (v in 1:ncompvar){ for (s in 1:nsimul){ colstat[s,p] = simul[[s]]$colour this = res[[iata]]$sim[[s]][[this.vnam]][[this.good]] - for (e in 1:nseason){ - use.season = paste(sprintf("%2.2i",e),season.key[e],sep="-") - for (d in 1:ndiel){ - if (is.finite(this[diel.key[d],use.season])){ - stat[d,e,s,p] = this[diel.key[d],use.season] - }#end if - }#end for - #---------------------------------------------------------------------------# - }#end for - #------------------------------------------------------------------------------# + + use.season = paste(sprintf("%2.2i",sequence(nseason)),season.key,sep="-") + stat[,,s,p] = this[diel.key,use.season] }#end for #---------------------------------------------------------------------------------# }#end for + bye = apply(X=(! is.finite(stat)),MARGIN=c(1,2,4),FUN=sum,na.rm=TRUE) + bye = bye != 0 + nobs.good[bye] = -1 #------------------------------------------------------------------------------------# @@ -575,6 +589,10 @@ for (v in 1:ncompvar){ for (s in 1:nsimul){ stat[,,s,] = 100. * ( (stat.orig[,,s,] - stat.max)/ (stat.max - stat.min) ) }#end for + }else if(this.good %in% "r.squared"){ + orig.stat = stat + sel = is.finite(stat) & stat < -1 + stat[sel] = -1 }#end if #------------------------------------------------------------------------------------# @@ -593,8 +611,9 @@ for (v in 1:ncompvar){ xat = seq(from=0,to=(nsites-1)*(nsimul+1),by=nsimul+1)+1+0.5*nsimul xlines = seq(from=0,to=nsites*(nsimul+1),by=nsimul+1)+0.5 if (this.good %in% c("r.squared")){ - y.nobs = 0.90 - ylimit = c(-1,1) + y.nobs = 1.10 + y.r2 = -1.10 + ylimit = c(-1.2,1.2) }else{ ylimit = range(stat[d,,,],na.rm=TRUE) if ( any(! is.finite(ylimit)) || (ylimit[1] == ylimit[2] && ylimit[1] == 0)){ @@ -644,10 +663,9 @@ for (v in 1:ncompvar){ #------------------------------------------------------------------------------# par.orig = par(no.readonly = TRUE) mar.orig = par.orig$mar - par(oma = c(0,3,3,0)) - h = 0.4 * par("csi") * 2.54 + par(oma = c(0.2,3,4,0)) layout(mat = rbind(1+lo.box$mat,rep(1,times=lo.box$ncol)) - ,height = c(rep(1,times=lo.box$nrow),h) + ,height = c(rep(5/lo.box$nrow,times=lo.box$nrow),1) )#end layout #------------------------------------------------------------------------------# @@ -692,8 +710,7 @@ for (v in 1:ncompvar){ #---------------------------------------------------------------------------# # Order the sites by amount of information. # #---------------------------------------------------------------------------# - nobs = output.nobs[d,e,] - op = order(nobs) + op = order(nobs.good[d,e,],na.last=FALSE) #---------------------------------------------------------------------------# @@ -714,9 +731,14 @@ for (v in 1:ncompvar){ #---------------------------------------------------------------------------# # Add the bar plot. # #---------------------------------------------------------------------------# - barplot(height=stat[d,e,,op],col=colstat,beside=TRUE,border="grey22" - ,add=TRUE,axes=FALSE,axisnames=FALSE,xpd=FALSE) - text (x=xat,y=y.nobs,labels=nobs[op],cex=0.7) + xbp = barplot(height=stat[d,e,,op],col=colstat,beside=TRUE,border="grey22" + ,add=TRUE,axes=FALSE,axisnames=FALSE,xpd=FALSE) + text (x=xat,y=y.nobs,labels=nobs.good[d,e,op],cex=0.7) + if (this.good %in% c("r.squared")){ + ybp = y.r2 - 100 * ( orig.stat[d,e,,op] >= -1.0) + text(x=xbp,y=ybp,labels=rep("*",times=length(ybp)) + ,font=2,col="saddlebrown") + }#end if #---------------------------------------------------------------------------# }#end for @@ -773,8 +795,8 @@ for (v in 1:ncompvar){ }#end if lex = "Sites" #----- Order the sites by amount of information. --------------------------------# - nobs = output.nobs[d,nseason,] - op = order(nobs) + nobs = nobs.good[d,nseason,] + op = order(nobs,na.last=FALSE) #----- Loop over all formats. ----------------------------------------------------# for (o in 1:nout){ #----- Make the file name. ----------------------------------------------------# @@ -802,14 +824,13 @@ for (v in 1:ncompvar){ #------------------------------------------------------------------------------# par.orig = par(no.readonly = TRUE) mar.orig = par.orig$mar - h = 0.4 * par("csi") * 2.54 - layout(mat = rbind(2,1), height = c(1,h)) + layout(mat = rbind(2,1), height = c(5,1)) #------------------------------------------------------------------------------# #----- Plot legend. -----------------------------------------------------------# - par(mar=c(1.1,4.1,0.1,4.1)) + par(mar=c(0.1,4.1,0.1,4.1)) plot.new() plot.window(xlim=c(0,1),ylim=c(0,1),xaxt="n",yaxt="n") legend ( x = "top" @@ -849,7 +870,11 @@ for (v in 1:ncompvar){ #------------------------------------------------------------------------------# barplot(height=stat[d,nseason,,op],col=colstat,beside=TRUE,border="grey22" ,add=TRUE,axes=FALSE,axisnames=FALSE,xpd=FALSE) - text(x=xat,y=y.nobs,labels=nobs[op]) + text(x=xat,y=y.nobs,labels=nobs.good[d,nseason,op],cex=0.9,col="grey22") + if (this.good %in% c("r.squared")){ + ybp = y.r2 - 100 * ( orig.stat[d,nseason,,op] >= -1.0) + text(x=xbp,y=ybp,labels=rep("*",times=length(ybp)),font=2,col="saddlebrown") + }#end if #------------------------------------------------------------------------------# @@ -945,10 +970,9 @@ for (v in 1:ncompvar){ #---------------------------------------------------------------------------# par.orig = par(no.readonly = TRUE) mar.orig = par.orig$mar - par(oma = c(0,3,3,0)) - h = 0.4 * par("csi") * 2.54 + par(oma = c(0.2,3,4,0)) layout(mat = rbind(1+lo.box$mat,rep(1,times=lo.box$ncol)) - ,height = c(rep(1,times=lo.box$nrow),h) + ,height = c(rep(5/lo.box$nrow,times=lo.box$nrow),1) )#end layout #---------------------------------------------------------------------------# @@ -1097,14 +1121,13 @@ for (v in 1:ncompvar){ #---------------------------------------------------------------------------# par.orig = par(no.readonly = TRUE) mar.orig = par.orig$mar - h = 0.4 * par("csi") * 2.54 - layout(mat=rbind(2,1),height=c(1,h)) + layout(mat=rbind(2,1),height=c(5,1)) #---------------------------------------------------------------------------# #----- Plot legend. --------------------------------------------------------# - par(mar=c(1.1,4.1,0.1,4.1)) + par(mar=c(0.1,4.1,0.1,4.1)) plot.new() plot.window(xlim=c(0,1),ylim=c(0,1),xaxt="n",yaxt="n") legend ( x = "top" @@ -1115,7 +1138,7 @@ for (v in 1:ncompvar){ , bg = "white" , ncol = min(3,pretty.box(nsimul)$ncol) , title = expression(bold("Simulation")) - , cex = 0.7 + , cex = 1.0 )#end legend #---------------------------------------------------------------------------# @@ -1174,7 +1197,7 @@ for (v in 1:ncompvar){ for (s in 1:nsimul){ performance[v,g,s] = weighted.mean( x = stat [,,s ,] , w = input.score[,,ncontrol,] - * output.nobs[,, ] + * nobs.good [,, ] , na.rm = TRUE )#end weighted.mean }#end for diff --git a/ED/Template/epost.sh b/ED/Template/epost.sh index 45e0ef2c1..ae413b822 100755 --- a/ED/Template/epost.sh +++ b/ED/Template/epost.sh @@ -5,7 +5,7 @@ diskthere='/n/moorcroftfs2' # ! Disk where the output files are thisqueue='moorcroft_6100b' # ! Queue where jobs should be submitted lonlat=${here}'/joborder.txt' # ! File with the job instructions #----- Outroot is the main output directory. ----------------------------------------------# -outroot='/n/moorcroftfs2/mlongo/diary/final_ed/biophysics/figures/short_term/size+diversity+canturb' +outroot='/n/moorcroftfs2/mlongo/diary/xxxxxxxx/figures/xxx_XXX/XXXXXXXXXXX' submit='y' # y = Submit the script; n = Copy the script #----- Plot only one meteorological cycle. ------------------------------------------------# useperiod='t' # Which bounds should I use? (Ignored by plot_eval_ed.r) diff --git a/ED/Template/spawn_poly.sh b/ED/Template/spawn_poly.sh index 0fc433327..9b568b6d9 100755 --- a/ED/Template/spawn_poly.sh +++ b/ED/Template/spawn_poly.sh @@ -703,12 +703,12 @@ do whichscen='unif' elif [ ${iscenario} -gt 1 ] then - let wetter=100+${iscenario} - whichscen='wet'`echo ${wetter} | awk '{print substr($1,2,2)}'` + let wetter=1000+${iscenario} + whichscen='w'`echo ${wetter} | awk '{print substr($1,2,3)}'` elif [ ${iscenario} -lt -1 ] then - let drier=100-${iscenario} - whichscen='dry'`echo ${drier} | awk '{print substr($1,2,2)}'` + let drier=1000-${iscenario} + whichscen='d'`echo ${drier} | awk '{print substr($1,2,3)}'` fi fullscen="${scenariopath}/${whichscen}" #------------------------------------------------------------------------------------# diff --git a/ED/run/ED2IN b/ED/run/ED2IN index ff5d19563..cbb070115 100644 --- a/ED/run/ED2IN +++ b/ED/run/ED2IN @@ -249,8 +249,8 @@ $ED_NL ! Multiple timepoints should not be used in the history files ! ! if you intend to use these for HISTORY runs. ! !---------------------------------------------------------------------------------------! - NL%OUTFAST = 1. - NL%OUTSTATE = 1. + NL%OUTFAST = 0. + NL%OUTSTATE = 0. !---------------------------------------------------------------------------------------! diff --git a/ED/src/dynamics/disturbance.f90 b/ED/src/dynamics/disturbance.f90 index 15e1cb5e2..49f870ac6 100644 --- a/ED/src/dynamics/disturbance.f90 +++ b/ED/src/dynamics/disturbance.f90 @@ -1607,68 +1607,13 @@ subroutine insert_survivors(csite, np, cp, q, area_fac,poly_dest_type,mindbh_har !------------------------------------------------------------------------------! ! Scale the total area based on the new population density and new area. ! - ! We must also rescale all extensive properties from cohorts, since they are ! - ! per unit area and we are effectively changing the area. ! - ! IMPORTANT: Only cohort-level variables that have units per area (m2) should ! - ! be rescaled. Variables whose units are per plant should _NOT_ be ! - ! included here. ! !------------------------------------------------------------------------------! - tpatch%lai (nco) = tpatch%lai (nco) * survival_fac - tpatch%wai (nco) = tpatch%wai (nco) * survival_fac - tpatch%nplant (nco) = tpatch%nplant (nco) * survival_fac - tpatch%mean_gpp (nco) = tpatch%mean_gpp (nco) * survival_fac - tpatch%mean_leaf_resp (nco) = tpatch%mean_leaf_resp (nco) * survival_fac - tpatch%mean_root_resp (nco) = tpatch%mean_root_resp (nco) * survival_fac - tpatch%mean_growth_resp (nco) = tpatch%mean_growth_resp (nco) * survival_fac - tpatch%mean_storage_resp (nco) = tpatch%mean_storage_resp (nco) * survival_fac - tpatch%mean_vleaf_resp (nco) = tpatch%mean_vleaf_resp (nco) * survival_fac - tpatch%today_gpp (nco) = tpatch%today_gpp (nco) * survival_fac - tpatch%today_nppleaf (nco) = tpatch%today_nppleaf (nco) * survival_fac - tpatch%today_nppfroot (nco) = tpatch%today_nppfroot (nco) * survival_fac - tpatch%today_nppsapwood (nco) = tpatch%today_nppsapwood (nco) * survival_fac - tpatch%today_nppcroot (nco) = tpatch%today_nppcroot (nco) * survival_fac - tpatch%today_nppseeds (nco) = tpatch%today_nppseeds (nco) * survival_fac - tpatch%today_nppwood (nco) = tpatch%today_nppwood (nco) * survival_fac - tpatch%today_nppdaily (nco) = tpatch%today_nppdaily (nco) * survival_fac - tpatch%today_gpp_pot (nco) = tpatch%today_gpp_pot (nco) * survival_fac - tpatch%today_gpp_lightmax (nco) = tpatch%today_gpp_lightmax(nco) * survival_fac - tpatch%today_gpp_moistmax (nco) = tpatch%today_gpp_moistmax(nco) * survival_fac - tpatch%today_leaf_resp (nco) = tpatch%today_leaf_resp (nco) * survival_fac - tpatch%today_root_resp (nco) = tpatch%today_root_resp (nco) * survival_fac - tpatch%gpp (nco) = tpatch%gpp (nco) * survival_fac - tpatch%leaf_respiration (nco) = tpatch%leaf_respiration (nco) * survival_fac - tpatch%root_respiration (nco) = tpatch%root_respiration (nco) * survival_fac - tpatch%monthly_dndt (nco) = tpatch%monthly_dndt (nco) * survival_fac - tpatch%leaf_water (nco) = tpatch%leaf_water (nco) * survival_fac - tpatch%leaf_hcap (nco) = tpatch%leaf_hcap (nco) * survival_fac - tpatch%leaf_energy (nco) = tpatch%leaf_energy (nco) * survival_fac - tpatch%wood_water (nco) = tpatch%wood_water (nco) * survival_fac - tpatch%wood_hcap (nco) = tpatch%wood_hcap (nco) * survival_fac - tpatch%wood_energy (nco) = tpatch%wood_energy (nco) * survival_fac - !----- Crown area shall not exceed 1. -----------------------------------------! - tpatch%crown_area (nco) = min(1.,tpatch%crown_area(nco) * survival_fac) - !----- Carbon flux monthly means are extensive, we must convert them. ---------! - if (idoutput > 0 .or. imoutput > 0 .or. iqoutput > 0) then - tpatch%dmean_par_l (nco) = tpatch%dmean_par_l (nco) * survival_fac - tpatch%dmean_par_l_beam(nco) = tpatch%dmean_par_l_beam (nco) * survival_fac - tpatch%dmean_par_l_diff(nco) = tpatch%dmean_par_l_diff (nco) * survival_fac - end if - if (imoutput > 0 .or. iqoutput > 0) then - tpatch%mmean_par_l (nco) = tpatch%mmean_par_l (nco) * survival_fac - tpatch%mmean_par_l_beam(nco) = tpatch%mmean_par_l_beam (nco) * survival_fac - tpatch%mmean_par_l_diff(nco) = tpatch%mmean_par_l_diff (nco) * survival_fac - end if - if (iqoutput > 0) then - tpatch%qmean_par_l (:,nco) = tpatch%qmean_par_l (:,nco) & - * survival_fac - tpatch%qmean_par_l_beam(:,nco) = tpatch%qmean_par_l_beam (:,nco) & - * survival_fac - tpatch%qmean_par_l_diff(:,nco) = tpatch%qmean_par_l_diff (:,nco) & - * survival_fac - end if - + call update_cohort_extensive_props(tpatch,nco,nco,survival_fac) + !------------------------------------------------------------------------------! + !----- Make mortality rate due to disturbance zero to avoid double counting. --! tpatch%mort_rate(5,nco) = 0.0 + !------------------------------------------------------------------------------! end if end do cohortloop diff --git a/ED/src/dynamics/hybrid_driver.f90 b/ED/src/dynamics/hybrid_driver.f90 index af1faf900..5d18c3078 100644 --- a/ED/src/dynamics/hybrid_driver.f90 +++ b/ED/src/dynamics/hybrid_driver.f90 @@ -880,6 +880,7 @@ subroutine copy_fb_patch(sourcep, targetp, cpatch) targetp%avg_transp = sourcep%avg_transp targetp%avg_evap = sourcep%avg_evap targetp%avg_rshort_gnd = sourcep%avg_rshort_gnd + targetp%avg_par_gnd = sourcep%avg_par_gnd targetp%avg_rlong_gnd = sourcep%avg_rlong_gnd targetp%avg_sensible_lc = sourcep%avg_sensible_lc targetp%avg_sensible_wc = sourcep%avg_sensible_wc @@ -897,6 +898,19 @@ subroutine copy_fb_patch(sourcep, targetp, cpatch) targetp%avg_smoist_gg(k) = sourcep%avg_smoist_gg(k) targetp%avg_transloss(k) = sourcep%avg_transloss(k) end do + + + do k=1,cpatch%ncohorts + targetp%cav_sensible_lc (k) = sourcep%cav_sensible_lc (k) + targetp%cav_sensible_wc (k) = sourcep%cav_sensible_wc (k) + targetp%cav_vapor_lc (k) = sourcep%cav_vapor_lc (k) + targetp%cav_vapor_wc (k) = sourcep%cav_vapor_wc (k) + targetp%cav_transp (k) = sourcep%cav_transp (k) + targetp%cav_intercepted_al (k) = sourcep%cav_intercepted_al(k) + targetp%cav_intercepted_aw (k) = sourcep%cav_intercepted_aw(k) + targetp%cav_wshed_lg (k) = sourcep%cav_wshed_lg (k) + targetp%cav_wshed_wg (k) = sourcep%cav_wshed_wg (k) + end do end if if (print_detailed) then @@ -912,6 +926,7 @@ subroutine copy_fb_patch(sourcep, targetp, cpatch) targetp%flx_transp = sourcep%flx_transp targetp%flx_evap = sourcep%flx_evap targetp%flx_rshort_gnd = sourcep%flx_rshort_gnd + targetp%flx_par_gnd = sourcep%flx_par_gnd targetp%flx_rlong_gnd = sourcep%flx_rlong_gnd targetp%flx_sensible_lc = sourcep%flx_sensible_lc targetp%flx_sensible_wc = sourcep%flx_sensible_wc @@ -1125,6 +1140,7 @@ subroutine inc_fwd_patch(rkp, inc, fac, cpatch) rkp%avg_drainage = rkp%avg_drainage + fac * inc%avg_drainage rkp%avg_drainage_heat = rkp%avg_drainage_heat + fac * inc%avg_drainage_heat rkp%avg_rshort_gnd = rkp%avg_rshort_gnd + fac * inc%avg_rshort_gnd + rkp%avg_par_gnd = rkp%avg_par_gnd + fac * inc%avg_par_gnd rkp%avg_rlong_gnd = rkp%avg_rlong_gnd + fac * inc%avg_rlong_gnd rkp%avg_sensible_lc = rkp%avg_sensible_lc + fac * inc%avg_sensible_lc rkp%avg_sensible_wc = rkp%avg_sensible_wc + fac * inc%avg_sensible_wc @@ -1141,6 +1157,28 @@ subroutine inc_fwd_patch(rkp, inc, fac, cpatch) rkp%avg_transloss(k) = rkp%avg_transloss(k) + fac * inc%avg_transloss(k) end do + + do k=1,cpatch%ncohorts + rkp%cav_sensible_lc (k) = rkp%cav_sensible_lc (k) & + + fac * inc%cav_sensible_lc (k) + rkp%cav_sensible_wc (k) = rkp%cav_sensible_wc (k) & + + fac * inc%cav_sensible_wc (k) + rkp%cav_vapor_lc (k) = rkp%cav_vapor_lc (k) & + + fac * inc%cav_vapor_lc (k) + rkp%cav_vapor_wc (k) = rkp%cav_vapor_wc (k) & + + fac * inc%cav_vapor_wc (k) + rkp%cav_transp (k) = rkp%cav_transp (k) & + + fac * inc%cav_transp (k) + rkp%cav_intercepted_al(k) = rkp%cav_intercepted_al(k) & + + fac * inc%cav_intercepted_al(k) + rkp%cav_intercepted_aw(k) = rkp%cav_intercepted_aw(k) & + + fac * inc%cav_intercepted_aw(k) + rkp%cav_wshed_lg (k) = rkp%cav_wshed_lg (k) & + + fac * inc%cav_wshed_lg (k) + rkp%cav_wshed_wg (k) = rkp%cav_wshed_wg (k) & + + fac * inc%cav_wshed_wg (k) + end do + end if !---------------------------------------------------------------------------------------! @@ -1164,6 +1202,7 @@ subroutine inc_fwd_patch(rkp, inc, fac, cpatch) rkp%flx_drainage = rkp%flx_drainage + fac * inc%avg_drainage rkp%flx_drainage_heat = rkp%flx_drainage_heat + fac * inc%avg_drainage_heat rkp%flx_rshort_gnd = rkp%flx_rshort_gnd + fac * inc%avg_rshort_gnd + rkp%flx_par_gnd = rkp%flx_par_gnd + fac * inc%avg_par_gnd rkp%flx_rlong_gnd = rkp%flx_rlong_gnd + fac * inc%avg_rlong_gnd rkp%flx_sensible_lc = rkp%flx_sensible_lc + fac * inc%avg_sensible_lc rkp%flx_sensible_wc = rkp%flx_sensible_wc + fac * inc%avg_sensible_wc diff --git a/ED/src/dynamics/multiple_scatter.f90 b/ED/src/dynamics/multiple_scatter.f90 index 484826cf7..9102d2365 100644 --- a/ED/src/dynamics/multiple_scatter.f90 +++ b/ED/src/dynamics/multiple_scatter.f90 @@ -200,9 +200,10 @@ subroutine lw_multiple_scatter(grnd_emis4,grnd_temp4,rlong_top4,ncoh,pft,lai,wai r (0) = 1.d0 r (ncoh+1) = 0.d0 epsil (0) = grnd_emis - omr(:) = 1.d0 - r (:) - omt(:) = 1.d0 - tau (:) - ome(:) = 1.d0 - epsil(:) + epsil(ncoh+1) = 0.d0 + omr(:) = 1.d0 - r (:) + omt(:) = 1.d0 - tau (:) + ome(:) = 1.d0 - epsil(:) !---------------------------------------------------------------------------------------! diff --git a/ED/src/dynamics/radiate_driver.f90 b/ED/src/dynamics/radiate_driver.f90 index 0856fbf10..e57a4cd78 100644 --- a/ED/src/dynamics/radiate_driver.f90 +++ b/ED/src/dynamics/radiate_driver.f90 @@ -221,7 +221,8 @@ subroutine sfcrad_ed(cosz,cosaoi,csite,mzg,mzs,ntext_soil,ncol_soil,maxcohort,tu use consts_coms , only : stefan ! ! intent(in) use ed_max_dims , only : n_pft ! ! intent(in) use allometry , only : h2crownbh ! ! intent(in) - use ed_misc_coms , only : ibigleaf ! ! intent(in) + use ed_misc_coms , only : ibigleaf & ! intent(in) + , radfrq ! ! intent(in) implicit none !----- Arguments. ----------------------------------------------------------------------! @@ -387,6 +388,33 @@ subroutine sfcrad_ed(cosz,cosaoi,csite,mzg,mzs,ntext_soil,ncol_soil,maxcohort,tu !---------------------------------------------------------------------------------------! + + !---------------------------------------------------------------------------------------! + ! Initialise the variables. ! + !---------------------------------------------------------------------------------------! + pft_array (:) = -1 + leaf_temp_array (:) = 0.d0 + wood_temp_array (:) = 0.d0 + lai_array (:) = 0.d0 + wai_array (:) = 0.d0 + CA_array (:) = 0.d0 + htop_array (:) = 0.d0 + hbot_array (:) = 0.d0 + lambda_array (:) = 0.d0 + beam_level_array (:) = 0.d0 + diff_level_array (:) = 0.d0 + light_level_array (:) = 0.d0 + light_beam_level_array (:) = 0.d0 + light_diff_level_array (:) = 0.d0 + par_v_beam_array (:) = 0. + rshort_v_beam_array (:) = 0. + par_v_diffuse_array (:) = 0. + rshort_v_diffuse_array (:) = 0. + lw_v_surf_array (:) = 0. + lw_v_incid_array (:) = 0. + !---------------------------------------------------------------------------------------! + + !----- Loop over the patches -----------------------------------------------------------! do ipa = 1,csite%npatches cpatch => csite%patch(ipa) @@ -619,6 +647,8 @@ subroutine sfcrad_ed(cosz,cosaoi,csite,mzg,mzs,ntext_soil,ncol_soil,maxcohort,tu !------------------------------------------------------------------------------------! csite%rshort_s_diffuse(:,ipa) = 0.0 csite%rshort_s_beam (:,ipa) = 0.0 + csite%par_s_diffuse (:,ipa) = 0.0 + csite%par_s_beam (:,ipa) = 0.0 !------------------------------------------------------------------------------------! @@ -1250,6 +1280,8 @@ subroutine sfcrad_ed(cosz,cosaoi,csite,mzg,mzs,ntext_soil,ncol_soil,maxcohort,tu + downward_nir_below_beam * abs_ground_nir csite%rshort_g_diffuse(ipa) = downward_par_below_diffuse * abs_ground_par & + downward_nir_below_diffuse * abs_ground_nir + csite%par_g_beam (ipa) = downward_par_below_beam * abs_ground_par + csite%par_g_diffuse (ipa) = downward_par_below_diffuse * abs_ground_par csite%parup (ipa) = upward_par_above_beam & + upward_par_above_diffuse csite%nirup (ipa) = upward_nir_above_beam & @@ -1268,6 +1300,8 @@ subroutine sfcrad_ed(cosz,cosaoi,csite,mzg,mzs,ntext_soil,ncol_soil,maxcohort,tu + downward_nir_below_beam * fracabs_nir(k) csite%rshort_s_diffuse(k,ipa) = downward_par_below_diffuse * fracabs_par(k) & + downward_nir_below_beam * fracabs_nir(k) + csite%par_s_beam (k,ipa) = downward_par_below_beam * fracabs_par(k) + csite%par_s_diffuse (k,ipa) = downward_par_below_diffuse * fracabs_par(k) end do !----- Long wave absorption rate at the surface. ------------------------------------! @@ -1283,6 +1317,29 @@ subroutine sfcrad_ed(cosz,cosaoi,csite,mzg,mzs,ntext_soil,ncol_soil,maxcohort,tu csite%rlong_g_incid(ipa) = 0.0 end if !------------------------------------------------------------------------------------! + + + + !------------------------------------------------------------------------------------! + ! Integrate the mean radiation flux. ! + !------------------------------------------------------------------------------------! + do ico=1,cpatch%ncohorts + cpatch%mean_par_l (ico) = cpatch%mean_par_l (ico) & + + cpatch%par_l (ico) * radfrq + cpatch%mean_par_l_beam (ico) = cpatch%mean_par_l_beam (ico) & + + cpatch%par_l_beam (ico) * radfrq + cpatch%mean_par_l_diff (ico) = cpatch%mean_par_l_diff (ico) & + + cpatch%par_l_diffuse (ico) * radfrq + cpatch%mean_rshort_l (ico) = cpatch%mean_rshort_l (ico) & + + cpatch%rshort_l (ico) * radfrq + cpatch%mean_rlong_l (ico) = cpatch%mean_rlong_l (ico) & + + cpatch%rlong_l (ico) * radfrq + cpatch%mean_rshort_w (ico) = cpatch%mean_rshort_w (ico) & + + cpatch%rshort_w (ico) * radfrq + cpatch%mean_rlong_w (ico) = cpatch%mean_rlong_w (ico) & + + cpatch%rlong_w (ico) * radfrq + end do + !------------------------------------------------------------------------------------! end do @@ -1558,6 +1615,9 @@ subroutine scale_ed_radiation(tuco,rshort,rshort_diffuse,rlong,csite) csite%rshort_g_beam (ipa) = 0. csite%rshort_g_diffuse(ipa) = 0. csite%rshort_g (ipa) = 0. + csite%par_g_beam (ipa) = 0. + csite%par_g_diffuse (ipa) = 0. + csite%par_g (ipa) = 0. csite%par_b_beam (ipa) = 0. csite%par_b_diffuse (ipa) = 0. csite%par_b (ipa) = 0. @@ -1573,6 +1633,9 @@ subroutine scale_ed_radiation(tuco,rshort,rshort_diffuse,rlong,csite) csite%rshort_s_beam (k,ipa) = 0. csite%rshort_s_diffuse(k,ipa) = 0. csite%rshort_s (k,ipa) = 0. + csite%par_s_beam (k,ipa) = 0. + csite%par_s_diffuse (k,ipa) = 0. + csite%par_s (k,ipa) = 0. end do csite%rlong_s_incid(ipa) = 0. csite%rlong_g_incid(ipa) = 0. @@ -1627,6 +1690,11 @@ subroutine scale_ed_radiation(tuco,rshort,rshort_diffuse,rlong,csite) csite%rshort_g (ipa) = csite%rshort_g_beam (ipa) & + csite%rshort_g_diffuse (ipa) + csite%par_g_beam (ipa) = csite%par_g_beam (ipa) * rshort + csite%par_g_diffuse (ipa) = csite%par_g_diffuse (ipa) * rshort + csite%par_g (ipa) = csite%par_g_beam (ipa) & + + csite%par_g_diffuse (ipa) + csite%par_b_beam (ipa) = csite%par_b_beam (ipa) * rshort csite%par_b_diffuse (ipa) = csite%par_b_diffuse (ipa) * rshort csite%par_b (ipa) = csite%par_b_beam (ipa) & @@ -1644,10 +1712,14 @@ subroutine scale_ed_radiation(tuco,rshort,rshort_diffuse,rlong,csite) - csite%rlongup (ipa) !----- Absorption rate of short wave by the surface water. --------------------------! do k=1,csite%nlev_sfcwater(ipa) - csite%rshort_s_beam(k,ipa) = csite%rshort_s_beam (k,ipa) * rshort + csite%rshort_s_beam (k,ipa) = csite%rshort_s_beam (k,ipa) * rshort csite%rshort_s_diffuse(k,ipa) = csite%rshort_s_diffuse(k,ipa) * rshort - csite%rshort_s(k,ipa) = csite%rshort_s_beam (k,ipa) & + csite%rshort_s (k,ipa) = csite%rshort_s_beam (k,ipa) & + csite%rshort_s_diffuse(k,ipa) + csite%par_s_beam (k,ipa) = csite%par_s_beam (k,ipa) * rshort + csite%par_s_diffuse (k,ipa) = csite%par_s_diffuse (k,ipa) * rshort + csite%par_s (k,ipa) = csite%par_s_beam (k,ipa) & + + csite%par_s_diffuse (k,ipa) end do csite%rlong_s_incid(ipa) = csite%rlong_s_incid(ipa) * rlong diff --git a/ED/src/dynamics/rk4_derivs.F90 b/ED/src/dynamics/rk4_derivs.F90 index c4cda1707..14049a723 100644 --- a/ED/src/dynamics/rk4_derivs.F90 +++ b/ED/src/dynamics/rk4_derivs.F90 @@ -1437,6 +1437,19 @@ subroutine canopy_derivs_two(mzg,initp,dinitp,csite,ipa,hflxgc,wflxgc,qwflxgc,de - qwshed+leaf_qintercepted + !---------------------------------------------------------------------------------! + ! If we are saving fast diagnostics, then we save the fluxes for this cohort. ! + !---------------------------------------------------------------------------------! + if (fast_diagnostics) then + dinitp%cav_sensible_lc (ico) = hflxlc + dinitp%cav_vapor_lc (ico) = wflxlc + dinitp%cav_transp (ico) = transp + dinitp%cav_intercepted_al (ico) = leaf_intercepted + dinitp%cav_wshed_lg (ico) = wshed + end if + !---------------------------------------------------------------------------------! + + !---------------------------------------------------------------------------------! ! If the detailed output is tracked, then we save the fluxes for this cohort. ! !---------------------------------------------------------------------------------! @@ -1482,6 +1495,21 @@ subroutine canopy_derivs_two(mzg,initp,dinitp,csite,ipa,hflxgc,wflxgc,qwflxgc,de dinitp%psi_open(ico) = 0.d0 dinitp%psi_closed(ico) = 0.d0 + + !---------------------------------------------------------------------------------! + ! If we are saving fast diagnostics, then we save the fluxes for this cohort. ! + !---------------------------------------------------------------------------------! + if (fast_diagnostics) then + dinitp%cav_sensible_lc (ico) = 0.d0 + dinitp%cav_vapor_lc (ico) = 0.d0 + dinitp%cav_transp (ico) = 0.d0 + dinitp%cav_intercepted_al (ico) = 0.d0 + dinitp%cav_wshed_lg (ico) = 0.d0 + end if + !---------------------------------------------------------------------------------! + + + !---------------------------------------------------------------------------------! ! If the detailed output is tracked, then we save the fluxes for this cohort. ! !---------------------------------------------------------------------------------! @@ -1677,6 +1705,21 @@ subroutine canopy_derivs_two(mzg,initp,dinitp,csite,ipa,hflxgc,wflxgc,qwflxgc,de initp%hflx_wrsti(ico) = initp%rshort_w(ico)+initp%rlong_w(ico) & -qwshed+wood_qintercepted + + + !---------------------------------------------------------------------------------! + ! If we are saving fast diagnostics, then we save the fluxes for this cohort. ! + !---------------------------------------------------------------------------------! + if (fast_diagnostics) then + dinitp%cav_sensible_wc (ico) = hflxwc + dinitp%cav_vapor_wc (ico) = wflxwc + dinitp%cav_intercepted_aw (ico) = wood_intercepted + dinitp%cav_wshed_wg (ico) = wshed + end if + !---------------------------------------------------------------------------------! + + + !---------------------------------------------------------------------------------! ! If the detailed output is tracked, then we save the fluxes for this cohort. ! !---------------------------------------------------------------------------------! @@ -1723,6 +1766,18 @@ subroutine canopy_derivs_two(mzg,initp,dinitp,csite,ipa,hflxgc,wflxgc,qwflxgc,de + !---------------------------------------------------------------------------------! + ! If we are saving fast diagnostics, then we save the fluxes for this cohort. ! + !---------------------------------------------------------------------------------! + if (fast_diagnostics) then + dinitp%cav_sensible_wc (ico) = 0.d0 + dinitp%cav_vapor_wc (ico) = 0.d0 + dinitp%cav_intercepted_aw (ico) = 0.d0 + dinitp%cav_wshed_wg (ico) = 0.d0 + end if + !---------------------------------------------------------------------------------! + + !---------------------------------------------------------------------------------! ! If the detailed output is tracked, then we save the fluxes for this cohort. ! !---------------------------------------------------------------------------------! @@ -1859,8 +1914,10 @@ subroutine canopy_derivs_two(mzg,initp,dinitp,csite,ipa,hflxgc,wflxgc,qwflxgc,de if (fast_diagnostics .or. checkbudget .or. print_detailed) then !----- Average shortwave radiation. -------------------------------------------------! dinitp%avg_rshort_gnd = dble(csite%rshort_g(ipa)) + dinitp%avg_par_gnd = dble(csite%par_g (ipa)) do k=1,initp%nlev_sfcwater dinitp%avg_rshort_gnd = dinitp%avg_rshort_gnd + dble(csite%rshort_s(k,ipa)) + dinitp%avg_par_gnd = dinitp%avg_par_gnd + dble(csite%par_s (k,ipa)) end do !------------------------------------------------------------------------------------! diff --git a/ED/src/dynamics/rk4_driver.F90 b/ED/src/dynamics/rk4_driver.F90 index 4ac1a14f3..89f1b1b5c 100644 --- a/ED/src/dynamics/rk4_driver.F90 +++ b/ED/src/dynamics/rk4_driver.F90 @@ -425,6 +425,11 @@ subroutine initp2modelp(hdid,initp,csite,ipa,wbudget_loss2atm,ebudget_netrad !------------------------------------------------------------------------------------! + !----- Alias for the cohorts. -------------------------------------------------------! + cpatch => csite%patch(ipa) + !------------------------------------------------------------------------------------! + + !------------------------------------------------------------------------------------! ! Most variables require just a simple copy. More comments will be made next to ! ! those in which this is not true. All floating point variables are converted back ! @@ -495,6 +500,7 @@ subroutine initp2modelp(hdid,initp,csite,ipa,wbudget_loss2atm,ebudget_netrad csite%avg_drainage (ipa) = sngloff(initp%avg_drainage ,tiny_offset) csite%avg_drainage_heat (ipa) = sngloff(initp%avg_drainage_heat ,tiny_offset) csite%avg_rshort_gnd (ipa) = sngloff(initp%avg_rshort_gnd ,tiny_offset) + csite%avg_par_gnd (ipa) = sngloff(initp%avg_par_gnd ,tiny_offset) csite%avg_rlong_gnd (ipa) = sngloff(initp%avg_rlong_gnd ,tiny_offset) csite%avg_sensible_lc (ipa) = sngloff(initp%avg_sensible_lc ,tiny_offset) csite%avg_sensible_wc (ipa) = sngloff(initp%avg_sensible_wc ,tiny_offset) @@ -514,7 +520,34 @@ subroutine initp2modelp(hdid,initp,csite,ipa,wbudget_loss2atm,ebudget_netrad csite%avg_smoist_gg (k,ipa) = sngloff(initp%avg_smoist_gg (k) ,tiny_offset) csite%avg_transloss (k,ipa) = sngloff(initp%avg_transloss (k) ,tiny_offset) end do - + !---------------------------------------------------------------------------------! + + + !---------------------------------------------------------------------------------! + ! Cohort-level variables. ! + !---------------------------------------------------------------------------------! + do ico=1,cpatch%ncohorts + cpatch%mean_sensible_lc (ico) = sngloff(initp%cav_sensible_lc (ico) & + ,tiny_offset) + cpatch%mean_sensible_wc (ico) = sngloff(initp%cav_sensible_wc (ico) & + ,tiny_offset) + cpatch%mean_vapor_lc (ico) = sngloff(initp%cav_vapor_lc (ico) & + ,tiny_offset) + cpatch%mean_vapor_wc (ico) = sngloff(initp%cav_vapor_wc (ico) & + ,tiny_offset) + cpatch%mean_transp (ico) = sngloff(initp%cav_transp (ico) & + ,tiny_offset) + cpatch%mean_intercepted_al(ico) = sngloff(initp%cav_intercepted_al (ico) & + ,tiny_offset) + cpatch%mean_intercepted_aw(ico) = sngloff(initp%cav_intercepted_aw (ico) & + ,tiny_offset) + cpatch%mean_wshed_lg (ico) = sngloff(initp%cav_wshed_lg (ico) & + ,tiny_offset) + cpatch%mean_wshed_wg (ico) = sngloff(initp%cav_wshed_wg (ico) & + ,tiny_offset) + end do + !---------------------------------------------------------------------------------! + !---------------------------------------------------------------------------------! ! These variables are integrated here, since they don't change with time. ! !---------------------------------------------------------------------------------! @@ -614,7 +647,6 @@ subroutine initp2modelp(hdid,initp,csite,ipa,wbudget_loss2atm,ebudget_netrad ! moisture or soil potential. ! !------------------------------------------------------------------------------------! if (spot_phen) then - cpatch => csite%patch(ipa) do ico = 1,cpatch%ncohorts ipft = cpatch%pft(ico) kroot = cpatch%krdepth(ico) @@ -637,7 +669,6 @@ subroutine initp2modelp(hdid,initp,csite,ipa,wbudget_loss2atm,ebudget_netrad + sngl(available_water)*sngl(hdid)/tendays_sec end do else - cpatch => csite%patch(ipa) do ico = 1,cpatch%ncohorts available_water = 0.d0 kroot = cpatch%krdepth(ico) diff --git a/ED/src/dynamics/rk4_integ_utils.f90 b/ED/src/dynamics/rk4_integ_utils.f90 index 7b70dd9bc..445729861 100644 --- a/ED/src/dynamics/rk4_integ_utils.f90 +++ b/ED/src/dynamics/rk4_integ_utils.f90 @@ -448,6 +448,7 @@ subroutine inc_rk4_patch(rkp, inc, fac, cpatch) rkp%avg_drainage = rkp%avg_drainage + fac * inc%avg_drainage rkp%avg_drainage_heat = rkp%avg_drainage_heat + fac * inc%avg_drainage_heat rkp%avg_rshort_gnd = rkp%avg_rshort_gnd + fac * inc%avg_rshort_gnd + rkp%avg_par_gnd = rkp%avg_par_gnd + fac * inc%avg_par_gnd rkp%avg_rlong_gnd = rkp%avg_rlong_gnd + fac * inc%avg_rlong_gnd rkp%avg_sensible_lc = rkp%avg_sensible_lc + fac * inc%avg_sensible_lc rkp%avg_sensible_wc = rkp%avg_sensible_wc + fac * inc%avg_sensible_wc @@ -463,6 +464,28 @@ subroutine inc_rk4_patch(rkp, inc, fac, cpatch) rkp%avg_transloss(k) = rkp%avg_transloss(k) + fac * inc%avg_transloss(k) end do + + do k=1,cpatch%ncohorts + rkp%cav_sensible_lc (k) = rkp%cav_sensible_lc (k) & + + fac * inc%cav_sensible_lc (k) + rkp%cav_sensible_wc (k) = rkp%cav_sensible_wc (k) & + + fac * inc%cav_sensible_wc (k) + rkp%cav_vapor_lc (k) = rkp%cav_vapor_lc (k) & + + fac * inc%cav_vapor_lc (k) + rkp%cav_vapor_wc (k) = rkp%cav_vapor_wc (k) & + + fac * inc%cav_vapor_wc (k) + rkp%cav_transp (k) = rkp%cav_transp (k) & + + fac * inc%cav_transp (k) + rkp%cav_intercepted_al(k) = rkp%cav_intercepted_al(k) & + + fac * inc%cav_intercepted_al(k) + rkp%cav_intercepted_aw(k) = rkp%cav_intercepted_aw(k) & + + fac * inc%cav_intercepted_aw(k) + rkp%cav_wshed_lg (k) = rkp%cav_wshed_lg (k) & + + fac * inc%cav_wshed_lg (k) + rkp%cav_wshed_wg (k) = rkp%cav_wshed_wg (k) & + + fac * inc%cav_wshed_wg (k) + end do + end if !---------------------------------------------------------------------------------------! @@ -486,6 +509,7 @@ subroutine inc_rk4_patch(rkp, inc, fac, cpatch) rkp%flx_drainage = rkp%flx_drainage + fac * inc%avg_drainage rkp%flx_drainage_heat = rkp%flx_drainage_heat + fac * inc%avg_drainage_heat rkp%flx_rshort_gnd = rkp%flx_rshort_gnd + fac * inc%avg_rshort_gnd + rkp%flx_par_gnd = rkp%flx_par_gnd + fac * inc%avg_par_gnd rkp%flx_rlong_gnd = rkp%flx_rlong_gnd + fac * inc%avg_rlong_gnd rkp%flx_sensible_lc = rkp%flx_sensible_lc + fac * inc%avg_sensible_lc rkp%flx_sensible_wc = rkp%flx_sensible_wc + fac * inc%avg_sensible_wc @@ -1359,6 +1383,7 @@ subroutine copy_rk4_patch(sourcep, targetp, cpatch) targetp%avg_transp = sourcep%avg_transp targetp%avg_evap = sourcep%avg_evap targetp%avg_rshort_gnd = sourcep%avg_rshort_gnd + targetp%avg_par_gnd = sourcep%avg_par_gnd targetp%avg_rlong_gnd = sourcep%avg_rlong_gnd targetp%avg_sensible_lc = sourcep%avg_sensible_lc targetp%avg_sensible_wc = sourcep%avg_sensible_wc @@ -1375,6 +1400,19 @@ subroutine copy_rk4_patch(sourcep, targetp, cpatch) targetp%avg_smoist_gg(k) = sourcep%avg_smoist_gg(k) targetp%avg_transloss(k) = sourcep%avg_transloss(k) end do + + + do k=1,cpatch%ncohorts + targetp%cav_sensible_lc (k) = sourcep%cav_sensible_lc (k) + targetp%cav_sensible_wc (k) = sourcep%cav_sensible_wc (k) + targetp%cav_vapor_lc (k) = sourcep%cav_vapor_lc (k) + targetp%cav_vapor_wc (k) = sourcep%cav_vapor_wc (k) + targetp%cav_transp (k) = sourcep%cav_transp (k) + targetp%cav_intercepted_al (k) = sourcep%cav_intercepted_al(k) + targetp%cav_intercepted_aw (k) = sourcep%cav_intercepted_aw(k) + targetp%cav_wshed_lg (k) = sourcep%cav_wshed_lg (k) + targetp%cav_wshed_wg (k) = sourcep%cav_wshed_wg (k) + end do end if if (print_detailed) then @@ -1390,6 +1428,7 @@ subroutine copy_rk4_patch(sourcep, targetp, cpatch) targetp%flx_transp = sourcep%flx_transp targetp%flx_evap = sourcep%flx_evap targetp%flx_rshort_gnd = sourcep%flx_rshort_gnd + targetp%flx_par_gnd = sourcep%flx_par_gnd targetp%flx_rlong_gnd = sourcep%flx_rlong_gnd targetp%flx_sensible_lc = sourcep%flx_sensible_lc targetp%flx_sensible_wc = sourcep%flx_sensible_wc diff --git a/ED/src/dynamics/rk4_misc.f90 b/ED/src/dynamics/rk4_misc.f90 index 643899b8b..0fcd28979 100644 --- a/ED/src/dynamics/rk4_misc.f90 +++ b/ED/src/dynamics/rk4_misc.f90 @@ -58,6 +58,14 @@ subroutine copy_patch_init(sourcesite,ipa,targetp) integer :: ksn !---------------------------------------------------------------------------------------! + + + !---- Alias for the current patch. -----------------------------------------------------! + cpatch => sourcesite%patch(ipa) + !---------------------------------------------------------------------------------------! + + + !---------------------------------------------------------------------------------------! ! Between time steps the pressure may change because of change in atmospheric ! ! pressure, which means that temperature is not conserved. Potential temperature and ! @@ -240,8 +248,6 @@ subroutine copy_patch_init(sourcesite,ipa,targetp) ! integrator, so it preserves the proportional heat capacity and prevents the pool to ! ! be too small. ! !---------------------------------------------------------------------------------------! - cpatch => sourcesite%patch(ipa) - any_resolvable = .false. do ico=1, cpatch%ncohorts !----- Copying the flag that determines whether this cohort is numerically stable. --! @@ -401,6 +407,7 @@ subroutine copy_patch_init(sourcesite,ipa,targetp) targetp%avg_drainage = dble(sourcesite%avg_drainage (ipa)) targetp%avg_drainage_heat = dble(sourcesite%avg_drainage_heat (ipa)) targetp%avg_rshort_gnd = dble(sourcesite%avg_rshort_gnd (ipa)) + targetp%avg_par_gnd = dble(sourcesite%avg_par_gnd (ipa)) targetp%avg_rlong_gnd = dble(sourcesite%avg_rlong_gnd (ipa)) targetp%avg_sensible_lc = dble(sourcesite%avg_sensible_lc (ipa)) targetp%avg_sensible_wc = dble(sourcesite%avg_sensible_wc (ipa)) @@ -415,6 +422,19 @@ subroutine copy_patch_init(sourcesite,ipa,targetp) targetp%avg_smoist_gg(k) = dble(sourcesite%avg_smoist_gg(k,ipa) ) targetp%avg_transloss(k) = dble(sourcesite%avg_transloss(k,ipa) ) end do + + do ico=1,cpatch%ncohorts + targetp%cav_sensible_lc (ico) = dble(cpatch%mean_sensible_lc (ico)) + targetp%cav_sensible_wc (ico) = dble(cpatch%mean_sensible_wc (ico)) + targetp%cav_vapor_lc (ico) = dble(cpatch%mean_vapor_lc (ico)) + targetp%cav_vapor_wc (ico) = dble(cpatch%mean_vapor_wc (ico)) + targetp%cav_transp (ico) = dble(cpatch%mean_transp (ico)) + targetp%cav_intercepted_al (ico) = dble(cpatch%mean_intercepted_al(ico)) + targetp%cav_intercepted_aw (ico) = dble(cpatch%mean_intercepted_aw(ico)) + targetp%cav_wshed_lg (ico) = dble(cpatch%mean_wshed_lg (ico)) + targetp%cav_wshed_wg (ico) = dble(cpatch%mean_wshed_wg (ico)) + end do + end if if (checkbudget) then targetp%co2budget_storage = dble(sourcesite%co2budget_initialstorage(ipa)) @@ -2819,8 +2839,11 @@ subroutine adjust_veg_properties(initp,hdid,csite,ipa) initp%veg_energy (ico) = initp%veg_energy (ico) - leaf_qwshed !----- Update fluxes if needed be. --------------------------------------------! + if (fast_diagnostics) then + initp%cav_wshed_lg(ico) = initp%cav_wshed_lg(ico) + leaf_wshed * hdidi + end if if (print_detailed) then - initp%cfx_qwshed(ico) = initp%cfx_qwshed(ico) + leaf_qwshed * hdidi + initp%cfx_qwshed (ico) = initp%cfx_qwshed (ico) + leaf_qwshed * hdidi end if !------------------------------------------------------------------------------! @@ -2856,9 +2879,13 @@ subroutine adjust_veg_properties(initp,hdid,csite,ipa) !----- Update fluxes if needed be. --------------------------------------------! + if (fast_diagnostics) then + initp%cav_vapor_lc(ico) = initp%cav_vapor_lc(ico) & + + (leaf_boil - leaf_dew ) * hdidi + end if if (print_detailed) then - initp%cfx_qwflxlc(ico) = initp%cfx_qwflxlc(ico) & - + (leaf_qboil - leaf_qdew) * hdidi + initp%cfx_qwflxlc (ico) = initp%cfx_qwflxlc(ico) & + + (leaf_qboil - leaf_qdew) * hdidi end if !------------------------------------------------------------------------------! end if @@ -2915,17 +2942,25 @@ subroutine adjust_veg_properties(initp,hdid,csite,ipa) !------------------------------------------------------------------------------! + !----- Update water mass and energy. ------------------------------------------! initp%wood_water (ico) = initp%wood_water (ico) - wood_wshed initp%veg_water (ico) = initp%veg_water (ico) - wood_wshed initp%wood_energy(ico) = initp%wood_energy(ico) - wood_qwshed initp%veg_energy (ico) = initp%veg_energy (ico) - wood_qwshed + !------------------------------------------------------------------------------! + + !----- Update fluxes if needed be. --------------------------------------------! + if (fast_diagnostics) then + initp%cav_wshed_wg(ico) = initp%cav_wshed_wg(ico) + wood_wshed * hdidi + end if if (print_detailed) then - initp%cfx_qwshed(ico) = initp%cfx_qwshed(ico) + wood_qwshed * hdidi + initp%cfx_qwshed (ico) = initp%cfx_qwshed (ico) + wood_qwshed * hdidi end if - + !------------------------------------------------------------------------------! + elseif (initp%wood_water(ico) < min_wood_water) then !------------------------------------------------------------------------------! @@ -2956,9 +2991,13 @@ subroutine adjust_veg_properties(initp,hdid,csite,ipa) !------------------------------------------------------------------------------! !----- Update fluxes if needed be. --------------------------------------------! + if (fast_diagnostics) then + initp%cav_vapor_wc(ico) = initp%cav_vapor_wc(ico) & + + (wood_boil - wood_dew ) * hdidi + end if if (print_detailed) then - initp%cfx_qwflxwc(ico) = initp%cfx_qwflxwc(ico) & - + (wood_qboil - wood_qdew) * hdidi + initp%cfx_qwflxwc (ico) = initp%cfx_qwflxwc (ico) & + + (wood_qboil - wood_qdew) * hdidi end if !------------------------------------------------------------------------------! end if @@ -3484,13 +3523,14 @@ subroutine print_csiteipa(csite, ipa) write (unit=*,fmt='(80a)') ('-',k=1,80) - write (unit=*,fmt='(9(a12,1x))') ' USTAR',' QSTAR',' CSTAR' & - ,' TSTAR',' ZETA',' RI_BULK' & - ,' RLONG_G',' RSHORT_G',' RLONG_S' - write (unit=*,fmt='(9(es12.4,1x))') csite%ustar(ipa),csite%qstar(ipa),csite%cstar(ipa) & - ,csite%tstar(ipa),csite%zeta(ipa),csite%ribulk(ipa) & - ,csite%rlong_g(ipa),csite%rshort_g(ipa) & - ,csite%rlong_s(ipa) + write (unit=*,fmt='(10(a12,1x))') ' USTAR',' QSTAR',' CSTAR' & + ,' TSTAR',' ZETA',' RI_BULK' & + ,' RLONG_G',' RSHORT_G',' PAR_G' & + ,' RLONG_S' + write (unit=*,fmt='(10(es12.4,1x))') csite%ustar(ipa),csite%qstar(ipa),csite%cstar(ipa) & + ,csite%tstar(ipa),csite%zeta(ipa),csite%ribulk(ipa) & + ,csite%rlong_g(ipa),csite%rshort_g(ipa) & + ,csite%par_g(ipa),csite%rlong_s(ipa) write (unit=*,fmt='(80a)') ('-',k=1,80) @@ -3511,14 +3551,14 @@ subroutine print_csiteipa(csite, ipa) if (csite%nlev_sfcwater(ipa) >= 1) then write (unit=*,fmt='(80a)') ('-',k=1,80) - write (unit=*,fmt='(a5,1x,6(a12,1x))') ' KZS',' SFCW_ENERGY',' SFCW_TEMPK' & - &,' SFCW_MASS','SFCW_FRACLIQ',' SFCW_DEPTH' & - &,' RSHORT_S' + write (unit=*,fmt='(a5,1x,7(a12,1x))') ' KZS',' SFCW_ENERGY',' SFCW_TEMPK' & + ,' SFCW_MASS','SFCW_FRACLIQ',' SFCW_DEPTH' & + ,' RSHORT_S',' PAR_S' do k=1,csite%nlev_sfcwater(ipa) - write (unit=*,fmt='(i5,1x,6(es12.4,1x))') k,csite%sfcwater_energy(k,ipa) & + write (unit=*,fmt='(i5,1x,7(es12.4,1x))') k,csite%sfcwater_energy(k,ipa) & ,csite%sfcwater_tempk(k,ipa),csite%sfcwater_mass(k,ipa) & ,csite%sfcwater_fracliq(k,ipa),csite%sfcwater_depth(k,ipa) & - ,csite%rshort_s(k,ipa) + ,csite%rshort_s(k,ipa),csite%par_s(k,ipa) end do end if @@ -3895,8 +3935,8 @@ subroutine print_rk4_state(initp,fluxp,csite,ipa,elapsed,hdid) real(kind=8) :: can_theiv real(kind=8) :: can_vpdef !----- Local constants. ----------------------------------------------------------------! - character(len=10), parameter :: phfmt='(85(a,1x))' - character(len=48), parameter :: pbfmt='(3(i13,1x),4(es13.6,1x),3(i13,1x),75(es13.6,1x))' + character(len=10), parameter :: phfmt='(86(a,1x))' + character(len=48), parameter :: pbfmt='(3(i13,1x),4(es13.6,1x),3(i13,1x),76(es13.6,1x))' character(len=10), parameter :: chfmt='(57(a,1x))' character(len=48), parameter :: cbfmt='(3(i13,1x),2(es13.6,1x),3(i13,1x),49(es13.6,1x))' !----- Locally saved variables. --------------------------------------------------------! @@ -4085,15 +4125,16 @@ subroutine print_rk4_state(initp,fluxp,csite,ipa,elapsed,hdid) , ' SOILFC' , ' SLMSTS', ' USTAR' & , ' TSTAR' , ' QSTAR', ' CSTAR' & , ' ZETA' , ' RI.BULK', ' GND.RSHORT' & - , ' GND.RLONG' , ' WFLXLC', ' WFLXWC' & - , ' WFLXGC' , ' WFLXAC', ' TRANSP' & - , ' WSHED' , ' INTERCEPT', ' THROUGHFALL' & - , ' HFLXGC' , ' HFLXLC', ' HFLXWC' & - , ' HFLXAC' , ' CFLXAC', ' CFLXST' & - , ' CWDRH' , ' SOILRH', ' GPP' & - , ' PLRESP' , ' PAR.BEAM.TOP', ' PAR.DIFF.TOP' & - , ' NIR.BEAM.TOP' , ' NIR.DIFF.TOP', ' PAR.BEAM.BOT' & - , ' PAR.DIFF.BOT' , ' NIR.BEAM.BOT', ' NIR.DIFF.BOT' + , ' GND.PAR' , ' GND.RLONG', ' WFLXLC' & + , ' WFLXWC' , ' WFLXGC', ' WFLXAC' & + , ' TRANSP' , ' WSHED', ' INTERCEPT' & + , ' THROUGHFALL' , ' HFLXGC', ' HFLXLC' & + , ' HFLXWC' , ' HFLXAC', ' CFLXAC' & + , ' CFLXST' , ' CWDRH', ' SOILRH' & + , ' GPP' , ' PLRESP', ' PAR.BEAM.TOP' & + , ' PAR.DIFF.TOP' , ' NIR.BEAM.TOP', ' NIR.DIFF.TOP' & + , ' PAR.BEAM.BOT' , ' PAR.DIFF.BOT', ' NIR.BEAM.BOT' & + , ' NIR.DIFF.BOT' @@ -4130,16 +4171,17 @@ subroutine print_rk4_state(initp,fluxp,csite,ipa,elapsed,hdid) , soil8(nsoil)%sfldcap , soil8(nsoil)%slmsts , initp%ustar & , initp%tstar , initp%qstar , initp%cstar & , initp%zeta , initp%ribulk , fluxp%flx_rshort_gnd & - , fluxp%flx_rlong_gnd , fluxp%flx_vapor_lc , fluxp%flx_vapor_wc & - , fluxp%flx_vapor_gc , fluxp%flx_vapor_ac , fluxp%flx_transp & - , fluxp%flx_wshed_vg , fluxp%flx_intercepted , fluxp%flx_throughfall & - , fluxp%flx_sensible_gc , fluxp%flx_sensible_lc , fluxp%flx_sensible_wc & - , fluxp%flx_sensible_ac , fluxp%flx_carbon_ac , fluxp%flx_carbon_st & - , initp%cwd_rh , soil_rh , sum_gpp & - , sum_plresp , rk4site%par_beam , rk4site%par_diffuse & - , rk4site%nir_beam , rk4site%nir_diffuse , par_b_beam & - , par_b_diff , nir_b_beam , nir_b_diff - + , fluxp%flx_par_gnd , fluxp%flx_rlong_gnd , fluxp%flx_vapor_lc & + , fluxp%flx_vapor_wc , fluxp%flx_vapor_gc , fluxp%flx_vapor_ac & + , fluxp%flx_transp , fluxp%flx_wshed_vg , fluxp%flx_intercepted & + , fluxp%flx_throughfall , fluxp%flx_sensible_gc , fluxp%flx_sensible_lc & + , fluxp%flx_sensible_wc , fluxp%flx_sensible_ac , fluxp%flx_carbon_ac & + , fluxp%flx_carbon_st , initp%cwd_rh , soil_rh & + , sum_gpp , sum_plresp , rk4site%par_beam & + , rk4site%par_diffuse , rk4site%nir_beam , rk4site%nir_diffuse & + , par_b_beam , par_b_diff , nir_b_beam & + , nir_b_diff + close(unit=83,status='keep') !---------------------------------------------------------------------------------------! diff --git a/ED/src/init/ed_init_atm.F90 b/ED/src/init/ed_init_atm.F90 index 8c4bac66d..ba7ffca5c 100644 --- a/ED/src/init/ed_init_atm.F90 +++ b/ED/src/init/ed_init_atm.F90 @@ -138,6 +138,7 @@ subroutine ed_init_atm() !----- Initialise the ground radiation parameters. -------------------------! csite%rshort_g(ipa) = 0. + csite%par_g (ipa) = 0. csite%rlong_g (ipa) = 0. csite%rough(ipa) = soil_rough diff --git a/ED/src/init/ed_type_init.f90 b/ED/src/init/ed_type_init.f90 index 505409971..2e4e3da56 100644 --- a/ED/src/init/ed_type_init.f90 +++ b/ED/src/init/ed_type_init.f90 @@ -201,6 +201,27 @@ subroutine init_ed_cohort_vars(cpatch,ico, lsl) !---------------------------------------------------------------------------------------! + !---------------------------------------------------------------------------------------! + ! Energy and water fluxes. ! + !---------------------------------------------------------------------------------------! + cpatch%mean_par_l (ico) = 0.0 + cpatch%mean_par_l_beam (ico) = 0.0 + cpatch%mean_par_l_diff (ico) = 0.0 + cpatch%mean_rshort_l (ico) = 0.0 + cpatch%mean_rlong_l (ico) = 0.0 + cpatch%mean_sensible_lc (ico) = 0.0 + cpatch%mean_vapor_lc (ico) = 0.0 + cpatch%mean_transp (ico) = 0.0 + cpatch%mean_intercepted_al (ico) = 0.0 + cpatch%mean_wshed_lg (ico) = 0.0 + cpatch%mean_rshort_w (ico) = 0.0 + cpatch%mean_rlong_w (ico) = 0.0 + cpatch%mean_sensible_wc (ico) = 0.0 + cpatch%mean_vapor_wc (ico) = 0.0 + cpatch%mean_intercepted_aw (ico) = 0.0 + cpatch%mean_wshed_wg (ico) = 0.0 + !---------------------------------------------------------------------------------------! + !---------------------------------------------------------------------------------------! ! The monthly means are allocated only when the user wants the monthly output or ! @@ -210,6 +231,19 @@ subroutine init_ed_cohort_vars(cpatch,ico, lsl) cpatch%mmean_par_l (ico) = 0.0 cpatch%mmean_par_l_beam (ico) = 0.0 cpatch%mmean_par_l_diff (ico) = 0.0 + cpatch%mmean_rshort_l (ico) = 0.0 + cpatch%mmean_rlong_l (ico) = 0.0 + cpatch%mmean_sensible_lc (ico) = 0.0 + cpatch%mmean_vapor_lc (ico) = 0.0 + cpatch%mmean_transp (ico) = 0.0 + cpatch%mmean_intercepted_al (ico) = 0.0 + cpatch%mmean_wshed_lg (ico) = 0.0 + cpatch%mmean_rshort_w (ico) = 0.0 + cpatch%mmean_rlong_w (ico) = 0.0 + cpatch%mmean_sensible_wc (ico) = 0.0 + cpatch%mmean_vapor_wc (ico) = 0.0 + cpatch%mmean_intercepted_aw (ico) = 0.0 + cpatch%mmean_wshed_wg (ico) = 0.0 cpatch%mmean_gpp (ico) = 0.0 cpatch%mmean_nppleaf (ico) = 0.0 cpatch%mmean_nppfroot (ico) = 0.0 @@ -250,6 +284,19 @@ subroutine init_ed_cohort_vars(cpatch,ico, lsl) cpatch%dmean_par_l (ico) = 0.0 cpatch%dmean_par_l_beam (ico) = 0.0 cpatch%dmean_par_l_diff (ico) = 0.0 + cpatch%dmean_rshort_l (ico) = 0.0 + cpatch%dmean_rlong_l (ico) = 0.0 + cpatch%dmean_sensible_lc (ico) = 0.0 + cpatch%dmean_vapor_lc (ico) = 0.0 + cpatch%dmean_transp (ico) = 0.0 + cpatch%dmean_intercepted_al (ico) = 0.0 + cpatch%dmean_wshed_lg (ico) = 0.0 + cpatch%dmean_rshort_w (ico) = 0.0 + cpatch%dmean_rlong_w (ico) = 0.0 + cpatch%dmean_sensible_wc (ico) = 0.0 + cpatch%dmean_vapor_wc (ico) = 0.0 + cpatch%dmean_intercepted_aw (ico) = 0.0 + cpatch%dmean_wshed_wg (ico) = 0.0 cpatch%dmean_gpp (ico) = 0.0 cpatch%dmean_nppleaf (ico) = 0.0 cpatch%dmean_nppfroot (ico) = 0.0 @@ -281,6 +328,19 @@ subroutine init_ed_cohort_vars(cpatch,ico, lsl) cpatch%qmean_par_l (:,ico) = 0.0 cpatch%qmean_par_l_beam (:,ico) = 0.0 cpatch%qmean_par_l_diff (:,ico) = 0.0 + cpatch%qmean_rshort_l (:,ico) = 0.0 + cpatch%qmean_rlong_l (:,ico) = 0.0 + cpatch%qmean_sensible_lc (:,ico) = 0.0 + cpatch%qmean_vapor_lc (:,ico) = 0.0 + cpatch%qmean_transp (:,ico) = 0.0 + cpatch%qmean_intercepted_al (:,ico) = 0.0 + cpatch%qmean_wshed_lg (:,ico) = 0.0 + cpatch%qmean_rshort_w (:,ico) = 0.0 + cpatch%qmean_rlong_w (:,ico) = 0.0 + cpatch%qmean_sensible_wc (:,ico) = 0.0 + cpatch%qmean_vapor_wc (:,ico) = 0.0 + cpatch%qmean_intercepted_aw (:,ico) = 0.0 + cpatch%qmean_wshed_wg (:,ico) = 0.0 cpatch%qmean_gpp (:,ico) = 0.0 cpatch%qmean_leaf_resp (:,ico) = 0.0 cpatch%qmean_root_resp (:,ico) = 0.0 @@ -368,65 +428,75 @@ subroutine init_ed_patch_vars(csite,ip1,ip2,lsl) !------ Initialise soil state variables. -----------------------------------------------! - if (ied_init_mode.ne.7)then - csite%soil_water(1:nzg,ip1:ip2) = 0.0 + if (ied_init_mode /= 7)then + csite%soil_water (1:nzg,ip1:ip2) = 0.0 end if - csite%soil_energy(1:nzg,ip1:ip2) = 0.0 - csite%soil_tempk(1:nzg,ip1:ip2) = 0.0 - csite%soil_fracliq(1:nzg,ip1:ip2) = 0.0 - csite%rootdense(1:nzg,ip1:ip2) = 0.0 + csite%soil_energy (1:nzg,ip1:ip2) = 0.0 + csite%soil_tempk (1:nzg,ip1:ip2) = 0.0 + csite%soil_fracliq (1:nzg,ip1:ip2) = 0.0 + csite%rootdense (1:nzg,ip1:ip2) = 0.0 + !---------------------------------------------------------------------------------------! + !------ Initialize sfcwater state variables. -------------------------------------------! - csite%sfcwater_mass(1:nzs,ip1:ip2) = 0.0 - csite%sfcwater_energy(1:nzs,ip1:ip2) = 0.0 - csite%sfcwater_depth(1:nzs,ip1:ip2) = 0.0 - csite%sfcwater_tempk(1:nzs,ip1:ip2) = 0.0 - csite%sfcwater_fracliq(1:nzs,ip1:ip2) = 0.0 - csite%total_sfcw_depth(ip1:ip2) = 0.0 - csite%snowfac(ip1:ip2) = 0.0 - csite%runoff(ip1:ip2) = 0.0 - - csite%rshort_s(:,ip1:ip2) = 0.0 - csite%rshort_s_beam(:,ip1:ip2) = 0.0 - csite%rshort_s_diffuse(:,ip1:ip2) = 0.0 - csite%nlev_sfcwater(ip1:ip2) = 0 - - csite%rlong_s(ip1:ip2) = 0.0 - - csite%avg_daily_temp (ip1:ip2) = 0.0 - csite%avg_monthly_gndwater(ip1:ip2) = 0.0 - csite%avg_monthly_waterdef(ip1:ip2) = 0.0 - - csite%mean_rh(ip1:ip2) = 0.0 - csite%mean_cwd_rh(ip1:ip2) = 0.0 - csite%mean_nep(ip1:ip2) = 0.0 - - csite%A_decomp(ip1:ip2) = 0.0 - csite%f_decomp(ip1:ip2) = 0.0 - csite%rh(ip1:ip2) = 0.0 - csite%cwd_rh(ip1:ip2) = 0.0 - csite%plant_ag_biomass(ip1:ip2) = 0.0 - - csite%mean_runoff(ip1:ip2) = 0.0 - csite%mean_wflux(ip1:ip2) = 0.0 - csite%mean_latflux(ip1:ip2) = 0.0 - csite%mean_qrunoff(ip1:ip2) = 0.0 - csite%mean_hflux(ip1:ip2) = 0.0 - - csite%today_A_decomp(ip1:ip2) = 0.0 - csite%today_Af_decomp(ip1:ip2) = 0.0 + csite%sfcwater_mass (1:nzs,ip1:ip2) = 0.0 + csite%sfcwater_energy (1:nzs,ip1:ip2) = 0.0 + csite%sfcwater_depth (1:nzs,ip1:ip2) = 0.0 + csite%sfcwater_tempk (1:nzs,ip1:ip2) = 0.0 + csite%sfcwater_fracliq (1:nzs,ip1:ip2) = 0.0 + csite%total_sfcw_depth (ip1:ip2) = 0.0 + csite%snowfac (ip1:ip2) = 0.0 + csite%runoff (ip1:ip2) = 0.0 + csite%rshort_s (:,ip1:ip2) = 0.0 + csite%rshort_s_beam (:,ip1:ip2) = 0.0 + csite%rshort_s_diffuse (:,ip1:ip2) = 0.0 + csite%par_s (:,ip1:ip2) = 0.0 + csite%par_s_beam (:,ip1:ip2) = 0.0 + csite%par_s_diffuse (:,ip1:ip2) = 0.0 + csite%rlong_s (ip1:ip2) = 0.0 + !------ Number of pounding/snow layers. This is an integer... --------------------------! + csite%nlev_sfcwater (ip1:ip2) = 0 + !---------------------------------------------------------------------------------------! - csite%par_l_max (ip1:ip2) = 0.0 - csite%par_l_beam_max (ip1:ip2) = 0.0 - csite%par_l_diffuse_max(ip1:ip2) = 0.0 - csite%repro(1:n_pft,ip1:ip2) = 0.0 - csite%A_o_max(1:n_pft,ip1:ip2) = 0.0 - csite%A_c_max(1:n_pft,ip1:ip2) = 0.0 - csite%htry(ip1:ip2) = 1.0 - csite%hprev(ip1:ip2) = 0.1 + !------ Decomposition rates... ---------------------------------------------------------! + csite%A_decomp (ip1:ip2) = 0.0 + csite%f_decomp (ip1:ip2) = 0.0 + csite%rh (ip1:ip2) = 0.0 + csite%cwd_rh (ip1:ip2) = 0.0 + csite%mean_rh (ip1:ip2) = 0.0 + csite%mean_cwd_rh (ip1:ip2) = 0.0 + csite%mean_nep (ip1:ip2) = 0.0 + csite%today_A_decomp (ip1:ip2) = 0.0 + csite%today_Af_decomp (ip1:ip2) = 0.0 + !---------------------------------------------------------------------------------------! + + + !------ Miscellaneous variables. -------------------------------------------------------! + csite%repro (1:n_pft,ip1:ip2) = 0.0 + csite%avg_daily_temp (ip1:ip2) = 0.0 + csite%avg_monthly_gndwater (ip1:ip2) = 0.0 + csite%avg_monthly_waterdef (ip1:ip2) = 0.0 + csite%plant_ag_biomass (ip1:ip2) = 0.0 + !---------------------------------------------------------------------------------------! + + + !----- Maximum light variables. --------------------------------------------------------! + csite%A_o_max (1:n_pft,ip1:ip2) = 0.0 + csite%A_c_max (1:n_pft,ip1:ip2) = 0.0 + csite%par_l_max (ip1:ip2) = 0.0 + csite%par_l_beam_max (ip1:ip2) = 0.0 + csite%par_l_diffuse_max (ip1:ip2) = 0.0 + !---------------------------------------------------------------------------------------! + + + + !----- Current and previous time steps. They cannot be set to zero... -----------------! + csite%htry (ip1:ip2) = 1.0 + csite%hprev (ip1:ip2) = 0.1 + !---------------------------------------------------------------------------------------! csite%co2budget_gpp (ip1:ip2) = 0.0 csite%co2budget_gpp_dbh (:,ip1:ip2) = 0.0 @@ -513,6 +583,7 @@ subroutine init_ed_patch_vars(csite,ip1,ip2,lsl) csite%avg_transp (ip1:ip2) = 0.0 csite%avg_evap (ip1:ip2) = 0.0 csite%avg_rshort_gnd (ip1:ip2) = 0.0 + csite%avg_par_gnd (ip1:ip2) = 0.0 csite%avg_rlong_gnd (ip1:ip2) = 0.0 csite%avg_rlongup (ip1:ip2) = 0.0 csite%avg_parup (ip1:ip2) = 0.0 @@ -553,6 +624,9 @@ subroutine init_ed_patch_vars(csite,ip1,ip2,lsl) csite%rshort_g (ip1:ip2) = 0.0 csite%rshort_g_beam (ip1:ip2) = 0.0 csite%rshort_g_diffuse (ip1:ip2) = 0.0 + csite%par_g (ip1:ip2) = 0.0 + csite%par_g_beam (ip1:ip2) = 0.0 + csite%par_g_diffuse (ip1:ip2) = 0.0 csite%par_b (ip1:ip2) = 0.0 csite%par_b_beam (ip1:ip2) = 0.0 csite%par_b_diffuse (ip1:ip2) = 0.0 diff --git a/ED/src/io/average_utils.f90 b/ED/src/io/average_utils.f90 index 878836dd5..4e2cedbae 100644 --- a/ED/src/io/average_utils.f90 +++ b/ED/src/io/average_utils.f90 @@ -49,22 +49,6 @@ subroutine int_met_avg(cgrid) + cpoly%met(isi)%prss * tfact !----- Now the polygon-level averages. -------------------------------------------! - cgrid%avg_nir_beam(ipy) = cgrid%avg_nir_beam(ipy) & - + cpoly%met(isi)%nir_beam * cpoly%area(isi) & - * tfact * polygon_area_i - - cgrid%avg_nir_diffuse(ipy) = cgrid%avg_nir_diffuse(ipy) & - + cpoly%met(isi)%nir_diffuse * cpoly%area(isi) & - * tfact * polygon_area_i - - cgrid%avg_par_beam(ipy) = cgrid%avg_par_beam(ipy) & - + cpoly%met(isi)%par_beam * cpoly%area(isi) & - * tfact * polygon_area_i - - cgrid%avg_par_diffuse(ipy) = cgrid%avg_par_diffuse(ipy) & - + cpoly%met(isi)%par_diffuse * cpoly%area(isi) & - * tfact * polygon_area_i - cgrid%avg_atm_tmp(ipy) = cgrid%avg_atm_tmp(ipy) & + cpoly%met(isi)%atm_tmp * cpoly%area(isi) & * tfact * polygon_area_i @@ -85,6 +69,15 @@ subroutine int_met_avg(cgrid) + cpoly%met(isi)%rshort_diffuse * cpoly%area(isi) & * tfact * polygon_area_i + cgrid%avg_par(ipy) = cgrid%avg_par(ipy) & + + ( cpoly%met(isi)%par_beam & + + cpoly%met(isi)%par_diffuse ) & + * cpoly%area(isi) * tfact * polygon_area_i + + cgrid%avg_par_diffuse(ipy) = cgrid%avg_par_diffuse(ipy) & + + cpoly%met(isi)%par_diffuse * cpoly%area(isi) & + * tfact * polygon_area_i + cgrid%avg_rlong(ipy) = cgrid%avg_rlong(ipy) & + cpoly%met(isi)%rlong * cpoly%area(isi) & * tfact * polygon_area_i @@ -193,6 +186,7 @@ subroutine normalize_averaged_vars(cgrid,frqsum,dtlsm) ! the total time. ! !------------------------------------------------------------------------------! csite%avg_rshort_gnd (ipa) = csite%avg_rshort_gnd (ipa) * frqsumi + csite%avg_par_gnd (ipa) = csite%avg_par_gnd (ipa) * frqsumi csite%avg_rlong_gnd (ipa) = csite%avg_rlong_gnd (ipa) * frqsumi csite%avg_rlongup (ipa) = csite%avg_rlongup (ipa) * frqsumi csite%avg_parup (ipa) = csite%avg_parup (ipa) * frqsumi @@ -257,6 +251,38 @@ subroutine normalize_averaged_vars(cgrid,frqsum,dtlsm) cpatch%mean_storage_resp(ico) = cpatch%mean_storage_resp(ico) * tfact cpatch%mean_growth_resp(ico) = cpatch%mean_growth_resp(ico) * tfact cpatch%mean_vleaf_resp(ico) = cpatch%mean_vleaf_resp(ico) * tfact + !---------------------------------------------------------------------------! + + + + !---------------------------------------------------------------------------! + ! Radiation was updated every step. Use tfact to convert them to W/m2. ! + !---------------------------------------------------------------------------! + cpatch%mean_par_l (ico) = cpatch%mean_par_l (ico) * tfact + cpatch%mean_par_l_beam (ico) = cpatch%mean_par_l_beam (ico) * tfact + cpatch%mean_par_l_diff (ico) = cpatch%mean_par_l_diff (ico) * tfact + cpatch%mean_rshort_l (ico) = cpatch%mean_rshort_l (ico) * tfact + cpatch%mean_rlong_l (ico) = cpatch%mean_rlong_l (ico) * tfact + cpatch%mean_rshort_w (ico) = cpatch%mean_rshort_w (ico) * tfact + cpatch%mean_rlong_w (ico) = cpatch%mean_rlong_w (ico) * tfact + !---------------------------------------------------------------------------! + + + !---------------------------------------------------------------------------! + ! Energy and water fluxes were integrated over the past frqsum ! + ! interval. Use frqsumi to normalise them. Energy fluxes will become ! + ! W/m², and water fluxes will become kg/m²/s. ! + !---------------------------------------------------------------------------! + cpatch%mean_sensible_lc (ico) = cpatch%mean_sensible_lc (ico) * frqsumi + cpatch%mean_vapor_lc (ico) = cpatch%mean_vapor_lc (ico) * frqsumi + cpatch%mean_transp (ico) = cpatch%mean_transp (ico) * frqsumi + cpatch%mean_intercepted_al(ico) = cpatch%mean_intercepted_al(ico) * frqsumi + cpatch%mean_wshed_lg (ico) = cpatch%mean_wshed_lg (ico) * frqsumi + cpatch%mean_sensible_wc (ico) = cpatch%mean_sensible_wc (ico) * frqsumi + cpatch%mean_vapor_wc (ico) = cpatch%mean_vapor_wc (ico) * frqsumi + cpatch%mean_intercepted_aw(ico) = cpatch%mean_intercepted_aw(ico) * frqsumi + cpatch%mean_wshed_wg (ico) = cpatch%mean_wshed_wg (ico) * frqsumi + !---------------------------------------------------------------------------! end do !------------------------------------------------------------------------------! @@ -266,7 +292,9 @@ subroutine normalize_averaged_vars(cgrid,frqsum,dtlsm) !------------------------------------------------------------------------------! csite%mean_rh (ipa) = csite%mean_rh (ipa) * tfact csite%mean_cwd_rh(ipa) = csite%mean_cwd_rh(ipa) * tfact - + !------------------------------------------------------------------------------! + + !------------------------------------------------------------------------------! ! Budget variables. They contain integral values, so we must divide by ! ! the elapsed time to get them in flux units. ! @@ -333,15 +361,13 @@ subroutine reset_averaged_vars(cgrid) polyloop: do ipy = 1,cgrid%npolygons cgrid%cbudget_nep (ipy) = 0.0 - cgrid%avg_nir_beam (ipy) = 0.0 - cgrid%avg_nir_diffuse (ipy) = 0.0 - cgrid%avg_par_beam (ipy) = 0.0 - cgrid%avg_par_diffuse (ipy) = 0.0 cgrid%avg_atm_tmp (ipy) = 0.0 cgrid%avg_atm_vpdef (ipy) = 0.0 cgrid%avg_atm_shv (ipy) = 0.0 cgrid%avg_rshort (ipy) = 0.0 cgrid%avg_rshort_diffuse (ipy) = 0.0 + cgrid%avg_par (ipy) = 0.0 + cgrid%avg_par_diffuse (ipy) = 0.0 cgrid%avg_rlong (ipy) = 0.0 cgrid%avg_pcpg (ipy) = 0.0 cgrid%avg_qpcpg (ipy) = 0.0 @@ -499,95 +525,112 @@ subroutine reset_averaged_vars(cgrid) !----------------------------------------------------------------! ! Zeroing CO2 budget variables. ! !----------------------------------------------------------------! - csite%co2budget_gpp(ipa) = 0.0 - csite%co2budget_gpp_dbh(:,ipa) = 0.0 - csite%co2budget_rh(ipa) = 0.0 - csite%co2budget_cwd_rh(ipa) = 0.0 - csite%co2budget_plresp(ipa) = 0.0 - csite%co2budget_residual(ipa) = 0.0 - csite%co2budget_loss2atm(ipa) = 0.0 - csite%co2budget_denseffect(ipa) = 0.0 + csite%co2budget_gpp (ipa) = 0.0 + csite%co2budget_gpp_dbh (:,ipa) = 0.0 + csite%co2budget_rh (ipa) = 0.0 + csite%co2budget_cwd_rh (ipa) = 0.0 + csite%co2budget_plresp (ipa) = 0.0 + csite%co2budget_residual (ipa) = 0.0 + csite%co2budget_loss2atm (ipa) = 0.0 + csite%co2budget_denseffect (ipa) = 0.0 !----------------------------------------------------------------! ! Zeroing water budget variables. ! !----------------------------------------------------------------! - csite%wbudget_precipgain(ipa) = 0.0 - csite%wbudget_loss2atm(ipa) = 0.0 - csite%wbudget_loss2runoff(ipa) = 0.0 - csite%wbudget_loss2drainage(ipa) = 0.0 - csite%wbudget_denseffect(ipa) = 0.0 - csite%wbudget_residual(ipa) = 0.0 + csite%wbudget_precipgain (ipa) = 0.0 + csite%wbudget_loss2atm (ipa) = 0.0 + csite%wbudget_loss2runoff (ipa) = 0.0 + csite%wbudget_loss2drainage (ipa) = 0.0 + csite%wbudget_denseffect (ipa) = 0.0 + csite%wbudget_residual (ipa) = 0.0 !----------------------------------------------------------------! ! Zeroing energy budget variables. ! !----------------------------------------------------------------! - csite%ebudget_precipgain(ipa) = 0.0 - csite%ebudget_netrad(ipa) = 0.0 - csite%ebudget_loss2atm(ipa) = 0.0 - csite%ebudget_loss2runoff(ipa) = 0.0 - csite%ebudget_loss2drainage(ipa) = 0.0 - csite%ebudget_denseffect(ipa) = 0.0 - csite%ebudget_prsseffect(ipa) = 0.0 - csite%ebudget_residual(ipa) = 0.0 + csite%ebudget_precipgain (ipa) = 0.0 + csite%ebudget_netrad (ipa) = 0.0 + csite%ebudget_loss2atm (ipa) = 0.0 + csite%ebudget_loss2runoff (ipa) = 0.0 + csite%ebudget_loss2drainage (ipa) = 0.0 + csite%ebudget_denseffect (ipa) = 0.0 + csite%ebudget_prsseffect (ipa) = 0.0 + csite%ebudget_residual (ipa) = 0.0 !----------------------------------------------------------------! - csite%avg_ustar (ipa) = 0.0 - csite%avg_tstar (ipa) = 0.0 - csite%avg_qstar (ipa) = 0.0 - csite%avg_cstar (ipa) = 0.0 - csite%avg_carbon_ac(ipa) = 0.0 - csite%avg_carbon_st(ipa) = 0.0 - csite%avg_vapor_lc(ipa) = 0.0 - csite%avg_vapor_wc(ipa) = 0.0 - csite%avg_vapor_gc(ipa) = 0.0 - csite%avg_wshed_vg(ipa) = 0.0 - csite%avg_intercepted(ipa) = 0.0 - csite%avg_throughfall(ipa) = 0.0 - csite%avg_vapor_ac(ipa) = 0.0 - csite%avg_transp(ipa) = 0.0 - csite%avg_evap(ipa) = 0.0 - csite%avg_rshort_gnd(ipa) = 0.0 - csite%avg_rlong_gnd(ipa) = 0.0 - csite%avg_rlongup (ipa) = 0.0 - csite%avg_parup (ipa) = 0.0 - csite%avg_nirup (ipa) = 0.0 - csite%avg_rshortup (ipa) = 0.0 - csite%avg_rnet (ipa) = 0.0 - csite%avg_albedo (ipa) = 0.0 - csite%avg_albedo_beam (ipa) = 0.0 - csite%avg_albedo_diffuse (ipa) = 0.0 - csite%avg_rlong_albedo (ipa) = 0.0 - csite%avg_smoist_gg(:,ipa) = 0.0 - csite%avg_transloss(:,ipa) = 0.0 - csite%avg_runoff(ipa) = 0.0 - csite%avg_runoff_heat(ipa) = 0.0 - csite%avg_drainage(ipa) = 0.0 - csite%avg_drainage_heat(ipa) = 0.0 - csite%avg_sensible_lc(ipa) = 0.0 - csite%avg_sensible_wc(ipa) = 0.0 - csite%avg_qwshed_vg(ipa) = 0.0 - csite%avg_qintercepted(ipa) = 0.0 - csite%avg_qthroughfall(ipa) = 0.0 - csite%avg_sensible_gc(ipa) = 0.0 - csite%avg_sensible_ac(ipa) = 0.0 - csite%avg_sensible_gg(:,ipa) = 0.0 - csite%avg_runoff_heat(ipa) = 0.0 - csite%avg_rk4step(ipa) = 0.0 - csite%avg_available_water(ipa) = 0.0 - csite%mean_rh(ipa) = 0.0 - csite%mean_cwd_rh(ipa) = 0.0 + csite%avg_ustar (ipa) = 0.0 + csite%avg_tstar (ipa) = 0.0 + csite%avg_qstar (ipa) = 0.0 + csite%avg_cstar (ipa) = 0.0 + csite%avg_carbon_ac (ipa) = 0.0 + csite%avg_carbon_st (ipa) = 0.0 + csite%avg_vapor_lc (ipa) = 0.0 + csite%avg_vapor_wc (ipa) = 0.0 + csite%avg_vapor_gc (ipa) = 0.0 + csite%avg_wshed_vg (ipa) = 0.0 + csite%avg_intercepted (ipa) = 0.0 + csite%avg_throughfall (ipa) = 0.0 + csite%avg_vapor_ac (ipa) = 0.0 + csite%avg_transp (ipa) = 0.0 + csite%avg_evap (ipa) = 0.0 + csite%avg_rshort_gnd (ipa) = 0.0 + csite%avg_par_gnd (ipa) = 0.0 + csite%avg_rlong_gnd (ipa) = 0.0 + csite%avg_rlongup (ipa) = 0.0 + csite%avg_parup (ipa) = 0.0 + csite%avg_nirup (ipa) = 0.0 + csite%avg_rshortup (ipa) = 0.0 + csite%avg_rnet (ipa) = 0.0 + csite%avg_albedo (ipa) = 0.0 + csite%avg_albedo_beam (ipa) = 0.0 + csite%avg_albedo_diffuse (ipa) = 0.0 + csite%avg_rlong_albedo (ipa) = 0.0 + csite%avg_smoist_gg (:,ipa) = 0.0 + csite%avg_transloss (:,ipa) = 0.0 + csite%avg_runoff (ipa) = 0.0 + csite%avg_runoff_heat (ipa) = 0.0 + csite%avg_drainage (ipa) = 0.0 + csite%avg_drainage_heat (ipa) = 0.0 + csite%avg_sensible_lc (ipa) = 0.0 + csite%avg_sensible_wc (ipa) = 0.0 + csite%avg_qwshed_vg (ipa) = 0.0 + csite%avg_qintercepted (ipa) = 0.0 + csite%avg_qthroughfall (ipa) = 0.0 + csite%avg_sensible_gc (ipa) = 0.0 + csite%avg_sensible_ac (ipa) = 0.0 + csite%avg_sensible_gg (:,ipa) = 0.0 + csite%avg_runoff_heat (ipa) = 0.0 + csite%avg_rk4step (ipa) = 0.0 + csite%avg_available_water (ipa) = 0.0 + csite%mean_rh (ipa) = 0.0 + csite%mean_cwd_rh (ipa) = 0.0 cohortloop: do ico=1,cpatch%ncohorts - cpatch%leaf_respiration(ico) = 0.0 - cpatch%root_respiration(ico) = 0.0 - cpatch%gpp(ico) = 0.0 - cpatch%mean_leaf_resp(ico) = 0.0 - cpatch%mean_root_resp(ico) = 0.0 - cpatch%mean_gpp(ico) = 0.0 - cpatch%mean_storage_resp(ico) = 0.0 - cpatch%mean_growth_resp(ico) = 0.0 - cpatch%mean_vleaf_resp(ico) = 0.0 + cpatch%leaf_respiration (ico) = 0.0 + cpatch%root_respiration (ico) = 0.0 + cpatch%gpp (ico) = 0.0 + cpatch%mean_leaf_resp (ico) = 0.0 + cpatch%mean_root_resp (ico) = 0.0 + cpatch%mean_gpp (ico) = 0.0 + cpatch%mean_storage_resp (ico) = 0.0 + cpatch%mean_growth_resp (ico) = 0.0 + cpatch%mean_vleaf_resp (ico) = 0.0 + cpatch%mean_par_l (ico) = 0.0 + cpatch%mean_par_l_beam (ico) = 0.0 + cpatch%mean_par_l_diff (ico) = 0.0 + cpatch%mean_rshort_l (ico) = 0.0 + cpatch%mean_rlong_l (ico) = 0.0 + cpatch%mean_sensible_lc (ico) = 0.0 + cpatch%mean_vapor_lc (ico) = 0.0 + cpatch%mean_transp (ico) = 0.0 + cpatch%mean_intercepted_al (ico) = 0.0 + cpatch%mean_wshed_lg (ico) = 0.0 + cpatch%mean_rshort_w (ico) = 0.0 + cpatch%mean_rlong_w (ico) = 0.0 + cpatch%mean_sensible_wc (ico) = 0.0 + cpatch%mean_vapor_wc (ico) = 0.0 + cpatch%mean_intercepted_aw (ico) = 0.0 + cpatch%mean_wshed_wg (ico) = 0.0 end do cohortloop end do patchloop end do siteloop @@ -646,7 +689,7 @@ subroutine integrate_ed_daily_output_state(cgrid) integer :: isi integer :: ipa integer :: ico - integer :: it + integer :: t real :: poly_area_i real :: site_area_i real :: forest_site @@ -690,8 +733,8 @@ subroutine integrate_ed_daily_output_state(cgrid) ! Find the index corresponding to this time of the day for the mean diurnal cycle ! ! averages. ! !---------------------------------------------------------------------------------------! - it = ceiling(mod(current_time%time,day_sec)/frqfast) - if (it == 0) it = nint(day_sec/frqfast) + t = ceiling(mod(current_time%time,day_sec)/frqfast) + if (t == 0) t = nint(day_sec/frqfast) !---------------------------------------------------------------------------------------! polyloop: do ipy=1,cgrid%npolygons @@ -783,12 +826,32 @@ subroutine integrate_ed_daily_output_state(cgrid) do ico=1,cpatch%ncohorts if (cpatch%leaf_resolvable(ico)) then - cpatch%dmean_par_l (ico) = cpatch%dmean_par_l (ico) & - + cpatch%par_l (ico) - cpatch%dmean_par_l_beam (ico) = cpatch%dmean_par_l_beam (ico) & - + cpatch%par_l_beam (ico) - cpatch%dmean_par_l_diff (ico) = cpatch%dmean_par_l_diff (ico) & - + cpatch%par_l_diffuse (ico) + !------------------------------------------------------------------------! + ! Energy and water fluxes. ! + !------------------------------------------------------------------------! + cpatch%dmean_par_l (ico) = cpatch%dmean_par_l (ico) & + + cpatch%mean_par_l (ico) + cpatch%dmean_par_l_beam (ico) = cpatch%dmean_par_l_beam (ico) & + + cpatch%mean_par_l_beam (ico) + cpatch%dmean_par_l_diff (ico) = cpatch%dmean_par_l_diff (ico) & + + cpatch%mean_par_l_diff (ico) + cpatch%dmean_rshort_l (ico) = cpatch%dmean_rshort_l (ico) & + + cpatch%mean_rshort_l (ico) + cpatch%dmean_rlong_l (ico) = cpatch%dmean_rlong_l (ico) & + + cpatch%mean_rlong_l (ico) + cpatch%dmean_sensible_lc (ico) = cpatch%dmean_sensible_lc (ico) & + + cpatch%mean_sensible_lc (ico) + cpatch%dmean_vapor_lc (ico) = cpatch%dmean_vapor_lc (ico) & + + cpatch%mean_vapor_lc (ico) + cpatch%dmean_transp (ico) = cpatch%dmean_transp (ico) & + + cpatch%mean_transp (ico) + cpatch%dmean_intercepted_al (ico) = cpatch%dmean_intercepted_al (ico) & + + cpatch%mean_intercepted_al (ico) + cpatch%dmean_wshed_lg (ico) = cpatch%dmean_wshed_lg (ico) & + + cpatch%mean_wshed_lg (ico) + !------------------------------------------------------------------------! + + !------------------------------------------------------------------------! ! Integrate the photosynthesis-related variables and the light level ! @@ -825,28 +888,74 @@ subroutine integrate_ed_daily_output_state(cgrid) ! the day may vary. ! !------------------------------------------------------------------------! if (iqoutput > 0) then - cpatch%qmean_par_l (it,ico) = cpatch%qmean_par_l (it,ico) & - + cpatch%par_l (ico) - cpatch%qmean_par_l_beam (it,ico) = cpatch%qmean_par_l_beam (it,ico) & - + cpatch%par_l_beam (ico) - cpatch%qmean_par_l_diff (it,ico) = cpatch%qmean_par_l_diff (it,ico) & - + cpatch%par_l_diffuse (ico) - cpatch%qmean_fs_open (it,ico) = cpatch%qmean_fs_open (it,ico) & - + cpatch%fs_open (ico) - cpatch%qmean_fsw (it,ico) = cpatch%qmean_fsw (it,ico) & - + cpatch%fsw (ico) - cpatch%qmean_fsn (it,ico) = cpatch%qmean_fsn (it,ico) & - + cpatch%fsn (ico) - cpatch%qmean_psi_open (it,ico) = cpatch%qmean_psi_open (it,ico) & - + cpatch%psi_open (ico) - cpatch%qmean_psi_closed (it,ico) = cpatch%qmean_psi_closed (it,ico) & - + cpatch%psi_closed (ico) - cpatch%qmean_water_supply(it,ico) = cpatch%qmean_water_supply(it,ico) & - + cpatch%water_supply (ico) + cpatch%qmean_fs_open (t,ico)=cpatch%qmean_fs_open (t,ico) & + +cpatch%fs_open (ico) + cpatch%qmean_fsw (t,ico)=cpatch%qmean_fsw (t,ico) & + +cpatch%fsw (ico) + cpatch%qmean_fsn (t,ico)=cpatch%qmean_fsn (t,ico) & + +cpatch%fsn (ico) + cpatch%qmean_psi_open (t,ico)=cpatch%qmean_psi_open (t,ico) & + +cpatch%psi_open (ico) + cpatch%qmean_psi_closed (t,ico)=cpatch%qmean_psi_closed (t,ico) & + +cpatch%psi_closed (ico) + cpatch%qmean_water_supply (t,ico)=cpatch%qmean_water_supply (t,ico) & + +cpatch%water_supply (ico) + cpatch%qmean_par_l (t,ico)=cpatch%qmean_par_l (t,ico) & + +cpatch%mean_par_l (ico) + cpatch%qmean_par_l_beam (t,ico)=cpatch%qmean_par_l_beam (t,ico) & + +cpatch%mean_par_l_beam (ico) + cpatch%qmean_par_l_diff (t,ico)=cpatch%qmean_par_l_diff (t,ico) & + +cpatch%mean_par_l_diff (ico) + cpatch%qmean_rshort_l (t,ico)=cpatch%qmean_rshort_l (t,ico) & + +cpatch%mean_rshort_l (ico) + cpatch%qmean_rlong_l (t,ico)=cpatch%qmean_rlong_l (t,ico) & + +cpatch%mean_rlong_l (ico) + cpatch%qmean_sensible_lc (t,ico)=cpatch%qmean_sensible_lc (t,ico) & + +cpatch%mean_sensible_lc (ico) + cpatch%qmean_vapor_lc (t,ico)=cpatch%qmean_vapor_lc (t,ico) & + +cpatch%mean_vapor_lc (ico) + cpatch%qmean_transp (t,ico)=cpatch%qmean_transp (t,ico) & + +cpatch%mean_transp (ico) + cpatch%qmean_intercepted_al(t,ico)=cpatch%qmean_intercepted_al(t,ico) & + +cpatch%mean_intercepted_al (ico) + cpatch%qmean_wshed_lg (t,ico)=cpatch%qmean_wshed_lg (t,ico) & + +cpatch%mean_wshed_lg (ico) + cpatch%qmean_rshort_w (t,ico)=cpatch%qmean_rshort_w (t,ico) & + +cpatch%mean_rshort_w (ico) + cpatch%qmean_rlong_w (t,ico)=cpatch%qmean_rlong_w (t,ico) & + +cpatch%mean_rlong_w (ico) + cpatch%qmean_sensible_wc (t,ico)=cpatch%qmean_sensible_wc (t,ico) & + +cpatch%mean_sensible_wc (ico) + cpatch%qmean_vapor_wc (t,ico)=cpatch%qmean_vapor_wc (t,ico) & + +cpatch%mean_vapor_wc (ico) + cpatch%qmean_intercepted_aw(t,ico)=cpatch%qmean_intercepted_aw(t,ico) & + +cpatch%mean_intercepted_aw (ico) + cpatch%qmean_wshed_wg (t,ico)=cpatch%qmean_wshed_wg (t,ico) & + +cpatch%mean_wshed_wg (ico) + end if !------------------------------------------------------------------------! end if + + if (cpatch%wood_resolvable(ico)) then + !------------------------------------------------------------------------! + ! Energy and water fluxes. ! + !------------------------------------------------------------------------! + cpatch%dmean_rshort_w (ico) = cpatch%dmean_rshort_w (ico) & + + cpatch%mean_rshort_w (ico) + cpatch%dmean_rlong_w (ico) = cpatch%dmean_rlong_w (ico) & + + cpatch%mean_rlong_w (ico) + cpatch%dmean_sensible_wc (ico) = cpatch%dmean_sensible_wc (ico) & + + cpatch%mean_sensible_wc (ico) + cpatch%dmean_vapor_wc (ico) = cpatch%dmean_vapor_wc (ico) & + + cpatch%mean_vapor_wc (ico) + cpatch%dmean_intercepted_aw (ico) = cpatch%dmean_intercepted_aw (ico) & + + cpatch%mean_intercepted_aw (ico) + cpatch%dmean_wshed_wg (ico) = cpatch%dmean_wshed_wg (ico) & + + cpatch%mean_wshed_wg (ico) + !------------------------------------------------------------------------! + end if end do end do patchloop @@ -948,6 +1057,13 @@ subroutine integrate_ed_daily_output_state(cgrid) + ( cpoly%met(isi)%nir_diffuse & + cpoly%met(isi)%par_diffuse ) & * cpoly%area(isi) * poly_area_i + cgrid%dmean_par(ipy) = cgrid%dmean_par(ipy) & + + ( cpoly%met(isi)%par_beam & + + cpoly%met(isi)%par_diffuse ) & + * cpoly%area(isi) * poly_area_i + cgrid%dmean_par_diff(ipy) = cgrid%dmean_par_diff(ipy) & + + cpoly%met(isi)%par_diffuse & + * cpoly%area(isi) * poly_area_i cgrid%dmean_rlong(ipy) = cgrid%dmean_rlong(ipy) & + cpoly%met(isi)%rlong & * cpoly%area(isi) * poly_area_i @@ -975,35 +1091,35 @@ subroutine integrate_ed_daily_output_state(cgrid) ! If we are integrating the mean diurnal cycle, sum them too. ! !------------------------------------------------------------------------------------! if (iqoutput > 0) then - cgrid%qmean_leaf_energy (it,ipy) = cgrid%qmean_leaf_energy (it,ipy) & + cgrid%qmean_leaf_energy (t,ipy) = cgrid%qmean_leaf_energy (t,ipy) & + sss_leaf_energy * poly_area_i - cgrid%qmean_leaf_water (it,ipy) = cgrid%qmean_leaf_water (it,ipy) & + cgrid%qmean_leaf_water (t,ipy) = cgrid%qmean_leaf_water (t,ipy) & + sss_leaf_water * poly_area_i - cgrid%qmean_leaf_hcap (it,ipy) = cgrid%qmean_leaf_hcap (it,ipy) & + cgrid%qmean_leaf_hcap (t,ipy) = cgrid%qmean_leaf_hcap (t,ipy) & + sss_leaf_hcap * poly_area_i - cgrid%qmean_leaf_vpdef (it,ipy) = cgrid%qmean_leaf_vpdef (it,ipy) & + cgrid%qmean_leaf_vpdef (t,ipy) = cgrid%qmean_leaf_vpdef (t,ipy) & + sss_leaf_vpdef * poly_area_i - cgrid%qmean_wood_energy (it,ipy) = cgrid%qmean_wood_energy (it,ipy) & + cgrid%qmean_wood_energy (t,ipy) = cgrid%qmean_wood_energy (t,ipy) & + sss_wood_energy * poly_area_i - cgrid%qmean_wood_water (it,ipy) = cgrid%qmean_wood_water (it,ipy) & + cgrid%qmean_wood_water (t,ipy) = cgrid%qmean_wood_water (t,ipy) & + sss_wood_water * poly_area_i - cgrid%qmean_wood_hcap (it,ipy) = cgrid%qmean_wood_hcap (it,ipy) & + cgrid%qmean_wood_hcap (t,ipy) = cgrid%qmean_wood_hcap (t,ipy) & + sss_wood_hcap * poly_area_i - cgrid%qmean_can_theta (it,ipy) = cgrid%qmean_can_theta (it,ipy) & + cgrid%qmean_can_theta (t,ipy) = cgrid%qmean_can_theta (t,ipy) & + sss_can_theta * poly_area_i - cgrid%qmean_can_theiv (it,ipy) = cgrid%qmean_can_theiv (it,ipy) & + cgrid%qmean_can_theiv (t,ipy) = cgrid%qmean_can_theiv (t,ipy) & + sss_can_theiv * poly_area_i - cgrid%qmean_can_vpdef (it,ipy) = cgrid%qmean_can_vpdef (it,ipy) & + cgrid%qmean_can_vpdef (t,ipy) = cgrid%qmean_can_vpdef (t,ipy) & + sss_can_vpdef * poly_area_i - cgrid%qmean_can_shv (it,ipy) = cgrid%qmean_can_shv (it,ipy) & + cgrid%qmean_can_shv (t,ipy) = cgrid%qmean_can_shv (t,ipy) & + sss_can_shv * poly_area_i - cgrid%qmean_can_co2 (it,ipy) = cgrid%qmean_can_co2 (it,ipy) & + cgrid%qmean_can_co2 (t,ipy) = cgrid%qmean_can_co2 (t,ipy) & + sss_can_co2 * poly_area_i - cgrid%qmean_can_prss (it,ipy) = cgrid%qmean_can_prss (it,ipy) & + cgrid%qmean_can_prss (t,ipy) = cgrid%qmean_can_prss (t,ipy) & + sss_can_prss * poly_area_i - cgrid%qmean_gnd_temp (it,ipy) = cgrid%qmean_gnd_temp (it,ipy) & + cgrid%qmean_gnd_temp (t,ipy) = cgrid%qmean_gnd_temp (t,ipy) & + sss_gnd_temp * poly_area_i - cgrid%qmean_gnd_shv (it,ipy) = cgrid%qmean_gnd_shv (it,ipy) & + cgrid%qmean_gnd_shv (t,ipy) = cgrid%qmean_gnd_shv (t,ipy) & + sss_gnd_shv * poly_area_i !---------------------------------------------------------------------------------! ! Meteorological forcing variables: even though we read in at polygon level, ! @@ -1011,35 +1127,42 @@ subroutine integrate_ed_daily_output_state(cgrid) ! uses. ! !---------------------------------------------------------------------------------! do isi=1,cpoly%nsites - cgrid%qmean_atm_temp (it,ipy) = cgrid%qmean_atm_temp (it,ipy) & + cgrid%qmean_atm_temp (t,ipy) = cgrid%qmean_atm_temp (t,ipy) & + cpoly%met(isi)%atm_tmp & * cpoly%area(isi) * poly_area_i - cgrid%qmean_atm_vpdef (it,ipy) = cgrid%qmean_atm_vpdef (it,ipy) & + cgrid%qmean_atm_vpdef (t,ipy) = cgrid%qmean_atm_vpdef (t,ipy) & + cpoly%met(isi)%atm_vpdef & * cpoly%area(isi) * poly_area_i - cgrid%qmean_rshort (it,ipy) = cgrid%qmean_rshort (it,ipy) & + cgrid%qmean_rshort (t,ipy) = cgrid%qmean_rshort (t,ipy) & + ( cpoly%met(isi)%nir_beam & + cpoly%met(isi)%nir_diffuse & + cpoly%met(isi)%par_beam & + cpoly%met(isi)%par_diffuse ) & * cpoly%area(isi) * poly_area_i - cgrid%qmean_rshort_diff (it,ipy) = cgrid%qmean_rshort_diff (it,ipy) & + cgrid%qmean_rshort_diff (t,ipy) = cgrid%qmean_rshort_diff (t,ipy) & + ( cpoly%met(isi)%nir_diffuse & + cpoly%met(isi)%par_diffuse ) & * cpoly%area(isi) * poly_area_i - cgrid%qmean_rlong (it,ipy) = cgrid%qmean_rlong (it,ipy) & + cgrid%qmean_par (t,ipy) = cgrid%qmean_par (t,ipy) & + + ( cpoly%met(isi)%par_beam & + + cpoly%met(isi)%par_diffuse ) & + * cpoly%area(isi) * poly_area_i + cgrid%qmean_par_diff (t,ipy) = cgrid%qmean_par_diff (t,ipy) & + + cpoly%met(isi)%par_diffuse & + * cpoly%area(isi) * poly_area_i + cgrid%qmean_rlong (t,ipy) = cgrid%qmean_rlong (t,ipy) & + cpoly%met(isi)%rlong & * cpoly%area(isi) * poly_area_i - cgrid%qmean_atm_shv (it,ipy) = cgrid%qmean_atm_shv (it,ipy) & + cgrid%qmean_atm_shv (t,ipy) = cgrid%qmean_atm_shv (t,ipy) & + cpoly%met(isi)%atm_shv & * cpoly%area(isi) * poly_area_i - cgrid%qmean_atm_co2 (it,ipy) = cgrid%qmean_atm_co2 (it,ipy) & + cgrid%qmean_atm_co2 (t,ipy) = cgrid%qmean_atm_co2 (t,ipy) & + cpoly%met(isi)%atm_co2 & * cpoly%area(isi) * poly_area_i - cgrid%qmean_atm_prss (it,ipy) = cgrid%qmean_atm_prss (it,ipy) & + cgrid%qmean_atm_prss (t,ipy) = cgrid%qmean_atm_prss (t,ipy) & + cpoly%met(isi)%prss & * cpoly%area(isi) * poly_area_i - cgrid%qmean_atm_vels (it,ipy) = cgrid%qmean_atm_vels (it,ipy) & + cgrid%qmean_atm_vels (t,ipy) = cgrid%qmean_atm_vels (t,ipy) & + cpoly%met(isi)%vels & * cpoly%area(isi) * poly_area_i end do @@ -1098,7 +1221,7 @@ subroutine integrate_ed_daily_output_flux(cgrid) integer :: k integer :: ilu integer :: idbh - integer :: it + integer :: t real :: poly_area_i real :: site_area_i real :: forest_site @@ -1135,8 +1258,8 @@ subroutine integrate_ed_daily_output_flux(cgrid) ! Find the index corresponding to this time of the day for the mean diurnal cycle ! ! averages. ! !---------------------------------------------------------------------------------------! - it = ceiling(mod(current_time%time,day_sec)/frqfast) - if (it == 0) it = nint(day_sec/frqfast) + t = ceiling(mod(current_time%time,day_sec)/frqfast) + if (t == 0) t = nint(day_sec/frqfast) !---------------------------------------------------------------------------------------! @@ -1244,15 +1367,15 @@ subroutine integrate_ed_daily_output_flux(cgrid) if (iqoutput > 0) then do ico=1,cpatch%ncohorts if (cpatch%leaf_resolvable(ico)) then - cpatch%qmean_gpp (it,ico) = cpatch%qmean_gpp (it,ico) & + cpatch%qmean_gpp (t,ico) = cpatch%qmean_gpp (t,ico) & + cpatch%mean_gpp (ico) & * umols_2_kgCyr & / cpatch%nplant(ico) - cpatch%qmean_leaf_resp(it,ico) = cpatch%qmean_leaf_resp (it,ico) & + cpatch%qmean_leaf_resp (t,ico) = cpatch%qmean_leaf_resp (t,ico) & + cpatch%mean_leaf_resp (ico) & * umols_2_kgCyr & / cpatch%nplant(ico) - cpatch%qmean_root_resp(it,ico) = cpatch%qmean_root_resp (it,ico) & + cpatch%qmean_root_resp (t,ico) = cpatch%qmean_root_resp (t,ico) & + cpatch%mean_root_resp (ico) & * umols_2_kgCyr & / cpatch%nplant(ico) @@ -1285,17 +1408,17 @@ subroutine integrate_ed_daily_output_flux(cgrid) csite%dmean_rk4step (ipa) = csite%dmean_rk4step (ipa) & + csite%avg_rk4step (ipa) if (iqoutput > 0) then - csite%qmean_rh (it,ipa) = csite%qmean_rh (it,ipa) & + csite%qmean_rh (t,ipa) = csite%qmean_rh (t,ipa) & + csite%co2budget_rh (ipa) & * umols_2_kgCyr - csite%qmean_cwd_rh (it,ipa) = csite%qmean_cwd_rh (it,ipa) & + csite%qmean_cwd_rh (t,ipa) = csite%qmean_cwd_rh (t,ipa) & + csite%co2budget_cwd_rh (ipa) & * umols_2_kgCyr - csite%qmean_albedo (it,ipa) = csite%qmean_albedo (it,ipa) & + csite%qmean_albedo (t,ipa) = csite%qmean_albedo (t,ipa) & + csite%avg_albedo (ipa) - csite%qmean_albedo_beam (it,ipa) = csite%qmean_albedo_beam (it,ipa) & + csite%qmean_albedo_beam (t,ipa) = csite%qmean_albedo_beam (t,ipa) & + csite%avg_albedo_beam (ipa) - csite%qmean_albedo_diffuse(it,ipa) = csite%qmean_albedo_diffuse(it,ipa) & + csite%qmean_albedo_diffuse (t,ipa) = csite%qmean_albedo_diffuse (t,ipa) & + csite%avg_albedo_diffuse (ipa) end if @@ -1435,6 +1558,8 @@ subroutine integrate_ed_daily_output_flux(cgrid) cgrid%dmean_rshort_gnd (ipy) = cgrid%dmean_rshort_gnd (ipy) & + cgrid%avg_rshort_gnd (ipy) + cgrid%dmean_par_gnd (ipy) = cgrid%dmean_par_gnd (ipy) & + + cgrid%avg_par_gnd (ipy) cgrid%dmean_rlong_gnd (ipy) = cgrid%dmean_rlong_gnd (ipy) & + cgrid%avg_rlong_gnd (ipy) cgrid%dmean_rlongup (ipy) = cgrid%dmean_rlongup (ipy) & @@ -1482,19 +1607,19 @@ subroutine integrate_ed_daily_output_flux(cgrid) !------------------------------------------------------------------------------------! if (iqoutput > 0) then !------ Use the local site sum to integrate the following variables. -------------! - cgrid%qmean_gpp (it,ipy) = cgrid%qmean_gpp (it,ipy) & + cgrid%qmean_gpp (t,ipy) = cgrid%qmean_gpp (t,ipy) & + cgrid%avg_gpp (ipy) & * umols_2_kgCyr - cgrid%qmean_leaf_resp (it,ipy) = cgrid%qmean_leaf_resp (it,ipy) & + cgrid%qmean_leaf_resp (t,ipy) = cgrid%qmean_leaf_resp (t,ipy) & + cgrid%avg_leaf_resp (ipy) & * umols_2_kgCyr - cgrid%qmean_root_resp (it,ipy) = cgrid%qmean_root_resp (it,ipy) & + cgrid%qmean_root_resp (t,ipy) = cgrid%qmean_root_resp (t,ipy) & + cgrid%avg_root_resp (ipy) & * umols_2_kgCyr - cgrid%qmean_plresp (it,ipy) = cgrid%qmean_plresp (it,ipy) & + cgrid%qmean_plresp (t,ipy) = cgrid%qmean_plresp (t,ipy) & + cgrid%avg_plant_resp (ipy) & * umols_2_kgCyr - cgrid%qmean_nep (it,ipy) = cgrid%qmean_nep (it,ipy) & + cgrid%qmean_nep (t,ipy) = cgrid%qmean_nep (t,ipy) & + ( cgrid%avg_gpp (ipy) & - cgrid%avg_leaf_resp (ipy) & - cgrid%avg_root_resp (ipy) & @@ -1503,108 +1628,110 @@ subroutine integrate_ed_daily_output_flux(cgrid) - cgrid%avg_vleaf_resp (ipy) & - cgrid%avg_htroph_resp (ipy)) & * umols_2_kgCyr - cgrid%qmean_rh (it,ipy) = cgrid%qmean_rh (it,ipy) & + cgrid%qmean_rh (t,ipy) = cgrid%qmean_rh (t,ipy) & + cgrid%avg_htroph_resp (ipy) & * umols_2_kgCyr - cgrid%qmean_cwd_rh (it,ipy) = cgrid%qmean_cwd_rh (it,ipy) & + cgrid%qmean_cwd_rh (t,ipy) = cgrid%qmean_cwd_rh (t,ipy) & + cgrid%avg_cwd_resp (ipy) & * umols_2_kgCyr - cgrid%qmean_ustar (it,ipy) = cgrid%qmean_ustar (it,ipy) & + cgrid%qmean_ustar (t,ipy) = cgrid%qmean_ustar (t,ipy) & + cgrid%avg_ustar (ipy) - cgrid%qmean_tstar (it,ipy) = cgrid%qmean_tstar (it,ipy) & + cgrid%qmean_tstar (t,ipy) = cgrid%qmean_tstar (t,ipy) & + cgrid%avg_tstar (ipy) - cgrid%qmean_qstar (it,ipy) = cgrid%qmean_qstar (it,ipy) & + cgrid%qmean_qstar (t,ipy) = cgrid%qmean_qstar (t,ipy) & + cgrid%avg_qstar (ipy) - cgrid%qmean_cstar (it,ipy) = cgrid%qmean_cstar (it,ipy) & + cgrid%qmean_cstar (t,ipy) = cgrid%qmean_cstar (t,ipy) & + cgrid%avg_cstar (ipy) - cgrid%qmean_carbon_ac (it,ipy) = cgrid%qmean_carbon_ac (it,ipy) & + cgrid%qmean_carbon_ac (t,ipy) = cgrid%qmean_carbon_ac (t,ipy) & + cgrid%avg_carbon_ac (ipy) - cgrid%qmean_carbon_st (it,ipy) = cgrid%qmean_carbon_st (it,ipy) & + cgrid%qmean_carbon_st (t,ipy) = cgrid%qmean_carbon_st (t,ipy) & + cgrid%avg_carbon_st (ipy) !----- Variables that were previously integrated to this time step. --------------! - cgrid%qmean_sensible_lc (it,ipy) = cgrid%qmean_sensible_lc (it,ipy) & + cgrid%qmean_sensible_lc (t,ipy) = cgrid%qmean_sensible_lc (t,ipy) & + cgrid%avg_sensible_lc (ipy) - cgrid%qmean_sensible_wc (it,ipy) = cgrid%qmean_sensible_wc (it,ipy) & + cgrid%qmean_sensible_wc (t,ipy) = cgrid%qmean_sensible_wc (t,ipy) & + cgrid%avg_sensible_wc (ipy) - cgrid%qmean_sensible_gc (it,ipy) = cgrid%qmean_sensible_gc (it,ipy) & + cgrid%qmean_sensible_gc (t,ipy) = cgrid%qmean_sensible_gc (t,ipy) & + cgrid%avg_sensible_gc (ipy) - cgrid%qmean_sensible_ac (it,ipy) = cgrid%qmean_sensible_ac (it,ipy) & + cgrid%qmean_sensible_ac (t,ipy) = cgrid%qmean_sensible_ac (t,ipy) & + cgrid%avg_sensible_ac (ipy) - cgrid%qmean_rshort_gnd (it,ipy) = cgrid%qmean_rshort_gnd (it,ipy) & + cgrid%qmean_rshort_gnd (t,ipy) = cgrid%qmean_rshort_gnd (t,ipy) & + cgrid%avg_rshort_gnd (ipy) - cgrid%qmean_rlong_gnd (it,ipy) = cgrid%qmean_rlong_gnd (it,ipy) & + cgrid%qmean_par_gnd (t,ipy) = cgrid%qmean_par_gnd (t,ipy) & + + cgrid%avg_par_gnd (ipy) + cgrid%qmean_rlong_gnd (t,ipy) = cgrid%qmean_rlong_gnd (t,ipy) & + cgrid%avg_rlong_gnd (ipy) - cgrid%qmean_rlongup (it,ipy) = cgrid%qmean_rlongup (it,ipy) & + cgrid%qmean_rlongup (t,ipy) = cgrid%qmean_rlongup (t,ipy) & + cgrid%avg_rlongup (ipy) - cgrid%qmean_parup (it,ipy) = cgrid%qmean_parup (it,ipy) & + cgrid%qmean_parup (t,ipy) = cgrid%qmean_parup (t,ipy) & + cgrid%avg_parup (ipy) - cgrid%qmean_nirup (it,ipy) = cgrid%qmean_nirup (it,ipy) & + cgrid%qmean_nirup (t,ipy) = cgrid%qmean_nirup (t,ipy) & + cgrid%avg_nirup (ipy) - cgrid%qmean_rshortup (it,ipy) = cgrid%qmean_rshortup (it,ipy) & + cgrid%qmean_rshortup (t,ipy) = cgrid%qmean_rshortup (t,ipy) & + cgrid%avg_rshortup (ipy) - cgrid%qmean_rnet (it,ipy) = cgrid%qmean_rnet (it,ipy) & + cgrid%qmean_rnet (t,ipy) = cgrid%qmean_rnet (t,ipy) & + cgrid%avg_rnet (ipy) - cgrid%qmean_rlong_albedo (it,ipy) = cgrid%qmean_rlong_albedo (it,ipy) & + cgrid%qmean_rlong_albedo (t,ipy) = cgrid%qmean_rlong_albedo (t,ipy) & + cgrid%avg_rlong_albedo (ipy) - cgrid%qmean_albedo (it,ipy) = cgrid%qmean_albedo (it,ipy) & + cgrid%qmean_albedo (t,ipy) = cgrid%qmean_albedo (t,ipy) & + cgrid%avg_albedo (ipy) - cgrid%qmean_albedo_beam (it,ipy) = cgrid%qmean_albedo_beam (it,ipy) & + cgrid%qmean_albedo_beam (t,ipy) = cgrid%qmean_albedo_beam (t,ipy) & + cgrid%avg_albedo_beam (ipy) - cgrid%qmean_albedo_diffuse (it,ipy) = cgrid%qmean_albedo_diffuse (it,ipy) & + cgrid%qmean_albedo_diffuse (t,ipy) = cgrid%qmean_albedo_diffuse (t,ipy) & + cgrid%avg_albedo_diffuse (ipy) - cgrid%qmean_pcpg (it,ipy) = cgrid%qmean_pcpg (it,ipy) & + cgrid%qmean_pcpg (t,ipy) = cgrid%qmean_pcpg (t,ipy) & + cgrid%avg_pcpg (ipy) - cgrid%qmean_evap (it,ipy) = cgrid%qmean_evap (it,ipy) & + cgrid%qmean_evap (t,ipy) = cgrid%qmean_evap (t,ipy) & + cgrid%avg_evap (ipy) - cgrid%qmean_transp (it,ipy) = cgrid%qmean_transp (it,ipy) & + cgrid%qmean_transp (t,ipy) = cgrid%qmean_transp (t,ipy) & + cgrid%avg_transp (ipy) - cgrid%qmean_runoff (it,ipy) = cgrid%qmean_runoff (it,ipy) & + cgrid%qmean_runoff (t,ipy) = cgrid%qmean_runoff (t,ipy) & + cgrid%avg_runoff (ipy) - cgrid%qmean_drainage (it,ipy) = cgrid%qmean_drainage (it,ipy) & + cgrid%qmean_drainage (t,ipy) = cgrid%qmean_drainage (t,ipy) & + cgrid%avg_drainage (ipy) - cgrid%qmean_vapor_lc (it,ipy) = cgrid%qmean_vapor_lc (it,ipy) & + cgrid%qmean_vapor_lc (t,ipy) = cgrid%qmean_vapor_lc (t,ipy) & + cgrid%avg_vapor_lc (ipy) - cgrid%qmean_vapor_wc (it,ipy) = cgrid%qmean_vapor_wc (it,ipy) & + cgrid%qmean_vapor_wc (t,ipy) = cgrid%qmean_vapor_wc (t,ipy) & + cgrid%avg_vapor_wc (ipy) - cgrid%qmean_vapor_gc (it,ipy) = cgrid%qmean_vapor_gc (it,ipy) & + cgrid%qmean_vapor_gc (t,ipy) = cgrid%qmean_vapor_gc (t,ipy) & + cgrid%avg_vapor_gc (ipy) - cgrid%qmean_vapor_ac (it,ipy) = cgrid%qmean_vapor_ac (it,ipy) & + cgrid%qmean_vapor_ac (t,ipy) = cgrid%qmean_vapor_ac (t,ipy) & + cgrid%avg_vapor_ac (ipy) !----- These variables are already averaged at gridtype, just add them up. -------! do k=1,nzg - cgrid%qmean_soil_temp (k,it,ipy) = cgrid%qmean_soil_temp (k,it,ipy) & + cgrid%qmean_soil_temp (k,t,ipy) = cgrid%qmean_soil_temp (k,t,ipy) & + cgrid%avg_soil_temp (k,ipy) - cgrid%qmean_soil_water(k,it,ipy) = cgrid%qmean_soil_water (k,it,ipy) & + cgrid%qmean_soil_water (k,t,ipy) = cgrid%qmean_soil_water (k,t,ipy) & + cgrid%avg_soil_water (k,ipy) - cgrid%qmean_soil_mstpot(k,it,ipy) = cgrid%qmean_soil_mstpot (k,it,ipy) & + cgrid%qmean_soil_mstpot (k,t,ipy) = cgrid%qmean_soil_mstpot (k,t,ipy) & + cgrid%avg_soil_mstpot (k,ipy) end do !----- Integrate the mean sum of squares. ----------------------------------------! - cgrid%qmsqu_gpp (it,ipy) = cgrid%qmsqu_gpp (it,ipy) & + cgrid%qmsqu_gpp (t,ipy) = cgrid%qmsqu_gpp (t,ipy) & + cgrid%avg_gpp (ipy) & * cgrid%avg_gpp (ipy) & * umols_2_kgCyr * umols_2_kgCyr - cgrid%qmsqu_leaf_resp (it,ipy) = cgrid%qmsqu_leaf_resp (it,ipy) & + cgrid%qmsqu_leaf_resp (t,ipy) = cgrid%qmsqu_leaf_resp (t,ipy) & + cgrid%avg_leaf_resp (ipy) & * cgrid%avg_leaf_resp (ipy) & * umols_2_kgCyr * umols_2_kgCyr - cgrid%qmsqu_root_resp (it,ipy) = cgrid%qmsqu_root_resp (it,ipy) & + cgrid%qmsqu_root_resp (t,ipy) = cgrid%qmsqu_root_resp (t,ipy) & + cgrid%avg_root_resp (ipy) & * cgrid%avg_root_resp (ipy) & * umols_2_kgCyr * umols_2_kgCyr - cgrid%qmsqu_plresp (it,ipy) = cgrid%qmsqu_plresp (it,ipy) & + cgrid%qmsqu_plresp (t,ipy) = cgrid%qmsqu_plresp (t,ipy) & + cgrid%avg_plant_resp (ipy) & * cgrid%avg_plant_resp (ipy) & * umols_2_kgCyr * umols_2_kgCyr - cgrid%qmsqu_nep (it,ipy) = cgrid%qmsqu_nep (it,ipy) & + cgrid%qmsqu_nep (t,ipy) = cgrid%qmsqu_nep (t,ipy) & + ( cgrid%avg_gpp (ipy) & - cgrid%avg_leaf_resp (ipy) & - cgrid%avg_root_resp (ipy) & @@ -1621,89 +1748,89 @@ subroutine integrate_ed_daily_output_flux(cgrid) - cgrid%avg_htroph_resp (ipy)) & * umols_2_kgCyr * umols_2_kgCyr - cgrid%qmsqu_rh (it,ipy) = cgrid%qmsqu_rh (it,ipy) & + cgrid%qmsqu_rh (t,ipy) = cgrid%qmsqu_rh (t,ipy) & + cgrid%avg_htroph_resp (ipy) & * cgrid%avg_htroph_resp (ipy) & * umols_2_kgCyr * umols_2_kgCyr - cgrid%qmsqu_cwd_rh (it,ipy) = cgrid%qmsqu_cwd_rh (it,ipy) & + cgrid%qmsqu_cwd_rh (t,ipy) = cgrid%qmsqu_cwd_rh (t,ipy) & + cgrid%avg_cwd_resp (ipy) & * cgrid%avg_cwd_resp (ipy) & * umols_2_kgCyr * umols_2_kgCyr - cgrid%qmsqu_carbon_ac (it,ipy) = cgrid%qmsqu_carbon_ac (it,ipy) & + cgrid%qmsqu_carbon_ac (t,ipy) = cgrid%qmsqu_carbon_ac (t,ipy) & + cgrid%avg_carbon_ac (ipy) & * cgrid%avg_carbon_ac (ipy) - cgrid%qmsqu_carbon_st (it,ipy) = cgrid%qmsqu_carbon_st (it,ipy) & + cgrid%qmsqu_carbon_st (t,ipy) = cgrid%qmsqu_carbon_st (t,ipy) & + cgrid%avg_carbon_st (ipy) & * cgrid%avg_carbon_st (ipy) - cgrid%qmsqu_sensible_ac (it,ipy) = cgrid%qmsqu_sensible_ac (it,ipy) & + cgrid%qmsqu_sensible_ac (t,ipy) = cgrid%qmsqu_sensible_ac (t,ipy) & + cgrid%avg_sensible_ac (ipy) & * cgrid%avg_sensible_ac (ipy) - cgrid%qmsqu_sensible_lc (it,ipy) = cgrid%qmsqu_sensible_lc (it,ipy) & + cgrid%qmsqu_sensible_lc (t,ipy) = cgrid%qmsqu_sensible_lc (t,ipy) & + cgrid%avg_sensible_lc (ipy) & * cgrid%avg_sensible_lc (ipy) - cgrid%qmsqu_sensible_wc (it,ipy) = cgrid%qmsqu_sensible_wc (it,ipy) & + cgrid%qmsqu_sensible_wc (t,ipy) = cgrid%qmsqu_sensible_wc (t,ipy) & + cgrid%avg_sensible_wc (ipy) & * cgrid%avg_sensible_wc (ipy) - cgrid%qmsqu_sensible_gc (it,ipy) = cgrid%qmsqu_sensible_gc (it,ipy) & + cgrid%qmsqu_sensible_gc (t,ipy) = cgrid%qmsqu_sensible_gc (t,ipy) & + cgrid%avg_sensible_gc (ipy) & * cgrid%avg_sensible_gc (ipy) - cgrid%qmsqu_evap (it,ipy) = cgrid%qmsqu_evap (it,ipy) & + cgrid%qmsqu_evap (t,ipy) = cgrid%qmsqu_evap (t,ipy) & + cgrid%avg_evap (ipy) & * cgrid%avg_evap (ipy) - cgrid%qmsqu_transp (it,ipy) = cgrid%qmsqu_transp (it,ipy) & + cgrid%qmsqu_transp (t,ipy) = cgrid%qmsqu_transp (t,ipy) & + cgrid%avg_transp (ipy) & * cgrid%avg_transp (ipy) - cgrid%qmsqu_vapor_ac (it,ipy) = cgrid%qmsqu_vapor_ac (it,ipy) & + cgrid%qmsqu_vapor_ac (t,ipy) = cgrid%qmsqu_vapor_ac (t,ipy) & + cgrid%avg_vapor_ac (ipy) & * cgrid%avg_vapor_ac (ipy) - cgrid%qmsqu_vapor_lc (it,ipy) = cgrid%qmsqu_vapor_lc (it,ipy) & + cgrid%qmsqu_vapor_lc (t,ipy) = cgrid%qmsqu_vapor_lc (t,ipy) & + cgrid%avg_vapor_lc (ipy) & * cgrid%avg_vapor_lc (ipy) - cgrid%qmsqu_vapor_wc (it,ipy) = cgrid%qmsqu_vapor_wc (it,ipy) & + cgrid%qmsqu_vapor_wc (t,ipy) = cgrid%qmsqu_vapor_wc (t,ipy) & + cgrid%avg_vapor_wc (ipy) & * cgrid%avg_vapor_wc (ipy) - cgrid%qmsqu_vapor_gc (it,ipy) = cgrid%qmsqu_vapor_gc (it,ipy) & + cgrid%qmsqu_vapor_gc (t,ipy) = cgrid%qmsqu_vapor_gc (t,ipy) & + cgrid%avg_vapor_gc (ipy) & * cgrid%avg_vapor_gc (ipy) - cgrid%qmsqu_ustar (it,ipy) = cgrid%qmsqu_ustar (it,ipy) & + cgrid%qmsqu_ustar (t,ipy) = cgrid%qmsqu_ustar (t,ipy) & + cgrid%avg_ustar (ipy) & * cgrid%avg_ustar (ipy) - cgrid%qmsqu_rlongup (it,ipy) = cgrid%qmsqu_rlongup (it,ipy) & + cgrid%qmsqu_rlongup (t,ipy) = cgrid%qmsqu_rlongup (t,ipy) & + cgrid%avg_rlongup (ipy) & * cgrid%avg_rlongup (ipy) - cgrid%qmsqu_parup (it,ipy) = cgrid%qmsqu_parup (it,ipy) & + cgrid%qmsqu_parup (t,ipy) = cgrid%qmsqu_parup (t,ipy) & + cgrid%avg_parup (ipy) & * cgrid%avg_parup (ipy) - cgrid%qmsqu_nirup (it,ipy) = cgrid%qmsqu_nirup (it,ipy) & + cgrid%qmsqu_nirup (t,ipy) = cgrid%qmsqu_nirup (t,ipy) & + cgrid%avg_nirup (ipy) & * cgrid%avg_nirup (ipy) - cgrid%qmsqu_rshortup (it,ipy) = cgrid%qmsqu_rshortup (it,ipy) & + cgrid%qmsqu_rshortup (t,ipy) = cgrid%qmsqu_rshortup (t,ipy) & + cgrid%avg_rshortup (ipy) & * cgrid%avg_rshortup (ipy) - cgrid%qmsqu_rnet (it,ipy) = cgrid%qmsqu_rnet (it,ipy) & + cgrid%qmsqu_rnet (t,ipy) = cgrid%qmsqu_rnet (t,ipy) & + cgrid%avg_rnet (ipy) & * cgrid%avg_rnet (ipy) - cgrid%qmsqu_albedo (it,ipy) = cgrid%qmsqu_albedo (it,ipy) & + cgrid%qmsqu_albedo (t,ipy) = cgrid%qmsqu_albedo (t,ipy) & + cgrid%avg_albedo (ipy) & * cgrid%avg_albedo (ipy) end if @@ -2228,6 +2355,8 @@ subroutine normalize_ed_daily_output_vars(cgrid) cgrid%dmean_atm_vpdef(ipy) = cgrid%dmean_atm_vpdef(ipy) * dtlsm_o_daysec cgrid%dmean_rshort(ipy) = cgrid%dmean_rshort(ipy) * dtlsm_o_daysec cgrid%dmean_rshort_diff(ipy) = cgrid%dmean_rshort_diff(ipy) * dtlsm_o_daysec + cgrid%dmean_par(ipy) = cgrid%dmean_par(ipy) * dtlsm_o_daysec + cgrid%dmean_par_diff(ipy) = cgrid%dmean_par_diff(ipy) * dtlsm_o_daysec cgrid%dmean_rlong(ipy) = cgrid%dmean_rlong(ipy) * dtlsm_o_daysec cgrid%dmean_atm_shv(ipy) = cgrid%dmean_atm_shv(ipy) * dtlsm_o_daysec cgrid%dmean_atm_co2(ipy) = cgrid%dmean_atm_co2(ipy) * dtlsm_o_daysec @@ -2310,6 +2439,7 @@ subroutine normalize_ed_daily_output_vars(cgrid) cgrid%dmean_sensible_gc (ipy) = cgrid%dmean_sensible_gc (ipy) * frqsum_o_daysec cgrid%dmean_sensible_ac (ipy) = cgrid%dmean_sensible_ac (ipy) * frqsum_o_daysec cgrid%dmean_rshort_gnd (ipy) = cgrid%dmean_rshort_gnd (ipy) * frqsum_o_daysec + cgrid%dmean_par_gnd (ipy) = cgrid%dmean_par_gnd (ipy) * frqsum_o_daysec cgrid%dmean_rlong_gnd (ipy) = cgrid%dmean_rlong_gnd (ipy) * frqsum_o_daysec cgrid%dmean_rlongup (ipy) = cgrid%dmean_rlongup (ipy) * frqsum_o_daysec cgrid%dmean_parup (ipy) = cgrid%dmean_parup (ipy) * frqsum_o_daysec @@ -2405,12 +2535,38 @@ subroutine normalize_ed_daily_output_vars(cgrid) !---------------------------------------------------------------------------! ! These variables must be scaled. They are updated every time step. ! !---------------------------------------------------------------------------! - cpatch%dmean_par_l (ico) = cpatch%dmean_par_l (ico) & - * dtlsm_o_daysec - cpatch%dmean_par_l_beam (ico) = cpatch%dmean_par_l_beam (ico) & - * dtlsm_o_daysec - cpatch%dmean_par_l_diff (ico) = cpatch%dmean_par_l_diff (ico) & - * dtlsm_o_daysec + cpatch%dmean_par_l (ico) = cpatch%dmean_par_l (ico) & + * dtlsm_o_daysec + cpatch%dmean_par_l_beam (ico) = cpatch%dmean_par_l_beam (ico) & + * dtlsm_o_daysec + cpatch%dmean_par_l_diff (ico) = cpatch%dmean_par_l_diff (ico) & + * dtlsm_o_daysec + cpatch%dmean_rshort_l (ico) = cpatch%dmean_rshort_l (ico) & + * dtlsm_o_daysec + cpatch%dmean_rlong_l (ico) = cpatch%dmean_rlong_l (ico) & + * dtlsm_o_daysec + cpatch%dmean_sensible_lc (ico) = cpatch%dmean_sensible_lc (ico) & + * dtlsm_o_daysec + cpatch%dmean_vapor_lc (ico) = cpatch%dmean_vapor_lc (ico) & + * dtlsm_o_daysec + cpatch%dmean_transp (ico) = cpatch%dmean_transp (ico) & + * dtlsm_o_daysec + cpatch%dmean_intercepted_al (ico) = cpatch%dmean_intercepted_al (ico) & + * dtlsm_o_daysec + cpatch%dmean_wshed_lg (ico) = cpatch%dmean_wshed_lg (ico) & + * dtlsm_o_daysec + cpatch%dmean_rshort_w (ico) = cpatch%dmean_rshort_w (ico) & + * dtlsm_o_daysec + cpatch%dmean_rlong_w (ico) = cpatch%dmean_rlong_w (ico) & + * dtlsm_o_daysec + cpatch%dmean_sensible_wc (ico) = cpatch%dmean_sensible_wc (ico) & + * dtlsm_o_daysec + cpatch%dmean_vapor_wc (ico) = cpatch%dmean_vapor_wc (ico) & + * dtlsm_o_daysec + cpatch%dmean_intercepted_aw (ico) = cpatch%dmean_intercepted_aw (ico) & + * dtlsm_o_daysec + cpatch%dmean_wshed_wg (ico) = cpatch%dmean_wshed_wg (ico) & + * dtlsm_o_daysec !---------------------------------------------------------------------------! @@ -2725,6 +2881,7 @@ subroutine zero_ed_daily_output_vars(cgrid) cgrid%dmean_sensible_gc (ipy) = 0. cgrid%dmean_sensible_ac (ipy) = 0. cgrid%dmean_rshort_gnd (ipy) = 0. + cgrid%dmean_par_gnd (ipy) = 0. cgrid%dmean_rlong_gnd (ipy) = 0. cgrid%dmean_rlongup (ipy) = 0. cgrid%dmean_parup (ipy) = 0. @@ -2783,6 +2940,8 @@ subroutine zero_ed_daily_output_vars(cgrid) cgrid%dmean_atm_vpdef (ipy) = 0. cgrid%dmean_rshort (ipy) = 0. cgrid%dmean_rshort_diff (ipy) = 0. + cgrid%dmean_par (ipy) = 0. + cgrid%dmean_par_diff (ipy) = 0. cgrid%dmean_rlong (ipy) = 0. cgrid%dmean_atm_shv (ipy) = 0. cgrid%dmean_atm_co2 (ipy) = 0. @@ -2830,9 +2989,6 @@ subroutine zero_ed_daily_output_vars(cgrid) cpatch%dmean_nppdaily(ico) = 0. cpatch%dmean_leaf_resp(ico) = 0. cpatch%dmean_root_resp(ico) = 0. - cpatch%dmean_par_l(ico) = 0. - cpatch%dmean_par_l_beam(ico) = 0. - cpatch%dmean_par_l_diff(ico) = 0. cpatch%dmean_fs_open(ico) = 0. cpatch%dmean_fsw(ico) = 0. cpatch%dmean_fsn(ico) = 0. @@ -2842,6 +2998,22 @@ subroutine zero_ed_daily_output_vars(cgrid) cpatch%dmean_light_level(ico) = 0. cpatch%dmean_light_level_beam(ico) = 0. cpatch%dmean_light_level_diff(ico) = 0. + cpatch%dmean_par_l (ico) = 0. + cpatch%dmean_par_l_beam (ico) = 0. + cpatch%dmean_par_l_diff (ico) = 0. + cpatch%dmean_rshort_l (ico) = 0. + cpatch%dmean_rlong_l (ico) = 0. + cpatch%dmean_sensible_lc (ico) = 0. + cpatch%dmean_vapor_lc (ico) = 0. + cpatch%dmean_transp (ico) = 0. + cpatch%dmean_intercepted_al (ico) = 0. + cpatch%dmean_wshed_lg (ico) = 0. + cpatch%dmean_rshort_w (ico) = 0. + cpatch%dmean_rlong_w (ico) = 0. + cpatch%dmean_sensible_wc (ico) = 0. + cpatch%dmean_vapor_wc (ico) = 0. + cpatch%dmean_intercepted_aw (ico) = 0. + cpatch%dmean_wshed_wg (ico) = 0. end do end do end do @@ -2919,6 +3091,8 @@ subroutine integrate_ed_monthly_output_vars(cgrid) + cgrid%dmean_sensible_wc (ipy) cgrid%mmean_rshort_gnd (ipy) = cgrid%mmean_rshort_gnd (ipy) & + cgrid%dmean_rshort_gnd (ipy) + cgrid%mmean_par_gnd (ipy) = cgrid%mmean_par_gnd (ipy) & + + cgrid%dmean_par_gnd (ipy) cgrid%mmean_rlong_gnd (ipy) = cgrid%mmean_rlong_gnd (ipy) & + cgrid%dmean_rlong_gnd (ipy) cgrid%mmean_rlongup (ipy) = cgrid%mmean_rlongup (ipy) & @@ -3020,6 +3194,10 @@ subroutine integrate_ed_monthly_output_vars(cgrid) + cgrid%dmean_rshort (ipy) cgrid%mmean_rshort_diff (ipy) = cgrid%mmean_rshort_diff (ipy) & + cgrid%dmean_rshort_diff (ipy) + cgrid%mmean_par (ipy) = cgrid%mmean_par (ipy) & + + cgrid%dmean_par (ipy) + cgrid%mmean_par_diff (ipy) = cgrid%mmean_par_diff (ipy) & + + cgrid%dmean_par_diff (ipy) cgrid%mmean_rlong (ipy) = cgrid%mmean_rlong (ipy) & + cgrid%dmean_rlong (ipy) @@ -3163,24 +3341,52 @@ subroutine integrate_ed_monthly_output_vars(cgrid) cpatch => csite%patch(ipa) cohort_loop: do ico=1,cpatch%ncohorts - cpatch%mmean_fs_open (ico) = cpatch%mmean_fs_open (ico) & - + cpatch%dmean_fs_open (ico) - cpatch%mmean_fsw (ico) = cpatch%mmean_fsw (ico) & - + cpatch%dmean_fsw (ico) - cpatch%mmean_fsn (ico) = cpatch%mmean_fsn (ico) & - + cpatch%dmean_fsn (ico) - cpatch%mmean_psi_open (ico) = cpatch%mmean_psi_open (ico) & - + cpatch%dmean_psi_open (ico) - cpatch%mmean_psi_closed (ico) = cpatch%mmean_psi_closed (ico) & - + cpatch%dmean_psi_closed (ico) - cpatch%mmean_water_supply(ico) = cpatch%mmean_water_supply(ico) & - + cpatch%dmean_water_supply(ico) - cpatch%mmean_par_l (ico) = cpatch%mmean_par_l (ico) & - + cpatch%dmean_par_l (ico) - cpatch%mmean_par_l_beam (ico) = cpatch%mmean_par_l_beam (ico) & - + cpatch%dmean_par_l_beam (ico) - cpatch%mmean_par_l_diff (ico) = cpatch%mmean_par_l_diff (ico) & - + cpatch%dmean_par_l_diff (ico) + cpatch%mmean_fs_open (ico) = cpatch%mmean_fs_open (ico) & + + cpatch%dmean_fs_open (ico) + cpatch%mmean_fsw (ico) = cpatch%mmean_fsw (ico) & + + cpatch%dmean_fsw (ico) + cpatch%mmean_fsn (ico) = cpatch%mmean_fsn (ico) & + + cpatch%dmean_fsn (ico) + cpatch%mmean_psi_open (ico) = cpatch%mmean_psi_open (ico) & + + cpatch%dmean_psi_open (ico) + cpatch%mmean_psi_closed (ico) = cpatch%mmean_psi_closed (ico) & + + cpatch%dmean_psi_closed (ico) + cpatch%mmean_water_supply (ico) = cpatch%mmean_water_supply (ico) & + + cpatch%dmean_water_supply (ico) + cpatch%mmean_par_l (ico) = cpatch%mmean_par_l (ico) & + + cpatch%dmean_par_l (ico) + cpatch%mmean_par_l_beam (ico) = cpatch%mmean_par_l_beam (ico) & + + cpatch%dmean_par_l_beam (ico) + cpatch%mmean_par_l_diff (ico) = cpatch%mmean_par_l_diff (ico) & + + cpatch%dmean_par_l_diff (ico) + cpatch%mmean_rshort_l (ico) = cpatch%mmean_rshort_l (ico) & + + cpatch%dmean_rshort_l (ico) + cpatch%mmean_rlong_l (ico) = cpatch%mmean_rlong_l (ico) & + + cpatch%dmean_rlong_l (ico) + cpatch%mmean_sensible_lc (ico) = cpatch%mmean_sensible_lc (ico) & + + cpatch%dmean_sensible_lc (ico) + cpatch%mmean_vapor_lc (ico) = cpatch%mmean_vapor_lc (ico) & + + cpatch%dmean_vapor_lc (ico) + cpatch%mmean_transp (ico) = cpatch%mmean_transp (ico) & + + cpatch%dmean_transp (ico) + cpatch%mmean_intercepted_al (ico) = cpatch%mmean_intercepted_al (ico) & + + cpatch%dmean_intercepted_al (ico) + cpatch%mmean_wshed_lg (ico) = cpatch%mmean_wshed_lg (ico) & + + cpatch%dmean_wshed_lg (ico) + cpatch%mmean_rshort_w (ico) = cpatch%mmean_rshort_w (ico) & + + cpatch%dmean_rshort_w (ico) + cpatch%mmean_rlong_w (ico) = cpatch%mmean_rlong_w (ico) & + + cpatch%dmean_rlong_w (ico) + cpatch%mmean_sensible_wc (ico) = cpatch%mmean_sensible_wc (ico) & + + cpatch%dmean_sensible_wc (ico) + cpatch%mmean_vapor_wc (ico) = cpatch%mmean_vapor_wc (ico) & + + cpatch%dmean_vapor_wc (ico) + cpatch%mmean_intercepted_aw (ico) = cpatch%mmean_intercepted_aw (ico) & + + cpatch%dmean_intercepted_aw (ico) + cpatch%mmean_wshed_wg (ico) = cpatch%mmean_wshed_wg (ico) & + + cpatch%dmean_wshed_wg (ico) + !---------------------------------------------------------------------------! + !---------------------------------------------------------------------------! ! The following variables are all converted to kgC/plant/yr. ! @@ -3363,6 +3569,7 @@ subroutine normalize_ed_monthly_output_vars(cgrid) cgrid%mmean_sensible_lc (ipy) = cgrid%mmean_sensible_lc (ipy) * ndaysi cgrid%mmean_sensible_wc (ipy) = cgrid%mmean_sensible_wc (ipy) * ndaysi cgrid%mmean_rshort_gnd (ipy) = cgrid%mmean_rshort_gnd (ipy) * ndaysi + cgrid%mmean_par_gnd (ipy) = cgrid%mmean_par_gnd (ipy) * ndaysi cgrid%mmean_rlong_gnd (ipy) = cgrid%mmean_rlong_gnd (ipy) * ndaysi cgrid%mmean_rlongup (ipy) = cgrid%mmean_rlongup (ipy) * ndaysi cgrid%mmean_parup (ipy) = cgrid%mmean_parup (ipy) * ndaysi @@ -3412,6 +3619,8 @@ subroutine normalize_ed_monthly_output_vars(cgrid) cgrid%mmean_atm_vpdef (ipy) = cgrid%mmean_atm_vpdef (ipy) * ndaysi cgrid%mmean_rshort (ipy) = cgrid%mmean_rshort (ipy) * ndaysi cgrid%mmean_rshort_diff (ipy) = cgrid%mmean_rshort_diff (ipy) * ndaysi + cgrid%mmean_par (ipy) = cgrid%mmean_par (ipy) * ndaysi + cgrid%mmean_par_diff (ipy) = cgrid%mmean_par_diff (ipy) * ndaysi cgrid%mmean_rlong (ipy) = cgrid%mmean_rlong (ipy) * ndaysi cgrid%mmean_atm_shv (ipy) = cgrid%mmean_atm_shv (ipy) * ndaysi cgrid%mmean_atm_co2 (ipy) = cgrid%mmean_atm_co2 (ipy) * ndaysi @@ -3595,28 +3804,76 @@ subroutine normalize_ed_monthly_output_vars(cgrid) cpatch => csite%patch(ipa) cohortloop: do ico = 1, cpatch%ncohorts !----- Find the carbon fluxes. ---------------------------------------------! - cpatch%mmean_gpp (ico) = cpatch%mmean_gpp (ico) * ndaysi - cpatch%mmean_nppleaf (ico) = cpatch%mmean_nppleaf (ico) * ndaysi - cpatch%mmean_nppfroot (ico) = cpatch%mmean_nppfroot (ico) * ndaysi - cpatch%mmean_nppsapwood (ico) = cpatch%mmean_nppsapwood (ico) * ndaysi - cpatch%mmean_nppcroot (ico) = cpatch%mmean_nppcroot (ico) * ndaysi - cpatch%mmean_nppseeds (ico) = cpatch%mmean_nppseeds (ico) * ndaysi - cpatch%mmean_nppwood (ico) = cpatch%mmean_nppwood (ico) * ndaysi - cpatch%mmean_nppdaily (ico) = cpatch%mmean_nppdaily (ico) * ndaysi - cpatch%mmean_leaf_resp (ico) = cpatch%mmean_leaf_resp (ico) * ndaysi - cpatch%mmean_root_resp (ico) = cpatch%mmean_root_resp (ico) * ndaysi - cpatch%mmean_growth_resp (ico) = cpatch%mmean_growth_resp (ico) * ndaysi - cpatch%mmean_storage_resp(ico) = cpatch%mmean_storage_resp(ico) * ndaysi - cpatch%mmean_vleaf_resp (ico) = cpatch%mmean_vleaf_resp (ico) * ndaysi - cpatch%mmean_fsw (ico) = cpatch%mmean_fsw (ico) * ndaysi - cpatch%mmean_fsn (ico) = cpatch%mmean_fsn (ico) * ndaysi - cpatch%mmean_fs_open (ico) = cpatch%mmean_fs_open (ico) * ndaysi - cpatch%mmean_psi_open (ico) = cpatch%mmean_psi_open (ico) * ndaysi - cpatch%mmean_psi_closed (ico) = cpatch%mmean_psi_closed (ico) * ndaysi - cpatch%mmean_water_supply(ico) = cpatch%mmean_water_supply(ico) * ndaysi - cpatch%mmean_par_l (ico) = cpatch%mmean_par_l (ico) * ndaysi - cpatch%mmean_par_l_beam (ico) = cpatch%mmean_par_l_beam (ico) * ndaysi - cpatch%mmean_par_l_diff (ico) = cpatch%mmean_par_l_diff (ico) * ndaysi + cpatch%mmean_gpp (ico) = cpatch%mmean_gpp (ico) & + * ndaysi + cpatch%mmean_nppleaf (ico) = cpatch%mmean_nppleaf (ico) & + * ndaysi + cpatch%mmean_nppfroot (ico) = cpatch%mmean_nppfroot (ico) & + * ndaysi + cpatch%mmean_nppsapwood (ico) = cpatch%mmean_nppsapwood (ico) & + * ndaysi + cpatch%mmean_nppcroot (ico) = cpatch%mmean_nppcroot (ico) & + * ndaysi + cpatch%mmean_nppseeds (ico) = cpatch%mmean_nppseeds (ico) & + * ndaysi + cpatch%mmean_nppwood (ico) = cpatch%mmean_nppwood (ico) & + * ndaysi + cpatch%mmean_nppdaily (ico) = cpatch%mmean_nppdaily (ico) & + * ndaysi + cpatch%mmean_leaf_resp (ico) = cpatch%mmean_leaf_resp (ico) & + * ndaysi + cpatch%mmean_root_resp (ico) = cpatch%mmean_root_resp (ico) & + * ndaysi + cpatch%mmean_growth_resp (ico) = cpatch%mmean_growth_resp (ico) & + * ndaysi + cpatch%mmean_storage_resp (ico) = cpatch%mmean_storage_resp (ico) & + * ndaysi + cpatch%mmean_vleaf_resp (ico) = cpatch%mmean_vleaf_resp (ico) & + * ndaysi + cpatch%mmean_fsw (ico) = cpatch%mmean_fsw (ico) & + * ndaysi + cpatch%mmean_fsn (ico) = cpatch%mmean_fsn (ico) & + * ndaysi + cpatch%mmean_fs_open (ico) = cpatch%mmean_fs_open (ico) & + * ndaysi + cpatch%mmean_psi_open (ico) = cpatch%mmean_psi_open (ico) & + * ndaysi + cpatch%mmean_psi_closed (ico) = cpatch%mmean_psi_closed (ico) & + * ndaysi + cpatch%mmean_water_supply (ico) = cpatch%mmean_water_supply (ico) & + * ndaysi + cpatch%mmean_par_l (ico) = cpatch%mmean_par_l (ico) & + * ndaysi + cpatch%mmean_par_l_beam (ico) = cpatch%mmean_par_l_beam (ico) & + * ndaysi + cpatch%mmean_par_l_diff (ico) = cpatch%mmean_par_l_diff (ico) & + * ndaysi + cpatch%mmean_rshort_l (ico) = cpatch%mmean_rshort_l (ico) & + * ndaysi + cpatch%mmean_rlong_l (ico) = cpatch%mmean_rlong_l (ico) & + * ndaysi + cpatch%mmean_sensible_lc (ico) = cpatch%mmean_sensible_lc (ico) & + * ndaysi + cpatch%mmean_vapor_lc (ico) = cpatch%mmean_vapor_lc (ico) & + * ndaysi + cpatch%mmean_transp (ico) = cpatch%mmean_transp (ico) & + * ndaysi + cpatch%mmean_intercepted_al (ico) = cpatch%mmean_intercepted_al (ico) & + * ndaysi + cpatch%mmean_wshed_lg (ico) = cpatch%mmean_wshed_lg (ico) & + * ndaysi + cpatch%mmean_rshort_w (ico) = cpatch%mmean_rshort_w (ico) & + * ndaysi + cpatch%mmean_rlong_w (ico) = cpatch%mmean_rlong_w (ico) & + * ndaysi + cpatch%mmean_sensible_wc (ico) = cpatch%mmean_sensible_wc (ico) & + * ndaysi + cpatch%mmean_vapor_wc (ico) = cpatch%mmean_vapor_wc (ico) & + * ndaysi + cpatch%mmean_intercepted_aw (ico) = cpatch%mmean_intercepted_aw (ico) & + * ndaysi + cpatch%mmean_wshed_wg (ico) = cpatch%mmean_wshed_wg (ico) & + * ndaysi cpatch%mmean_leaf_maintenance (ico) = cpatch%mmean_leaf_maintenance(ico) & * ndaysi cpatch%mmean_root_maintenance (ico) = cpatch%mmean_root_maintenance(ico) & @@ -3741,30 +3998,56 @@ subroutine normalize_ed_monthly_output_vars(cgrid) do ico=1,cpatch%ncohorts !----- Convert GPP and plant respiration to kgC/plant/year. ----------! - cpatch%qmean_gpp (t,ico) = cpatch%qmean_gpp (t,ico) & - * ndaysi - cpatch%qmean_leaf_resp (t,ico) = cpatch%qmean_leaf_resp (t,ico) & - * ndaysi - cpatch%qmean_root_resp (t,ico) = cpatch%qmean_root_resp (t,ico) & - * ndaysi - cpatch%qmean_par_l (t,ico) = cpatch%qmean_par_l (t,ico) & - * ndaysi * dtlsm_o_frqfast - cpatch%qmean_par_l_beam (t,ico) = cpatch%qmean_par_l_beam (t,ico) & - * ndaysi * dtlsm_o_frqfast - cpatch%qmean_par_l_diff (t,ico) = cpatch%qmean_par_l_diff (t,ico) & - * ndaysi * dtlsm_o_frqfast - cpatch%qmean_fs_open (t,ico) = cpatch%qmean_fs_open (t,ico) & - * ndaysi * dtlsm_o_frqfast - cpatch%qmean_fsw (t,ico) = cpatch%qmean_fsw (t,ico) & - * ndaysi * dtlsm_o_frqfast - cpatch%qmean_fsn (t,ico) = cpatch%qmean_fsn (t,ico) & - * ndaysi * dtlsm_o_frqfast - cpatch%qmean_psi_open (t,ico) = cpatch%qmean_psi_open (t,ico) & - * ndaysi * dtlsm_o_frqfast - cpatch%qmean_psi_closed (t,ico) = cpatch%qmean_psi_closed (t,ico) & - * ndaysi * dtlsm_o_frqfast - cpatch%qmean_water_supply(t,ico) = cpatch%qmean_water_supply (t,ico) & - * ndaysi * dtlsm_o_frqfast + cpatch%qmean_gpp (t,ico)=cpatch%qmean_gpp (t,ico) & + *ndaysi + cpatch%qmean_leaf_resp (t,ico)=cpatch%qmean_leaf_resp (t,ico) & + *ndaysi + cpatch%qmean_root_resp (t,ico)=cpatch%qmean_root_resp (t,ico) & + *ndaysi + cpatch%qmean_fs_open (t,ico)=cpatch%qmean_fs_open (t,ico) & + *ndaysi * dtlsm_o_frqfast + cpatch%qmean_fsw (t,ico)=cpatch%qmean_fsw (t,ico) & + *ndaysi * dtlsm_o_frqfast + cpatch%qmean_fsn (t,ico)=cpatch%qmean_fsn (t,ico) & + *ndaysi * dtlsm_o_frqfast + cpatch%qmean_psi_open (t,ico)=cpatch%qmean_psi_open (t,ico) & + *ndaysi * dtlsm_o_frqfast + cpatch%qmean_psi_closed (t,ico)=cpatch%qmean_psi_closed (t,ico) & + *ndaysi * dtlsm_o_frqfast + cpatch%qmean_water_supply (t,ico)=cpatch%qmean_water_supply (t,ico) & + *ndaysi * dtlsm_o_frqfast + cpatch%qmean_par_l (t,ico)=cpatch%qmean_par_l (t,ico) & + *ndaysi + cpatch%qmean_par_l_beam (t,ico)=cpatch%qmean_par_l_beam (t,ico) & + *ndaysi + cpatch%qmean_par_l_diff (t,ico)=cpatch%qmean_par_l_diff (t,ico) & + *ndaysi + cpatch%qmean_rshort_l (t,ico)=cpatch%qmean_rshort_l (t,ico) & + *ndaysi + cpatch%qmean_rlong_l (t,ico)=cpatch%qmean_rlong_l (t,ico) & + *ndaysi + cpatch%qmean_sensible_lc (t,ico)=cpatch%qmean_sensible_lc (t,ico) & + *ndaysi + cpatch%qmean_vapor_lc (t,ico)=cpatch%qmean_vapor_lc (t,ico) & + *ndaysi + cpatch%qmean_transp (t,ico)=cpatch%qmean_transp (t,ico) & + *ndaysi + cpatch%qmean_intercepted_al(t,ico)=cpatch%qmean_intercepted_al(t,ico) & + *ndaysi + cpatch%qmean_wshed_lg (t,ico)=cpatch%qmean_wshed_lg (t,ico) & + *ndaysi + cpatch%qmean_rshort_w (t,ico)=cpatch%qmean_rshort_w (t,ico) & + *ndaysi + cpatch%qmean_rlong_w (t,ico)=cpatch%qmean_rlong_w (t,ico) & + *ndaysi + cpatch%qmean_sensible_wc (t,ico)=cpatch%qmean_sensible_wc (t,ico) & + *ndaysi + cpatch%qmean_vapor_wc (t,ico)=cpatch%qmean_vapor_wc (t,ico) & + *ndaysi + cpatch%qmean_intercepted_aw(t,ico)=cpatch%qmean_intercepted_aw(t,ico) & + *ndaysi + cpatch%qmean_wshed_wg (t,ico)=cpatch%qmean_wshed_wg (t,ico) & + *ndaysi end do !------------------------------------------------------------------------! @@ -3861,6 +4144,10 @@ subroutine normalize_ed_monthly_output_vars(cgrid) * ndaysi * dtlsm_o_frqfast cgrid%qmean_rshort_diff (t,ipy) = cgrid%qmean_rshort_diff (t,ipy) & * ndaysi * dtlsm_o_frqfast + cgrid%qmean_par (t,ipy) = cgrid%qmean_par (t,ipy) & + * ndaysi * dtlsm_o_frqfast + cgrid%qmean_par_diff (t,ipy) = cgrid%qmean_par_diff (t,ipy) & + * ndaysi * dtlsm_o_frqfast cgrid%qmean_rlong (t,ipy) = cgrid%qmean_rlong (t,ipy) & * ndaysi * dtlsm_o_frqfast cgrid%qmean_atm_shv (t,ipy) = cgrid%qmean_atm_shv (t,ipy) & @@ -3883,6 +4170,7 @@ subroutine normalize_ed_monthly_output_vars(cgrid) cgrid%qmean_sensible_gc (t,ipy) = cgrid%qmean_sensible_gc (t,ipy) * ndaysi cgrid%qmean_sensible_ac (t,ipy) = cgrid%qmean_sensible_ac (t,ipy) * ndaysi cgrid%qmean_rshort_gnd (t,ipy) = cgrid%qmean_rshort_gnd (t,ipy) * ndaysi + cgrid%qmean_par_gnd (t,ipy) = cgrid%qmean_par_gnd (t,ipy) * ndaysi cgrid%qmean_rlong_gnd (t,ipy) = cgrid%qmean_rlong_gnd (t,ipy) * ndaysi cgrid%qmean_rlongup (t,ipy) = cgrid%qmean_rlongup (t,ipy) * ndaysi cgrid%qmean_parup (t,ipy) = cgrid%qmean_parup (t,ipy) * ndaysi @@ -4031,6 +4319,7 @@ subroutine zero_ed_monthly_output_vars(cgrid) cgrid%mmean_sensible_lc (ipy) = 0. cgrid%mmean_sensible_wc (ipy) = 0. cgrid%mmean_rshort_gnd (ipy) = 0. + cgrid%mmean_par_gnd (ipy) = 0. cgrid%mmean_rlong_gnd (ipy) = 0. cgrid%mmean_rlongup (ipy) = 0. cgrid%mmean_parup (ipy) = 0. @@ -4084,6 +4373,8 @@ subroutine zero_ed_monthly_output_vars(cgrid) cgrid%mmean_atm_vpdef (ipy) = 0. cgrid%mmean_rshort (ipy) = 0. cgrid%mmean_rshort_diff (ipy) = 0. + cgrid%mmean_par (ipy) = 0. + cgrid%mmean_par_diff (ipy) = 0. cgrid%mmean_rlong (ipy) = 0. cgrid%mmean_atm_shv (ipy) = 0. cgrid%mmean_atm_co2 (ipy) = 0. @@ -4154,6 +4445,19 @@ subroutine zero_ed_monthly_output_vars(cgrid) cpatch%mmean_par_l (ico) = 0. cpatch%mmean_par_l_beam (ico) = 0. cpatch%mmean_par_l_diff (ico) = 0. + cpatch%mmean_rshort_l (ico) = 0. + cpatch%mmean_rlong_l (ico) = 0. + cpatch%mmean_sensible_lc (ico) = 0. + cpatch%mmean_vapor_lc (ico) = 0. + cpatch%mmean_transp (ico) = 0. + cpatch%mmean_intercepted_al (ico) = 0. + cpatch%mmean_wshed_lg (ico) = 0. + cpatch%mmean_rshort_w (ico) = 0. + cpatch%mmean_rlong_w (ico) = 0. + cpatch%mmean_sensible_wc (ico) = 0. + cpatch%mmean_vapor_wc (ico) = 0. + cpatch%mmean_intercepted_aw (ico) = 0. + cpatch%mmean_wshed_wg (ico) = 0. cpatch%mmean_fs_open (ico) = 0. cpatch%mmean_fsw (ico) = 0. cpatch%mmean_fsn (ico) = 0. @@ -4195,18 +4499,31 @@ subroutine zero_ed_monthly_output_vars(cgrid) cpatch => csite%patch(ipa) do ico=1,cpatch%ncohorts !----- Convert GPP and plant respiration to kgC/plant/year. -------------! - cpatch%qmean_gpp (:,ico) = 0.0 - cpatch%qmean_leaf_resp (:,ico) = 0.0 - cpatch%qmean_root_resp (:,ico) = 0.0 - cpatch%qmean_par_l (:,ico) = 0.0 - cpatch%qmean_par_l_beam (:,ico) = 0.0 - cpatch%qmean_par_l_diff (:,ico) = 0.0 - cpatch%qmean_fs_open (:,ico) = 0.0 - cpatch%qmean_fsw (:,ico) = 0.0 - cpatch%qmean_fsn (:,ico) = 0.0 - cpatch%qmean_psi_open (:,ico) = 0.0 - cpatch%qmean_psi_closed (:,ico) = 0.0 - cpatch%qmean_water_supply(:,ico) = 0.0 + cpatch%qmean_gpp (:,ico) = 0.0 + cpatch%qmean_leaf_resp (:,ico) = 0.0 + cpatch%qmean_root_resp (:,ico) = 0.0 + cpatch%qmean_fs_open (:,ico) = 0.0 + cpatch%qmean_fsw (:,ico) = 0.0 + cpatch%qmean_fsn (:,ico) = 0.0 + cpatch%qmean_psi_open (:,ico) = 0.0 + cpatch%qmean_psi_closed (:,ico) = 0.0 + cpatch%qmean_water_supply (:,ico) = 0.0 + cpatch%qmean_par_l (:,ico) = 0.0 + cpatch%qmean_par_l_beam (:,ico) = 0.0 + cpatch%qmean_par_l_diff (:,ico) = 0.0 + cpatch%qmean_rshort_l (:,ico) = 0.0 + cpatch%qmean_rlong_l (:,ico) = 0.0 + cpatch%qmean_sensible_lc (:,ico) = 0.0 + cpatch%qmean_vapor_lc (:,ico) = 0.0 + cpatch%qmean_transp (:,ico) = 0.0 + cpatch%qmean_intercepted_al (:,ico) = 0.0 + cpatch%qmean_wshed_lg (:,ico) = 0.0 + cpatch%qmean_rshort_w (:,ico) = 0.0 + cpatch%qmean_rlong_w (:,ico) = 0.0 + cpatch%qmean_sensible_wc (:,ico) = 0.0 + cpatch%qmean_vapor_wc (:,ico) = 0.0 + cpatch%qmean_intercepted_aw (:,ico) = 0.0 + cpatch%qmean_wshed_wg (:,ico) = 0.0 end do csite%qmean_rh (:,ipa) = 0.0 @@ -4239,6 +4556,8 @@ subroutine zero_ed_monthly_output_vars(cgrid) cgrid%qmean_atm_vpdef (:,ipy) = 0.0 cgrid%qmean_rshort (:,ipy) = 0.0 cgrid%qmean_rshort_diff (:,ipy) = 0.0 + cgrid%qmean_par (:,ipy) = 0.0 + cgrid%qmean_par_diff (:,ipy) = 0.0 cgrid%qmean_rlong (:,ipy) = 0.0 cgrid%qmean_atm_shv (:,ipy) = 0.0 cgrid%qmean_atm_co2 (:,ipy) = 0.0 @@ -4256,6 +4575,7 @@ subroutine zero_ed_monthly_output_vars(cgrid) cgrid%qmean_sensible_gc (:,ipy) = 0.0 cgrid%qmean_sensible_ac (:,ipy) = 0.0 cgrid%qmean_rshort_gnd (:,ipy) = 0.0 + cgrid%qmean_par_gnd (:,ipy) = 0.0 cgrid%qmean_rlong_gnd (:,ipy) = 0.0 cgrid%qmean_rlongup (:,ipy) = 0.0 cgrid%qmean_parup (:,ipy) = 0.0 diff --git a/ED/src/io/ed_init_full_history.F90 b/ED/src/io/ed_init_full_history.F90 index 71849a2e8..945b8cb88 100644 --- a/ED/src/io/ed_init_full_history.F90 +++ b/ED/src/io/ed_init_full_history.F90 @@ -821,6 +821,14 @@ end subroutine hdf_getslab_i call hdf_getslab_r(cgrid%dmean_rshort_diff (ipy:ipy) ,'DMEAN_RSHORT_DIFF ' & ,dsetrank,iparallel,.false.,foundvar) + if (associated(cgrid%dmean_par )) & + call hdf_getslab_r(cgrid%dmean_par (ipy:ipy) ,'DMEAN_PAR ' & + ,dsetrank,iparallel,.false.,foundvar) + + if (associated(cgrid%dmean_par_diff )) & + call hdf_getslab_r(cgrid%dmean_par_diff (ipy:ipy) ,'DMEAN_PAR_DIFF ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cgrid%dmean_rlong )) & call hdf_getslab_r(cgrid%dmean_rlong (ipy:ipy) ,'DMEAN_RLONG ' & ,dsetrank,iparallel,.false.,foundvar) @@ -849,6 +857,10 @@ end subroutine hdf_getslab_i call hdf_getslab_r(cgrid%dmean_rshort_gnd (ipy:ipy) ,'DMEAN_RSHORT_GND ' & ,dsetrank,iparallel,.false.,foundvar) + if (associated(cgrid%dmean_par_gnd )) & + call hdf_getslab_r(cgrid%dmean_par_gnd (ipy:ipy) ,'DMEAN_PAR_GND ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cgrid%dmean_rlong_gnd )) & call hdf_getslab_r(cgrid%dmean_rlong_gnd (ipy:ipy) ,'DMEAN_RLONG_GND ' & ,dsetrank,iparallel,.false.,foundvar) @@ -1110,6 +1122,14 @@ end subroutine hdf_getslab_i call hdf_getslab_r(cgrid%mmean_rshort_diff (ipy:ipy) ,'MMEAN_RSHORT_DIFF ' & ,dsetrank,iparallel,.false.,foundvar) + if (associated(cgrid%mmean_par )) & + call hdf_getslab_r(cgrid%mmean_par (ipy:ipy) ,'MMEAN_PAR ' & + ,dsetrank,iparallel,.false.,foundvar) + + if (associated(cgrid%mmean_par_diff )) & + call hdf_getslab_r(cgrid%mmean_par_diff (ipy:ipy) ,'MMEAN_PAR_DIFF ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cgrid%mmean_rlong )) & call hdf_getslab_r(cgrid%mmean_rlong (ipy:ipy) ,'MMEAN_RLONG ' & ,dsetrank,iparallel,.false.,foundvar) @@ -1137,6 +1157,10 @@ end subroutine hdf_getslab_i if (associated(cgrid%mmean_rshort_gnd )) & call hdf_getslab_r(cgrid%mmean_rshort_gnd (ipy:ipy) ,'MMEAN_RSHORT_GND ' & ,dsetrank,iparallel,.false.,foundvar) + + if (associated(cgrid%mmean_par_gnd )) & + call hdf_getslab_r(cgrid%mmean_par_gnd (ipy:ipy) ,'MMEAN_PAR_GND ' & + ,dsetrank,iparallel,.false.,foundvar) if (associated(cgrid%mmean_rlong_gnd )) & call hdf_getslab_r(cgrid%mmean_rlong_gnd (ipy:ipy) ,'MMEAN_RLONG_GND ' & @@ -1565,6 +1589,14 @@ end subroutine hdf_getslab_i call hdf_getslab_r(cgrid%qmean_rshort_diff (:,ipy) ,'QMEAN_RSHORT_DIFF ' & ,dsetrank,iparallel,.false.,foundvar) + if (associated(cgrid%qmean_par )) & + call hdf_getslab_r(cgrid%qmean_par (:,ipy) ,'QMEAN_PAR ' & + ,dsetrank,iparallel,.false.,foundvar) + + if (associated(cgrid%qmean_par_diff )) & + call hdf_getslab_r(cgrid%qmean_par_diff (:,ipy) ,'QMEAN_PAR_DIFF ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cgrid%qmean_rlong )) & call hdf_getslab_r(cgrid%qmean_rlong (:,ipy) ,'QMEAN_RLONG ' & ,dsetrank,iparallel,.false.,foundvar) @@ -1592,6 +1624,10 @@ end subroutine hdf_getslab_i if (associated(cgrid%qmean_rshort_gnd )) & call hdf_getslab_r(cgrid%qmean_rshort_gnd (:,ipy) ,'QMEAN_RSHORT_GND ' & ,dsetrank,iparallel,.false.,foundvar) + + if (associated(cgrid%qmean_par_gnd )) & + call hdf_getslab_r(cgrid%qmean_par_gnd (:,ipy) ,'QMEAN_PAR_GND ' & + ,dsetrank,iparallel,.false.,foundvar) if (associated(cgrid%qmean_rlong_gnd )) & call hdf_getslab_r(cgrid%qmean_rlong_gnd (:,ipy) ,'QMEAN_RLONG_GND ' & @@ -2339,6 +2375,9 @@ end subroutine hdf_getslab_i call hdf_getslab_r(csite%rshort_g,'RSHORT_G ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%rshort_g_beam,'RSHORT_G_BEAM ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%rshort_g_diffuse,'RSHORT_G_DIFFUSE ',dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(csite%par_g,'PAR_G ',dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(csite%par_g_beam,'PAR_G_BEAM ',dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(csite%par_g_diffuse,'PAR_G_DIFFUSE ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%par_b,'PAR_B ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%par_b_beam,'PAR_B_BEAM ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%par_b_diffuse,'PAR_B_DIFFUSE ',dsetrank,iparallel,.true.,foundvar) @@ -2369,11 +2408,6 @@ end subroutine hdf_getslab_i call hdf_getslab_r(csite%rh,'RH ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%cwd_rh,'CWD_RH ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%plant_ag_biomass,'PLANT_AG_BIOMASS ',dsetrank,iparallel,.true.,foundvar) - call hdf_getslab_r(csite%mean_wflux,'MEAN_WFLUX ',dsetrank,iparallel,.true.,foundvar) - call hdf_getslab_r(csite%mean_latflux,'MEAN_LATFLUX ',dsetrank,iparallel,.true.,foundvar) - call hdf_getslab_r(csite%mean_hflux,'MEAN_HFLUX ',dsetrank,iparallel,.true.,foundvar) - call hdf_getslab_r(csite%mean_runoff,'MEAN_RUNOFF ',dsetrank,iparallel,.true.,foundvar) - call hdf_getslab_r(csite%mean_qrunoff,'MEAN_QRUNOFF ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%htry,'HTRY ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%hprev,'HPREV ',dsetrank,iparallel,.false.,foundvar) @@ -2539,6 +2573,9 @@ end subroutine hdf_getslab_i call hdf_getslab_r(csite%rshort_s,'RSHORT_S ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%rshort_s_beam,'RSHORT_S_BEAM ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%rshort_s_diffuse,'RSHORT_S_DIFFUSE ',dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(csite%par_s,'PAR_S ',dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(csite%par_s_beam,'PAR_S_BEAM ',dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(csite%par_s_diffuse,'PAR_S_DIFFUSE ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%sfcwater_tempk,'SFCWATER_TEMPK ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(csite%sfcwater_fracliq,'SFCWATER_FRACLIQ ',dsetrank,iparallel,.true.,foundvar) @@ -2809,7 +2846,42 @@ end subroutine hdf_getslab_i call hdf_getslab_r(cpatch%today_leaf_resp,'TODAY_LEAF_RESP ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(cpatch%today_root_resp,'TODAY_ROOT_RESP ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_r(cpatch%today_gpp,'TODAY_GPP ',dsetrank,iparallel,.true.,foundvar) - + + + call hdf_getslab_r(cpatch%mean_par_l ,'MEAN_PAR_L ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_par_l_beam ,'MEAN_PAR_L_BEAM ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_par_l_diff ,'MEAN_PAR_L_DIFF ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_rshort_l ,'MEAN_RSHORT_L ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_rlong_l ,'MEAN_RLONG_L ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_sensible_lc ,'MEAN_SENSIBLE_LC ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_vapor_lc ,'MEAN_VAPOR_LC ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_transp ,'MEAN_TRANSP ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_intercepted_al,'MEAN_INTERCEPTED_AL ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_wshed_lg ,'MEAN_WSHED_LG ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_rshort_w ,'MEAN_RSHORT_W ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_rlong_w ,'MEAN_RLONG_W ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_sensible_wc ,'MEAN_SENSIBLE_WC ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_vapor_wc ,'MEAN_VAPOR_WC ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_intercepted_aw,'MEAN_INTERCEPTED_AW ' & + ,dsetrank,iparallel,.true.,foundvar) + call hdf_getslab_r(cpatch%mean_wshed_wg ,'MEAN_WSHED_WG ' & + ,dsetrank,iparallel,.true.,foundvar) + + if (associated(cpatch%today_nppleaf )) & call hdf_getslab_r(cpatch%today_nppleaf ,'TODAY_NPPLEAF ',dsetrank,iparallel,.false.,foundvar) if (associated(cpatch%today_nppfroot )) & @@ -2949,19 +3021,105 @@ end subroutine hdf_getslab_i call hdf_getslab_r(cpatch%dmean_light_level_diff,'DMEAN_LIGHT_LEVEL_DIFF ',dsetrank,iparallel,.false.,foundvar) if (associated(cpatch%mmean_light_level_diff )) & call hdf_getslab_r(cpatch%mmean_light_level_diff,'MMEAN_LIGHT_LEVEL_DIFF ',dsetrank,iparallel,.false.,foundvar) - if (associated(cpatch%dmean_par_l )) & - call hdf_getslab_r(cpatch%dmean_par_l,'DMEAN_PAR_L ',dsetrank,iparallel,.false.,foundvar) - - if (associated(cpatch%dmean_par_l_beam )) & - call hdf_getslab_r(cpatch%dmean_par_l_beam,'DMEAN_PAR_L_BEAM ',dsetrank,iparallel,.false.,foundvar) - if (associated(cpatch%dmean_par_l_diff )) & - call hdf_getslab_r(cpatch%dmean_par_l_diff,'DMEAN_PAR_L_DIFF ',dsetrank,iparallel,.false.,foundvar) - if (associated(cpatch%mmean_par_l )) & - call hdf_getslab_r(cpatch%mmean_par_l,'MMEAN_PAR_L ',dsetrank,iparallel,.false.,foundvar) - if (associated(cpatch%mmean_par_l_beam )) & - call hdf_getslab_r(cpatch%mmean_par_l_beam,'MMEAN_PAR_L_BEAM ',dsetrank,iparallel,.false.,foundvar) - if (associated(cpatch%mmean_par_l_diff )) & - call hdf_getslab_r(cpatch%mmean_par_l_diff,'MMEAN_PAR_L_DIFF ',dsetrank,iparallel,.false.,foundvar) + + + if (associated(cpatch%dmean_par_l )) & + call hdf_getslab_r(cpatch%dmean_par_l ,'DMEAN_PAR_L ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_par_l_beam )) & + call hdf_getslab_r(cpatch%dmean_par_l_beam ,'DMEAN_PAR_L_BEAM ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_par_l_diff )) & + call hdf_getslab_r(cpatch%dmean_par_l_diff ,'DMEAN_PAR_L_DIFF ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_rshort_l )) & + call hdf_getslab_r(cpatch%dmean_rshort_l ,'DMEAN_RSHORT_L ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_rlong_l )) & + call hdf_getslab_r(cpatch%dmean_rlong_l ,'DMEAN_RLONG_L ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_sensible_lc )) & + call hdf_getslab_r(cpatch%dmean_sensible_lc ,'DMEAN_SENSIBLE_LC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_vapor_lc )) & + call hdf_getslab_r(cpatch%dmean_vapor_lc ,'DMEAN_VAPOR_LC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_transp )) & + call hdf_getslab_r(cpatch%dmean_transp ,'DMEAN_TRANSP_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_intercepted_al)) & + call hdf_getslab_r(cpatch%dmean_intercepted_al,'DMEAN_INTERCEPTED_AL_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_wshed_lg )) & + call hdf_getslab_r(cpatch%dmean_wshed_lg ,'DMEAN_WSHED_LG_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_rshort_w )) & + call hdf_getslab_r(cpatch%dmean_rshort_w ,'DMEAN_RSHORT_W ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_rlong_w )) & + call hdf_getslab_r(cpatch%dmean_rlong_w ,'DMEAN_RLONG_W ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_sensible_wc )) & + call hdf_getslab_r(cpatch%dmean_sensible_wc ,'DMEAN_SENSIBLE_WC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_vapor_wc )) & + call hdf_getslab_r(cpatch%dmean_vapor_wc ,'DMEAN_VAPOR_WC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_intercepted_aw)) & + call hdf_getslab_r(cpatch%dmean_intercepted_aw,'DMEAN_INTERCEPTED_AW_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%dmean_wshed_wg )) & + call hdf_getslab_r(cpatch%dmean_wshed_wg ,'DMEAN_WSHED_WG_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_par_l )) & + call hdf_getslab_r(cpatch%mmean_par_l ,'MMEAN_PAR_L ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_par_l_beam )) & + call hdf_getslab_r(cpatch%mmean_par_l_beam ,'MMEAN_PAR_L_BEAM ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_par_l_diff )) & + call hdf_getslab_r(cpatch%mmean_par_l_diff ,'MMEAN_PAR_L_DIFF ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_rshort_l )) & + call hdf_getslab_r(cpatch%mmean_rshort_l ,'MMEAN_RSHORT_L ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_rlong_l )) & + call hdf_getslab_r(cpatch%mmean_rlong_l ,'MMEAN_RLONG_L ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_sensible_lc )) & + call hdf_getslab_r(cpatch%mmean_sensible_lc ,'MMEAN_SENSIBLE_LC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_vapor_lc )) & + call hdf_getslab_r(cpatch%mmean_vapor_lc ,'MMEAN_VAPOR_LC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_transp )) & + call hdf_getslab_r(cpatch%mmean_transp ,'MMEAN_TRANSP_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_intercepted_al)) & + call hdf_getslab_r(cpatch%mmean_intercepted_al,'MMEAN_INTERCEPTED_AL_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_wshed_lg )) & + call hdf_getslab_r(cpatch%mmean_wshed_lg ,'MMEAN_WSHED_LG_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_rshort_w )) & + call hdf_getslab_r(cpatch%mmean_rshort_w ,'MMEAN_RSHORT_W ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_rlong_w )) & + call hdf_getslab_r(cpatch%mmean_rlong_w ,'MMEAN_RLONG_W ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_sensible_wc )) & + call hdf_getslab_r(cpatch%mmean_sensible_wc ,'MMEAN_SENSIBLE_WC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_vapor_wc )) & + call hdf_getslab_r(cpatch%mmean_vapor_wc ,'MMEAN_VAPOR_WC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_intercepted_aw)) & + call hdf_getslab_r(cpatch%mmean_intercepted_aw,'MMEAN_INTERCEPTED_AW_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%mmean_wshed_wg )) & + call hdf_getslab_r(cpatch%mmean_wshed_wg ,'MMEAN_WSHED_WG_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + call hdf_getslab_r(cpatch%Psi_open,'PSI_OPEN ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_i(cpatch%krdepth,'KRDEPTH ',dsetrank,iparallel,.true.,foundvar) call hdf_getslab_i(cpatch%first_census,'FIRST_CENSUS ',dsetrank,iparallel,.true.,foundvar) @@ -3137,8 +3295,55 @@ end subroutine hdf_getslab_i if (associated(cpatch%qmean_water_supply)) & call hdf_getslab_r(cpatch%qmean_water_supply,'QMEAN_WATER_SUPPLY_CO ' & ,dsetrank,iparallel,.true.,foundvar) - -endif + if (associated(cpatch%qmean_par_l )) & + call hdf_getslab_r(cpatch%qmean_par_l ,'QMEAN_PAR_L ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_par_l_beam )) & + call hdf_getslab_r(cpatch%qmean_par_l_beam ,'QMEAN_PAR_L_BEAM ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_par_l_diff )) & + call hdf_getslab_r(cpatch%qmean_par_l_diff ,'QMEAN_PAR_L_DIFF ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_rshort_l )) & + call hdf_getslab_r(cpatch%qmean_rshort_l ,'QMEAN_RSHORT_L ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_rlong_l )) & + call hdf_getslab_r(cpatch%qmean_rlong_l ,'QMEAN_RLONG_L ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_sensible_lc )) & + call hdf_getslab_r(cpatch%qmean_sensible_lc ,'QMEAN_SENSIBLE_LC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_vapor_lc )) & + call hdf_getslab_r(cpatch%qmean_vapor_lc ,'QMEAN_VAPOR_LC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_transp )) & + call hdf_getslab_r(cpatch%qmean_transp ,'QMEAN_TRANSP_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_intercepted_al)) & + call hdf_getslab_r(cpatch%qmean_intercepted_al,'QMEAN_INTERCEPTED_AL_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_wshed_lg )) & + call hdf_getslab_r(cpatch%qmean_wshed_lg ,'QMEAN_WSHED_LG_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_rshort_w )) & + call hdf_getslab_r(cpatch%qmean_rshort_w ,'QMEAN_RSHORT_W ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_rlong_w )) & + call hdf_getslab_r(cpatch%qmean_rlong_w ,'QMEAN_RLONG_W ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_sensible_wc )) & + call hdf_getslab_r(cpatch%qmean_sensible_wc ,'QMEAN_SENSIBLE_WC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_vapor_wc )) & + call hdf_getslab_r(cpatch%qmean_vapor_wc ,'QMEAN_VAPOR_WC_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_intercepted_aw)) & + call hdf_getslab_r(cpatch%qmean_intercepted_aw,'QMEAN_INTERCEPTED_AW_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + if (associated(cpatch%qmean_wshed_wg )) & + call hdf_getslab_r(cpatch%qmean_wshed_wg ,'QMEAN_WSHED_WG_CO ' & + ,dsetrank,iparallel,.false.,foundvar) + end if return diff --git a/ED/src/io/edio.f90 b/ED/src/io/edio.f90 index 729497eb9..c41c19a05 100644 --- a/ED/src/io/edio.f90 +++ b/ED/src/io/edio.f90 @@ -443,7 +443,8 @@ subroutine spatial_averages !----- Average fast time flux dynamics over sites. ----------------------------! cpoly%avg_rshort_gnd(isi)= sum(csite%avg_rshort_gnd* csite%area ) * site_area_i - cpoly%avg_rlong_gnd(isi) = sum(csite%avg_rlong_gnd * csite%area ) * site_area_i + cpoly%avg_par_gnd (isi)= sum(csite%avg_par_gnd * csite%area ) * site_area_i + cpoly%avg_rlong_gnd (isi)= sum(csite%avg_rlong_gnd * csite%area ) * site_area_i cpoly%avg_rlongup(isi) = sum(csite%avg_rlongup * csite%area ) * site_area_i cpoly%avg_parup (isi) = sum(csite%avg_parup * csite%area ) * site_area_i cpoly%avg_nirup (isi) = sum(csite%avg_nirup * csite%area ) * site_area_i @@ -1106,32 +1107,33 @@ subroutine spatial_averages cgrid%lai(ipy) = sum(cpoly%lai * cpoly%area ) * poly_area_i cgrid%wai(ipy) = sum(cpoly%wai * cpoly%area ) * poly_area_i !----- Average fast time flux dynamics over polygons. ----------------------------! - cgrid%avg_rshort_gnd(ipy) = sum(cpoly%avg_rshort_gnd *cpoly%area)*poly_area_i - cgrid%avg_rlong_gnd(ipy) = sum(cpoly%avg_rlong_gnd *cpoly%area)*poly_area_i - cgrid%avg_rlongup (ipy) = sum(cpoly%avg_rlongup *cpoly%area)*poly_area_i - cgrid%avg_parup (ipy) = sum(cpoly%avg_parup *cpoly%area)*poly_area_i - cgrid%avg_nirup (ipy) = sum(cpoly%avg_nirup *cpoly%area)*poly_area_i - cgrid%avg_rshortup (ipy) = sum(cpoly%avg_rshortup *cpoly%area)*poly_area_i - cgrid%avg_rnet (ipy) = sum(cpoly%avg_rnet *cpoly%area)*poly_area_i - cgrid%avg_carbon_ac(ipy) = sum(cpoly%avg_carbon_ac *cpoly%area)*poly_area_i - cgrid%avg_carbon_st(ipy) = sum(cpoly%avg_carbon_st *cpoly%area)*poly_area_i - cgrid%avg_vapor_lc(ipy) = sum(cpoly%avg_vapor_lc *cpoly%area)*poly_area_i - cgrid%avg_vapor_wc(ipy) = sum(cpoly%avg_vapor_wc *cpoly%area)*poly_area_i - cgrid%avg_vapor_gc(ipy) = sum(cpoly%avg_vapor_gc *cpoly%area)*poly_area_i - cgrid%avg_wshed_vg(ipy) = sum(cpoly%avg_wshed_vg *cpoly%area)*poly_area_i - cgrid%avg_intercepted(ipy) = sum(cpoly%avg_intercepted *cpoly%area)*poly_area_i - cgrid%avg_throughfall(ipy) = sum(cpoly%avg_throughfall *cpoly%area)*poly_area_i - cgrid%avg_fsc(ipy) = sum(cpoly%avg_fsc *cpoly%area)*poly_area_i - cgrid%avg_stsc(ipy) = sum(cpoly%avg_stsc *cpoly%area)*poly_area_i - cgrid%avg_ssc(ipy) = sum(cpoly%avg_ssc *cpoly%area)*poly_area_i - cgrid%avg_fsn(ipy) = sum(cpoly%avg_fsn *cpoly%area)*poly_area_i - cgrid%avg_msn(ipy) = sum(cpoly%avg_msn *cpoly%area)*poly_area_i - cgrid%avg_runoff_heat(ipy) = sum(cpoly%avg_runoff_heat *cpoly%area)*poly_area_i - cgrid%avg_runoff(ipy) = sum(cpoly%avg_runoff *cpoly%area)*poly_area_i - cgrid%avg_drainage(ipy) = sum(cpoly%avg_drainage *cpoly%area)*poly_area_i + cgrid%avg_rshort_gnd (ipy)= sum(cpoly%avg_rshort_gnd *cpoly%area)*poly_area_i + cgrid%avg_par_gnd (ipy)= sum(cpoly%avg_par_gnd *cpoly%area)*poly_area_i + cgrid%avg_rlong_gnd (ipy)= sum(cpoly%avg_rlong_gnd *cpoly%area)*poly_area_i + cgrid%avg_rlongup (ipy)= sum(cpoly%avg_rlongup *cpoly%area)*poly_area_i + cgrid%avg_parup (ipy)= sum(cpoly%avg_parup *cpoly%area)*poly_area_i + cgrid%avg_nirup (ipy)= sum(cpoly%avg_nirup *cpoly%area)*poly_area_i + cgrid%avg_rshortup (ipy)= sum(cpoly%avg_rshortup *cpoly%area)*poly_area_i + cgrid%avg_rnet (ipy)= sum(cpoly%avg_rnet *cpoly%area)*poly_area_i + cgrid%avg_carbon_ac (ipy)= sum(cpoly%avg_carbon_ac *cpoly%area)*poly_area_i + cgrid%avg_carbon_st (ipy)= sum(cpoly%avg_carbon_st *cpoly%area)*poly_area_i + cgrid%avg_vapor_lc (ipy)= sum(cpoly%avg_vapor_lc *cpoly%area)*poly_area_i + cgrid%avg_vapor_wc (ipy)= sum(cpoly%avg_vapor_wc *cpoly%area)*poly_area_i + cgrid%avg_vapor_gc (ipy)= sum(cpoly%avg_vapor_gc *cpoly%area)*poly_area_i + cgrid%avg_wshed_vg (ipy)= sum(cpoly%avg_wshed_vg *cpoly%area)*poly_area_i + cgrid%avg_intercepted (ipy)= sum(cpoly%avg_intercepted *cpoly%area)*poly_area_i + cgrid%avg_throughfall (ipy)= sum(cpoly%avg_throughfall *cpoly%area)*poly_area_i + cgrid%avg_fsc (ipy)= sum(cpoly%avg_fsc *cpoly%area)*poly_area_i + cgrid%avg_stsc (ipy)= sum(cpoly%avg_stsc *cpoly%area)*poly_area_i + cgrid%avg_ssc (ipy)= sum(cpoly%avg_ssc *cpoly%area)*poly_area_i + cgrid%avg_fsn (ipy)= sum(cpoly%avg_fsn *cpoly%area)*poly_area_i + cgrid%avg_msn (ipy)= sum(cpoly%avg_msn *cpoly%area)*poly_area_i + cgrid%avg_runoff_heat (ipy)= sum(cpoly%avg_runoff_heat *cpoly%area)*poly_area_i + cgrid%avg_runoff (ipy)= sum(cpoly%avg_runoff *cpoly%area)*poly_area_i + cgrid%avg_drainage (ipy)= sum(cpoly%avg_drainage *cpoly%area)*poly_area_i cgrid%avg_drainage_heat(ipy)= sum(cpoly%avg_drainage_heat*cpoly%area)*poly_area_i - cgrid%avg_vapor_ac(ipy) = sum(cpoly%avg_vapor_ac *cpoly%area)*poly_area_i - cgrid%avg_transp(ipy) = sum(cpoly%avg_transp *cpoly%area)*poly_area_i + cgrid%avg_vapor_ac (ipy)= sum(cpoly%avg_vapor_ac *cpoly%area)*poly_area_i + cgrid%avg_transp (ipy)= sum(cpoly%avg_transp *cpoly%area)*poly_area_i cgrid%avg_evap(ipy) = sum(cpoly%avg_evap *cpoly%area)*poly_area_i cgrid%avg_sensible_lc(ipy) = sum(cpoly%avg_sensible_lc *cpoly%area)*poly_area_i cgrid%avg_sensible_wc(ipy) = sum(cpoly%avg_sensible_wc *cpoly%area)*poly_area_i diff --git a/ED/src/memory/ed_state_vars.f90 b/ED/src/memory/ed_state_vars.f90 index b1d01cd8a..8f60b9fe8 100644 --- a/ED/src/memory/ed_state_vars.f90 +++ b/ED/src/memory/ed_state_vars.f90 @@ -164,9 +164,9 @@ module ed_state_vars real, pointer,dimension(:,:) :: cb_moistmax !(13,ncohorts) ! Relative carbon balance: - ! CB CB - ! cr = k ------------- + (1 - k) ------------- - ! CB_lightmax CB_watermax + ! 1 CB_lightmax CB_watermax + ! ---- = k ------------- + (1 - k) ------------- + ! CR CB CB ! k is the ddmort_const given on the namelist real ,pointer,dimension(:) :: cbr_bar @@ -368,6 +368,7 @@ module ed_state_vars ! Photosynthetically active radiation (PAR) absorbed by the ! cohort leaves(units are W/m2) real ,pointer,dimension(:) :: par_l + real ,pointer,dimension(:) :: mean_par_l real ,pointer,dimension(:) :: dmean_par_l real ,pointer,dimension(:,:) :: qmean_par_l real ,pointer,dimension(:) :: mmean_par_l @@ -375,6 +376,7 @@ module ed_state_vars ! Photosynthetically active radiation (PAR) absorbed by the ! cohort leaves (units are W/m2), beam component real ,pointer,dimension(:) :: par_l_beam + real ,pointer,dimension(:) :: mean_par_l_beam real ,pointer,dimension(:) :: dmean_par_l_beam real ,pointer,dimension(:,:) :: qmean_par_l_beam real ,pointer,dimension(:) :: mmean_par_l_beam @@ -382,6 +384,7 @@ module ed_state_vars ! Photosynthetically active radiation (PAR) absorbed by the ! cohort leaves (units are W/m2), diffuse component real ,pointer,dimension(:) :: par_l_diffuse + real ,pointer,dimension(:) :: mean_par_l_diff real ,pointer,dimension(:) :: dmean_par_l_diff real ,pointer,dimension(:,:) :: qmean_par_l_diff real ,pointer,dimension(:) :: mmean_par_l_diff @@ -522,6 +525,61 @@ module ed_state_vars real, pointer, dimension(:) :: vm_bar real, pointer, dimension(:) :: sla + + ! Enthalpy and water fluxes at the cohort level, and their means. + real, pointer, dimension(:) :: mean_rshort_l + real, pointer, dimension(:) :: mean_rlong_l + real, pointer, dimension(:) :: mean_sensible_lc + real, pointer, dimension(:) :: mean_vapor_lc + real, pointer, dimension(:) :: mean_transp + real, pointer, dimension(:) :: mean_intercepted_al + real, pointer, dimension(:) :: mean_wshed_lg + real, pointer, dimension(:) :: mean_rshort_w + real, pointer, dimension(:) :: mean_rlong_w + real, pointer, dimension(:) :: mean_sensible_wc + real, pointer, dimension(:) :: mean_vapor_wc + real, pointer, dimension(:) :: mean_intercepted_aw + real, pointer, dimension(:) :: mean_wshed_wg + real, pointer, dimension(:) :: dmean_rshort_l + real, pointer, dimension(:) :: dmean_rlong_l + real, pointer, dimension(:) :: dmean_sensible_lc + real, pointer, dimension(:) :: dmean_vapor_lc + real, pointer, dimension(:) :: dmean_transp + real, pointer, dimension(:) :: dmean_intercepted_al + real, pointer, dimension(:) :: dmean_wshed_lg + real, pointer, dimension(:) :: dmean_rshort_w + real, pointer, dimension(:) :: dmean_rlong_w + real, pointer, dimension(:) :: dmean_sensible_wc + real, pointer, dimension(:) :: dmean_vapor_wc + real, pointer, dimension(:) :: dmean_intercepted_aw + real, pointer, dimension(:) :: dmean_wshed_wg + real, pointer, dimension(:,:) :: qmean_rshort_l + real, pointer, dimension(:,:) :: qmean_rlong_l + real, pointer, dimension(:,:) :: qmean_sensible_lc + real, pointer, dimension(:,:) :: qmean_vapor_lc + real, pointer, dimension(:,:) :: qmean_transp + real, pointer, dimension(:,:) :: qmean_intercepted_al + real, pointer, dimension(:,:) :: qmean_wshed_lg + real, pointer, dimension(:,:) :: qmean_rshort_w + real, pointer, dimension(:,:) :: qmean_rlong_w + real, pointer, dimension(:,:) :: qmean_sensible_wc + real, pointer, dimension(:,:) :: qmean_vapor_wc + real, pointer, dimension(:,:) :: qmean_intercepted_aw + real, pointer, dimension(:,:) :: qmean_wshed_wg + real, pointer, dimension(:) :: mmean_rshort_l + real, pointer, dimension(:) :: mmean_rlong_l + real, pointer, dimension(:) :: mmean_sensible_lc + real, pointer, dimension(:) :: mmean_vapor_lc + real, pointer, dimension(:) :: mmean_transp + real, pointer, dimension(:) :: mmean_intercepted_al + real, pointer, dimension(:) :: mmean_wshed_lg + real, pointer, dimension(:) :: mmean_rshort_w + real, pointer, dimension(:) :: mmean_rlong_w + real, pointer, dimension(:) :: mmean_sensible_wc + real, pointer, dimension(:) :: mmean_vapor_wc + real, pointer, dimension(:) :: mmean_intercepted_aw + real, pointer, dimension(:) :: mmean_wshed_wg + end type patchtype !============================================================================! !============================================================================! @@ -678,6 +736,17 @@ module ed_state_vars ! Short wave radiation absorbed by the surface water, ! diffuse component (W/m2) real, pointer,dimension(:,:) :: rshort_s_diffuse + + ! PAR absorbed by the surface water (W/m2) + real, pointer,dimension(:,:) :: par_s + + ! PAR absorbed by the surface water, + ! beam component (W/m2) + real, pointer,dimension(:,:) :: par_s_beam + + ! PAR absorbed by the surface water, + ! diffuse component (W/m2) + real, pointer,dimension(:,:) :: par_s_diffuse ! Soil internal energy (J/m3) real, pointer,dimension(:,:) :: soil_energy @@ -900,6 +969,15 @@ module ed_state_vars ! Short wave radiation absorbed by the ground, diffuse component (W/m2) real , pointer,dimension(:) :: rshort_g_diffuse + ! PAR absorbed by the ground (W/m2) + real , pointer,dimension(:) :: par_g + + ! PAR absorbed by the ground, beam component (W/m2) + real , pointer,dimension(:) :: par_g_beam + + ! PAR absorbed by the ground, diffuse component (W/m2) + real , pointer,dimension(:) :: par_g_diffuse + ! Photosynthetically active radiation incident at the ground(W/m2) real , pointer,dimension(:) :: par_b @@ -995,21 +1073,6 @@ module ed_state_vars ! Above ground biomass in this patch [kgC/m2] real , pointer,dimension(:) :: plant_ag_biomass - ! Mean water flux from the canopy air to the atmosphere (kg_H2O/m²/s). - real, pointer,dimension(:) :: mean_wflux - - ! Mean latent heat flux from the canopy air to the atmosphere (W/m²). - real, pointer,dimension(:) :: mean_latflux - - ! Mean sensible heat flux from the canopy air to the atmosphere (W/m²). - real, pointer,dimension(:) :: mean_hflux - - ! Mean runoff (kg_H2O/m²/s). - real, pointer,dimension(:) :: mean_runoff - - ! Energy associated with runoff (W/m²), averaged over FRQSTATE - real, pointer,dimension(:) :: mean_qrunoff - ! Last time step successfully completed by integrator. real, pointer,dimension(:) :: htry @@ -1054,6 +1117,7 @@ module ed_state_vars !----- Radiation -------------------------------------------------- real, pointer, dimension(:) :: avg_rshort_gnd ! Absorbed SW rad. of soil + top water/snow layer [ W/m2] + real, pointer, dimension(:) :: avg_par_gnd ! Absorbed PAR of soil + top water/snow layer [ W/m2] real, pointer, dimension(:) :: avg_rlong_gnd ! Emitted LW rad. from soil + top water/snow layer [ W/m2] real, pointer, dimension(:) :: avg_rlongup ! Emitted LW rad. from soil + top water/snow layer [ W/m2] real, pointer, dimension(:) :: avg_parup ! Reflected PAR at the top of the canopy [ W/m2] @@ -1357,6 +1421,7 @@ module ed_state_vars ! Fast time flux diagnostic variables == Polygon Level !------------------------------------------- real,pointer,dimension(:) :: avg_rshort_gnd ! Total absorbed radiation at the ground + real,pointer,dimension(:) :: avg_par_gnd ! Total absorbed PAR at the ground real,pointer,dimension(:) :: avg_rlong_gnd ! Total absorbed radiation at the ground real,pointer,dimension(:) :: avg_ustar ! Average u* [ m/s] real,pointer,dimension(:) :: avg_tstar ! Average Theta* [ K] @@ -1646,6 +1711,7 @@ module ed_state_vars !------------------------------------------- real,pointer,dimension(:) :: avg_rshort_gnd ! Total absorbed radiation at the ground + real,pointer,dimension(:) :: avg_par_gnd ! Total absorbed PAR at the ground real,pointer,dimension(:) :: avg_rlong_gnd ! Total absorbed radiation at the ground real,pointer,dimension(:) :: avg_ustar ! Average u* [ m/s] real,pointer,dimension(:) :: avg_tstar ! Average Theta* [ K] @@ -1786,15 +1852,13 @@ module ed_state_vars real,pointer,dimension(:) :: Nnet_min !----- Meteorologic Conditions ----------------------------------------------------! - real,pointer,dimension(:) :: avg_nir_beam - real,pointer,dimension(:) :: avg_nir_diffuse - real,pointer,dimension(:) :: avg_par_beam - real,pointer,dimension(:) :: avg_par_diffuse real,pointer,dimension(:) :: avg_atm_tmp real,pointer,dimension(:) :: avg_atm_vpdef real,pointer,dimension(:) :: avg_atm_shv real,pointer,dimension(:) :: avg_rshort real,pointer,dimension(:) :: avg_rshort_diffuse + real,pointer,dimension(:) :: avg_par + real,pointer,dimension(:) :: avg_par_diffuse real,pointer,dimension(:) :: avg_rlong real,pointer,dimension(:) :: avg_pcpg real,pointer,dimension(:) :: avg_qpcpg @@ -1921,8 +1985,11 @@ module ed_state_vars real, pointer, dimension(:) :: dmean_atm_vels ! (npolygons) real, pointer, dimension(:) :: dmean_rshort ! (npolygons) real, pointer, dimension(:) :: dmean_rshort_diff ! (npolygons) + real, pointer, dimension(:) :: dmean_par ! (npolygons) + real, pointer, dimension(:) :: dmean_par_diff ! (npolygons) real, pointer, dimension(:) :: dmean_rlong ! (npolygons) real, pointer, dimension(:) :: dmean_rshort_gnd ! (npolygons) + real, pointer, dimension(:) :: dmean_par_gnd ! (npolygons) real, pointer, dimension(:) :: dmean_rlong_gnd ! (npolygons) real, pointer, dimension(:) :: dmean_albedo ! (npolygons) real, pointer, dimension(:) :: dmean_albedo_beam ! (npolygons) @@ -1994,8 +2061,11 @@ module ed_state_vars real, pointer, dimension(:,:) :: qmean_atm_vels ! (ndcycle,npolygons) real, pointer, dimension(:,:) :: qmean_rshort ! (ndcycle,npolygons) real, pointer, dimension(:,:) :: qmean_rshort_diff ! (ndcycle,npolygons) + real, pointer, dimension(:,:) :: qmean_par ! (ndcycle,npolygons) + real, pointer, dimension(:,:) :: qmean_par_diff ! (ndcycle,npolygons) real, pointer, dimension(:,:) :: qmean_rlong ! (ndcycle,npolygons) real, pointer, dimension(:,:) :: qmean_rshort_gnd ! (ndcycle,npolygons) + real, pointer, dimension(:,:) :: qmean_par_gnd ! (ndcycle,npolygons) real, pointer, dimension(:,:) :: qmean_rlong_gnd ! (ndcycle,npolygons) real, pointer, dimension(:,:) :: qmean_albedo ! (ndcycle,npolygons) real, pointer, dimension(:,:) :: qmean_albedo_beam ! (ndcycle,npolygons) @@ -2143,8 +2213,11 @@ module ed_state_vars real, pointer, dimension(:) :: mmean_atm_vpdef ! (npolygons) real, pointer, dimension(:) :: mmean_rshort ! (npolygons) real, pointer, dimension(:) :: mmean_rshort_diff ! (npolygons) + real, pointer, dimension(:) :: mmean_par ! (npolygons) + real, pointer, dimension(:) :: mmean_par_diff ! (npolygons) real, pointer, dimension(:) :: mmean_rlong ! (npolygons) real, pointer, dimension(:) :: mmean_rshort_gnd ! (npolygons) + real, pointer, dimension(:) :: mmean_par_gnd ! (npolygons) real, pointer, dimension(:) :: mmean_rlong_gnd ! (npolygons) real, pointer, dimension(:) :: mmean_atm_shv ! (npolygons) real, pointer, dimension(:) :: mmean_atm_co2 ! (npolygons) @@ -2426,6 +2499,7 @@ subroutine allocate_edtype(cgrid,npolygons) allocate(cgrid%avg_drainage (npolygons)) allocate(cgrid%avg_drainage_heat (npolygons)) allocate(cgrid%avg_rshort_gnd (npolygons)) + allocate(cgrid%avg_par_gnd (npolygons)) allocate(cgrid%avg_rlong_gnd (npolygons)) allocate(cgrid%avg_ustar (npolygons)) allocate(cgrid%avg_tstar (npolygons)) @@ -2558,15 +2632,13 @@ subroutine allocate_edtype(cgrid,npolygons) ! Meteorologic conditions (forcing) - allocate(cgrid%avg_nir_beam (npolygons)) - allocate(cgrid%avg_nir_diffuse (npolygons)) - allocate(cgrid%avg_par_beam (npolygons)) - allocate(cgrid%avg_par_diffuse (npolygons)) allocate(cgrid%avg_atm_tmp (npolygons)) allocate(cgrid%avg_atm_vpdef (npolygons)) allocate(cgrid%avg_atm_shv (npolygons)) allocate(cgrid%avg_rshort (npolygons)) allocate(cgrid%avg_rshort_diffuse (npolygons)) + allocate(cgrid%avg_par (npolygons)) + allocate(cgrid%avg_par_diffuse (npolygons)) allocate(cgrid%avg_rlong (npolygons)) allocate(cgrid%avg_pcpg (npolygons)) allocate(cgrid%avg_qpcpg (npolygons)) @@ -2667,8 +2739,11 @@ subroutine allocate_edtype(cgrid,npolygons) allocate(cgrid%dmean_atm_vels ( npolygons)) allocate(cgrid%dmean_rshort ( npolygons)) allocate(cgrid%dmean_rshort_diff ( npolygons)) + allocate(cgrid%dmean_par ( npolygons)) + allocate(cgrid%dmean_par_diff ( npolygons)) allocate(cgrid%dmean_rlong ( npolygons)) allocate(cgrid%dmean_rshort_gnd ( npolygons)) + allocate(cgrid%dmean_par_gnd ( npolygons)) allocate(cgrid%dmean_rlong_gnd ( npolygons)) allocate(cgrid%dmean_albedo ( npolygons)) allocate(cgrid%dmean_albedo_beam ( npolygons)) @@ -2764,8 +2839,11 @@ subroutine allocate_edtype(cgrid,npolygons) allocate(cgrid%mmean_atm_vpdef ( npolygons)) allocate(cgrid%mmean_rshort ( npolygons)) allocate(cgrid%mmean_rshort_diff ( npolygons)) + allocate(cgrid%mmean_par ( npolygons)) + allocate(cgrid%mmean_par_diff ( npolygons)) allocate(cgrid%mmean_rlong ( npolygons)) allocate(cgrid%mmean_rshort_gnd ( npolygons)) + allocate(cgrid%mmean_par_gnd ( npolygons)) allocate(cgrid%mmean_rlong_gnd ( npolygons)) allocate(cgrid%mmean_albedo ( npolygons)) allocate(cgrid%mmean_albedo_beam ( npolygons)) @@ -2881,8 +2959,11 @@ subroutine allocate_edtype(cgrid,npolygons) allocate(cgrid%qmean_atm_vpdef ( ndcycle, npolygons)) allocate(cgrid%qmean_rshort ( ndcycle, npolygons)) allocate(cgrid%qmean_rshort_diff ( ndcycle, npolygons)) + allocate(cgrid%qmean_par ( ndcycle, npolygons)) + allocate(cgrid%qmean_par_diff ( ndcycle, npolygons)) allocate(cgrid%qmean_rlong ( ndcycle, npolygons)) allocate(cgrid%qmean_rshort_gnd ( ndcycle, npolygons)) + allocate(cgrid%qmean_par_gnd ( ndcycle, npolygons)) allocate(cgrid%qmean_rlong_gnd ( ndcycle, npolygons)) allocate(cgrid%qmean_albedo ( ndcycle, npolygons)) allocate(cgrid%qmean_albedo_beam ( ndcycle, npolygons)) @@ -3052,6 +3133,7 @@ subroutine allocate_polygontype(cpoly,nsites) allocate(cpoly%avg_drainage (nsites)) allocate(cpoly%avg_drainage_heat (nsites)) allocate(cpoly%avg_rshort_gnd (nsites)) + allocate(cpoly%avg_par_gnd (nsites)) allocate(cpoly%avg_rlong_gnd (nsites)) allocate(cpoly%avg_ustar (nsites)) allocate(cpoly%avg_tstar (nsites)) @@ -3205,6 +3287,9 @@ subroutine allocate_sitetype(csite,npatches) allocate(csite%rshort_s(nzs,npatches)) allocate(csite%rshort_s_beam(nzs,npatches)) allocate(csite%rshort_s_diffuse(nzs,npatches)) + allocate(csite%par_s(nzs,npatches)) + allocate(csite%par_s_beam(nzs,npatches)) + allocate(csite%par_s_diffuse(nzs,npatches)) allocate(csite%sfcwater_tempk(nzs,npatches)) allocate(csite%sfcwater_fracliq(nzs,npatches)) allocate(csite%nlev_sfcwater(npatches)) @@ -3271,6 +3356,9 @@ subroutine allocate_sitetype(csite,npatches) allocate(csite%rshort_g(npatches)) allocate(csite%rshort_g_beam(npatches)) allocate(csite%rshort_g_diffuse(npatches)) + allocate(csite%par_g(npatches)) + allocate(csite%par_g_beam(npatches)) + allocate(csite%par_g_diffuse(npatches)) allocate(csite%par_b(npatches)) allocate(csite%par_b_beam(npatches)) allocate(csite%par_b_diffuse(npatches)) @@ -3301,12 +3389,6 @@ subroutine allocate_sitetype(csite,npatches) allocate(csite%cumlai_profile(n_pft,ff_nhgt,npatches)) allocate(csite%plant_ag_biomass(npatches)) - allocate(csite%mean_wflux(npatches)) - allocate(csite%mean_latflux(npatches)) - allocate(csite%mean_hflux(npatches)) - allocate(csite%mean_runoff(npatches)) - allocate(csite%mean_qrunoff(npatches)) - allocate(csite%htry (npatches)) allocate(csite%hprev (npatches)) @@ -3329,6 +3411,7 @@ subroutine allocate_sitetype(csite,npatches) allocate(csite%wpwp(npatches)) allocate(csite%avg_rshort_gnd (npatches)) + allocate(csite%avg_par_gnd (npatches)) allocate(csite%avg_rlong_gnd (npatches)) allocate(csite%avg_ustar (npatches)) allocate(csite%avg_tstar (npatches)) @@ -3584,6 +3667,26 @@ subroutine allocate_patchtype(cpatch,ncohorts) allocate(cpatch%vm_bar(ncohorts)) allocate(cpatch%sla(ncohorts)) + allocate(cpatch%mean_par_l (ncohorts)) + allocate(cpatch%mean_par_l_beam (ncohorts)) + allocate(cpatch%mean_par_l_diff (ncohorts)) + + allocate(cpatch%mean_rshort_l (ncohorts)) + allocate(cpatch%mean_rlong_l (ncohorts)) + allocate(cpatch%mean_sensible_lc (ncohorts)) + allocate(cpatch%mean_vapor_lc (ncohorts)) + allocate(cpatch%mean_transp (ncohorts)) + allocate(cpatch%mean_intercepted_al(ncohorts)) + allocate(cpatch%mean_wshed_lg (ncohorts)) + allocate(cpatch%mean_rshort_w (ncohorts)) + allocate(cpatch%mean_rlong_w (ncohorts)) + allocate(cpatch%mean_sensible_wc (ncohorts)) + allocate(cpatch%mean_vapor_wc (ncohorts)) + allocate(cpatch%mean_intercepted_aw(ncohorts)) + allocate(cpatch%mean_wshed_wg (ncohorts)) + + + if (idoutput > 0 .or. imoutput > 0 .or. iqoutput > 0) then allocate(cpatch%dmean_par_l(ncohorts)) allocate(cpatch%dmean_par_l_beam(ncohorts)) @@ -3600,6 +3703,19 @@ subroutine allocate_patchtype(cpatch,ncohorts) allocate(cpatch%dmean_gpp(ncohorts)) allocate(cpatch%dmean_leaf_resp(ncohorts)) allocate(cpatch%dmean_root_resp(ncohorts)) + allocate(cpatch%dmean_rshort_l (ncohorts)) + allocate(cpatch%dmean_rlong_l (ncohorts)) + allocate(cpatch%dmean_sensible_lc (ncohorts)) + allocate(cpatch%dmean_vapor_lc (ncohorts)) + allocate(cpatch%dmean_transp (ncohorts)) + allocate(cpatch%dmean_intercepted_al(ncohorts)) + allocate(cpatch%dmean_wshed_lg (ncohorts)) + allocate(cpatch%dmean_rshort_w (ncohorts)) + allocate(cpatch%dmean_rlong_w (ncohorts)) + allocate(cpatch%dmean_sensible_wc (ncohorts)) + allocate(cpatch%dmean_vapor_wc (ncohorts)) + allocate(cpatch%dmean_intercepted_aw(ncohorts)) + allocate(cpatch%dmean_wshed_wg (ncohorts)) end if allocate(cpatch%dmean_nppleaf(ncohorts)) @@ -3636,6 +3752,19 @@ subroutine allocate_patchtype(cpatch,ncohorts) allocate(cpatch%mmean_storage_resp(ncohorts)) allocate(cpatch%mmean_vleaf_resp(ncohorts)) allocate(cpatch%mmean_mort_rate(n_mort,ncohorts)) + allocate(cpatch%mmean_rshort_l (ncohorts)) + allocate(cpatch%mmean_rlong_l (ncohorts)) + allocate(cpatch%mmean_sensible_lc (ncohorts)) + allocate(cpatch%mmean_vapor_lc (ncohorts)) + allocate(cpatch%mmean_transp (ncohorts)) + allocate(cpatch%mmean_intercepted_al(ncohorts)) + allocate(cpatch%mmean_wshed_lg (ncohorts)) + allocate(cpatch%mmean_rshort_w (ncohorts)) + allocate(cpatch%mmean_rlong_w (ncohorts)) + allocate(cpatch%mmean_sensible_wc (ncohorts)) + allocate(cpatch%mmean_vapor_wc (ncohorts)) + allocate(cpatch%mmean_intercepted_aw(ncohorts)) + allocate(cpatch%mmean_wshed_wg (ncohorts)) end if allocate(cpatch%mmean_nppleaf(ncohorts)) @@ -3647,18 +3776,31 @@ subroutine allocate_patchtype(cpatch,ncohorts) allocate(cpatch%mmean_nppdaily(ncohorts)) if (iqoutput > 0) then - allocate(cpatch%qmean_par_l (ndcycle,ncohorts)) - allocate(cpatch%qmean_par_l_beam (ndcycle,ncohorts)) - allocate(cpatch%qmean_par_l_diff (ndcycle,ncohorts)) - allocate(cpatch%qmean_fs_open (ndcycle,ncohorts)) - allocate(cpatch%qmean_fsw (ndcycle,ncohorts)) - allocate(cpatch%qmean_fsn (ndcycle,ncohorts)) - allocate(cpatch%qmean_psi_open (ndcycle,ncohorts)) - allocate(cpatch%qmean_psi_closed (ndcycle,ncohorts)) - allocate(cpatch%qmean_water_supply(ndcycle,ncohorts)) - allocate(cpatch%qmean_gpp (ndcycle,ncohorts)) - allocate(cpatch%qmean_leaf_resp (ndcycle,ncohorts)) - allocate(cpatch%qmean_root_resp (ndcycle,ncohorts)) + allocate(cpatch%qmean_par_l (ndcycle,ncohorts)) + allocate(cpatch%qmean_par_l_beam (ndcycle,ncohorts)) + allocate(cpatch%qmean_par_l_diff (ndcycle,ncohorts)) + allocate(cpatch%qmean_fs_open (ndcycle,ncohorts)) + allocate(cpatch%qmean_fsw (ndcycle,ncohorts)) + allocate(cpatch%qmean_fsn (ndcycle,ncohorts)) + allocate(cpatch%qmean_psi_open (ndcycle,ncohorts)) + allocate(cpatch%qmean_psi_closed (ndcycle,ncohorts)) + allocate(cpatch%qmean_water_supply (ndcycle,ncohorts)) + allocate(cpatch%qmean_gpp (ndcycle,ncohorts)) + allocate(cpatch%qmean_leaf_resp (ndcycle,ncohorts)) + allocate(cpatch%qmean_root_resp (ndcycle,ncohorts)) + allocate(cpatch%qmean_rshort_l (ndcycle,ncohorts)) + allocate(cpatch%qmean_rlong_l (ndcycle,ncohorts)) + allocate(cpatch%qmean_sensible_lc (ndcycle,ncohorts)) + allocate(cpatch%qmean_vapor_lc (ndcycle,ncohorts)) + allocate(cpatch%qmean_transp (ndcycle,ncohorts)) + allocate(cpatch%qmean_intercepted_al(ndcycle,ncohorts)) + allocate(cpatch%qmean_wshed_lg (ndcycle,ncohorts)) + allocate(cpatch%qmean_rshort_w (ndcycle,ncohorts)) + allocate(cpatch%qmean_rlong_w (ndcycle,ncohorts)) + allocate(cpatch%qmean_sensible_wc (ndcycle,ncohorts)) + allocate(cpatch%qmean_vapor_wc (ndcycle,ncohorts)) + allocate(cpatch%qmean_intercepted_aw(ndcycle,ncohorts)) + allocate(cpatch%qmean_wshed_wg (ndcycle,ncohorts)) end if return @@ -3752,6 +3894,7 @@ subroutine nullify_edtype(cgrid) nullify(cgrid%avg_drainage ) nullify(cgrid%avg_drainage_heat ) nullify(cgrid%avg_rshort_gnd ) + nullify(cgrid%avg_par_gnd ) nullify(cgrid%avg_rlong_gnd ) nullify(cgrid%avg_ustar ) nullify(cgrid%avg_tstar ) @@ -3881,15 +4024,13 @@ subroutine nullify_edtype(cgrid) ! Meteorologic conditions (forcing) - nullify(cgrid%avg_nir_beam ) - nullify(cgrid%avg_nir_diffuse ) - nullify(cgrid%avg_par_beam ) - nullify(cgrid%avg_par_diffuse ) nullify(cgrid%avg_atm_tmp ) nullify(cgrid%avg_atm_vpdef ) nullify(cgrid%avg_atm_shv ) nullify(cgrid%avg_rshort ) nullify(cgrid%avg_rshort_diffuse ) + nullify(cgrid%avg_par ) + nullify(cgrid%avg_par_diffuse ) nullify(cgrid%avg_rlong ) nullify(cgrid%avg_pcpg ) nullify(cgrid%avg_qpcpg ) @@ -3979,8 +4120,11 @@ subroutine nullify_edtype(cgrid) nullify(cgrid%dmean_atm_vels ) nullify(cgrid%dmean_rshort ) nullify(cgrid%dmean_rshort_diff ) + nullify(cgrid%dmean_par ) + nullify(cgrid%dmean_par_diff ) nullify(cgrid%dmean_rlong ) nullify(cgrid%dmean_rshort_gnd ) + nullify(cgrid%dmean_par_gnd ) nullify(cgrid%dmean_rlong_gnd ) nullify(cgrid%dmean_albedo ) nullify(cgrid%dmean_albedo_beam ) @@ -4062,8 +4206,11 @@ subroutine nullify_edtype(cgrid) nullify(cgrid%mmean_atm_vpdef ) nullify(cgrid%mmean_rshort ) nullify(cgrid%mmean_rshort_diff ) + nullify(cgrid%mmean_par ) + nullify(cgrid%mmean_par_diff ) nullify(cgrid%mmean_rlong ) nullify(cgrid%mmean_rshort_gnd ) + nullify(cgrid%mmean_par_gnd ) nullify(cgrid%mmean_rlong_gnd ) nullify(cgrid%mmean_albedo ) nullify(cgrid%mmean_albedo_beam ) @@ -4173,8 +4320,11 @@ subroutine nullify_edtype(cgrid) nullify(cgrid%qmean_atm_vpdef ) nullify(cgrid%qmean_rshort ) nullify(cgrid%qmean_rshort_diff ) + nullify(cgrid%qmean_par ) + nullify(cgrid%qmean_par_diff ) nullify(cgrid%qmean_rlong ) nullify(cgrid%qmean_rshort_gnd ) + nullify(cgrid%qmean_par_gnd ) nullify(cgrid%qmean_rlong_gnd ) nullify(cgrid%qmean_albedo ) nullify(cgrid%qmean_albedo_beam ) @@ -4332,6 +4482,7 @@ subroutine nullify_polygontype(cpoly) nullify(cpoly%avg_drainage ) nullify(cpoly%avg_drainage_heat ) nullify(cpoly%avg_rshort_gnd ) + nullify(cpoly%avg_par_gnd ) nullify(cpoly%avg_rlong_gnd ) nullify(cpoly%avg_ustar ) nullify(cpoly%avg_tstar ) @@ -4472,6 +4623,9 @@ subroutine nullify_sitetype(csite) nullify(csite%rshort_s) nullify(csite%rshort_s_beam) nullify(csite%rshort_s_diffuse) + nullify(csite%par_s) + nullify(csite%par_s_beam) + nullify(csite%par_s_diffuse) nullify(csite%sfcwater_tempk) nullify(csite%sfcwater_fracliq) nullify(csite%nlev_sfcwater) @@ -4556,6 +4710,9 @@ subroutine nullify_sitetype(csite) nullify(csite%rshort_g) nullify(csite%rshort_g_beam) nullify(csite%rshort_g_diffuse) + nullify(csite%par_g) + nullify(csite%par_g_beam) + nullify(csite%par_g_diffuse) nullify(csite%par_b) nullify(csite%par_b_beam) nullify(csite%par_b_diffuse) @@ -4586,12 +4743,6 @@ subroutine nullify_sitetype(csite) nullify(csite%cumlai_profile) nullify(csite%plant_ag_biomass) - nullify(csite%mean_wflux) - nullify(csite%mean_latflux) - nullify(csite%mean_hflux) - nullify(csite%mean_runoff) - nullify(csite%mean_qrunoff) - nullify(csite%htry) nullify(csite%hprev) nullify(csite%avg_rk4step) @@ -4616,6 +4767,7 @@ subroutine nullify_sitetype(csite) nullify(csite%avg_rshort_gnd ) + nullify(csite%avg_par_gnd ) nullify(csite%avg_rlong_gnd ) nullify(csite%avg_ustar ) nullify(csite%avg_tstar ) @@ -4824,6 +4976,9 @@ subroutine nullify_patchtype(cpatch) nullify(cpatch%light_level_diff) nullify(cpatch%dmean_light_level_diff) nullify(cpatch%mmean_light_level_diff) + nullify(cpatch%mean_par_l) + nullify(cpatch%mean_par_l_beam) + nullify(cpatch%mean_par_l_diff) nullify(cpatch%dmean_par_l) nullify(cpatch%dmean_par_l_beam) nullify(cpatch%dmean_par_l_diff) @@ -4900,6 +5055,60 @@ subroutine nullify_patchtype(cpatch) nullify(cpatch%qmean_leaf_resp ) nullify(cpatch%qmean_root_resp ) + + nullify(cpatch%mean_rshort_l ) + nullify(cpatch%mean_rlong_l ) + nullify(cpatch%mean_sensible_lc ) + nullify(cpatch%mean_vapor_lc ) + nullify(cpatch%mean_transp ) + nullify(cpatch%mean_intercepted_al ) + nullify(cpatch%mean_wshed_lg ) + nullify(cpatch%mean_rshort_w ) + nullify(cpatch%mean_rlong_w ) + nullify(cpatch%mean_sensible_wc ) + nullify(cpatch%mean_vapor_wc ) + nullify(cpatch%mean_intercepted_aw ) + nullify(cpatch%mean_wshed_wg ) + nullify(cpatch%dmean_rshort_l ) + nullify(cpatch%dmean_rlong_l ) + nullify(cpatch%dmean_sensible_lc ) + nullify(cpatch%dmean_vapor_lc ) + nullify(cpatch%dmean_transp ) + nullify(cpatch%dmean_intercepted_al) + nullify(cpatch%dmean_wshed_lg ) + nullify(cpatch%dmean_rshort_w ) + nullify(cpatch%dmean_rlong_w ) + nullify(cpatch%dmean_sensible_wc ) + nullify(cpatch%dmean_vapor_wc ) + nullify(cpatch%dmean_intercepted_aw) + nullify(cpatch%dmean_wshed_wg ) + nullify(cpatch%qmean_rshort_l ) + nullify(cpatch%qmean_rlong_l ) + nullify(cpatch%qmean_sensible_lc ) + nullify(cpatch%qmean_vapor_lc ) + nullify(cpatch%qmean_transp ) + nullify(cpatch%qmean_intercepted_al) + nullify(cpatch%qmean_wshed_lg ) + nullify(cpatch%qmean_rshort_w ) + nullify(cpatch%qmean_rlong_w ) + nullify(cpatch%qmean_sensible_wc ) + nullify(cpatch%qmean_vapor_wc ) + nullify(cpatch%qmean_intercepted_aw) + nullify(cpatch%qmean_wshed_wg ) + nullify(cpatch%mmean_rshort_l ) + nullify(cpatch%mmean_rlong_l ) + nullify(cpatch%mmean_sensible_lc ) + nullify(cpatch%mmean_vapor_lc ) + nullify(cpatch%mmean_transp ) + nullify(cpatch%mmean_intercepted_al) + nullify(cpatch%mmean_wshed_lg ) + nullify(cpatch%mmean_rshort_w ) + nullify(cpatch%mmean_rlong_w ) + nullify(cpatch%mmean_sensible_wc ) + nullify(cpatch%mmean_vapor_wc ) + nullify(cpatch%mmean_intercepted_aw) + nullify(cpatch%mmean_wshed_wg ) + return end subroutine nullify_patchtype !============================================================================! @@ -4993,6 +5202,7 @@ subroutine deallocate_edtype(cgrid) if(associated(cgrid%avg_drainage )) deallocate(cgrid%avg_drainage ) if(associated(cgrid%avg_drainage_heat )) deallocate(cgrid%avg_drainage_heat ) if(associated(cgrid%avg_rshort_gnd )) deallocate(cgrid%avg_rshort_gnd ) + if(associated(cgrid%avg_par_gnd )) deallocate(cgrid%avg_par_gnd ) if(associated(cgrid%avg_rlong_gnd )) deallocate(cgrid%avg_rlong_gnd ) if(associated(cgrid%avg_ustar )) deallocate(cgrid%avg_ustar ) if(associated(cgrid%avg_tstar )) deallocate(cgrid%avg_tstar ) @@ -5132,15 +5342,13 @@ subroutine deallocate_edtype(cgrid) ! ---------------------------------------------- - if(associated(cgrid%avg_nir_beam )) deallocate(cgrid%avg_nir_beam ) - if(associated(cgrid%avg_nir_diffuse )) deallocate(cgrid%avg_nir_diffuse ) - if(associated(cgrid%avg_par_beam )) deallocate(cgrid%avg_par_beam ) - if(associated(cgrid%avg_par_diffuse )) deallocate(cgrid%avg_par_diffuse ) if(associated(cgrid%avg_atm_tmp )) deallocate(cgrid%avg_atm_tmp ) if(associated(cgrid%avg_atm_vpdef )) deallocate(cgrid%avg_atm_vpdef ) if(associated(cgrid%avg_atm_shv )) deallocate(cgrid%avg_atm_shv ) if(associated(cgrid%avg_rshort )) deallocate(cgrid%avg_rshort ) if(associated(cgrid%avg_rshort_diffuse )) deallocate(cgrid%avg_rshort_diffuse ) + if(associated(cgrid%avg_par )) deallocate(cgrid%avg_par ) + if(associated(cgrid%avg_par_diffuse )) deallocate(cgrid%avg_par_diffuse ) if(associated(cgrid%avg_rlong )) deallocate(cgrid%avg_rlong ) if(associated(cgrid%avg_pcpg )) deallocate(cgrid%avg_pcpg ) if(associated(cgrid%avg_qpcpg )) deallocate(cgrid%avg_qpcpg ) @@ -5234,8 +5442,11 @@ subroutine deallocate_edtype(cgrid) if(associated(cgrid%dmean_atm_vels )) deallocate(cgrid%dmean_atm_vels ) if(associated(cgrid%dmean_rshort )) deallocate(cgrid%dmean_rshort ) if(associated(cgrid%dmean_rshort_diff )) deallocate(cgrid%dmean_rshort_diff ) + if(associated(cgrid%dmean_par )) deallocate(cgrid%dmean_par ) + if(associated(cgrid%dmean_par_diff )) deallocate(cgrid%dmean_par_diff ) if(associated(cgrid%dmean_rlong )) deallocate(cgrid%dmean_rlong ) if(associated(cgrid%dmean_rshort_gnd )) deallocate(cgrid%dmean_rshort_gnd ) + if(associated(cgrid%dmean_par_gnd )) deallocate(cgrid%dmean_par_gnd ) if(associated(cgrid%dmean_rlong_gnd )) deallocate(cgrid%dmean_rlong_gnd ) if(associated(cgrid%dmean_albedo )) deallocate(cgrid%dmean_albedo ) if(associated(cgrid%dmean_albedo_beam )) deallocate(cgrid%dmean_albedo_beam ) @@ -5318,8 +5529,11 @@ subroutine deallocate_edtype(cgrid) if(associated(cgrid%mmean_atm_vpdef )) deallocate(cgrid%mmean_atm_vpdef ) if(associated(cgrid%mmean_rshort )) deallocate(cgrid%mmean_rshort ) if(associated(cgrid%mmean_rshort_diff )) deallocate(cgrid%mmean_rshort_diff ) + if(associated(cgrid%mmean_par )) deallocate(cgrid%mmean_par ) + if(associated(cgrid%mmean_par_diff )) deallocate(cgrid%mmean_par_diff ) if(associated(cgrid%mmean_rlong )) deallocate(cgrid%mmean_rlong ) if(associated(cgrid%mmean_rshort_gnd )) deallocate(cgrid%mmean_rshort_gnd ) + if(associated(cgrid%mmean_par_gnd )) deallocate(cgrid%mmean_par_gnd ) if(associated(cgrid%mmean_rlong_gnd )) deallocate(cgrid%mmean_rlong_gnd ) if(associated(cgrid%mmean_albedo )) deallocate(cgrid%mmean_albedo ) if(associated(cgrid%mmean_albedo_beam )) deallocate(cgrid%mmean_albedo_beam ) @@ -5430,8 +5644,11 @@ subroutine deallocate_edtype(cgrid) if(associated(cgrid%qmean_atm_vpdef )) deallocate(cgrid%qmean_atm_vpdef ) if(associated(cgrid%qmean_rshort )) deallocate(cgrid%qmean_rshort ) if(associated(cgrid%qmean_rshort_diff )) deallocate(cgrid%qmean_rshort_diff ) + if(associated(cgrid%qmean_par )) deallocate(cgrid%qmean_par ) + if(associated(cgrid%qmean_par_diff )) deallocate(cgrid%qmean_par_diff ) if(associated(cgrid%qmean_rlong )) deallocate(cgrid%qmean_rlong ) if(associated(cgrid%qmean_rshort_gnd )) deallocate(cgrid%qmean_rshort_gnd ) + if(associated(cgrid%qmean_par_gnd )) deallocate(cgrid%qmean_par_gnd ) if(associated(cgrid%qmean_rlong_gnd )) deallocate(cgrid%qmean_rlong_gnd ) if(associated(cgrid%qmean_albedo )) deallocate(cgrid%qmean_albedo ) if(associated(cgrid%qmean_albedo_beam )) deallocate(cgrid%qmean_albedo_beam ) @@ -5597,6 +5814,7 @@ subroutine deallocate_polygontype(cpoly) if(associated(cpoly%avg_drainage )) deallocate(cpoly%avg_drainage ) if(associated(cpoly%avg_drainage_heat )) deallocate(cpoly%avg_drainage_heat ) if(associated(cpoly%avg_rshort_gnd )) deallocate(cpoly%avg_rshort_gnd ) + if(associated(cpoly%avg_par_gnd )) deallocate(cpoly%avg_par_gnd ) if(associated(cpoly%avg_rlong_gnd )) deallocate(cpoly%avg_rlong_gnd ) if(associated(cpoly%avg_ustar )) deallocate(cpoly%avg_ustar ) if(associated(cpoly%avg_tstar )) deallocate(cpoly%avg_tstar ) @@ -5742,6 +5960,9 @@ subroutine deallocate_sitetype(csite) if(associated(csite%rshort_s )) deallocate(csite%rshort_s ) if(associated(csite%rshort_s_beam )) deallocate(csite%rshort_s_beam ) if(associated(csite%rshort_s_diffuse )) deallocate(csite%rshort_s_diffuse ) + if(associated(csite%par_s )) deallocate(csite%par_s ) + if(associated(csite%par_s_beam )) deallocate(csite%par_s_beam ) + if(associated(csite%par_s_diffuse )) deallocate(csite%par_s_diffuse ) if(associated(csite%sfcwater_tempk )) deallocate(csite%sfcwater_tempk ) if(associated(csite%sfcwater_fracliq )) deallocate(csite%sfcwater_fracliq ) if(associated(csite%nlev_sfcwater )) deallocate(csite%nlev_sfcwater ) @@ -5827,6 +6048,9 @@ subroutine deallocate_sitetype(csite) if(associated(csite%rshort_g )) deallocate(csite%rshort_g ) if(associated(csite%rshort_g_beam )) deallocate(csite%rshort_g_beam ) if(associated(csite%rshort_g_diffuse )) deallocate(csite%rshort_g_diffuse ) + if(associated(csite%par_g )) deallocate(csite%par_g ) + if(associated(csite%par_g_beam )) deallocate(csite%par_g_beam ) + if(associated(csite%par_g_diffuse )) deallocate(csite%par_g_diffuse ) if(associated(csite%par_b )) deallocate(csite%par_b ) if(associated(csite%par_b_beam )) deallocate(csite%par_b_beam ) if(associated(csite%par_b_diffuse )) deallocate(csite%par_b_diffuse ) @@ -5857,12 +6081,6 @@ subroutine deallocate_sitetype(csite) if(associated(csite%cumlai_profile )) deallocate(csite%cumlai_profile ) if(associated(csite%plant_ag_biomass )) deallocate(csite%plant_ag_biomass ) - if(associated(csite%mean_wflux )) deallocate(csite%mean_wflux ) - if(associated(csite%mean_latflux )) deallocate(csite%mean_latflux ) - if(associated(csite%mean_hflux )) deallocate(csite%mean_hflux ) - if(associated(csite%mean_runoff )) deallocate(csite%mean_runoff ) - if(associated(csite%mean_qrunoff )) deallocate(csite%mean_qrunoff ) - if(associated(csite%htry )) deallocate(csite%htry ) if(associated(csite%hprev )) deallocate(csite%hprev ) if(associated(csite%avg_rk4step )) deallocate(csite%avg_rk4step ) @@ -5886,6 +6104,7 @@ subroutine deallocate_sitetype(csite) if(associated(csite%wpwp )) deallocate(csite%wpwp ) if(associated(csite%avg_rshort_gnd )) deallocate(csite%avg_rshort_gnd ) + if(associated(csite%avg_par_gnd )) deallocate(csite%avg_par_gnd ) if(associated(csite%avg_rlong_gnd )) deallocate(csite%avg_rlong_gnd ) if(associated(csite%avg_ustar )) deallocate(csite%avg_ustar ) if(associated(csite%avg_tstar )) deallocate(csite%avg_tstar ) @@ -6100,6 +6319,9 @@ subroutine deallocate_patchtype(cpatch) if(associated(cpatch%par_l)) deallocate(cpatch%par_l) if(associated(cpatch%par_l_beam)) deallocate(cpatch%par_l_beam) if(associated(cpatch%par_l_diffuse)) deallocate(cpatch%par_l_diffuse) + if(associated(cpatch%mean_par_l)) deallocate(cpatch%mean_par_l) + if(associated(cpatch%mean_par_l_beam)) deallocate(cpatch%mean_par_l_beam) + if(associated(cpatch%mean_par_l_diff)) deallocate(cpatch%mean_par_l_diff) if(associated(cpatch%dmean_par_l)) deallocate(cpatch%dmean_par_l) if(associated(cpatch%dmean_par_l_beam)) deallocate(cpatch%dmean_par_l_beam) if(associated(cpatch%dmean_par_l_diff)) deallocate(cpatch%dmean_par_l_diff) @@ -6160,18 +6382,70 @@ subroutine deallocate_patchtype(cpatch) if(associated(cpatch%vm_bar)) deallocate(cpatch%vm_bar) if(associated(cpatch%sla)) deallocate(cpatch%sla) - if(associated(cpatch%qmean_par_l )) deallocate(cpatch%qmean_par_l ) - if(associated(cpatch%qmean_par_l_beam )) deallocate(cpatch%qmean_par_l_beam ) - if(associated(cpatch%qmean_par_l_diff )) deallocate(cpatch%qmean_par_l_diff ) - if(associated(cpatch%qmean_fs_open )) deallocate(cpatch%qmean_fs_open ) - if(associated(cpatch%qmean_fsw )) deallocate(cpatch%qmean_fsw ) - if(associated(cpatch%qmean_fsn )) deallocate(cpatch%qmean_fsn ) - if(associated(cpatch%qmean_psi_open )) deallocate(cpatch%qmean_psi_open ) - if(associated(cpatch%qmean_psi_closed )) deallocate(cpatch%qmean_psi_closed ) - if(associated(cpatch%qmean_water_supply)) deallocate(cpatch%qmean_water_supply) - if(associated(cpatch%qmean_gpp )) deallocate(cpatch%qmean_gpp ) - if(associated(cpatch%qmean_leaf_resp )) deallocate(cpatch%qmean_leaf_resp ) - if(associated(cpatch%qmean_root_resp )) deallocate(cpatch%qmean_root_resp ) + if(associated(cpatch%qmean_par_l )) deallocate(cpatch%qmean_par_l ) + if(associated(cpatch%qmean_par_l_beam )) deallocate(cpatch%qmean_par_l_beam ) + if(associated(cpatch%qmean_par_l_diff )) deallocate(cpatch%qmean_par_l_diff ) + if(associated(cpatch%qmean_fs_open )) deallocate(cpatch%qmean_fs_open ) + if(associated(cpatch%qmean_fsw )) deallocate(cpatch%qmean_fsw ) + if(associated(cpatch%qmean_fsn )) deallocate(cpatch%qmean_fsn ) + if(associated(cpatch%qmean_psi_open )) deallocate(cpatch%qmean_psi_open ) + if(associated(cpatch%qmean_psi_closed )) deallocate(cpatch%qmean_psi_closed ) + if(associated(cpatch%qmean_water_supply )) deallocate(cpatch%qmean_water_supply ) + if(associated(cpatch%qmean_gpp )) deallocate(cpatch%qmean_gpp ) + if(associated(cpatch%qmean_leaf_resp )) deallocate(cpatch%qmean_leaf_resp ) + if(associated(cpatch%qmean_root_resp )) deallocate(cpatch%qmean_root_resp ) + if(associated(cpatch%mean_rshort_l )) deallocate(cpatch%mean_rshort_l ) + if(associated(cpatch%mean_rlong_l )) deallocate(cpatch%mean_rlong_l ) + if(associated(cpatch%mean_sensible_lc )) deallocate(cpatch%mean_sensible_lc ) + if(associated(cpatch%mean_vapor_lc )) deallocate(cpatch%mean_vapor_lc ) + if(associated(cpatch%mean_transp )) deallocate(cpatch%mean_transp ) + if(associated(cpatch%mean_intercepted_al )) deallocate(cpatch%mean_intercepted_al ) + if(associated(cpatch%mean_wshed_lg )) deallocate(cpatch%mean_wshed_lg ) + if(associated(cpatch%mean_rshort_w )) deallocate(cpatch%mean_rshort_w ) + if(associated(cpatch%mean_rlong_w )) deallocate(cpatch%mean_rlong_w ) + if(associated(cpatch%mean_sensible_wc )) deallocate(cpatch%mean_sensible_wc ) + if(associated(cpatch%mean_vapor_wc )) deallocate(cpatch%mean_vapor_wc ) + if(associated(cpatch%mean_intercepted_aw )) deallocate(cpatch%mean_intercepted_aw ) + if(associated(cpatch%mean_wshed_wg )) deallocate(cpatch%mean_wshed_wg ) + if(associated(cpatch%dmean_rshort_l )) deallocate(cpatch%dmean_rshort_l ) + if(associated(cpatch%dmean_rlong_l )) deallocate(cpatch%dmean_rlong_l ) + if(associated(cpatch%dmean_sensible_lc )) deallocate(cpatch%dmean_sensible_lc ) + if(associated(cpatch%dmean_vapor_lc )) deallocate(cpatch%dmean_vapor_lc ) + if(associated(cpatch%dmean_transp )) deallocate(cpatch%dmean_transp ) + if(associated(cpatch%dmean_intercepted_al)) deallocate(cpatch%dmean_intercepted_al) + if(associated(cpatch%dmean_wshed_lg )) deallocate(cpatch%dmean_wshed_lg ) + if(associated(cpatch%dmean_rshort_w )) deallocate(cpatch%dmean_rshort_w ) + if(associated(cpatch%dmean_rlong_w )) deallocate(cpatch%dmean_rlong_w ) + if(associated(cpatch%dmean_sensible_wc )) deallocate(cpatch%dmean_sensible_wc ) + if(associated(cpatch%dmean_vapor_wc )) deallocate(cpatch%dmean_vapor_wc ) + if(associated(cpatch%dmean_intercepted_aw)) deallocate(cpatch%dmean_intercepted_aw) + if(associated(cpatch%dmean_wshed_wg )) deallocate(cpatch%dmean_wshed_wg ) + if(associated(cpatch%qmean_rshort_l )) deallocate(cpatch%qmean_rshort_l ) + if(associated(cpatch%qmean_rlong_l )) deallocate(cpatch%qmean_rlong_l ) + if(associated(cpatch%qmean_sensible_lc )) deallocate(cpatch%qmean_sensible_lc ) + if(associated(cpatch%qmean_vapor_lc )) deallocate(cpatch%qmean_vapor_lc ) + if(associated(cpatch%qmean_transp )) deallocate(cpatch%qmean_transp ) + if(associated(cpatch%qmean_intercepted_al)) deallocate(cpatch%qmean_intercepted_al) + if(associated(cpatch%qmean_wshed_lg )) deallocate(cpatch%qmean_wshed_lg ) + if(associated(cpatch%qmean_rshort_w )) deallocate(cpatch%qmean_rshort_w ) + if(associated(cpatch%qmean_rlong_w )) deallocate(cpatch%qmean_rlong_w ) + if(associated(cpatch%qmean_sensible_wc )) deallocate(cpatch%qmean_sensible_wc ) + if(associated(cpatch%qmean_vapor_wc )) deallocate(cpatch%qmean_vapor_wc ) + if(associated(cpatch%qmean_intercepted_aw)) deallocate(cpatch%qmean_intercepted_aw) + if(associated(cpatch%qmean_wshed_wg )) deallocate(cpatch%qmean_wshed_wg ) + if(associated(cpatch%mmean_rshort_l )) deallocate(cpatch%mmean_rshort_l ) + if(associated(cpatch%mmean_rlong_l )) deallocate(cpatch%mmean_rlong_l ) + if(associated(cpatch%mmean_sensible_lc )) deallocate(cpatch%mmean_sensible_lc ) + if(associated(cpatch%mmean_vapor_lc )) deallocate(cpatch%mmean_vapor_lc ) + if(associated(cpatch%mmean_transp )) deallocate(cpatch%mmean_transp ) + if(associated(cpatch%mmean_intercepted_al)) deallocate(cpatch%mmean_intercepted_al) + if(associated(cpatch%mmean_wshed_lg )) deallocate(cpatch%mmean_wshed_lg ) + if(associated(cpatch%mmean_rshort_w )) deallocate(cpatch%mmean_rshort_w ) + if(associated(cpatch%mmean_rlong_w )) deallocate(cpatch%mmean_rlong_w ) + if(associated(cpatch%mmean_sensible_wc )) deallocate(cpatch%mmean_sensible_wc ) + if(associated(cpatch%mmean_vapor_wc )) deallocate(cpatch%mmean_vapor_wc ) + if(associated(cpatch%mmean_intercepted_aw)) deallocate(cpatch%mmean_intercepted_aw) + if(associated(cpatch%mmean_wshed_wg )) deallocate(cpatch%mmean_wshed_wg ) return end subroutine deallocate_patchtype @@ -6310,6 +6584,9 @@ subroutine copy_sitetype(isite,osite,ipaa,ipaz,opaa,opaz) osite%rshort_g(opa) = isite%rshort_g(ipa) osite%rshort_g_beam(opa) = isite%rshort_g_beam(ipa) osite%rshort_g_diffuse(opa) = isite%rshort_g_diffuse(ipa) + osite%par_g(opa) = isite%par_g(ipa) + osite%par_g_beam(opa) = isite%par_g_beam(ipa) + osite%par_g_diffuse(opa) = isite%par_g_diffuse(ipa) osite%par_b(opa) = isite%par_b(ipa) osite%par_b_beam(opa) = isite%par_b_beam(ipa) osite%par_b_diffuse(opa) = isite%par_b_diffuse(ipa) @@ -6338,12 +6615,7 @@ subroutine copy_sitetype(isite,osite,ipaa,ipaz,opaa,opaz) osite%rh(opa) = isite%rh(ipa) osite%cwd_rh(opa) = isite%cwd_rh(ipa) osite%plant_ag_biomass(opa) = isite%plant_ag_biomass(ipa) - osite%mean_wflux(opa) = isite%mean_wflux(ipa) - osite%mean_latflux(opa) = isite%mean_latflux(ipa) - osite%mean_hflux(opa) = isite%mean_hflux(ipa) osite%runoff(opa) = isite%runoff(ipa) - osite%mean_runoff(opa) = isite%mean_runoff(ipa) - osite%mean_qrunoff(opa) = isite%mean_qrunoff(ipa) osite%htry(opa) = isite%htry(ipa) osite%hprev(opa) = isite%hprev(ipa) osite%avg_rk4step(opa) = isite%avg_rk4step(ipa) @@ -6370,6 +6642,7 @@ subroutine copy_sitetype(isite,osite,ipaa,ipaz,opaa,opaz) osite%rough(opa) = isite%rough(ipa) osite%avg_rshort_gnd (opa) = isite%avg_rshort_gnd (ipa) + osite%avg_par_gnd (opa) = isite%avg_par_gnd (ipa) osite%avg_rlong_gnd (opa) = isite%avg_rlong_gnd (ipa) osite%avg_ustar (opa) = isite%avg_ustar (ipa) osite%avg_tstar (opa) = isite%avg_tstar (ipa) @@ -6430,6 +6703,9 @@ subroutine copy_sitetype(isite,osite,ipaa,ipaz,opaa,opaz) osite%rshort_s(k,opa) = isite%rshort_s(k,ipa) osite%rshort_s_beam(k,opa) = isite%rshort_s_beam(k,ipa) osite%rshort_s_diffuse(k,opa) = isite%rshort_s_diffuse(k,ipa) + osite%par_s(k,opa) = isite%par_s(k,ipa) + osite%par_s_beam(k,opa) = isite%par_s_beam(k,ipa) + osite%par_s_diffuse(k,opa) = isite%par_s_diffuse(k,ipa) osite%sfcwater_tempk(k,opa) = isite%sfcwater_tempk(k,ipa) osite%sfcwater_fracliq(k,opa) = isite%sfcwater_fracliq(k,ipa) end do @@ -6627,6 +6903,9 @@ subroutine copy_sitetype_mask(sitein,siteout,logmask,masksz,newsz) siteout%rshort_g(1:inc) = pack(sitein%rshort_g,logmask) siteout%rshort_g_beam(1:inc) = pack(sitein%rshort_g_beam,logmask) siteout%rshort_g_diffuse(1:inc) = pack(sitein%rshort_g_diffuse,logmask) + siteout%par_g(1:inc) = pack(sitein%par_g,logmask) + siteout%par_g_beam(1:inc) = pack(sitein%par_g_beam,logmask) + siteout%par_g_diffuse(1:inc) = pack(sitein%par_g_diffuse,logmask) siteout%par_b(1:inc) = pack(sitein%par_b,logmask) siteout%par_b_beam(1:inc) = pack(sitein%par_b_beam,logmask) siteout%par_b_diffuse(1:inc) = pack(sitein%par_b_diffuse,logmask) @@ -6655,12 +6934,7 @@ subroutine copy_sitetype_mask(sitein,siteout,logmask,masksz,newsz) siteout%rh(1:inc) = pack(sitein%rh,logmask) siteout%cwd_rh(1:inc) = pack(sitein%cwd_rh,logmask) siteout%plant_ag_biomass(1:inc) = pack(sitein%plant_ag_biomass,logmask) - siteout%mean_wflux(1:inc) = pack(sitein%mean_wflux,logmask) - siteout%mean_latflux(1:inc) = pack(sitein%mean_latflux,logmask) - siteout%mean_hflux(1:inc) = pack(sitein%mean_hflux,logmask) siteout%runoff(1:inc) = pack(sitein%runoff,logmask) - siteout%mean_runoff(1:inc) = pack(sitein%mean_runoff,logmask) - siteout%mean_qrunoff(1:inc) = pack(sitein%mean_qrunoff,logmask) siteout%htry(1:inc) = pack(sitein%htry,logmask) siteout%hprev(1:inc) = pack(sitein%hprev,logmask) siteout%avg_rk4step(1:inc) = pack(sitein%avg_rk4step,logmask) @@ -6687,6 +6961,7 @@ subroutine copy_sitetype_mask(sitein,siteout,logmask,masksz,newsz) siteout%rough(1:inc) = pack(sitein%rough,logmask) siteout%avg_rshort_gnd (1:inc) = pack(sitein%avg_rshort_gnd ,logmask) + siteout%avg_par_gnd (1:inc) = pack(sitein%avg_par_gnd ,logmask) siteout%avg_rlong_gnd (1:inc) = pack(sitein%avg_rlong_gnd ,logmask) siteout%avg_ustar (1:inc) = pack(sitein%avg_ustar ,logmask) siteout%avg_tstar (1:inc) = pack(sitein%avg_tstar ,logmask) @@ -6748,6 +7023,9 @@ subroutine copy_sitetype_mask(sitein,siteout,logmask,masksz,newsz) siteout%rshort_s(k,1:inc) = pack(sitein%rshort_s(k,:),logmask) siteout%rshort_s_beam(k,1:inc) = pack(sitein%rshort_s_beam(k,:),logmask) siteout%rshort_s_diffuse(k,1:inc) = pack(sitein%rshort_s_diffuse(k,:),logmask) + siteout%par_s(k,1:inc) = pack(sitein%par_s(k,:),logmask) + siteout%par_s_beam(k,1:inc) = pack(sitein%par_s_beam(k,:),logmask) + siteout%par_s_diffuse(k,1:inc) = pack(sitein%par_s_diffuse(k,:),logmask) siteout%sfcwater_tempk(k,1:inc) = pack(sitein%sfcwater_tempk(k,:),logmask) siteout%sfcwater_fracliq(k,1:inc) = pack(sitein%sfcwater_fracliq(k,:),logmask) end do @@ -6995,6 +7273,28 @@ subroutine copy_patchtype_mask(patchin,patchout,mask,masksz,newsz) patchout%vm_bar(1:inc) = pack(patchin%vm_bar,mask) patchout%sla(1:inc) = pack(patchin%sla,mask) + + patchout%mean_par_l (1:inc) = pack(patchin%mean_par_l ,mask) + patchout%mean_par_l_beam (1:inc) = pack(patchin%mean_par_l_beam ,mask) + patchout%mean_par_l_diff (1:inc) = pack(patchin%mean_par_l_diff ,mask) + patchout%mean_rshort_l (1:inc) = pack(patchin%mean_rshort_l ,mask) + patchout%mean_rlong_l (1:inc) = pack(patchin%mean_rlong_l ,mask) + patchout%mean_sensible_lc (1:inc) = pack(patchin%mean_sensible_lc ,mask) + patchout%mean_vapor_lc (1:inc) = pack(patchin%mean_vapor_lc ,mask) + patchout%mean_transp (1:inc) = pack(patchin%mean_transp ,mask) + patchout%mean_intercepted_al (1:inc) = pack(patchin%mean_intercepted_al ,mask) + patchout%mean_wshed_lg (1:inc) = pack(patchin%mean_wshed_lg ,mask) + patchout%mean_rshort_w (1:inc) = pack(patchin%mean_rshort_w ,mask) + patchout%mean_rlong_w (1:inc) = pack(patchin%mean_rlong_w ,mask) + patchout%mean_sensible_wc (1:inc) = pack(patchin%mean_sensible_wc ,mask) + patchout%mean_vapor_wc (1:inc) = pack(patchin%mean_vapor_wc ,mask) + patchout%mean_intercepted_aw (1:inc) = pack(patchin%mean_intercepted_aw ,mask) + patchout%mean_wshed_wg (1:inc) = pack(patchin%mean_wshed_wg ,mask) + + + + + do m=1,inc k=incmask(m) do i = 1,13 @@ -7032,6 +7332,19 @@ subroutine copy_patchtype_mask(patchin,patchout,mask,masksz,newsz) patchout%dmean_par_l (1:inc) = pack(patchin%dmean_par_l ,mask) patchout%dmean_par_l_beam (1:inc) = pack(patchin%dmean_par_l_beam ,mask) patchout%dmean_par_l_diff (1:inc) = pack(patchin%dmean_par_l_diff ,mask) + patchout%dmean_rshort_l (1:inc) = pack(patchin%dmean_rshort_l ,mask) + patchout%dmean_rlong_l (1:inc) = pack(patchin%dmean_rlong_l ,mask) + patchout%dmean_sensible_lc (1:inc) = pack(patchin%dmean_sensible_lc ,mask) + patchout%dmean_vapor_lc (1:inc) = pack(patchin%dmean_vapor_lc ,mask) + patchout%dmean_transp (1:inc) = pack(patchin%dmean_transp ,mask) + patchout%dmean_intercepted_al (1:inc) = pack(patchin%dmean_intercepted_al ,mask) + patchout%dmean_wshed_lg (1:inc) = pack(patchin%dmean_wshed_lg ,mask) + patchout%dmean_rshort_w (1:inc) = pack(patchin%dmean_rshort_w ,mask) + patchout%dmean_rlong_w (1:inc) = pack(patchin%dmean_rlong_w ,mask) + patchout%dmean_sensible_wc (1:inc) = pack(patchin%dmean_sensible_wc ,mask) + patchout%dmean_vapor_wc (1:inc) = pack(patchin%dmean_vapor_wc ,mask) + patchout%dmean_intercepted_aw (1:inc) = pack(patchin%dmean_intercepted_aw ,mask) + patchout%dmean_wshed_wg (1:inc) = pack(patchin%dmean_wshed_wg ,mask) end if if (imoutput > 0 .or. iqoutput > 0) then patchout%mmean_fs_open (1:inc) = pack(patchin%mmean_fs_open ,mask) @@ -7063,6 +7376,19 @@ subroutine copy_patchtype_mask(patchin,patchout,mask,masksz,newsz) patchout%mmean_par_l (1:inc) = pack(patchin%mmean_par_l ,mask) patchout%mmean_par_l_beam (1:inc) = pack(patchin%mmean_par_l_beam ,mask) patchout%mmean_par_l_diff (1:inc) = pack(patchin%mmean_par_l_diff ,mask) + patchout%mmean_rshort_l (1:inc) = pack(patchin%mmean_rshort_l ,mask) + patchout%mmean_rlong_l (1:inc) = pack(patchin%mmean_rlong_l ,mask) + patchout%mmean_sensible_lc (1:inc) = pack(patchin%mmean_sensible_lc ,mask) + patchout%mmean_vapor_lc (1:inc) = pack(patchin%mmean_vapor_lc ,mask) + patchout%mmean_transp (1:inc) = pack(patchin%mmean_transp ,mask) + patchout%mmean_intercepted_al (1:inc) = pack(patchin%mmean_intercepted_al ,mask) + patchout%mmean_wshed_lg (1:inc) = pack(patchin%mmean_wshed_lg ,mask) + patchout%mmean_rshort_w (1:inc) = pack(patchin%mmean_rshort_w ,mask) + patchout%mmean_rlong_w (1:inc) = pack(patchin%mmean_rlong_w ,mask) + patchout%mmean_sensible_wc (1:inc) = pack(patchin%mmean_sensible_wc ,mask) + patchout%mmean_vapor_wc (1:inc) = pack(patchin%mmean_vapor_wc ,mask) + patchout%mmean_intercepted_aw (1:inc) = pack(patchin%mmean_intercepted_aw ,mask) + patchout%mmean_wshed_wg (1:inc) = pack(patchin%mmean_wshed_wg ,mask) do m=1,inc k=incmask(m) @@ -7074,21 +7400,33 @@ subroutine copy_patchtype_mask(patchin,patchout,mask,masksz,newsz) if (iqoutput > 0) then do m=1,ndcycle - patchout%qmean_par_l (m,1:inc) = pack(patchin%qmean_par_l (m,:),mask) - patchout%qmean_par_l_beam (m,1:inc) = pack(patchin%qmean_par_l_beam (m,:),mask) - patchout%qmean_par_l_diff (m,1:inc) = pack(patchin%qmean_par_l_diff (m,:),mask) - patchout%qmean_fs_open (m,1:inc) = pack(patchin%qmean_fs_open (m,:),mask) - patchout%qmean_fsw (m,1:inc) = pack(patchin%qmean_fsw (m,:),mask) - patchout%qmean_fsn (m,1:inc) = pack(patchin%qmean_fsn (m,:),mask) - patchout%qmean_psi_open (m,1:inc) = pack(patchin%qmean_psi_open (m,:),mask) - patchout%qmean_psi_closed (m,1:inc) = pack(patchin%qmean_psi_closed (m,:),mask) - patchout%qmean_water_supply(m,1:inc) = pack(patchin%qmean_water_supply(m,:),mask) - patchout%qmean_gpp (m,1:inc) = pack(patchin%qmean_gpp (m,:),mask) - patchout%qmean_leaf_resp (m,1:inc) = pack(patchin%qmean_leaf_resp (m,:),mask) - patchout%qmean_root_resp (m,1:inc) = pack(patchin%qmean_root_resp (m,:),mask) + patchout%qmean_par_l (m,1:inc) = pack(patchin%qmean_par_l (m,:),mask) + patchout%qmean_par_l_beam (m,1:inc) = pack(patchin%qmean_par_l_beam (m,:),mask) + patchout%qmean_par_l_diff (m,1:inc) = pack(patchin%qmean_par_l_diff (m,:),mask) + patchout%qmean_fs_open (m,1:inc) = pack(patchin%qmean_fs_open (m,:),mask) + patchout%qmean_fsw (m,1:inc) = pack(patchin%qmean_fsw (m,:),mask) + patchout%qmean_fsn (m,1:inc) = pack(patchin%qmean_fsn (m,:),mask) + patchout%qmean_psi_open (m,1:inc) = pack(patchin%qmean_psi_open (m,:),mask) + patchout%qmean_psi_closed (m,1:inc) = pack(patchin%qmean_psi_closed (m,:),mask) + patchout%qmean_water_supply (m,1:inc) = pack(patchin%qmean_water_supply (m,:),mask) + patchout%qmean_gpp (m,1:inc) = pack(patchin%qmean_gpp (m,:),mask) + patchout%qmean_leaf_resp (m,1:inc) = pack(patchin%qmean_leaf_resp (m,:),mask) + patchout%qmean_root_resp (m,1:inc) = pack(patchin%qmean_root_resp (m,:),mask) + patchout%qmean_rshort_l (m,1:inc) = pack(patchin%qmean_rshort_l (m,:),mask) + patchout%qmean_rlong_l (m,1:inc) = pack(patchin%qmean_rlong_l (m,:),mask) + patchout%qmean_sensible_lc (m,1:inc) = pack(patchin%qmean_sensible_lc (m,:),mask) + patchout%qmean_vapor_lc (m,1:inc) = pack(patchin%qmean_vapor_lc (m,:),mask) + patchout%qmean_transp (m,1:inc) = pack(patchin%qmean_transp (m,:),mask) + patchout%qmean_intercepted_al(m,1:inc) = pack(patchin%qmean_intercepted_al(m,:),mask) + patchout%qmean_wshed_lg (m,1:inc) = pack(patchin%qmean_wshed_lg (m,:),mask) + patchout%qmean_rshort_w (m,1:inc) = pack(patchin%qmean_rshort_w (m,:),mask) + patchout%qmean_rlong_w (m,1:inc) = pack(patchin%qmean_rlong_w (m,:),mask) + patchout%qmean_sensible_wc (m,1:inc) = pack(patchin%qmean_sensible_wc (m,:),mask) + patchout%qmean_vapor_wc (m,1:inc) = pack(patchin%qmean_vapor_wc (m,:),mask) + patchout%qmean_intercepted_aw(m,1:inc) = pack(patchin%qmean_intercepted_aw(m,:),mask) + patchout%qmean_wshed_wg (m,1:inc) = pack(patchin%qmean_wshed_wg (m,:),mask) end do end if - return end subroutine copy_patchtype_mask !============================================================================! @@ -7249,6 +7587,25 @@ subroutine copy_patchtype(patchin,patchout,ipin1,ipin2,ipout1,ipout2) patchout%vm_bar(iout) = patchin%vm_bar(iin) patchout%sla(iout) = patchin%sla(iin) + patchout%mean_par_l (iout) = patchin%mean_par_l (iin) + patchout%mean_par_l_beam (iout) = patchin%mean_par_l_beam (iin) + patchout%mean_par_l_diff (iout) = patchin%mean_par_l_diff (iin) + + patchout%mean_rshort_l (iout) = patchin%mean_rshort_l (iin) + patchout%mean_rlong_l (iout) = patchin%mean_rlong_l (iin) + patchout%mean_sensible_lc (iout) = patchin%mean_sensible_lc (iin) + patchout%mean_vapor_lc (iout) = patchin%mean_vapor_lc (iin) + patchout%mean_transp (iout) = patchin%mean_transp (iin) + patchout%mean_intercepted_al (iout) = patchin%mean_intercepted_al (iin) + patchout%mean_wshed_lg (iout) = patchin%mean_wshed_lg (iin) + patchout%mean_rshort_w (iout) = patchin%mean_rshort_w (iin) + patchout%mean_rlong_w (iout) = patchin%mean_rlong_w (iin) + patchout%mean_sensible_wc (iout) = patchin%mean_sensible_wc (iin) + patchout%mean_vapor_wc (iout) = patchin%mean_vapor_wc (iin) + patchout%mean_intercepted_aw (iout) = patchin%mean_intercepted_aw (iin) + patchout%mean_wshed_wg (iout) = patchin%mean_wshed_wg (iin) + + if (imoutput > 0 .or. idoutput > 0 .or. iqoutput > 0) then patchout%dmean_fs_open (iout) = patchin%dmean_fs_open (iin) patchout%dmean_fsw (iout) = patchin%dmean_fsw (iin) @@ -7272,6 +7629,19 @@ subroutine copy_patchtype(patchin,patchout,ipin1,ipin2,ipout1,ipout2) patchout%dmean_par_l (iout) = patchin%dmean_par_l (iin) patchout%dmean_par_l_beam (iout) = patchin%dmean_par_l_beam (iin) patchout%dmean_par_l_diff (iout) = patchin%dmean_par_l_diff (iin) + patchout%dmean_rshort_l (iout) = patchin%dmean_rshort_l (iin) + patchout%dmean_rlong_l (iout) = patchin%dmean_rlong_l (iin) + patchout%dmean_sensible_lc (iout) = patchin%dmean_sensible_lc (iin) + patchout%dmean_vapor_lc (iout) = patchin%dmean_vapor_lc (iin) + patchout%dmean_transp (iout) = patchin%dmean_transp (iin) + patchout%dmean_intercepted_al (iout) = patchin%dmean_intercepted_al (iin) + patchout%dmean_wshed_lg (iout) = patchin%dmean_wshed_lg (iin) + patchout%dmean_rshort_w (iout) = patchin%dmean_rshort_w (iin) + patchout%dmean_rlong_w (iout) = patchin%dmean_rlong_w (iin) + patchout%dmean_sensible_wc (iout) = patchin%dmean_sensible_wc (iin) + patchout%dmean_vapor_wc (iout) = patchin%dmean_vapor_wc (iin) + patchout%dmean_intercepted_aw (iout) = patchin%dmean_intercepted_aw (iin) + patchout%dmean_wshed_wg (iout) = patchin%dmean_wshed_wg (iin) end if if (imoutput > 0 .or. iqoutput > 0) then patchout%mmean_fs_open (iout) = patchin%mmean_fs_open (iin) @@ -7304,21 +7674,47 @@ subroutine copy_patchtype(patchin,patchout,ipin1,ipin2,ipout1,ipout2) patchout%mmean_par_l (iout) = patchin%mmean_par_l (iin) patchout%mmean_par_l_beam (iout) = patchin%mmean_par_l_beam (iin) patchout%mmean_par_l_diff (iout) = patchin%mmean_par_l_diff (iin) + patchout%mmean_rshort_l (iout) = patchin%mmean_rshort_l (iin) + patchout%mmean_rlong_l (iout) = patchin%mmean_rlong_l (iin) + patchout%mmean_sensible_lc (iout) = patchin%mmean_sensible_lc (iin) + patchout%mmean_vapor_lc (iout) = patchin%mmean_vapor_lc (iin) + patchout%mmean_transp (iout) = patchin%mmean_transp (iin) + patchout%mmean_intercepted_al (iout) = patchin%mmean_intercepted_al (iin) + patchout%mmean_wshed_lg (iout) = patchin%mmean_wshed_lg (iin) + patchout%mmean_rshort_w (iout) = patchin%mmean_rshort_w (iin) + patchout%mmean_rlong_w (iout) = patchin%mmean_rlong_w (iin) + patchout%mmean_sensible_wc (iout) = patchin%mmean_sensible_wc (iin) + patchout%mmean_vapor_wc (iout) = patchin%mmean_vapor_wc (iin) + patchout%mmean_intercepted_aw (iout) = patchin%mmean_intercepted_aw (iin) + patchout%mmean_wshed_wg (iout) = patchin%mmean_wshed_wg (iin) end if if (iqoutput > 0) then - patchout%qmean_par_l (:,iout) = patchin%qmean_par_l (:,iin) - patchout%qmean_par_l_beam (:,iout) = patchin%qmean_par_l_beam (:,iin) - patchout%qmean_par_l_diff (:,iout) = patchin%qmean_par_l_diff (:,iin) - patchout%qmean_fs_open (:,iout) = patchin%qmean_fs_open (:,iin) - patchout%qmean_fsw (:,iout) = patchin%qmean_fsw (:,iin) - patchout%qmean_fsn (:,iout) = patchin%qmean_fsn (:,iin) - patchout%qmean_psi_open (:,iout) = patchin%qmean_psi_open (:,iin) - patchout%qmean_psi_closed (:,iout) = patchin%qmean_psi_closed (:,iin) - patchout%qmean_water_supply (:,iout) = patchin%qmean_water_supply (:,iin) - patchout%qmean_gpp (:,iout) = patchin%qmean_gpp (:,iin) - patchout%qmean_leaf_resp (:,iout) = patchin%qmean_leaf_resp (:,iin) - patchout%qmean_root_resp (:,iout) = patchin%qmean_root_resp (:,iin) + patchout%qmean_par_l (:,iout) = patchin%qmean_par_l (:,iin) + patchout%qmean_par_l_beam (:,iout) = patchin%qmean_par_l_beam (:,iin) + patchout%qmean_par_l_diff (:,iout) = patchin%qmean_par_l_diff (:,iin) + patchout%qmean_fs_open (:,iout) = patchin%qmean_fs_open (:,iin) + patchout%qmean_fsw (:,iout) = patchin%qmean_fsw (:,iin) + patchout%qmean_fsn (:,iout) = patchin%qmean_fsn (:,iin) + patchout%qmean_psi_open (:,iout) = patchin%qmean_psi_open (:,iin) + patchout%qmean_psi_closed (:,iout) = patchin%qmean_psi_closed (:,iin) + patchout%qmean_water_supply (:,iout) = patchin%qmean_water_supply (:,iin) + patchout%qmean_gpp (:,iout) = patchin%qmean_gpp (:,iin) + patchout%qmean_leaf_resp (:,iout) = patchin%qmean_leaf_resp (:,iin) + patchout%qmean_root_resp (:,iout) = patchin%qmean_root_resp (:,iin) + patchout%qmean_rshort_l (:,iout) = patchin%qmean_rshort_l (:,iin) + patchout%qmean_rlong_l (:,iout) = patchin%qmean_rlong_l (:,iin) + patchout%qmean_sensible_lc (:,iout) = patchin%qmean_sensible_lc (:,iin) + patchout%qmean_vapor_lc (:,iout) = patchin%qmean_vapor_lc (:,iin) + patchout%qmean_transp (:,iout) = patchin%qmean_transp (:,iin) + patchout%qmean_intercepted_al (:,iout) = patchin%qmean_intercepted_al (:,iin) + patchout%qmean_wshed_lg (:,iout) = patchin%qmean_wshed_lg (:,iin) + patchout%qmean_rshort_w (:,iout) = patchin%qmean_rshort_w (:,iin) + patchout%qmean_rlong_w (:,iout) = patchin%qmean_rlong_w (:,iin) + patchout%qmean_sensible_wc (:,iout) = patchin%qmean_sensible_wc (:,iin) + patchout%qmean_vapor_wc (:,iout) = patchin%qmean_vapor_wc (:,iin) + patchout%qmean_intercepted_aw (:,iout) = patchin%qmean_intercepted_aw (:,iin) + patchout%qmean_wshed_wg (:,iout) = patchin%qmean_wshed_wg (:,iin) end if iin = iin + 1 @@ -7334,6 +7730,284 @@ end subroutine copy_patchtype + !=======================================================================================! + !=======================================================================================! + ! This subroutine duplicates a cohort. Because this must be updated whenever any ! + ! variable is added/removed, we moved it to here (it used to be in fuse_fiss_utils.f90) ! + !---------------------------------------------------------------------------------------! + subroutine clone_cohort(cpatch,donc,recc) + implicit none + !------ Arguments. ------------------------------------------------------------------! + type(patchtype), target :: cpatch + integer , intent(in) :: donc + integer , intent(in) :: recc + !------------------------------------------------------------------------------------! + + cpatch%pft (recc) = cpatch%pft (donc) + cpatch%nplant (recc) = cpatch%nplant (donc) + cpatch%hite (recc) = cpatch%hite (donc) + cpatch%agb (recc) = cpatch%agb (donc) + cpatch%basarea (recc) = cpatch%basarea (donc) + cpatch%dagb_dt (recc) = cpatch%dagb_dt (donc) + cpatch%dlnagb_dt (recc) = cpatch%dlnagb_dt (donc) + cpatch%dba_dt (recc) = cpatch%dba_dt (donc) + cpatch%dlnba_dt (recc) = cpatch%dlnba_dt (donc) + cpatch%ddbh_dt (recc) = cpatch%ddbh_dt (donc) + cpatch%dlndbh_dt (recc) = cpatch%dlndbh_dt (donc) + cpatch%dbh (recc) = cpatch%dbh (donc) + cpatch%bdead (recc) = cpatch%bdead (donc) + cpatch%bleaf (recc) = cpatch%bleaf (donc) + cpatch%phenology_status (recc) = cpatch%phenology_status (donc) + cpatch%recruit_dbh (recc) = cpatch%recruit_dbh (donc) + cpatch%census_status (recc) = cpatch%census_status (donc) + cpatch%balive (recc) = cpatch%balive (donc) + cpatch%broot (recc) = cpatch%broot (donc) + cpatch%bsapwooda (recc) = cpatch%bsapwooda (donc) + cpatch%bsapwoodb (recc) = cpatch%bsapwoodb (donc) + cpatch%lai (recc) = cpatch%lai (donc) + cpatch%wai (recc) = cpatch%wai (donc) + cpatch%crown_area (recc) = cpatch%crown_area (donc) + cpatch%leaf_resolvable (recc) = cpatch%leaf_resolvable (donc) + cpatch%wood_resolvable (recc) = cpatch%wood_resolvable (donc) + cpatch%bstorage (recc) = cpatch%bstorage (donc) + cpatch%cb (:,recc) = cpatch%cb (:,donc) + cpatch%cb_lightmax (:,recc) = cpatch%cb_lightmax (:,donc) + cpatch%cb_moistmax (:,recc) = cpatch%cb_moistmax (:,donc) + cpatch%cbr_bar (recc) = cpatch%cbr_bar (donc) + cpatch%leaf_energy (recc) = cpatch%leaf_energy (donc) + cpatch%leaf_hcap (recc) = cpatch%leaf_hcap (donc) + cpatch%leaf_temp (recc) = cpatch%leaf_temp (donc) + cpatch%leaf_vpdef (recc) = cpatch%leaf_vpdef (donc) + cpatch%leaf_temp_pv (recc) = cpatch%leaf_temp_pv (donc) + cpatch%leaf_fliq (recc) = cpatch%leaf_fliq (donc) + cpatch%leaf_water (recc) = cpatch%leaf_water (donc) + cpatch%wood_energy (recc) = cpatch%wood_energy (donc) + cpatch%wood_hcap (recc) = cpatch%wood_hcap (donc) + cpatch%wood_temp (recc) = cpatch%wood_temp (donc) + cpatch%wood_temp_pv (recc) = cpatch%wood_temp_pv (donc) + cpatch%wood_fliq (recc) = cpatch%wood_fliq (donc) + cpatch%wood_water (recc) = cpatch%wood_water (donc) + cpatch%veg_wind (recc) = cpatch%veg_wind (donc) + cpatch%lsfc_shv_open (recc) = cpatch%lsfc_shv_open (donc) + cpatch%lsfc_shv_closed (recc) = cpatch%lsfc_shv_closed (donc) + cpatch%lsfc_co2_open (recc) = cpatch%lsfc_co2_open (donc) + cpatch%lsfc_co2_closed (recc) = cpatch%lsfc_co2_closed (donc) + cpatch%lint_shv (recc) = cpatch%lint_shv (donc) + cpatch%lint_co2_open (recc) = cpatch%lint_co2_open (donc) + cpatch%lint_co2_closed (recc) = cpatch%lint_co2_closed (donc) + cpatch%mean_gpp (recc) = cpatch%mean_gpp (donc) + cpatch%mean_leaf_resp (recc) = cpatch%mean_leaf_resp (donc) + cpatch%mean_root_resp (recc) = cpatch%mean_root_resp (donc) + cpatch%mean_growth_resp (recc) = cpatch%mean_growth_resp (donc) + cpatch%mean_storage_resp (recc) = cpatch%mean_storage_resp (donc) + cpatch%mean_vleaf_resp (recc) = cpatch%mean_vleaf_resp (donc) + cpatch%today_leaf_resp (recc) = cpatch%today_leaf_resp (donc) + cpatch%today_root_resp (recc) = cpatch%today_root_resp (donc) + cpatch%today_gpp (recc) = cpatch%today_gpp (donc) + cpatch%today_nppleaf (recc) = cpatch%today_nppleaf (donc) + cpatch%today_nppfroot (recc) = cpatch%today_nppfroot (donc) + cpatch%today_nppsapwood (recc) = cpatch%today_nppsapwood (donc) + cpatch%today_nppcroot (recc) = cpatch%today_nppcroot (donc) + cpatch%today_nppseeds (recc) = cpatch%today_nppseeds (donc) + cpatch%today_nppwood (recc) = cpatch%today_nppwood (donc) + cpatch%today_nppdaily (recc) = cpatch%today_nppdaily (donc) + cpatch%today_gpp_pot (recc) = cpatch%today_gpp_pot (donc) + cpatch%today_gpp_lightmax (recc) = cpatch%today_gpp_lightmax (donc) + cpatch%today_gpp_moistmax (recc) = cpatch%today_gpp_moistmax (donc) + cpatch%growth_respiration (recc) = cpatch%growth_respiration (donc) + cpatch%storage_respiration (recc) = cpatch%storage_respiration (donc) + cpatch%vleaf_respiration (recc) = cpatch%vleaf_respiration (donc) + cpatch%fsn (recc) = cpatch%fsn (donc) + cpatch%monthly_dndt (recc) = cpatch%monthly_dndt (donc) + cpatch%monthly_dlnndt (recc) = cpatch%monthly_dlnndt (donc) + cpatch%mort_rate (:,recc) = cpatch%mort_rate (:,donc) + + cpatch%Psi_open (recc) = cpatch%Psi_open (donc) + cpatch%krdepth (recc) = cpatch%krdepth (donc) + cpatch%first_census (recc) = cpatch%first_census (donc) + cpatch%new_recruit_flag (recc) = cpatch%new_recruit_flag (donc) + cpatch%light_level (recc) = cpatch%light_level (donc) + cpatch%light_level_beam (recc) = cpatch%light_level_beam (donc) + cpatch%light_level_diff (recc) = cpatch%light_level_diff (donc) + cpatch%par_l (recc) = cpatch%par_l (donc) + cpatch%par_l_beam (recc) = cpatch%par_l_beam (donc) + cpatch%par_l_diffuse (recc) = cpatch%par_l_diffuse (donc) + cpatch%rshort_l (recc) = cpatch%rshort_l (donc) + cpatch%rshort_l_beam (recc) = cpatch%rshort_l_beam (donc) + cpatch%rshort_l_diffuse (recc) = cpatch%rshort_l_diffuse (donc) + cpatch%rlong_l (recc) = cpatch%rlong_l (donc) + cpatch%rlong_l_surf (recc) = cpatch%rlong_l_surf (donc) + cpatch%rlong_l_incid (recc) = cpatch%rlong_l_incid (donc) + cpatch%rshort_w (recc) = cpatch%rshort_w (donc) + cpatch%rshort_w_beam (recc) = cpatch%rshort_w_beam (donc) + cpatch%rshort_w_diffuse (recc) = cpatch%rshort_w_diffuse (donc) + cpatch%rlong_w (recc) = cpatch%rlong_w (donc) + cpatch%rlong_w_surf (recc) = cpatch%rlong_w_surf (donc) + cpatch%rlong_w_incid (recc) = cpatch%rlong_w_incid (donc) + cpatch%leaf_gbh (recc) = cpatch%leaf_gbh (donc) + cpatch%leaf_gbw (recc) = cpatch%leaf_gbw (donc) + cpatch%wood_gbh (recc) = cpatch%wood_gbh (donc) + cpatch%wood_gbw (recc) = cpatch%wood_gbw (donc) + cpatch%A_open (recc) = cpatch%A_open (donc) + cpatch%A_closed (recc) = cpatch%A_closed (donc) + cpatch%Psi_closed (recc) = cpatch%Psi_closed (donc) + cpatch%gsw_open (recc) = cpatch%gsw_open (donc) + cpatch%gsw_closed (recc) = cpatch%gsw_closed (donc) + cpatch%fsw (recc) = cpatch%fsw (donc) + cpatch%fs_open (recc) = cpatch%fs_open (donc) + cpatch%water_supply (recc) = cpatch%water_supply (donc) + cpatch%stomatal_conductance (recc) = cpatch%stomatal_conductance (donc) + cpatch%leaf_maintenance (recc) = cpatch%leaf_maintenance (donc) + cpatch%root_maintenance (recc) = cpatch%root_maintenance (donc) + cpatch%leaf_drop (recc) = cpatch%leaf_drop (donc) + cpatch%bseeds (recc) = cpatch%bseeds (donc) + cpatch%leaf_respiration (recc) = cpatch%leaf_respiration (donc) + cpatch%root_respiration (recc) = cpatch%root_respiration (donc) + cpatch%gpp (recc) = cpatch%gpp (donc) + cpatch%paw_avg (recc) = cpatch%paw_avg (donc) + cpatch%elongf (recc) = cpatch%elongf (donc) + cpatch%turnover_amp (recc) = cpatch%turnover_amp (donc) + cpatch%llspan (recc) = cpatch%llspan (donc) + cpatch%vm_bar (recc) = cpatch%vm_bar (donc) + cpatch%sla (recc) = cpatch%sla (donc) + cpatch%mean_par_l (recc) = cpatch%mean_par_l (donc) + cpatch%mean_par_l_beam (recc) = cpatch%mean_par_l_beam (donc) + cpatch%mean_par_l_diff (recc) = cpatch%mean_par_l_diff (donc) + cpatch%mean_rshort_l (recc) = cpatch%mean_rshort_l (donc) + cpatch%mean_rlong_l (recc) = cpatch%mean_rlong_l (donc) + cpatch%mean_sensible_lc (recc) = cpatch%mean_sensible_lc (donc) + cpatch%mean_vapor_lc (recc) = cpatch%mean_vapor_lc (donc) + cpatch%mean_transp (recc) = cpatch%mean_transp (donc) + cpatch%mean_intercepted_al (recc) = cpatch%mean_intercepted_al (donc) + cpatch%mean_wshed_lg (recc) = cpatch%mean_wshed_lg (donc) + cpatch%mean_rshort_w (recc) = cpatch%mean_rshort_w (donc) + cpatch%mean_rlong_w (recc) = cpatch%mean_rlong_w (donc) + cpatch%mean_sensible_wc (recc) = cpatch%mean_sensible_wc (donc) + cpatch%mean_vapor_wc (recc) = cpatch%mean_vapor_wc (donc) + cpatch%mean_intercepted_aw (recc) = cpatch%mean_intercepted_aw (donc) + cpatch%mean_wshed_wg (recc) = cpatch%mean_wshed_wg (donc) + + + if (imoutput > 0 .or. idoutput > 0 .or. iqoutput > 0) then + cpatch%dmean_fs_open (recc) = cpatch%dmean_fs_open (donc) + cpatch%dmean_fsw (recc) = cpatch%dmean_fsw (donc) + cpatch%dmean_fsn (recc) = cpatch%dmean_fsn (donc) + cpatch%dmean_psi_open (recc) = cpatch%dmean_psi_open (donc) + cpatch%dmean_psi_closed (recc) = cpatch%dmean_psi_closed (donc) + cpatch%dmean_water_supply (recc) = cpatch%dmean_water_supply (donc) + cpatch%dmean_light_level (recc) = cpatch%dmean_light_level (donc) + cpatch%dmean_light_level_beam (recc) = cpatch%dmean_light_level_beam (donc) + cpatch%dmean_light_level_diff (recc) = cpatch%dmean_light_level_diff (donc) + cpatch%dmean_gpp (recc) = cpatch%dmean_gpp (donc) + cpatch%dmean_nppleaf (recc) = cpatch%dmean_nppleaf (donc) + cpatch%dmean_nppfroot (recc) = cpatch%dmean_nppfroot (donc) + cpatch%dmean_nppsapwood (recc) = cpatch%dmean_nppsapwood (donc) + cpatch%dmean_nppcroot (recc) = cpatch%dmean_nppcroot (donc) + cpatch%dmean_nppseeds (recc) = cpatch%dmean_nppseeds (donc) + cpatch%dmean_nppwood (recc) = cpatch%dmean_nppwood (donc) + cpatch%dmean_nppdaily (recc) = cpatch%dmean_nppdaily (donc) + cpatch%dmean_leaf_resp (recc) = cpatch%dmean_leaf_resp (donc) + cpatch%dmean_root_resp (recc) = cpatch%dmean_root_resp (donc) + cpatch%dmean_par_l (recc) = cpatch%dmean_par_l (donc) + cpatch%dmean_par_l_beam (recc) = cpatch%dmean_par_l_beam (donc) + cpatch%dmean_par_l_diff (recc) = cpatch%dmean_par_l_diff (donc) + cpatch%dmean_rshort_l (recc) = cpatch%dmean_rshort_l (donc) + cpatch%dmean_rlong_l (recc) = cpatch%dmean_rlong_l (donc) + cpatch%dmean_sensible_lc (recc) = cpatch%dmean_sensible_lc (donc) + cpatch%dmean_vapor_lc (recc) = cpatch%dmean_vapor_lc (donc) + cpatch%dmean_transp (recc) = cpatch%dmean_transp (donc) + cpatch%dmean_intercepted_al (recc) = cpatch%dmean_intercepted_al (donc) + cpatch%dmean_wshed_lg (recc) = cpatch%dmean_wshed_lg (donc) + cpatch%dmean_rshort_w (recc) = cpatch%dmean_rshort_w (donc) + cpatch%dmean_rlong_w (recc) = cpatch%dmean_rlong_w (donc) + cpatch%dmean_sensible_wc (recc) = cpatch%dmean_sensible_wc (donc) + cpatch%dmean_vapor_wc (recc) = cpatch%dmean_vapor_wc (donc) + cpatch%dmean_intercepted_aw (recc) = cpatch%dmean_intercepted_aw (donc) + cpatch%dmean_wshed_wg (recc) = cpatch%dmean_wshed_wg (donc) + end if + if (imoutput > 0 .or. iqoutput > 0) then + cpatch%mmean_fs_open (recc) = cpatch%mmean_fs_open (donc) + cpatch%mmean_fsw (recc) = cpatch%mmean_fsw (donc) + cpatch%mmean_fsn (recc) = cpatch%mmean_fsn (donc) + cpatch%mmean_psi_open (recc) = cpatch%mmean_psi_open (donc) + cpatch%mmean_psi_closed (recc) = cpatch%mmean_psi_closed (donc) + cpatch%mmean_water_supply (recc) = cpatch%mmean_water_supply (donc) + cpatch%mmean_leaf_maintenance (recc) = cpatch%mmean_leaf_maintenance (donc) + cpatch%mmean_root_maintenance (recc) = cpatch%mmean_root_maintenance (donc) + cpatch%mmean_leaf_drop (recc) = cpatch%mmean_leaf_drop (donc) + cpatch%mmean_cb (recc) = cpatch%mmean_cb (donc) + cpatch%mmean_light_level (recc) = cpatch%mmean_light_level (donc) + cpatch%mmean_light_level_beam (recc) = cpatch%mmean_light_level_beam (donc) + cpatch%mmean_light_level_diff (recc) = cpatch%mmean_light_level_diff (donc) + cpatch%mmean_gpp (recc) = cpatch%mmean_gpp (donc) + cpatch%mmean_nppleaf (recc) = cpatch%mmean_nppleaf (donc) + cpatch%mmean_nppfroot (recc) = cpatch%mmean_nppfroot (donc) + cpatch%mmean_nppsapwood (recc) = cpatch%mmean_nppsapwood (donc) + cpatch%mmean_nppcroot (recc) = cpatch%mmean_nppcroot (donc) + cpatch%mmean_nppseeds (recc) = cpatch%mmean_nppseeds (donc) + cpatch%mmean_nppwood (recc) = cpatch%mmean_nppwood (donc) + cpatch%mmean_nppdaily (recc) = cpatch%mmean_nppdaily (donc) + cpatch%mmean_leaf_resp (recc) = cpatch%mmean_leaf_resp (donc) + cpatch%mmean_root_resp (recc) = cpatch%mmean_root_resp (donc) + cpatch%mmean_growth_resp (recc) = cpatch%mmean_growth_resp (donc) + cpatch%mmean_storage_resp (recc) = cpatch%mmean_storage_resp (donc) + cpatch%mmean_vleaf_resp (recc) = cpatch%mmean_vleaf_resp (donc) + cpatch%mmean_mort_rate (:,recc) = cpatch%mmean_mort_rate (:,donc) + cpatch%mmean_par_l (recc) = cpatch%mmean_par_l (donc) + cpatch%mmean_par_l_beam (recc) = cpatch%mmean_par_l_beam (donc) + cpatch%mmean_par_l_diff (recc) = cpatch%mmean_par_l_diff (donc) + cpatch%mmean_rshort_l (recc) = cpatch%mmean_rshort_l (donc) + cpatch%mmean_rlong_l (recc) = cpatch%mmean_rlong_l (donc) + cpatch%mmean_sensible_lc (recc) = cpatch%mmean_sensible_lc (donc) + cpatch%mmean_vapor_lc (recc) = cpatch%mmean_vapor_lc (donc) + cpatch%mmean_transp (recc) = cpatch%mmean_transp (donc) + cpatch%mmean_intercepted_al (recc) = cpatch%mmean_intercepted_al (donc) + cpatch%mmean_wshed_lg (recc) = cpatch%mmean_wshed_lg (donc) + cpatch%mmean_rshort_w (recc) = cpatch%mmean_rshort_w (donc) + cpatch%mmean_rlong_w (recc) = cpatch%mmean_rlong_w (donc) + cpatch%mmean_sensible_wc (recc) = cpatch%mmean_sensible_wc (donc) + cpatch%mmean_vapor_wc (recc) = cpatch%mmean_vapor_wc (donc) + cpatch%mmean_intercepted_aw (recc) = cpatch%mmean_intercepted_aw (donc) + cpatch%mmean_wshed_wg (recc) = cpatch%mmean_wshed_wg (donc) + end if + + if (iqoutput > 0) then + cpatch%qmean_par_l (:,recc) = cpatch%qmean_par_l (:,donc) + cpatch%qmean_par_l_beam (:,recc) = cpatch%qmean_par_l_beam (:,donc) + cpatch%qmean_par_l_diff (:,recc) = cpatch%qmean_par_l_diff (:,donc) + cpatch%qmean_fs_open (:,recc) = cpatch%qmean_fs_open (:,donc) + cpatch%qmean_fsw (:,recc) = cpatch%qmean_fsw (:,donc) + cpatch%qmean_fsn (:,recc) = cpatch%qmean_fsn (:,donc) + cpatch%qmean_psi_open (:,recc) = cpatch%qmean_psi_open (:,donc) + cpatch%qmean_psi_closed (:,recc) = cpatch%qmean_psi_closed (:,donc) + cpatch%qmean_water_supply (:,recc) = cpatch%qmean_water_supply (:,donc) + cpatch%qmean_gpp (:,recc) = cpatch%qmean_gpp (:,donc) + cpatch%qmean_leaf_resp (:,recc) = cpatch%qmean_leaf_resp (:,donc) + cpatch%qmean_root_resp (:,recc) = cpatch%qmean_root_resp (:,donc) + cpatch%qmean_rshort_l (:,recc) = cpatch%qmean_rshort_l (:,donc) + cpatch%qmean_rlong_l (:,recc) = cpatch%qmean_rlong_l (:,donc) + cpatch%qmean_sensible_lc (:,recc) = cpatch%qmean_sensible_lc (:,donc) + cpatch%qmean_vapor_lc (:,recc) = cpatch%qmean_vapor_lc (:,donc) + cpatch%qmean_transp (:,recc) = cpatch%qmean_transp (:,donc) + cpatch%qmean_intercepted_al (:,recc) = cpatch%qmean_intercepted_al (:,donc) + cpatch%qmean_wshed_lg (:,recc) = cpatch%qmean_wshed_lg (:,donc) + cpatch%qmean_rshort_w (:,recc) = cpatch%qmean_rshort_w (:,donc) + cpatch%qmean_rlong_w (:,recc) = cpatch%qmean_rlong_w (:,donc) + cpatch%qmean_sensible_wc (:,recc) = cpatch%qmean_sensible_wc (:,donc) + cpatch%qmean_vapor_wc (:,recc) = cpatch%qmean_vapor_wc (:,donc) + cpatch%qmean_intercepted_aw (:,recc) = cpatch%qmean_intercepted_aw (:,donc) + cpatch%qmean_wshed_wg (:,recc) = cpatch%qmean_wshed_wg (:,donc) + end if + + return + end subroutine clone_cohort + !=======================================================================================! + !=======================================================================================! + + + + + !============================================================================! !============================================================================! @@ -8321,6 +8995,13 @@ subroutine filltab_edtype_p11(cgrid,igr,init,var_len,var_len_global,max_ptrs,nva call metadata_edio(nvar,igr,'Polygon averaged ground absorbed SW radiation','[W/m2]','ipoly') end if + if (associated(cgrid%avg_par_gnd)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%avg_par_gnd,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'AVG_PAR_GND :11:hist:anal') + call metadata_edio(nvar,igr,'Polygon averaged ground absorbed PAR','[W/m2]','ipoly') + end if + if (associated(cgrid%avg_rlong_gnd)) then nvar=nvar+1 call vtable_edio_r(npts,cgrid%avg_rlong_gnd,nvar,igr,init,cgrid%pyglob_id, & @@ -8891,35 +9572,6 @@ subroutine filltab_edtype_p11(cgrid,igr,init,var_len,var_len_global,max_ptrs,nva end if ! ---------------------------------------------- - - if (associated(cgrid%avg_nir_beam)) then - nvar=nvar+1 - call vtable_edio_r(npts,cgrid%avg_nir_beam,nvar,igr,init,cgrid%pyglob_id, & - var_len,var_len_global,max_ptrs,'AVG_NIR_BEAM:11:hist:anal') - call metadata_edio(nvar,igr,'Polygon Averaged Incident Near Infrared Beam Radiation','[W/m2]','ipoly') - end if - - if (associated(cgrid%avg_nir_diffuse)) then - nvar=nvar+1 - call vtable_edio_r(npts,cgrid%avg_nir_diffuse,nvar,igr,init,cgrid%pyglob_id, & - var_len,var_len_global,max_ptrs,'AVG_NIR_DIFFUSE :11:hist:anal') - call metadata_edio(nvar,igr,'Polygon Averaged Incident Near Infrared Diffuse Radiation','[W/m2]','ipoly') - end if - - if (associated(cgrid%avg_par_beam)) then - nvar=nvar+1 - call vtable_edio_r(npts,cgrid%avg_par_beam,nvar,igr,init,cgrid%pyglob_id, & - var_len,var_len_global,max_ptrs,'AVG_PAR_BEAM :11:hist:opti:anal') - call metadata_edio(nvar,igr,'Polygon Averaged Incident Beam Photosynthetically Active Radiation','[W/m2]','ipoly') - end if - - if (associated(cgrid%avg_par_diffuse)) then - nvar=nvar+1 - call vtable_edio_r(npts,cgrid%avg_par_diffuse,nvar,igr,init,cgrid%pyglob_id, & - var_len,var_len_global,max_ptrs,'AVG_PAR_DIFFUSE :11:hist:opti:anal') - call metadata_edio(nvar,igr,'Polygon Averaged Incident Diffuse Photosynthetically Active Radiation','[W/m2]','ipoly') - end if - if (associated(cgrid%avg_atm_tmp)) then nvar=nvar+1 call vtable_edio_r(npts,cgrid%avg_atm_tmp,nvar,igr,init,cgrid%pyglob_id, & @@ -8955,6 +9607,20 @@ subroutine filltab_edtype_p11(cgrid,igr,init,var_len,var_len_global,max_ptrs,nva call metadata_edio(nvar,igr,'Polygon Average Diffuse Incident Shortwave Radiation','[W/m2]','ipoly') end if + if (associated(cgrid%avg_par)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%avg_par,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'AVG_PAR :11:hist:anal') + call metadata_edio(nvar,igr,'Polygon Average Total Incident PAR','[W/m2]','ipoly') + end if + + if (associated(cgrid%avg_par_diffuse)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%avg_par_diffuse,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'AVG_PAR_DIFFUSE :11:hist:anal') + call metadata_edio(nvar,igr,'Polygon Average Diffuse Incident PAR','[W/m2]','ipoly') + end if + if (associated(cgrid%avg_rlong)) then nvar=nvar+1 call vtable_edio_r(npts,cgrid%avg_rlong,nvar,igr,init,cgrid%pyglob_id, & @@ -9753,6 +10419,20 @@ subroutine filltab_edtype_p11(cgrid,igr,init,var_len,var_len_global,max_ptrs,nva var_len,var_len_global,max_ptrs,'DMEAN_RSHORT_DIFF :11:hist:dail') call metadata_edio(nvar,igr,'Daily mean diffuse shortwave radiation','[w/m2]','ipoly') end if + + if(associated(cgrid%dmean_par)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%dmean_par,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'DMEAN_PAR :11:hist:dail') + call metadata_edio(nvar,igr,'Daily mean PAR','[w/m2]','ipoly') + end if + + if(associated(cgrid%dmean_par_diff)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%dmean_par_diff,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'DMEAN_PAR_DIFF :11:hist:dail') + call metadata_edio(nvar,igr,'Daily mean diffuse PAR','[w/m2]','ipoly') + end if if(associated(cgrid%dmean_rlong)) then nvar=nvar+1 @@ -9767,6 +10447,13 @@ subroutine filltab_edtype_p11(cgrid,igr,init,var_len,var_len_global,max_ptrs,nva var_len,var_len_global,max_ptrs,'DMEAN_RSHORT_GND :11:hist:dail') call metadata_edio(nvar,igr,'Daily mean ground abs. shortwave radiation','[w/m2]','ipoly') end if + + if(associated(cgrid%dmean_par_gnd)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%dmean_par_gnd,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'DMEAN_PAR_GND :11:hist:dail') + call metadata_edio(nvar,igr,'Daily mean ground abs. PAR','[w/m2]','ipoly') + end if if(associated(cgrid%dmean_rlong_gnd)) then nvar=nvar+1 @@ -10257,6 +10944,20 @@ subroutine filltab_edtype_p11(cgrid,igr,init,var_len,var_len_global,max_ptrs,nva var_len,var_len_global,max_ptrs,'MMEAN_RSHORT_DIFF :11:hist:mont:dcyc') call metadata_edio(nvar,igr,'Monthly mean incoming diffuse solar radiation','[w/m2]','ipoly') end if + + if(associated(cgrid%mmean_par)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%mmean_par,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'MMEAN_PAR :11:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Monthly mean downwelling PAR','[w/m2]','ipoly') + end if + + if(associated(cgrid%mmean_par_diff)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%mmean_par_diff,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'MMEAN_PAR_DIFF :11:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Monthly mean incoming diffuse PAR','[w/m2]','ipoly') + end if if(associated(cgrid%mmean_rlong)) then nvar=nvar+1 @@ -10272,6 +10973,13 @@ subroutine filltab_edtype_p11(cgrid,igr,init,var_len,var_len_global,max_ptrs,nva call metadata_edio(nvar,igr,'Monthly mean ground abs. solar radiation','[w/m2]','ipoly') end if + if(associated(cgrid%mmean_par_gnd)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%mmean_par_gnd,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'MMEAN_PAR_GND :11:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Monthly mean ground abs. PAR','[w/m2]','ipoly') + end if + if(associated(cgrid%mmean_rlong_gnd)) then nvar=nvar+1 call vtable_edio_r(npts,cgrid%mmean_rlong_gnd,nvar,igr,init,cgrid%pyglob_id, & @@ -11011,6 +11719,20 @@ subroutine filltab_edtype_m11(cgrid,igr,init,var_len,var_len_global,max_ptrs,nva call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if + if(associated(cgrid%qmean_par)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%qmean_par,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'QMEAN_PAR :-11:hist:dcyc') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + + if(associated(cgrid%qmean_par_diff)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%qmean_par_diff,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'QMEAN_PAR_DIFF :-11:hist:dcyc') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + if(associated(cgrid%qmean_rlong)) then nvar=nvar+1 call vtable_edio_r(npts,cgrid%qmean_rlong,nvar,igr,init,cgrid%pyglob_id, & @@ -11025,6 +11747,13 @@ subroutine filltab_edtype_m11(cgrid,igr,init,var_len,var_len_global,max_ptrs,nva call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if + if(associated(cgrid%qmean_par_gnd)) then + nvar=nvar+1 + call vtable_edio_r(npts,cgrid%qmean_par_gnd,nvar,igr,init,cgrid%pyglob_id, & + var_len,var_len_global,max_ptrs,'QMEAN_PAR_GND :-11:hist:dcyc') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + if(associated(cgrid%qmean_rlong_gnd)) then nvar=nvar+1 call vtable_edio_r(npts,cgrid%qmean_rlong_gnd,nvar,igr,init,cgrid%pyglob_id, & @@ -13299,6 +14028,27 @@ subroutine filltab_sitetype(igr,ipy,isi,init) call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if + if (associated(csite%par_g)) then + nvar=nvar+1 + call vtable_edio_r(npts,csite%par_g,nvar,igr,init,csite%paglob_id, & + var_len,var_len_global,max_ptrs,'PAR_G :31:hist') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + + if (associated(csite%par_g_beam)) then + nvar=nvar+1 + call vtable_edio_r(npts,csite%par_g_beam,nvar,igr,init,csite%paglob_id, & + var_len,var_len_global,max_ptrs,'PAR_G_BEAM :31:hist') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + + if (associated(csite%par_g_diffuse)) then + nvar=nvar+1 + call vtable_edio_r(npts,csite%par_g_diffuse,nvar,igr,init,csite%paglob_id, & + var_len,var_len_global,max_ptrs,'PAR_G_DIFFUSE :31:hist') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + if (associated(csite%par_b)) then nvar=nvar+1 call vtable_edio_r(npts,csite%par_b,nvar,igr,init,csite%paglob_id, & @@ -13495,41 +14245,6 @@ subroutine filltab_sitetype(igr,ipy,isi,init) call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if - if (associated(csite%mean_wflux)) then - nvar=nvar+1 - call vtable_edio_r(npts,csite%mean_wflux,nvar,igr,init,csite%paglob_id, & - var_len,var_len_global,max_ptrs,'MEAN_WFLUX :31:hist') - call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') - end if - - if (associated(csite%mean_latflux)) then - nvar=nvar+1 - call vtable_edio_r(npts,csite%mean_latflux,nvar,igr,init,csite%paglob_id, & - var_len,var_len_global,max_ptrs,'MEAN_LATFLUX :31:hist') - call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') - end if - - if (associated(csite%mean_hflux)) then - nvar=nvar+1 - call vtable_edio_r(npts,csite%mean_hflux,nvar,igr,init,csite%paglob_id, & - var_len,var_len_global,max_ptrs,'MEAN_HFLUX :31:hist') - call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') - end if - - if (associated(csite%mean_runoff)) then - nvar=nvar+1 - call vtable_edio_r(npts,csite%mean_runoff,nvar,igr,init,csite%paglob_id, & - var_len,var_len_global,max_ptrs,'MEAN_RUNOFF :31:hist') - call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') - end if - - if (associated(csite%mean_qrunoff)) then - nvar=nvar+1 - call vtable_edio_r(npts,csite%mean_qrunoff,nvar,igr,init,csite%paglob_id, & - var_len,var_len_global,max_ptrs,'MEAN_QRUNOFF :31:hist') - call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') - end if - if (associated(csite%htry)) then nvar=nvar+1 call vtable_edio_r(npts,csite%htry,nvar,igr,init,csite%paglob_id, & @@ -13679,6 +14394,13 @@ subroutine filltab_sitetype(igr,ipy,isi,init) call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if + if (associated(csite%avg_par_gnd)) then + nvar=nvar+1 + call vtable_edio_r(npts,csite%avg_par_gnd,nvar,igr,init,csite%paglob_id, & + var_len,var_len_global,max_ptrs,'AVG_PAR_GND_PA :31:hist') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + if (associated(csite%avg_rlong_gnd)) then nvar=nvar+1 call vtable_edio_r(npts,csite%avg_rlong_gnd,nvar,igr,init,csite%paglob_id, & @@ -13991,6 +14713,27 @@ subroutine filltab_sitetype(igr,ipy,isi,init) call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if + if (associated(csite%par_s)) then + nvar=nvar+1 + call vtable_edio_r(npts,csite%par_s,nvar,igr,init,csite%paglob_id, & + var_len,var_len_global,max_ptrs,'PAR_S :33:hist') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + + if (associated(csite%par_s_beam)) then + nvar=nvar+1 + call vtable_edio_r(npts,csite%par_s_beam,nvar,igr,init,csite%paglob_id, & + var_len,var_len_global,max_ptrs,'PAR_S_BEAM :33:hist') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + + if (associated(csite%par_s_diffuse)) then + nvar=nvar+1 + call vtable_edio_r(npts,csite%par_s_diffuse,nvar,igr,init,csite%paglob_id, & + var_len,var_len_global,max_ptrs,'PAR_S_DIFFUSE :33:hist') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + if (associated(csite%sfcwater_tempk)) then nvar=nvar+1 call vtable_edio_r(npts,csite%sfcwater_tempk,nvar,igr,init,csite%paglob_id, & @@ -14566,21 +15309,21 @@ subroutine filltab_patchtype(igr,ipy,isi,ipa,init) if (associated(cpatch%mean_gpp)) then nvar=nvar+1 call vtable_edio_r(npts,cpatch%mean_gpp,nvar,igr,init,cpatch%coglob_id, & - var_len,var_len_global,max_ptrs,'MEAN_GPP :41:hist') + var_len,var_len_global,max_ptrs,'MEAN_GPP :41:hist:anal') call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if if (associated(cpatch%mean_leaf_resp)) then nvar=nvar+1 call vtable_edio_r(npts,cpatch%mean_leaf_resp,nvar,igr,init,cpatch%coglob_id, & - var_len,var_len_global,max_ptrs,'MEAN_LEAF_RESP :41:hist') + var_len,var_len_global,max_ptrs,'MEAN_LEAF_RESP :41:hist:anal') call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if if (associated(cpatch%mean_root_resp)) then nvar=nvar+1 call vtable_edio_r(npts,cpatch%mean_root_resp,nvar,igr,init,cpatch%coglob_id, & - var_len,var_len_global,max_ptrs,'MEAN_ROOT_RESP :41:hist') + var_len,var_len_global,max_ptrs,'MEAN_ROOT_RESP :41:hist:anal') call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if @@ -14678,21 +15421,21 @@ subroutine filltab_patchtype(igr,ipy,isi,ipa,init) if (associated(cpatch%growth_respiration)) then nvar=nvar+1 call vtable_edio_r(npts,cpatch%growth_respiration,nvar,igr,init,cpatch%coglob_id, & - var_len,var_len_global,max_ptrs,'GROWTH_RESPIRATION :41:hist') + var_len,var_len_global,max_ptrs,'GROWTH_RESPIRATION :41:hist:anal') call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if if (associated(cpatch%storage_respiration)) then nvar=nvar+1 call vtable_edio_r(npts,cpatch%storage_respiration,nvar,igr,init,cpatch%coglob_id, & - var_len,var_len_global,max_ptrs,'STORAGE_RESPIRATION :41:hist') + var_len,var_len_global,max_ptrs,'STORAGE_RESPIRATION :41:hist:anal') call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if if (associated(cpatch%vleaf_respiration)) then nvar=nvar+1 call vtable_edio_r(npts,cpatch%vleaf_respiration,nvar,igr,init,cpatch%coglob_id, & - var_len,var_len_global,max_ptrs,'VLEAF_RESPIRATION :41:hist') + var_len,var_len_global,max_ptrs,'VLEAF_RESPIRATION :41:hist:anal') call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if @@ -14972,6 +15715,27 @@ subroutine filltab_patchtype(igr,ipy,isi,ipa,init) call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if + if (associated(cpatch%mean_par_l)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_par_l,nvar,igr,init,cpatch%coglob_id, & + var_len,var_len_global,max_ptrs,'MEAN_PAR_L :41:hist:anal') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + + if (associated(cpatch%mean_par_l_beam)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_par_l_beam,nvar,igr,init,cpatch%coglob_id, & + var_len,var_len_global,max_ptrs,'MEAN_PAR_L_BEAM :41:hist:anal') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + + if (associated(cpatch%mean_par_l_diff)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_par_l_diff,nvar,igr,init,cpatch%coglob_id, & + var_len,var_len_global,max_ptrs,'MEAN_PAR_L_DIFF :41:hist:anal') + call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') + end if + if (associated(cpatch%dmean_par_l)) then nvar=nvar+1 call vtable_edio_r(npts,cpatch%dmean_par_l,nvar,igr,init,cpatch%coglob_id, & @@ -15385,6 +16149,317 @@ subroutine filltab_patchtype(igr,ipy,isi,ipa,init) call metadata_edio(nvar,igr,'No metadata available','[NA]','NA') end if + if (associated(cpatch%mean_rshort_l)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_rshort_l,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_RSHORT_L :41:hist:anal') + call metadata_edio(nvar,igr,'Absorbed SW radiation (Leaf)','[W/m2]','icohort') + end if + + if (associated(cpatch%mean_rlong_l)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_rlong_l,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_RLONG_L :41:hist:anal') + call metadata_edio(nvar,igr,'Absorbed LW radiation (Leaf)','[W/m2]','icohort') + end if + + if (associated(cpatch%mean_sensible_lc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_sensible_lc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_SENSIBLE_LC :41:hist:anal') + call metadata_edio(nvar,igr,'Sensible heat flux (Leaf->CAS)','[W/m2]','icohort') + end if + + if (associated(cpatch%mean_vapor_lc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_vapor_lc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_VAPOR_LC :41:hist:anal') + call metadata_edio(nvar,igr,'Vapour flux (Leaf sfc->CAS)','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mean_transp)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_transp,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_TRANSP :41:hist:anal') + call metadata_edio(nvar,igr,'Leaf transpiration','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mean_intercepted_al)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_intercepted_al,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_INTERCEPTED_AL :41:hist:anal') + call metadata_edio(nvar,igr,'Leaf interception','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mean_wshed_lg)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_wshed_lg,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_WSHED_LG :41:hist:anal') + call metadata_edio(nvar,igr,'Leaf water shedding','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mean_rshort_w)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_rshort_w,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_RSHORT_W :41:hist:anal') + call metadata_edio(nvar,igr,'Absorbed SW radiation (Wood)','[W/m2]','icohort') + end if + + if (associated(cpatch%mean_rlong_w)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_rlong_w,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_RLONG_W :41:hist:anal') + call metadata_edio(nvar,igr,'Absorbed LW radiation (Wood)','[W/m2]','icohort') + end if + + if (associated(cpatch%mean_sensible_wc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_sensible_wc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_SENSIBLE_WC :41:hist:anal') + call metadata_edio(nvar,igr,'Sensible heat flux (Wood->CAS)','[W/m2]','icohort') + end if + + if (associated(cpatch%mean_vapor_wc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_vapor_wc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_VAPOR_WC :41:hist:anal') + call metadata_edio(nvar,igr,'Vapour flux (Wood sfc->CAS)','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mean_intercepted_aw)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_intercepted_aw,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_INTERCEPTED_AW :41:hist:anal') + call metadata_edio(nvar,igr,'Wood interception','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mean_wshed_wg)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mean_wshed_lg,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MEAN_WSHED_WG :41:hist:anal') + call metadata_edio(nvar,igr,'Wood water shedding','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%dmean_rshort_l)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_rshort_l,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_RSHORT_L :41:hist:dail') + call metadata_edio(nvar,igr,'Absorbed SW radiation (Leaf)','[W/m2]','icohort') + end if + + if (associated(cpatch%dmean_rlong_l)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_rlong_l,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_RLONG_L :41:hist:dail') + call metadata_edio(nvar,igr,'Absorbed LW radiation (Leaf)','[W/m2]','icohort') + end if + + if (associated(cpatch%dmean_sensible_lc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_sensible_lc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_SENSIBLE_LC_CO :41:hist:dail') + call metadata_edio(nvar,igr,'Sensible heat flux (Leaf->CAS)','[W/m2]','icohort') + end if + + if (associated(cpatch%dmean_vapor_lc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_vapor_lc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_VAPOR_LC_CO :41:hist:dail') + call metadata_edio(nvar,igr,'Vapour flux (Leaf sfc->CAS)','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%dmean_transp)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_transp,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_TRANSP_CO :41:hist:dail') + call metadata_edio(nvar,igr,'Leaf transpiration','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%dmean_intercepted_al)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_intercepted_al,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_INTERCEPTED_AL_CO :41:hist:dail') + call metadata_edio(nvar,igr,'Leaf interception','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%dmean_wshed_lg)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_wshed_lg,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_WSHED_LG_CO :41:hist:dail') + call metadata_edio(nvar,igr,'Leaf water shedding','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%dmean_rshort_w)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_rshort_w,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_RSHORT_W :41:hist:dail') + call metadata_edio(nvar,igr,'Absorbed SW radiation (Wood)','[W/m2]','icohort') + end if + + if (associated(cpatch%dmean_rlong_w)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_rlong_w,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_RLONG_W :41:hist:dail') + call metadata_edio(nvar,igr,'Absorbed LW radiation (Wood)','[W/m2]','icohort') + end if + + if (associated(cpatch%dmean_sensible_wc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_sensible_wc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_SENSIBLE_WC_CO :41:hist:dail') + call metadata_edio(nvar,igr,'Sensible heat flux (Wood->CAS)','[W/m2]','icohort') + end if + + if (associated(cpatch%dmean_vapor_wc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_vapor_wc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_VAPOR_WC_CO :41:hist:dail') + call metadata_edio(nvar,igr,'Vapour flux (Wood sfc->CAS)','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%dmean_intercepted_aw)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_intercepted_aw,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_INTERCEPTED_AW_CO :41:hist:dail') + call metadata_edio(nvar,igr,'Wood interception','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%dmean_wshed_wg)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%dmean_wshed_lg,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'DMEAN_WSHED_WG_CO :41:hist:dail') + call metadata_edio(nvar,igr,'Wood water shedding','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mmean_rshort_l)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_rshort_l,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_RSHORT_L :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Absorbed SW radiation (Leaf)','[W/m2]','icohort') + end if + + if (associated(cpatch%mmean_rlong_l)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_rlong_l,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_RLONG_L :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Absorbed LW radiation (Leaf)','[W/m2]','icohort') + end if + + if (associated(cpatch%mmean_sensible_lc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_sensible_lc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_SENSIBLE_LC_CO :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Sensible heat flux (Leaf->CAS)','[W/m2]','icohort') + end if + + if (associated(cpatch%mmean_vapor_lc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_vapor_lc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_VAPOR_LC_CO :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Vapour flux (Leaf sfc->CAS)','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mmean_transp)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_transp,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_TRANSP_CO :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Leaf transpiration','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mmean_intercepted_al)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_intercepted_al,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_INTERCEPTED_AL_CO :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Leaf interception','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mmean_wshed_lg)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_wshed_lg,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_WSHED_LG_CO :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Leaf water shedding','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mmean_rshort_w)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_rshort_w,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_RSHORT_W :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Absorbed SW radiation (Wood)','[W/m2]','icohort') + end if + + if (associated(cpatch%mmean_rlong_w)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_rlong_w,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_RLONG_W :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Absorbed LW radiation (Wood)','[W/m2]','icohort') + end if + + if (associated(cpatch%mmean_sensible_wc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_sensible_wc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_SENSIBLE_WC_CO :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Sensible heat flux (Wood->CAS)','[W/m2]','icohort') + end if + + if (associated(cpatch%mmean_vapor_wc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_vapor_wc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_VAPOR_WC_CO :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Vapour flux (Wood sfc->CAS)','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mmean_intercepted_aw)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_intercepted_aw,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_INTERCEPTED_AW_CO :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Wood interception','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%mmean_wshed_wg)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%mmean_wshed_lg,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'MMEAN_WSHED_WG_CO :41:hist:mont:dcyc') + call metadata_edio(nvar,igr,'Wood water shedding','[kg/m2/s]','icohort') + end if !------------------------------------------------------------------------------------! !------------------------------------------------------------------------------------! @@ -15484,6 +16559,109 @@ subroutine filltab_patchtype(igr,ipy,isi,ipa,init) call metadata_edio(nvar,igr,'No metadata avaialable','[NA]','NA') end if + if (associated(cpatch%qmean_rshort_l)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_rshort_l,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_RSHORT_L :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Absorbed SW radiation (Leaf)','[W/m2]','icohort') + end if + + if (associated(cpatch%qmean_rlong_l)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_rlong_l,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_RLONG_L :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Absorbed LW radiation (Leaf)','[W/m2]','icohort') + end if + + if (associated(cpatch%qmean_sensible_lc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_sensible_lc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_SENSIBLE_LC_CO :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Sensible heat flux (Leaf->CAS)','[W/m2]','icohort') + end if + + if (associated(cpatch%qmean_vapor_lc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_vapor_lc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_VAPOR_LC_CO :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Vapour flux (Leaf sfc->CAS)','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%qmean_transp)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_transp,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_TRANSP_CO :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Leaf transpiration','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%qmean_intercepted_al)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_intercepted_al,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_INTERCEPTED_AL_CO :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Leaf interception','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%qmean_wshed_lg)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_wshed_lg,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_WSHED_LG_CO :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Leaf water shedding','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%qmean_rshort_w)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_rshort_w,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_RSHORT_L :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Absorbed SW radiation (Wood)','[W/m2]','icohort') + end if + + if (associated(cpatch%qmean_rlong_w)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_rlong_w,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_RLONG_W :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Absorbed LW radiation (Wood)','[W/m2]','icohort') + end if + + if (associated(cpatch%qmean_sensible_wc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_sensible_wc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_SENSIBLE_WC_CO :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Sensible heat flux (Wood->CAS)','[W/m2]','icohort') + end if + + if (associated(cpatch%qmean_vapor_wc)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_vapor_wc,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_VAPOR_WC_CO :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Vapour flux (Wood sfc->CAS)','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%qmean_intercepted_aw)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_intercepted_aw,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_INTERCEPTED_AW_CO :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Wood interception','[kg/m2/s]','icohort') + end if + + if (associated(cpatch%qmean_wshed_wg)) then + nvar=nvar+1 + call vtable_edio_r(npts,cpatch%qmean_wshed_lg,nvar,igr,init & + ,cpatch%coglob_id,var_len,var_len_global,max_ptrs & + ,'QMEAN_WSHED_WG_CO :-41:hist:dcyc') + call metadata_edio(nvar,igr,'Wood water shedding','[kg/m2/s]','icohort') + end if !------------------------------------------------------------------------------------! !------------------------------------------------------------------------------------! diff --git a/ED/src/memory/rk4_coms.f90 b/ED/src/memory/rk4_coms.f90 index 61dc12fcf..c7e640c52 100644 --- a/ED/src/memory/rk4_coms.f90 +++ b/ED/src/memory/rk4_coms.f90 @@ -234,8 +234,9 @@ module rk4_coms ! Fast time flux diagnostic variables. These variables may be turned off under ! ! different conditions. ! !------------------------------------------------------------------------------------! - real(kind=8) :: avg_rshort_gnd ! Total absorbed SW radiation - real(kind=8) :: avg_rlong_gnd ! Net absorbed LW radiation + real(kind=8) :: avg_rshort_gnd ! Total absorbed SW radiation (ground) + real(kind=8) :: avg_par_gnd ! Total absorbed PAR radiation (ground) + real(kind=8) :: avg_rlong_gnd ! Net absorbed LW radiation (ground) !----- Water fluxes -----------------------------------------------------------------! real(kind=8) :: avg_vapor_lc ! Leaf -> canopy air: evap./cond. flux real(kind=8) :: avg_vapor_wc ! Wood -> canopy air: evap./cond. flux @@ -272,6 +273,16 @@ module rk4_coms real(kind=8),pointer,dimension(:) :: avg_sensible_gg ! Soil heat flux between layers real(kind=8) :: avg_drainage ! Drainage at the bottom. real(kind=8) :: avg_drainage_heat ! Drainage at the bottom. + !----- Cohort-level fluxes. ---------------------------------------------------------! + real(kind=8),pointer,dimension(:) :: cav_sensible_lc ! Sensible heat (Leaf-CAS) + real(kind=8),pointer,dimension(:) :: cav_sensible_wc ! Sensible heat (Wood-CAS) + real(kind=8),pointer,dimension(:) :: cav_vapor_lc ! Water flux (Leaf sfc - CAS) + real(kind=8),pointer,dimension(:) :: cav_vapor_wc ! Water flux (Wood sfc - CAS) + real(kind=8),pointer,dimension(:) :: cav_transp ! Transpiration (Leaf - CAS) + real(kind=8),pointer,dimension(:) :: cav_intercepted_al ! Leaf interception + real(kind=8),pointer,dimension(:) :: cav_intercepted_aw ! Wood interception + real(kind=8),pointer,dimension(:) :: cav_wshed_lg ! Leaf shedding + real(kind=8),pointer,dimension(:) :: cav_wshed_wg ! Wood shedding !----- Water deficit. ---------------------------------------------------------------! real(kind=8) :: water_deficit ! Step water deficit !------------------------------------------------------------------------------------! @@ -279,6 +290,7 @@ module rk4_coms ! only when the user is debugging. ! !------------------------------------------------------------------------------------! real(kind=8) :: flx_rshort_gnd ! Absorbed SW radiation + real(kind=8) :: flx_par_gnd ! Absorbed PAR real(kind=8) :: flx_rlong_gnd ! Absorbed LW radiation !----- Water fluxes -----------------------------------------------------------------! real(kind=8) :: flx_vapor_lc ! Leaf -> canopy air: evap./cond. flux @@ -1049,6 +1061,7 @@ subroutine zero_rk4_patch(y) y%avg_transp = 0.d0 y%avg_evap = 0.d0 y%avg_rshort_gnd = 0.d0 + y%avg_par_gnd = 0.d0 y%avg_rlong_gnd = 0.d0 y%avg_sensible_lc = 0.d0 y%avg_sensible_wc = 0.d0 @@ -1076,6 +1089,7 @@ subroutine zero_rk4_patch(y) y%flx_transp = 0.d0 y%flx_evap = 0.d0 y%flx_rshort_gnd = 0.d0 + y%flx_par_gnd = 0.d0 y%flx_rlong_gnd = 0.d0 y%flx_sensible_lc = 0.d0 y%flx_sensible_wc = 0.d0 @@ -1108,8 +1122,8 @@ subroutine zero_rk4_patch(y) if(associated(y%avg_transloss )) y%avg_transloss(:) = 0.d0 if(associated(y%avg_sensible_gg )) y%avg_sensible_gg(:) = 0.d0 - if(associated(y%flx_smoist_gg )) y%flx_smoist_gg(:) = 0.d0 - if(associated(y%flx_transloss )) y%flx_transloss(:) = 0.d0 + if(associated(y%flx_smoist_gg )) y%flx_smoist_gg (:) = 0.d0 + if(associated(y%flx_transloss )) y%flx_transloss (:) = 0.d0 if(associated(y%flx_sensible_gg )) y%flx_sensible_gg(:) = 0.d0 return @@ -1242,6 +1256,17 @@ subroutine allocate_rk4_coh(maxcohort,y) allocate(y%cfx_qtransp (maxcohort)) allocate(y%cfx_qintercepted (maxcohort)) + allocate(y%cav_sensible_lc (maxcohort)) + allocate(y%cav_sensible_wc (maxcohort)) + allocate(y%cav_vapor_lc (maxcohort)) + allocate(y%cav_vapor_wc (maxcohort)) + allocate(y%cav_transp (maxcohort)) + allocate(y%cav_intercepted_al(maxcohort)) + allocate(y%cav_intercepted_aw(maxcohort)) + allocate(y%cav_wshed_lg (maxcohort)) + allocate(y%cav_wshed_wg (maxcohort)) + + call zero_rk4_cohort(y) return @@ -1330,6 +1355,18 @@ subroutine nullify_rk4_cohort(y) nullify(y%cfx_qtransp ) nullify(y%cfx_qintercepted ) + + + nullify(y%cav_sensible_lc ) + nullify(y%cav_sensible_wc ) + nullify(y%cav_vapor_lc ) + nullify(y%cav_vapor_wc ) + nullify(y%cav_transp ) + nullify(y%cav_intercepted_al) + nullify(y%cav_intercepted_aw) + nullify(y%cav_wshed_lg ) + nullify(y%cav_wshed_wg ) + return end subroutine nullify_rk4_cohort !=======================================================================================! @@ -1416,6 +1453,17 @@ subroutine zero_rk4_cohort(y) if (associated(y%cfx_qtransp )) y%cfx_qtransp = 0.d0 if (associated(y%cfx_qintercepted )) y%cfx_qintercepted = 0.d0 + + if(associated(y%cav_sensible_lc )) y%cav_sensible_lc = 0.d0 + if(associated(y%cav_sensible_wc )) y%cav_sensible_wc = 0.d0 + if(associated(y%cav_vapor_lc )) y%cav_vapor_lc = 0.d0 + if(associated(y%cav_vapor_wc )) y%cav_vapor_wc = 0.d0 + if(associated(y%cav_transp )) y%cav_transp = 0.d0 + if(associated(y%cav_intercepted_al)) y%cav_intercepted_al = 0.d0 + if(associated(y%cav_intercepted_aw)) y%cav_intercepted_aw = 0.d0 + if(associated(y%cav_wshed_lg )) y%cav_wshed_lg = 0.d0 + if(associated(y%cav_wshed_wg )) y%cav_wshed_wg = 0.d0 + return end subroutine zero_rk4_cohort !=======================================================================================! @@ -1436,73 +1484,84 @@ subroutine deallocate_rk4_coh(y) type(rk4patchtype), target :: y !------------------------------------------------------------------------------------! - if (associated(y%leaf_energy )) deallocate(y%leaf_energy ) - if (associated(y%leaf_water )) deallocate(y%leaf_water ) - if (associated(y%leaf_temp )) deallocate(y%leaf_temp ) - if (associated(y%leaf_fliq )) deallocate(y%leaf_fliq ) - if (associated(y%leaf_hcap )) deallocate(y%leaf_hcap ) - if (associated(y%leaf_reynolds )) deallocate(y%leaf_reynolds ) - if (associated(y%leaf_grashof )) deallocate(y%leaf_grashof ) - if (associated(y%leaf_nussfree )) deallocate(y%leaf_nussfree ) - if (associated(y%leaf_nussforc )) deallocate(y%leaf_nussforc ) - if (associated(y%lint_shv )) deallocate(y%lint_shv ) - if (associated(y%leaf_resolvable )) deallocate(y%leaf_resolvable ) - if (associated(y%leaf_gbh )) deallocate(y%leaf_gbh ) - if (associated(y%leaf_gbw )) deallocate(y%leaf_gbw ) - if (associated(y%gsw_open )) deallocate(y%gsw_open ) - if (associated(y%gsw_closed )) deallocate(y%gsw_closed ) - if (associated(y%rshort_l )) deallocate(y%rshort_l ) - if (associated(y%rlong_l )) deallocate(y%rlong_l ) - if (associated(y%wood_energy )) deallocate(y%wood_energy ) - if (associated(y%wood_water )) deallocate(y%wood_water ) - if (associated(y%wood_temp )) deallocate(y%wood_temp ) - if (associated(y%wood_fliq )) deallocate(y%wood_fliq ) - if (associated(y%wood_hcap )) deallocate(y%wood_hcap ) - if (associated(y%wood_reynolds )) deallocate(y%wood_reynolds ) - if (associated(y%wood_grashof )) deallocate(y%wood_grashof ) - if (associated(y%wood_nussfree )) deallocate(y%wood_nussfree ) - if (associated(y%wood_nussforc )) deallocate(y%wood_nussforc ) - if (associated(y%wood_resolvable )) deallocate(y%wood_resolvable ) - if (associated(y%wood_gbh )) deallocate(y%wood_gbh ) - if (associated(y%wood_gbw )) deallocate(y%wood_gbw ) - if (associated(y%rshort_w )) deallocate(y%rshort_w ) - if (associated(y%rlong_w )) deallocate(y%rlong_w ) - if (associated(y%veg_energy )) deallocate(y%veg_energy ) - if (associated(y%veg_water )) deallocate(y%veg_water ) - if (associated(y%veg_hcap )) deallocate(y%veg_hcap ) - if (associated(y%veg_resolvable )) deallocate(y%veg_resolvable ) - if (associated(y%nplant )) deallocate(y%nplant ) - if (associated(y%veg_wind )) deallocate(y%veg_wind ) - if (associated(y%lai )) deallocate(y%lai ) - if (associated(y%wai )) deallocate(y%wai ) - if (associated(y%tai )) deallocate(y%tai ) - if (associated(y%crown_area )) deallocate(y%crown_area ) - if (associated(y%elongf )) deallocate(y%elongf ) - if (associated(y%psi_open )) deallocate(y%psi_open ) - if (associated(y%psi_closed )) deallocate(y%psi_closed ) - if (associated(y%fs_open )) deallocate(y%fs_open ) - if (associated(y%gpp )) deallocate(y%gpp ) - if (associated(y%leaf_resp )) deallocate(y%leaf_resp ) - if (associated(y%root_resp )) deallocate(y%root_resp ) - if (associated(y%growth_resp )) deallocate(y%growth_resp ) - if (associated(y%storage_resp )) deallocate(y%storage_resp ) - if (associated(y%vleaf_resp )) deallocate(y%vleaf_resp ) - - if (associated(y%wflxlc )) deallocate(y%wflxlc ) - if (associated(y%wflxwc )) deallocate(y%wflxwc ) - if (associated(y%wflxtr )) deallocate(y%wflxtr ) - if (associated(y%hflx_lrsti )) deallocate(y%hflx_lrsti ) - if (associated(y%hflx_wrsti )) deallocate(y%hflx_wrsti ) - - - if (associated(y%cfx_hflxlc )) deallocate(y%cfx_hflxlc ) - if (associated(y%cfx_hflxwc )) deallocate(y%cfx_hflxwc ) - if (associated(y%cfx_qwflxlc )) deallocate(y%cfx_qwflxlc ) - if (associated(y%cfx_qwflxwc )) deallocate(y%cfx_qwflxwc ) - if (associated(y%cfx_qwshed )) deallocate(y%cfx_qwshed ) - if (associated(y%cfx_qtransp )) deallocate(y%cfx_qtransp ) - if (associated(y%cfx_qintercepted )) deallocate(y%cfx_qintercepted ) - + if (associated(y%leaf_energy )) deallocate(y%leaf_energy ) + if (associated(y%leaf_water )) deallocate(y%leaf_water ) + if (associated(y%leaf_temp )) deallocate(y%leaf_temp ) + if (associated(y%leaf_fliq )) deallocate(y%leaf_fliq ) + if (associated(y%leaf_hcap )) deallocate(y%leaf_hcap ) + if (associated(y%leaf_reynolds )) deallocate(y%leaf_reynolds ) + if (associated(y%leaf_grashof )) deallocate(y%leaf_grashof ) + if (associated(y%leaf_nussfree )) deallocate(y%leaf_nussfree ) + if (associated(y%leaf_nussforc )) deallocate(y%leaf_nussforc ) + if (associated(y%lint_shv )) deallocate(y%lint_shv ) + if (associated(y%leaf_resolvable )) deallocate(y%leaf_resolvable ) + if (associated(y%leaf_gbh )) deallocate(y%leaf_gbh ) + if (associated(y%leaf_gbw )) deallocate(y%leaf_gbw ) + if (associated(y%gsw_open )) deallocate(y%gsw_open ) + if (associated(y%gsw_closed )) deallocate(y%gsw_closed ) + if (associated(y%rshort_l )) deallocate(y%rshort_l ) + if (associated(y%rlong_l )) deallocate(y%rlong_l ) + if (associated(y%wood_energy )) deallocate(y%wood_energy ) + if (associated(y%wood_water )) deallocate(y%wood_water ) + if (associated(y%wood_temp )) deallocate(y%wood_temp ) + if (associated(y%wood_fliq )) deallocate(y%wood_fliq ) + if (associated(y%wood_hcap )) deallocate(y%wood_hcap ) + if (associated(y%wood_reynolds )) deallocate(y%wood_reynolds ) + if (associated(y%wood_grashof )) deallocate(y%wood_grashof ) + if (associated(y%wood_nussfree )) deallocate(y%wood_nussfree ) + if (associated(y%wood_nussforc )) deallocate(y%wood_nussforc ) + if (associated(y%wood_resolvable )) deallocate(y%wood_resolvable ) + if (associated(y%wood_gbh )) deallocate(y%wood_gbh ) + if (associated(y%wood_gbw )) deallocate(y%wood_gbw ) + if (associated(y%rshort_w )) deallocate(y%rshort_w ) + if (associated(y%rlong_w )) deallocate(y%rlong_w ) + if (associated(y%veg_energy )) deallocate(y%veg_energy ) + if (associated(y%veg_water )) deallocate(y%veg_water ) + if (associated(y%veg_hcap )) deallocate(y%veg_hcap ) + if (associated(y%veg_resolvable )) deallocate(y%veg_resolvable ) + if (associated(y%nplant )) deallocate(y%nplant ) + if (associated(y%veg_wind )) deallocate(y%veg_wind ) + if (associated(y%lai )) deallocate(y%lai ) + if (associated(y%wai )) deallocate(y%wai ) + if (associated(y%tai )) deallocate(y%tai ) + if (associated(y%crown_area )) deallocate(y%crown_area ) + if (associated(y%elongf )) deallocate(y%elongf ) + if (associated(y%psi_open )) deallocate(y%psi_open ) + if (associated(y%psi_closed )) deallocate(y%psi_closed ) + if (associated(y%fs_open )) deallocate(y%fs_open ) + if (associated(y%gpp )) deallocate(y%gpp ) + if (associated(y%leaf_resp )) deallocate(y%leaf_resp ) + if (associated(y%root_resp )) deallocate(y%root_resp ) + if (associated(y%growth_resp )) deallocate(y%growth_resp ) + if (associated(y%storage_resp )) deallocate(y%storage_resp ) + if (associated(y%vleaf_resp )) deallocate(y%vleaf_resp ) + + if (associated(y%wflxlc )) deallocate(y%wflxlc ) + if (associated(y%wflxwc )) deallocate(y%wflxwc ) + if (associated(y%wflxtr )) deallocate(y%wflxtr ) + if (associated(y%hflx_lrsti )) deallocate(y%hflx_lrsti ) + if (associated(y%hflx_wrsti )) deallocate(y%hflx_wrsti ) + + + if (associated(y%cfx_hflxlc )) deallocate(y%cfx_hflxlc ) + if (associated(y%cfx_hflxwc )) deallocate(y%cfx_hflxwc ) + if (associated(y%cfx_qwflxlc )) deallocate(y%cfx_qwflxlc ) + if (associated(y%cfx_qwflxwc )) deallocate(y%cfx_qwflxwc ) + if (associated(y%cfx_qwshed )) deallocate(y%cfx_qwshed ) + if (associated(y%cfx_qtransp )) deallocate(y%cfx_qtransp ) + if (associated(y%cfx_qintercepted )) deallocate(y%cfx_qintercepted ) + + + + if(associated(y%cav_sensible_lc )) deallocate(y%cav_sensible_lc ) + if(associated(y%cav_sensible_wc )) deallocate(y%cav_sensible_wc ) + if(associated(y%cav_vapor_lc )) deallocate(y%cav_vapor_lc ) + if(associated(y%cav_vapor_wc )) deallocate(y%cav_vapor_wc ) + if(associated(y%cav_transp )) deallocate(y%cav_transp ) + if(associated(y%cav_intercepted_al)) deallocate(y%cav_intercepted_al) + if(associated(y%cav_intercepted_aw)) deallocate(y%cav_intercepted_aw) + if(associated(y%cav_wshed_lg )) deallocate(y%cav_wshed_lg ) + if(associated(y%cav_wshed_wg )) deallocate(y%cav_wshed_wg ) return end subroutine deallocate_rk4_coh !=======================================================================================! @@ -1536,6 +1595,7 @@ subroutine reset_rk4_fluxes(y) y%flx_transp = 0.d0 y%flx_evap = 0.d0 y%flx_rshort_gnd = 0.d0 + y%flx_par_gnd = 0.d0 y%flx_rlong_gnd = 0.d0 y%flx_sensible_lc = 0.d0 y%flx_sensible_wc = 0.d0 @@ -1601,6 +1661,7 @@ subroutine norm_rk4_fluxes(y,hdid) y%flx_transp = y%flx_transp * hdidi y%flx_evap = y%flx_evap * hdidi y%flx_rshort_gnd = y%flx_rshort_gnd * hdidi + y%flx_par_gnd = y%flx_par_gnd * hdidi y%flx_rlong_gnd = y%flx_rlong_gnd * hdidi y%flx_sensible_lc = y%flx_sensible_lc * hdidi y%flx_sensible_wc = y%flx_sensible_wc * hdidi diff --git a/ED/src/utils/fuse_fiss_utils.f90 b/ED/src/utils/fuse_fiss_utils.f90 index 8add9ce2c..7e37a47da 100644 --- a/ED/src/utils/fuse_fiss_utils.f90 +++ b/ED/src/utils/fuse_fiss_utils.f90 @@ -481,61 +481,7 @@ subroutine rescale_patches(csite) !---------------------------------------------------------------------------------! cpatch => csite%patch(ipa) - do ico = 1, cpatch%ncohorts - cpatch%nplant (ico) = cpatch%nplant (ico) * n_scale - cpatch%lai (ico) = cpatch%lai (ico) * n_scale - cpatch%wai (ico) = cpatch%wai (ico) * n_scale - cpatch%mean_gpp (ico) = cpatch%mean_gpp (ico) * n_scale - cpatch%mean_leaf_resp (ico) = cpatch%mean_leaf_resp (ico) * n_scale - cpatch%mean_root_resp (ico) = cpatch%mean_root_resp (ico) * n_scale - cpatch%mean_growth_resp (ico) = cpatch%mean_growth_resp (ico) * n_scale - cpatch%mean_storage_resp (ico) = cpatch%mean_storage_resp (ico) * n_scale - cpatch%mean_vleaf_resp (ico) = cpatch%mean_vleaf_resp (ico) * n_scale - cpatch%Psi_open (ico) = cpatch%Psi_open (ico) * n_scale - cpatch%gpp (ico) = cpatch%gpp (ico) * n_scale - cpatch%leaf_respiration (ico) = cpatch%leaf_respiration (ico) * n_scale - cpatch%root_respiration (ico) = cpatch%root_respiration (ico) * n_scale - cpatch%leaf_water (ico) = cpatch%leaf_water (ico) * n_scale - cpatch%leaf_hcap (ico) = cpatch%leaf_hcap (ico) * n_scale - cpatch%leaf_energy (ico) = cpatch%leaf_energy (ico) * n_scale - cpatch%wood_water (ico) = cpatch%wood_water (ico) * n_scale - cpatch%wood_hcap (ico) = cpatch%wood_hcap (ico) * n_scale - cpatch%wood_energy (ico) = cpatch%wood_energy (ico) * n_scale - cpatch%monthly_dndt (ico) = cpatch%monthly_dndt (ico) * n_scale - cpatch%monthly_dlnndt (ico) = cpatch%monthly_dlnndt (ico) * n_scale - cpatch%today_gpp (ico) = cpatch%today_gpp (ico) * n_scale - cpatch%today_nppleaf (ico) = cpatch%today_nppleaf (ico) * n_scale - cpatch%today_nppfroot (ico) = cpatch%today_nppfroot (ico) * n_scale - cpatch%today_nppsapwood (ico) = cpatch%today_nppsapwood (ico) * n_scale - cpatch%today_nppcroot (ico) = cpatch%today_nppcroot (ico) * n_scale - cpatch%today_nppseeds (ico) = cpatch%today_nppseeds (ico) * n_scale - cpatch%today_nppwood (ico) = cpatch%today_nppwood (ico) * n_scale - cpatch%today_nppdaily (ico) = cpatch%today_nppdaily (ico) * n_scale - cpatch%today_gpp_pot (ico) = cpatch%today_gpp_pot (ico) * n_scale - cpatch%today_gpp_lightmax (ico) = cpatch%today_gpp_lightmax(ico) * n_scale - cpatch%today_gpp_moistmax (ico) = cpatch%today_gpp_moistmax(ico) * n_scale - cpatch%today_leaf_resp (ico) = cpatch%today_leaf_resp (ico) * n_scale - cpatch%today_root_resp (ico) = cpatch%today_root_resp (ico) * n_scale - - !----- Crown area shall not exceed one. ---------------------------------------! - cpatch%crown_area (ico) = min(1.,cpatch%crown_area (ico) * n_scale) - if (idoutput > 0 .or. imoutput > 0 .or. iqoutput > 0) then - cpatch%dmean_par_l (ico) = cpatch%dmean_par_l (ico) * n_scale - cpatch%dmean_par_l_beam (ico) = cpatch%dmean_par_l_beam (ico) * n_scale - cpatch%dmean_par_l_diff (ico) = cpatch%dmean_par_l_diff (ico) * n_scale - end if - if (imoutput > 0 .or. iqoutput > 0) then - cpatch%mmean_par_l (ico) = cpatch%mmean_par_l (ico) * n_scale - cpatch%mmean_par_l_beam (ico) = cpatch%mmean_par_l_beam (ico) * n_scale - cpatch%mmean_par_l_diff (ico) = cpatch%mmean_par_l_diff (ico) * n_scale - end if - if (iqoutput > 0) then - cpatch%qmean_par_l (:,ico) = cpatch%qmean_par_l (:,ico) * n_scale - cpatch%qmean_par_l_beam(:,ico) = cpatch%qmean_par_l_beam(:,ico) * n_scale - cpatch%qmean_par_l_diff(:,ico) = cpatch%qmean_par_l_diff(:,ico) * n_scale - end if - !------------------------------------------------------------------------------! - end do + call update_cohort_extensive_props(cpatch,1,cpatch%ncohorts,n_scale) !---------------------------------------------------------------------------------! end do !------------------------------------------------------------------------------------! @@ -892,7 +838,8 @@ end subroutine fuse_cohorts !---------------------------------------------------------------------------------------! subroutine split_cohorts(cpatch, green_leaf_factor, lsl) - use ed_state_vars , only : patchtype ! ! structure + use ed_state_vars , only : patchtype & ! structure + , clone_cohort ! ! sub-routine use pft_coms , only : q & ! intent(in), lookup table , qsw & ! intent(in), lookup table , is_grass ! ! intent(in) @@ -990,60 +937,9 @@ subroutine split_cohorts(cpatch, green_leaf_factor, lsl) !---------------------------------------------------------------------------! ! Half the densities of the original cohort. All "extensive" variables ! - ! need to be rescaled. ! - ! IMPORTANT: Only cohort-level variables that have units per area ! - ! (m2_ground) should be rescaled. Variables whose units are per ! - ! plant or per leaf area (m2_leaf) should _NOT_ be included ! - ! here. ! + ! must be rescaled. ! !---------------------------------------------------------------------------! - cpatch%lai (ico) = cpatch%lai (ico) * 0.5 - cpatch%wai (ico) = cpatch%wai (ico) * 0.5 - cpatch%crown_area (ico) = cpatch%crown_area (ico) * 0.5 - cpatch%nplant (ico) = cpatch%nplant (ico) * 0.5 - cpatch%mean_gpp (ico) = cpatch%mean_gpp (ico) * 0.5 - cpatch%mean_leaf_resp (ico) = cpatch%mean_leaf_resp (ico) * 0.5 - cpatch%mean_root_resp (ico) = cpatch%mean_root_resp (ico) * 0.5 - cpatch%mean_growth_resp (ico) = cpatch%mean_growth_resp (ico) * 0.5 - cpatch%mean_storage_resp (ico) = cpatch%mean_storage_resp (ico) * 0.5 - cpatch%mean_vleaf_resp (ico) = cpatch%mean_vleaf_resp (ico) * 0.5 - cpatch%today_gpp (ico) = cpatch%today_gpp (ico) * 0.5 - cpatch%today_nppleaf (ico) = cpatch%today_nppleaf (ico) * 0.5 - cpatch%today_nppfroot (ico) = cpatch%today_nppfroot (ico) * 0.5 - cpatch%today_nppsapwood (ico) = cpatch%today_nppsapwood (ico) * 0.5 - cpatch%today_nppcroot (ico) = cpatch%today_nppcroot (ico) * 0.5 - cpatch%today_nppseeds (ico) = cpatch%today_nppseeds (ico) * 0.5 - cpatch%today_nppdaily (ico) = cpatch%today_nppdaily (ico) * 0.5 - cpatch%today_gpp_pot (ico) = cpatch%today_gpp_pot (ico) * 0.5 - cpatch%today_gpp_lightmax (ico) = cpatch%today_gpp_lightmax(ico) * 0.5 - cpatch%today_gpp_moistmax (ico) = cpatch%today_gpp_moistmax(ico) * 0.5 - cpatch%today_leaf_resp (ico) = cpatch%today_leaf_resp (ico) * 0.5 - cpatch%today_root_resp (ico) = cpatch%today_root_resp (ico) * 0.5 - cpatch%gpp (ico) = cpatch%gpp (ico) * 0.5 - cpatch%leaf_respiration (ico) = cpatch%leaf_respiration (ico) * 0.5 - cpatch%root_respiration (ico) = cpatch%root_respiration (ico) * 0.5 - cpatch%monthly_dndt (ico) = cpatch%monthly_dndt (ico) * 0.5 - cpatch%leaf_water (ico) = cpatch%leaf_water (ico) * 0.5 - cpatch%leaf_hcap (ico) = cpatch%leaf_hcap (ico) * 0.5 - cpatch%leaf_energy (ico) = cpatch%leaf_energy (ico) * 0.5 - cpatch%wood_water (ico) = cpatch%wood_water (ico) * 0.5 - cpatch%wood_hcap (ico) = cpatch%wood_hcap (ico) * 0.5 - cpatch%wood_energy (ico) = cpatch%wood_energy (ico) * 0.5 - if (idoutput > 0 .or. imoutput > 0 .or. iqoutput > 0 ) then - cpatch%dmean_par_l (ico) = cpatch%dmean_par_l (ico) * 0.5 - cpatch%dmean_par_l_beam (ico) = cpatch%dmean_par_l_beam(ico) * 0.5 - cpatch%dmean_par_l_diff (ico) = cpatch%dmean_par_l_diff(ico) * 0.5 - end if - if (imoutput > 0 .or. iqoutput > 0 ) then - cpatch%mmean_par_l (ico) = cpatch%mmean_par_l (ico) * 0.5 - cpatch%mmean_par_l_beam (ico) = cpatch%mmean_par_l_beam(ico) * 0.5 - cpatch%mmean_par_l_diff (ico) = cpatch%mmean_par_l_diff(ico) * 0.5 - end if - if (iqoutput > 0 ) then - cpatch%qmean_par_l (:,ico) = cpatch%qmean_par_l (:,ico) * 0.5 - cpatch%qmean_par_l_beam(:,ico) = cpatch%qmean_par_l_beam(:,ico) * 0.5 - cpatch%qmean_par_l_diff(:,ico) = cpatch%qmean_par_l_diff(:,ico) * 0.5 - end if - + call update_cohort_extensive_props(cpatch,ico,ico,0.5) !---------------------------------------------------------------------------! @@ -1111,242 +1007,6 @@ end subroutine split_cohorts - !=======================================================================================! - !=======================================================================================! - ! This subroutine will clone one cohort. ! - !---------------------------------------------------------------------------------------! - subroutine clone_cohort(cpatch,isc,idt) - - use ed_max_dims , only : n_mort ! ! intent(in) - use ed_state_vars, only : patchtype ! ! Structure - use ed_misc_coms , only : iqoutput & ! intent(in) - , idoutput & ! intent(in) - , imoutput ! ! intent(in) - implicit none - !----- Arguments --------------------------------------------------------------------! - type(patchtype) , target :: cpatch ! Current patch - integer , intent(in) :: isc ! Index of "Source" cohort - integer , intent(in) :: idt ! Index of "Destination" cohort" - !----- Local variables --------------------------------------------------------------! - integer :: imonth - !------------------------------------------------------------------------------------! - - cpatch%pft(idt) = cpatch%pft(isc) - cpatch%nplant(idt) = cpatch%nplant(isc) - cpatch%hite(idt) = cpatch%hite(isc) - cpatch%dbh(idt) = cpatch%dbh(isc) - cpatch%bdead(idt) = cpatch%bdead(isc) - cpatch%bleaf(idt) = cpatch%bleaf(isc) - cpatch%broot(idt) = cpatch%broot(isc) - cpatch%bsapwooda(idt) = cpatch%bsapwooda(isc) - cpatch%bsapwoodb(idt) = cpatch%bsapwoodb(isc) - cpatch%phenology_status(idt) = cpatch%phenology_status(isc) - cpatch%recruit_dbh(idt) = cpatch%recruit_dbh(isc) - cpatch%census_status(idt) = cpatch%census_status(isc) - cpatch%balive(idt) = cpatch%balive(isc) - cpatch%lai(idt) = cpatch%lai(isc) - cpatch%wai(idt) = cpatch%wai(isc) - cpatch%crown_area(idt) = cpatch%crown_area(isc) - cpatch%bstorage(idt) = cpatch%bstorage(isc) - cpatch%leaf_resolvable(idt) = cpatch%leaf_resolvable(isc) - cpatch%wood_resolvable(idt) = cpatch%wood_resolvable(isc) - - do imonth = 1,13 - cpatch%cb (imonth,idt) = cpatch%cb (imonth,isc) - cpatch%cb_lightmax(imonth,idt) = cpatch%cb_lightmax(imonth,isc) - cpatch%cb_moistmax(imonth,idt) = cpatch%cb_moistmax(imonth,isc) - enddo - - cpatch%cbr_bar(idt) = cpatch%cbr_bar(isc) - cpatch%leaf_energy(idt) = cpatch%leaf_energy(isc) - cpatch%leaf_hcap(idt) = cpatch%leaf_hcap(isc) - cpatch%leaf_temp(idt) = cpatch%leaf_temp(isc) - cpatch%leaf_temp_pv(idt) = cpatch%leaf_temp_pv(isc) - cpatch%leaf_fliq(idt) = cpatch%leaf_fliq(isc) - cpatch%leaf_water(idt) = cpatch%leaf_water(isc) - cpatch%leaf_vpdef(idt) = cpatch%leaf_vpdef(isc) - cpatch%wood_energy(idt) = cpatch%wood_energy(isc) - cpatch%wood_hcap(idt) = cpatch%wood_hcap(isc) - cpatch%wood_temp(idt) = cpatch%wood_temp(isc) - cpatch%wood_temp_pv(idt) = cpatch%wood_temp_pv(isc) - cpatch%wood_fliq(idt) = cpatch%wood_fliq(isc) - cpatch%wood_water(idt) = cpatch%wood_water(isc) - cpatch%veg_wind(idt) = cpatch%veg_wind(isc) - cpatch%lsfc_shv_open(idt) = cpatch%lsfc_shv_open(isc) - cpatch%lsfc_shv_closed(idt) = cpatch%lsfc_shv_closed(isc) - cpatch%lsfc_co2_open(idt) = cpatch%lsfc_co2_open(isc) - cpatch%lsfc_co2_closed(idt) = cpatch%lsfc_co2_closed(isc) - cpatch%lint_shv(idt) = cpatch%lint_shv(isc) - cpatch%lint_co2_open(idt) = cpatch%lint_co2_open(isc) - cpatch%lint_co2_closed(idt) = cpatch%lint_co2_closed(isc) - cpatch%mean_gpp(idt) = cpatch%mean_gpp(isc) - cpatch%mean_leaf_resp(idt) = cpatch%mean_leaf_resp(isc) - cpatch%mean_root_resp(idt) = cpatch%mean_root_resp(isc) - cpatch%mean_storage_resp(idt) = cpatch%mean_storage_resp(isc) - cpatch%mean_growth_resp(idt) = cpatch%mean_growth_resp(isc) - cpatch%mean_vleaf_resp(idt) = cpatch%mean_vleaf_resp(isc) - cpatch%today_leaf_resp(idt) = cpatch%today_leaf_resp(isc) - cpatch%today_root_resp(idt) = cpatch%today_root_resp(isc) - cpatch%today_gpp(idt) = cpatch%today_gpp(isc) - cpatch%today_nppleaf(idt) = cpatch%today_nppleaf(isc) - cpatch%today_nppfroot(idt) = cpatch%today_nppfroot(isc) - cpatch%today_nppsapwood(idt) = cpatch%today_nppsapwood(isc) - cpatch%today_nppcroot(idt) = cpatch%today_nppcroot(isc) - cpatch%today_nppseeds(idt) = cpatch%today_nppseeds(isc) - cpatch%today_nppwood(idt) = cpatch%today_nppwood(isc) - cpatch%today_nppdaily(idt) = cpatch%today_nppdaily(isc) - cpatch%today_gpp_pot(idt) = cpatch%today_gpp_pot(isc) - cpatch%today_gpp_lightmax(idt) = cpatch%today_gpp_lightmax(isc) - cpatch%today_gpp_moistmax(idt) = cpatch%today_gpp_moistmax(isc) - cpatch%growth_respiration(idt) = cpatch%growth_respiration(isc) - cpatch%storage_respiration(idt) = cpatch%storage_respiration(isc) - cpatch%vleaf_respiration(idt) = cpatch%vleaf_respiration(isc) - cpatch%fsn(idt) = cpatch%fsn(isc) - cpatch%monthly_dndt(idt) = cpatch%monthly_dndt(isc) - cpatch%monthly_dlnndt(idt) = cpatch%monthly_dlnndt(isc) - cpatch%agb(idt) = cpatch%agb(isc) - cpatch%basarea(idt) = cpatch%basarea(isc) - cpatch%dagb_dt(idt) = cpatch%dagb_dt(isc) - cpatch%dba_dt(idt) = cpatch%dba_dt(isc) - cpatch%ddbh_dt(idt) = cpatch%ddbh_dt(isc) - cpatch%dlndbh_dt(idt) = cpatch%dlndbh_dt(isc) - cpatch%Psi_open(idt) = cpatch%Psi_open(isc) - cpatch%krdepth(idt) = cpatch%krdepth(isc) - cpatch%first_census(idt) = cpatch%first_census(isc) - cpatch%new_recruit_flag(idt) = cpatch%new_recruit_flag(isc) - cpatch%par_l(idt) = cpatch%par_l(isc) - cpatch%par_l_beam(idt) = cpatch%par_l_beam(isc) - cpatch%par_l_diffuse(idt) = cpatch%par_l_diffuse(isc) - cpatch%rshort_l(idt) = cpatch%rshort_l(isc) - cpatch%rshort_l_beam(idt) = cpatch%rshort_l_beam(isc) - cpatch%rshort_l_diffuse(idt) = cpatch%rshort_l_diffuse(isc) - cpatch%rlong_l(idt) = cpatch%rlong_l(isc) - cpatch%rlong_l_surf(idt) = cpatch%rlong_l_surf(isc) - cpatch%rlong_l_incid(idt) = cpatch%rlong_l_incid(isc) - cpatch%rshort_w(idt) = cpatch%rshort_w(isc) - cpatch%rshort_w_beam(idt) = cpatch%rshort_w_beam(isc) - cpatch%rshort_w_diffuse(idt) = cpatch%rshort_w_diffuse(isc) - cpatch%rlong_w(idt) = cpatch%rlong_w(isc) - cpatch%rlong_w_surf(idt) = cpatch%rlong_w_surf(isc) - cpatch%rlong_w_incid(idt) = cpatch%rlong_w_incid(isc) - cpatch%light_level(idt) = cpatch%light_level(isc) - cpatch%light_level_beam(idt) = cpatch%light_level_beam(isc) - cpatch%light_level_diff(idt) = cpatch%light_level_diff(isc) - cpatch%leaf_gbh(idt) = cpatch%leaf_gbh(isc) - cpatch%leaf_gbw(idt) = cpatch%leaf_gbw(isc) - cpatch%wood_gbh(idt) = cpatch%wood_gbh(isc) - cpatch%wood_gbw(idt) = cpatch%wood_gbw(isc) - cpatch%A_open(idt) = cpatch%A_open(isc) - cpatch%A_closed(idt) = cpatch%A_closed(isc) - cpatch%Psi_closed(idt) = cpatch%Psi_closed(isc) - cpatch%gsw_open(idt) = cpatch%gsw_open(isc) - cpatch%gsw_closed(idt) = cpatch%gsw_closed(isc) - cpatch%fsw(idt) = cpatch%fsw(isc) - cpatch%fs_open(idt) = cpatch%fs_open(isc) - cpatch%water_supply(idt) = cpatch%water_supply(isc) - cpatch%stomatal_conductance(idt) = cpatch%stomatal_conductance(isc) - cpatch%leaf_maintenance(idt) = cpatch%leaf_maintenance(isc) - cpatch%root_maintenance(idt) = cpatch%root_maintenance(isc) - cpatch%leaf_drop(idt) = cpatch%leaf_drop(isc) - cpatch%bseeds(idt) = cpatch%bseeds(isc) - cpatch%leaf_respiration(idt) = cpatch%leaf_respiration(isc) - cpatch%root_respiration(idt) = cpatch%root_respiration(isc) - cpatch%mort_rate(:,idt) = cpatch%mort_rate(:,isc) - - cpatch%gpp(idt) = cpatch%gpp(isc) - cpatch%paw_avg(idt) = cpatch%paw_avg(isc) - cpatch%elongf(idt) = cpatch%elongf(isc) - - cpatch%turnover_amp(idt) = cpatch%turnover_amp(isc) - cpatch%llspan(idt) = cpatch%llspan(isc) - cpatch%vm_bar(idt) = cpatch%vm_bar(isc) - cpatch%sla(idt) = cpatch%sla(isc) - - - if (idoutput > 0 .or. imoutput > 0 .or. iqoutput > 0) then - cpatch%dmean_par_l (idt) = cpatch%dmean_par_l (isc) - cpatch%dmean_par_l_beam (idt) = cpatch%dmean_par_l_beam (isc) - cpatch%dmean_par_l_diff (idt) = cpatch%dmean_par_l_diff (isc) - cpatch%dmean_gpp (idt) = cpatch%dmean_gpp (isc) - cpatch%dmean_nppleaf (idt) = cpatch%dmean_nppleaf (isc) - cpatch%dmean_nppfroot (idt) = cpatch%dmean_nppfroot (isc) - cpatch%dmean_nppsapwood (idt) = cpatch%dmean_nppsapwood (isc) - cpatch%dmean_nppcroot (idt) = cpatch%dmean_nppcroot (isc) - cpatch%dmean_nppseeds (idt) = cpatch%dmean_nppseeds (isc) - cpatch%dmean_nppwood (idt) = cpatch%dmean_nppwood (isc) - cpatch%dmean_nppdaily (idt) = cpatch%dmean_nppdaily (isc) - cpatch%dmean_leaf_resp (idt) = cpatch%dmean_leaf_resp (isc) - cpatch%dmean_root_resp (idt) = cpatch%dmean_root_resp (isc) - cpatch%dmean_fs_open (idt) = cpatch%dmean_fs_open (isc) - cpatch%dmean_fsw (idt) = cpatch%dmean_fsw (isc) - cpatch%dmean_fsn (idt) = cpatch%dmean_fsn (isc) - cpatch%dmean_psi_open (idt) = cpatch%dmean_psi_open (isc) - cpatch%dmean_psi_closed (idt) = cpatch%dmean_psi_closed (isc) - cpatch%dmean_water_supply (idt) = cpatch%dmean_water_supply (isc) - cpatch%dmean_light_level (idt) = cpatch%dmean_light_level (isc) - cpatch%dmean_light_level_beam(idt) = cpatch%dmean_light_level_beam(isc) - cpatch%dmean_light_level_diff(idt) = cpatch%dmean_light_level_diff(isc) - end if - - if (imoutput > 0 .or. iqoutput > 0) then - cpatch%mmean_par_l (idt) = cpatch%mmean_par_l (isc) - cpatch%mmean_par_l_beam (idt) = cpatch%mmean_par_l_beam (isc) - cpatch%mmean_par_l_diff (idt) = cpatch%mmean_par_l_diff (isc) - cpatch%mmean_fs_open (idt) = cpatch%mmean_fs_open (isc) - cpatch%mmean_fsw (idt) = cpatch%mmean_fsw (isc) - cpatch%mmean_fsn (idt) = cpatch%mmean_fsn (isc) - cpatch%mmean_psi_open (idt) = cpatch%mmean_psi_open (isc) - cpatch%mmean_psi_closed (idt) = cpatch%mmean_psi_closed (isc) - cpatch%mmean_water_supply (idt) = cpatch%mmean_water_supply (isc) - cpatch%mmean_leaf_maintenance (idt) = cpatch%mmean_leaf_maintenance (isc) - cpatch%mmean_root_maintenance (idt) = cpatch%mmean_root_maintenance (isc) - cpatch%mmean_leaf_drop (idt) = cpatch%mmean_leaf_drop (isc) - cpatch%mmean_cb (idt) = cpatch%mmean_cb (isc) - cpatch%mmean_light_level (idt) = cpatch%mmean_light_level (isc) - cpatch%mmean_light_level_beam (idt) = cpatch%mmean_light_level_beam (isc) - cpatch%mmean_light_level_diff (idt) = cpatch%mmean_light_level_diff (isc) - cpatch%mmean_gpp (idt) = cpatch%mmean_gpp (isc) - cpatch%mmean_nppleaf (idt) = cpatch%mmean_nppleaf (isc) - cpatch%mmean_nppfroot (idt) = cpatch%mmean_nppfroot (isc) - cpatch%mmean_nppsapwood (idt) = cpatch%mmean_nppsapwood (isc) - cpatch%mmean_nppcroot (idt) = cpatch%mmean_nppcroot (isc) - cpatch%mmean_nppseeds (idt) = cpatch%mmean_nppseeds (isc) - cpatch%mmean_nppwood (idt) = cpatch%mmean_nppwood (isc) - cpatch%mmean_nppdaily (idt) = cpatch%mmean_nppdaily (isc) - - cpatch%mmean_leaf_resp (idt) = cpatch%mmean_leaf_resp (isc) - cpatch%mmean_root_resp (idt) = cpatch%mmean_root_resp (isc) - cpatch%mmean_growth_resp (idt) = cpatch%mmean_growth_resp (isc) - cpatch%mmean_storage_resp (idt) = cpatch%mmean_storage_resp (isc) - cpatch%mmean_vleaf_resp (idt) = cpatch%mmean_vleaf_resp (isc) - cpatch%mmean_mort_rate (:,idt) = cpatch%mmean_mort_rate (:,isc) - end if - - if (iqoutput > 0) then - cpatch%qmean_par_l (:,idt) = cpatch%qmean_par_l (:,isc) - cpatch%qmean_par_l_beam (:,idt) = cpatch%qmean_par_l_beam (:,isc) - cpatch%qmean_par_l_diff (:,idt) = cpatch%qmean_par_l_diff (:,isc) - cpatch%qmean_fs_open (:,idt) = cpatch%qmean_fs_open (:,isc) - cpatch%qmean_fsw (:,idt) = cpatch%qmean_fsw (:,isc) - cpatch%qmean_fsn (:,idt) = cpatch%qmean_fsn (:,isc) - cpatch%qmean_psi_open (:,idt) = cpatch%qmean_psi_open (:,isc) - cpatch%qmean_psi_closed (:,idt) = cpatch%qmean_psi_closed (:,isc) - cpatch%qmean_water_supply (:,idt) = cpatch%qmean_water_supply (:,isc) - cpatch%qmean_gpp (:,idt) = cpatch%qmean_gpp (:,isc) - cpatch%qmean_leaf_resp (:,idt) = cpatch%qmean_leaf_resp (:,isc) - cpatch%qmean_root_resp (:,idt) = cpatch%qmean_root_resp (:,isc) - end if - - return - end subroutine clone_cohort - !=======================================================================================! - !=======================================================================================! - - - - - - !=======================================================================================! !=======================================================================================! ! This subroutine will merge two cohorts into 1. The donating cohort (donc) is the ! @@ -1570,8 +1230,8 @@ subroutine fuse_2_cohorts(cpatch,donc,recc, newn,green_leaf_factor,can_prss,can_ ! Updating the mean carbon fluxes. They are fluxes per unit of area, so they ! ! should be added, not scaled. ! !------------------------------------------------------------------------------------! - cpatch%mean_gpp(recc) = cpatch%mean_gpp(recc) + cpatch%mean_gpp(donc) - + cpatch%mean_gpp(recc) = cpatch%mean_gpp(recc) & + + cpatch%mean_gpp(donc) cpatch%mean_leaf_resp(recc) = cpatch%mean_leaf_resp(recc) & + cpatch%mean_leaf_resp(donc) cpatch%mean_root_resp(recc) = cpatch%mean_root_resp(recc) & @@ -1582,8 +1242,7 @@ subroutine fuse_2_cohorts(cpatch,donc,recc, newn,green_leaf_factor,can_prss,can_ + cpatch%mean_growth_resp(donc) cpatch%mean_vleaf_resp(recc) = cpatch%mean_vleaf_resp(recc) & + cpatch%mean_vleaf_resp(donc) - - !------------------------------------------------------------------------------------! + !------------------------------------------------------------------------------------! cpatch%today_gpp (recc) = cpatch%today_gpp (recc) & + cpatch%today_gpp (donc) @@ -1627,6 +1286,45 @@ subroutine fuse_2_cohorts(cpatch,donc,recc, newn,green_leaf_factor,can_prss,can_ + !------------------------------------------------------------------------------------! + ! Mean radiation, energy, and water flux. Units are per m2 ground, so we add ! + ! them. ! + !------------------------------------------------------------------------------------! + cpatch%mean_par_l (recc) = cpatch%mean_par_l (recc) & + + cpatch%mean_par_l (donc) + cpatch%mean_par_l_beam (recc) = cpatch%mean_par_l_beam (recc) & + + cpatch%mean_par_l_beam (donc) + cpatch%mean_par_l_diff (recc) = cpatch%mean_par_l_diff (recc) & + + cpatch%mean_par_l_diff (donc) + cpatch%mean_rshort_l (recc) = cpatch%mean_rshort_l (recc) & + + cpatch%mean_rshort_l (donc) + cpatch%mean_rlong_l (recc) = cpatch%mean_rlong_l (recc) & + + cpatch%mean_rlong_l (donc) + cpatch%mean_sensible_lc (recc) = cpatch%mean_sensible_lc (recc) & + + cpatch%mean_sensible_lc (donc) + cpatch%mean_vapor_lc (recc) = cpatch%mean_vapor_lc (recc) & + + cpatch%mean_vapor_lc (donc) + cpatch%mean_transp (recc) = cpatch%mean_transp (recc) & + + cpatch%mean_transp (donc) + cpatch%mean_intercepted_al(recc) = cpatch%mean_intercepted_al(recc) & + + cpatch%mean_intercepted_al(donc) + cpatch%mean_wshed_lg (recc) = cpatch%mean_wshed_lg (recc) & + + cpatch%mean_wshed_lg (donc) + cpatch%mean_rshort_w (recc) = cpatch%mean_rshort_w (recc) & + + cpatch%mean_rshort_w (donc) + cpatch%mean_rlong_w (recc) = cpatch%mean_rlong_w (recc) & + + cpatch%mean_rlong_w (donc) + cpatch%mean_sensible_wc (recc) = cpatch%mean_sensible_wc (recc) & + + cpatch%mean_sensible_wc (donc) + cpatch%mean_vapor_wc (recc) = cpatch%mean_vapor_wc (recc) & + + cpatch%mean_vapor_wc (donc) + cpatch%mean_intercepted_aw(recc) = cpatch%mean_intercepted_aw(recc) & + + cpatch%mean_intercepted_aw(donc) + cpatch%mean_wshed_wg (recc) = cpatch%mean_wshed_wg (recc) & + + cpatch%mean_wshed_wg (donc) + !------------------------------------------------------------------------------------! + + !------------------------------------------------------------------------------------! ! Fuse the leaf surface and intenal properties. Since they are intensive ! ! properties, they are scaled by the number of plants. These numbers are diagnostic ! @@ -1905,18 +1603,45 @@ subroutine fuse_2_cohorts(cpatch,donc,recc, newn,green_leaf_factor,can_prss,can_ * cpatch%lai(donc) ) * newlaii !----- The following variables are "extensive", add them. ------------------------! - cpatch%dmean_par_l (recc) = cpatch%dmean_par_l (recc) & - + cpatch%dmean_par_l (donc) - cpatch%dmean_par_l_beam (recc) = cpatch%dmean_par_l_beam (recc) & - + cpatch%dmean_par_l_beam (donc) - cpatch%dmean_par_l_diff (recc) = cpatch%dmean_par_l_diff (recc) & - + cpatch%dmean_par_l_diff (donc) - cpatch%dmean_psi_open (recc) = cpatch%dmean_psi_open (recc) & - + cpatch%dmean_psi_open (donc) - cpatch%dmean_psi_closed (recc) = cpatch%dmean_psi_closed (recc) & - + cpatch%dmean_psi_closed (donc) - cpatch%dmean_water_supply (recc) = cpatch%dmean_water_supply(recc) & - + cpatch%dmean_water_supply(donc) + cpatch%dmean_par_l (recc) = cpatch%dmean_par_l (recc) & + + cpatch%dmean_par_l (donc) + cpatch%dmean_par_l_beam (recc) = cpatch%dmean_par_l_beam (recc) & + + cpatch%dmean_par_l_beam (donc) + cpatch%dmean_par_l_diff (recc) = cpatch%dmean_par_l_diff (recc) & + + cpatch%dmean_par_l_diff (donc) + cpatch%dmean_rshort_l (recc) = cpatch%dmean_rshort_l (recc) & + + cpatch%dmean_rshort_l (donc) + cpatch%dmean_rlong_l (recc) = cpatch%dmean_rlong_l (recc) & + + cpatch%dmean_rlong_l (donc) + cpatch%dmean_sensible_lc (recc) = cpatch%dmean_sensible_lc (recc) & + + cpatch%dmean_sensible_lc (donc) + cpatch%dmean_vapor_lc (recc) = cpatch%dmean_vapor_lc (recc) & + + cpatch%dmean_vapor_lc (donc) + cpatch%dmean_transp (recc) = cpatch%dmean_transp (recc) & + + cpatch%dmean_transp (donc) + cpatch%dmean_intercepted_al(recc) = cpatch%dmean_intercepted_al(recc) & + + cpatch%dmean_intercepted_al(donc) + cpatch%dmean_wshed_lg (recc) = cpatch%dmean_wshed_lg (recc) & + + cpatch%dmean_wshed_lg (donc) + cpatch%dmean_rshort_w (recc) = cpatch%dmean_rshort_w (recc) & + + cpatch%dmean_rshort_w (donc) + cpatch%dmean_rlong_w (recc) = cpatch%dmean_rlong_w (recc) & + + cpatch%dmean_rlong_w (donc) + cpatch%dmean_sensible_wc (recc) = cpatch%dmean_sensible_wc (recc) & + + cpatch%dmean_sensible_wc (donc) + cpatch%dmean_vapor_wc (recc) = cpatch%dmean_vapor_wc (recc) & + + cpatch%dmean_vapor_wc (donc) + cpatch%dmean_intercepted_aw(recc) = cpatch%dmean_intercepted_aw(recc) & + + cpatch%dmean_intercepted_aw(donc) + cpatch%dmean_wshed_wg (recc) = cpatch%dmean_wshed_wg (recc) & + + cpatch%dmean_wshed_wg (donc) + cpatch%dmean_psi_open (recc) = cpatch%dmean_psi_open (recc) & + + cpatch%dmean_psi_open (donc) + cpatch%dmean_psi_closed (recc) = cpatch%dmean_psi_closed (recc) & + + cpatch%dmean_psi_closed (donc) + cpatch%dmean_water_supply (recc) = cpatch%dmean_water_supply (recc) & + + cpatch%dmean_water_supply (donc) + !---------------------------------------------------------------------------------! end if if (imoutput > 0 .or. iqoutput > 0) then cpatch%mmean_light_level (recc) = ( cpatch%mmean_light_level(recc) & @@ -2036,18 +1761,45 @@ subroutine fuse_2_cohorts(cpatch,donc,recc, newn,green_leaf_factor,can_prss,can_ * cpatch%lai(donc) ) * newlaii !----- The following variables are "extensive", add them. ------------------------! - cpatch%mmean_par_l (recc) = cpatch%mmean_par_l (recc) & - + cpatch%mmean_par_l (donc) - cpatch%mmean_par_l_beam (recc) = cpatch%mmean_par_l_beam (recc) & - + cpatch%mmean_par_l_beam (donc) - cpatch%mmean_par_l_diff (recc) = cpatch%mmean_par_l_diff (recc) & - + cpatch%mmean_par_l_diff (donc) - cpatch%mmean_psi_open (recc) = cpatch%mmean_psi_open (recc) & - + cpatch%mmean_psi_open (donc) - cpatch%mmean_psi_closed (recc) = cpatch%mmean_psi_closed (recc) & - + cpatch%mmean_psi_closed (donc) - cpatch%mmean_water_supply (recc) = cpatch%mmean_water_supply(recc) & - + cpatch%mmean_water_supply(donc) + cpatch%mmean_par_l (recc) = cpatch%mmean_par_l (recc) & + + cpatch%mmean_par_l (donc) + cpatch%mmean_par_l_beam (recc) = cpatch%mmean_par_l_beam (recc) & + + cpatch%mmean_par_l_beam (donc) + cpatch%mmean_par_l_diff (recc) = cpatch%mmean_par_l_diff (recc) & + + cpatch%mmean_par_l_diff (donc) + cpatch%mmean_rshort_l (recc) = cpatch%mmean_rshort_l (recc) & + + cpatch%mmean_rshort_l (donc) + cpatch%mmean_rlong_l (recc) = cpatch%mmean_rlong_l (recc) & + + cpatch%mmean_rlong_l (donc) + cpatch%mmean_sensible_lc (recc) = cpatch%mmean_sensible_lc (recc) & + + cpatch%mmean_sensible_lc (donc) + cpatch%mmean_vapor_lc (recc) = cpatch%mmean_vapor_lc (recc) & + + cpatch%mmean_vapor_lc (donc) + cpatch%mmean_transp (recc) = cpatch%mmean_transp (recc) & + + cpatch%mmean_transp (donc) + cpatch%mmean_intercepted_al(recc) = cpatch%mmean_intercepted_al(recc) & + + cpatch%mmean_intercepted_al(donc) + cpatch%mmean_wshed_lg (recc) = cpatch%mmean_wshed_lg (recc) & + + cpatch%mmean_wshed_lg (donc) + cpatch%mmean_rshort_w (recc) = cpatch%mmean_rshort_w (recc) & + + cpatch%mmean_rshort_w (donc) + cpatch%mmean_rlong_w (recc) = cpatch%mmean_rlong_w (recc) & + + cpatch%mmean_rlong_w (donc) + cpatch%mmean_sensible_wc (recc) = cpatch%mmean_sensible_wc (recc) & + + cpatch%mmean_sensible_wc (donc) + cpatch%mmean_vapor_wc (recc) = cpatch%mmean_vapor_wc (recc) & + + cpatch%mmean_vapor_wc (donc) + cpatch%mmean_intercepted_aw(recc) = cpatch%mmean_intercepted_aw(recc) & + + cpatch%mmean_intercepted_aw(donc) + cpatch%mmean_wshed_wg (recc) = cpatch%mmean_wshed_wg (recc) & + + cpatch%mmean_wshed_wg (donc) + cpatch%mmean_psi_open (recc) = cpatch%mmean_psi_open (recc) & + + cpatch%mmean_psi_open (donc) + cpatch%mmean_psi_closed (recc) = cpatch%mmean_psi_closed (recc) & + + cpatch%mmean_psi_closed (donc) + cpatch%mmean_water_supply (recc) = cpatch%mmean_water_supply (recc) & + + cpatch%mmean_water_supply (donc) + !---------------------------------------------------------------------------------! end if !------------------------------------------------------------------------------------! @@ -2087,19 +1839,46 @@ subroutine fuse_2_cohorts(cpatch,donc,recc, newn,green_leaf_factor,can_prss,can_ * cpatch%lai (donc)) & * newlaii - !----- The following variables are "extensive", add them. ---------------------! - cpatch%qmean_par_l (icyc,recc) = cpatch%qmean_par_l (icyc,recc) & - + cpatch%qmean_par_l (icyc,donc) - cpatch%qmean_par_l_beam (icyc,recc) = cpatch%qmean_par_l_beam (icyc,recc) & - + cpatch%qmean_par_l_beam (icyc,donc) - cpatch%qmean_par_l_diff (icyc,recc) = cpatch%qmean_par_l_diff (icyc,recc) & - + cpatch%qmean_par_l_diff (icyc,donc) - cpatch%qmean_psi_open (icyc,recc) = cpatch%qmean_psi_open (icyc,recc) & - + cpatch%qmean_psi_open (icyc,donc) - cpatch%qmean_psi_closed (icyc,recc) = cpatch%qmean_psi_closed (icyc,recc) & - + cpatch%qmean_psi_closed (icyc,donc) - cpatch%qmean_water_supply (icyc,recc) = cpatch%qmean_water_supply (icyc,recc) & - + cpatch%qmean_water_supply (icyc,donc) + !----- The following variables are "extensive", add them. ------------------------! + cpatch%qmean_par_l (icyc,recc) = cpatch%qmean_par_l (icyc,recc) & + + cpatch%qmean_par_l (icyc,donc) + cpatch%qmean_par_l_beam (icyc,recc) = cpatch%qmean_par_l_beam (icyc,recc) & + + cpatch%qmean_par_l_beam (icyc,donc) + cpatch%qmean_par_l_diff (icyc,recc) = cpatch%qmean_par_l_diff (icyc,recc) & + + cpatch%qmean_par_l_diff (icyc,donc) + cpatch%qmean_rshort_l (icyc,recc) = cpatch%qmean_rshort_l (icyc,recc) & + + cpatch%qmean_rshort_l (icyc,donc) + cpatch%qmean_rlong_l (icyc,recc) = cpatch%qmean_rlong_l (icyc,recc) & + + cpatch%qmean_rlong_l (icyc,donc) + cpatch%qmean_sensible_lc (icyc,recc) = cpatch%qmean_sensible_lc (icyc,recc) & + + cpatch%qmean_sensible_lc (icyc,donc) + cpatch%qmean_vapor_lc (icyc,recc) = cpatch%qmean_vapor_lc (icyc,recc) & + + cpatch%qmean_vapor_lc (icyc,donc) + cpatch%qmean_transp (icyc,recc) = cpatch%qmean_transp (icyc,recc) & + + cpatch%qmean_transp (icyc,donc) + cpatch%qmean_intercepted_al(icyc,recc) = cpatch%qmean_intercepted_al(icyc,recc) & + + cpatch%qmean_intercepted_al(icyc,donc) + cpatch%qmean_wshed_lg (icyc,recc) = cpatch%qmean_wshed_lg (icyc,recc) & + + cpatch%qmean_wshed_lg (icyc,donc) + cpatch%qmean_rshort_w (icyc,recc) = cpatch%qmean_rshort_w (icyc,recc) & + + cpatch%qmean_rshort_w (icyc,donc) + cpatch%qmean_rlong_w (icyc,recc) = cpatch%qmean_rlong_w (icyc,recc) & + + cpatch%qmean_rlong_w (icyc,donc) + cpatch%qmean_sensible_wc (icyc,recc) = cpatch%qmean_sensible_wc (icyc,recc) & + + cpatch%qmean_sensible_wc (icyc,donc) + cpatch%qmean_vapor_wc (icyc,recc) = cpatch%qmean_vapor_wc (icyc,recc) & + + cpatch%qmean_vapor_wc (icyc,donc) + cpatch%qmean_intercepted_aw(icyc,recc) = cpatch%qmean_intercepted_aw(icyc,recc) & + + cpatch%qmean_intercepted_aw(icyc,donc) + cpatch%qmean_wshed_wg (icyc,recc) = cpatch%qmean_wshed_wg (icyc,recc) & + + cpatch%qmean_wshed_wg (icyc,donc) + cpatch%qmean_psi_open (icyc,recc) = cpatch%qmean_psi_open (icyc,recc) & + + cpatch%qmean_psi_open (icyc,donc) + cpatch%qmean_psi_closed (icyc,recc) = cpatch%qmean_psi_closed (icyc,recc) & + + cpatch%qmean_psi_closed (icyc,donc) + cpatch%qmean_water_supply (icyc,recc) = cpatch%qmean_water_supply (icyc,recc) & + + cpatch%qmean_water_supply (icyc,donc) + !---------------------------------------------------------------------------------! end do end if @@ -3540,144 +3319,148 @@ subroutine fuse_2_patches(csite,donp,recp,mzg,mzs,prss,lsl,ntext_soil,green_leaf ! well. ! !------------------------------------------------------------------------------------! csite%avg_ustar (recp) = newareai * & - ( csite%avg_ustar (donp) * csite%area(donp) & - + csite%avg_ustar (recp) * csite%area(recp) ) + ( csite%avg_ustar (donp)* csite%area(donp) & + + csite%avg_ustar (recp)* csite%area(recp) ) csite%avg_tstar (recp) = newareai * & - ( csite%avg_tstar (donp) * csite%area(donp) & - + csite%avg_tstar (recp) * csite%area(recp) ) + ( csite%avg_tstar (donp)* csite%area(donp) & + + csite%avg_tstar (recp)* csite%area(recp) ) csite%avg_qstar (recp) = newareai * & - ( csite%avg_qstar (donp) * csite%area(donp) & - + csite%avg_qstar (recp) * csite%area(recp) ) + ( csite%avg_qstar (donp)* csite%area(donp) & + + csite%avg_qstar (recp)* csite%area(recp) ) csite%avg_cstar (recp) = newareai * & - ( csite%avg_cstar (donp) * csite%area(donp) & - + csite%avg_cstar (recp) * csite%area(recp) ) + ( csite%avg_cstar (donp)* csite%area(donp) & + + csite%avg_cstar (recp)* csite%area(recp) ) csite%avg_rshort_gnd(recp) = newareai * & - ( csite%avg_rshort_gnd(donp) * csite%area(donp) & - + csite%avg_rshort_gnd(recp) * csite%area(recp) ) + ( csite%avg_rshort_gnd (donp)* csite%area(donp) & + + csite%avg_rshort_gnd (recp)* csite%area(recp) ) + + csite%avg_par_gnd (recp) = newareai * & + ( csite%avg_par_gnd (donp)* csite%area(donp) & + + csite%avg_par_gnd (recp)* csite%area(recp) ) csite%avg_rlong_gnd(recp) = newareai * & - ( csite%avg_rlong_gnd(donp) * csite%area(donp) & - + csite%avg_rlong_gnd(recp) * csite%area(recp) ) + ( csite%avg_rlong_gnd (donp)* csite%area(donp) & + + csite%avg_rlong_gnd (recp)* csite%area(recp) ) csite%avg_carbon_ac(recp) = newareai * & - ( csite%avg_carbon_ac(donp) * csite%area(donp) & - + csite%avg_carbon_ac(recp) * csite%area(recp) ) + ( csite%avg_carbon_ac (donp)* csite%area(donp) & + + csite%avg_carbon_ac (recp)* csite%area(recp) ) csite%avg_carbon_st(recp) = newareai * & - ( csite%avg_carbon_st(donp) * csite%area(donp) & - + csite%avg_carbon_st(recp) * csite%area(recp) ) + ( csite%avg_carbon_st (donp)* csite%area(donp) & + + csite%avg_carbon_st (recp)* csite%area(recp) ) csite%avg_vapor_lc(recp) = newareai * & - ( csite%avg_vapor_lc(donp) * csite%area(donp) & - + csite%avg_vapor_lc(recp) * csite%area(recp) ) + ( csite%avg_vapor_lc (donp)* csite%area(donp) & + + csite%avg_vapor_lc (recp)* csite%area(recp) ) csite%avg_vapor_wc(recp) = newareai * & - ( csite%avg_vapor_wc(donp) * csite%area(donp) & - + csite%avg_vapor_wc(recp) * csite%area(recp) ) + ( csite%avg_vapor_wc (donp)* csite%area(donp) & + + csite%avg_vapor_wc (recp)* csite%area(recp) ) csite%avg_vapor_gc(recp) = newareai * & - ( csite%avg_vapor_gc(donp) * csite%area(donp) & - + csite%avg_vapor_gc(recp) * csite%area(recp) ) + ( csite%avg_vapor_gc (donp)* csite%area(donp) & + + csite%avg_vapor_gc (recp)* csite%area(recp) ) csite%avg_wshed_vg(recp) = newareai * & - ( csite%avg_wshed_vg(donp) * csite%area(donp) & - + csite%avg_wshed_vg(recp) * csite%area(recp) ) + ( csite%avg_wshed_vg (donp)* csite%area(donp) & + + csite%avg_wshed_vg (recp)* csite%area(recp) ) csite%avg_intercepted(recp) = newareai * & - ( csite%avg_intercepted(donp) * csite%area(donp) & - + csite%avg_intercepted(recp) * csite%area(donp) ) + ( csite%avg_intercepted (donp)* csite%area(donp) & + + csite%avg_intercepted (recp)* csite%area(donp) ) csite%avg_throughfall(recp) = newareai * & - ( csite%avg_throughfall(donp) * csite%area(donp) & - + csite%avg_throughfall(recp) * csite%area(donp) ) + ( csite%avg_throughfall (donp)* csite%area(donp) & + + csite%avg_throughfall (recp)* csite%area(donp) ) csite%avg_vapor_ac(recp) = newareai * & - ( csite%avg_vapor_ac(donp) * csite%area(donp) & - + csite%avg_vapor_ac(recp) * csite%area(recp) ) + ( csite%avg_vapor_ac (donp)* csite%area(donp) & + + csite%avg_vapor_ac (recp)* csite%area(recp) ) csite%avg_transp(recp) = newareai * & - ( csite%avg_transp(donp) * csite%area(donp) & - + csite%avg_transp(recp) * csite%area(recp) ) + ( csite%avg_transp (donp)* csite%area(donp) & + + csite%avg_transp (recp)* csite%area(recp) ) csite%avg_evap(recp) = newareai * & - ( csite%avg_evap(donp) * csite%area(donp) & - + csite%avg_evap(recp) * csite%area(recp) ) + ( csite%avg_evap (donp)* csite%area(donp) & + + csite%avg_evap (recp)* csite%area(recp) ) csite%avg_runoff(recp) = newareai * & - ( csite%avg_runoff(donp) * csite%area(donp) & - + csite%avg_runoff(recp) * csite%area(recp) ) + ( csite%avg_runoff (donp)* csite%area(donp) & + + csite%avg_runoff (recp)* csite%area(recp) ) csite%avg_drainage(recp) = newareai * & - ( csite%avg_drainage(donp) * csite%area(donp) & - + csite%avg_drainage(recp) * csite%area(recp) ) + ( csite%avg_drainage (donp)* csite%area(donp) & + + csite%avg_drainage (recp)* csite%area(recp) ) csite%avg_sensible_lc(recp) = newareai * & - ( csite%avg_sensible_lc(donp) * csite%area(donp) & - + csite%avg_sensible_lc(recp) * csite%area(recp) ) + ( csite%avg_sensible_lc (donp)* csite%area(donp) & + + csite%avg_sensible_lc (recp)* csite%area(recp) ) csite%avg_sensible_wc(recp) = newareai * & - ( csite%avg_sensible_wc(donp) * csite%area(donp) & - + csite%avg_sensible_wc(recp) * csite%area(recp) ) + ( csite%avg_sensible_wc (donp)* csite%area(donp) & + + csite%avg_sensible_wc (recp)* csite%area(recp) ) csite%avg_qwshed_vg(recp) = newareai * & - ( csite%avg_qwshed_vg(donp) * csite%area(donp) & - + csite%avg_qwshed_vg(recp) * csite%area(recp) ) + ( csite%avg_qwshed_vg (donp)* csite%area(donp) & + + csite%avg_qwshed_vg (recp)* csite%area(recp) ) csite%avg_qintercepted(recp) = newareai * & - ( csite%avg_qintercepted(donp) * csite%area(donp) & - + csite%avg_qintercepted(recp) * csite%area(donp) ) + ( csite%avg_qintercepted (donp)* csite%area(donp) & + + csite%avg_qintercepted (recp)* csite%area(donp) ) csite%avg_qthroughfall(recp) = newareai * & - ( csite%avg_qthroughfall(donp) * csite%area(donp) & - + csite%avg_qthroughfall(recp) * csite%area(donp) ) + ( csite%avg_qthroughfall (donp)* csite%area(donp) & + + csite%avg_qthroughfall (recp)* csite%area(donp) ) csite%avg_sensible_gc(recp) = newareai * & - ( csite%avg_sensible_gc(donp) * csite%area(donp) & - + csite%avg_sensible_gc(recp) * csite%area(recp) ) + ( csite%avg_sensible_gc (donp)* csite%area(donp) & + + csite%avg_sensible_gc (recp)* csite%area(recp) ) csite%avg_sensible_ac(recp) = newareai * & - ( csite%avg_sensible_ac(donp) * csite%area(donp) & - + csite%avg_sensible_ac(recp) * csite%area(recp) ) + ( csite%avg_sensible_ac (donp)* csite%area(donp) & + + csite%avg_sensible_ac (recp)* csite%area(recp) ) csite%avg_runoff_heat(recp) = newareai * & - ( csite%avg_runoff_heat(donp) * csite%area(donp) & - + csite%avg_runoff_heat(recp) * csite%area(recp) ) + ( csite%avg_runoff_heat (donp)* csite%area(donp) & + + csite%avg_runoff_heat (recp)* csite%area(recp) ) csite%avg_drainage_heat(recp) = newareai * & - ( csite%avg_drainage_heat(donp) * csite%area(donp) & - + csite%avg_drainage_heat(recp) * csite%area(recp) ) + ( csite%avg_drainage_heat (donp)* csite%area(donp) & + + csite%avg_drainage_heat (recp)* csite%area(recp) ) csite%avg_leaf_energy(recp) = newareai * & - ( csite%avg_leaf_energy(donp) * csite%area(donp) & - + csite%avg_leaf_energy(recp) * csite%area(recp) ) + ( csite%avg_leaf_energy (donp)* csite%area(donp) & + + csite%avg_leaf_energy (recp)* csite%area(recp) ) csite%avg_leaf_water(recp) = newareai * & - ( csite%avg_leaf_water(donp) * csite%area(donp) & - + csite%avg_leaf_water(recp) * csite%area(recp) ) + ( csite%avg_leaf_water (donp)* csite%area(donp) & + + csite%avg_leaf_water (recp)* csite%area(recp) ) csite%avg_leaf_hcap(recp) = newareai * & - ( csite%avg_leaf_hcap(donp) * csite%area(donp) & - + csite%avg_leaf_hcap(recp) * csite%area(recp) ) + ( csite%avg_leaf_hcap (donp)* csite%area(donp) & + + csite%avg_leaf_hcap (recp)* csite%area(recp) ) csite%avg_leaf_vpdef(recp) = newareai * & - ( csite%avg_leaf_vpdef(donp) * csite%area(donp) & - + csite%avg_leaf_vpdef(recp) * csite%area(recp) ) + ( csite%avg_leaf_vpdef (donp)* csite%area(donp) & + + csite%avg_leaf_vpdef (recp)* csite%area(recp) ) csite%avg_wood_energy(recp) = newareai * & - ( csite%avg_wood_energy(donp) * csite%area(donp) & - + csite%avg_wood_energy(recp) * csite%area(recp) ) + ( csite%avg_wood_energy (donp)* csite%area(donp) & + + csite%avg_wood_energy (recp)* csite%area(recp) ) csite%avg_wood_water(recp) = newareai * & - ( csite%avg_wood_water(donp) * csite%area(donp) & - + csite%avg_wood_water(recp) * csite%area(recp) ) + ( csite%avg_wood_water (donp)* csite%area(donp) & + + csite%avg_wood_water (recp)* csite%area(recp) ) csite%avg_wood_hcap(recp) = newareai * & - ( csite%avg_wood_hcap(donp) * csite%area(donp) & - + csite%avg_wood_hcap(recp) * csite%area(recp) ) + ( csite%avg_wood_hcap (donp)* csite%area(donp) & + + csite%avg_wood_hcap (recp)* csite%area(recp) ) csite%co2budget_residual(recp) = newareai * & ( csite%co2budget_residual(donp)* csite%area(donp) & @@ -3930,124 +3713,12 @@ subroutine fuse_2_patches(csite,donp,recp,mzg,mzs,prss,lsl,ntext_soil,green_leaf cpatch => csite%patch(recp) nrc = cpatch%ncohorts area_scale = csite%area(recp) * newareai - !------------------------------------------------------------------------------------! - ! IMPORTANT: Only cohort-level variables that have units per area (m2) should be ! - ! rescaled. Variables whose units are per plant should _NOT_ be included ! - ! here. ! - !------------------------------------------------------------------------------------! - do ico = 1,nrc - cpatch%lai (ico) = cpatch%lai (ico) * area_scale - cpatch%wai (ico) = cpatch%wai (ico) * area_scale - cpatch%nplant (ico) = cpatch%nplant (ico) * area_scale - cpatch%mean_gpp (ico) = cpatch%mean_gpp (ico) * area_scale - cpatch%mean_leaf_resp (ico) = cpatch%mean_leaf_resp (ico) * area_scale - cpatch%mean_root_resp (ico) = cpatch%mean_root_resp (ico) * area_scale - cpatch%mean_growth_resp (ico) = cpatch%mean_growth_resp (ico) * area_scale - cpatch%mean_storage_resp (ico) = cpatch%mean_storage_resp (ico) * area_scale - cpatch%mean_vleaf_resp (ico) = cpatch%mean_vleaf_resp (ico) * area_scale - cpatch%today_gpp (ico) = cpatch%today_gpp (ico) * area_scale - cpatch%today_nppleaf (ico) = cpatch%today_nppleaf (ico) * area_scale - cpatch%today_nppfroot (ico) = cpatch%today_nppfroot (ico) * area_scale - cpatch%today_nppsapwood (ico) = cpatch%today_nppsapwood (ico) * area_scale - cpatch%today_nppcroot (ico) = cpatch%today_nppcroot (ico) * area_scale - cpatch%today_nppseeds (ico) = cpatch%today_nppseeds (ico) * area_scale - cpatch%today_nppwood (ico) = cpatch%today_nppwood (ico) * area_scale - cpatch%today_nppdaily (ico) = cpatch%today_nppdaily (ico) * area_scale - cpatch%today_gpp_pot (ico) = cpatch%today_gpp_pot (ico) * area_scale - cpatch%today_gpp_lightmax (ico) = cpatch%today_gpp_lightmax (ico) * area_scale - cpatch%today_gpp_moistmax (ico) = cpatch%today_gpp_moistmax (ico) * area_scale - cpatch%today_leaf_resp (ico) = cpatch%today_leaf_resp (ico) * area_scale - cpatch%today_root_resp (ico) = cpatch%today_root_resp (ico) * area_scale - cpatch%Psi_open (ico) = cpatch%Psi_open (ico) * area_scale - cpatch%gpp (ico) = cpatch%gpp (ico) * area_scale - cpatch%leaf_respiration (ico) = cpatch%leaf_respiration (ico) * area_scale - cpatch%root_respiration (ico) = cpatch%root_respiration (ico) * area_scale - cpatch%monthly_dndt (ico) = cpatch%monthly_dndt (ico) * area_scale - cpatch%leaf_water (ico) = cpatch%leaf_water (ico) * area_scale - cpatch%leaf_hcap (ico) = cpatch%leaf_hcap (ico) * area_scale - cpatch%leaf_energy (ico) = cpatch%leaf_energy (ico) * area_scale - cpatch%wood_water (ico) = cpatch%wood_water (ico) * area_scale - cpatch%wood_hcap (ico) = cpatch%wood_hcap (ico) * area_scale - cpatch%wood_energy (ico) = cpatch%wood_energy (ico) * area_scale - !----- Crown area shall not exceed one. ---------------------------------------! - cpatch%crown_area (ico) = min(1.,cpatch%crown_area (ico) * area_scale) - if (idoutput > 0 .or. imoutput > 0 .or. iqoutput > 0) then - cpatch%dmean_par_l (ico) = cpatch%dmean_par_l (ico) * area_scale - cpatch%dmean_par_l_beam (ico) = cpatch%dmean_par_l_beam (ico) * area_scale - cpatch%dmean_par_l_diff (ico) = cpatch%dmean_par_l_diff (ico) * area_scale - end if - if (imoutput > 0 .or. iqoutput > 0) then - cpatch%mmean_par_l (ico) = cpatch%mmean_par_l (ico) * area_scale - cpatch%mmean_par_l_beam (ico) = cpatch%mmean_par_l_beam (ico) * area_scale - cpatch%mmean_par_l_diff (ico) = cpatch%mmean_par_l_diff (ico) * area_scale - end if - if (iqoutput > 0) then - cpatch%qmean_par_l (:,ico) = cpatch%qmean_par_l (:,ico) * area_scale - cpatch%qmean_par_l_beam (:,ico) = cpatch%qmean_par_l_beam (:,ico) * area_scale - cpatch%qmean_par_l_diff (:,ico) = cpatch%qmean_par_l_diff (:,ico) * area_scale - end if - end do + call update_cohort_extensive_props(cpatch,1,nrc,area_scale) !----- 2. Adjust densities of cohorts in donor patch --------------------------------! cpatch => csite%patch(donp) ndc = cpatch%ncohorts area_scale = csite%area(donp) * newareai - !------------------------------------------------------------------------------------! - ! IMPORTANT: Only cohort-level variables that have units per area (m2) should be ! - ! rescaled. Variables whose units are per plant should _NOT_ be included ! - ! here. ! - !------------------------------------------------------------------------------------! - do ico = 1,ndc - cpatch%lai (ico) = cpatch%lai (ico) * area_scale - cpatch%wai (ico) = cpatch%wai (ico) * area_scale - cpatch%nplant (ico) = cpatch%nplant (ico) * area_scale - cpatch%mean_gpp (ico) = cpatch%mean_gpp (ico) * area_scale - cpatch%mean_leaf_resp (ico) = cpatch%mean_leaf_resp (ico) * area_scale - cpatch%mean_root_resp (ico) = cpatch%mean_root_resp (ico) * area_scale - cpatch%mean_growth_resp (ico) = cpatch%mean_growth_resp (ico) * area_scale - cpatch%mean_storage_resp (ico) = cpatch%mean_storage_resp (ico) * area_scale - cpatch%mean_vleaf_resp (ico) = cpatch%mean_vleaf_resp (ico) * area_scale - cpatch%today_gpp (ico) = cpatch%today_gpp (ico) * area_scale - cpatch%today_nppleaf (ico) = cpatch%today_nppleaf (ico) * area_scale - cpatch%today_nppfroot (ico) = cpatch%today_nppfroot (ico) * area_scale - cpatch%today_nppsapwood (ico) = cpatch%today_nppsapwood (ico) * area_scale - cpatch%today_nppcroot (ico) = cpatch%today_nppcroot (ico) * area_scale - cpatch%today_nppseeds (ico) = cpatch%today_nppseeds (ico) * area_scale - cpatch%today_nppwood (ico) = cpatch%today_nppwood (ico) * area_scale - cpatch%today_nppdaily (ico) = cpatch%today_nppdaily (ico) * area_scale - cpatch%today_gpp_pot (ico) = cpatch%today_gpp_pot (ico) * area_scale - cpatch%today_gpp_lightmax (ico) = cpatch%today_gpp_lightmax (ico) * area_scale - cpatch%today_gpp_moistmax (ico) = cpatch%today_gpp_moistmax (ico) * area_scale - cpatch%today_leaf_resp (ico) = cpatch%today_leaf_resp (ico) * area_scale - cpatch%today_root_resp (ico) = cpatch%today_root_resp (ico) * area_scale - cpatch%Psi_open (ico) = cpatch%Psi_open (ico) * area_scale - cpatch%gpp (ico) = cpatch%gpp (ico) * area_scale - cpatch%leaf_respiration (ico) = cpatch%leaf_respiration (ico) * area_scale - cpatch%root_respiration (ico) = cpatch%root_respiration (ico) * area_scale - cpatch%monthly_dndt (ico) = cpatch%monthly_dndt (ico) * area_scale - cpatch%leaf_water (ico) = cpatch%leaf_water (ico) * area_scale - cpatch%leaf_hcap (ico) = cpatch%leaf_hcap (ico) * area_scale - cpatch%leaf_energy (ico) = cpatch%leaf_energy (ico) * area_scale - cpatch%wood_water (ico) = cpatch%wood_water (ico) * area_scale - cpatch%wood_hcap (ico) = cpatch%wood_hcap (ico) * area_scale - cpatch%wood_energy (ico) = cpatch%wood_energy (ico) * area_scale - !----- Crown area shall not exceed one. ---------------------------------------! - cpatch%crown_area (ico) = min(1.,cpatch%crown_area (ico) * area_scale) - if (idoutput > 0 .or. imoutput > 0 .or. iqoutput > 0) then - cpatch%dmean_par_l (ico) = cpatch%dmean_par_l (ico) * area_scale - cpatch%dmean_par_l_beam (ico) = cpatch%dmean_par_l_beam (ico) * area_scale - cpatch%dmean_par_l_diff (ico) = cpatch%dmean_par_l_diff (ico) * area_scale - end if - if (imoutput > 0 .or. iqoutput > 0) then - cpatch%mmean_par_l (ico) = cpatch%mmean_par_l (ico) * area_scale - cpatch%mmean_par_l_beam (ico) = cpatch%mmean_par_l_beam (ico) * area_scale - cpatch%mmean_par_l_diff (ico) = cpatch%mmean_par_l_diff (ico) * area_scale - end if - if (iqoutput > 0) then - cpatch%qmean_par_l (:,ico) = cpatch%qmean_par_l (:,ico) * area_scale - cpatch%qmean_par_l_beam (:,ico) = cpatch%qmean_par_l_beam (:,ico) * area_scale - cpatch%qmean_par_l_diff (:,ico) = cpatch%qmean_par_l_diff (:,ico) * area_scale - end if - end do + call update_cohort_extensive_props(cpatch,1,ndc,area_scale) !------------------------------------------------------------------------------------! diff --git a/ED/src/utils/update_derived_props.f90 b/ED/src/utils/update_derived_props.f90 index cac428415..b8b923e07 100644 --- a/ED/src/utils/update_derived_props.f90 +++ b/ED/src/utils/update_derived_props.f90 @@ -708,3 +708,153 @@ subroutine update_model_time_dm(ctime,dtlong) end subroutine update_model_time_dm !==========================================================================================! !==========================================================================================! + + + + + + +!==========================================================================================! +!==========================================================================================! +! This subroutine scales all the "extensive" cohort properties when cohort area or ! +! population changes. ! +! IMPORTANT: Only cohort-level variables that have units per area (m2 ground) should be ! +! rescaled. Variables whose units are per plant, m2 leaf, or m2 wood ! +! SHOULD NOT be included here. ! +!------------------------------------------------------------------------------------------! +subroutine update_cohort_extensive_props(cpatch,aco,zco,scale_fac) + use ed_state_vars, only : patchtype ! ! structure + use ed_misc_coms , only : idoutput & ! intent(in) + , iqoutput & ! intent(in) + , imoutput ! ! intent(in) + implicit none + !----- Arguments. ----------------------------------------------------------------------! + type(patchtype), target :: cpatch ! Current patch + integer , intent(in) :: aco ! First cohort to be rescaled + integer , intent(in) :: zco ! Last cohort to be rescaled + real , intent(in) :: scale_fac ! Scale factor + !----- Local variables. ----------------------------------------------------------------! + integer :: ico ! Cohort counter + !---------------------------------------------------------------------------------------! + + + + !---------------------------------------------------------------------------------------! + ! Loop over all cohorts. ! + !---------------------------------------------------------------------------------------! + cohortloop: do ico=aco,zco + cpatch%lai (ico) = cpatch%lai (ico) * scale_fac + cpatch%wai (ico) = cpatch%wai (ico) * scale_fac + cpatch%nplant (ico) = cpatch%nplant (ico) * scale_fac + cpatch%mean_gpp (ico) = cpatch%mean_gpp (ico) * scale_fac + cpatch%mean_leaf_resp (ico) = cpatch%mean_leaf_resp (ico) * scale_fac + cpatch%mean_root_resp (ico) = cpatch%mean_root_resp (ico) * scale_fac + cpatch%mean_growth_resp (ico) = cpatch%mean_growth_resp (ico) * scale_fac + cpatch%mean_storage_resp (ico) = cpatch%mean_storage_resp (ico) * scale_fac + cpatch%mean_vleaf_resp (ico) = cpatch%mean_vleaf_resp (ico) * scale_fac + cpatch%today_gpp (ico) = cpatch%today_gpp (ico) * scale_fac + cpatch%today_nppleaf (ico) = cpatch%today_nppleaf (ico) * scale_fac + cpatch%today_nppfroot (ico) = cpatch%today_nppfroot (ico) * scale_fac + cpatch%today_nppsapwood (ico) = cpatch%today_nppsapwood (ico) * scale_fac + cpatch%today_nppcroot (ico) = cpatch%today_nppcroot (ico) * scale_fac + cpatch%today_nppseeds (ico) = cpatch%today_nppseeds (ico) * scale_fac + cpatch%today_nppwood (ico) = cpatch%today_nppwood (ico) * scale_fac + cpatch%today_nppdaily (ico) = cpatch%today_nppdaily (ico) * scale_fac + cpatch%today_gpp_pot (ico) = cpatch%today_gpp_pot (ico) * scale_fac + cpatch%today_gpp_lightmax (ico) = cpatch%today_gpp_lightmax (ico) * scale_fac + cpatch%today_gpp_moistmax (ico) = cpatch%today_gpp_moistmax (ico) * scale_fac + cpatch%today_leaf_resp (ico) = cpatch%today_leaf_resp (ico) * scale_fac + cpatch%today_root_resp (ico) = cpatch%today_root_resp (ico) * scale_fac + cpatch%gpp (ico) = cpatch%gpp (ico) * scale_fac + cpatch%leaf_respiration (ico) = cpatch%leaf_respiration (ico) * scale_fac + cpatch%root_respiration (ico) = cpatch%root_respiration (ico) * scale_fac + cpatch%monthly_dndt (ico) = cpatch%monthly_dndt (ico) * scale_fac + cpatch%leaf_water (ico) = cpatch%leaf_water (ico) * scale_fac + cpatch%leaf_hcap (ico) = cpatch%leaf_hcap (ico) * scale_fac + cpatch%leaf_energy (ico) = cpatch%leaf_energy (ico) * scale_fac + cpatch%wood_water (ico) = cpatch%wood_water (ico) * scale_fac + cpatch%wood_hcap (ico) = cpatch%wood_hcap (ico) * scale_fac + cpatch%wood_energy (ico) = cpatch%wood_energy (ico) * scale_fac + !----- Energy and water fluxes. -----------------------------------------------------! + cpatch%mean_par_l (ico) = cpatch%mean_par_l (ico) * scale_fac + cpatch%mean_par_l_beam (ico) = cpatch%mean_par_l_beam (ico) * scale_fac + cpatch%mean_par_l_diff (ico) = cpatch%mean_par_l_diff (ico) * scale_fac + cpatch%mean_rshort_l (ico) = cpatch%mean_rshort_l (ico) * scale_fac + cpatch%mean_rlong_l (ico) = cpatch%mean_rlong_l (ico) * scale_fac + cpatch%mean_sensible_lc (ico) = cpatch%mean_sensible_lc (ico) * scale_fac + cpatch%mean_vapor_lc (ico) = cpatch%mean_vapor_lc (ico) * scale_fac + cpatch%mean_transp (ico) = cpatch%mean_transp (ico) * scale_fac + cpatch%mean_intercepted_al(ico) = cpatch%mean_intercepted_al(ico) * scale_fac + cpatch%mean_wshed_lg (ico) = cpatch%mean_wshed_lg (ico) * scale_fac + cpatch%mean_rshort_w (ico) = cpatch%mean_rshort_w (ico) * scale_fac + cpatch%mean_rlong_w (ico) = cpatch%mean_rlong_w (ico) * scale_fac + cpatch%mean_sensible_wc (ico) = cpatch%mean_sensible_wc (ico) * scale_fac + cpatch%mean_vapor_wc (ico) = cpatch%mean_vapor_wc (ico) * scale_fac + cpatch%mean_intercepted_aw(ico) = cpatch%mean_intercepted_aw(ico) * scale_fac + cpatch%mean_wshed_wg (ico) = cpatch%mean_wshed_wg (ico) * scale_fac + !----- Crown area shall not exceed 1. -----------------------------------------------! + cpatch%crown_area (ico) = min(1.,cpatch%crown_area (ico) * scale_fac) + !----- Carbon flux monthly means are extensive, we must convert them. ---------------! + if (idoutput > 0 .or. imoutput > 0 .or. iqoutput > 0) then + cpatch%dmean_par_l (ico) = cpatch%dmean_par_l (ico) * scale_fac + cpatch%dmean_par_l_beam (ico) = cpatch%dmean_par_l_beam (ico) * scale_fac + cpatch%dmean_par_l_diff (ico) = cpatch%dmean_par_l_diff (ico) * scale_fac + cpatch%dmean_rshort_l (ico) = cpatch%dmean_rshort_l (ico) * scale_fac + cpatch%dmean_rlong_l (ico) = cpatch%dmean_rlong_l (ico) * scale_fac + cpatch%dmean_sensible_lc (ico) = cpatch%dmean_sensible_lc (ico) * scale_fac + cpatch%dmean_vapor_lc (ico) = cpatch%dmean_vapor_lc (ico) * scale_fac + cpatch%dmean_transp (ico) = cpatch%dmean_transp (ico) * scale_fac + cpatch%dmean_intercepted_al(ico) = cpatch%dmean_intercepted_al(ico) * scale_fac + cpatch%dmean_wshed_lg (ico) = cpatch%dmean_wshed_lg (ico) * scale_fac + cpatch%dmean_rshort_w (ico) = cpatch%dmean_rshort_w (ico) * scale_fac + cpatch%dmean_rlong_w (ico) = cpatch%dmean_rlong_w (ico) * scale_fac + cpatch%dmean_sensible_wc (ico) = cpatch%dmean_sensible_wc (ico) * scale_fac + cpatch%dmean_vapor_wc (ico) = cpatch%dmean_vapor_wc (ico) * scale_fac + cpatch%dmean_intercepted_aw(ico) = cpatch%dmean_intercepted_aw(ico) * scale_fac + cpatch%dmean_wshed_wg (ico) = cpatch%dmean_wshed_wg (ico) * scale_fac + end if + if (imoutput > 0 .or. iqoutput > 0) then + cpatch%mmean_par_l (ico) = cpatch%mmean_par_l (ico) * scale_fac + cpatch%mmean_par_l_beam (ico) = cpatch%mmean_par_l_beam (ico) * scale_fac + cpatch%mmean_par_l_diff (ico) = cpatch%mmean_par_l_diff (ico) * scale_fac + cpatch%dmean_rshort_l (ico) = cpatch%dmean_rshort_l (ico) * scale_fac + cpatch%dmean_rlong_l (ico) = cpatch%dmean_rlong_l (ico) * scale_fac + cpatch%dmean_sensible_lc (ico) = cpatch%dmean_sensible_lc (ico) * scale_fac + cpatch%dmean_vapor_lc (ico) = cpatch%dmean_vapor_lc (ico) * scale_fac + cpatch%dmean_transp (ico) = cpatch%dmean_transp (ico) * scale_fac + cpatch%dmean_intercepted_al(ico) = cpatch%dmean_intercepted_al(ico) * scale_fac + cpatch%dmean_wshed_lg (ico) = cpatch%dmean_wshed_lg (ico) * scale_fac + cpatch%dmean_rshort_w (ico) = cpatch%dmean_rshort_w (ico) * scale_fac + cpatch%dmean_rlong_w (ico) = cpatch%dmean_rlong_w (ico) * scale_fac + cpatch%dmean_sensible_wc (ico) = cpatch%dmean_sensible_wc (ico) * scale_fac + cpatch%dmean_vapor_wc (ico) = cpatch%dmean_vapor_wc (ico) * scale_fac + cpatch%dmean_intercepted_aw(ico) = cpatch%dmean_intercepted_aw(ico) * scale_fac + cpatch%dmean_wshed_wg (ico) = cpatch%dmean_wshed_wg (ico) * scale_fac + end if + if (iqoutput > 0) then + cpatch%qmean_par_l (:,ico) = cpatch%qmean_par_l (:,ico) *scale_fac + cpatch%qmean_par_l_beam (:,ico) = cpatch%qmean_par_l_beam (:,ico) *scale_fac + cpatch%qmean_par_l_diff (:,ico) = cpatch%qmean_par_l_diff (:,ico) *scale_fac + cpatch%qmean_rshort_l (:,ico) = cpatch%qmean_rshort_l (:,ico) *scale_fac + cpatch%qmean_rlong_l (:,ico) = cpatch%qmean_rlong_l (:,ico) *scale_fac + cpatch%qmean_sensible_lc (:,ico) = cpatch%qmean_sensible_lc (:,ico) *scale_fac + cpatch%qmean_vapor_lc (:,ico) = cpatch%qmean_vapor_lc (:,ico) *scale_fac + cpatch%qmean_transp (:,ico) = cpatch%qmean_transp (:,ico) *scale_fac + cpatch%qmean_intercepted_al(:,ico) = cpatch%qmean_intercepted_al(:,ico) *scale_fac + cpatch%qmean_wshed_lg (:,ico) = cpatch%qmean_wshed_lg (:,ico) *scale_fac + cpatch%qmean_rshort_w (:,ico) = cpatch%qmean_rshort_w (:,ico) *scale_fac + cpatch%qmean_rlong_w (:,ico) = cpatch%qmean_rlong_w (:,ico) *scale_fac + cpatch%qmean_sensible_wc (:,ico) = cpatch%qmean_sensible_wc (:,ico) *scale_fac + cpatch%qmean_vapor_wc (:,ico) = cpatch%qmean_vapor_wc (:,ico) *scale_fac + cpatch%qmean_intercepted_aw(:,ico) = cpatch%qmean_intercepted_aw(:,ico) *scale_fac + cpatch%qmean_wshed_wg (:,ico) = cpatch%qmean_wshed_wg (:,ico) *scale_fac + end if + !------------------------------------------------------------------------------------! + + end do cohortloop + !---------------------------------------------------------------------------------------! + + return +end subroutine update_cohort_extensive_props +!==========================================================================================! +!==========================================================================================!