From 9e593184fe32b7f60e0ae8beff2ff2f30626d530 Mon Sep 17 00:00:00 2001 From: rgknox Date: Thu, 3 Mar 2016 23:20:05 -0800 Subject: [PATCH 1/6] test: filtering-out recruits with small number densities to avoid fusion problems --- .../src/ED/biogeochem/EDCohortDynamicsMod.F90 | 25 ++++++++++++++++--- .../clm/src/ED/biogeochem/EDPhysiologyMod.F90 | 8 ++++-- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 b/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 index d921e42533..0c331bd352 100755 --- a/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 +++ b/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 @@ -31,6 +31,10 @@ module EDCohortDynamicsMod logical, parameter :: DEBUG = .false. ! local debug flag + real(r8), parameter :: npha_term = 1.0d-2 ! minimum number density per hectare + real(r8), parameter :: npm2_term = 1.0d-6 ! minimum number density per m2 + + ! 10/30/09: Created by Rosie Fisher !-------------------------------------------------------------------------------------! @@ -489,8 +493,9 @@ subroutine terminate_cohorts( patchptr ) terminate = 0 ! Not enough n or dbh - if (currentCohort%n/currentPatch%area <= 0.00001_r8 .or. currentCohort%dbh < & - 0.00001_r8.and.currentCohort%bstore < 0._r8) then + if (currentCohort%n/currentPatch%area <= npm2_term .or. & ! since area is < 10k, this will never trigger? + currentCohort%n <= npha_term .or. & + (currentCohort%dbh < 0.00001_r8.and.currentCohort%bstore < 0._r8) ) then terminate = 1 if ( DEBUG ) then @@ -644,8 +649,22 @@ subroutine fuse_cohorts(patchptr) if( (.not.(currentCohort%isnew) .and. .not.(nextc%isnew) ) .or. & ( currentCohort%isnew .and. nextc%isnew ) ) then + newn = currentCohort%n + nextc%n + if ( newn < npha_term ) then + ! This is the rare case where the combined number + ! density of both cohorts is so small, and we + ! have not terminated them yet, that they could + ! generate div0s. + write(iulog,*) 'Somehow a small number density is present during' + write(iulog,*) 'cohort fusion. A call to termination should had' + write(iulog,*) 'preceded this to filter out plants with low enough' + write(iulog,*) 'number densities to make them irrelevant' + stop ! TO DO: add our own error handling and ED logs + end if + + fusion_took_place = 1 - newn = currentCohort%n + nextc%n ! sum individuals in both cohorts. + currentCohort%balive = (currentCohort%n*currentCohort%balive + nextc%n*nextc%balive)/newn currentCohort%bdead = (currentCohort%n*currentCohort%bdead + nextc%n*nextc%bdead)/newn diff --git a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 index b949c5fd76..093f4f0443 100755 --- a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 +++ b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 @@ -14,7 +14,9 @@ module EDPhysiologyMod use WaterstateType , only : waterstate_type use pftconMod , only : pftcon use EDEcophysContype , only : EDecophyscon - use EDCohortDynamicsMod , only : allocate_live_biomass, zero_cohort, create_cohort, fuse_cohorts, sort_cohorts + use EDCohortDynamicsMod , only : allocate_live_biomass, zero_cohort + use EDCohortDynamicsMod , only : create_cohort, fuse_cohorts, sort_cohorts + use EDCohortDynamicsMod , only : npha_term use EDPhenologyType , only : ed_phenology_type use EDTypesMod , only : dg_sf, dinc_ed, external_recruitment use EDTypesMod , only : ncwd, nlevcan_ed, n_sub, numpft_ed, senes @@ -1016,7 +1018,9 @@ subroutine recruitment( t, currentPatch ) cohortstatus = currentPatch%siteptr%dstatus endif - if (temp_cohort%n > 0.0_r8)then + ! Temporary Solution, if we terminate a cohort, we should still + ! still send the carbon into the soil pool + if (temp_cohort%n >= npha_term )then if ( DEBUG ) write(iulog,*) 'EDPhysiologyMod.F90 call create_cohort ' From 1dac2858af4f95c9e482b118dbb889011b5960d9 Mon Sep 17 00:00:00 2001 From: rgknox Date: Fri, 4 Mar 2016 11:53:54 -0800 Subject: [PATCH 2/6] tweaked thresholds on number density and removing redundant fusion call to avoid fpes --- .../src/ED/biogeochem/EDCohortDynamicsMod.F90 | 9 +++---- .../src/ED/biogeochem/EDPatchDynamicsMod.F90 | 4 ++- .../clm/src/ED/biogeochem/EDPhysiologyMod.F90 | 26 +++++++++---------- components/clm/src/ED/main/EDTypesMod.F90 | 5 ++++ 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 b/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 index 0c331bd352..163962f0b1 100755 --- a/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 +++ b/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 @@ -13,6 +13,7 @@ module EDCohortDynamicsMod use EDTypesMod , only : fusetol, nclmax use EDtypesMod , only : ncwd, numcohortsperpatch, udata use EDtypesMod , only : sclass_ed,nlevsclass_ed,AREA + use EDtypesMod , only : min_npm2, min_nppatch ! implicit none private @@ -31,10 +32,6 @@ module EDCohortDynamicsMod logical, parameter :: DEBUG = .false. ! local debug flag - real(r8), parameter :: npha_term = 1.0d-2 ! minimum number density per hectare - real(r8), parameter :: npm2_term = 1.0d-6 ! minimum number density per m2 - - ! 10/30/09: Created by Rosie Fisher !-------------------------------------------------------------------------------------! @@ -493,8 +490,8 @@ subroutine terminate_cohorts( patchptr ) terminate = 0 ! Not enough n or dbh - if (currentCohort%n/currentPatch%area <= npm2_term .or. & ! since area is < 10k, this will never trigger? - currentCohort%n <= npha_term .or. & + if (currentCohort%n/currentPatch%area <= min_npm2 .or. & ! + currentCohort%n <= min_nppatch .or. & (currentCohort%dbh < 0.00001_r8.and.currentCohort%bstore < 0._r8) ) then terminate = 1 diff --git a/components/clm/src/ED/biogeochem/EDPatchDynamicsMod.F90 b/components/clm/src/ED/biogeochem/EDPatchDynamicsMod.F90 index 780beee01f..5bfdf1c71a 100755 --- a/components/clm/src/ED/biogeochem/EDPatchDynamicsMod.F90 +++ b/components/clm/src/ED/biogeochem/EDPatchDynamicsMod.F90 @@ -11,6 +11,7 @@ module EDPatchDynamicsMod use EDCohortDynamicsMod , only : fuse_cohorts, sort_cohorts, insert_cohort use EDtypesMod , only : ncwd, n_dbh_bins, ntol, numpft_ed, area, dbhmax, numPatchesPerGridCell use EDTypesMod , only : ed_site_type, ed_patch_type, ed_cohort_type, udata + use EDTypesMod , only : min_patch_area ! implicit none private @@ -27,6 +28,7 @@ module EDPatchDynamicsMod private:: fuse_2_patches + ! 10/30/09: Created by Rosie Fisher ! ============================================================================ @@ -1285,7 +1287,7 @@ subroutine terminate_patches(cs_pnt) !fuse patches if one of them is very small.... currentPatch => currentSite%youngest_patch do while(associated(currentPatch)) - if(currentPatch%area <= 0.001_r8)then + if(currentPatch%area <= min_patch_area)then if(associated(currentPatch%older).and.currentPatch%patchno /= currentSite%youngest_patch%patchno)then ! Do not force the fusion of the youngest patch to its neighbour. ! This is only really meant for very old patches. diff --git a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 index 093f4f0443..7811d7c7de 100755 --- a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 +++ b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 @@ -1018,24 +1018,24 @@ subroutine recruitment( t, currentPatch ) cohortstatus = currentPatch%siteptr%dstatus endif - ! Temporary Solution, if we terminate a cohort, we should still - ! still send the carbon into the soil pool - if (temp_cohort%n >= npha_term )then - - if ( DEBUG ) write(iulog,*) 'EDPhysiologyMod.F90 call create_cohort ' - - call create_cohort(currentPatch, temp_cohort%pft, temp_cohort%n, temp_cohort%hite, temp_cohort%dbh, & - temp_cohort%balive, temp_cohort%bdead, temp_cohort%bstore, & - temp_cohort%laimemory, cohortstatus, temp_cohort%canopy_trim, currentPatch%NCL_p) - - endif +! ! Temporary Solution, if we terminate a cohort, we should still +! ! still send the carbon into the soil pool +! if (temp_cohort%n >= npha_term )then +! +! if ( DEBUG ) write(iulog,*) 'EDPhysiologyMod.F90 call create_cohort ' +! +! call create_cohort(currentPatch, temp_cohort%pft, temp_cohort%n, temp_cohort%hite, temp_cohort%dbh, & +! temp_cohort%balive, temp_cohort%bdead, temp_cohort%bstore, & +! temp_cohort%laimemory, cohortstatus, temp_cohort%canopy_trim, currentPatch%NCL_p) +! +! endif enddo !pft loop deallocate(temp_cohort) ! delete temporary cohort - call fuse_cohorts(currentPatch) - call sort_cohorts(currentPatch) +! call fuse_cohorts(currentPatch) +! call sort_cohorts(currentPatch) end subroutine recruitment diff --git a/components/clm/src/ED/main/EDTypesMod.F90 b/components/clm/src/ED/main/EDTypesMod.F90 index ab816a9d7c..1678648025 100755 --- a/components/clm/src/ED/main/EDTypesMod.F90 +++ b/components/clm/src/ED/main/EDTypesMod.F90 @@ -65,6 +65,11 @@ module EDTypesMod integer , parameter :: N_HITE_BINS = 60 ! no. of hite bins used to distribute LAI integer , parameter :: N_DBH_BINS = 5 ! no. of dbh bins used when comparing patches + + real(r8), parameter :: min_npm2 = 1.0d-5 ! minimum cohort number density per m2 before termination + real(r8), parameter :: min_patch_area = 0.001_r8 ! smallest allowable patch area before termination + real(r8), parameter :: min_nppatch = 1.0d-8 ! minimum number of cohorts per patch (min_npm2*min_patch_area) + character*4 yearchar !the lower limit of the size classes of ED cohorts From 598e22e874883861d6b227621819fdedf6eeb239 Mon Sep 17 00:00:00 2001 From: rgknox Date: Fri, 4 Mar 2016 12:28:08 -0800 Subject: [PATCH 3/6] removed uneccesary number density check (cleanup) --- .../clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 | 13 ------------- .../clm/src/ED/biogeochem/EDPhysiologyMod.F90 | 1 - 2 files changed, 14 deletions(-) diff --git a/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 b/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 index 163962f0b1..d5a899561f 100755 --- a/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 +++ b/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 @@ -647,19 +647,6 @@ subroutine fuse_cohorts(patchptr) ( currentCohort%isnew .and. nextc%isnew ) ) then newn = currentCohort%n + nextc%n - if ( newn < npha_term ) then - ! This is the rare case where the combined number - ! density of both cohorts is so small, and we - ! have not terminated them yet, that they could - ! generate div0s. - write(iulog,*) 'Somehow a small number density is present during' - write(iulog,*) 'cohort fusion. A call to termination should had' - write(iulog,*) 'preceded this to filter out plants with low enough' - write(iulog,*) 'number densities to make them irrelevant' - stop ! TO DO: add our own error handling and ED logs - end if - - fusion_took_place = 1 diff --git a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 index 7811d7c7de..9541f99cf5 100755 --- a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 +++ b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 @@ -16,7 +16,6 @@ module EDPhysiologyMod use EDEcophysContype , only : EDecophyscon use EDCohortDynamicsMod , only : allocate_live_biomass, zero_cohort use EDCohortDynamicsMod , only : create_cohort, fuse_cohorts, sort_cohorts - use EDCohortDynamicsMod , only : npha_term use EDPhenologyType , only : ed_phenology_type use EDTypesMod , only : dg_sf, dinc_ed, external_recruitment use EDTypesMod , only : ncwd, nlevcan_ed, n_sub, numpft_ed, senes From 7c594da46fcedf51628daeb58d8a7556c4d35f34 Mon Sep 17 00:00:00 2001 From: rgknox Date: Fri, 4 Mar 2016 13:23:45 -0800 Subject: [PATCH 4/6] tests passed, removing commented changes --- .../clm/src/ED/biogeochem/EDPhysiologyMod.F90 | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 index 82449cd86a..d98559d0cd 100755 --- a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 +++ b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 @@ -1017,25 +1017,10 @@ subroutine recruitment( t, currentPatch ) cohortstatus = currentPatch%siteptr%dstatus endif -! ! Temporary Solution, if we terminate a cohort, we should still -! ! still send the carbon into the soil pool -! if (temp_cohort%n >= npha_term )then -! -! if ( DEBUG ) write(iulog,*) 'EDPhysiologyMod.F90 call create_cohort ' -! -! call create_cohort(currentPatch, temp_cohort%pft, temp_cohort%n, temp_cohort%hite, temp_cohort%dbh, & -! temp_cohort%balive, temp_cohort%bdead, temp_cohort%bstore, & -! temp_cohort%laimemory, cohortstatus, temp_cohort%canopy_trim, currentPatch%NCL_p) -! -! endif - enddo !pft loop deallocate(temp_cohort) ! delete temporary cohort -! call fuse_cohorts(currentPatch) -! call sort_cohorts(currentPatch) - end subroutine recruitment ! ============================================================================ From 8bb58719d20640cfd58dd4e254c3e4e28faee49b Mon Sep 17 00:00:00 2001 From: rgknox Date: Fri, 4 Mar 2016 15:52:50 -0800 Subject: [PATCH 5/6] changed termination logic: added a safemath minimum cohort threshold that is also applied to new recruits, and changed the order of termination calls as per discussion in PR --- .../ED/biogeochem/EDCanopyStructureMod.F90 | 1 - .../src/ED/biogeochem/EDCohortDynamicsMod.F90 | 83 ++++++++++--------- .../clm/src/ED/biogeochem/EDPhysiologyMod.F90 | 8 ++ components/clm/src/ED/main/EDMainMod.F90 | 7 +- components/clm/src/ED/main/EDTypesMod.F90 | 3 + 5 files changed, 60 insertions(+), 42 deletions(-) diff --git a/components/clm/src/ED/biogeochem/EDCanopyStructureMod.F90 b/components/clm/src/ED/biogeochem/EDCanopyStructureMod.F90 index 133639fc67..9323ac0fce 100755 --- a/components/clm/src/ED/biogeochem/EDCanopyStructureMod.F90 +++ b/components/clm/src/ED/biogeochem/EDCanopyStructureMod.F90 @@ -1,4 +1,3 @@ - module EDCanopyStructureMod ! ============================================================================ diff --git a/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 b/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 index d5a899561f..288c8c9dd9 100755 --- a/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 +++ b/components/clm/src/ED/biogeochem/EDCohortDynamicsMod.F90 @@ -13,7 +13,7 @@ module EDCohortDynamicsMod use EDTypesMod , only : fusetol, nclmax use EDtypesMod , only : ncwd, numcohortsperpatch, udata use EDtypesMod , only : sclass_ed,nlevsclass_ed,AREA - use EDtypesMod , only : min_npm2, min_nppatch + use EDtypesMod , only : min_npm2, min_nppatch, min_n_safemath ! implicit none private @@ -489,48 +489,55 @@ subroutine terminate_cohorts( patchptr ) nextc => currentCohort%shorter terminate = 0 - ! Not enough n or dbh - if (currentCohort%n/currentPatch%area <= min_npm2 .or. & ! - currentCohort%n <= min_nppatch .or. & - (currentCohort%dbh < 0.00001_r8.and.currentCohort%bstore < 0._r8) ) then - terminate = 1 - - if ( DEBUG ) then - write(iulog,*) 'terminating cohorts 1',currentCohort%n/currentPatch%area,currentCohort%dbh - endif - - endif - - ! In the third canopy layer - if (currentCohort%canopy_layer > NCLMAX) then - terminate = 1 - - if ( DEBUG ) then - write(iulog,*) 'terminating cohorts 2', currentCohort%canopy_layer - endif - + ! Check if number density is so low is breaks math + if (currentcohort%n < min_n_safemath) then + terminate = 1 + if ( DEBUG ) then + write(iulog,*) 'terminating cohorts 0',currentCohort%n/currentPatch%area,currentCohort%dbh + endif endif - ! live biomass pools are terminally depleted - if (currentCohort%balive < 1e-10_r8 .or. currentCohort%bstore < 1e-10_r8) then - terminate = 1 - - if ( DEBUG ) then - write(iulog,*) 'terminating cohorts 3', currentCohort%balive,currentCohort%bstore - endif - - endif - - ! Total cohort biomass is negative - if (currentCohort%balive+currentCohort%bdead+currentCohort%bstore < 0._r8) then - terminate = 1 - - if ( DEBUG ) then - write(iulog,*) 'terminating cohorts 4', currentCohort%balive, currentCohort%bstore, currentCohort%bdead, & + ! The rest of these are only allowed if we are not dealing with a recruit + if (.not.currentCohort%isnew) then + + ! Not enough n or dbh + if (currentCohort%n/currentPatch%area <= min_npm2 .or. & ! + currentCohort%n <= min_nppatch .or. & + (currentCohort%dbh < 0.00001_r8.and.currentCohort%bstore < 0._r8) ) then + terminate = 1 + + if ( DEBUG ) then + write(iulog,*) 'terminating cohorts 1',currentCohort%n/currentPatch%area,currentCohort%dbh + endif + endif + + ! In the third canopy layer + if (currentCohort%canopy_layer > NCLMAX) then + terminate = 1 + if ( DEBUG ) then + write(iulog,*) 'terminating cohorts 2', currentCohort%canopy_layer + endif + endif + + ! live biomass pools are terminally depleted + if (currentCohort%balive < 1e-10_r8 .or. currentCohort%bstore < 1e-10_r8) then + terminate = 1 + if ( DEBUG ) then + write(iulog,*) 'terminating cohorts 3', currentCohort%balive,currentCohort%bstore + endif + endif + + ! Total cohort biomass is negative + if (currentCohort%balive+currentCohort%bdead+currentCohort%bstore < 0._r8) then + terminate = 1 + if ( DEBUG ) then + write(iulog,*) 'terminating cohorts 4', currentCohort%balive, & + currentCohort%bstore, currentCohort%bdead, & currentCohort%balive+currentCohort%bdead+& currentCohort%bstore, currentCohort%n - endif + endif + endif endif if (terminate == 1) then diff --git a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 index d98559d0cd..526f993003 100755 --- a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 +++ b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 @@ -1017,6 +1017,14 @@ subroutine recruitment( t, currentPatch ) cohortstatus = currentPatch%siteptr%dstatus endif + + if (temp_cohort%n >= 0.0_r8 )then + if ( DEBUG ) write(iulog,*) 'EDPhysiologyMod.F90 call create_cohort ' + call create_cohort(currentPatch, temp_cohort%pft, temp_cohort%n, temp_cohort%hite, temp_cohort%dbh, & + temp_cohort%balive, temp_cohort%bdead, temp_cohort%bstore, & + temp_cohort%laimemory, cohortstatus, temp_cohort%canopy_trim, currentPatch%NCL_p) + endif + enddo !pft loop deallocate(temp_cohort) ! delete temporary cohort diff --git a/components/clm/src/ED/main/EDMainMod.F90 b/components/clm/src/ED/main/EDMainMod.F90 index 17d132a847..c52c6330dc 100755 --- a/components/clm/src/ED/main/EDMainMod.F90 +++ b/components/clm/src/ED/main/EDMainMod.F90 @@ -176,15 +176,16 @@ subroutine ed_ecosystem_dynamics(currentSite, & currentPatch => currentSite%oldest_patch do while (associated(currentPatch)) - ! kills cohorts that are too small - call terminate_cohorts(currentPatch) - ! puts cohorts in right order call sort_cohorts(currentPatch) ! fuses similar cohorts call fuse_cohorts(currentPatch) + ! kills cohorts that are too small + call terminate_cohorts(currentPatch) + + currentPatch => currentPatch%younger enddo diff --git a/components/clm/src/ED/main/EDTypesMod.F90 b/components/clm/src/ED/main/EDTypesMod.F90 index 1678648025..2aedbc276b 100755 --- a/components/clm/src/ED/main/EDTypesMod.F90 +++ b/components/clm/src/ED/main/EDTypesMod.F90 @@ -69,6 +69,9 @@ module EDTypesMod real(r8), parameter :: min_npm2 = 1.0d-5 ! minimum cohort number density per m2 before termination real(r8), parameter :: min_patch_area = 0.001_r8 ! smallest allowable patch area before termination real(r8), parameter :: min_nppatch = 1.0d-8 ! minimum number of cohorts per patch (min_npm2*min_patch_area) + real(r8), parameter :: min_n_safemath = 1.0d-15 ! in some cases, we want to immediately remove super small + ! number densities of cohorts to prevent FPEs, this is usually + ! just relevant in the first day after recruitment character*4 yearchar From 6e843515d76ae5f1dcafb97e6d15231f8d97c206 Mon Sep 17 00:00:00 2001 From: rgknox Date: Sat, 5 Mar 2016 12:00:10 -0800 Subject: [PATCH 6/6] fixed logical comparison operator in create_cohort, typo from prev commit --- components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 index 526f993003..8de0ecc9ad 100755 --- a/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 +++ b/components/clm/src/ED/biogeochem/EDPhysiologyMod.F90 @@ -1017,8 +1017,7 @@ subroutine recruitment( t, currentPatch ) cohortstatus = currentPatch%siteptr%dstatus endif - - if (temp_cohort%n >= 0.0_r8 )then + if (temp_cohort%n > 0.0_r8 )then if ( DEBUG ) write(iulog,*) 'EDPhysiologyMod.F90 call create_cohort ' call create_cohort(currentPatch, temp_cohort%pft, temp_cohort%n, temp_cohort%hite, temp_cohort%dbh, & temp_cohort%balive, temp_cohort%bdead, temp_cohort%bstore, &