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

Feature: NSSL Microphysics support #472

Merged
merged 33 commits into from
Mar 4, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 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
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
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
b7cd45a
change units of NSSL flags
grantfirl Feb 14, 2022
61160e6
edit suite_FV3_RRFS_v1nssl.xml to match suite_FV3_RRFS_v1.xml
grantfirl Feb 15, 2022
507509d
Merge pull request #2 from grantfirl/feature/nsslmicro-merge_gjf
MicroTed Feb 15, 2022
d974856
remove GFS_suite_interstsitial_3/4 from FV3_RRFS_v1nssl suite since t…
grantfirl Feb 16, 2022
9e2bc64
Merge pull request #3 from grantfirl/feature/nsslmicro-merge_gjf
MicroTed Feb 17, 2022
dbc268b
Merge current develop branch
MicroTed Feb 17, 2022
9e3ab9e
Merge branch 'develop' into feature/nsslmicro-merge-tmp1
MicroTed Feb 17, 2022
073a4e8
Merge commit 'bc562d79211bb643e9b1ee9aa9831895d103efba' into feature/…
MicroTed Feb 25, 2022
2ae9f76
Update submodules and merge upstream
MicroTed Feb 25, 2022
24ec9a8
Changed atmos_cubed_sphere pointer
MicroTed Feb 25, 2022
dfbed13
update atmos_cubed_sphere
grantfirl Feb 25, 2022
fb3bce3
Merge pull request #4 from grantfirl/feature/nsslmicro-merge_gjf
MicroTed Feb 25, 2022
072418a
update ccpp/physics submodule pointer
MicroTed Mar 3, 2022
e7297e8
Switch to merged dev/emc branch of atmos_cubed_sphere
MicroTed Mar 4, 2022
adb0b44
Updated submodules and removed unneeded suite files
MicroTed Mar 4, 2022
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
1 change: 1 addition & 0 deletions ccpp/config/ccpp_prebuild_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@
'physics/physics/mp_thompson_pre.F90',
'physics/physics/mp_thompson.F90',
'physics/physics/mp_thompson_post.F90',
'physics/physics/mp_nssl.F90' ,
'physics/physics/ozphys.f',
'physics/physics/ozphys_2015.f',
'physics/physics/precpd.f',
Expand Down
241 changes: 232 additions & 9 deletions ccpp/data/GFS_typedefs.F90

Large diffs are not rendered by default.

