Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support new NSSL cloud microphysics 3-moment option #702

Merged
merged 58 commits into from
Nov 6, 2023
Merged
Show file tree
Hide file tree
Changes from 56 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
d3521d5
Updates to support NSSL microphysics in CCPP
MicroTed Oct 16, 2021
2a3a156
Switched atmos and ccpp modules to NSSL versions
MicroTed Oct 19, 2021
5564af5
Update to my atmos_cubed_sphere
LarissaReames-NOAA Oct 22, 2021
9b0c228
Update submodule
LarissaReames-NOAA Oct 22, 2021
99c9579
Bug fix for allocating/loading array2d
MicroTed Oct 28, 2021
c485881
Made setting of otsptflag more logical
MicroTed Oct 29, 2021
7655fc5
Fixed size and logic of otsptflag
MicroTed Nov 10, 2021
fa5bfc6
Merge branch 'feature/nsslmicro' of https://github.com/MicroTed/fv3at…
MicroTed Nov 10, 2021
4e524c8
Merge remote-tracking branch 'tedsrepo/feature/nsslmicro' into featur…
MicroTed Jan 20, 2022
81d33d9
Revert URL to default in .gitmodules
MicroTed Jan 20, 2022
40a3c66
Removed commented line and added whitespace
MicroTed Jan 20, 2022
3d721e8
Update to current version of atmos_cubed_sphere
LarissaReames-NOAA Nov 15, 2021
2e0abb7
Merge remote-tracking branch 'tedsrepo/develop' into feature/nsslmicr…
MicroTed Jan 27, 2022
2dfb094
Update GFS_diagnostics.F90 and submodules
MicroTed Jan 27, 2022
7901983
Add suite file
MicroTed Jan 28, 2022
59c2453
Update .gitmodules
MicroTed Jan 29, 2022
23287bd
change dimensions of flag_convective_tracer_transport_interstitial to…
grantfirl Jan 31, 2022
91daade
Merge branch 'feature/nsslmicro-merge' into feature/nsslmicro-merge_gjf
grantfirl Feb 1, 2022
09f57a2
Merge pull request #1 from grantfirl/feature/nsslmicro-merge_gjf
MicroTed Feb 1, 2022
bb1207f
ccpp/physics update
MicroTed Feb 2, 2022
6613a8c
Update submodule
MicroTed Feb 11, 2022
381f1c3
Update atmos_cubed_sphere
LarissaReames-NOAA Feb 14, 2022
dd3d27c
Switched to Ted's NSSL branch of ccpp
LarissaReames-NOAA Feb 14, 2022
574411a
Point to correct atmos_cubed_sphere
LarissaReames-NOAA Feb 14, 2022
6766fa0
Merge branch 'feature/nsslmicro-merge' of https://github.com/MicroTed…
LarissaReames-NOAA Feb 14, 2022
8e5e159
Merge branch 'feature/ideal-new' of https://github.com/LarissaReames-…
LarissaReames-NOAA Feb 14, 2022
aaea304
Minor text fix to gitmodules
LarissaReames-NOAA Feb 14, 2022
09dd2ff
Merge branch 'develop' of https://github.com/LarissaReames-NOAA/fv3at…
LarissaReames-NOAA Feb 14, 2022
157b1af
Updated atmos_cubed_sphere with new idealized sounding capabilities.
LarissaReames-NOAA Feb 16, 2022
5cecf83
Update atmos_cubed_sphere
LarissaReames-NOAA Feb 17, 2022
f85fad8
Add flags and code for 3-moment rain/graupel/hail in NSSL microphysi…
MicroTed Apr 10, 2023
864fb1b
Merge remote-tracking branch 'larissa/feature/ideal-new' into feature…
MicroTed Apr 10, 2023
77d250d
Update submodules and add suites for ideal
MicroTed Apr 11, 2023
9cdcb76
Added fix to re-implement ideal (doubly periodic) grid capability in …
LarissaReames-NOAA Apr 13, 2023
d90c372
Update to correct branch of atmos_cubed_sphere
LarissaReames-NOAA Apr 13, 2023
652c0bf
Update otsptflag for 3moment variables
MicroTed Apr 16, 2023
cae9c22
Fixed missing routine from ideal suite
MicroTed Apr 18, 2023
12b6b8e
Update submodule
MicroTed Apr 18, 2023
55d4b54
Merge commit 'bbc5bf8' into feature/ideal-new-nssl3m
MicroTed Sep 20, 2023
45de372
Submodule update
MicroTed Sep 23, 2023
da84b17
Submodule update
MicroTed Sep 23, 2023
a924574
Updated without ideal initialization
MicroTed Sep 23, 2023
ffb5cf1
Back out code for ideal case support
MicroTed Sep 25, 2023
dca7c5b
One more revert + update in ccpp/physics
MicroTed Sep 25, 2023
69b3051
CCPP update
MicroTed Oct 11, 2023
6264a2b
Removed stray suite files
MicroTed Oct 11, 2023
a3b6b11
Update ccpp/physics for merged ufs/dev
MicroTed Oct 11, 2023
1516b76
Merge branch 'develop' into feature/nssl3m
MicroTed Oct 11, 2023
92feb3a
Update ccpp/physics commit
MicroTed Oct 12, 2023
199ed74
Update ccpp/physics
MicroTed Oct 23, 2023
d4b5eb9
Merge remote-tracking branch 'origin/develop' into feature/nssl3m
MicroTed Oct 23, 2023
e7142f8
Merge remote-tracking branch 'origin/develop' into feature/nssl3m
MicroTed Oct 26, 2023
0ce2f6e
Update ccpp/physics (bug fix for NSSL MP)
MicroTed Oct 29, 2023
6bef69e
Update ccpp
MicroTed Nov 2, 2023
26e331e
Merge branch 'develop' into feature/nssl3m
MicroTed Nov 2, 2023
94ac472
Space formatting
MicroTed Nov 2, 2023
31a354a
Fix commit level of atmos_cubed_sphere
MicroTed Nov 2, 2023
f98d63e
Switch ccpp/physics to ufs/dev
MicroTed Nov 6, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
branch = main
[submodule "ccpp/physics"]
path = ccpp/physics
url = https://github.com/ufs-community/ccpp-physics
branch = ufs/dev
url = https://github.com/MicroTed/ccpp-physics
branch = ufsdev-nssl3m
[submodule "upp"]
path = upp
url = https://github.com/NOAA-EMC/UPP
Expand Down
2 changes: 1 addition & 1 deletion atmos_cubed_sphere
DusanJovic-NOAA marked this conversation as resolved.
Show resolved Hide resolved
11 changes: 6 additions & 5 deletions ccpp/data/CCPP_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1057,11 +1057,12 @@ subroutine gfs_interstitial_setup_tracers(Interstitial, Model)
tracers = 2
do n=2,Model%ntrac
ltest = ( n /= Model%ntcw .and. n /= Model%ntiw .and. n /= Model%ntclamt .and. &
n /= Model%ntrw .and. n /= Model%ntsw .and. n /= Model%ntrnc .and. &
n /= Model%ntsnc .and. n /= Model%ntgl .and. n /= Model%ntgnc .and. &
n /= Model%nthl .and. n /= Model%nthnc .and. n /= Model%ntgv .and. &
n /= Model%nthv .and. n /= Model%ntccn .and. n /= Model%ntccna .and. &
n /= Model%ntsigma)
n /= Model%ntrw .and. n /= Model%ntsw .and. n /= Model%ntrnc .and. &
n /= Model%ntsnc .and. n /= Model%ntgl .and. n /= Model%ntgnc .and. &
n /= Model%nthl .and. n /= Model%nthnc .and. n /= Model%ntgv .and. &
n /= Model%nthv .and. n /= Model%ntccn .and. n /= Model%ntccna .and. &
n /= Model%ntrz .and. n /= Model%ntgz .and. n /= Model%nthz .and. &
n /= Model%ntsigma)
Interstitial%otsptflag(n) = ltest
if ( ltest ) then
tracers = tracers + 1
Expand Down
42 changes: 38 additions & 4 deletions ccpp/data/GFS_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -971,6 +971,7 @@ module GFS_typedefs
logical :: nssl_hail_on !< NSSL flag to activate the hail category
logical :: nssl_ccn_on !< NSSL flag to activate the CCN category
logical :: nssl_invertccn !< NSSL flag to treat CCN as activated (true) or unactivated (false)
logical :: nssl_3moment !< NSSL flag to turn on 3-moment for rain/graupel/hail

