Skip to content

Commit c062733

Browse files
authored
Merge pull request NCAR#532 from grantfirl/ufs-dev-PR220
UFS-dev PR#220
2 parents a47458e + 4a000bb commit c062733

File tree

3 files changed

+71
-11
lines changed

3 files changed

+71
-11
lines changed

scm/src/GFS_typedefs.F90

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,11 @@ module GFS_typedefs
291291
real (kind=kind_phys), pointer :: spec_sh_flux (:) => null() !< specified kinematic surface sensible heat flux
292292
real (kind=kind_phys), pointer :: spec_lh_flux (:) => null() !< specified kinematic surface latent heat flux
293293

294+
!--- fire_behavior
295+
real (kind=kind_phys), pointer :: hflx_fire (:) => null() !< kinematic surface upward sensible heat flux of fire
296+
real (kind=kind_phys), pointer :: evap_fire (:) => null() !< kinematic surface upward latent heat flux of fire
297+
real (kind=kind_phys), pointer :: smoke_fire (:) => null() !< smoke emission of fire
298+
294299
!-- In/Out
295300
real (kind=kind_phys), pointer :: maxupmf(:) => null() !< maximum up draft mass flux for Grell-Freitas
296301
real (kind=kind_phys), pointer :: conv_act(:) => null() !< convective activity counter for Grell-Freitas
@@ -760,6 +765,7 @@ module GFS_typedefs
760765
logical :: cpllnd !< default no cpllnd collection
761766
logical :: cpllnd2atm !< default no lnd->atm coupling
762767
logical :: rrfs_sd !< default no rrfs_sd collection
768+
logical :: cpl_fire !< default no fire_behavior collection
763769
logical :: use_cice_alb !< default .false. - i.e. don't use albedo imported from the ice model
764770
logical :: cpl_imp_mrg !< default no merge import with internal forcings
765771
logical :: cpl_imp_dbg !< default no write import data to file post merge
@@ -1480,6 +1486,7 @@ module GFS_typedefs
14801486
integer :: nto2 !< tracer index for oxygen
14811487
integer :: ntwa !< tracer index for water friendly aerosol
14821488
integer :: ntia !< tracer index for ice friendly aerosol
1489+
integer :: ntfsmoke !< tracer index for fire smoke
14831490
integer :: ntsmoke !< tracer index for smoke
14841491
integer :: ntdust !< tracer index for dust
14851492
integer :: ntcoarsepm !< tracer index for coarse PM
@@ -2873,6 +2880,16 @@ subroutine sfcprop_create (Sfcprop, Model)
28732880
Sfcprop%lu_qfire = clear_val
28742881
endif
28752882

2883+
!--- if fire_behavior is on
2884+
if(Model%cpl_fire) then
2885+
allocate (Sfcprop%hflx_fire (IM))
2886+
allocate (Sfcprop%evap_fire (IM))
2887+
allocate (Sfcprop%smoke_fire (IM))
2888+
Sfcprop%hflx_fire = zero
2889+
Sfcprop%evap_fire = zero
2890+
Sfcprop%smoke_fire = zero
2891+
endif
2892+
28762893
end subroutine sfcprop_create
28772894

28782895

@@ -2932,7 +2949,7 @@ subroutine coupling_create (Coupling, Model)
29322949
Coupling%tsfc_radtime = clear_val
29332950
endif
29342951

2935-
if (Model%cplflx .or. Model%do_sppt .or. Model%cplchm .or. Model%ca_global .or. Model%cpllnd) then
2952+
if (Model%cplflx .or. Model%do_sppt .or. Model%cplchm .or. Model%ca_global .or. Model%cpllnd .or. Model%cpl_fire) then
29362953
allocate (Coupling%rain_cpl (IM))
29372954
allocate (Coupling%snow_cpl (IM))
29382955
Coupling%rain_cpl = clear_val
@@ -2961,7 +2978,7 @@ subroutine coupling_create (Coupling, Model)
29612978
! Coupling%zorlwav_cpl = clear_val
29622979
! endif
29632980

2964-
if (Model%cplflx .or. Model%cpllnd) then
2981+
if (Model%cplflx .or. Model%cpllnd .or. Model%cpl_fire) then
29652982
allocate (Coupling%dlwsfci_cpl (IM))
29662983
allocate (Coupling%dswsfci_cpl (IM))
29672984
allocate (Coupling%dlwsfc_cpl (IM))
@@ -2995,7 +3012,7 @@ subroutine coupling_create (Coupling, Model)
29953012
Coupling%nvisdf_cpl = clear_val
29963013
end if
29973014

2998-
if (Model%cplflx) then
3015+
if (Model%cplflx .or. Model%cpl_fire) then
29993016
!--- incoming quantities
30003017
allocate (Coupling%slimskin_cpl (IM))
30013018
allocate (Coupling%dusfcin_cpl (IM))
@@ -3160,7 +3177,7 @@ subroutine coupling_create (Coupling, Model)
31603177
Coupling%pfl_lsan = clear_val
31613178
endif
31623179

3163-
if (Model%cplchm .or. Model%cplflx .or. Model%cpllnd) then
3180+
if (Model%cplchm .or. Model%cplflx .or. Model%cpllnd .or. Model%cpl_fire) then
31643181
!--- accumulated convective rainfall
31653182
allocate (Coupling%rainc_cpl (IM))
31663183
Coupling%rainc_cpl = clear_val
@@ -3369,6 +3386,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
33693386
logical :: cpllnd = .false. !< default no cpllnd collection
33703387
logical :: cpllnd2atm = .false. !< default no cpllnd2atm coupling
33713388
logical :: rrfs_sd = .false. !< default no rrfs_sd collection
3389+
logical :: cpl_fire = .false. !< default no fire behavior colleciton
33723390
logical :: use_cice_alb = .false. !< default no cice albedo
33733391
logical :: cpl_imp_mrg = .false. !< default no merge import with internal forcings
33743392
logical :: cpl_imp_dbg = .false. !< default no write import data to file post merge
@@ -4030,7 +4048,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
40304048
!--- coupling parameters
40314049
cplflx, cplice, cplocn2atm, cplwav, cplwav2atm, cplaqm, &
40324050
cplchm, cpllnd, cpllnd2atm, cpl_imp_mrg, cpl_imp_dbg, &
4033-
rrfs_sd, use_cice_alb, &
4051+
cpl_fire, rrfs_sd, use_cice_alb, &
40344052
#ifdef IDEA_PHYS
40354053
lsidea, weimer_model, f107_kp_size, f107_kp_interval, &
40364054
f107_kp_skip_size, f107_kp_data_size, f107_kp_read_in_start, &
@@ -4452,6 +4470,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
44524470

44534471
!--- RRFS-SD
44544472
Model%rrfs_sd = rrfs_sd
4473+
Model%cpl_fire = cpl_fire
44554474
Model%dust_drylimit_factor = dust_drylimit_factor
44564475
Model%dust_moist_correction = dust_moist_correction
44574476
Model%dust_moist_opt = dust_moist_opt
@@ -5265,6 +5284,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
52655284
Model%nqrimef = get_tracer_index(Model%tracer_names, 'q_rimef', Model%me, Model%master, Model%debug)
52665285
Model%ntwa = get_tracer_index(Model%tracer_names, 'liq_aero', Model%me, Model%master, Model%debug)
52675286
Model%ntia = get_tracer_index(Model%tracer_names, 'ice_aero', Model%me, Model%master, Model%debug)
5287+
if (Model%cpl_fire) then
5288+
Model%ntfsmoke = get_tracer_index(Model%tracer_names, 'fsmoke', Model%me, Model%master, Model%debug)
5289+
endif
52685290
if (Model%rrfs_sd) then
52695291
Model%ntsmoke = get_tracer_index(Model%tracer_names, 'smoke', Model%me, Model%master, Model%debug)
52705292
Model%ntdust = get_tracer_index(Model%tracer_names, 'dust', Model%me, Model%master, Model%debug)
@@ -6577,6 +6599,7 @@ subroutine control_print(Model)
65776599
print *, ' cpllnd : ', Model%cpllnd
65786600
print *, ' cpllnd2atm : ', Model%cpllnd2atm
65796601
print *, ' rrfs_sd : ', Model%rrfs_sd
6602+
print *, ' cpl_fire : ', Model%cpl_fire
65806603
print *, ' use_cice_alb : ', Model%use_cice_alb
65816604
print *, ' cpl_imp_mrg : ', Model%cpl_imp_mrg
65826605
print *, ' cpl_imp_dbg : ', Model%cpl_imp_dbg
@@ -7049,6 +7072,7 @@ subroutine control_print(Model)
70497072
print *, ' nto2 : ', Model%nto2
70507073
print *, ' ntwa : ', Model%ntwa
70517074
print *, ' ntia : ', Model%ntia
7075+
print *, ' ntfsmoke : ', Model%ntfsmoke
70527076
print *, ' ntsmoke : ', Model%ntsmoke
70537077
print *, ' ntdust : ', Model%ntdust
70547078
print *, ' ntcoarsepm : ', Model%ntcoarsepm

scm/src/GFS_typedefs.meta

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2377,6 +2377,30 @@
23772377
type = real
23782378
kind = kind_phys
23792379
active = (do_smoke_coupling)
2380+
[hflx_fire]
2381+
standard_name = kinematic_surface_upward_sensible_heat_flux_of_fire
2382+
long_name = kinematic surface upward sensible heat flux of fire
2383+
units = K m s-1
2384+
dimensions = (horizontal_loop_extent)
2385+
type = real
2386+
kind = kind_phys
2387+
active = (do_fire_coupling)
2388+
[evap_fire]
2389+
standard_name = surface_upward_specific_humidity_flux_of_fire
2390+
long_name = kinematic surface upward latent heat flux of fire
2391+
units = kg kg-1 m s-1
2392+
dimensions = (horizontal_loop_extent)
2393+
type = real
2394+
kind = kind_phys
2395+
active = (do_fire_coupling)
2396+
[smoke_fire]
2397+
standard_name = smoke_emission_of_fire
2398+
long_name = smoke emission of fire
2399+
units = kg m-2
2400+
dimensions = (horizontal_loop_extent)
2401+
type = real
2402+
kind = kind_phys
2403+
active = (do_fire_coupling)
23802404

23812405
########################################################################
23822406
[ccpp-table-properties]
@@ -2486,15 +2510,15 @@
24862510
dimensions = (horizontal_dimension)
24872511
type = real
24882512
kind = kind_phys
2489-
active = (flag_for_surface_flux_coupling .or. flag_for_chemistry_coupling .or. flag_for_land_coupling)
2513+
active = (flag_for_surface_flux_coupling .or. flag_for_chemistry_coupling .or. flag_for_land_coupling .or. do_fire_coupling)
24902514
[snow_cpl]
24912515
standard_name = cumulative_lwe_thickness_of_snow_amount_for_coupling
24922516
long_name = total snow precipitation
24932517
units = m
24942518
dimensions = (horizontal_dimension)
24952519
type = real
24962520
kind = kind_phys
2497-
active = (flag_for_surface_flux_coupling .or. flag_for_stochastic_physics_perturbations .or. flag_for_chemistry_coupling .or. flag_for_global_cellular_automata .or. flag_for_land_coupling)
2521+
active = (flag_for_surface_flux_coupling .or. flag_for_stochastic_physics_perturbations .or. flag_for_chemistry_coupling .or. flag_for_global_cellular_automata .or. flag_for_land_coupling .or. do_fire_coupling)
24982522
[dusfc_cpl]
24992523
standard_name = cumulative_surface_x_momentum_flux_for_coupling_multiplied_by_timestep
25002524
long_name = cumulative sfc x momentum flux multiplied by timestep
@@ -2758,15 +2782,15 @@
27582782
dimensions = (horizontal_dimension)
27592783
type = real
27602784
kind = kind_phys
2761-
active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling)
2785+
active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling .or. do_fire_coupling)
27622786
[q2mi_cpl]
27632787
standard_name = specific_humidity_at_2m_for_coupling
27642788
long_name = instantaneous Q2m
27652789
units = kg kg-1
27662790
dimensions = (horizontal_dimension)
27672791
type = real
27682792
kind = kind_phys
2769-
active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling)
2793+
active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling .or. do_fire_coupling)
27702794
[u10mi_cpl]
27712795
standard_name = x_wind_at_10m_for_coupling
27722796
long_name = instantaneous U10m
@@ -2798,7 +2822,7 @@
27982822
dimensions = (horizontal_dimension)
27992823
type = real
28002824
kind = kind_phys
2801-
active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling .or. flag_for_land_coupling)
2825+
active = (flag_for_surface_flux_coupling .or. flag_for_air_quality_coupling .or. flag_for_land_coupling .or. do_fire_coupling)
28022826
[ulwsfcin_cpl]
28032827
standard_name = surface_upwelling_longwave_flux_from_coupled_process
28042828
long_name = surface upwelling LW flux for coupling
@@ -3648,6 +3672,12 @@
36483672
units = flag
36493673
dimensions = ()
36503674
type = logical
3675+
[cpl_fire]
3676+
standard_name = do_fire_coupling
3677+
long_name = flag controlling fire_behavior collection (default off)
3678+
units = flag
3679+
dimensions = ()
3680+
type = logical
36513681
[cpl_imp_mrg]
36523682
standard_name = flag_for_merging_imported_data
36533683
long_name = flag controlling cpl_imp_mrg for imported data (default off)
@@ -6563,6 +6593,12 @@
65636593
units = index
65646594
dimensions = ()
65656595
type = integer
6596+
[ntfsmoke]
6597+
standard_name = index_for_fire_smoke_in_tracer_concentration_array
6598+
long_name = tracer index for fire smoke
6599+
units = index
6600+
dimensions = ()
6601+
type = integer
65666602
[ntdust]
65676603
standard_name = index_for_dust_in_tracer_concentration_array
65686604
long_name = tracer index for dust

0 commit comments

Comments
 (0)