#include <misc.h> #include <preproc.h> !----------------------------------------------------------------------- !BOP ! ! !IROUTINE: CNiniTimeVar ! ! !INTERFACE: subroutine CNiniTimeVar() 1,8 #ifdef CN ! ! !DESCRIPTION: ! Initializes time varying variables used only in ! coupled carbon-nitrogen mode (CN): ! ! !USES: use clmtype use clm_atmlnd , only: clm_a2l use shr_kind_mod, only: r8 => shr_kind_r8 use clm_varcon , only: istsoil #if (defined C13) use clm_varcon , only: c13ratio #endif use pftvarcon , only: noveg use decompMod , only: get_proc_bounds ! ! !ARGUMENTS: implicit none ! ! !CALLED FROM: ! subroutine iniTimeVar in file iniTimeVar.F90 ! ! !REVISION HISTORY: ! 10/21/03: Created by Peter Thornton ! ! ! local pointers to implicit in arguments ! real(r8), pointer :: evergreen(:) ! binary flag for evergreen leaf habit (0 or 1) real(r8), pointer :: woody(:) ! binary flag for woody lifeform (1=woody, 0=not woody) real(r8), pointer :: leafcn(:) ! leaf C:N (gC/gN) real(r8), pointer :: deadwdcn(:) ! dead wood (xylem and heartwood) C:N (gC/gN) integer , pointer :: ivt(:) ! pft vegetation type logical , pointer :: lakpoi(:) ! true => landunit is a lake point integer , pointer :: plandunit(:) ! landunit index associated with each pft integer , pointer :: clandunit(:) ! landunit index associated with each column integer , pointer :: itypelun(:) ! landunit type ! ! local pointers to implicit out arguments ! real(r8), pointer :: forc_hgt_u_pft(:) !observational height of wind at pft-level [m] real(r8), pointer :: annsum_counter(:) ! seconds since last annual accumulator turnover real(r8), pointer :: cannsum_npp(:) ! annual sum of NPP, averaged from pft-level (gC/m2/yr) real(r8), pointer :: cannavg_t2m(:) !annual average of 2m air temperature, averaged from pft-level (K) real(r8), pointer :: cwdc(:) ! (gC/m2) coarse woody debris C real(r8), pointer :: litr1c(:) ! (gC/m2) litter labile C real(r8), pointer :: litr2c(:) ! (gC/m2) litter cellulose C real(r8), pointer :: litr3c(:) ! (gC/m2) litter lignin C real(r8), pointer :: soil1c(:) ! (gC/m2) soil organic matter C (fast pool) real(r8), pointer :: soil2c(:) ! (gC/m2) soil organic matter C (medium pool) real(r8), pointer :: soil3c(:) ! (gC/m2) soil organic matter C (slow pool) real(r8), pointer :: soil4c(:) ! (gC/m2) soil organic matter C (slowest pool) real(r8), pointer :: cwdn(:) ! (gN/m2) coarse woody debris N real(r8), pointer :: litr1n(:) ! (gN/m2) litter labile N real(r8), pointer :: litr2n(:) ! (gN/m2) litter cellulose N real(r8), pointer :: litr3n(:) ! (gN/m2) litter lignin N real(r8), pointer :: soil1n(:) ! (gN/m2) soil organic matter N (fast pool) real(r8), pointer :: soil2n(:) ! (gN/m2) soil organic matter N (medium pool) real(r8), pointer :: soil3n(:) ! (gN/m2) soil orgainc matter N (slow pool) real(r8), pointer :: soil4n(:) ! (gN/m2) soil orgainc matter N (slowest pool) real(r8), pointer :: sminn(:) ! (gN/m2) soil mineral N real(r8), pointer :: leafc(:) ! (gC/m2) leaf C real(r8), pointer :: leafc_storage(:) ! (gC/m2) leaf C storage real(r8), pointer :: leafc_xfer(:) ! (gC/m2) leaf C transfer real(r8), pointer :: frootc(:) ! (gC/m2) fine root C real(r8), pointer :: frootc_storage(:) ! (gC/m2) fine root C storage real(r8), pointer :: frootc_xfer(:) ! (gC/m2) fine root C transfer real(r8), pointer :: livestemc(:) ! (gC/m2) live stem C real(r8), pointer :: livestemc_storage(:) ! (gC/m2) live stem C storage real(r8), pointer :: livestemc_xfer(:) ! (gC/m2) live stem C transfer real(r8), pointer :: deadstemc(:) ! (gC/m2) dead stem C real(r8), pointer :: deadstemc_storage(:) ! (gC/m2) dead stem C storage real(r8), pointer :: deadstemc_xfer(:) ! (gC/m2) dead stem C transfer real(r8), pointer :: livecrootc(:) ! (gC/m2) live coarse root C real(r8), pointer :: livecrootc_storage(:) ! (gC/m2) live coarse root C storage real(r8), pointer :: livecrootc_xfer(:) ! (gC/m2) live coarse root C transfer real(r8), pointer :: deadcrootc(:) ! (gC/m2) dead coarse root C real(r8), pointer :: deadcrootc_storage(:) ! (gC/m2) dead coarse root C storage real(r8), pointer :: deadcrootc_xfer(:) ! (gC/m2) dead coarse root C transfer real(r8), pointer :: gresp_storage(:) ! (gC/m2) growth respiration storage real(r8), pointer :: gresp_xfer(:) ! (gC/m2) growth respiration transfer real(r8), pointer :: cpool(:) ! (gC/m2) temporary photosynthate C pool real(r8), pointer :: xsmrpool(:) ! (gC/m2) abstract C pool to meet excess MR demand real(r8), pointer :: leafn(:) ! (gN/m2) leaf N real(r8), pointer :: leafn_storage(:) ! (gN/m2) leaf N storage real(r8), pointer :: leafn_xfer(:) ! (gN/m2) leaf N transfer real(r8), pointer :: frootn(:) ! (gN/m2) fine root N real(r8), pointer :: frootn_storage(:) ! (gN/m2) fine root N storage real(r8), pointer :: frootn_xfer(:) ! (gN/m2) fine root N transfer real(r8), pointer :: livestemn(:) ! (gN/m2) live stem N real(r8), pointer :: livestemn_storage(:) ! (gN/m2) live stem N storage real(r8), pointer :: livestemn_xfer(:) ! (gN/m2) live stem N transfer real(r8), pointer :: deadstemn(:) ! (gN/m2) dead stem N real(r8), pointer :: deadstemn_storage(:) ! (gN/m2) dead stem N storage real(r8), pointer :: deadstemn_xfer(:) ! (gN/m2) dead stem N transfer real(r8), pointer :: livecrootn(:) ! (gN/m2) live coarse root N real(r8), pointer :: livecrootn_storage(:) ! (gN/m2) live coarse root N storage real(r8), pointer :: livecrootn_xfer(:) ! (gN/m2) live coarse root N transfer real(r8), pointer :: deadcrootn(:) ! (gN/m2) dead coarse root N real(r8), pointer :: deadcrootn_storage(:) ! (gN/m2) dead coarse root N storage real(r8), pointer :: deadcrootn_xfer(:) ! (gN/m2) dead coarse root N transfer real(r8), pointer :: retransn(:) ! (gN/m2) plant pool of retranslocated N real(r8), pointer :: npool(:) ! (gN/m2) temporary plant N pool real(r8), pointer :: psnsun(:) ! sunlit leaf photosynthesis (umol CO2 /m**2/ s) real(r8), pointer :: psnsha(:) ! shaded leaf photosynthesis (umol CO2 /m**2/ s) #if (defined C13) real(r8), pointer :: c13_psnsun(:) ! sunlit leaf photosynthesis (umol CO2 /m**2/ s) real(r8), pointer :: c13_psnsha(:) ! shaded leaf photosynthesis (umol CO2 /m**2/ s) #endif real(r8), pointer :: laisun(:) ! sunlit projected leaf area index real(r8), pointer :: laisha(:) ! shaded projected leaf area index real(r8), pointer :: dormant_flag(:) ! dormancy flag real(r8), pointer :: days_active(:) ! number of days since last dormancy real(r8), pointer :: onset_flag(:) ! onset flag real(r8), pointer :: onset_counter(:) ! onset days counter real(r8), pointer :: onset_gddflag(:) ! onset flag for growing degree day sum real(r8), pointer :: onset_fdd(:) ! onset freezing degree days counter real(r8), pointer :: onset_gdd(:) ! onset growing degree days real(r8), pointer :: onset_swi(:) ! onset soil water index real(r8), pointer :: offset_flag(:) ! offset flag real(r8), pointer :: offset_counter(:) ! offset days counter real(r8), pointer :: offset_fdd(:) ! offset freezing degree days counter real(r8), pointer :: offset_swi(:) ! offset soil water index real(r8), pointer :: lgsf(:) ! long growing season factor [0-1] real(r8), pointer :: bglfr(:) ! background litterfall rate (1/s) real(r8), pointer :: bgtr(:) ! background transfer rate (1/s) real(r8), pointer :: dayl(:) ! daylength (seconds) real(r8), pointer :: prev_dayl(:) ! daylength from previous timestep (seconds) real(r8), pointer :: annavg_t2m(:) ! annual average 2m air temperature (K) real(r8), pointer :: tempavg_t2m(:) ! temporary average 2m air temperature (K) real(r8), pointer :: gpp(:) ! GPP flux before downregulation (gC/m2/s) real(r8), pointer :: availc(:) ! C flux available for allocation (gC/m2/s) real(r8), pointer :: xsmrpool_recover(:) ! C flux assigned to recovery of negative cpool (gC/m2/s) #if (defined C13) real(r8), pointer :: xsmrpool_c13ratio(:) ! C flux assigned to recovery of negative cpool (gC/m2/s) #endif real(r8), pointer :: alloc_pnow(:) ! fraction of current allocation to display as new growth (DIM) real(r8), pointer :: c_allometry(:) ! C allocation index (DIM) real(r8), pointer :: n_allometry(:) ! N allocation index (DIM) real(r8), pointer :: plant_ndemand(:) ! N flux required to support initial GPP (gN/m2/s) real(r8), pointer :: tempsum_potential_gpp(:) ! temporary annual sum of plant_ndemand real(r8), pointer :: annsum_potential_gpp(:) ! annual sum of plant_ndemand real(r8), pointer :: tempmax_retransn(:) ! temporary max of retranslocated N pool (gN/m2) real(r8), pointer :: annmax_retransn(:) ! annual max of retranslocated N pool (gN/m2) real(r8), pointer :: avail_retransn(:) ! N flux available from retranslocation pool (gN/m2/s) real(r8), pointer :: plant_nalloc(:) ! total allocated N flux (gN/m2/s) real(r8), pointer :: plant_calloc(:) ! total allocated C flux (gC/m2/s) real(r8), pointer :: excess_cflux(:) ! C flux not allocated due to downregulation (gC/m2/s) real(r8), pointer :: downreg(:) ! fractional reduction in GPP due to N limitation (DIM) real(r8), pointer :: tempsum_npp(:) ! temporary annual sum of NPP real(r8), pointer :: annsum_npp(:) ! annual sum of NPP #if (defined CNDV) real(r8), pointer :: tempsum_litfall(:) ! temporary annual sum of litfall real(r8), pointer :: annsum_litfall(:) ! annual sum of litfall #endif #if (defined C13) real(r8), pointer :: rc13_canair(:) !C13O2/C12O2 in canopy air real(r8), pointer :: rc13_psnsun(:) !C13O2/C12O2 in sunlit canopy psn flux real(r8), pointer :: rc13_psnsha(:) !C13O2/C12O2 in shaded canopy psn flux real(r8), pointer :: alphapsnsun(:) !sunlit 13c fractionation ([]) real(r8), pointer :: alphapsnsha(:) !shaded 13c fractionation ([]) #endif real(r8), pointer :: qflx_drain(:) ! sub-surface runoff (mm H2O /s) ! new variables for fire real(r8), pointer :: wf(:) ! soil moisture in top 0.5 m real(r8), pointer :: me(:) ! moisture of extinction (proportion) real(r8), pointer :: fire_prob(:) ! daily fire probability (0-1) real(r8), pointer :: mean_fire_prob(:) ! e-folding mean of daily fire probability (0-1) real(r8), pointer :: fireseasonl(:) ! annual fire season length (days, <= 365) real(r8), pointer :: farea_burned(:) ! timestep fractional area burned (proportion) real(r8), pointer :: ann_farea_burned(:) ! annual total fractional area burned (proportion) real(r8), pointer :: col_ctrunc(:) ! (gC/m2) column-level sink for C truncation real(r8), pointer :: totcolc(:) ! (gC/m2) total column carbon, incl veg and cpool real(r8), pointer :: totecosysc(:) ! (gC/m2) total ecosystem carbon, incl veg but excl cpool real(r8), pointer :: totlitc(:) ! (gC/m2) total litter carbon real(r8), pointer :: totsomc(:) ! (gC/m2) total soil organic matter carbon #if (defined CLAMP) ! new CLAMP state variables real(r8), pointer :: woodc(:) ! (gC/m2) pft-level wood C #endif real(r8), pointer :: col_ntrunc(:) ! (gN/m2) column-level sink for N truncation real(r8), pointer :: totcoln(:) ! (gN/m2) total column nitrogen, incl veg real(r8), pointer :: totecosysn(:) ! (gN/m2) total ecosystem nitrogen, incl veg real(r8), pointer :: totlitn(:) ! (gN/m2) total litter nitrogen real(r8), pointer :: totsomn(:) ! (gN/m2) total soil organic matter nitrogen real(r8), pointer :: dispvegc(:) ! (gC/m2) displayed veg carbon, excluding storage and cpool real(r8), pointer :: pft_ctrunc(:) ! (gC/m2) pft-level sink for C truncation real(r8), pointer :: storvegc(:) ! (gC/m2) stored vegetation carbon, excluding cpool real(r8), pointer :: totpftc(:) ! (gC/m2) total pft-level carbon, including cpool real(r8), pointer :: totvegc(:) ! (gC/m2) total vegetation carbon, excluding cpool real(r8), pointer :: prev_frootc_to_litter(:)!previous timestep froot C litterfall flux (gC/m2/s) real(r8), pointer :: prev_leafc_to_litter(:) !previous timestep leaf C litterfall flux (gC/m2/s) real(r8), pointer :: dispvegn(:) ! (gN/m2) displayed veg nitrogen, excluding storage real(r8), pointer :: pft_ntrunc(:) ! (gN/m2) pft-level sink for N truncation real(r8), pointer :: storvegn(:) ! (gN/m2) stored vegetation nitrogen real(r8), pointer :: totpftn(:) ! (gN/m2) total pft-level nitrogen real(r8), pointer :: totvegn(:) ! (gN/m2) total vegetation nitrogen real(r8), pointer :: lncsha(:) ! leaf N concentration per unit projected LAI (gN leaf/m^2) real(r8), pointer :: lncsun(:) ! leaf N concentration per unit projected LAI (gN leaf/m^2) real(r8), pointer :: vcmxsha(:) ! shaded leaf Vcmax (umolCO2/m^2/s) real(r8), pointer :: vcmxsun(:) ! sunlit leaf Vcmax (umolCO2/m^2/s) #if (defined C13) ! 4/14/05: PET ! Adding isotope code real(r8), pointer :: cwdc13(:) ! (gC/m2) coarse woody debris C real(r8), pointer :: litr1c13(:) ! (gC/m2) litter labile C real(r8), pointer :: litr2c13(:) ! (gC/m2) litter cellulose C real(r8), pointer :: litr3c13(:) ! (gC/m2) litter lignin C real(r8), pointer :: soil1c13(:) ! (gC/m2) soil organic matter C (fast pool) real(r8), pointer :: soil2c13(:) ! (gC/m2) soil organic matter C (medium pool) real(r8), pointer :: soil3c13(:) ! (gC/m2) soil organic matter C (slow pool) real(r8), pointer :: soil4c13(:) ! (gC/m2) soil organic matter C (slowest pool) real(r8), pointer :: c13_col_ctrunc(:) ! (gC/m2) C truncation term real(r8), pointer :: leafc13(:) ! (gC/m2) leaf C real(r8), pointer :: leafc13_storage(:) ! (gC/m2) leaf C storage real(r8), pointer :: leafc13_xfer(:) ! (gC/m2) leaf C transfer real(r8), pointer :: frootc13(:) ! (gC/m2) fine root C real(r8), pointer :: frootc13_storage(:) ! (gC/m2) fine root C storage real(r8), pointer :: frootc13_xfer(:) ! (gC/m2) fine root C transfer real(r8), pointer :: livestemc13(:) ! (gC/m2) live stem C real(r8), pointer :: livestemc13_storage(:) ! (gC/m2) live stem C storage real(r8), pointer :: livestemc13_xfer(:) ! (gC/m2) live stem C transfer real(r8), pointer :: deadstemc13(:) ! (gC/m2) dead stem C real(r8), pointer :: deadstemc13_storage(:) ! (gC/m2) dead stem C storage real(r8), pointer :: deadstemc13_xfer(:) ! (gC/m2) dead stem C transfer real(r8), pointer :: livecrootc13(:) ! (gC/m2) live coarse root C real(r8), pointer :: livecrootc13_storage(:) ! (gC/m2) live coarse root C storage real(r8), pointer :: livecrootc13_xfer(:) ! (gC/m2) live coarse root C transfer real(r8), pointer :: deadcrootc13(:) ! (gC/m2) dead coarse root C real(r8), pointer :: deadcrootc13_storage(:) ! (gC/m2) dead coarse root C storage real(r8), pointer :: deadcrootc13_xfer(:) ! (gC/m2) dead coarse root C transfer real(r8), pointer :: c13_gresp_storage(:) ! (gC/m2) growth respiration storage real(r8), pointer :: c13_gresp_xfer(:) ! (gC/m2) growth respiration transfer real(r8), pointer :: c13pool(:) ! (gC/m2) temporary photosynthate C pool real(r8), pointer :: c13xsmrpool(:) ! (gC/m2) temporary photosynthate C pool real(r8), pointer :: c13_pft_ctrunc(:) ! (gC/m2) C truncation term real(r8), pointer :: totvegc13(:) ! (gC/m2) total vegetation carbon, excluding cpool #endif ! dynamic landuse variables real(r8), pointer :: seedc(:) ! (gC/m2) column-level pool for seeding new PFTs real(r8), pointer :: prod10c(:) ! (gC/m2) wood product C pool, 10-year lifespan real(r8), pointer :: prod100c(:) ! (gC/m2) wood product C pool, 100-year lifespan real(r8), pointer :: totprodc(:) ! (gC/m2) total wood product C #if (defined C13) real(r8), pointer :: seedc13(:) ! (gC/m2) column-level pool for seeding new PFTs real(r8), pointer :: prod10c13(:) ! (gC/m2) wood product C13 pool, 10-year lifespan real(r8), pointer :: prod100c13(:) ! (gC/m2) wood product C13 pool, 100-year lifespan real(r8), pointer :: totprodc13(:) ! (gC/m2) total wood product C13 #endif real(r8), pointer :: seedn(:) ! (gN/m2) column-level pool for seeding new PFTs real(r8), pointer :: prod10n(:) ! (gN/m2) wood product N pool, 10-year lifespan real(r8), pointer :: prod100n(:) ! (gN/m2) wood product N pool, 100-year lifespan real(r8), pointer :: totprodn(:) ! (gN/m2) total wood product N ! ! !LOCAL VARIABLES: integer :: g,l,c,p ! indices integer :: begp, endp ! per-clump/proc beginning and ending pft indices integer :: begc, endc ! per-clump/proc beginning and ending column indices integer :: begl, endl ! per-clump/proc beginning and ending landunit indices integer :: begg, endg ! per-clump/proc gridcell ending gridcell indices !EOP !----------------------------------------------------------------------- ! assign local pointers at the gridcell level ! assign local pointers at the landunit level lakpoi => clm3%g%l%lakpoi itypelun => clm3%g%l%itype ! assign local pointers at the column level clandunit => clm3%g%l%c%landunit annsum_counter => clm3%g%l%c%cps%annsum_counter cannsum_npp => clm3%g%l%c%cps%cannsum_npp cannavg_t2m => clm3%g%l%c%cps%cannavg_t2m wf => clm3%g%l%c%cps%wf me => clm3%g%l%c%cps%me fire_prob => clm3%g%l%c%cps%fire_prob mean_fire_prob => clm3%g%l%c%cps%mean_fire_prob fireseasonl => clm3%g%l%c%cps%fireseasonl farea_burned => clm3%g%l%c%cps%farea_burned ann_farea_burned => clm3%g%l%c%cps%ann_farea_burned qflx_drain => clm3%g%l%c%cwf%qflx_drain cwdc => clm3%g%l%c%ccs%cwdc litr1c => clm3%g%l%c%ccs%litr1c litr2c => clm3%g%l%c%ccs%litr2c litr3c => clm3%g%l%c%ccs%litr3c soil1c => clm3%g%l%c%ccs%soil1c soil2c => clm3%g%l%c%ccs%soil2c soil3c => clm3%g%l%c%ccs%soil3c soil4c => clm3%g%l%c%ccs%soil4c ! dynamic landuse variables seedc => clm3%g%l%c%ccs%seedc prod10c => clm3%g%l%c%ccs%prod10c prod100c => clm3%g%l%c%ccs%prod100c totprodc => clm3%g%l%c%ccs%totprodc #if (defined C13) seedc13 => clm3%g%l%c%cc13s%seedc prod10c13 => clm3%g%l%c%cc13s%prod10c prod100c13 => clm3%g%l%c%cc13s%prod100c totprodc13 => clm3%g%l%c%cc13s%totprodc #endif seedn => clm3%g%l%c%cns%seedn prod10n => clm3%g%l%c%cns%prod10n prod100n => clm3%g%l%c%cns%prod100n totprodn => clm3%g%l%c%cns%totprodn cwdn => clm3%g%l%c%cns%cwdn litr1n => clm3%g%l%c%cns%litr1n litr2n => clm3%g%l%c%cns%litr2n litr3n => clm3%g%l%c%cns%litr3n soil1n => clm3%g%l%c%cns%soil1n soil2n => clm3%g%l%c%cns%soil2n soil3n => clm3%g%l%c%cns%soil3n soil4n => clm3%g%l%c%cns%soil4n sminn => clm3%g%l%c%cns%sminn col_ctrunc => clm3%g%l%c%ccs%col_ctrunc totcolc => clm3%g%l%c%ccs%totcolc totecosysc => clm3%g%l%c%ccs%totecosysc totlitc => clm3%g%l%c%ccs%totlitc totsomc => clm3%g%l%c%ccs%totsomc col_ntrunc => clm3%g%l%c%cns%col_ntrunc totcoln => clm3%g%l%c%cns%totcoln totecosysn => clm3%g%l%c%cns%totecosysn totlitn => clm3%g%l%c%cns%totlitn totsomn => clm3%g%l%c%cns%totsomn #if (defined C13) ! 4/14/05: PET ! Adding isotope code cwdc13 => clm3%g%l%c%cc13s%cwdc litr1c13 => clm3%g%l%c%cc13s%litr1c litr2c13 => clm3%g%l%c%cc13s%litr2c litr3c13 => clm3%g%l%c%cc13s%litr3c soil1c13 => clm3%g%l%c%cc13s%soil1c soil2c13 => clm3%g%l%c%cc13s%soil2c soil3c13 => clm3%g%l%c%cc13s%soil3c soil4c13 => clm3%g%l%c%cc13s%soil4c c13_col_ctrunc => clm3%g%l%c%cc13s%col_ctrunc #endif ! assign local pointers at the pft level ivt => clm3%g%l%c%p%itype plandunit => clm3%g%l%c%p%landunit leafc => clm3%g%l%c%p%pcs%leafc leafc_storage => clm3%g%l%c%p%pcs%leafc_storage leafc_xfer => clm3%g%l%c%p%pcs%leafc_xfer frootc => clm3%g%l%c%p%pcs%frootc frootc_storage => clm3%g%l%c%p%pcs%frootc_storage frootc_xfer => clm3%g%l%c%p%pcs%frootc_xfer livestemc => clm3%g%l%c%p%pcs%livestemc livestemc_storage => clm3%g%l%c%p%pcs%livestemc_storage livestemc_xfer => clm3%g%l%c%p%pcs%livestemc_xfer deadstemc => clm3%g%l%c%p%pcs%deadstemc deadstemc_storage => clm3%g%l%c%p%pcs%deadstemc_storage deadstemc_xfer => clm3%g%l%c%p%pcs%deadstemc_xfer livecrootc => clm3%g%l%c%p%pcs%livecrootc livecrootc_storage => clm3%g%l%c%p%pcs%livecrootc_storage livecrootc_xfer => clm3%g%l%c%p%pcs%livecrootc_xfer deadcrootc => clm3%g%l%c%p%pcs%deadcrootc deadcrootc_storage => clm3%g%l%c%p%pcs%deadcrootc_storage deadcrootc_xfer => clm3%g%l%c%p%pcs%deadcrootc_xfer gresp_storage => clm3%g%l%c%p%pcs%gresp_storage gresp_xfer => clm3%g%l%c%p%pcs%gresp_xfer cpool => clm3%g%l%c%p%pcs%cpool xsmrpool => clm3%g%l%c%p%pcs%xsmrpool forc_hgt_u_pft => clm3%g%l%c%p%pps%forc_hgt_u_pft #if (defined CLAMP) ! CLAMP variable woodc => clm3%g%l%c%p%pcs%woodc #endif leafn => clm3%g%l%c%p%pns%leafn leafn_storage => clm3%g%l%c%p%pns%leafn_storage leafn_xfer => clm3%g%l%c%p%pns%leafn_xfer frootn => clm3%g%l%c%p%pns%frootn frootn_storage => clm3%g%l%c%p%pns%frootn_storage frootn_xfer => clm3%g%l%c%p%pns%frootn_xfer livestemn => clm3%g%l%c%p%pns%livestemn livestemn_storage => clm3%g%l%c%p%pns%livestemn_storage livestemn_xfer => clm3%g%l%c%p%pns%livestemn_xfer deadstemn => clm3%g%l%c%p%pns%deadstemn deadstemn_storage => clm3%g%l%c%p%pns%deadstemn_storage deadstemn_xfer => clm3%g%l%c%p%pns%deadstemn_xfer livecrootn => clm3%g%l%c%p%pns%livecrootn livecrootn_storage => clm3%g%l%c%p%pns%livecrootn_storage livecrootn_xfer => clm3%g%l%c%p%pns%livecrootn_xfer deadcrootn => clm3%g%l%c%p%pns%deadcrootn deadcrootn_storage => clm3%g%l%c%p%pns%deadcrootn_storage deadcrootn_xfer => clm3%g%l%c%p%pns%deadcrootn_xfer retransn => clm3%g%l%c%p%pns%retransn npool => clm3%g%l%c%p%pns%npool psnsun => clm3%g%l%c%p%pcf%psnsun psnsha => clm3%g%l%c%p%pcf%psnsha #if (defined C13) c13_psnsun => clm3%g%l%c%p%pc13f%psnsun c13_psnsha => clm3%g%l%c%p%pc13f%psnsha #endif laisun => clm3%g%l%c%p%pps%laisun laisha => clm3%g%l%c%p%pps%laisha dormant_flag => clm3%g%l%c%p%pepv%dormant_flag days_active => clm3%g%l%c%p%pepv%days_active onset_flag => clm3%g%l%c%p%pepv%onset_flag onset_counter => clm3%g%l%c%p%pepv%onset_counter onset_gddflag => clm3%g%l%c%p%pepv%onset_gddflag onset_fdd => clm3%g%l%c%p%pepv%onset_fdd onset_gdd => clm3%g%l%c%p%pepv%onset_gdd onset_swi => clm3%g%l%c%p%pepv%onset_swi offset_flag => clm3%g%l%c%p%pepv%offset_flag offset_counter => clm3%g%l%c%p%pepv%offset_counter offset_fdd => clm3%g%l%c%p%pepv%offset_fdd offset_swi => clm3%g%l%c%p%pepv%offset_swi lgsf => clm3%g%l%c%p%pepv%lgsf bglfr => clm3%g%l%c%p%pepv%bglfr bgtr => clm3%g%l%c%p%pepv%bgtr dayl => clm3%g%l%c%p%pepv%dayl prev_dayl => clm3%g%l%c%p%pepv%prev_dayl annavg_t2m => clm3%g%l%c%p%pepv%annavg_t2m tempavg_t2m => clm3%g%l%c%p%pepv%tempavg_t2m gpp => clm3%g%l%c%p%pepv%gpp availc => clm3%g%l%c%p%pepv%availc xsmrpool_recover => clm3%g%l%c%p%pepv%xsmrpool_recover #if (defined C13) xsmrpool_c13ratio => clm3%g%l%c%p%pepv%xsmrpool_c13ratio #endif alloc_pnow => clm3%g%l%c%p%pepv%alloc_pnow c_allometry => clm3%g%l%c%p%pepv%c_allometry n_allometry => clm3%g%l%c%p%pepv%n_allometry plant_ndemand => clm3%g%l%c%p%pepv%plant_ndemand tempsum_potential_gpp => clm3%g%l%c%p%pepv%tempsum_potential_gpp annsum_potential_gpp => clm3%g%l%c%p%pepv%annsum_potential_gpp tempmax_retransn => clm3%g%l%c%p%pepv%tempmax_retransn annmax_retransn => clm3%g%l%c%p%pepv%annmax_retransn avail_retransn => clm3%g%l%c%p%pepv%avail_retransn plant_nalloc => clm3%g%l%c%p%pepv%plant_nalloc plant_calloc => clm3%g%l%c%p%pepv%plant_calloc excess_cflux => clm3%g%l%c%p%pepv%excess_cflux downreg => clm3%g%l%c%p%pepv%downreg tempsum_npp => clm3%g%l%c%p%pepv%tempsum_npp annsum_npp => clm3%g%l%c%p%pepv%annsum_npp #if (defined CNDV) tempsum_litfall => clm3%g%l%c%p%pepv%tempsum_litfall annsum_litfall => clm3%g%l%c%p%pepv%annsum_litfall #endif dispvegc => clm3%g%l%c%p%pcs%dispvegc pft_ctrunc => clm3%g%l%c%p%pcs%pft_ctrunc storvegc => clm3%g%l%c%p%pcs%storvegc totpftc => clm3%g%l%c%p%pcs%totpftc totvegc => clm3%g%l%c%p%pcs%totvegc prev_frootc_to_litter => clm3%g%l%c%p%pepv%prev_frootc_to_litter prev_leafc_to_litter => clm3%g%l%c%p%pepv%prev_leafc_to_litter dispvegn => clm3%g%l%c%p%pns%dispvegn pft_ntrunc => clm3%g%l%c%p%pns%pft_ntrunc storvegn => clm3%g%l%c%p%pns%storvegn totpftn => clm3%g%l%c%p%pns%totpftn totvegn => clm3%g%l%c%p%pns%totvegn lncsha => clm3%g%l%c%p%pps%lncsha lncsun => clm3%g%l%c%p%pps%lncsun vcmxsha => clm3%g%l%c%p%pps%vcmxsha vcmxsun => clm3%g%l%c%p%pps%vcmxsun #if (defined C13) ! 4/14/05: PET ! Adding isotope code alphapsnsun => clm3%g%l%c%p%pps%alphapsnsun alphapsnsha => clm3%g%l%c%p%pps%alphapsnsha leafc13 => clm3%g%l%c%p%pc13s%leafc leafc13_storage => clm3%g%l%c%p%pc13s%leafc_storage leafc13_xfer => clm3%g%l%c%p%pc13s%leafc_xfer frootc13 => clm3%g%l%c%p%pc13s%frootc frootc13_storage => clm3%g%l%c%p%pc13s%frootc_storage frootc13_xfer => clm3%g%l%c%p%pc13s%frootc_xfer livestemc13 => clm3%g%l%c%p%pc13s%livestemc livestemc13_storage => clm3%g%l%c%p%pc13s%livestemc_storage livestemc13_xfer => clm3%g%l%c%p%pc13s%livestemc_xfer deadstemc13 => clm3%g%l%c%p%pc13s%deadstemc deadstemc13_storage => clm3%g%l%c%p%pc13s%deadstemc_storage deadstemc13_xfer => clm3%g%l%c%p%pc13s%deadstemc_xfer livecrootc13 => clm3%g%l%c%p%pc13s%livecrootc livecrootc13_storage => clm3%g%l%c%p%pc13s%livecrootc_storage livecrootc13_xfer => clm3%g%l%c%p%pc13s%livecrootc_xfer deadcrootc13 => clm3%g%l%c%p%pc13s%deadcrootc deadcrootc13_storage => clm3%g%l%c%p%pc13s%deadcrootc_storage deadcrootc13_xfer => clm3%g%l%c%p%pc13s%deadcrootc_xfer c13_gresp_storage => clm3%g%l%c%p%pc13s%gresp_storage c13_gresp_xfer => clm3%g%l%c%p%pc13s%gresp_xfer c13pool => clm3%g%l%c%p%pc13s%cpool c13xsmrpool => clm3%g%l%c%p%pc13s%xsmrpool c13_pft_ctrunc => clm3%g%l%c%p%pc13s%pft_ctrunc totvegc13 => clm3%g%l%c%p%pc13s%totvegc rc13_canair => clm3%g%l%c%p%pepv%rc13_canair rc13_psnsun => clm3%g%l%c%p%pepv%rc13_psnsun rc13_psnsha => clm3%g%l%c%p%pepv%rc13_psnsha #endif ! assign local pointers for ecophysiological constants evergreen => pftcon%evergreen woody => pftcon%woody leafcn => pftcon%leafcn deadwdcn => pftcon%deadwdcn ! Determine subgrid bounds on this processor call get_proc_bounds(begg, endg, begl, endl, begc, endc, begp, endp) ! Added 5/4/04, PET: initialize forc_hgt_u (gridcell-level), ! since this is not initialized before first call to CNVegStructUpdate, ! and it is required to set the upper bound for canopy top height. ! Changed 3/21/08, KO: still needed but don't have sufficient information ! to set this properly (e.g., pft-level displacement height and roughness ! length). So leave at 30m. !dir$ concurrent !cdir nodep do p = begp, endp forc_hgt_u_pft(p) = 30._r8 end do ! initialize column-level variables !dir$ concurrent !cdir nodep do c = begc, endc l = clandunit(c) if (itypelun(l) == istsoil) then ! column physical state variables annsum_counter(c) = 0._r8 cannsum_npp(c) = 0._r8 cannavg_t2m(c) = 280._r8 wf(c) = 1.0_r8 ! it needs to be non zero so the first time step has no fires me(c) = 0._r8 fire_prob(c) = 0._r8 mean_fire_prob(c) = 0._r8 fireseasonl(c) = 0._r8 farea_burned(c) = 0._r8 ann_farea_burned(c) = 0._r8 ! needed for CNNLeaching qflx_drain(c) = 0._r8 ! column carbon state variable initialization cwdc(c) = 0._r8 litr1c(c) = 0._r8 litr2c(c) = 0._r8 litr3c(c) = 0._r8 soil1c(c) = 0._r8 soil2c(c) = 0._r8 soil3c(c) = 0._r8 soil4c(c) = 10._r8 col_ctrunc(c) = 0._r8 totlitc(c) = 0._r8 totsomc(c) = 0._r8 totecosysc(c) = 0._r8 totcolc(c) = 0._r8 #if (defined C13) ! 4/14/05: PET ! Adding isotope code cwdc13(c) = cwdc(c) * c13ratio litr1c13(c) = litr1c(c) * c13ratio litr2c13(c) = litr2c(c) * c13ratio litr3c13(c) = litr3c(c) * c13ratio soil1c13(c) = soil1c(c) * c13ratio soil2c13(c) = soil2c(c) * c13ratio soil3c13(c) = soil3c(c) * c13ratio soil4c13(c) = soil4c(c) * c13ratio c13_col_ctrunc(c) = col_ctrunc(c) * c13ratio #endif ! column nitrogen state variables cwdn(c) = cwdc(c) / 500._r8 litr1n(c) = litr1c(c) / 90._r8 litr2n(c) = litr2c(c) / 90._r8 litr3n(c) = litr3c(c) / 90._r8 soil1n(c) = soil1c(c) / 12._r8 soil2n(c) = soil2c(c) / 12._r8 soil3n(c) = soil3c(c) / 10._r8 soil4n(c) = soil4c(c) / 10._r8 sminn(c) = 0._r8 col_ntrunc(c) = 0._r8 totlitn(c) = 0._r8 totsomn(c) = 0._r8 totecosysn(c) = 0._r8 totcoln(c) = 0._r8 ! dynamic landcover state variables seedc(c) = 0._r8 prod10c(c) = 0._r8 prod100c(c) = 0._r8 totprodc(c) = 0._r8 #if (defined C13) seedc13(c) = 0._r8 prod10c13(c) = 0._r8 prod100c13(c) = 0._r8 totprodc13(c) = 0._r8 #endif seedn(c) = 0._r8 prod10n(c) = 0._r8 prod100n(c) = 0._r8 totprodn(c) = 0._r8 ! also initialize dynamic landcover fluxes so that they have ! real values on first timestep, prior to calling pftdyn_cnbal clm3%g%l%c%ccf%dwt_seedc_to_leaf(c) = 0._r8 clm3%g%l%c%ccf%dwt_seedc_to_deadstem(c) = 0._r8 clm3%g%l%c%ccf%dwt_conv_cflux(c) = 0._r8 clm3%g%l%c%ccf%dwt_prod10c_gain(c) = 0._r8 clm3%g%l%c%ccf%prod10c_loss(c) = 0._r8 clm3%g%l%c%ccf%dwt_prod100c_gain(c) = 0._r8 clm3%g%l%c%ccf%prod100c_loss(c) = 0._r8 clm3%g%l%c%ccf%dwt_frootc_to_litr1c(c) = 0._r8 clm3%g%l%c%ccf%dwt_frootc_to_litr2c(c) = 0._r8 clm3%g%l%c%ccf%dwt_frootc_to_litr3c(c) = 0._r8 clm3%g%l%c%ccf%dwt_livecrootc_to_cwdc(c) = 0._r8 clm3%g%l%c%ccf%dwt_deadcrootc_to_cwdc(c) = 0._r8 clm3%g%l%c%ccf%dwt_closs(c) = 0._r8 #if (defined C13) clm3%g%l%c%cc13f%dwt_seedc_to_leaf(c) = 0._r8 clm3%g%l%c%cc13f%dwt_seedc_to_deadstem(c) = 0._r8 clm3%g%l%c%cc13f%dwt_conv_cflux(c) = 0._r8 clm3%g%l%c%cc13f%dwt_prod10c_gain(c) = 0._r8 clm3%g%l%c%cc13f%prod10c_loss(c) = 0._r8 clm3%g%l%c%cc13f%dwt_prod100c_gain(c) = 0._r8 clm3%g%l%c%cc13f%prod100c_loss(c) = 0._r8 clm3%g%l%c%cc13f%dwt_frootc_to_litr1c(c) = 0._r8 clm3%g%l%c%cc13f%dwt_frootc_to_litr2c(c) = 0._r8 clm3%g%l%c%cc13f%dwt_frootc_to_litr3c(c) = 0._r8 clm3%g%l%c%cc13f%dwt_livecrootc_to_cwdc(c) = 0._r8 clm3%g%l%c%cc13f%dwt_deadcrootc_to_cwdc(c) = 0._r8 clm3%g%l%c%cc13f%dwt_closs(c) = 0._r8 #endif clm3%g%l%c%cnf%dwt_seedn_to_leaf(c) = 0._r8 clm3%g%l%c%cnf%dwt_seedn_to_deadstem(c) = 0._r8 clm3%g%l%c%cnf%dwt_conv_nflux(c) = 0._r8 clm3%g%l%c%cnf%dwt_prod10n_gain(c) = 0._r8 clm3%g%l%c%cnf%prod10n_loss(c) = 0._r8 clm3%g%l%c%cnf%dwt_prod100n_gain(c) = 0._r8 clm3%g%l%c%cnf%prod100n_loss(c) = 0._r8 clm3%g%l%c%cnf%dwt_frootn_to_litr1n(c) = 0._r8 clm3%g%l%c%cnf%dwt_frootn_to_litr2n(c) = 0._r8 clm3%g%l%c%cnf%dwt_frootn_to_litr3n(c) = 0._r8 clm3%g%l%c%cnf%dwt_livecrootn_to_cwdn(c) = 0._r8 clm3%g%l%c%cnf%dwt_deadcrootn_to_cwdn(c) = 0._r8 clm3%g%l%c%cnf%dwt_nloss(c) = 0._r8 end if end do ! initialize pft-level variables !dir$ concurrent !cdir nodep do p = begp, endp l = plandunit(p) if (itypelun(l) == istsoil) then ! carbon state variables if (ivt(p) == noveg) then leafc(p) = 0._r8 leafc_storage(p) = 0._r8 else if (evergreen(ivt(p)) == 1._r8) then leafc(p) = 1._r8 leafc_storage(p) = 0._r8 else leafc(p) = 0._r8 leafc_storage(p) = 1._r8 end if end if leafc_xfer(p) = 0._r8 frootc(p) = 0._r8 frootc_storage(p) = 0._r8 frootc_xfer(p) = 0._r8 livestemc(p) = 0._r8 livestemc_storage(p) = 0._r8 livestemc_xfer(p) = 0._r8 ! tree types need to be initialized with some stem mass so that ! roughness length is not zero in canopy flux calculation if (woody(ivt(p)) == 1._r8) then deadstemc(p) = 0.1_r8 else deadstemc(p) = 0._r8 end if deadstemc_storage(p) = 0._r8 deadstemc_xfer(p) = 0._r8 livecrootc(p) = 0._r8 livecrootc_storage(p) = 0._r8 livecrootc_xfer(p) = 0._r8 deadcrootc(p) = 0._r8 deadcrootc_storage(p) = 0._r8 deadcrootc_xfer(p) = 0._r8 gresp_storage(p) = 0._r8 gresp_xfer(p) = 0._r8 cpool(p) = 0._r8 xsmrpool(p) = 0._r8 pft_ctrunc(p) = 0._r8 dispvegc(p) = 0._r8 storvegc(p) = 0._r8 totpftc(p) = 0._r8 ! calculate totvegc explicitly so that it is available for the isotope ! code on the first time step. totvegc(p) = leafc(p) + leafc_storage(p) + leafc_xfer(p) + frootc(p) + & frootc_storage(p) + frootc_xfer(p) + livestemc(p) + livestemc_storage(p) + & livestemc_xfer(p) + deadstemc(p) + deadstemc_storage(p) + deadstemc_xfer(p) + & livecrootc(p) + livecrootc_storage(p) + livecrootc_xfer(p) + deadcrootc(p) + & deadcrootc_storage(p) + deadcrootc_xfer(p) + gresp_storage(p) + & gresp_xfer(p) + cpool(p) #if (defined CLAMP) ! CLAMP variables woodc(p) = 0._r8 #endif #if (defined C13) ! 4/14/05: PET ! Adding isotope code leafc13(p) = leafc(p) * c13ratio leafc13_storage(p) = leafc_storage(p) * c13ratio leafc13_xfer(p) = leafc_xfer(p) * c13ratio frootc13(p) = frootc(p) * c13ratio frootc13_storage(p) = frootc_storage(p) * c13ratio frootc13_xfer(p) = frootc_xfer(p) * c13ratio livestemc13(p) = livestemc(p) * c13ratio livestemc13_storage(p) = livestemc_storage(p) * c13ratio livestemc13_xfer(p) = livestemc_xfer(p) * c13ratio deadstemc13(p) = deadstemc(p) * c13ratio deadstemc13_storage(p) = deadstemc_storage(p) * c13ratio deadstemc13_xfer(p) = deadstemc_xfer(p) * c13ratio livecrootc13(p) = livecrootc(p) * c13ratio livecrootc13_storage(p) = livecrootc_storage(p) * c13ratio livecrootc13_xfer(p) = livecrootc_xfer(p) * c13ratio deadcrootc13(p) = deadcrootc(p) * c13ratio deadcrootc13_storage(p) = deadcrootc_storage(p) * c13ratio deadcrootc13_xfer(p) = deadcrootc_xfer(p) * c13ratio c13_gresp_storage(p) = gresp_storage(p) * c13ratio c13_gresp_xfer(p) = gresp_xfer(p) * c13ratio c13pool(p) = cpool(p) * c13ratio c13xsmrpool(p) = xsmrpool(p) * c13ratio c13_pft_ctrunc(p) = pft_ctrunc(p) * c13ratio ! calculate totvegc explicitly so that it is available for the isotope ! code on the first time step. totvegc13(p) = leafc13(p) + leafc13_storage(p) + leafc13_xfer(p) + frootc13(p) + & frootc13_storage(p) + frootc13_xfer(p) + livestemc13(p) + livestemc13_storage(p) + & livestemc13_xfer(p) + deadstemc13(p) + deadstemc13_storage(p) + deadstemc13_xfer(p) + & livecrootc13(p) + livecrootc13_storage(p) + livecrootc13_xfer(p) + deadcrootc13(p) + & deadcrootc13_storage(p) + deadcrootc13_xfer(p) + c13_gresp_storage(p) + & c13_gresp_xfer(p) + c13pool(p) #endif ! nitrogen state variables if (ivt(p) == noveg) then leafn(p) = 0._r8 leafn_storage(p) = 0._r8 else leafn(p) = leafc(p) / leafcn(ivt(p)) leafn_storage(p) = leafc_storage(p) / leafcn(ivt(p)) end if leafn_xfer(p) = 0._r8 frootn(p) = 0._r8 frootn_storage(p) = 0._r8 frootn_xfer(p) = 0._r8 livestemn(p) = 0._r8 livestemn_storage(p) = 0._r8 livestemn_xfer(p) = 0._r8 ! tree types need to be initialized with some stem mass so that ! roughness length is not zero in canopy flux calculation if (woody(ivt(p)) == 1._r8) then deadstemn(p) = deadstemc(p) / deadwdcn(ivt(p)) else deadstemn(p) = 0._r8 end if deadstemn_storage(p) = 0._r8 deadstemn_xfer(p) = 0._r8 livecrootn(p) = 0._r8 livecrootn_storage(p) = 0._r8 livecrootn_xfer(p) = 0._r8 deadcrootn(p) = 0._r8 deadcrootn_storage(p) = 0._r8 deadcrootn_xfer(p) = 0._r8 retransn(p) = 0._r8 npool(p) = 0._r8 pft_ntrunc(p) = 0._r8 dispvegn(p) = 0._r8 storvegn(p) = 0._r8 totvegn(p) = 0._r8 totpftn(p) = 0._r8 ! initialization for psnsun and psnsha required for ! proper arbitrary initialization of allocation routine ! in initial ecosysdyn call psnsun(p) = 0._r8 psnsha(p) = 0._r8 #if (defined C13) c13_psnsun(p) = 0._r8 c13_psnsha(p) = 0._r8 #endif laisun(p) = 0._r8 laisha(p) = 0._r8 lncsun(p) = 0._r8 lncsha(p) = 0._r8 vcmxsun(p) = 0._r8 vcmxsha(p) = 0._r8 ! ecophysiological variables ! phenology variables dormant_flag(p) = 1._r8 days_active(p) = 0._r8 onset_flag(p) = 0._r8 onset_counter(p) = 0._r8 onset_gddflag(p) = 0._r8 onset_fdd(p) = 0._r8 onset_gdd(p) = 0._r8 onset_swi(p) = 0.0_r8 offset_flag(p) = 0._r8 offset_counter(p) = 0._r8 offset_fdd(p) = 0._r8 offset_swi(p) = 0._r8 lgsf(p) = 0._r8 bglfr(p) = 0._r8 bgtr(p) = 0._r8 annavg_t2m(p) = 280._r8 tempavg_t2m(p) = 0._r8 ! non-phenology variables gpp(p) = 0._r8 availc(p) = 0._r8 xsmrpool_recover(p) = 0._r8 #if (defined C13) xsmrpool_c13ratio(p) = c13ratio #endif alloc_pnow(p) = 1._r8 c_allometry(p) = 0._r8 n_allometry(p) = 0._r8 plant_ndemand(p) = 0._r8 tempsum_potential_gpp(p) = 0._r8 annsum_potential_gpp(p) = 0._r8 tempmax_retransn(p) = 0._r8 annmax_retransn(p) = 0._r8 avail_retransn(p) = 0._r8 plant_nalloc(p) = 0._r8 plant_calloc(p) = 0._r8 excess_cflux(p) = 0._r8 downreg(p) = 0._r8 prev_leafc_to_litter(p) = 0._r8 prev_frootc_to_litter(p) = 0._r8 tempsum_npp(p) = 0._r8 annsum_npp(p) = 0._r8 #if (defined CNDV) tempsum_litfall(p) = 0._r8 annsum_litfall(p) = 0._r8 #endif #if (defined C13) rc13_canair(p) = 0._r8 rc13_psnsun(p) = 0._r8 rc13_psnsha(p) = 0._r8 alphapsnsun(p) = 0._r8 alphapsnsha(p) = 0._r8 #endif end if ! end of if-istsoil block end do ! end of loop over pfts #endif end subroutine CNiniTimeVar