!--- Thompson's microphysical parameters
logical :: ltaerosol !< flag for aerosol version
Expand Down Expand Up @@ -1426,6 +1427,9 @@ module GFS_typedefs
integer :: ntccna !< tracer index for activated CCN
integer :: ntgv !< tracer index for graupel particle volume
integer :: nthv !< tracer index for hail particle volume
integer :: ntrz !< tracer index for rain reflectivity
integer :: ntgz !< tracer index for graupel reflectivity
integer :: nthz !< tracer index for hail reflectivity
integer :: ntke !< tracer index for kinetic energy
integer :: ntsigma !< tracer index for updraft area fraction
integer :: nto !< tracer index for oxygen ion
Expand Down Expand Up @@ -3428,6 +3432,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
logical :: nssl_hail_on = .false. !< NSSL flag to activate the hail category
logical :: nssl_ccn_on = .true. !< NSSL flag to activate the CCN category
logical :: nssl_invertccn = .true. !< NSSL flag to treat CCN as activated (true) or unactivated (false)
logical :: nssl_3moment = .false. !< NSSL flag to turn on 3-moment for rain/graupel/hail

!--- Thompson microphysical parameters
logical :: ltaerosol = .false. !< flag for aerosol version
Expand Down Expand Up @@ -3850,7 +3855,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &

