From c607e9ba108d6a6acff94089f3e31d1e71090341 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Wed, 13 Mar 2024 13:54:23 -0600 Subject: [PATCH 01/27] code cleanup --- fire/SFMainMod.F90 | 133 +++++++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 77 deletions(-) diff --git a/fire/SFMainMod.F90 b/fire/SFMainMod.F90 index b5b9ad0ce6..8327163232 100644 --- a/fire/SFMainMod.F90 +++ b/fire/SFMainMod.F90 @@ -133,7 +133,7 @@ subroutine UpdateFireWeather(currentSite, bc_in) ! NOTE that the boundary conditions of temperature, precipitation and relative humidity ! are available at the patch level. We are currently using a simplification where the whole site ! is simply using the values associated with the first patch. - ! which probably won't have much inpact, unless we decide to ever calculated fire weather for each patch. + ! which probably won't have much impact, unless we decide to ever calculated fire weather for each patch. currentPatch => currentSite%oldest_patch @@ -326,109 +326,88 @@ subroutine charecteristics_of_fuel ( currentSite ) end subroutine charecteristics_of_fuel + !--------------------------------------------------------------------------------------- - !***************************************************************** - subroutine wind_effect ( currentSite, bc_in) - !*****************************************************************. - - ! Routine called daily from within ED within a site loop. - ! Calculates the effective windspeed based on vegetation charecteristics. - ! currentSite%wind is daily wind converted to m/min for Spitfire units + subroutine wind_effect (currentSite, bc_in) + ! + ! DESCRIPTION: + ! Calculates effective windspeed based on vegetation characteristics use FatesConstantsMod, only : sec_per_min - type(ed_site_type) , intent(inout), target :: currentSite - type(bc_in_type) , intent(in) :: bc_in - - type(fates_patch_type) , pointer :: currentPatch - type(fates_cohort_type), pointer :: currentCohort - - real(r8) :: total_grass_area ! per patch,in m2 - real(r8) :: tree_fraction ! site level. no units - real(r8) :: grass_fraction ! site level. no units - real(r8) :: bare_fraction ! site level. no units - integer :: iofp ! index of oldest fates patch + ! ARGUMENTS: + type(ed_site_type), intent(inout), target :: currentSite ! site object + type(bc_in_type), intent(in) :: bc_in ! BC in object + ! LOCALS: + type(fates_patch_type) , pointer :: currentPatch ! patch object + type(fates_cohort_type), pointer :: currentCohort ! cohort object + real(r8) :: total_grass_area ! total grass area (patch-level) [m2] + real(r8) :: tree_fraction ! site-level tree fraction [0-1] + real(r8) :: grass_fraction ! site-level grass fraction [0-1] + real(r8) :: bare_fraction ! site-level bare ground fraction [0-1] + integer :: iofp ! index of oldest fates patch currentPatch => currentSite%oldest_patch ! If the oldest patch is a bareground patch (i.e. nocomp mode is on) use the first vegetated patch ! for the iofp index (i.e. the next younger patch) - if(currentPatch%nocomp_pft_label .eq. nocomp_bareground)then + if (currentPatch%nocomp_pft_label == nocomp_bareground) then currentPatch => currentPatch%younger - endif + end if - ! note - this is a patch level temperature, which probably won't have much inpact, - ! unless we decide to ever calculated the NI for each patch. + ! note - this is a patch-level wind speed, which probably won't have much impact iofp = currentPatch%patchno - currentSite%wind = bc_in%wind24_pa(iofp) * sec_per_min !Convert to m/min for SPITFIRE + currentSite%wind = bc_in%wind24_pa(iofp)*sec_per_min ! Convert to m/min for SPITFIRE - if(write_SF == itrue)then - if ( hlm_masterproc == itrue ) write(fates_log(),*) 'wind24', currentSite%wind - endif - ! --- influence of wind speed, corrected for surface roughness---- - ! --- averaged over the whole grid cell to prevent extreme divergence - ! average_wspeed = 0.0_r8 + ! influence of wind speed, corrected for surface roughness + ! averaged over the whole grid cell to prevent extreme divergence tree_fraction = 0.0_r8 grass_fraction = 0.0_r8 - currentPatch=>currentSite%oldest_patch; + currentPatch => currentSite%oldest_patch do while(associated(currentPatch)) - if(currentPatch%nocomp_pft_label .ne. nocomp_bareground)then + if (currentPatch%nocomp_pft_label /= nocomp_bareground) then - currentPatch%total_tree_area = 0.0_r8 - total_grass_area = 0.0_r8 - currentCohort => currentPatch%tallest - - do while(associated(currentCohort)) - if (debug) write(fates_log(),*) 'SF currentCohort%c_area ',currentCohort%c_area - if( prt_params%woody(currentCohort%pft) == itrue)then - currentPatch%total_tree_area = currentPatch%total_tree_area + currentCohort%c_area - else - total_grass_area = total_grass_area + currentCohort%c_area - endif - currentCohort => currentCohort%shorter - enddo - tree_fraction = tree_fraction + min(currentPatch%area,currentPatch%total_tree_area)/AREA - grass_fraction = grass_fraction + min(currentPatch%area,total_grass_area)/AREA - - if(debug)then - write(fates_log(),*) 'SF currentPatch%area ',currentPatch%area - write(fates_log(),*) 'SF currentPatch%total_area ',currentPatch%total_tree_area - write(fates_log(),*) 'SF total_grass_area ',tree_fraction,grass_fraction - write(fates_log(),*) 'SF AREA ',AREA - endif - - endif !nocomp_pft_label check - - currentPatch => currentPatch%younger - enddo !currentPatch loop + currentPatch%total_tree_area = 0.0_r8 + total_grass_area = 0.0_r8 + + currentCohort => currentPatch%tallest + do while(associated(currentCohort)) + if (prt_params%woody(currentCohort%pft) == itrue) then + currentPatch%total_tree_area = currentPatch%total_tree_area + currentCohort%c_area + else + total_grass_area = total_grass_area + currentCohort%c_area + end if + currentCohort => currentCohort%shorter + end do + tree_fraction = tree_fraction + min(currentPatch%area, currentPatch%total_tree_area)/AREA + grass_fraction = grass_fraction + min(currentPatch%area, total_grass_area)/AREA + + end if + + currentPatch => currentPatch%younger + end do - !if there is a cover of more than one, then the grasses are under the trees - grass_fraction = min(grass_fraction,1.0_r8-tree_fraction) + ! if cover > 1.0, then the grasses are under the trees + grass_fraction = min(grass_fraction, 1.0_r8 - tree_fraction) bare_fraction = 1.0_r8 - tree_fraction - grass_fraction - if(write_sf == itrue)then - if ( hlm_masterproc == itrue ) write(fates_log(),*) 'grass, trees, bare', & - grass_fraction, tree_fraction, bare_fraction - endif - - currentPatch=>currentSite%oldest_patch; + currentPatch => currentSite%oldest_patch do while(associated(currentPatch)) - if(currentPatch%nocomp_pft_label .ne. nocomp_bareground)then - - currentPatch%total_tree_area = min(currentPatch%total_tree_area,currentPatch%area) - ! effect_wspeed in units m/min - currentPatch%effect_wspeed = currentSite%wind * (tree_fraction*0.4_r8+(grass_fraction+bare_fraction)*0.6_r8) - - endif ! nocomp_pft_label check - currentPatch => currentPatch%younger - enddo !end patch loop + if (currentPatch%nocomp_pft_label /= nocomp_bareground) then + currentPatch%total_tree_area = min(currentPatch%total_tree_area, currentPatch%area) + currentPatch%effect_wspeed = currentSite%wind*(tree_fraction*0.4_r8 + (grass_fraction + bare_fraction)*0.6_r8) + end if + + currentPatch => currentPatch%younger + end do end subroutine wind_effect - !***************************************************************** + !--------------------------------------------------------------------------------------- + subroutine rate_of_spread ( currentSite ) !*****************************************************************. !Routine called daily from within ED within a site loop. From 43506c4a518c9383d9f4136d2c828e895c6abd2c Mon Sep 17 00:00:00 2001 From: adrifoster Date: Fri, 15 Mar 2024 10:30:34 -0600 Subject: [PATCH 02/27] create patch method for summing grass and tree cover --- biogeochem/FatesPatchMod.F90 | 49 +++++++++++++++++++++++++++++++++--- fire/SFMainMod.F90 | 23 ++++------------- 2 files changed, 50 insertions(+), 22 deletions(-) diff --git a/biogeochem/FatesPatchMod.F90 b/biogeochem/FatesPatchMod.F90 index d86e5c5d51..2dea061533 100644 --- a/biogeochem/FatesPatchMod.F90 +++ b/biogeochem/FatesPatchMod.F90 @@ -98,6 +98,7 @@ module FatesPatchMod ! used to determine attenuation of parameters during photosynthesis real(r8) :: total_canopy_area ! area that is covered by vegetation [m2] real(r8) :: total_tree_area ! area that is covered by woody vegetation [m2] + real(r8) :: total_grass_area ! area that is covered by non-woody vegetation [m2] real(r8) :: zstar ! height of smallest canopy tree, only meaningful in "strict PPA" mode [m] real(r8) :: elai_profile(nclmax,maxpft,nlevleaf) ! exposed leaf area in each canopy layer, pft, and leaf layer [m2 leaf/m2 contributing crown area] real(r8) :: esai_profile(nclmax,maxpft,nlevleaf) ! exposed stem area in each canopy layer, pft, and leaf layer [m2 leaf/m2 contributing crown area] @@ -230,6 +231,7 @@ module FatesPatchMod procedure :: InitRunningMeans procedure :: InitLitter procedure :: Create + procedure :: UpdateTreeGrassArea procedure :: FreeMemory procedure :: Dump procedure :: CheckVars @@ -308,7 +310,8 @@ subroutine NanValues(this) this%pft_agb_profile(:,:) = nan this%canopy_layer_tlai(:) = nan this%total_canopy_area = nan - this%total_tree_area = nan + this%total_tree_area = nan + this%total_grass_area = nan this%zstar = nan this%elai_profile(:,:,:) = nan this%esai_profile(:,:,:) = nan @@ -407,7 +410,8 @@ subroutine ZeroValues(this) ! LEAF ORGANIZATION this%canopy_layer_tlai(:) = 0.0_r8 - this%total_tree_area = 0.0_r8 + this%total_tree_area = 0.0_r8 + this%total_grass_area = 0.0_r8 this%zstar = 0.0_r8 this%elai_profile(:,:,:) = 0.0_r8 this%c_stomata = 0.0_r8 @@ -424,8 +428,8 @@ subroutine ZeroValues(this) this%fabi_sha_z(:,:,:) = 0.0_r8 this%ed_parsun_z(:,:,:) = 0.0_r8 this%ed_parsha_z(:,:,:) = 0.0_r8 - this%ed_laisun_z(:,:,:) = 0._r8 - this%ed_laisha_z(:,:,:) = 0._r8 + this%ed_laisun_z(:,:,:) = 0._r8 + this%ed_laisha_z(:,:,:) = 0._r8 this%f_sun = 0.0_r8 this%tr_soil_dir_dif(:) = 0.0_r8 this%fab(:) = 0.0_r8 @@ -613,6 +617,42 @@ end subroutine Create !=========================================================================== + subroutine UpdateTreeGrassArea(this) + ! + ! DESCRIPTION: + ! calculate and update the total tree area and grass area (by canopy) on patch + ! + + ! ARGUMENTS: + class(fates_patch_type), intent(inout) :: this ! patch object + + ! LOCALS: + type(fates_cohort_Type), pointer :: currentCohort ! cohort object + real(r8) :: tree_area ! treed area of patch [m2] + real(r8) :: grass_area ! grass area of patch [m2] + + if (this%nocomp_pft_label /= nocomp_bareground) then + total_tree_area = 0.0_r8 + total_grass_area = 0.0_r8 + + currentCohort => this%tallest + do while(associated(currentCohort)) + if (prt_params%woody(currentCohort%pft) == itrue) then + total_tree_area = total_tree_area + currentCohort%c_area + else + total_grass_area = total_grass_area + currentCohort%c_area + end if + currentCohort => currentCohort%shorter + end do + + this%total_tree_area = total_tree_area + this%total_grass_area = total_grass_area + end if + + end subroutine UpdateTreeGrassArea + + !=========================================================================== + subroutine FreeMemory(this, regeneration_model, numpft) ! ! DESCRIPTION: @@ -737,6 +777,7 @@ subroutine Dump(this) write(fates_log(),*) 'pa%ncl_p = ',this%ncl_p write(fates_log(),*) 'pa%total_canopy_area = ',this%total_canopy_area write(fates_log(),*) 'pa%total_tree_area = ',this%total_tree_area + write(fates_log(),*) 'pa%total_grass_area = ',this%total_grass_area write(fates_log(),*) 'pa%zstar = ',this%zstar write(fates_log(),*) 'pa%solar_zenith_flag = ',this%solar_zenith_flag write(fates_log(),*) 'pa%solar_zenith_angle = ',this%solar_zenith_angle diff --git a/fire/SFMainMod.F90 b/fire/SFMainMod.F90 index 8327163232..bcfe6abae8 100644 --- a/fire/SFMainMod.F90 +++ b/fire/SFMainMod.F90 @@ -366,26 +366,11 @@ subroutine wind_effect (currentSite, bc_in) grass_fraction = 0.0_r8 currentPatch => currentSite%oldest_patch do while(associated(currentPatch)) - if (currentPatch%nocomp_pft_label /= nocomp_bareground) then - - currentPatch%total_tree_area = 0.0_r8 - total_grass_area = 0.0_r8 - - currentCohort => currentPatch%tallest - do while(associated(currentCohort)) - if (prt_params%woody(currentCohort%pft) == itrue) then - currentPatch%total_tree_area = currentPatch%total_tree_area + currentCohort%c_area - else - total_grass_area = total_grass_area + currentCohort%c_area - end if - currentCohort => currentCohort%shorter - end do + call currentPatch%UpdateTreeGrassArea() tree_fraction = tree_fraction + min(currentPatch%area, currentPatch%total_tree_area)/AREA - grass_fraction = grass_fraction + min(currentPatch%area, total_grass_area)/AREA - + grass_fraction = grass_fraction + min(currentPatch%area, currentPatch%total_grass_area)/AREA end if - currentPatch => currentPatch%younger end do @@ -397,7 +382,9 @@ subroutine wind_effect (currentSite, bc_in) do while(associated(currentPatch)) if (currentPatch%nocomp_pft_label /= nocomp_bareground) then - currentPatch%total_tree_area = min(currentPatch%total_tree_area, currentPatch%area) + currentPatch%total_tree_area = min(currentPatch%total_tree_area, currentPatch%area) + ! This is very random... Let's update this to be MOST/related to surface roughness + ! this should be tied to tree height currentPatch%effect_wspeed = currentSite%wind*(tree_fraction*0.4_r8 + (grass_fraction + bare_fraction)*0.6_r8) end if From 9d2a68fc64d26deb021eb1884fab5daf7fcdbb67 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Fri, 15 Mar 2024 15:32:17 -0600 Subject: [PATCH 03/27] bug fix --- biogeochem/FatesPatchMod.F90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/biogeochem/FatesPatchMod.F90 b/biogeochem/FatesPatchMod.F90 index 2dea061533..69f12a7041 100644 --- a/biogeochem/FatesPatchMod.F90 +++ b/biogeochem/FatesPatchMod.F90 @@ -632,21 +632,21 @@ subroutine UpdateTreeGrassArea(this) real(r8) :: grass_area ! grass area of patch [m2] if (this%nocomp_pft_label /= nocomp_bareground) then - total_tree_area = 0.0_r8 - total_grass_area = 0.0_r8 + tree_area = 0.0_r8 + grass_area = 0.0_r8 currentCohort => this%tallest do while(associated(currentCohort)) if (prt_params%woody(currentCohort%pft) == itrue) then - total_tree_area = total_tree_area + currentCohort%c_area + tree_area = tree_area + currentCohort%c_area else - total_grass_area = total_grass_area + currentCohort%c_area + grass_area = grass_area + currentCohort%c_area end if currentCohort => currentCohort%shorter end do - this%total_tree_area = total_tree_area - this%total_grass_area = total_grass_area + this%total_tree_area = tree_area + this%total_grass_area = grass_area end if end subroutine UpdateTreeGrassArea From 35f5bbca4a1964fbc5c7ae7b41582f8dd1ccbf38 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Mon, 18 Mar 2024 09:08:20 -0600 Subject: [PATCH 04/27] add use statements --- biogeochem/FatesPatchMod.F90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/biogeochem/FatesPatchMod.F90 b/biogeochem/FatesPatchMod.F90 index 69f12a7041..374529f87d 100644 --- a/biogeochem/FatesPatchMod.F90 +++ b/biogeochem/FatesPatchMod.F90 @@ -16,6 +16,8 @@ module FatesPatchMod use FatesLitterMod, only : litter_type use PRTGenericMod, only : num_elements use PRTGenericMod, only : element_list + use PRTParametersMod, only : prt_params + use EDTypesMod, only : nocomp_bareground use EDParamsMod, only : nlevleaf, nclmax, maxpft use FatesConstantsMod, only : n_dbh_bins, n_dist_types use FatesConstantsMod, only : t_water_freeze_k_1atm From 9c87fdde030c6222e60cf4796a9580de60f338d7 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Mon, 18 Mar 2024 09:11:21 -0600 Subject: [PATCH 05/27] update use --- biogeochem/FatesPatchMod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/biogeochem/FatesPatchMod.F90 b/biogeochem/FatesPatchMod.F90 index 374529f87d..f7511d08d3 100644 --- a/biogeochem/FatesPatchMod.F90 +++ b/biogeochem/FatesPatchMod.F90 @@ -17,7 +17,7 @@ module FatesPatchMod use PRTGenericMod, only : num_elements use PRTGenericMod, only : element_list use PRTParametersMod, only : prt_params - use EDTypesMod, only : nocomp_bareground + use FatesConstantsMod, only : nocomp_bareground use EDParamsMod, only : nlevleaf, nclmax, maxpft use FatesConstantsMod, only : n_dbh_bins, n_dist_types use FatesConstantsMod, only : t_water_freeze_k_1atm From ba540b0476f423dca4dc3189a3ea833420560f6c Mon Sep 17 00:00:00 2001 From: adrifoster Date: Mon, 18 Mar 2024 09:13:38 -0600 Subject: [PATCH 06/27] add itrue --- biogeochem/FatesPatchMod.F90 | 1 + 1 file changed, 1 insertion(+) diff --git a/biogeochem/FatesPatchMod.F90 b/biogeochem/FatesPatchMod.F90 index f7511d08d3..605931b851 100644 --- a/biogeochem/FatesPatchMod.F90 +++ b/biogeochem/FatesPatchMod.F90 @@ -6,6 +6,7 @@ module FatesPatchMod use FatesConstantsMod, only : primaryland, secondaryland use FatesConstantsMod, only : n_landuse_cats use FatesConstantsMod, only : TRS_regeneration + use FatesConstantsMod, only : itrue use FatesGlobals, only : fates_log use FatesGlobals, only : endrun => fates_endrun use FatesUtilsMod, only : check_hlm_list From c70fd79ff5ce396663ed6db72aa6527d011a5498 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Mon, 18 Mar 2024 13:27:45 -0600 Subject: [PATCH 07/27] create site methods for calculating tree/grass fraction --- biogeochem/FatesPatchMod.F90 | 6 ++--- fire/SFMainMod.F90 | 51 ++++++++++++++---------------------- main/EDTypesMod.F90 | 39 +++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 34 deletions(-) diff --git a/biogeochem/FatesPatchMod.F90 b/biogeochem/FatesPatchMod.F90 index 605931b851..8a498bbf0e 100644 --- a/biogeochem/FatesPatchMod.F90 +++ b/biogeochem/FatesPatchMod.F90 @@ -647,9 +647,9 @@ subroutine UpdateTreeGrassArea(this) end if currentCohort => currentCohort%shorter end do - - this%total_tree_area = tree_area - this%total_grass_area = grass_area + + this%total_tree_area = min(tree_area, this%area) + this%total_grass_area = min(grass_area, this%area) end if end subroutine UpdateTreeGrassArea diff --git a/fire/SFMainMod.F90 b/fire/SFMainMod.F90 index bcfe6abae8..7f8a6ad31b 100644 --- a/fire/SFMainMod.F90 +++ b/fire/SFMainMod.F90 @@ -328,25 +328,32 @@ end subroutine charecteristics_of_fuel !--------------------------------------------------------------------------------------- - subroutine wind_effect (currentSite, bc_in) + subroutine wind_effect(currentSite, bc_in) ! ! DESCRIPTION: ! Calculates effective windspeed based on vegetation characteristics + ! Currently we use tree and grass fraction averaged over whole grid (site) to + ! prevent extreme divergence use FatesConstantsMod, only : sec_per_min + use EDTypesMod, only : CalculateTreeGrassArea + + ! CONSTANTS: + real(r8), parameter :: wind_atten_treed = 0.4_r8 ! wind attenuation factor for tree fraction + real(r8), parameter :: wind_atten_grass = 0.6_r8 ! wind attenuation factor for grass fraction + ! ARGUMENTS: type(ed_site_type), intent(inout), target :: currentSite ! site object type(bc_in_type), intent(in) :: bc_in ! BC in object ! LOCALS: - type(fates_patch_type) , pointer :: currentPatch ! patch object - type(fates_cohort_type), pointer :: currentCohort ! cohort object - real(r8) :: total_grass_area ! total grass area (patch-level) [m2] - real(r8) :: tree_fraction ! site-level tree fraction [0-1] - real(r8) :: grass_fraction ! site-level grass fraction [0-1] - real(r8) :: bare_fraction ! site-level bare ground fraction [0-1] - integer :: iofp ! index of oldest fates patch + type(fates_patch_type), pointer :: currentPatch ! patch object + real(r8) :: total_grass_area ! total grass area (patch-level) [m2] + real(r8) :: tree_fraction ! site-level tree fraction [0-1] + real(r8) :: grass_fraction ! site-level grass fraction [0-1] + real(r8) :: bare_fraction ! site-level bare ground fraction [0-1] + integer :: iofp ! index of oldest fates patch currentPatch => currentSite%oldest_patch @@ -360,34 +367,16 @@ subroutine wind_effect (currentSite, bc_in) iofp = currentPatch%patchno currentSite%wind = bc_in%wind24_pa(iofp)*sec_per_min ! Convert to m/min for SPITFIRE - ! influence of wind speed, corrected for surface roughness - ! averaged over the whole grid cell to prevent extreme divergence - tree_fraction = 0.0_r8 - grass_fraction = 0.0_r8 - currentPatch => currentSite%oldest_patch - do while(associated(currentPatch)) - if (currentPatch%nocomp_pft_label /= nocomp_bareground) then - call currentPatch%UpdateTreeGrassArea() - tree_fraction = tree_fraction + min(currentPatch%area, currentPatch%total_tree_area)/AREA - grass_fraction = grass_fraction + min(currentPatch%area, currentPatch%total_grass_area)/AREA - end if - currentPatch => currentPatch%younger - end do - - ! if cover > 1.0, then the grasses are under the trees - grass_fraction = min(grass_fraction, 1.0_r8 - tree_fraction) - bare_fraction = 1.0_r8 - tree_fraction - grass_fraction + ! calculate site-level tree, grass, and bare fraction + call CalculateTreeGrassArea(currentPatch, tree_fraction, grass_fraction, bare_fraction) + ! calculate effective wind speed currentPatch => currentSite%oldest_patch do while(associated(currentPatch)) - if (currentPatch%nocomp_pft_label /= nocomp_bareground) then - currentPatch%total_tree_area = min(currentPatch%total_tree_area, currentPatch%area) - ! This is very random... Let's update this to be MOST/related to surface roughness - ! this should be tied to tree height - currentPatch%effect_wspeed = currentSite%wind*(tree_fraction*0.4_r8 + (grass_fraction + bare_fraction)*0.6_r8) + currentPatch%effect_wspeed = currentSite%wind*(tree_fraction*wind_atten_treed + & + (grass_fraction + bare_fraction)*wind_atten_grass) end if - currentPatch => currentPatch%younger end do diff --git a/main/EDTypesMod.F90 b/main/EDTypesMod.F90 index c3f71d6ff8..b56300f68f 100644 --- a/main/EDTypesMod.F90 +++ b/main/EDTypesMod.F90 @@ -452,6 +452,7 @@ module EDTypesMod ! Make public necessary subroutines and functions public :: dump_site + public :: CalculateTreeGrassArea contains @@ -502,6 +503,44 @@ end subroutine ZeroMassBalFlux ! ===================================================================================== + subroutine CalculateTreeGrassArea(csite, tree_fraction, grass_fraction, bare_fraction) + ! + ! DESCRIPTION: + ! Calculates total grass and tree area for a site + + use FatesConstantsMod, only : nocomp_bareground + + ! ARGUMENTS: + type(ed_site_type), intent(in) :: csite + real(r8), intent(out) :: tree_fraction ! total site tree fraction + real(r8), intent(out) :: grass_fraction ! total site grass fraction + real(r8), intent(out) :: bare_fraction ! total site bare fraction + + ! LOCALS: + type(fates_patch_type), pointer :: currentPatch ! patch object + + + tree_fraction = 0.0_r8 + grass_fraction = 0.0_r8 + + currentPatch => currentSite%oldest_patch + do while(associated(currentPatch)) + if (currentPatch%nocomp_pft_label /= nocomp_bareground) then + call currentPatch%UpdateTreeGrassArea() + tree_fraction = tree_fraction + currentPatch%total_tree_area/AREA + grass_fraction = grass_fraction + currentPatch%total_grass_area/AREA + end if + currentPatch => currentPatch%younger + end do + + ! if cover > 1.0, grasses are under the trees + grass_fraction = min(grass_fraction, 1.0_r8 - tree_fraction) + bare_fraction = 1.0_r8 - tree_fraction - grass_fraction + + end subroutine CalculateTreeGrassArea + + !--------------------------------------------------------------------------------------- + subroutine dump_site(csite) type(ed_site_type),intent(in),target :: csite From 1350a0f74c66ab97eae3baf39eef2989d8229f9f Mon Sep 17 00:00:00 2001 From: adrifoster Date: Mon, 18 Mar 2024 14:25:52 -0600 Subject: [PATCH 08/27] get rid of separate wind effect method --- fire/SFFireWeatherMod.F90 | 39 ++++++- fire/SFMainMod.F90 | 107 +++++++----------- fire/SFNesterovMod.F90 | 2 +- .../fire_weather_test/test_FireWeather.pf | 43 ++++++- main/EDTypesMod.F90 | 15 ++- 5 files changed, 125 insertions(+), 81 deletions(-) diff --git a/fire/SFFireWeatherMod.F90 b/fire/SFFireWeatherMod.F90 index e39834ad1e..11b8602fa4 100644 --- a/fire/SFFireWeatherMod.F90 +++ b/fire/SFFireWeatherMod.F90 @@ -6,27 +6,64 @@ module SFFireWeatherMod private type, abstract, public :: fire_weather + real(r8) :: fire_weather_index ! fire weather index + real(r8) :: effective_windspeed ! effective wind speed, corrected for by tree/grass cover [m/min] + contains + procedure(initialize_fire_weather), public, deferred :: Init - procedure(update_fire_weather), public, deferred :: Update + procedure(update_fire_weather), public, deferred :: UpdateIndex + procedure, public :: UpdateEffectiveWindSpeed + end type fire_weather abstract interface subroutine initialize_fire_weather(this) + import :: fire_weather + class(fire_weather), intent(inout) :: this + end subroutine initialize_fire_weather subroutine update_fire_weather(this, temp_C, precip, rh, wind) + use FatesConstantsMod, only : r8 => fates_r8 + import :: fire_weather + class(fire_weather), intent(inout) :: this real(r8), intent(in) :: temp_C real(r8), intent(in) :: precip real(r8), intent(in) :: rh real(r8), intent(in) :: wind + end subroutine update_fire_weather end interface + contains + + subroutine UpdateEffectiveWindSpeed(this, wind_speed, tree_fraction, grass_fraction, & + bare_fraction) + ! + ! DESCRIPTION: + ! Calculates effective wind speed + + ! CONSTANTS: + real(r8), parameter :: wind_atten_treed = 0.4_r8 ! wind attenuation factor for tree fraction + real(r8), parameter :: wind_atten_grass = 0.6_r8 ! wind attenuation factor for grass fraction + + ! ARGUMENTS + class(fire_weather), intent(inout) :: this ! fire weather class + real(r8), intent(in) :: wind_speed ! wind speed [m/min] + real(r8), intent(in) :: tree_fraction ! tree fraction [0-1] + real(r8), intent(in) :: grass_fraction ! grass fraction [0-1] + real(r8), intent(in) :: bare_fraction ! bare ground fraction [0-1] + + this%effective_windspeed = wind_speed*(tree_fraction*wind_atten_treed + & + (grass_fraction + bare_fraction)*wind_atten_grass) + + end subroutine UpdateEffectiveWindSpeed + end module SFFireWeatherMod \ No newline at end of file diff --git a/fire/SFMainMod.F90 b/fire/SFMainMod.F90 index 7f8a6ad31b..cb4c7f6e01 100644 --- a/fire/SFMainMod.F90 +++ b/fire/SFMainMod.F90 @@ -55,7 +55,6 @@ module SFMainMod public :: charecteristics_of_fuel public :: rate_of_spread public :: ground_fuel_consumption - public :: wind_effect public :: area_burnt_intensity public :: crown_scorching public :: crown_damage @@ -94,7 +93,6 @@ subroutine fire_model(currentSite, bc_in) if (hlm_spitfire_mode > hlm_sf_nofire_def) then call UpdateFireWeather(currentSite, bc_in) - call wind_effect(currentSite, bc_in) call charecteristics_of_fuel(currentSite) call rate_of_spread(currentSite) call ground_fuel_consumption(currentSite) @@ -112,23 +110,33 @@ end subroutine fire_model subroutine UpdateFireWeather(currentSite, bc_in) ! ! DESCRIPTION: - ! Updates the site's fire weather index + ! Updates the site's fire weather index and calculates effective windspeed based on + ! vegetation characteristics + ! Currently we use tree and grass fraction averaged over whole grid (site) to + ! prevent extreme divergence use SFParamsMod, only : SF_val_fdi_a, SF_val_fdi_b use FatesConstantsMod, only : tfrz => t_water_freeze_k_1atm - use FatesConstantsMod, only : sec_per_day + use FatesConstantsMod, only : sec_per_day, sec_per_min + + ! CONSTANTS: + real(r8), parameter :: wind_atten_treed = 0.4_r8 ! wind attenuation factor for tree fraction + real(r8), parameter :: wind_atten_grass = 0.6_r8 ! wind attenuation factor for grass fraction ! ARGUMENTS: type(ed_site_type), intent(inout), target :: currentSite type(bc_in_type), intent(in) :: bc_in ! LOCALS: - type(fates_patch_type), pointer :: currentPatch ! patch object - real(r8) :: temp_C ! daily averaged temperature [deg C] - real(r8) :: precip ! daily precip [mm/day] - real(r8) :: rh ! daily relative humidity [%] - real(r8) :: wind ! wind speed [m/s] - integer :: iofp ! index of oldest the fates patch + type(fates_patch_type), pointer :: currentPatch ! patch object + real(r8) :: temp_C ! daily averaged temperature [deg C] + real(r8) :: precip ! daily precip [mm/day] + real(r8) :: rh ! daily relative humidity [%] + real(r8) :: wind ! wind speed [m/s] + real(r8) :: tree_fraction ! site-level tree fraction [0-1] + real(r8) :: grass_fraction ! site-level grass fraction [0-1] + real(r8) :: bare_fraction ! site-level bare ground fraction [0-1] + integer :: iofp ! index of oldest the fates patch ! NOTE that the boundary conditions of temperature, precipitation and relative humidity ! are available at the patch level. We are currently using a simplification where the whole site @@ -139,7 +147,7 @@ subroutine UpdateFireWeather(currentSite, bc_in) ! If the oldest patch is a bareground patch (i.e. nocomp mode is on) use the first vegetated patch ! for the iofp index (i.e. the next younger patch) - if(currentPatch%nocomp_pft_label .eq. nocomp_bareground)then + if (currentPatch%nocomp_pft_label .eq. nocomp_bareground) then currentPatch => currentPatch%younger endif @@ -149,8 +157,27 @@ subroutine UpdateFireWeather(currentSite, bc_in) rh = bc_in%relhumid24_pa(iofp) wind = bc_in%wind24_pa(iofp) + ! convert to m/min + currentSite%wind = wind*sec_per_min + ! update fire weather index - call currentSite%fireWeather%Update(temp_C, precip, rh, wind) + call currentSite%fireWeather%UpdateIndex(temp_C, precip, rh, wind) + + ! calculate site-level tree, grass, and bare fraction + call CalculateTreeGrassArea(currentSite, tree_fraction, grass_fraction, bare_fraction) + + ! update effective wind speed + call currentSite%fireWeather%UpdateEffectiveWindSpeed(wind*sec_per_min, tree_fraction, & + grass_fraction, bare_fraction) + + ! test for now + currentPatch => currentSite%oldest_patch + do while (associated(currentPatch)) + if (currentPatch%nocomp_pft_label /= nocomp_bareground) then + currentPatch%effect_wspeed = currentSite%fireWeather%effective_windspeed + end if + currentPatch => currentPatch%younger + end do end subroutine UpdateFireWeather @@ -326,63 +353,7 @@ subroutine charecteristics_of_fuel ( currentSite ) end subroutine charecteristics_of_fuel - !--------------------------------------------------------------------------------------- - subroutine wind_effect(currentSite, bc_in) - ! - ! DESCRIPTION: - ! Calculates effective windspeed based on vegetation characteristics - ! Currently we use tree and grass fraction averaged over whole grid (site) to - ! prevent extreme divergence - - use FatesConstantsMod, only : sec_per_min - use EDTypesMod, only : CalculateTreeGrassArea - - ! CONSTANTS: - real(r8), parameter :: wind_atten_treed = 0.4_r8 ! wind attenuation factor for tree fraction - real(r8), parameter :: wind_atten_grass = 0.6_r8 ! wind attenuation factor for grass fraction - - - ! ARGUMENTS: - type(ed_site_type), intent(inout), target :: currentSite ! site object - type(bc_in_type), intent(in) :: bc_in ! BC in object - - ! LOCALS: - type(fates_patch_type), pointer :: currentPatch ! patch object - real(r8) :: total_grass_area ! total grass area (patch-level) [m2] - real(r8) :: tree_fraction ! site-level tree fraction [0-1] - real(r8) :: grass_fraction ! site-level grass fraction [0-1] - real(r8) :: bare_fraction ! site-level bare ground fraction [0-1] - integer :: iofp ! index of oldest fates patch - - currentPatch => currentSite%oldest_patch - - ! If the oldest patch is a bareground patch (i.e. nocomp mode is on) use the first vegetated patch - ! for the iofp index (i.e. the next younger patch) - if (currentPatch%nocomp_pft_label == nocomp_bareground) then - currentPatch => currentPatch%younger - end if - - ! note - this is a patch-level wind speed, which probably won't have much impact - iofp = currentPatch%patchno - currentSite%wind = bc_in%wind24_pa(iofp)*sec_per_min ! Convert to m/min for SPITFIRE - - ! calculate site-level tree, grass, and bare fraction - call CalculateTreeGrassArea(currentPatch, tree_fraction, grass_fraction, bare_fraction) - - ! calculate effective wind speed - currentPatch => currentSite%oldest_patch - do while(associated(currentPatch)) - if (currentPatch%nocomp_pft_label /= nocomp_bareground) then - currentPatch%effect_wspeed = currentSite%wind*(tree_fraction*wind_atten_treed + & - (grass_fraction + bare_fraction)*wind_atten_grass) - end if - currentPatch => currentPatch%younger - end do - - end subroutine wind_effect - - !--------------------------------------------------------------------------------------- subroutine rate_of_spread ( currentSite ) !*****************************************************************. diff --git a/fire/SFNesterovMod.F90 b/fire/SFNesterovMod.F90 index 860a2ec6f9..59bac56df7 100644 --- a/fire/SFNesterovMod.F90 +++ b/fire/SFNesterovMod.F90 @@ -11,7 +11,7 @@ module SFNesterovMod contains procedure, public :: Init => init_nesterov_fire_weather - procedure, public :: Update => update_nesterov_index + procedure, public :: UpdateIndex => update_nesterov_index procedure :: calc_nesterov_index end type nesterov_index diff --git a/fire/test/fire_weather_test/test_FireWeather.pf b/fire/test/fire_weather_test/test_FireWeather.pf index 21338b5f90..58f67a33da 100644 --- a/fire/test/fire_weather_test/test_FireWeather.pf +++ b/fire/test/fire_weather_test/test_FireWeather.pf @@ -17,8 +17,10 @@ module test_FireWeather class(fire_weather), allocatable :: fireWeatherNesterov contains + procedure :: setUp procedure :: tearDown + end type TestFireWeather real(r8), parameter :: tol = 1.e-13_r8 @@ -26,16 +28,24 @@ module test_FireWeather contains subroutine setUp(this) + class(TestFireWeather), intent(inout) :: this + allocate(nesterov_index :: this%fireWeatherNesterov) + call this%fireWeatherNesterov%Init() + SF_val_fdi_a = 17.62_r8 SF_val_fdi_b = 243.12_r8 + end subroutine setUp subroutine tearDown(this) + class(TestFireWeather), intent(inout) :: this + if (allocated(this%fireWeatherNesterov)) deallocate(this%fireWeatherNesterov) + end subroutine tearDown @Test @@ -43,9 +53,11 @@ module test_FireWeather ! test that over 3 mm of rain is 0.0 class(TestFireWeather), intent(inout) :: this ! fire weather object - call this%fireWeatherNesterov%Update(25.0_r8, 3.1_r8, 10.0_r8, 0.0_r8) + call this%fireWeatherNesterov%UpdateIndex(25.0_r8, 3.1_r8, 10.0_r8, 0.0_r8) + @assertEqual(this%fireWeatherNesterov%fire_weather_index, 0.0_r8, tolerance=tol) this%fireWeatherNesterov%fire_weather_index = 0.0_r8 + end subroutine zero_NI_rain @Test @@ -53,9 +65,11 @@ module test_FireWeather ! test that at 3 mm is over zero class(TestFireWeather), intent(inout) :: this ! fire weather object - call this%fireWeatherNesterov%Update(25.0_r8, 3.0_r8, 10.0_r8, 0.0_r8) + call this%fireWeatherNesterov%UpdateIndex(25.0_r8, 3.0_r8, 10.0_r8, 0.0_r8) + @assertGreaterThan(this%fireWeatherNesterov%fire_weather_index, 0.0_r8, tolerance=tol) this%fireWeatherNesterov%fire_weather_index = 0.0_r8 + end subroutine NI_rain_min @Test @@ -63,8 +77,31 @@ module test_FireWeather ! test that NI is not negative class(TestFireWeather), intent(inout) :: this ! fire weather object - call this%fireWeatherNesterov%Update(-30.0_r8, 0.0_r8, 99.0_r8, 0.0_r8) + call this%fireWeatherNesterov%UpdateIndex(-30.0_r8, 0.0_r8, 99.0_r8, 0.0_r8) @assertEqual(this%fireWeatherNesterov%fire_weather_index, 0.0_r8, tolerance=tol) + this%fireWeatherNesterov%fire_weather_index = 0.0_r8 + end subroutine NI_not_negative + @Test + subroutine wind_zero(this) + ! test that effective wind speed is zero when wind speed is zero + class(TestFireWeather), intent(inout) :: this ! fire weather object + + call this%fireWeatherNesterov%UpdateEffectiveWindSpeed(0.0_r8, 0.5_r8, 0.5_r8, 0.0_r8) + @assertEqual(this%fireWeatherNesterov%effective_windspeed, 0.0_r8, tolerance=tol) + + end subroutine wind_zero + + @Test + subroutine wind_attenuated(this) + ! test that effective wind speed is less than input wind speed + class(TestFireWeather), intent(inout) :: this ! fire weather object + real(r8) :: wind_speed = 50.0_r8 ! wind speed [m/min] + + call this%fireWeatherNesterov%UpdateEffectiveWindSpeed(wind_speed, 0.5_r8, 0.5_r8, 0.0_r8) + @assertLessThan(this%fireWeatherNesterov%effective_windspeed, wind_speed, tolerance=tol) + + end subroutine wind_attenuated + end module test_FireWeather \ No newline at end of file diff --git a/main/EDTypesMod.F90 b/main/EDTypesMod.F90 index b56300f68f..dadfc88799 100644 --- a/main/EDTypesMod.F90 +++ b/main/EDTypesMod.F90 @@ -506,24 +506,23 @@ end subroutine ZeroMassBalFlux subroutine CalculateTreeGrassArea(csite, tree_fraction, grass_fraction, bare_fraction) ! ! DESCRIPTION: - ! Calculates total grass and tree area for a site + ! Calculates total grass, tree, and bare fractions for a site use FatesConstantsMod, only : nocomp_bareground ! ARGUMENTS: - type(ed_site_type), intent(in) :: csite - real(r8), intent(out) :: tree_fraction ! total site tree fraction - real(r8), intent(out) :: grass_fraction ! total site grass fraction - real(r8), intent(out) :: bare_fraction ! total site bare fraction + type(ed_site_type), intent(inout) :: csite ! site object + real(r8), intent(out) :: tree_fraction ! total site tree fraction + real(r8), intent(out) :: grass_fraction ! total site grass fraction + real(r8), intent(out) :: bare_fraction ! total site bare fraction ! LOCALS: - type(fates_patch_type), pointer :: currentPatch ! patch object + type(fates_patch_type), pointer :: currentPatch ! patch object - tree_fraction = 0.0_r8 grass_fraction = 0.0_r8 - currentPatch => currentSite%oldest_patch + currentPatch => csite%oldest_patch do while(associated(currentPatch)) if (currentPatch%nocomp_pft_label /= nocomp_bareground) then call currentPatch%UpdateTreeGrassArea() From b68e48f58f99aca54a45a056c02a067611ca7d74 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Mon, 18 Mar 2024 15:24:22 -0600 Subject: [PATCH 09/27] update use statements --- fire/SFMainMod.F90 | 1 + fire/SFNesterovMod.F90 | 31 ++++++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/fire/SFMainMod.F90 b/fire/SFMainMod.F90 index cb4c7f6e01..8fb4550d59 100644 --- a/fire/SFMainMod.F90 +++ b/fire/SFMainMod.F90 @@ -118,6 +118,7 @@ subroutine UpdateFireWeather(currentSite, bc_in) use SFParamsMod, only : SF_val_fdi_a, SF_val_fdi_b use FatesConstantsMod, only : tfrz => t_water_freeze_k_1atm use FatesConstantsMod, only : sec_per_day, sec_per_min + use EDTypesMod, only : CalculateTreeGrassArea ! CONSTANTS: real(r8), parameter :: wind_atten_treed = 0.4_r8 ! wind attenuation factor for tree fraction diff --git a/fire/SFNesterovMod.F90 b/fire/SFNesterovMod.F90 index 59bac56df7..b6e67e442d 100644 --- a/fire/SFNesterovMod.F90 +++ b/fire/SFNesterovMod.F90 @@ -1,6 +1,8 @@ module SFNesterovMod use FatesConstantsMod, only : r8 => fates_r8 + use FatesGlobals, only : endrun => fates_endrun + use FatesGlobals, only : fates_log use SFFireWeatherMod, only : fire_weather implicit none @@ -62,25 +64,44 @@ end subroutine update_nesterov_index real(r8) function calc_nesterov_index(this, temp_C, precip, rh) ! ! DESCRIPTION: - ! Calculates current day's Nesterov Index for a given input values + ! Calculates current day's Nesterov Index for given input values - use SFParamsMod, only : SF_val_fdi_a, SF_val_fdi_b + use SFParamsMod, only : SF_val_fdi_a, SF_val_fdi_b + use FatesConstantsMod, only : nearzero ! ARGUMENTS: class(nesterov_index), intent(in) :: this ! nesterov index extended class real(r8), intent(in) :: temp_C ! daily averaged temperature [degrees C] real(r8), intent(in) :: precip ! daily precipitation [mm] - real(r8), intent(in) :: rh ! daily relative humidity [rh] + real(r8), intent(in) :: rh ! daily relative humidity [%] ! LOCALS: real(r8) :: yipsolon ! intermediate variable for dewpoint calculation real(r8) :: dewpoint ! dewpoint - if (precip > min_precip_thresh) then ! NI is 0.0 if it rains + ! error checking, if temperature equals -1.0*SF_val_fdi_b parameter, we get a divide + ! by zero + if (abs(SF_val_fdi_b + temp_C) < nearzero) then + write(fates_log(), *) 'SF_val_fdi_b: (', SF_val_fdi_b, ') + temp_C: (', temp_C, ') == 0.0 - divide by zero imminent!' + write(fates_log(), *) 'SF_val_fdi_b should be updated using the parameter file.' + write(fates_log(), *) 'Otherwise check values for temp_C' + call endrun(msg=errMsg(sourcefile, __LINE__)) + end if + + if (precip > min_precip_thresh) then ! NI is 0.0 if it rainsf calc_nesterov_index = 0.0_r8 else ! Calculate dewpoint temperature - yipsolon = (SF_val_fdi_a*temp_C)/(SF_val_fdi_b + temp_C) + log(max(1.0_r8, rh)/100.0_r8) + yipsolon = (SF_val_fdi_a*temp_C)/(SF_val_fdi_b + temp_C) + log(max(1.0_r8, rh)/100.0_r8) + + ! error checking, if SF_val_fdi_a parameter - ypisolon == 0, we get a divide + ! by zero + if (abs(SF_val_fdi_a - yipsolon) < nearzero) then + write(fates_log(), *) 'SF_val_fdi_a: (', SF_val_fdi_a, ') - yipsolon: (', yipsolon, ') == 0.0 - divide by zero imminent!' + write(fates_log(), *) 'SF_val_fdi_a should be updated using the parameter file.' + write(fates_log(), *) 'Otherwise check values for yipsolon' + call endrun(msg=errMsg(sourcefile, __LINE__)) + end if dewpoint = (SF_val_fdi_b*yipsolon)/(SF_val_fdi_a - yipsolon) ! Nesterov 1968. Eq 5, Thonicke et al. 2010 From 7038609d5180976cd9676e929f40c7c2b5b55064 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Mon, 18 Mar 2024 15:28:14 -0600 Subject: [PATCH 10/27] add sourcefile --- fire/SFMainMod.F90 | 4 ++-- fire/SFNesterovMod.F90 | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fire/SFMainMod.F90 b/fire/SFMainMod.F90 index 8fb4550d59..f7cec37df4 100644 --- a/fire/SFMainMod.F90 +++ b/fire/SFMainMod.F90 @@ -9,7 +9,7 @@ module SFMainMod use FatesConstantsMod , only : itrue, ifalse use FatesConstantsMod , only : pi_const use FatesConstantsMod , only : nocomp_bareground - use FatesInterfaceTypesMod , only : hlm_masterproc ! 1= master process, 0=not master process + use FatesInterfaceTypesMod, only : hlm_masterproc ! 1= master process, 0=not master process use EDTypesMod , only : numWaterMem use FatesGlobals , only : fates_log use FatesInterfaceTypesMod, only : hlm_spitfire_mode @@ -148,7 +148,7 @@ subroutine UpdateFireWeather(currentSite, bc_in) ! If the oldest patch is a bareground patch (i.e. nocomp mode is on) use the first vegetated patch ! for the iofp index (i.e. the next younger patch) - if (currentPatch%nocomp_pft_label .eq. nocomp_bareground) then + if (currentPatch%nocomp_pft_label == nocomp_bareground) then currentPatch => currentPatch%younger endif diff --git a/fire/SFNesterovMod.F90 b/fire/SFNesterovMod.F90 index b6e67e442d..2d0d966ece 100644 --- a/fire/SFNesterovMod.F90 +++ b/fire/SFNesterovMod.F90 @@ -8,6 +8,8 @@ module SFNesterovMod implicit none private + character(len=*), parameter, private :: sourcefile = __FILE__ + type, public, extends(fire_weather) :: nesterov_index contains From e272c38ca5b8c4a9cf5763de4ea2cf4b3cb68373 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Mon, 18 Mar 2024 16:22:42 -0600 Subject: [PATCH 11/27] trying to get exception test to work --- CMakeLists.txt | 3 ++ fire/SFNesterovMod.F90 | 3 +- .../fire_weather_test/test_FireWeather.pf | 16 +++++++++ main/FatesGlobals.F90 | 2 +- unit_test_shr/CMakeLists.txt | 5 +++ unit_test_shr/unittestUtils.F90 | 33 +++++++++++++++++++ 6 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 unit_test_shr/CMakeLists.txt create mode 100644 unit_test_shr/unittestUtils.F90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 00544cc654..cbfa8c92db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,9 @@ add_subdirectory(${HLM_ROOT}/src/fates/biogeochem fates_biogeochem) add_subdirectory(${HLM_ROOT}/src/fates/fire fates_fire) add_subdirectory(${HLM_ROOT}/src/fates/radiation fates_radiation) +# Add general unit test directories (stubbed out files, etc.) +add_subdirectory(${HLM_ROOT}/src/fates/unit_test_shr) + # Remove shr_mpi_mod from share_sources. # This is needed because we want to use the mock shr_mpi_mod in place of the real one # diff --git a/fire/SFNesterovMod.F90 b/fire/SFNesterovMod.F90 index 2d0d966ece..706eae5e4f 100644 --- a/fire/SFNesterovMod.F90 +++ b/fire/SFNesterovMod.F90 @@ -4,6 +4,7 @@ module SFNesterovMod use FatesGlobals, only : endrun => fates_endrun use FatesGlobals, only : fates_log use SFFireWeatherMod, only : fire_weather + use shr_log_mod, only : errMsg => shr_log_errMsg implicit none private @@ -87,7 +88,7 @@ real(r8) function calc_nesterov_index(this, temp_C, precip, rh) write(fates_log(), *) 'SF_val_fdi_b: (', SF_val_fdi_b, ') + temp_C: (', temp_C, ') == 0.0 - divide by zero imminent!' write(fates_log(), *) 'SF_val_fdi_b should be updated using the parameter file.' write(fates_log(), *) 'Otherwise check values for temp_C' - call endrun(msg=errMsg(sourcefile, __LINE__)) + call endrun(msg='') end if if (precip > min_precip_thresh) then ! NI is 0.0 if it rainsf diff --git a/fire/test/fire_weather_test/test_FireWeather.pf b/fire/test/fire_weather_test/test_FireWeather.pf index 58f67a33da..8c5e12af08 100644 --- a/fire/test/fire_weather_test/test_FireWeather.pf +++ b/fire/test/fire_weather_test/test_FireWeather.pf @@ -7,6 +7,7 @@ module test_FireWeather use SFFireWeatherMod, only : fire_weather use SFNesterovMod, only : nesterov_index use SFParamsMod, only : SF_val_fdi_a, SF_val_fdi_b + use unittestUtils, only : endrun_msg use funit implicit none @@ -83,6 +84,19 @@ module test_FireWeather end subroutine NI_not_negative + @Test + subroutine catch_div_zero(this) + ! test that the first divide by zero is caught + class(TestFireWeather), intent(inout) :: this ! fire weather object + character(len=256) :: expected_msg + + call this%fireWeatherNesterov%UpdateIndex(-1.0*SF_val_fdi_b, 0.0_r8, 20.0_r8, 0.0_r8) + expected_msg = endrun_msg("ENDRUN:divide by zero") + @assertExceptionRaised(expected_msg) + this%fireWeatherNesterov%fire_weather_index = 0.0_r8 + + end subroutine catch_div_zero + @Test subroutine wind_zero(this) ! test that effective wind speed is zero when wind speed is zero @@ -104,4 +118,6 @@ module test_FireWeather end subroutine wind_attenuated + ! 'ERROR in '//trim(file)//' at line '//toString(line) + end module test_FireWeather \ No newline at end of file diff --git a/main/FatesGlobals.F90 b/main/FatesGlobals.F90 index 299fb5d5fb..e27d679ea1 100644 --- a/main/FatesGlobals.F90 +++ b/main/FatesGlobals.F90 @@ -94,7 +94,7 @@ subroutine fates_endrun(msg) !----------------------------------------------------------------------- write(fates_log(),*)'ENDRUN:', msg - call shr_sys_abort() + call shr_sys_abort(msg) end subroutine fates_endrun diff --git a/unit_test_shr/CMakeLists.txt b/unit_test_shr/CMakeLists.txt new file mode 100644 index 0000000000..fd79fc097e --- /dev/null +++ b/unit_test_shr/CMakeLists.txt @@ -0,0 +1,5 @@ +list(APPEND fates_sources + unittestUtils.F90 + ) + +sourcelist_to_parent(fates_sources) diff --git a/unit_test_shr/unittestUtils.F90 b/unit_test_shr/unittestUtils.F90 new file mode 100644 index 0000000000..ab79cd8bd0 --- /dev/null +++ b/unit_test_shr/unittestUtils.F90 @@ -0,0 +1,33 @@ +module unittestUtils + + ! Miscellaneous utilities to aid unit testing + + implicit none + private + + public :: endrun_msg ! Gives the message thrown by shr_abort_abort, given a call to endrun(msg) + +contains + + !----------------------------------------------------------------------- + function endrun_msg(msg) + ! + ! !DESCRIPTION: + ! Gives the message thrown by shr_abort_abort, given a call to fates_endrun(msg) + ! + ! !USES: + ! + ! !ARGUMENTS: + character(len=:), allocatable :: endrun_msg ! function result + character(len=*), intent(in) :: msg + ! + ! !LOCAL VARIABLES: + + character(len=*), parameter :: subname = 'endrun_msg' + !----------------------------------------------------------------------- + + endrun_msg = 'ENDRUN:'//trim(msg) + + end function endrun_msg + +end module unittestUtils From 1cf23593bd49a6c4cd1ec88e76c505db581e655b Mon Sep 17 00:00:00 2001 From: adrifoster Date: Mon, 18 Mar 2024 18:13:03 -0600 Subject: [PATCH 12/27] remove effective wind speed as patch variable --- biogeochem/EDPatchDynamicsMod.F90 | 1 - biogeochem/FatesPatchMod.F90 | 3 --- fire/SFMainMod.F90 | 20 ++++---------------- main/EDInitMod.F90 | 1 - main/FatesHistoryInterfaceMod.F90 | 2 +- 5 files changed, 5 insertions(+), 22 deletions(-) diff --git a/biogeochem/EDPatchDynamicsMod.F90 b/biogeochem/EDPatchDynamicsMod.F90 index 140c108d66..998bacc1d1 100644 --- a/biogeochem/EDPatchDynamicsMod.F90 +++ b/biogeochem/EDPatchDynamicsMod.F90 @@ -2759,7 +2759,6 @@ subroutine fuse_2_patches(csite, dp, rp) rp%fuel_sav = (dp%fuel_sav*dp%area + rp%fuel_sav*rp%area) * inv_sum_area rp%fuel_mef = (dp%fuel_mef*dp%area + rp%fuel_mef*rp%area) * inv_sum_area rp%ros_front = (dp%ros_front*dp%area + rp%ros_front*rp%area) * inv_sum_area - rp%effect_wspeed = (dp%effect_wspeed*dp%area + rp%effect_wspeed*rp%area) * inv_sum_area rp%tau_l = (dp%tau_l*dp%area + rp%tau_l*rp%area) * inv_sum_area rp%fuel_frac(:) = (dp%fuel_frac(:)*dp%area + rp%fuel_frac(:)*rp%area) * inv_sum_area rp%tfc_ros = (dp%tfc_ros*dp%area + rp%tfc_ros*rp%area) * inv_sum_area diff --git a/biogeochem/FatesPatchMod.F90 b/biogeochem/FatesPatchMod.F90 index 8a498bbf0e..e45f18a8db 100644 --- a/biogeochem/FatesPatchMod.F90 +++ b/biogeochem/FatesPatchMod.F90 @@ -209,7 +209,6 @@ module FatesPatchMod ! fire spread real(r8) :: ros_front ! rate of forward spread of fire [m/min] real(r8) :: ros_back ! rate of backward spread of fire [m/min] - real(r8) :: effect_wspeed ! windspeed modified by fraction of relative grass and tree cover [m/min] real(r8) :: tau_l ! duration of lethal heating [min] real(r8) :: fi ! average fire intensity of flaming front [kJ/m/s] or [kW/m] integer :: fire ! is there a fire? [1=yes; 0=no] @@ -387,7 +386,6 @@ subroutine NanValues(this) this%litter_moisture(:) = nan this%ros_front = nan this%ros_back = nan - this%effect_wspeed = nan this%tau_l = nan this%fi = nan this%fire = fates_unset_int @@ -465,7 +463,6 @@ subroutine ZeroValues(this) this%litter_moisture(:) = 0.0_r8 this%ros_front = 0.0_r8 this%ros_back = 0.0_r8 - this%effect_wspeed = 0.0_r8 this%tau_l = 0.0_r8 this%fi = 0.0_r8 this%fd = 0.0_r8 diff --git a/fire/SFMainMod.F90 b/fire/SFMainMod.F90 index f7cec37df4..34e9f784c8 100644 --- a/fire/SFMainMod.F90 +++ b/fire/SFMainMod.F90 @@ -171,15 +171,6 @@ subroutine UpdateFireWeather(currentSite, bc_in) call currentSite%fireWeather%UpdateEffectiveWindSpeed(wind*sec_per_min, tree_fraction, & grass_fraction, bare_fraction) - ! test for now - currentPatch => currentSite%oldest_patch - do while (associated(currentPatch)) - if (currentPatch%nocomp_pft_label /= nocomp_bareground) then - currentPatch%effect_wspeed = currentSite%fireWeather%effective_windspeed - end if - currentPatch => currentPatch%younger - end do - end subroutine UpdateFireWeather !--------------------------------------------------------------------------------------- @@ -435,8 +426,6 @@ subroutine rate_of_spread ( currentSite ) if (debug) then if ( hlm_masterproc == itrue .and.debug) write(fates_log(),*) 'SF - c ',c - if ( hlm_masterproc == itrue .and.debug) write(fates_log(),*) 'SF - currentPatch%effect_wspeed ', & - currentPatch%effect_wspeed if ( hlm_masterproc == itrue .and.debug) write(fates_log(),*) 'SF - b ',b if ( hlm_masterproc == itrue .and.debug) write(fates_log(),*) 'SF - beta_ratio ',beta_ratio if ( hlm_masterproc == itrue .and.debug) write(fates_log(),*) 'SF - e ',e @@ -445,7 +434,7 @@ subroutine rate_of_spread ( currentSite ) ! Equation A5 in Thonicke et al. 2010 ! phi_wind (unitless) ! convert current_wspeed (wind at elev relevant to fire) from m/min to ft/min for Rothermel ROS eqn - phi_wind = c * ((3.281_r8*currentPatch%effect_wspeed)**b)*(beta_ratio**(-e)) + phi_wind = c * ((3.281_r8*currentSite%fireWeather%effective_windspeed)**b)*(beta_ratio**(-e)) ! ---propagating flux---- @@ -486,7 +475,6 @@ subroutine rate_of_spread ( currentSite ) else ! Equation 9. Thonicke et al. 2010. ! forward ROS in m/min currentPatch%ROS_front = (ir*xi*(1.0_r8+phi_wind)) / (currentPatch%fuel_bulkd*eps*q_ig) - ! write(fates_log(),*) 'ROS',currentPatch%ROS_front,phi_wind,currentPatch%effect_wspeed ! write(fates_log(),*) 'ros calcs',currentPatch%fuel_bulkd,ir,xi,eps,q_ig endif ! Equation 10 in Thonicke et al. 2010 @@ -710,16 +698,16 @@ subroutine area_burnt_intensity ( currentSite, bc_in ) write(fates_log(),*) 'SF AREA ',AREA endif - if ((currentPatch%effect_wspeed*m_per_min__to__km_per_hour) < 1._r8) then !16.67m/min = 1km/hr + if ((currentSite%fireWeather%effective_windspeed*m_per_min__to__km_per_hour) < 1._r8) then !16.67m/min = 1km/hr lb = 1.0_r8 else if (tree_fraction_patch > forest_grassland_lengthtobreadth_threshold) then !benchmark forest cover, Staver 2010 ! EQ 79 forest fuels (Canadian Forest Fire Behavior Prediction System Ont.Inf.Rep. ST-X-3, 1992) lb = (1.0_r8 + (8.729_r8 * & - ((1.0_r8 -(exp(-0.03_r8 * m_per_min__to__km_per_hour * currentPatch%effect_wspeed)))**2.155_r8))) + ((1.0_r8 -(exp(-0.03_r8 * m_per_min__to__km_per_hour * currentSite%fireWeather%effective_windspeed)))**2.155_r8))) else ! EQ 80 grass fuels (CFFBPS Ont.Inf.Rep. ST-X-3, 1992, but with a correction from an errata published within ! Information Report GLC-X-10 by Wotton et al., 2009 for a typo in CFFBPS Ont.Inf.Rep. ST-X-3, 1992) - lb = (1.1_r8*((m_per_min__to__km_per_hour * currentPatch%effect_wspeed)**0.464_r8)) + lb = (1.1_r8*((m_per_min__to__km_per_hour * currentSite%fireWeather%effective_windspeed)**0.464_r8)) endif endif diff --git a/main/EDInitMod.F90 b/main/EDInitMod.F90 index e33ee5e7ec..e6247ecb13 100644 --- a/main/EDInitMod.F90 +++ b/main/EDInitMod.F90 @@ -821,7 +821,6 @@ subroutine init_patches( nsites, sites, bc_in) currentPatch%fuel_sav = 0._r8 currentPatch%fuel_mef = 0._r8 currentPatch%ros_front = 0._r8 - currentPatch%effect_wspeed = 0._r8 currentPatch%tau_l = 0._r8 currentPatch%fuel_frac(:) = 0._r8 currentPatch%tfc_ros = 0._r8 diff --git a/main/FatesHistoryInterfaceMod.F90 b/main/FatesHistoryInterfaceMod.F90 index f965fa0179..063925c229 100644 --- a/main/FatesHistoryInterfaceMod.F90 +++ b/main/FatesHistoryInterfaceMod.F90 @@ -2625,7 +2625,7 @@ subroutine update_history_dyn1(this,nc,nsites,sites,bc_in) ! Update Fire Variables hio_spitfire_ros_si(io_si) = hio_spitfire_ros_si(io_si) + cpatch%ROS_front * cpatch%area * AREA_INV / sec_per_min - hio_effect_wspeed_si(io_si) = hio_effect_wspeed_si(io_si) + cpatch%effect_wspeed * cpatch%area * AREA_INV / sec_per_min + hio_effect_wspeed_si(io_si) = hio_effect_wspeed_si(io_si) + sites(s)%fireWeather%effective_windspeed * cpatch%area * AREA_INV / sec_per_min hio_tfc_ros_si(io_si) = hio_tfc_ros_si(io_si) + cpatch%TFC_ROS * cpatch%area * AREA_INV hio_fire_intensity_si(io_si) = hio_fire_intensity_si(io_si) + cpatch%FI * cpatch%area * AREA_INV * J_per_kJ hio_fire_area_si(io_si) = hio_fire_area_si(io_si) + cpatch%frac_burnt * cpatch%area * AREA_INV / sec_per_day From 6b57d41dffdc86ed635d5f465d2568eb22f0c679 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Tue, 19 Mar 2024 15:52:54 -0600 Subject: [PATCH 13/27] can't actually test for runfails --- fire/test/fire_weather_test/test_FireWeather.pf | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/fire/test/fire_weather_test/test_FireWeather.pf b/fire/test/fire_weather_test/test_FireWeather.pf index 8c5e12af08..133655d6f8 100644 --- a/fire/test/fire_weather_test/test_FireWeather.pf +++ b/fire/test/fire_weather_test/test_FireWeather.pf @@ -84,19 +84,6 @@ module test_FireWeather end subroutine NI_not_negative - @Test - subroutine catch_div_zero(this) - ! test that the first divide by zero is caught - class(TestFireWeather), intent(inout) :: this ! fire weather object - character(len=256) :: expected_msg - - call this%fireWeatherNesterov%UpdateIndex(-1.0*SF_val_fdi_b, 0.0_r8, 20.0_r8, 0.0_r8) - expected_msg = endrun_msg("ENDRUN:divide by zero") - @assertExceptionRaised(expected_msg) - this%fireWeatherNesterov%fire_weather_index = 0.0_r8 - - end subroutine catch_div_zero - @Test subroutine wind_zero(this) ! test that effective wind speed is zero when wind speed is zero From efa191bcf428207b51b19e68cd943bb2b1cd1324 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Tue, 19 Mar 2024 15:54:04 -0600 Subject: [PATCH 14/27] can't actually test for fails --- fire/test/fire_weather_test/test_FireWeather.pf | 1 - 1 file changed, 1 deletion(-) diff --git a/fire/test/fire_weather_test/test_FireWeather.pf b/fire/test/fire_weather_test/test_FireWeather.pf index 133655d6f8..9eecbcde45 100644 --- a/fire/test/fire_weather_test/test_FireWeather.pf +++ b/fire/test/fire_weather_test/test_FireWeather.pf @@ -7,7 +7,6 @@ module test_FireWeather use SFFireWeatherMod, only : fire_weather use SFNesterovMod, only : nesterov_index use SFParamsMod, only : SF_val_fdi_a, SF_val_fdi_b - use unittestUtils, only : endrun_msg use funit implicit none From df35858ec1b9d82950dcb33a89758d74099440b6 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Tue, 19 Mar 2024 15:54:34 -0600 Subject: [PATCH 15/27] put globals back --- main/FatesGlobals.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/FatesGlobals.F90 b/main/FatesGlobals.F90 index e27d679ea1..299fb5d5fb 100644 --- a/main/FatesGlobals.F90 +++ b/main/FatesGlobals.F90 @@ -94,7 +94,7 @@ subroutine fates_endrun(msg) !----------------------------------------------------------------------- write(fates_log(),*)'ENDRUN:', msg - call shr_sys_abort(msg) + call shr_sys_abort() end subroutine fates_endrun From 3f793df9f5ba0e60c3c5073ac4fb98016b6ec43d Mon Sep 17 00:00:00 2001 From: Adrianna Foster Date: Wed, 20 Mar 2024 10:04:35 -0600 Subject: [PATCH 16/27] update test names --- fire/SFNesterovMod.F90 | 40 ++++---- .../fire_weather_test/test_FireWeather.pf | 96 +++++++++++-------- 2 files changed, 75 insertions(+), 61 deletions(-) diff --git a/fire/SFNesterovMod.F90 b/fire/SFNesterovMod.F90 index 706eae5e4f..833917c7de 100644 --- a/fire/SFNesterovMod.F90 +++ b/fire/SFNesterovMod.F90 @@ -9,8 +9,6 @@ module SFNesterovMod implicit none private - character(len=*), parameter, private :: sourcefile = __FILE__ - type, public, extends(fire_weather) :: nesterov_index contains @@ -21,7 +19,7 @@ module SFNesterovMod end type nesterov_index - real(r8), parameter :: min_precip_thresh = 3.0_r8 ! threshold for precipitation above which to 0.0 NI + real(r8), parameter :: min_precip_thresh = 3.0_r8 ! threshold for precipitation above which to reset NI contains @@ -55,7 +53,7 @@ subroutine update_nesterov_index(this, temp_C, precip, rh, wind) if (precip > min_precip_thresh) then ! rezero NI if it rains this%fire_weather_index = 0.0_r8 else - ! Accumulate Nesterov index over fire season. + ! accumulate Nesterov Index this%fire_weather_index = this%fire_weather_index + & this%calc_nesterov_index(temp_C, precip, rh) end if @@ -82,34 +80,36 @@ real(r8) function calc_nesterov_index(this, temp_C, precip, rh) real(r8) :: yipsolon ! intermediate variable for dewpoint calculation real(r8) :: dewpoint ! dewpoint - ! error checking, if temperature equals -1.0*SF_val_fdi_b parameter, we get a divide - ! by zero - if (abs(SF_val_fdi_b + temp_C) < nearzero) then - write(fates_log(), *) 'SF_val_fdi_b: (', SF_val_fdi_b, ') + temp_C: (', temp_C, ') == 0.0 - divide by zero imminent!' - write(fates_log(), *) 'SF_val_fdi_b should be updated using the parameter file.' - write(fates_log(), *) 'Otherwise check values for temp_C' - call endrun(msg='') - end if - - if (precip > min_precip_thresh) then ! NI is 0.0 if it rainsf + if (precip > min_precip_thresh) then ! NI is 0.0 if it rains calc_nesterov_index = 0.0_r8 else - ! Calculate dewpoint temperature + + ! error checking, if SF_val_fdi_b + temp_C = 0.0, we get a divide by zero + if (abs(SF_val_fdi_b + temp_C) < nearzero) then + write(fates_log(), *) 'SF_val_fdi_b: (', SF_val_fdi_b, ') + temp_C: (', temp_C, ') == 0.0 - divide by zero imminent!' + write(fates_log(), *) 'SF_val_fdi_b should be updated using the parameter file.' + write(fates_log(), *) 'Otherwise check values for temp_C' + call endrun(msg=errMsg(__FILE__, __LINE__)) + end if + + ! intermediate dewpoint calculation yipsolon = (SF_val_fdi_a*temp_C)/(SF_val_fdi_b + temp_C) + log(max(1.0_r8, rh)/100.0_r8) - ! error checking, if SF_val_fdi_a parameter - ypisolon == 0, we get a divide - ! by zero + ! error checking, if SF_val_fdi_a - ypisolon = 0, we get a divide by zero if (abs(SF_val_fdi_a - yipsolon) < nearzero) then write(fates_log(), *) 'SF_val_fdi_a: (', SF_val_fdi_a, ') - yipsolon: (', yipsolon, ') == 0.0 - divide by zero imminent!' write(fates_log(), *) 'SF_val_fdi_a should be updated using the parameter file.' write(fates_log(), *) 'Otherwise check values for yipsolon' - call endrun(msg=errMsg(sourcefile, __LINE__)) + call endrun(msg=errMsg(__FILE__, __LINE__)) end if + + ! calculate dewpoint temperature dewpoint = (SF_val_fdi_b*yipsolon)/(SF_val_fdi_a - yipsolon) - ! Nesterov 1968. Eq 5, Thonicke et al. 2010 + ! Nesterov 1968; Eq 5, Thonicke et al. 2010 calc_nesterov_index = (temp_C - dewpoint)*temp_C - if (calc_nesterov_index < 0.0_r8) calc_nesterov_index = 0.0_r8 ! can't be negative + if (calc_nesterov_index < 0.0_r8) calc_nesterov_index = 0.0_r8 + endif end function calc_nesterov_index diff --git a/fire/test/fire_weather_test/test_FireWeather.pf b/fire/test/fire_weather_test/test_FireWeather.pf index 9eecbcde45..9d95f3abb2 100644 --- a/fire/test/fire_weather_test/test_FireWeather.pf +++ b/fire/test/fire_weather_test/test_FireWeather.pf @@ -27,83 +27,97 @@ module test_FireWeather contains - subroutine setUp(this) - + @before + subroutine SetUp(this) class(TestFireWeather), intent(inout) :: this - allocate(nesterov_index :: this%fireWeatherNesterov) - call this%fireWeatherNesterov%Init() - SF_val_fdi_a = 17.62_r8 SF_val_fdi_b = 243.12_r8 + end subroutine SetUp - end subroutine setUp - - subroutine tearDown(this) - + @after + subroutine TearDown(this) class(TestFireWeather), intent(inout) :: this - if (allocated(this%fireWeatherNesterov)) deallocate(this%fireWeatherNesterov) - - end subroutine tearDown + end subroutine TearDown @Test - subroutine zero_NI_rain(this) + subroutine UpdateIndex_OverPrecipThreshold_ZerosNI(this) ! test that over 3 mm of rain is 0.0 - class(TestFireWeather), intent(inout) :: this ! fire weather object + class(TestFireWeather), intent(inout) :: this ! fire weather test object + real(r8) :: tempC = 25.0_r8 ! temperature [degC] + real(r8) :: precip = 3.1_r8 ! precipitation [mm] + real(r8) :: rh = 10.0_r8 ! relative humidity [%] + real(r8) :: wind = 0.0_r8 ! wind speed [m/s] + - call this%fireWeatherNesterov%UpdateIndex(25.0_r8, 3.1_r8, 10.0_r8, 0.0_r8) + call this%fireWeatherNesterov%UpdateIndex(tempC, precip, rh, wind) @assertEqual(this%fireWeatherNesterov%fire_weather_index, 0.0_r8, tolerance=tol) - this%fireWeatherNesterov%fire_weather_index = 0.0_r8 - end subroutine zero_NI_rain + end subroutine UpdateIndex_OverPrecipThreshold_ZerosNI @Test - subroutine NI_rain_min(this) - ! test that at 3 mm is over zero - class(TestFireWeather), intent(inout) :: this ! fire weather object + subroutine UpdateIndex_AtPrecipThreshold_AccumulateNI(this) + ! test that at 3 mm is over 0.0 + class(TestFireWeather), intent(inout) :: this ! fire weather test object + real(r8) :: tempC = 25.0_r8 ! temperature [degC] + real(r8) :: precip = 3.0_r8 ! precipitation [mm] + real(r8) :: rh = 10.0_r8 ! relative humidity [%] + real(r8) :: wind = 0.0_r8 ! wind speed [m/s] - call this%fireWeatherNesterov%UpdateIndex(25.0_r8, 3.0_r8, 10.0_r8, 0.0_r8) + call this%fireWeatherNesterov%UpdateIndex(tempC, precip, rh, wind) @assertGreaterThan(this%fireWeatherNesterov%fire_weather_index, 0.0_r8, tolerance=tol) - this%fireWeatherNesterov%fire_weather_index = 0.0_r8 - end subroutine NI_rain_min + end subroutine UpdateIndex_AtPrecipThreshold_AccumulateNI @Test - subroutine NI_not_negative(this) + subroutine UpdateIndex_NegativeCalculation_ZerosNI(this) ! test that NI is not negative - class(TestFireWeather), intent(inout) :: this ! fire weather object + class(TestFireWeather), intent(inout) :: this ! fire weather test object + real(r8) :: tempC = -30.0_r8 ! temperature [degC] + real(r8) :: precip = 0.0_r8 ! precipitation [mm] + real(r8) :: rh = 99.0_r8 ! relative humidity [%] + real(r8) :: wind = 0.0_r8 ! wind speed [m/s] + + + call this%fireWeatherNesterov%UpdateIndex(tempC, precip, rh, wind) - call this%fireWeatherNesterov%UpdateIndex(-30.0_r8, 0.0_r8, 99.0_r8, 0.0_r8) @assertEqual(this%fireWeatherNesterov%fire_weather_index, 0.0_r8, tolerance=tol) - this%fireWeatherNesterov%fire_weather_index = 0.0_r8 - end subroutine NI_not_negative + end subroutine UpdateIndex_NegativeCalculation_ZerosNI @Test - subroutine wind_zero(this) + subroutine UpdateEffectiveWindSpeed_ZeroWindSpeed_ZeroEffectiveWindSpeed(this) ! test that effective wind speed is zero when wind speed is zero - class(TestFireWeather), intent(inout) :: this ! fire weather object - - call this%fireWeatherNesterov%UpdateEffectiveWindSpeed(0.0_r8, 0.5_r8, 0.5_r8, 0.0_r8) + class(TestFireWeather), intent(inout) :: this ! fire weather test object + real(r8) :: wind_speed = 0.0_r8 ! wind speed [m/s] + real(r8) :: tree_fraction = 0.5_r8 ! tree fraction [0-1] + real(r8) :: grass_fraction = 0.5_r8 ! grass fraction [0-1] + real(r8) :: bare_fraction = 0.0_r8 ! bare fraction [0-1] + + call this%fireWeatherNesterov%UpdateEffectiveWindSpeed(wind_speed, tree_fraction, & + grass_fraction, bare_fraction) @assertEqual(this%fireWeatherNesterov%effective_windspeed, 0.0_r8, tolerance=tol) - end subroutine wind_zero + end subroutine UpdateEffectiveWindSpeed_ZeroWindSpeed_ZeroEffectiveWindSpeed @Test - subroutine wind_attenuated(this) + subroutine UpdateEffectiveWindSpeed_WindSpeed_AttenuatesWindSpeed(this) ! test that effective wind speed is less than input wind speed - class(TestFireWeather), intent(inout) :: this ! fire weather object - real(r8) :: wind_speed = 50.0_r8 ! wind speed [m/min] - - call this%fireWeatherNesterov%UpdateEffectiveWindSpeed(wind_speed, 0.5_r8, 0.5_r8, 0.0_r8) + class(TestFireWeather), intent(inout) :: this ! fire weather test object + real(r8) :: wind_speed = 50.0_r8 ! wind speed [m/s] + real(r8) :: tree_fraction = 0.5_r8 ! tree fraction [0-1] + real(r8) :: grass_fraction = 0.5_r8 ! grass fraction [0-1] + real(r8) :: bare_fraction = 0.0_r8 ! bare fraction [0-1] + + call this%fireWeatherNesterov%UpdateEffectiveWindSpeed(wind_speed, tree_fraction, & + grass_fraction, bare_fraction) + @assertLessThan(this%fireWeatherNesterov%effective_windspeed, wind_speed, tolerance=tol) - end subroutine wind_attenuated - - ! 'ERROR in '//trim(file)//' at line '//toString(line) + end subroutine UpdateEffectiveWindSpeed_WindSpeed_AttenuatesWindSpeed end module test_FireWeather \ No newline at end of file From 770f0cb60737ac1773d8039f6e82cc2c40dbec86 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Wed, 20 Mar 2024 15:29:39 -0600 Subject: [PATCH 17/27] get rid of unused uses --- fire/SFMainMod.F90 | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/fire/SFMainMod.F90 b/fire/SFMainMod.F90 index 34e9f784c8..29603bc3ca 100644 --- a/fire/SFMainMod.F90 +++ b/fire/SFMainMod.F90 @@ -10,7 +10,6 @@ module SFMainMod use FatesConstantsMod , only : pi_const use FatesConstantsMod , only : nocomp_bareground use FatesInterfaceTypesMod, only : hlm_masterproc ! 1= master process, 0=not master process - use EDTypesMod , only : numWaterMem use FatesGlobals , only : fates_log use FatesInterfaceTypesMod, only : hlm_spitfire_mode use FatesInterfaceTypesMod, only : hlm_sf_nofire_def @@ -39,13 +38,9 @@ module SFMainMod use PRTGenericMod, only : leaf_organ use PRTGenericMod, only : carbon12_element use PRTGenericMod, only : leaf_organ - use PRTGenericMod, only : fnrt_organ use PRTGenericMod, only : sapw_organ - use PRTGenericMod, only : store_organ - use PRTGenericMod, only : repro_organ use PRTGenericMod, only : struct_organ - use PRTGenericMod, only : SetState - use FatesInterfaceTypesMod , only : numpft + use FatesInterfaceTypesMod, only : numpft use FatesAllometryMod, only : CrownDepth implicit none From dbf57449b194f98e2459466123c51600754169c5 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Wed, 20 Mar 2024 16:07:39 -0600 Subject: [PATCH 18/27] renaming functions --- fire/test/fire_weather_test/test_FireWeather.pf | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/fire/test/fire_weather_test/test_FireWeather.pf b/fire/test/fire_weather_test/test_FireWeather.pf index 9d95f3abb2..ea8508695e 100644 --- a/fire/test/fire_weather_test/test_FireWeather.pf +++ b/fire/test/fire_weather_test/test_FireWeather.pf @@ -13,34 +13,28 @@ module test_FireWeather @TestCase type, extends(TestCase) :: TestFireWeather - class(fire_weather), allocatable :: fireWeatherNesterov - contains - procedure :: setUp procedure :: tearDown - end type TestFireWeather real(r8), parameter :: tol = 1.e-13_r8 contains - @before - subroutine SetUp(this) + subroutine setUp(this) class(TestFireWeather), intent(inout) :: this allocate(nesterov_index :: this%fireWeatherNesterov) call this%fireWeatherNesterov%Init() SF_val_fdi_a = 17.62_r8 SF_val_fdi_b = 243.12_r8 - end subroutine SetUp + end subroutine setUp - @after - subroutine TearDown(this) + subroutine tearDown(this) class(TestFireWeather), intent(inout) :: this if (allocated(this%fireWeatherNesterov)) deallocate(this%fireWeatherNesterov) - end subroutine TearDown + end subroutine tearDown @Test subroutine UpdateIndex_OverPrecipThreshold_ZerosNI(this) From 5ee375b889036553e4188d989b5903520053092f Mon Sep 17 00:00:00 2001 From: adrifoster Date: Tue, 7 May 2024 11:33:55 -0600 Subject: [PATCH 19/27] fixing some typos --- fire/SFMainMod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fire/SFMainMod.F90 b/fire/SFMainMod.F90 index ced20908e2..a6dbc62c64 100644 --- a/fire/SFMainMod.F90 +++ b/fire/SFMainMod.F90 @@ -121,7 +121,7 @@ subroutine UpdateFireWeather(currentSite, bc_in) ! ARGUMENTS: type(ed_site_type), intent(inout), target :: currentSite - type(bc_in_type), intent(in) :: bc_in + type(bc_in_type), intent(in) :: bc_in ! LOCALS: type(fates_patch_type), pointer :: currentPatch ! patch object From 8bff2efd824187601cc1b50a5db394a97096e1db Mon Sep 17 00:00:00 2001 From: adrifoster Date: Mon, 17 Jun 2024 18:43:33 -0600 Subject: [PATCH 20/27] remove old file --- CMakeLists.txt | 3 --- unit_test_shr/CMakeLists.txt | 5 ----- unit_test_shr/unittestUtils.F90 | 33 --------------------------------- 3 files changed, 41 deletions(-) delete mode 100644 unit_test_shr/CMakeLists.txt delete mode 100644 unit_test_shr/unittestUtils.F90 diff --git a/CMakeLists.txt b/CMakeLists.txt index 8264d9318b..9760a39c1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,9 +31,6 @@ add_subdirectory(${HLM_ROOT}/src/fates/fire fates_fire) add_subdirectory(${HLM_ROOT}/src/fates/radiation fates_radiation) add_subdirectory(${HLM_ROOT}/src/fates/testing/testing_shr test_share) -# Add general unit test directories (stubbed out files, etc.) -add_subdirectory(${HLM_ROOT}/src/fates/unit_test_shr) - # Remove shr_mpi_mod from share_sources. # This is needed because we want to use the mock shr_mpi_mod in place of the real one # diff --git a/unit_test_shr/CMakeLists.txt b/unit_test_shr/CMakeLists.txt deleted file mode 100644 index fd79fc097e..0000000000 --- a/unit_test_shr/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -list(APPEND fates_sources - unittestUtils.F90 - ) - -sourcelist_to_parent(fates_sources) diff --git a/unit_test_shr/unittestUtils.F90 b/unit_test_shr/unittestUtils.F90 deleted file mode 100644 index ab79cd8bd0..0000000000 --- a/unit_test_shr/unittestUtils.F90 +++ /dev/null @@ -1,33 +0,0 @@ -module unittestUtils - - ! Miscellaneous utilities to aid unit testing - - implicit none - private - - public :: endrun_msg ! Gives the message thrown by shr_abort_abort, given a call to endrun(msg) - -contains - - !----------------------------------------------------------------------- - function endrun_msg(msg) - ! - ! !DESCRIPTION: - ! Gives the message thrown by shr_abort_abort, given a call to fates_endrun(msg) - ! - ! !USES: - ! - ! !ARGUMENTS: - character(len=:), allocatable :: endrun_msg ! function result - character(len=*), intent(in) :: msg - ! - ! !LOCAL VARIABLES: - - character(len=*), parameter :: subname = 'endrun_msg' - !----------------------------------------------------------------------- - - endrun_msg = 'ENDRUN:'//trim(msg) - - end function endrun_msg - -end module unittestUtils From 889a6a6918503bb37eaa72374014e3fed37f97ef Mon Sep 17 00:00:00 2001 From: Adrianna Foster Date: Wed, 19 Jun 2024 08:38:08 -0600 Subject: [PATCH 21/27] initialize wind speed to 0.0 --- fire/SFNesterovMod.F90 | 1 + 1 file changed, 1 insertion(+) diff --git a/fire/SFNesterovMod.F90 b/fire/SFNesterovMod.F90 index 392aad5b03..f8001c2552 100644 --- a/fire/SFNesterovMod.F90 +++ b/fire/SFNesterovMod.F90 @@ -32,6 +32,7 @@ subroutine init_nesterov_fire_weather(this) ! initialize values to 0.0 this%fire_weather_index = 0.0_r8 + this%effective_windspeed = 0.0_r8 end subroutine init_nesterov_fire_weather From b52cc1196c9d237203832e6ca11780bf8c59ac5f Mon Sep 17 00:00:00 2001 From: Adrianna Foster Date: Wed, 19 Jun 2024 15:59:10 -0600 Subject: [PATCH 22/27] test_results --- test_results.md | 145 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 test_results.md diff --git a/test_results.md b/test_results.md new file mode 100644 index 0000000000..f67d6b4582 --- /dev/null +++ b/test_results.md @@ -0,0 +1,145 @@ +# Test Results for /glade/derecho/scratch/afoster/tests_0618-145127de +## Testing Summary +A total of 45 tests were run + +29 BASELINE tests failed. + +1 COMPARE_base_modpes tests failed. + +2 COMPARE_base_rest tests failed. + +1 COMPARE_base_rest tests are pending. + +11 MEMCOMP tests failed. + +2 RUN tests failed. + +## All Non-Passing Tests +| | phase | result | name | path | +|---:|:--------------------|:---------|:-------------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 9 | BASELINE | FAIL | ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERP_Ld9.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdAllVars | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_Ld9.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdAllVars.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo.C.0618-145127de_gnu | +| 9 | BASELINE | FAIL | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTreeDamage | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTreeDamage.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | +| 9 | BASELINE | FAIL | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLUH2 | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLUH2.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLandUse | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLandUse.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | +| 9 | BASELINE | FAIL | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdFixedBiogeo | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdFixedBiogeo.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoComp | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoComp.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoCompFixedBioGeo | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoCompFixedBioGeo.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLogging | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLogging.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdPPhys | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdPPhys.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_Lm12.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesFireLightningPopDens | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Lm12.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesFireLightningPopDens.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_Lm13.f10_f10_mg37.I2000Clm50Fates.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Lm13.f10_f10_mg37.I2000Clm50Fates.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | +| 9 | BASELINE | FAIL | ERS_Lm13.f45_f45_mg37.I2000Clm50Fates.derecho_intel.clm-FatesColdNoComp | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Lm13.f45_f45_mg37.I2000Clm50Fates.derecho_intel.clm-FatesColdNoComp.C.0618-145127de_int | +| 9 | BASELINE | FAIL | ERS_P128x1_Lm25.f10_f10_mg37.I2000Clm60Fates.derecho_intel.clm-FatesColdNoComp | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_P128x1_Lm25.f10_f10_mg37.I2000Clm60Fates.derecho_intel.clm-FatesColdNoComp.C.0618-145127de_int | +| 8 | BASELINE | FAIL | SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm60Fates.derecho_gnu.clm-FatesPRISM--clm-NEON-FATES-YELL | /glade/derecho/scratch/afoster/tests_0618-145127de/SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm60Fates.derecho_gnu.clm-FatesPRISM--clm-NEON-FATES-YELL.C.0618-145127de_gnu | +| 8 | BASELINE | FAIL | SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | +| 8 | BASELINE | FAIL | SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 8 | BASELINE | FAIL | SMS_Lm6.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | /glade/derecho/scratch/afoster/tests_0618-145127de/SMS_Lm6.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates.C.0618-145127de_int | +| 8 | COMPARE_base_modpes | FAIL | PEM_D_Ld15.f10_f10_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdSeedDisp | /glade/derecho/scratch/afoster/tests_0618-145127de/PEM_D_Ld15.f10_f10_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdSeedDisp.C.0618-145127de_gnu | +| 8 | COMPARE_base_rest | FAIL | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo.C.0618-145127de_gnu | +| 8 | COMPARE_base_rest | FAIL | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream.C.0618-145127de_int | +| 8 | COMPARE_base_rest | PEND | ERP_P256x2_Ld30.f45_f45_mg37.I2000Clm60FatesRs.derecho_intel.clm-mimicsFatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_P256x2_Ld30.f45_f45_mg37.I2000Clm60FatesRs.derecho_intel.clm-mimicsFatesCold.C.0618-145127de_int | +| 10 | MEMCOMP | FAIL | ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 10 | MEMCOMP | FAIL | ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 10 | MEMCOMP | FAIL | ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 10 | MEMCOMP | FAIL | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | +| 10 | MEMCOMP | FAIL | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 10 | MEMCOMP | FAIL | ERS_D_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdHydro | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdHydro.C.0618-145127de_int | +| 10 | MEMCOMP | FAIL | ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 10 | MEMCOMP | FAIL | ERS_D_Ld5.f19_g17.I2000Clm50BgcCru.derecho_intel.clm-default | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld5.f19_g17.I2000Clm50BgcCru.derecho_intel.clm-default.C.0618-145127de_int | +| 10 | MEMCOMP | FAIL | ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | +| 10 | MEMCOMP | FAIL | ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold.C.0618-145127de_int | +| 10 | MEMCOMP | FAIL | ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off.C.0618-145127de_int | +| 7 | RUN | FAIL | ERP_P256x2_Ld30.f45_f45_mg37.I2000Clm60FatesRs.derecho_intel.clm-mimicsFatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_P256x2_Ld30.f45_f45_mg37.I2000Clm60FatesRs.derecho_intel.clm-mimicsFatesCold.C.0618-145127de_int | +| 7 | RUN | FAIL | SMS_D_Ld3.f09_g17.I2000Clm60FatesSpCruRsGs.derecho_gnu.clm-FatesColdSatPhen_prescribed | /glade/derecho/scratch/afoster/tests_0618-145127de/SMS_D_Ld3.f09_g17.I2000Clm60FatesSpCruRsGs.derecho_gnu.clm-FatesColdSatPhen_prescribed.C.0618-145127de_gnu | +## Difference Data +| test | ('diff', 'FATES_EFFECT_WSPEED') | ('normalized_diff', 'FATES_EFFECT_WSPEED') | +|:-------------------------------------------------------------------------------------------------|----------------------------------:|---------------------------------------------:| +| ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 0.00042606 | 0.00027069 | +| ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold | 0.00042606 | 0.00027069 | +| ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold | 0.00044224 | 0.00029078 | +| ERP_Ld9.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdAllVars | 0.00053944 | 0.00031985 | +| ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo | 1.0166 | 0.58811 | +| ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTreeDamage | 0.00054995 | 0.00030441 | +| ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream | 0.00055205 | 0.00031482 | +| ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 0.00042606 | 0.00027069 | +| ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 0.00042606 | 0.00027069 | +| ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLUH2 | 0.00058458 | 0.00034626 | +| ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLandUse | 0.00053944 | 0.00031982 | +| ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold | 0.0005843 | 0.00029334 | +| ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 7.3604e-06 | 2.2742e-05 | +| ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdFixedBiogeo | 0.00024043 | 0.00012357 | +| ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoComp | 0.00047452 | 0.00025318 | +| ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoCompFixedBioGeo | 1.0282 | 0.60768 | +| ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold | 0.00055221 | 0.00032651 | +| ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | 0.00056258 | 0.00031985 | +| ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLogging | 1.3552 | 1.0085 | +| ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdPPhys | 7.4595e-05 | 4.018e-05 | +| ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off | 0.00061804 | 0.00033207 | +| ERS_Lm12.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesFireLightningPopDens | 9.2089e-06 | 3.8077e-05 | +| ERS_Lm13.f10_f10_mg37.I2000Clm50Fates.derecho_gnu.clm-FatesCold | 0.0012151 | 0.00058345 | +| ERS_Lm13.f45_f45_mg37.I2000Clm50Fates.derecho_intel.clm-FatesColdNoComp | 0.0017926 | 0.00083548 | +| ERS_P128x1_Lm25.f10_f10_mg37.I2000Clm60Fates.derecho_intel.clm-FatesColdNoComp | 0.0067958 | 0.0029298 | +| SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm60Fates.derecho_gnu.clm-FatesPRISM--clm-NEON-FATES-YELL | 0.0002796 | 0.00022091 | +| SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 9.4802e-06 | 3.8057e-05 | +| SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 9.4802e-06 | 3.8067e-05 | +| SMS_Lm6.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | 0.0010183 | 0.00063105 | +## Timing Data +| | name | lib_time | build_time | run_time | +|---:|:------------------------------------------------------------------------------------------------------------------|-----------:|-------------:|-----------:| +| 0 | ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 186 | 121 | 225 | +| 0 | ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold | 75 | 131 | 274 | +| 0 | ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold | 28 | 139 | 231 | +| 0 | ERP_Ld9.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdAllVars | 29 | 136 | 268 | +| 0 | ERP_P128x2_Ld30.f45_f45_mg37.I2000Clm60FatesSpCruRsGs.derecho_intel.clm-FatesColdSatPhen | 29 | 135 | 168 | +| 0 | ERP_P256x2_Ld30.f45_f45_mg37.I2000Clm60FatesRs.derecho_intel.clm-mimicsFatesCold | 326 | 131 | 93 | +| 0 | ERS_D_Ld15.f10_f10_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdSeedDisp | 154 | 25 | 154 | +| 0 | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo | 14 | 24 | 163 | +| 0 | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTreeDamage | 135 | 49 | 191 | +| 0 | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream | 9 | 49 | 193 | +| 0 | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 14 | 24 | 189 | +| 0 | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 14 | 61 | 211 | +| 0 | ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLUH2 | 11 | 61 | 299 | +| 0 | ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLandUse | 13 | 61 | 241 | +| 0 | ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdPRT2 | 12 | 59 | 339 | +| 0 | ERS_D_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdHydro | 16 | 59 | 189 | +| 0 | ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold | 44 | 50 | 173 | +| 0 | ERS_D_Ld5.f19_g17.I2000Clm50BgcCru.derecho_intel.clm-default | 15 | 69 | 294 | +| 0 | ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 8 | 25 | 120 | +| 0 | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdFixedBiogeo | 15 | 64 | 154 | +| 0 | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoComp | 14 | 64 | 188 | +| 0 | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoCompFixedBioGeo | 17 | 62 | 162 | +| 0 | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdSizeAgeMort | 14 | 61 | 158 | +| 0 | ERS_Ld30.f45_f45_mg37.I2000Clm60FatesSpCruRsGs.derecho_intel.clm-FatesColdSatPhen | 14 | 60 | 137 | +| 0 | ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold | 17 | 70 | 191 | +| 0 | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | 15 | 60 | 185 | +| 0 | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLogging | 14 | 58 | 193 | +| 0 | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoFire | 14 | 61 | 176 | +| 0 | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdPPhys | 14 | 62 | 198 | +| 0 | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdST3 | 14 | 58 | 178 | +| 0 | ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off | 16 | 62 | 127 | +| 0 | ERS_Lm12.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesFireLightningPopDens | 314 | 52 | 523 | +| 0 | ERS_Lm13.f10_f10_mg37.I2000Clm50Fates.derecho_gnu.clm-FatesCold | 162 | 33 | 1412 | +| 0 | ERS_Lm13.f45_f45_mg37.I2000Clm50Fates.derecho_intel.clm-FatesColdNoComp | 12 | 63 | 796 | +| 0 | ERS_P128x1_Lm25.f10_f10_mg37.I2000Clm60Fates.derecho_intel.clm-FatesColdNoComp | 186 | 61 | 1644 | +| 0 | PEM_D_Ld15.f10_f10_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdSeedDisp | 13 | 25 | 207 | +| 0 | SMS_D.1x1_brazil.I2000Clm60FatesSpCruRsGs.derecho_intel.clm-FatesColdSatPhen | 15 | 59 | 125 | +| 0 | SMS_D_Ld3.f09_g17.I2000Clm60FatesSpCruRsGs.derecho_gnu.clm-FatesColdSatPhen_prescribed | 11 | 26 | 119 | +| 0 | SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm60Fates.derecho_gnu.clm-FatesPRISM--clm-NEON-FATES-YELL | 147 | 26 | 21 | +| 0 | SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm60Fates.derecho_intel.clm-FatesFireLightningPopDens--clm-NEON-FATES-NIWO | 124 | 47 | 29 | +| 0 | SMS_Lm1.f45_f45_mg37.I2000Clm60FatesSpCruRsGs.derecho_intel.clm-FatesColdBasic | 15 | 61 | 99 | +| 0 | SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 54 | 21 | 359 | +| 0 | SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 13 | 60 | 332 | +| 0 | SMS_Lm3_D_Mmpi-serial.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdHydro | 13 | 66 | 138 | +| 0 | SMS_Lm6.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | 14 | 58 | 249 | From 9e57553fb356da048825fdf46e38aa7d8889e935 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Fri, 23 Aug 2024 10:22:56 -0600 Subject: [PATCH 23/27] remove test_results.md --- test_results.md | 145 ------------------------------------------------ 1 file changed, 145 deletions(-) delete mode 100644 test_results.md diff --git a/test_results.md b/test_results.md deleted file mode 100644 index f67d6b4582..0000000000 --- a/test_results.md +++ /dev/null @@ -1,145 +0,0 @@ -# Test Results for /glade/derecho/scratch/afoster/tests_0618-145127de -## Testing Summary -A total of 45 tests were run - -29 BASELINE tests failed. - -1 COMPARE_base_modpes tests failed. - -2 COMPARE_base_rest tests failed. - -1 COMPARE_base_rest tests are pending. - -11 MEMCOMP tests failed. - -2 RUN tests failed. - -## All Non-Passing Tests -| | phase | result | name | path | -|---:|:--------------------|:---------|:-------------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 9 | BASELINE | FAIL | ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERP_Ld9.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdAllVars | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_Ld9.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdAllVars.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo.C.0618-145127de_gnu | -| 9 | BASELINE | FAIL | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTreeDamage | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTreeDamage.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | -| 9 | BASELINE | FAIL | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLUH2 | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLUH2.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLandUse | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLandUse.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | -| 9 | BASELINE | FAIL | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdFixedBiogeo | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdFixedBiogeo.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoComp | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoComp.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoCompFixedBioGeo | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoCompFixedBioGeo.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLogging | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLogging.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdPPhys | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdPPhys.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_Lm12.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesFireLightningPopDens | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Lm12.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesFireLightningPopDens.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_Lm13.f10_f10_mg37.I2000Clm50Fates.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Lm13.f10_f10_mg37.I2000Clm50Fates.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | -| 9 | BASELINE | FAIL | ERS_Lm13.f45_f45_mg37.I2000Clm50Fates.derecho_intel.clm-FatesColdNoComp | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Lm13.f45_f45_mg37.I2000Clm50Fates.derecho_intel.clm-FatesColdNoComp.C.0618-145127de_int | -| 9 | BASELINE | FAIL | ERS_P128x1_Lm25.f10_f10_mg37.I2000Clm60Fates.derecho_intel.clm-FatesColdNoComp | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_P128x1_Lm25.f10_f10_mg37.I2000Clm60Fates.derecho_intel.clm-FatesColdNoComp.C.0618-145127de_int | -| 8 | BASELINE | FAIL | SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm60Fates.derecho_gnu.clm-FatesPRISM--clm-NEON-FATES-YELL | /glade/derecho/scratch/afoster/tests_0618-145127de/SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm60Fates.derecho_gnu.clm-FatesPRISM--clm-NEON-FATES-YELL.C.0618-145127de_gnu | -| 8 | BASELINE | FAIL | SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | -| 8 | BASELINE | FAIL | SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 8 | BASELINE | FAIL | SMS_Lm6.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | /glade/derecho/scratch/afoster/tests_0618-145127de/SMS_Lm6.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates.C.0618-145127de_int | -| 8 | COMPARE_base_modpes | FAIL | PEM_D_Ld15.f10_f10_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdSeedDisp | /glade/derecho/scratch/afoster/tests_0618-145127de/PEM_D_Ld15.f10_f10_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdSeedDisp.C.0618-145127de_gnu | -| 8 | COMPARE_base_rest | FAIL | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo.C.0618-145127de_gnu | -| 8 | COMPARE_base_rest | FAIL | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream.C.0618-145127de_int | -| 8 | COMPARE_base_rest | PEND | ERP_P256x2_Ld30.f45_f45_mg37.I2000Clm60FatesRs.derecho_intel.clm-mimicsFatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_P256x2_Ld30.f45_f45_mg37.I2000Clm60FatesRs.derecho_intel.clm-mimicsFatesCold.C.0618-145127de_int | -| 10 | MEMCOMP | FAIL | ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 10 | MEMCOMP | FAIL | ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 10 | MEMCOMP | FAIL | ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 10 | MEMCOMP | FAIL | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | -| 10 | MEMCOMP | FAIL | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 10 | MEMCOMP | FAIL | ERS_D_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdHydro | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdHydro.C.0618-145127de_int | -| 10 | MEMCOMP | FAIL | ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 10 | MEMCOMP | FAIL | ERS_D_Ld5.f19_g17.I2000Clm50BgcCru.derecho_intel.clm-default | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Ld5.f19_g17.I2000Clm50BgcCru.derecho_intel.clm-default.C.0618-145127de_int | -| 10 | MEMCOMP | FAIL | ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold.C.0618-145127de_gnu | -| 10 | MEMCOMP | FAIL | ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold.C.0618-145127de_int | -| 10 | MEMCOMP | FAIL | ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off | /glade/derecho/scratch/afoster/tests_0618-145127de/ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off.C.0618-145127de_int | -| 7 | RUN | FAIL | ERP_P256x2_Ld30.f45_f45_mg37.I2000Clm60FatesRs.derecho_intel.clm-mimicsFatesCold | /glade/derecho/scratch/afoster/tests_0618-145127de/ERP_P256x2_Ld30.f45_f45_mg37.I2000Clm60FatesRs.derecho_intel.clm-mimicsFatesCold.C.0618-145127de_int | -| 7 | RUN | FAIL | SMS_D_Ld3.f09_g17.I2000Clm60FatesSpCruRsGs.derecho_gnu.clm-FatesColdSatPhen_prescribed | /glade/derecho/scratch/afoster/tests_0618-145127de/SMS_D_Ld3.f09_g17.I2000Clm60FatesSpCruRsGs.derecho_gnu.clm-FatesColdSatPhen_prescribed.C.0618-145127de_gnu | -## Difference Data -| test | ('diff', 'FATES_EFFECT_WSPEED') | ('normalized_diff', 'FATES_EFFECT_WSPEED') | -|:-------------------------------------------------------------------------------------------------|----------------------------------:|---------------------------------------------:| -| ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 0.00042606 | 0.00027069 | -| ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold | 0.00042606 | 0.00027069 | -| ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold | 0.00044224 | 0.00029078 | -| ERP_Ld9.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdAllVars | 0.00053944 | 0.00031985 | -| ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo | 1.0166 | 0.58811 | -| ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTreeDamage | 0.00054995 | 0.00030441 | -| ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream | 0.00055205 | 0.00031482 | -| ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 0.00042606 | 0.00027069 | -| ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 0.00042606 | 0.00027069 | -| ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLUH2 | 0.00058458 | 0.00034626 | -| ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLandUse | 0.00053944 | 0.00031982 | -| ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold | 0.0005843 | 0.00029334 | -| ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 7.3604e-06 | 2.2742e-05 | -| ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdFixedBiogeo | 0.00024043 | 0.00012357 | -| ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoComp | 0.00047452 | 0.00025318 | -| ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoCompFixedBioGeo | 1.0282 | 0.60768 | -| ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold | 0.00055221 | 0.00032651 | -| ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | 0.00056258 | 0.00031985 | -| ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLogging | 1.3552 | 1.0085 | -| ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdPPhys | 7.4595e-05 | 4.018e-05 | -| ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off | 0.00061804 | 0.00033207 | -| ERS_Lm12.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesFireLightningPopDens | 9.2089e-06 | 3.8077e-05 | -| ERS_Lm13.f10_f10_mg37.I2000Clm50Fates.derecho_gnu.clm-FatesCold | 0.0012151 | 0.00058345 | -| ERS_Lm13.f45_f45_mg37.I2000Clm50Fates.derecho_intel.clm-FatesColdNoComp | 0.0017926 | 0.00083548 | -| ERS_P128x1_Lm25.f10_f10_mg37.I2000Clm60Fates.derecho_intel.clm-FatesColdNoComp | 0.0067958 | 0.0029298 | -| SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm60Fates.derecho_gnu.clm-FatesPRISM--clm-NEON-FATES-YELL | 0.0002796 | 0.00022091 | -| SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 9.4802e-06 | 3.8057e-05 | -| SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 9.4802e-06 | 3.8067e-05 | -| SMS_Lm6.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | 0.0010183 | 0.00063105 | -## Timing Data -| | name | lib_time | build_time | run_time | -|---:|:------------------------------------------------------------------------------------------------------------------|-----------:|-------------:|-----------:| -| 0 | ERP_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 186 | 121 | 225 | -| 0 | ERP_D_P128x2_Ld3.f19_g17.I2000Clm50FatesCru.derecho_intel.clm-FatesCold | 75 | 131 | 274 | -| 0 | ERP_Ld3.f09_g17.I2000Clm50FatesRs.derecho_intel.clm-FatesCold | 28 | 139 | 231 | -| 0 | ERP_Ld9.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdAllVars | 29 | 136 | 268 | -| 0 | ERP_P128x2_Ld30.f45_f45_mg37.I2000Clm60FatesSpCruRsGs.derecho_intel.clm-FatesColdSatPhen | 29 | 135 | 168 | -| 0 | ERP_P256x2_Ld30.f45_f45_mg37.I2000Clm60FatesRs.derecho_intel.clm-mimicsFatesCold | 326 | 131 | 93 | -| 0 | ERS_D_Ld15.f10_f10_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdSeedDisp | 154 | 25 | 154 | -| 0 | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdTwoStreamNoCompFixedBioGeo | 14 | 24 | 163 | -| 0 | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTreeDamage | 135 | 49 | 191 | -| 0 | ERS_D_Ld15.f45_f45_mg37.I2000Clm50FatesRs.derecho_intel.clm-FatesColdTwoStream | 9 | 49 | 193 | -| 0 | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 14 | 24 | 189 | -| 0 | ERS_D_Ld3.f19_g17.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 14 | 61 | 211 | -| 0 | ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLUH2 | 11 | 61 | 299 | -| 0 | ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLandUse | 13 | 61 | 241 | -| 0 | ERS_D_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdPRT2 | 12 | 59 | 339 | -| 0 | ERS_D_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdHydro | 16 | 59 | 189 | -| 0 | ERS_D_Ld5.f10_f10_mg37.I2000Clm50Fates.derecho_intel.clm-FatesCold | 44 | 50 | 173 | -| 0 | ERS_D_Ld5.f19_g17.I2000Clm50BgcCru.derecho_intel.clm-default | 15 | 69 | 294 | -| 0 | ERS_D_Mmpi-serial_Ld5.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 8 | 25 | 120 | -| 0 | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdFixedBiogeo | 15 | 64 | 154 | -| 0 | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoComp | 14 | 64 | 188 | -| 0 | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoCompFixedBioGeo | 17 | 62 | 162 | -| 0 | ERS_Ld30.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdSizeAgeMort | 14 | 61 | 158 | -| 0 | ERS_Ld30.f45_f45_mg37.I2000Clm60FatesSpCruRsGs.derecho_intel.clm-FatesColdSatPhen | 14 | 60 | 137 | -| 0 | ERS_Ld5.f19_g17.I2000Clm45Fates.derecho_intel.clm-FatesCold | 17 | 70 | 191 | -| 0 | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | 15 | 60 | 185 | -| 0 | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdLogging | 14 | 58 | 193 | -| 0 | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdNoFire | 14 | 61 | 176 | -| 0 | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdPPhys | 14 | 62 | 198 | -| 0 | ERS_Ld60.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdST3 | 14 | 58 | 178 | -| 0 | ERS_Ld9.f10_f10_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdCH4Off | 16 | 62 | 127 | -| 0 | ERS_Lm12.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesFireLightningPopDens | 314 | 52 | 523 | -| 0 | ERS_Lm13.f10_f10_mg37.I2000Clm50Fates.derecho_gnu.clm-FatesCold | 162 | 33 | 1412 | -| 0 | ERS_Lm13.f45_f45_mg37.I2000Clm50Fates.derecho_intel.clm-FatesColdNoComp | 12 | 63 | 796 | -| 0 | ERS_P128x1_Lm25.f10_f10_mg37.I2000Clm60Fates.derecho_intel.clm-FatesColdNoComp | 186 | 61 | 1644 | -| 0 | PEM_D_Ld15.f10_f10_mg37.I2000Clm50FatesRs.derecho_gnu.clm-FatesColdSeedDisp | 13 | 25 | 207 | -| 0 | SMS_D.1x1_brazil.I2000Clm60FatesSpCruRsGs.derecho_intel.clm-FatesColdSatPhen | 15 | 59 | 125 | -| 0 | SMS_D_Ld3.f09_g17.I2000Clm60FatesSpCruRsGs.derecho_gnu.clm-FatesColdSatPhen_prescribed | 11 | 26 | 119 | -| 0 | SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm60Fates.derecho_gnu.clm-FatesPRISM--clm-NEON-FATES-YELL | 147 | 26 | 21 | -| 0 | SMS_Ld10_D_Mmpi-serial.CLM_USRDAT.I1PtClm60Fates.derecho_intel.clm-FatesFireLightningPopDens--clm-NEON-FATES-NIWO | 124 | 47 | 29 | -| 0 | SMS_Lm1.f45_f45_mg37.I2000Clm60FatesSpCruRsGs.derecho_intel.clm-FatesColdBasic | 15 | 61 | 99 | -| 0 | SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_gnu.clm-FatesCold | 54 | 21 | 359 | -| 0 | SMS_Lm13.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesCold | 13 | 60 | 332 | -| 0 | SMS_Lm3_D_Mmpi-serial.1x1_brazil.I2000Clm50FatesCruRsGs.derecho_intel.clm-FatesColdHydro | 13 | 66 | 138 | -| 0 | SMS_Lm6.f45_f45_mg37.I2000Clm50FatesCruRsGs.derecho_intel.clm-Fates | 14 | 58 | 249 | From 4b7bd886f28c59e66fbf2132d009c2a7ad6bd4bb Mon Sep 17 00:00:00 2001 From: adrifoster Date: Fri, 23 Aug 2024 10:28:36 -0600 Subject: [PATCH 24/27] move wind speed calculation to site loop --- main/FatesHistoryInterfaceMod.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/main/FatesHistoryInterfaceMod.F90 b/main/FatesHistoryInterfaceMod.F90 index eac0cd8257..027a96a1a8 100644 --- a/main/FatesHistoryInterfaceMod.F90 +++ b/main/FatesHistoryInterfaceMod.F90 @@ -2528,6 +2528,8 @@ subroutine update_history_dyn1(this,nc,nsites,sites,bc_in) ! Nesterov index (unitless) hio_nesterov_fire_danger_si(io_si) = sites(s)%fireWeather%fire_weather_index + + hio_effect_wspeed_si(io_si) = sites(s)%fireWeather%effective_windspeed/sec_per_min ! number of ignitions [#/km2/day -> #/m2/s] hio_fire_nignitions_si(io_si) = sites(s)%NF_successful / m2_per_km2 / & @@ -2601,7 +2603,7 @@ subroutine update_history_dyn1(this,nc,nsites,sites,bc_in) sites(s)%fmort_crownarea_ustory + & sites(s)%term_crownarea_ustory * days_per_year + & sites(s)%imort_crownarea - + flux_diags_c => sites(s)%flux_diags(element_pos(carbon12_element)) hio_litter_in_si(io_si) = (sum(flux_diags_c%cwd_ag_input(:)) + & @@ -2665,7 +2667,6 @@ subroutine update_history_dyn1(this,nc,nsites,sites,bc_in) ! Update Fire Variables hio_spitfire_ros_si(io_si) = hio_spitfire_ros_si(io_si) + cpatch%ROS_front * cpatch%area * AREA_INV / sec_per_min - hio_effect_wspeed_si(io_si) = hio_effect_wspeed_si(io_si) + sites(s)%fireWeather%effective_windspeed * cpatch%area * AREA_INV / sec_per_min hio_tfc_ros_si(io_si) = hio_tfc_ros_si(io_si) + cpatch%TFC_ROS * cpatch%area * AREA_INV hio_fire_intensity_si(io_si) = hio_fire_intensity_si(io_si) + cpatch%FI * cpatch%area * AREA_INV * J_per_kJ hio_fire_area_si(io_si) = hio_fire_area_si(io_si) + cpatch%frac_burnt * cpatch%area * AREA_INV / sec_per_day From a497c70bc5f5b71826860b6ff8c03349335d5651 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Fri, 23 Aug 2024 10:30:05 -0600 Subject: [PATCH 25/27] fix merge conflicts --- biogeochem/FatesPatchMod.F90 | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/biogeochem/FatesPatchMod.F90 b/biogeochem/FatesPatchMod.F90 index d2dc2c6fb8..999bd73228 100644 --- a/biogeochem/FatesPatchMod.F90 +++ b/biogeochem/FatesPatchMod.F90 @@ -579,29 +579,6 @@ subroutine ZeroValues(this) ! RADIATION this%rad_error(:) = 0.0_r8 -<<<<<<< HEAD - this%fabd_sun_z(:,:,:) = 0.0_r8 - this%fabd_sha_z(:,:,:) = 0.0_r8 - this%fabi_sun_z(:,:,:) = 0.0_r8 - this%fabi_sha_z(:,:,:) = 0.0_r8 - this%ed_parsun_z(:,:,:) = 0.0_r8 - this%ed_parsha_z(:,:,:) = 0.0_r8 - this%ed_laisun_z(:,:,:) = 0._r8 - this%ed_laisha_z(:,:,:) = 0._r8 - this%f_sun = 0.0_r8 -||||||| b8e4eee5 - this%fabd_sun_z(:,:,:) = 0.0_r8 - this%fabd_sha_z(:,:,:) = 0.0_r8 - this%fabi_sun_z(:,:,:) = 0.0_r8 - this%fabi_sha_z(:,:,:) = 0.0_r8 - this%ed_parsun_z(:,:,:) = 0.0_r8 - this%ed_parsha_z(:,:,:) = 0.0_r8 - this%ed_laisun_z(:,:,:) = 0._r8 - this%ed_laisha_z(:,:,:) = 0._r8 - this%f_sun = 0.0_r8 -======= - ->>>>>>> main this%tr_soil_dir_dif(:) = 0.0_r8 this%fab(:) = 0.0_r8 this%fabi(:) = 0.0_r8 From 020013e35f93c004a56247774c09ca5faae25b18 Mon Sep 17 00:00:00 2001 From: adrifoster Date: Fri, 23 Aug 2024 10:40:32 -0600 Subject: [PATCH 26/27] make suggested changes from review --- fire/SFMainMod.F90 | 7 ++----- main/EDTypesMod.F90 | 4 ++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/fire/SFMainMod.F90 b/fire/SFMainMod.F90 index a6dbc62c64..eeb37e79f7 100644 --- a/fire/SFMainMod.F90 +++ b/fire/SFMainMod.F90 @@ -113,11 +113,8 @@ subroutine UpdateFireWeather(currentSite, bc_in) use FatesConstantsMod, only : tfrz => t_water_freeze_k_1atm use FatesConstantsMod, only : sec_per_day, sec_per_min - use EDTypesMod, only : CalculateTreeGrassArea + use EDTypesMod, only : CalculateTreeGrassAreaSite - ! CONSTANTS: - real(r8), parameter :: wind_atten_treed = 0.4_r8 ! wind attenuation factor for tree fraction - real(r8), parameter :: wind_atten_grass = 0.6_r8 ! wind attenuation factor for grass fraction ! ARGUMENTS: type(ed_site_type), intent(inout), target :: currentSite @@ -160,7 +157,7 @@ subroutine UpdateFireWeather(currentSite, bc_in) call currentSite%fireWeather%UpdateIndex(temp_C, precip, rh, wind) ! calculate site-level tree, grass, and bare fraction - call CalculateTreeGrassArea(currentSite, tree_fraction, grass_fraction, bare_fraction) + call CalculateTreeGrassAreaSite(currentSite, tree_fraction, grass_fraction, bare_fraction) ! update effective wind speed call currentSite%fireWeather%UpdateEffectiveWindSpeed(wind*sec_per_min, tree_fraction, & diff --git a/main/EDTypesMod.F90 b/main/EDTypesMod.F90 index cb5db8671b..875c826663 100644 --- a/main/EDTypesMod.F90 +++ b/main/EDTypesMod.F90 @@ -538,7 +538,7 @@ end subroutine ZeroMassBalFlux ! ===================================================================================== - subroutine CalculateTreeGrassArea(csite, tree_fraction, grass_fraction, bare_fraction) + subroutine CalculateTreeGrassAreaSite(csite, tree_fraction, grass_fraction, bare_fraction) ! ! DESCRIPTION: ! Calculates total grass, tree, and bare fractions for a site @@ -571,7 +571,7 @@ subroutine CalculateTreeGrassArea(csite, tree_fraction, grass_fraction, bare_fra grass_fraction = min(grass_fraction, 1.0_r8 - tree_fraction) bare_fraction = 1.0_r8 - tree_fraction - grass_fraction - end subroutine CalculateTreeGrassArea + end subroutine CalculateTreeGrassAreaSite !--------------------------------------------------------------------------------------- From 04332a4c6f3c41492955f40fac1bc7e8e79559dc Mon Sep 17 00:00:00 2001 From: adrifoster Date: Fri, 23 Aug 2024 14:33:42 -0600 Subject: [PATCH 27/27] add new function to public statement --- main/EDTypesMod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/EDTypesMod.F90 b/main/EDTypesMod.F90 index 875c826663..10ef14734c 100644 --- a/main/EDTypesMod.F90 +++ b/main/EDTypesMod.F90 @@ -481,7 +481,7 @@ module EDTypesMod ! Make public necessary subroutines and functions public :: dump_site - public :: CalculateTreeGrassArea + public :: CalculateTreeGrassAreaSite contains