205 changes: 201 additions & 4 deletions ccpp/data/GFS_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,14 @@
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
[qgrs(:,:,index_of_hail_mixing_ratio_in_tracer_concentration_array)]
standard_name = hail_mixing_ratio
long_name = ratio of mass of hail to mass of dry air plus vapor (without condensates)
units = kg kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = (index_of_hail_mixing_ratio_in_tracer_concentration_array > 0)
[qgrs(:,:,index_of_ozone_mixing_ratio_in_tracer_concentration_array)]
standard_name = ozone_mixing_ratio
long_name = ozone mixing ratio
Expand Down Expand Up @@ -254,6 +262,46 @@
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
[qgrs(:,:,index_of_mass_number_concentration_of_hail_in_tracer_concentration_array)]
standard_name = mass_number_concentration_of_hail_in_air
long_name = number concentration of hail
units = kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = (index_of_mass_number_concentration_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
units = kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 )
[qgrs(:,:,index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array)]
standard_name = activated_cloud_condensation_nuclei_number_concentration
long_name = number concentration of activated cloud condensation nuclei
units = kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 )
[qgrs(:,:,index_of_graupel_volume_in_tracer_concentration_array)]
standard_name = graupel_volume
long_name = graupel particle volume
units = m3 kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_graupel_volume_in_tracer_concentration_array > 0 )
[qgrs(:,:,index_of_hail_volume_in_tracer_concentration_array)]
standard_name = hail_volume
long_name = hail particle volume
units = m3 kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_hail_volume_in_tracer_concentration_array > 0 )
[qgrs(:,:,index_of_turbulent_kinetic_energy_in_tracer_concentration_array)]
standard_name = turbulent_kinetic_energy
long_name = turbulent kinetic energy
Expand Down Expand Up @@ -383,6 +431,14 @@
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
[gq0(:,:,index_of_hail_mixing_ratio_in_tracer_concentration_array)]
standard_name = hail_mixing_ratio_of_new_state
long_name = ratio of mass of hail to mass of dry air plus vapor (without condensates) updated by physics
units = kg kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_hail_mixing_ratio_in_tracer_concentration_array > 0 )
[gq0(:,:,index_of_mass_weighted_rime_factor_in_tracer_concentration_array)]
standard_name = mass_weighted_rime_factor_of_new_state
long_name = mass weighted rime factor updated by physics
Expand Down Expand Up @@ -442,6 +498,46 @@
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
[gq0(:,:,index_of_mass_number_concentration_of_hail_in_tracer_concentration_array)]
standard_name = mass_number_concentration_of_hail_of_new_state
long_name = number concentration of hail updated by physics
units = kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_mass_number_concentration_of_hail_in_tracer_concentration_array > 0 )
[gq0(:,:,index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array)]
standard_name = cloud_condensation_nuclei_number_concentration_of_new_state
long_name = number concentration of cloud condensation nuclei updated by physics
units = kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 )
[gq0(:,:,index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array)]
standard_name = activated_cloud_condensation_nuclei_number_concentration_of_new_state
long_name = number concentration of cloud condensation nuclei updated by physics
units = kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 )
[gq0(:,:,index_of_graupel_volume_in_tracer_concentration_array)]
standard_name = graupel_volume_of_new_state
long_name = graupel volume updated by physics
units = m3 kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_graupel_volume_in_tracer_concentration_array > 0 )
[gq0(:,:,index_of_hail_volume_in_tracer_concentration_array)]
standard_name = hail_volume_of_new_state
long_name = hail volume updated by physics
units = m3 kg-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_hail_volume_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 @@ -3168,6 +3264,18 @@
units = flag
dimensions = ()
type = integer
[imp_physics_nssl]
standard_name = identifier_for_nssl_microphysics_scheme
long_name = choice of NSSL 2-moment microphysics scheme
units = flag
dimensions = ()
type = integer
[imp_physics_nssl2mccn]
standard_name = identifier_for_nssl2mccn_microphysics_scheme
long_name = choice of NSSL 2-moment microphysics scheme with CCN
units = flag
dimensions = ()
type = integer
[iovr_exp]
standard_name = flag_for_exponential_cloud_overlap_method
long_name = choice of exponential cloud overlap method
Expand Down Expand Up @@ -3400,6 +3508,45 @@
dimensions = ()
type = character
kind = len=16
[nssl_cccn]
standard_name = nssl_ccn_concentration
long_name = CCN concentration
units = m-3
dimensions = ()
type = real
kind = kind_phys
[nssl_alphah]
standard_name = nssl_alpha_graupel
long_name = graupel PSD shape parameter in NSSL micro
units = none
dimensions = ()
type = real
kind = kind_phys
[nssl_alphahl]
standard_name = nssl_alpha_hail
long_name = hail PSD shape parameter in NSSL micro
units = none
dimensions = ()
type = real
kind = kind_phys
[nssl_ccn_on]
standard_name = nssl_ccn_on
long_name = CCN activation flag in NSSL micro
units = flag
dimensions = ()
type = logical
[nssl_hail_on]
standard_name = nssl_hail_on
long_name = hail activation flag in NSSL micro
units = flag
dimensions = ()
type = logical
[nssl_invertccn]
standard_name = nssl_invertccn
long_name = flag to invert CCN in NSSL micro
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 @@ -4950,6 +5097,12 @@
units = index
dimensions = ()
type = integer
[nthl]
standard_name = index_of_hail_mixing_ratio_in_tracer_concentration_array
long_name = tracer index for hail
units = index
dimensions = ()
type = integer
[ntclamt]
standard_name = index_of_cloud_area_fraction_in_atmosphere_layer_in_tracer_concentration_array
long_name = tracer index for cloud amount integer
Expand Down Expand Up @@ -4986,6 +5139,36 @@
units = index
dimensions = ()
type = integer
[nthnc]
standard_name = index_of_mass_number_concentration_of_hail_in_tracer_concentration_array
long_name = tracer index for hail number concentration
units = index
dimensions = ()
type = integer
[ntccn]
standard_name = index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array
long_name = tracer index for cloud condensation nuclei number concentration
units = index
dimensions = ()
type = integer
[ntccna]
standard_name = index_of_activated_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array
long_name = tracer index for activated cloud condensation nuclei number concentration
units = index
dimensions = ()
type = integer
[ntgv]
standard_name = index_of_graupel_volume_in_tracer_concentration_array
long_name = tracer index for graupel particle volume
units = index
dimensions = ()
type = integer
[nthv]
standard_name = index_of_hail_volume_in_tracer_concentration_array
long_name = tracer index for hail particle volume
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 Expand Up @@ -8273,6 +8456,14 @@
type = real
kind = kind_phys
active = (index_of_mass_number_concentration_of_nonhygroscopic_ice_nucleating_aerosols_in_tracer_concentration_array > 0)
[dqdt(:,:,index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array)]
standard_name = tendency_of_cloud_condensation_nuclei_number_concentration_due_to_model_physics
long_name = number concentration of cloud condensation nuclei tendency due to model physics
units = kg-1 s-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
active = ( index_of_cloud_condensation_nuclei_number_concentration_in_tracer_concentration_array > 0 )
[dqdt(:,:,index_of_rain_mixing_ratio_in_tracer_concentration_array)]
standard_name = process_split_cumulative_tendency_of_rain_mixing_ratio
long_name = ratio of mass of rain water tendency to mass of dry air plus vapor (without condensates) due to model physics
Expand Down Expand Up @@ -8851,7 +9042,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme)
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
[gwdcu]
standard_name = tendency_of_x_wind_due_to_convective_gravity_wave_drag
long_name = zonal wind tendency due to convective gravity wave drag
Expand Down Expand Up @@ -8943,7 +9134,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme)
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
[dry]
standard_name = flag_nonzero_land_surface_fraction
long_name = flag indicating presence of some land surface area fraction
Expand Down Expand Up @@ -9287,6 +9478,12 @@
units = flag
dimensions = (number_of_tracers_plus_one,2)
type = logical
[otsptflag]
standard_name = flag_convective_tracer_transport_interstitial
long_name = flag for interstitial tracer transport
units = flag
dimensions = (number_of_tracers)
type = logical
[oz_coeffp5]
standard_name = number_of_coefficients_in_ozone_forcing_data_plus_five
long_name = number of coefficients in ozone forcing data plus five
Expand Down Expand Up @@ -9444,7 +9641,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme)
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
[rainp]
standard_name = tendency_of_rain_water_mixing_ratio_due_to_microphysics
long_name = tendency of rain water mixing ratio due to microphysics
Expand Down Expand Up @@ -9700,7 +9897,7 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme)
active = (control_for_microphysics_scheme == identifier_for_gfdl_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_thompson_microphysics_scheme .or. control_for_microphysics_scheme == identifier_for_nssl_microphysics_scheme)
[snowmt]
standard_name = surface_snow_melt
long_name = snow melt during timestep
Expand Down
3 changes: 2 additions & 1 deletion ccpp/driver/GFS_diagnostics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3561,7 +3561,8 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop
enddo

! Cloud effective radii from Microphysics
if (Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_fer_hires) then
if (Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_fer_hires .or. &
Model%imp_physics == Model%imp_physics_nssl ) then
idx = idx + 1
ExtDiag(idx)%axes = 3
ExtDiag(idx)%name = 'cleffr'
Expand Down
Loading