!--- aerosol scavenging factors
integer, parameter :: max_scav_factors = 183
character(len=40) :: fscav_aero(max_scav_factors)
character(len=40) :: fscav_aero(max_scav_factors) = ''

real(kind=kind_phys) :: radar_tten_limits(2) = (/ limit_unspecified, limit_unspecified /)
integer :: itime
Expand Down Expand Up @@ -3902,8 +3907,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
ext_diag_thompson, dt_inner, lgfdlmprad, &
sedi_semi, decfl, &
nssl_cccn, nssl_alphah, nssl_alphahl, &
nssl_alphar, nssl_ehw0, nssl_ehlw0, &
nssl_invertccn, nssl_hail_on, nssl_ccn_on, &
nssl_alphar, nssl_ehw0, nssl_ehlw0, &
nssl_invertccn, nssl_hail_on, nssl_ccn_on, nssl_3moment, &
!--- max hourly
avg_max_length, &
!--- land/surface model control
Expand Down Expand Up @@ -4512,6 +4517,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
Model%nssl_hail_on = nssl_hail_on
Model%nssl_ccn_on = nssl_ccn_on
Model%nssl_invertccn = nssl_invertccn
Model%nssl_3moment = nssl_3moment

!--- Thompson MP parameters
Model%ltaerosol = ltaerosol
Expand Down Expand Up @@ -5013,6 +5019,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
Model%ntccna = get_tracer_index(Model%tracer_names, 'ccna_nc', Model%me, Model%master, Model%debug)
Model%ntgv = get_tracer_index(Model%tracer_names, 'graupel_vol',Model%me, Model%master, Model%debug)
Model%nthv = get_tracer_index(Model%tracer_names, 'hail_vol', Model%me, Model%master, Model%debug)
Model%ntrz = get_tracer_index(Model%tracer_names, 'rain_ref', Model%me, Model%master, Model%debug)
Model%ntgz = get_tracer_index(Model%tracer_names, 'graupel_ref',Model%me, Model%master, Model%debug)
Model%nthz = get_tracer_index(Model%tracer_names, 'hail_ref', Model%me, Model%master, Model%debug)
Model%ntke = get_tracer_index(Model%tracer_names, 'sgs_tke', Model%me, Model%master, Model%debug)
Model%ntsigma = get_tracer_index(Model%tracer_names, 'sigmab', Model%me, Model%master, Model%debug)
Model%nqrimef = get_tracer_index(Model%tracer_names, 'q_rimef', Model%me, Model%master, Model%debug)
Expand Down Expand Up @@ -5194,6 +5203,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
call label_dtend_tracer(Model,100+Model%ntccn,'ccn_nc','CCN number concentration','kg-1 s-1')
call label_dtend_tracer(Model,100+Model%ntgv,'graupel_vol','graupel volume','m3 kg-1 s-1')
call label_dtend_tracer(Model,100+Model%nthv,'hail_vol','hail volume','m3 kg-1 s-1')
call label_dtend_tracer(Model,100+Model%ntrz,'rain_ref','rain reflectivity','m3 kg-1 s-1')
call label_dtend_tracer(Model,100+Model%ntgz,'graupel_ref','graupel reflectivity','m3 kg-1 s-1')
call label_dtend_tracer(Model,100+Model%nthz,'hail_ref','hail reflectivity','m3 kg-1 s-1')
call label_dtend_tracer(Model,100+Model%ntke,'sgs_tke','turbulent kinetic energy','J s-1')
call label_dtend_tracer(Model,100+Model%nqrimef,'q_rimef','mass weighted rime factor','kg-1 s-1')
call label_dtend_tracer(Model,100+Model%ntwa,'liq_aero','number concentration of water-friendly aerosols','kg-1 s-1')
Expand Down Expand Up @@ -5262,7 +5274,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
itrac /= Model%ntrw .and. itrac /= Model%ntsw .and. itrac /= Model%ntrnc .and. &
itrac /= Model%ntsnc .and. itrac /= Model%ntgl .and. itrac /= Model%ntgnc .and. &
itrac /= Model%nthl .and. itrac /= Model%nthnc .and. itrac /= Model%nthv .and. &
itrac /= Model%ntgv ) then
itrac /= Model%ntgv .and. itrac /= Model%ntrz .and. itrac /= Model%ntgz .and. &
itrac /= Model%nthz ) then
call fill_dtidx(Model,dtend_select,100+itrac,Model%index_of_process_scnv,have_scnv)
call fill_dtidx(Model,dtend_select,100+itrac,Model%index_of_process_dcnv,have_dcnv)
else if(Model%ntchs<=0 .or. itrac<Model%ntchs) then
Expand Down Expand Up @@ -5395,6 +5408,24 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
write(*,*) 'NSSL micro: CCN is ON'
ENDIF
ENDIF

! add checks for nssl_3moment
IF ( ( Model%nssl_3moment ) ) THEN
IF ( Model%ntrz < 1 ) THEN
write(*,*) 'NSSL micro: 3-moment is ON, but rain_ref tracer is missing'
stop
ENDIF
IF ( Model%ntgz < 1 ) THEN
write(*,*) 'NSSL micro: 3-moment is ON, but graupel_ref tracer is missing'
stop
ENDIF
IF ( nssl_hail_on ) THEN
IF ( Model%nthz < 1 ) THEN
write(*,*) 'NSSL micro: 3-moment is ON, but hail_ref tracer is missing'
stop
ENDIF
ENDIF
ENDIF

IF ( Model%ntgl < 1 .or. Model%ntgv < 1 .or. Model%ntgnc < 1 .or. &
Model%ntsw < 1 .or. Model%ntsnc < 1 .or. &
Expand Down Expand Up @@ -6748,6 +6779,9 @@ subroutine control_print(Model)
print *, ' ntccna : ', Model%ntccna
print *, ' ntgv : ', Model%ntgv
print *, ' nthv : ', Model%nthv
print *, ' ntrz : ', Model%ntrz
print *, ' ntgz : ', Model%ntgz
print *, ' nthz : ', Model%nthz
print *, ' ntke : ', Model%ntke
print *, ' ntsigma : ', Model%ntsigma
print *, ' nto : ', Model%nto
Expand Down
72 changes: 72 additions & 0 deletions ccpp/data/GFS_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,30 @@
type = real
kind = kind_phys
active = (index_of_mass_number_concentration_of_hail_in_tracer_concentration_array > 0)
[qgrs(:,:,index_of_reflectivity_of_rain_in_tracer_concentration_array)]
standard_name = reflectivity_of_rain_in_air
long_name = reflectivity of rain
units = m6 kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = (index_of_reflectivity_of_rain_in_tracer_concentration_array > 0)
[qgrs(:,:,index_of_reflectivity_of_graupel_in_tracer_concentration_array)]
standard_name = reflectivity_of_graupel_in_air
long_name = reflectivity of graupel
units = m6 kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = (index_of_reflectivity_of_graupel_in_tracer_concentration_array > 0)
[qgrs(:,:,index_of_reflectivity_of_hail_in_tracer_concentration_array)]
standard_name = reflectivity_of_hail_in_air
long_name = reflectivity of hail
units = m6 kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = (index_of_reflectivity_of_hail_in_tracer_concentration_array > 0)
[qgrs(:,:,index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array)]
standard_name = cloud_condensation_nuclei_number_concentration
long_name = number concentration of cloud condensation nuclei
Expand Down Expand Up @@ -568,6 +592,30 @@
type = real
kind = kind_phys
active = ( index_of_hail_volume_in_tracer_concentration_array > 0 )
[gq0(:,:,index_of_reflectivity_of_rain_in_tracer_concentration_array)]
standard_name = reflectivity_of_rain_of_new_state
long_name = reflectivity of rain updated by physics
units = m6 kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_reflectivity_of_rain_in_tracer_concentration_array > 0 )
[gq0(:,:,index_of_reflectivity_of_graupel_in_tracer_concentration_array)]
standard_name = reflectivity_of_graupel_of_new_state
long_name = reflectivity of graupel updated by physics
units = m6 kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_reflectivity_of_graupel_in_tracer_concentration_array > 0 )
[gq0(:,:,index_of_reflectivity_of_hail_in_tracer_concentration_array)]
standard_name = reflectivity_of_hail_of_new_state
long_name = reflectivity of hail updated by physics
units = m6 kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_reflectivity_of_hail_in_tracer_concentration_array > 0 )
[gq0(:,:,index_of_cloud_area_fraction_in_atmosphere_layer_in_tracer_concentration_array)]
standard_name = cloud_area_fraction_in_atmosphere_layer_of_new_state
long_name = cloud fraction updated by physics
Expand Down Expand Up @@ -4312,6 +4360,12 @@
units = flag
dimensions = ()
type = logical
[nssl_3moment]
standard_name = nssl_3moment
long_name = 3-moment activation flag in NSSL microphysics scheme
units = flag
dimensions = ()
type = logical
[tf]
standard_name = all_ice_cloud_threshold_temperature
long_name = threshold temperature below which all cloud is ice
Expand Down Expand Up @@ -6137,6 +6191,24 @@
units = index
dimensions = ()
type = integer
[ntrz]
standard_name = index_of_reflectivity_of_rain_in_tracer_concentration_array
long_name = tracer index for rain reflectivity
units = index
dimensions = ()
type = integer
[ntgz]
standard_name = index_of_reflectivity_of_graupel_in_tracer_concentration_array
long_name = tracer index for graupel reflectivity
units = index
dimensions = ()
type = integer
[nthz]
standard_name = index_of_reflectivity_of_hail_in_tracer_concentration_array
long_name = tracer index for hail reflectivity
units = index
dimensions = ()
type = integer
[ntke]
standard_name = index_of_turbulent_kinetic_energy_in_tracer_concentration_array
long_name = tracer index for turbulent kinetic energy
Expand Down