diff --git a/biogeochem/EDCanopyStructureMod.F90 b/biogeochem/EDCanopyStructureMod.F90 index 081c734dd5..edeb42419b 100644 --- a/biogeochem/EDCanopyStructureMod.F90 +++ b/biogeochem/EDCanopyStructureMod.F90 @@ -1877,6 +1877,8 @@ subroutine update_hlm_dynamics(nsites,sites,fcolumn,bc_out) use EDTypesMod , only : ed_site_type, AREA use FatesPatchMod, only : fates_patch_type use FatesInterfaceTypesMod , only : bc_out_type + use EDParamsMod, only : num_emission_compounds + use FatesConstantsMod , only : sec_per_day ! ! !ARGUMENTS @@ -1903,6 +1905,8 @@ subroutine update_hlm_dynamics(nsites,sites,fcolumn,bc_out) bc_out(s)%dleaf_pa(:) = 0._r8 bc_out(s)%z0m_pa(:) = 0._r8 bc_out(s)%displa_pa(:) = 0._r8 + bc_out(s)%fire_emissions_pa(:,:) = 0._r8 + bc_out(s)%fire_emission_height_pa(:) = 0._r8 currentPatch => sites(s)%oldest_patch c = fcolumn(s) @@ -1956,6 +1960,13 @@ subroutine update_hlm_dynamics(nsites,sites,fcolumn,bc_out) currentCohort => currentCohort%taller end do + do c = 1, num_emission_compounds + !is this in the right place in the code? + !what else do we need to do with restarts to not mess up the first day of emissions? + bc_out(s)%fire_emissions_pa(ifp,c) = currentPatch%fire_emissions(c) / sec_per_day + end do + bc_out(s)%fire_emission_height_pa(ifp) = currentPatch%fire_emission_height + ! make sure there is some leaf and stem area if (total_patch_leaf_stem_area > nearzero) then currentCohort => currentPatch%shortest diff --git a/biogeochem/EDPatchDynamicsMod.F90 b/biogeochem/EDPatchDynamicsMod.F90 index b1fc9af66d..1f3a289921 100644 --- a/biogeochem/EDPatchDynamicsMod.F90 +++ b/biogeochem/EDPatchDynamicsMod.F90 @@ -3136,6 +3136,7 @@ subroutine fuse_2_patches(csite, dp, rp) ! ! !USES: use FatesSizeAgeTypeIndicesMod, only: get_age_class_index + use EDParamsMod, only: num_emission_compounds ! ! !ARGUMENTS: type (ed_site_type), intent(inout),target :: csite ! Current site @@ -3203,6 +3204,10 @@ subroutine fuse_2_patches(csite, dp, rp) rp%ros_front = (dp%ros_front*dp%area + rp%ros_front*rp%area) * inv_sum_area rp%tau_l = (dp%tau_l*dp%area + rp%tau_l*rp%area) * inv_sum_area rp%tfc_ros = (dp%tfc_ros*dp%area + rp%tfc_ros*rp%area) * inv_sum_area + rp%fire_emission_height = (dp%fire_emission_height*dp%area + rp%fire_emission_height*rp%area) * inv_sum_area + do c = 1, num_emission_compounds + rp%fire_emissions(c) = (dp%fire_emissions(c)*dp%area + rp%fire_emissions(c)*rp%area) * inv_sum_area + enddo rp%fi = (dp%fi*dp%area + rp%fi*rp%area) * inv_sum_area rp%fd = (dp%fd*dp%area + rp%fd*rp%area) * inv_sum_area rp%ros_back = (dp%ros_back*dp%area + rp%ros_back*rp%area) * inv_sum_area diff --git a/biogeochem/FatesPatchMod.F90 b/biogeochem/FatesPatchMod.F90 index 9b3b9ef919..94b064e5e4 100644 --- a/biogeochem/FatesPatchMod.F90 +++ b/biogeochem/FatesPatchMod.F90 @@ -22,6 +22,7 @@ module FatesPatchMod use PRTParametersMod, only : prt_params use FatesConstantsMod, only : nocomp_bareground use EDParamsMod, only : nlevleaf, nclmax, maxpft + use EDParamsMod, only : num_emission_compounds use FatesConstantsMod, only : n_dbh_bins, n_dist_types use FatesConstantsMod, only : t_water_freeze_k_1atm use FatesRunningMeanMod, only : ema_24hr, fixed_24hr, ema_lpa, ema_longterm @@ -216,6 +217,9 @@ module FatesPatchMod ! fire effects real(r8) :: scorch_ht(maxpft) ! scorch height [m] real(r8) :: tfc_ros ! total intensity-relevant fuel consumed - no trunks [kgC/m2 of burned ground/day] + real(r8) :: fire_emission_height ! Height of fire emissions into the atmsophere. m. + real(r8) :: fire_emissions(num_emission_compounds) ! Emissions from fires. g emissions/m2/day + !--------------------------------------------------------------------------- ! PLANT HYDRAULICS (not currently used in hydraulics RGK 03-2018) @@ -507,6 +511,9 @@ subroutine NanValues(this) this%scorch_ht(:) = nan this%tfc_ros = nan this%frac_burnt = nan + this%fire_emissions(:) = nan + this%fire_emission_height = nan + end subroutine NanValues @@ -592,6 +599,8 @@ subroutine ZeroValues(this) this%fd = 0.0_r8 this%scorch_ht(:) = 0.0_r8 this%tfc_ros = 0.0_r8 + this%fire_emissions(:) = 0.0_r8 + this%fire_emission_height = 0.0_r8 this%frac_burnt = 0.0_r8 end subroutine ZeroValues diff --git a/fire/SFMainMod.F90 b/fire/SFMainMod.F90 index a25323b517..1876d2c698 100644 --- a/fire/SFMainMod.F90 +++ b/fire/SFMainMod.F90 @@ -37,6 +37,24 @@ module SFMainMod implicit none private + + public :: fire_model + public :: fire_danger_index + 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 + public :: cambial_damage_kill + public :: post_fire_mortality + public :: fire_emissions + + ! The following parameter represents one of the values of hlm_spitfire_mode + ! and more of these appear in subroutine area_burnt_intensity below + ! NB. The same parameters are set in /src/biogeochem/CNFireFactoryMod + public :: DailyFireModel public :: UpdateFuelCharacteristics @@ -70,6 +88,8 @@ subroutine DailyFireModel(currentSite, bc_in) call crown_damage(currentSite) call cambial_damage_kill(currentSite) call post_fire_mortality(currentSite) + call fire_emissions(currentSite) + end if end subroutine DailyFireModel @@ -693,5 +713,46 @@ subroutine post_fire_mortality ( currentSite ) end subroutine post_fire_mortality + !***************************************************************** + subroutine fire_emissions ( currentSite ) + !***************************************************************** + + use EDParamsMod , only : num_emission_compounds + use FatesInterfaceTypesMod , only : hlm_use_nocomp + + type(ed_site_type), intent(in), target :: currentSite + type(fates_patch_type), pointer :: currentPatch + type(fates_cohort_type), pointer :: currentCohort + real(r8) biomass_burned ! Local biomass burned variable + real(r8) emission_factor ! Local emission factor variable + integer c + + currentPatch => currentSite%oldest_patch + if(hlm_use_nocomp == itrue)then + ! Do not do fire emissions if we are not in nocomp mode + !this capability has not been added yet. + + do while(associated(currentPatch)) + if(currentPatch%nocomp_pft_label .ne. nocomp_bareground)then + biomass_burned = currentPatch%TFC_ROS / 0.45_r8 ! kg biomass/m2/day + !n.b. does this also need to include the amount of tree canopy consumed? + + do c = 1, num_emission_compounds + emission_factor = EDPftvarcon_inst%fire_emission_factors(currentPatch%nocomp_pft_label,c) + currentPatch%fire_emissions(c) = biomass_burned * emission_factor + enddo + + currentPatch%fire_emission_height = EDPftvarcon_inst%fire_emission_heights(currentPatch%nocomp_pft_label) + if(currentPatch%fire_emissions(c).gt.0.0_r8)then + write(*,*) 'postivie emissionssf',currentPatch%fire_emissions(1),biomass_burned + endif + endif ! bare ground + currentPatch => currentPatch%younger + + enddo !end patch loop + end if ! is nocomp + + end subroutine fire_emissions + ! ============================================================================ end module SFMainMod diff --git a/main/EDInitMod.F90 b/main/EDInitMod.F90 index 625e65fabc..8c6bea6e7f 100644 --- a/main/EDInitMod.F90 +++ b/main/EDInitMod.F90 @@ -1008,6 +1008,9 @@ subroutine init_patches( nsites, sites, bc_in) currentPatch%ros_back = 0._r8 currentPatch%scorch_ht(:) = 0._r8 currentPatch%frac_burnt = 0._r8 + currentPatch%fire_emissions(:) = 0._r8 + currentPatch%fire_emission_height = 0._r8 + currentPatch => currentPatch%older enddo enddo diff --git a/main/EDParamsMod.F90 b/main/EDParamsMod.F90 index 92d8178ab0..0dda9fdc85 100644 --- a/main/EDParamsMod.F90 +++ b/main/EDParamsMod.F90 @@ -93,6 +93,8 @@ module EDParamsMod integer, parameter, public :: maxpft = 16 ! maximum number of PFTs allowed + integer, parameter, public :: num_emission_compounds = 13 ! number of fire emission fields calculated + real(r8),protected,public :: q10_mr ! Q10 for respiration rate (for soil fragmenation and plant respiration) (unitless) real(r8),protected,public :: q10_froz ! Q10 for frozen-soil respiration rates (for soil fragmentation) (unitless) @@ -342,7 +344,7 @@ subroutine FatesRegisterParams(fates_params) use FatesParametersInterface, only : dimension_name_history_size_bins, dimension_name_history_age_bins use FatesParametersInterface, only : dimension_name_history_height_bins, dimension_name_hydr_organs use FatesParametersInterface, only : dimension_name_history_coage_bins, dimension_name_history_damage_bins - use FatesParametersInterface, only : dimension_shape_scalar, dimension_name_landuse + use FatesParametersInterface, only : dimension_shape_scalar, dimension_name_landuse, dimension_name_nemission_compounds implicit none @@ -357,7 +359,8 @@ subroutine FatesRegisterParams(fates_params) character(len=param_string_length), parameter :: dim_names_hydro_organs(1) = (/dimension_name_hydr_organs/) character(len=param_string_length), parameter :: dim_names_damageclass(1)= (/dimension_name_history_damage_bins/) character(len=param_string_length), parameter :: dim_names_landuse(1)= (/dimension_name_landuse/) - + character(len=param_string_length), parameter :: dim_names_nemission_compounds(1)= (/dimension_name_nemission_compounds/) + call FatesParamsInit() call fates_params%RegisterParameter(name=ED_name_photo_temp_acclim_timescale, dimension_shape=dimension_shape_scalar, & @@ -550,6 +553,7 @@ subroutine FatesRegisterParams(fates_params) call fates_params%RegisterParameter(name=name_landuse_grazing_rate, dimension_shape=dimension_shape_1d, & dimension_names=dim_names_landuse) + end subroutine FatesRegisterParams diff --git a/main/EDPftvarcon.F90 b/main/EDPftvarcon.F90 index 319fc5ff51..1c0a6bca02 100644 --- a/main/EDPftvarcon.F90 +++ b/main/EDPftvarcon.F90 @@ -129,7 +129,9 @@ module EDPftvarcon ! ------------------------------------------------------------------------------------------- real(r8), allocatable :: fire_alpha_SH(:) ! spitfire parameter, alpha scorch height ! Equation 16 Thonicke et al 2010 - + real(r8), allocatable :: fire_emission_factors(:,:) ! emission factorss indexed by PFT and emission type/species. g emissions/m2/s per kg biomass burned. + real(r8), allocatable :: fire_emission_heights(:) ! heights that fire emissions are injected into the atmosphere (m) + ! Non-PARTEH Allometry Parameters ! -------------------------------------------------------------------------------------------- @@ -342,7 +344,8 @@ subroutine Register_PFT(this, fates_params) use FatesParametersInterface, only : fates_parameters_type, param_string_length use FatesParametersInterface, only : dimension_name_pft, dimension_shape_1d - use FatesParametersInterface, only : dimension_name_hlm_pftno, dimension_shape_2d + use FatesParametersInterface, only : dimension_name_hlm_pftno, dimension_name_nemission_compounds + use FatesParametersInterface, only : dimension_shape_2d implicit none @@ -351,7 +354,8 @@ subroutine Register_PFT(this, fates_params) character(len=param_string_length), parameter :: dim_names(1) = (/dimension_name_pft/) character(len=param_string_length) :: pftmap_dim_names(2) - + character(len=param_string_length) :: emission_factors_dim_names(2) + integer, parameter :: dim_lower_bound(1) = (/ lower_bound_pft /) @@ -473,6 +477,18 @@ subroutine Register_PFT(this, fates_params) call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, & dimension_names=dim_names, lower_bounds=dim_lower_bound) + ! adding the hlm_pft_map variable with two dimensions - FATES PFTno and N emission factors + emission_factors_dim_names(2) = dimension_name_pft + emission_factors_dim_names(1) = dimension_name_nemission_compounds + + name = 'fates_fire_emission_factors' + call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_2d, & + dimension_names=emission_factors_dim_names, lower_bounds=dim_lower_bound) + + name = 'fates_fire_emission_heights' + call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, & + dimension_names=dim_names, lower_bounds=dim_lower_bound) + name = 'fates_allom_frbstor_repro' call fates_params%RegisterParameter(name=name, dimension_shape=dimension_shape_1d, & dimension_names=dim_names, lower_bounds=dim_lower_bound) @@ -882,6 +898,14 @@ subroutine Receive_PFT(this, fates_params) call fates_params%RetrieveParameterAllocate(name=name, & data=this%fire_alpha_SH) + name = 'fates_fire_emission_factors' + call fates_params%RetrieveParameterAllocate(name=name, & + data=this%fire_emission_factors) + + name = 'fates_fire_emission_heights' + call fates_params%RetrieveParameterAllocate(name=name, & + data=this%fire_emission_heights) + name = 'fates_allom_frbstor_repro' call fates_params%RetrieveParameterAllocate(name=name, & data=this%allom_frbstor_repro) @@ -1177,7 +1201,7 @@ subroutine Register_PFT_numrad(this, fates_params) ! arrays. We have to register the parameters as 1-d arrays as they ! are on the parameter file. We store them as 2-d in the receive step. use FatesParametersInterface, only : fates_parameters_type, param_string_length - use FatesParametersInterface, only : dimension_name_pft, dimension_shape_1d + use FatesParametersInterface, only : dimension_name_pft, dimension_name_nemission_compounds, dimension_shape_1d implicit none @@ -1634,6 +1658,8 @@ subroutine FatesReportPFTParams(is_master) write(fates_log(),fmt0) 'phen_flush_fraction',EDpftvarcon_inst%phenflush_fraction write(fates_log(),fmt0) 'phen_cold_size_threshold = ',EDPftvarcon_inst%phen_cold_size_threshold write(fates_log(),fmt0) 'fire_alpha_SH = ',EDPftvarcon_inst%fire_alpha_SH + write(fates_log(),fmt0) 'fire_emission_factors = ',EDPftvarcon_inst%fire_emission_factors + write(fates_log(),fmt0) 'fire_emission_factors = ',EDPftvarcon_inst%fire_emission_heights write(fates_log(),fmt0) 'allom_frbstor_repro = ',EDPftvarcon_inst%allom_frbstor_repro write(fates_log(),fmt0) 'hydro_p_taper = ',EDPftvarcon_inst%hydr_p_taper write(fates_log(),fmt0) 'hydro_rs2 = ',EDPftvarcon_inst%hydr_rs2 diff --git a/main/EDTypesMod.F90 b/main/EDTypesMod.F90 index c21cdd6fe1..6cc016c5a1 100644 --- a/main/EDTypesMod.F90 +++ b/main/EDTypesMod.F90 @@ -88,8 +88,6 @@ module EDTypesMod ! The actual number of soil layers should not exceed this - - ! BIOLOGY/BIOGEOCHEMISTRY integer , parameter, public :: num_vegtemp_mem = 10 ! Window of time over which we track temp for cold sensecence (days) @@ -457,6 +455,7 @@ module EDTypesMod real(r8) :: NF_successful ! daily ignitions in km2 that actually lead to fire class(fire_weather), pointer :: fireWeather ! fire weather object + ! PLANT HYDRAULICS type(ed_site_hydr_type), pointer :: si_hydr diff --git a/main/FatesHistoryInterfaceMod.F90 b/main/FatesHistoryInterfaceMod.F90 index f18dd6de9c..02acf5b12d 100644 --- a/main/FatesHistoryInterfaceMod.F90 +++ b/main/FatesHistoryInterfaceMod.F90 @@ -460,7 +460,8 @@ module FatesHistoryInterfaceMod integer :: ih_fire_fuel_mef_si integer :: ih_sum_fuel_si integer :: ih_fragmentation_scaler_sl - + integer :: ih_fire_emission_height_si + integer :: ih_nplant_si_scpf integer :: ih_gpp_si_scpf integer :: ih_npp_totl_si_scpf @@ -712,6 +713,9 @@ module FatesHistoryInterfaceMod integer :: ih_burnt_frac_litter_si_fuel integer :: ih_fuel_amount_si_fuel + ! indices to (site x emissions) variables + integer :: ih_fire_emissions_si_emis + ! indices to (site x cwd size class) variables integer :: ih_cwd_ag_si_cwdsc integer :: ih_cwd_bg_si_cwdsc @@ -798,7 +802,8 @@ module FatesHistoryInterfaceMod integer, private :: levscls_index_, levpft_index_, levage_index_ integer, private :: levfuel_index_, levcwdsc_index_, levscag_index_ integer, private :: levcan_index_, levcnlf_index_, levcnlfpft_index_ - integer, private :: levcdpf_index_, levcdsc_index_, levcdam_index_ + integer, private :: levcdpf_index_, levcdsc_index_, levcdam_index_ + integer, private :: levemis_index_ integer, private :: levscagpft_index_, levagepft_index_ integer, private :: levheight_index_, levagefuel_index_ integer, private :: levelem_index_, levelpft_index_ @@ -834,6 +839,7 @@ module FatesHistoryInterfaceMod procedure :: levcacls_index procedure :: levpft_index procedure :: levage_index + procedure :: levemis_index procedure :: levfuel_index procedure :: levcwdsc_index procedure :: levcan_index @@ -869,6 +875,7 @@ module FatesHistoryInterfaceMod procedure, private :: set_levscls_index procedure, private :: set_levpft_index procedure, private :: set_levage_index + procedure, private :: set_levemis_index procedure, private :: set_levfuel_index procedure, private :: set_levcwdsc_index procedure, private :: set_levcan_index @@ -914,7 +921,7 @@ subroutine Init(this, num_threads, fates_bounds) use FatesIODimensionsMod, only : column, levsoil, levscpf use FatesIODimensionsMod, only : levscls, levpft, levage - use FatesIODimensionsMod, only : levcacls, levcapf + use FatesIODimensionsMod, only : levcacls, levcapf, levemis use FatesIODimensionsMod, only : levfuel, levcwdsc, levscag use FatesIODimensionsMod, only : levscagpft, levagepft use FatesIODimensionsMod, only : levcan, levcnlf, levcnlfpft @@ -973,6 +980,11 @@ subroutine Init(this, num_threads, fates_bounds) call this%dim_bounds(dim_count)%Init(levage, num_threads, & fates_bounds%age_class_begin, fates_bounds%age_class_end) + dim_count = dim_count + 1 + call this%set_levemis_index(dim_count) + call this%dim_bounds(dim_count)%Init(levemis, num_threads, & + fates_bounds%emis_class_begin, fates_bounds%emis_class_end) + dim_count = dim_count + 1 call this%set_levfuel_index(dim_count) call this%dim_bounds(dim_count)%Init(levfuel, num_threads, & @@ -1126,6 +1138,10 @@ subroutine SetThreadBoundsEach(this, thread_index, thread_bounds) call this%dim_bounds(index)%SetThreadBounds(thread_index, & thread_bounds%age_class_begin, thread_bounds%age_class_end) + index = this%levemis_index() + call this%dim_bounds(index)%SetThreadBounds(thread_index, & + thread_bounds%emis_class_begin, thread_bounds%emis_class_end) + index = this%levfuel_index() call this%dim_bounds(index)%SetThreadBounds(thread_index, & thread_bounds%fuel_begin, thread_bounds%fuel_end) @@ -1220,6 +1236,7 @@ subroutine assemble_history_output_types(this) implicit none + class(fates_history_interface_type), intent(inout) :: this call this%init_dim_kinds_maps() @@ -1247,6 +1264,9 @@ subroutine assemble_history_output_types(this) call this%set_dim_indices(site_age_r8, 1, this%column_index()) call this%set_dim_indices(site_age_r8, 2, this%levage_index()) + call this%set_dim_indices(site_emis_r8, 1, this%column_index()) + call this%set_dim_indices(site_emis_r8, 2, this%levemis_index()) + call this%set_dim_indices(site_fuel_r8, 1, this%column_index()) call this%set_dim_indices(site_fuel_r8, 2, this%levfuel_index()) @@ -1352,189 +1372,6 @@ subroutine set_dim_indices(this, dk_name, idim, dim_index) end subroutine set_dim_indices - ! ======================================================================= - subroutine set_column_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%column_index_ = index - end subroutine set_column_index - - integer function column_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - column_index = this%column_index_ - end function column_index - - ! ======================================================================= - subroutine set_levsoil_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levsoil_index_ = index - end subroutine set_levsoil_index - - integer function levsoil_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levsoil_index = this%levsoil_index_ - end function levsoil_index - - ! ======================================================================= - subroutine set_levscpf_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levscpf_index_ = index - end subroutine set_levscpf_index - - integer function levscpf_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levscpf_index = this%levscpf_index_ - end function levscpf_index - - ! ======================================================================= - subroutine set_levscls_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levscls_index_ = index - end subroutine set_levscls_index - - integer function levscls_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levscls_index = this%levscls_index_ - end function levscls_index - - !========================================================================= - subroutine set_levcacls_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levcacls_index_ = index - end subroutine set_levcacls_index - - integer function levcacls_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levcacls_index = this%levcacls_index_ - end function levcacls_index - - !========================================================================= - subroutine set_levcapf_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levcapf_index_ = index - end subroutine set_levcapf_index - - integer function levcapf_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levcapf_index = this%levcapf_index_ - end function levcapf_index - - ! ======================================================================= - subroutine set_levpft_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levpft_index_ = index - end subroutine set_levpft_index - - integer function levpft_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levpft_index = this%levpft_index_ - end function levpft_index - - ! ======================================================================= - subroutine set_levage_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levage_index_ = index - end subroutine set_levage_index - - integer function levage_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levage_index = this%levage_index_ - end function levage_index - - ! ======================================================================= - subroutine set_levfuel_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levfuel_index_ = index - end subroutine set_levfuel_index - - integer function levfuel_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levfuel_index = this%levfuel_index_ - end function levfuel_index - - ! ======================================================================= - subroutine set_levcwdsc_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levcwdsc_index_ = index - end subroutine set_levcwdsc_index - - integer function levcwdsc_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levcwdsc_index = this%levcwdsc_index_ - end function levcwdsc_index - - ! ======================================================================= - subroutine set_levcan_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levcan_index_ = index - end subroutine set_levcan_index - - integer function levcan_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levcan_index = this%levcan_index_ - end function levcan_index - - ! ======================================================================= - subroutine set_levcnlf_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levcnlf_index_ = index - end subroutine set_levcnlf_index - - integer function levcnlf_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levcnlf_index = this%levcnlf_index_ - end function levcnlf_index - - ! ======================================================================= - subroutine set_levcnlfpft_index(this, index) - implicit none - class(fates_history_interface_type), intent(inout) :: this - integer, intent(in) :: index - this%levcnlfpft_index_ = index - end subroutine set_levcnlfpft_index - - integer function levcnlfpft_index(this) - implicit none - class(fates_history_interface_type), intent(in) :: this - levcnlfpft_index = this%levcnlfpft_index_ - end function levcnlfpft_index - - ! ======================================================================= subroutine set_levcdpf_index(this, index) implicit none class(fates_history_interface_type), intent(inout) :: this @@ -1548,6 +1385,7 @@ integer function levcdpf_index(this) levcdpf_index = this%levcdpf_index_ end function levcdpf_index + ! ======================================================================= subroutine set_levcdsc_index(this, index) implicit none @@ -1938,7 +1776,7 @@ subroutine init_dim_kinds_maps(this) ! ---------------------------------------------------------------------------------- use FatesIOVariableKindMod, only : site_r8, site_soil_r8, site_size_pft_r8 use FatesIOVariableKindMod, only : site_size_r8, site_pft_r8, site_age_r8 - use FatesIOVariableKindMod, only : site_coage_r8, site_coage_pft_r8 + use FatesIOVariableKindMod, only : site_coage_r8, site_coage_pft_r8, site_emis_r8 use FatesIOVariableKindMod, only : site_fuel_r8, site_cwdsc_r8, site_scag_r8 use FatesIOVariableKindMod, only : site_scagpft_r8, site_agepft_r8 use FatesIOVariableKindMod, only : site_can_r8, site_cnlf_r8, site_cnlfpft_r8 @@ -1986,6 +1824,10 @@ subroutine init_dim_kinds_maps(this) ! site x patch-age class index = index + 1 call this%dim_kinds(index)%Init(site_age_r8, 2) + + ! site x patch-age class + index = index + 1 + call this%dim_kinds(index)%Init(site_emis_r8, 2) ! site x fuel size class index = index + 1 @@ -2316,7 +2158,6 @@ subroutine update_history_dyn(this,nc,nsites,sites,bc_in) type(bc_in_type) , intent(in) :: bc_in(nsites) ! Locals - ! If we don't have dynamics turned on, we just abort these diagnostics ! There is future work slated to split dynamics diagnostics into those ! related to states, and those related to fluxes. States should be fine @@ -2340,8 +2181,6 @@ end subroutine update_history_dyn subroutine update_history_dyn1(this,nc,nsites,sites,bc_in) - - ! Arguments class(fates_history_interface_type) :: this integer , intent(in) :: nc ! clump index @@ -3376,7 +3215,21 @@ subroutine update_history_dyn2(this,nc,nsites,sites,bc_in) cpatch%age_class = get_age_class_index(cpatch%age) - ! Increment the fractional area in each age class bin + + ! Update fire emissions variables + + do i_emis = 1,num_emission_compounds + hio_fire_emissions_si_em(io_si, i_emis) = hio_fire_emissions_si_em(io_si,i_emis) + & + cpatch%fire_emissions(i_emis) * cpatch%area * AREA_INV + enddo + + hio_fire_emission_height_si(io_si) = hio_fire_emission_height_si(io_si) + & + cpatch%fire_emission_height * cpatch%area * AREA_INV + + hio_fire_intensity_area_product_si(io_si) = hio_fire_intensity_area_product_si(io_si) + & + cpatch%FI * cpatch%frac_burnt * cpatch%area * AREA_INV * J_per_kJ + + ! Increment the fractional area in each age class bin hio_area_si_age(io_si,cpatch%age_class) = hio_area_si_age(io_si,cpatch%age_class) & + cpatch%area * AREA_INV @@ -3385,6 +3238,7 @@ subroutine update_history_dyn2(this,nc,nsites,sites,bc_in) hio_area_si_landuse(io_si, cpatch%land_use_label) = & hio_area_si_landuse(io_si, cpatch%land_use_label) & + cpatch%area * AREA_INV + hio_burnedarea_si_landuse(io_si, cpatch%land_use_label) = & hio_burnedarea_si_landuse(io_si, cpatch%land_use_label) + & @@ -5974,7 +5828,7 @@ subroutine define_history_vars(this, initialize_variables) use FatesIOVariableKindMod, only : site_r8, site_soil_r8, site_size_pft_r8 use FatesIOVariableKindMod, only : site_size_r8, site_pft_r8, site_age_r8 - use FatesIOVariableKindMod, only : site_coage_pft_r8, site_coage_r8 + use FatesIOVariableKindMod, only : site_coage_pft_r8, site_coage_r8, site_emis_r8 use FatesIOVariableKindMod, only : site_height_r8, site_agefuel_r8 use FatesInterfaceTypesMod, only : hlm_use_planthydro @@ -6004,6 +5858,7 @@ subroutine define_history_vars(this, initialize_variables) ! canopy layer (site_can_r8) : CL ! coarse woody debris size (site_cwdsc_r8) : DC ! element (site_elem_r8) : EL + ! fire emissions class (site_emis_r8) : EM ! leaf layer : LL ! fuel class (site_fuel_r8) : FC ! height (site_height_r8) : HT @@ -6026,7 +5881,6 @@ subroutine define_history_vars(this, initialize_variables) ! cohort size x crown damage (site_cdsc_r8) : SZCD ! cohort size x crown damage x pft (site_cdpf_r8) : CDPF - if_dyn0: if(hlm_hist_level_dynam>0) then ! Site level counting variables diff --git a/main/FatesHistoryVariableType.F90 b/main/FatesHistoryVariableType.F90 index b24bb1bf86..074da16dbd 100644 --- a/main/FatesHistoryVariableType.F90 +++ b/main/FatesHistoryVariableType.F90 @@ -7,7 +7,7 @@ module FatesHistoryVariableType use FatesIOVariableKindMod, only : fates_io_variable_kind_type use FatesIOVariableKindMod, only : site_r8, site_soil_r8, site_size_pft_r8 use FatesIOVariableKindMod, only : site_size_r8, site_pft_r8, site_age_r8 - use FatesIOVariableKindMod, only : site_coage_r8, site_coage_pft_r8 + use FatesIOVariableKindMod, only : site_coage_r8, site_coage_pft_r8, site_emis_r8 use FatesIOVariableKindMod, only : site_height_r8 use FatesIOVariableKindMod, only : site_fuel_r8, site_cwdsc_r8, site_scag_r8 use FatesIOVariableKindMod, only : site_scagpft_r8, site_agepft_r8 @@ -152,6 +152,10 @@ subroutine Init(this, vname, units, long, use_default, & allocate(this%r82d(lb1:ub1, lb2:ub2)) this%r82d(:,:) = flushval + case(site_emis_r8) + allocate(this%r82d(lb1:ub1, lb2:ub2)) + this%r82d(:,:) = flushval + case(site_height_r8) allocate(this%r82d(lb1:ub1, lb2:ub2)) this%r82d(:,:) = flushval @@ -320,6 +324,8 @@ subroutine HFlush(this, thread, dim_bounds, dim_kinds) this%r82d(lb1:ub1, lb2:ub2) = this%flushval case(site_age_r8) this%r82d(lb1:ub1, lb2:ub2) = this%flushval + case(site_emis_r8) + this%r82d(lb1:ub1, lb2:ub2) = this%flushval case(site_height_r8) this%r82d(lb1:ub1, lb2:ub2) = this%flushval case(site_fuel_r8) diff --git a/main/FatesIODimensionsMod.F90 b/main/FatesIODimensionsMod.F90 index ed487d7eed..a132914088 100644 --- a/main/FatesIODimensionsMod.F90 +++ b/main/FatesIODimensionsMod.F90 @@ -20,6 +20,7 @@ module FatesIODimensionsMod character(*), parameter, public :: levscls = 'fates_levscls' ! matches histFileMod character(*), parameter, public :: levpft = 'fates_levpft' ! matches histFileMod character(*), parameter, public :: levage = 'fates_levage' ! matches histFileMod + character(*), parameter, public :: levemis = 'fates_levemis' ! matches histFileMod character(*), parameter, public :: levheight = 'fates_levheight' ! matches histFileMod character(*), parameter, public :: levfuel = 'fates_levfuel' ! matches histFileMod character(*), parameter, public :: levcwdsc = 'fates_levcwdsc' ! matches histFileMod @@ -67,6 +68,9 @@ module FatesIODimensionsMod ! levheight = This is a structure that records the boundaries for the ! number of height dimension + ! levemis = This is a structure that records the boundaries for the + ! number of emission compounds dimension + ! levfuel = This is a structure that records the boundaries for the ! number of fuel-size-class dimension @@ -109,7 +113,7 @@ module FatesIODimensionsMod ! levelpft = This records the boundaries for elements x pft ! levelcwd = This records the boundaries for element x cwd ! levelage = This records the boundaries for element x age - + ! levcdsc = This is a structure that records the boundaries for the ! number of crown damage x size classes dimension @@ -155,6 +159,8 @@ module FatesIODimensionsMod integer :: age_class_end integer :: height_begin integer :: height_end + integer :: emis_class_begin + integer :: emis_class_end integer :: fuel_begin integer :: fuel_end integer :: cwdsc_begin diff --git a/main/FatesIOVariableKindMod.F90 b/main/FatesIOVariableKindMod.F90 index 75ea7dbe57..9a5e819032 100644 --- a/main/FatesIOVariableKindMod.F90 +++ b/main/FatesIOVariableKindMod.F90 @@ -27,6 +27,7 @@ module FatesIOVariableKindMod character(*), parameter, public :: cohort_int = 'CO_INT' character(*), parameter, public :: site_pft_r8 = 'SI_PFT_R8' character(*), parameter, public :: site_age_r8 = 'SI_AGE_R8' + character(*), parameter, public :: site_emis_r8 = 'SI_EMIS_R8' character(*), parameter, public :: site_height_r8 = 'SI_HEIGHT_R8' character(*), parameter, public :: site_fuel_r8 = 'SI_FUEL_R8' character(*), parameter, public :: site_cwdsc_r8 = 'SI_CWDSC_R8' diff --git a/main/FatesInterfaceMod.F90 b/main/FatesInterfaceMod.F90 index c731819d65..d8809f5c73 100644 --- a/main/FatesInterfaceMod.F90 +++ b/main/FatesInterfaceMod.F90 @@ -24,6 +24,7 @@ module FatesInterfaceMod use EDParamsMod , only : maxpft use EDTypesMod , only : do_fates_salinity use EDTypesMod , only : numWaterMem + use EDParamsMod , only : num_emission_compounds use EDTypesMod , only : numlevsoil_max use EDTypesMod , only : ed_site_type use FatesPatchMod , only : fates_patch_type @@ -388,6 +389,8 @@ subroutine zero_bcs(fates,s) fates%bc_out(s)%htop_pa(:) = 0.0_r8 fates%bc_out(s)%hbot_pa(:) = 0.0_r8 fates%bc_out(s)%displa_pa(:) = 0.0_r8 + fates%bc_out(s)%fire_emissions_pa(:,:) = 0.0_r8 + fates%bc_out(s)%fire_emission_height_pa(:) = 0.0_r8 fates%bc_out(s)%z0m_pa(:) = 0.0_r8 fates%bc_out(s)%dleaf_pa(:) = 0.0_r8 fates%bc_out(s)%nocomp_pft_label_pa(:) = 0 @@ -714,12 +717,16 @@ subroutine allocate_bcout(bc_out, nlevsoil_in, nlevdecomp_in) allocate(bc_out%displa_pa(maxpatch_total)) allocate(bc_out%z0m_pa(maxpatch_total)) - + allocate(bc_out%canopy_fraction_pa(maxpatch_total)) allocate(bc_out%frac_veg_nosno_alb_pa(maxpatch_total)) allocate(bc_out%nocomp_pft_label_pa(maxpatch_total)) + ! Fire emissions + allocate(bc_out%fire_emissions_pa(maxpatch_total,num_emission_compounds)) + allocate(bc_out%fire_emission_height_pa(maxpatch_total)) + ! Plant-Hydro BC's if (hlm_use_planthydro.eq.itrue) then allocate(bc_out%qflx_soil2root_sisl(nlevsoil_in)) @@ -1145,7 +1152,7 @@ subroutine fates_history_maps use FatesFuelClassesMod, only : num_fuel_classes use EDParamsMod, only : nclmax - use EDParamsMod, only : nlevleaf + use EDParamsMod, only : nlevleaf, num_emission_compounds use EDParamsMod, only : ED_val_history_sizeclass_bin_edges use EDParamsMod, only : ED_val_history_ageclass_bin_edges use EDParamsMod, only : ED_val_history_height_bin_edges @@ -1164,6 +1171,7 @@ subroutine fates_history_maps integer :: ipft integer :: icwd integer :: ifuel + integer :: iemis integer :: ican integer :: icdam integer :: ileaf @@ -1178,6 +1186,7 @@ subroutine fates_history_maps allocate( fates_hdim_scmap_levscpf(1:nlevsclass*numpft)) allocate( fates_hdim_levpft(1:numpft )) allocate( fates_hdim_levlanduse(1:n_landuse_cats)) + allocate( fates_hdim_levemis(1:num_emission_compounds )) allocate( fates_hdim_levfuel(1:num_fuel_classes )) allocate( fates_hdim_levcwdsc(1:NCWD )) allocate( fates_hdim_levage(1:nlevage )) @@ -1236,6 +1245,10 @@ subroutine fates_history_maps fates_hdim_levfuel(ifuel) = ifuel end do + do iemis=1,num_emission_compounds + fates_hdim_levemis(iemis) = iemis + end do + ! make cwd array do icwd=1,NCWD fates_hdim_levcwdsc(icwd) = icwd diff --git a/main/FatesInterfaceTypesMod.F90 b/main/FatesInterfaceTypesMod.F90 index 416af2728a..446d72eba6 100644 --- a/main/FatesInterfaceTypesMod.F90 +++ b/main/FatesInterfaceTypesMod.F90 @@ -319,6 +319,7 @@ module FatesInterfaceTypesMod integer , public, allocatable :: fates_hdim_levpft(:) ! plant pft dimension integer , public, allocatable :: fates_hdim_levlanduse(:) ! land use label dimension integer , public, allocatable :: fates_hdim_levfuel(:) ! fire fuel size class (fsc) dimension + integer , public, allocatable :: fates_hdim_levemis(:) ! fire emissions class dimensionn integer , public, allocatable :: fates_hdim_levcwdsc(:) ! cwd class dimension integer , public, allocatable :: fates_hdim_levcan(:) ! canopy-layer dimension real(r8), public, allocatable :: fates_hdim_levleaf(:) ! leaf-layer dimension, integrated VAI [m2/m2] @@ -771,6 +772,9 @@ module FatesInterfaceTypesMod real(r8), allocatable :: htop_pa(:) ! top of the canopy [m] real(r8), allocatable :: hbot_pa(:) ! bottom of canopy? [m] + real(r8), allocatable :: fire_emissions_pa(:,:) ! Fire emissions per compound + real(r8), allocatable :: fire_emission_height_pa(:) ! Fire emission height in atmosphere (m) + real(r8), allocatable :: z0m_pa(:) ! roughness length [m] real(r8), allocatable :: displa_pa(:) ! displacement height [m] real(r8), allocatable :: dleaf_pa(:) ! leaf characteristic dimension/width/diameter [m] diff --git a/main/FatesParametersInterface.F90 b/main/FatesParametersInterface.F90 index feebf503b7..c777a839fd 100644 --- a/main/FatesParametersInterface.F90 +++ b/main/FatesParametersInterface.F90 @@ -39,6 +39,7 @@ module FatesParametersInterface character(len=*), parameter, public :: dimension_name_history_damage_bins = 'fates_history_damage_bins' character(len=*), parameter, public :: dimension_name_damage = 'fates_damage_class' character(len=*), parameter, public :: dimension_name_landuse = 'fates_landuseclass' + character(len=*), parameter, public :: dimension_name_nemission_compounds = 'fates_nemission_compounds' ! Dimensions in the host namespace: character(len=*), parameter, public :: dimension_name_host_allpfts = 'allpfts' diff --git a/main/FatesRestartInterfaceMod.F90 b/main/FatesRestartInterfaceMod.F90 index 8e4c28d674..77e4930b5f 100644 --- a/main/FatesRestartInterfaceMod.F90 +++ b/main/FatesRestartInterfaceMod.F90 @@ -49,6 +49,7 @@ module FatesRestartInterfaceMod use EDTypesMod, only : area use EDTypesMod, only : set_patchno use EDParamsMod, only : nlevleaf + use EDParamsMod, only : num_emission_compounds use PRTGenericMod, only : prt_global use PRTGenericMod, only : num_elements use FatesRunningMeanMod, only : rmean_type @@ -87,6 +88,7 @@ module FatesRestartInterfaceMod ! pa: patch dimension ! co: cohort dimension ! ft: functional type dimension + ! em: emission compounds dimension ! cl: canopy layer dimension (upper, lower, etc) ! ls: layer sublayer dimension (fine discretization of upper,lower) ! wm: the number of memory slots for water (currently 10) @@ -223,7 +225,11 @@ module FatesRestartInterfaceMod integer :: ir_scorch_ht_pa_pft integer :: ir_litter_moisture_pa_nfsc - + + ! Emission fluxes + integer :: ir_fire_emissions_pa_em + integer :: ir_fire_emission_height_pa + ! Site level integer :: ir_dd_status_sift integer :: ir_dleafondate_sift @@ -1054,6 +1060,15 @@ subroutine define_restart_vars(this, initialize_variables) call this%set_restart_var(vname='fates_litter_moisture_pa_nfsc', vtype=cohort_r8, & long_name='scorch height', units='m', flushval = flushzero, & hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_litter_moisture_pa_nfsc) + + call this%set_restart_var(vname='fates_fire_emissions_pa_em', vtype=cohort_r8, & + long_name='fire emissions', units='kg emissions/m2/s', flushval = flushzero, & + hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_fire_emissions_pa_em) + + call this%set_restart_var(vname='fates_fire_emission_height_pa', vtype=cohort_r8, & + long_name='fire emissions height', units='m', flushval = flushzero, & + hlms='CLM:ALM', initialize=initialize_variables, ivar=ivar, index = ir_fire_emission_height_pa) + end if @@ -2051,6 +2066,7 @@ subroutine set_restart_vectors(this,nc,nsites,sites) integer :: io_idx_co ! cohort index integer :: io_idx_pa_pft ! each pft within each patch (pa_pft) integer :: io_idx_pa_cwd ! each cwd class within each patch (pa_cwd) + integer :: io_idx_pa_em ! each emission class within each patch (pa_em) integer :: io_idx_pa_cwsl ! each cwd x soil layer integer :: io_idx_pa_dcsl ! each decomposability x soil layer integer :: io_idx_pa_dc ! each decomposability index @@ -2595,6 +2611,13 @@ subroutine set_restart_vectors(this,nc,nsites,sites) io_idx_pa_cwd = io_idx_pa_cwd + 1 end do + ! Restart fire emissions (to populate the first day until they are recalculated. + io_idx_pa_em = io_idx_co_1st + do i = 1,nfsc + this%rvars(ir_fire_emissions_pa_em)%r81d(io_idx_pa_em) = cpatch%fire_emissions(i) + io_idx_pa_em = io_idx_pa_em + 1 + end do + ! -------------------------------------------------------------------------- ! Send litter to the restart arrays ! Each element has its own variable, so we have to make sure @@ -3056,6 +3079,7 @@ subroutine get_restart_vectors(this, nc, nsites, sites) integer :: io_idx_co ! cohort index integer :: io_idx_pa_pft ! each pft within each patch (pa_pft) integer :: io_idx_pa_cwd ! each cwd class within each patch (pa_cwd) + integer :: io_idx_pa_em ! each emission class within each patch (pa_em) integer :: io_idx_pa_cwsl ! each cwd x soil layer integer :: io_idx_pa_dcsl ! each decomposability x soil layer integer :: io_idx_pa_dc ! each decomposability index @@ -3574,6 +3598,14 @@ subroutine get_restart_vectors(this, nc, nsites, sites) io_idx_pa_cwd = io_idx_pa_cwd + 1 end do + ! Pull fire emissions from the restart arrays. + io_idx_pa_em = io_idx_co_1st + do i = 1,num_emission_compounds + cpatch%fire_emissions(i) = this%rvars(ir_fire_emissions_pa_em)%r81d(io_idx_pa_em) + io_idx_pa_em = io_idx_pa_em + 1 + end do + cpatch%fire_emission_height = this%rvars(ir_fire_emission_height_pa)%r81d(io_idx_co_1st) + ! -------------------------------------------------------------------------- ! Pull litter from the restart arrays ! Each element has its own variable, so we have to make sure diff --git a/parameter_files/fates_params_default.cdl b/parameter_files/fates_params_default.cdl index 55d1d0d41c..2a7219c4f0 100644 --- a/parameter_files/fates_params_default.cdl +++ b/parameter_files/fates_params_default.cdl @@ -14,7 +14,9 @@ dimensions: fates_pft = 14 ; fates_plant_organs = 4 ; fates_string_length = 60 ; -variables: + fates_landuseclass = 5 ; + fates_nemission_compounds = 13 ; + double fates_history_ageclass_bin_edges(fates_history_age_bins) ; fates_history_ageclass_bin_edges:units = "yr" ; fates_history_ageclass_bin_edges:long_name = "Lower edges for age class bins used in age-resolved patch history output" ; @@ -267,6 +269,18 @@ variables: double fates_fire_crown_kill(fates_pft) ; fates_fire_crown_kill:units = "NA" ; fates_fire_crown_kill:long_name = "fire parameter, see equation 22 in Thonicke et al 2010" ; + char fates_fire_emission_compound_name(fates_nemission_compounds, fates_string_length) ; + fates_fire_emission_compound_name:units = "unitless - string" ; + fates_fire_emission_compound_name:long_name = "Description of fire emission compounds" ; + + double fates_fire_emission_factors(fates_pft,fates_nemission_compounds) ; + fates_fire_emission_factors:units = "kg emission/m2/s" ; + fates_fire_emission_factors:long_name = "Emissions factors for FATES PFTs" ; + + double fates_fire_emission_heights(fates_pft) ; + fates_fire_emission_heights:units = "m" ; + fates_fire_emission_heights:long_name = "Height of emissions from fire per PFT" ; + double fates_frag_fnrt_fcel(fates_pft) ; fates_frag_fnrt_fcel:units = "fraction" ; fates_frag_fnrt_fcel:long_name = "Fine root litter cellulose fraction" ; @@ -1190,6 +1204,37 @@ data: fates_fire_crown_kill = 0.775, 0.775, 0.775, 0.775, 0.775, 0.775, 0.775, 0.775, 0.775, 0.775, 0.775, 0.775, 0.775, 0.775 ; +fates_fire_emission_compound_name = + "CO2", + "CO", + "CH4", + "NHMC", + "H2", + "NOX", + "N2O", + "PM25", + "TPM", + "TC", + "OC", + "BC", + "SO2" ; + +fates_fire_emission_factors = + 1580, 103.2, 6.8, 8.1, 3.8, 1.85, 0.2, 9.1, 8.5, 6, 5.2, 0.63, 0.57, + 1569, 106.7, 4.7, 5.7, 1.81, 3, 0.26, 13, 17.6, 8.3, 9.1, 0.56, 1, + 1569, 106.7, 4.7, 5.7, 1.81, 3, 0.26, 13, 17.6, 8.3, 9.1, 0.56, 1, + 1569, 106.7, 4.7, 5.7, 1.81, 3, 0.26, 13, 17.6, 8.3, 9.1, 0.56, 1, + 1580, 103.2, 6.8, 8.1, 3.8, 1.85, 0.2, 9.1, 8.5, 6, 5.2, 0.63, 0.57, + 1569, 106.7, 4.7, 5.7, 1.81, 3, 0.26, 13, 17.6, 8.3, 9.1, 0.56, 1, + 1663, 61.6, 2.2, 3.4, 0.99, 2.35, 0.21, 4.9, 8.5, 3.7, 3.2, 0.46, 0.71, + 1663, 61.6, 2.2, 3.4, 0.99, 2.35, 0.21, 4.9, 8.5, 3.7, 3.2, 0.46, 0.71, + 1663, 61.6, 2.2, 3.4, 0.99, 2.35, 0.21, 4.9, 8.5, 3.7, 3.2, 0.46, 0.71, + 1663, 61.6, 2.2, 3.4, 0.99, 2.35, 0.21, 4.9, 8.5, 3.7, 3.2, 0.46, 0.71, + 1663, 61.6, 2.2, 3.4, 0.99, 2.35, 0.21, 4.9, 8.5, 3.7, 3.2, 0.46, 0.71, + 1663, 61.6, 2.2, 3.4, 0.99, 2.35, 0.21, 4.9, 8.5, 3.7, 3.2, 0.46, 0.71; + + fates_fire_emission_heights = 2500, 4000, 3000, 3000, 2500, 3000, 2000, 2000, 2000, 1000, 1000, 1000 ; + fates_frag_fnrt_fcel = 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ;