@@ -291,6 +291,11 @@ module GFS_typedefs
291
291
real (kind= kind_phys), pointer :: spec_sh_flux (:) = > null () ! < specified kinematic surface sensible heat flux
292
292
real (kind= kind_phys), pointer :: spec_lh_flux (:) = > null () ! < specified kinematic surface latent heat flux
293
293
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
+
294
299
!- - In/Out
295
300
real (kind= kind_phys), pointer :: maxupmf(:) = > null () ! < maximum up draft mass flux for Grell-Freitas
296
301
real (kind= kind_phys), pointer :: conv_act(:) = > null () ! < convective activity counter for Grell-Freitas
@@ -760,6 +765,7 @@ module GFS_typedefs
760
765
logical :: cpllnd ! < default no cpllnd collection
761
766
logical :: cpllnd2atm ! < default no lnd->atm coupling
762
767
logical :: rrfs_sd ! < default no rrfs_sd collection
768
+ logical :: cpl_fire ! < default no fire_behavior collection
763
769
logical :: use_cice_alb ! < default .false. - i.e. don't use albedo imported from the ice model
764
770
logical :: cpl_imp_mrg ! < default no merge import with internal forcings
765
771
logical :: cpl_imp_dbg ! < default no write import data to file post merge
@@ -1480,6 +1486,7 @@ module GFS_typedefs
1480
1486
integer :: nto2 ! < tracer index for oxygen
1481
1487
integer :: ntwa ! < tracer index for water friendly aerosol
1482
1488
integer :: ntia ! < tracer index for ice friendly aerosol
1489
+ integer :: ntfsmoke ! < tracer index for fire smoke
1483
1490
integer :: ntsmoke ! < tracer index for smoke
1484
1491
integer :: ntdust ! < tracer index for dust
1485
1492
integer :: ntcoarsepm ! < tracer index for coarse PM
@@ -2873,6 +2880,16 @@ subroutine sfcprop_create (Sfcprop, Model)
2873
2880
Sfcprop% lu_qfire = clear_val
2874
2881
endif
2875
2882
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
+
2876
2893
end subroutine sfcprop_create
2877
2894
2878
2895
@@ -2932,7 +2949,7 @@ subroutine coupling_create (Coupling, Model)
2932
2949
Coupling% tsfc_radtime = clear_val
2933
2950
endif
2934
2951
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
2936
2953
allocate (Coupling% rain_cpl (IM))
2937
2954
allocate (Coupling% snow_cpl (IM))
2938
2955
Coupling% rain_cpl = clear_val
@@ -2961,7 +2978,7 @@ subroutine coupling_create (Coupling, Model)
2961
2978
! Coupling%zorlwav_cpl = clear_val
2962
2979
! endif
2963
2980
2964
- if (Model% cplflx .or. Model% cpllnd) then
2981
+ if (Model% cplflx .or. Model% cpllnd .or. Model % cpl_fire ) then
2965
2982
allocate (Coupling% dlwsfci_cpl (IM))
2966
2983
allocate (Coupling% dswsfci_cpl (IM))
2967
2984
allocate (Coupling% dlwsfc_cpl (IM))
@@ -2995,7 +3012,7 @@ subroutine coupling_create (Coupling, Model)
2995
3012
Coupling% nvisdf_cpl = clear_val
2996
3013
end if
2997
3014
2998
- if (Model% cplflx) then
3015
+ if (Model% cplflx .or. Model % cpl_fire ) then
2999
3016
!- -- incoming quantities
3000
3017
allocate (Coupling% slimskin_cpl (IM))
3001
3018
allocate (Coupling% dusfcin_cpl (IM))
@@ -3160,7 +3177,7 @@ subroutine coupling_create (Coupling, Model)
3160
3177
Coupling% pfl_lsan = clear_val
3161
3178
endif
3162
3179
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
3164
3181
!- -- accumulated convective rainfall
3165
3182
allocate (Coupling% rainc_cpl (IM))
3166
3183
Coupling% rainc_cpl = clear_val
@@ -3369,6 +3386,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
3369
3386
logical :: cpllnd = .false. ! < default no cpllnd collection
3370
3387
logical :: cpllnd2atm = .false. ! < default no cpllnd2atm coupling
3371
3388
logical :: rrfs_sd = .false. ! < default no rrfs_sd collection
3389
+ logical :: cpl_fire = .false. ! < default no fire behavior colleciton
3372
3390
logical :: use_cice_alb = .false. ! < default no cice albedo
3373
3391
logical :: cpl_imp_mrg = .false. ! < default no merge import with internal forcings
3374
3392
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, &
4030
4048
!- -- coupling parameters
4031
4049
cplflx, cplice, cplocn2atm, cplwav, cplwav2atm, cplaqm, &
4032
4050
cplchm, cpllnd, cpllnd2atm, cpl_imp_mrg, cpl_imp_dbg, &
4033
- rrfs_sd, use_cice_alb, &
4051
+ cpl_fire, rrfs_sd, use_cice_alb, &
4034
4052
#ifdef IDEA_PHYS
4035
4053
lsidea, weimer_model, f107_kp_size, f107_kp_interval, &
4036
4054
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, &
4452
4470
4453
4471
!- -- RRFS-SD
4454
4472
Model% rrfs_sd = rrfs_sd
4473
+ Model% cpl_fire = cpl_fire
4455
4474
Model% dust_drylimit_factor = dust_drylimit_factor
4456
4475
Model% dust_moist_correction = dust_moist_correction
4457
4476
Model% dust_moist_opt = dust_moist_opt
@@ -5265,6 +5284,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
5265
5284
Model% nqrimef = get_tracer_index(Model% tracer_names, ' q_rimef' , Model% me, Model% master, Model% debug)
5266
5285
Model% ntwa = get_tracer_index(Model% tracer_names, ' liq_aero' , Model% me, Model% master, Model% debug)
5267
5286
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
5268
5290
if (Model% rrfs_sd) then
5269
5291
Model% ntsmoke = get_tracer_index(Model% tracer_names, ' smoke' , Model% me, Model% master, Model% debug)
5270
5292
Model% ntdust = get_tracer_index(Model% tracer_names, ' dust' , Model% me, Model% master, Model% debug)
@@ -6577,6 +6599,7 @@ subroutine control_print(Model)
6577
6599
print * , ' cpllnd : ' , Model% cpllnd
6578
6600
print * , ' cpllnd2atm : ' , Model% cpllnd2atm
6579
6601
print * , ' rrfs_sd : ' , Model% rrfs_sd
6602
+ print * , ' cpl_fire : ' , Model% cpl_fire
6580
6603
print * , ' use_cice_alb : ' , Model% use_cice_alb
6581
6604
print * , ' cpl_imp_mrg : ' , Model% cpl_imp_mrg
6582
6605
print * , ' cpl_imp_dbg : ' , Model% cpl_imp_dbg
@@ -7049,6 +7072,7 @@ subroutine control_print(Model)
7049
7072
print * , ' nto2 : ' , Model% nto2
7050
7073
print * , ' ntwa : ' , Model% ntwa
7051
7074
print * , ' ntia : ' , Model% ntia
7075
+ print * , ' ntfsmoke : ' , Model% ntfsmoke
7052
7076
print * , ' ntsmoke : ' , Model% ntsmoke
7053
7077
print * , ' ntdust : ' , Model% ntdust
7054
7078
print * , ' ntcoarsepm : ' , Model% ntcoarsepm
0 commit comments