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

Coupling Merra2 aerosol climatology and GOCART forecasted aerosols with the Thompson microphysics scheme #588

Merged
merged 34 commits into from
Sep 30, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
c954b8f
change .gitmodules for ccpp-physics
AnningCheng-NOAA Aug 23, 2021
e6347c6
change branch name in .gitmodules
AnningCheng-NOAA Aug 23, 2021
17f9d9e
version worked for producing nifa and nwfa
AnningCheng-NOAA Aug 26, 2021
d92e88d
added mraerosol in typedef
AnningCheng-NOAA Sep 3, 2021
dfa9c9e
use ltaersol=.true. and merra2
AnningCheng-NOAA Sep 3, 2021
65ead9e
Merge branch 'merra2_thompson' of https://github.com/AnningCheng-NOAA…
AnningCheng-NOAA Sep 17, 2021
53f3c0d
establish branch mraerosol
AnningCheng-NOAA Sep 23, 2021
2d50c61
Add consistency check for Thompson aerosol options to GFS_typedefs.F90
climbfuji Oct 6, 2021
b79caf4
Merge branch 'develop' of https://github.com/NOAA-EMC/fv3atm into HEAD
climbfuji Oct 6, 2021
cfc57d0
Revert change to .gitmodules and update submodule pointer for ccpp-ph…
climbfuji Oct 7, 2021
7761101
Merge pull request #1 from climbfuji/mraerosol_dom
AnningCheng-NOAA Oct 7, 2021
5b4fd86
using field table instead of code change for mraerosol
AnningCheng-NOAA Oct 18, 2021
ed900f2
bring merra2_thompson up2date
AnningCheng-NOAA Oct 18, 2021
e928e70
Updates and bug fixes for Thompson-Merra2
climbfuji Oct 18, 2021
d11a8fa
Update submodule pointer for ccpp-physics
climbfuji Oct 18, 2021
433b3b3
Merge pull request #2 from climbfuji/merra2_thompson_updates_dom_2021…
AnningCheng-NOAA Oct 18, 2021
26393ad
output nifa and nwfa from qg0 is successful for mraerosol
AnningCheng-NOAA Oct 20, 2021
0549ac9
sync with trunk
AnningCheng-NOAA Feb 10, 2022
586bb68
merge to top of develop branch in fv3atm
AnningCheng-NOAA Mar 17, 2022
53ed2b3
updated .gitmodules
AnningCheng-NOAA Apr 7, 2022
9038f2a
works well on hera now
AnningCheng-NOAA Apr 12, 2022
15deac4
merge with the trunk again
AnningCheng-NOAA May 9, 2022
f36d476
merge to top of develop branch in fv3atm
AnningCheng-NOAA May 9, 2022
0dfb050
pass regression tests in orion
AnningCheng-NOAA May 13, 2022
6512c54
merge to top of develop branch in fv3atm
AnningCheng-NOAA Aug 24, 2022
6f5087a
pass regression tests
AnningCheng-NOAA Aug 26, 2022
b2c8e42
change ccpp-physics branch to feature/merra2_thompson
ChunxiZhang-NOAA Sep 9, 2022
7705429
Merge remote-tracking branch 'anning/merra2_thompson' into feature/me…
ChunxiZhang-NOAA Sep 9, 2022
83ef8cf
Merge remote-tracking branch 'upstream/develop' into feature/merra2_t…
ChunxiZhang-NOAA Sep 13, 2022
1c802a9
Updated ccpp/physics
ChunxiZhang-NOAA Sep 16, 2022
c7b767b
Updated ccpp/physics
ChunxiZhang-NOAA Sep 23, 2022
3107342
Merge remote-tracking branch 'upstream/develop' into feature/merra2_t…
ChunxiZhang-NOAA Sep 23, 2022
fa47632
Updated ccpp-physics for modifying the Thompson scheme
ChunxiZhang-NOAA Sep 28, 2022
08c0912
Update submodule pointer for ccpp-physics
ChunxiZhang-NOAA Sep 30, 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
13 changes: 11 additions & 2 deletions ccpp/data/GFS_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -886,6 +886,7 @@ module GFS_typedefs

!--- Thompson's microphysical parameters
logical :: ltaerosol !< flag for aerosol version
logical :: mraerosol !< flag for merra2_aerosol_aware
logical :: lradar !< flag for radar reflectivity
real(kind=kind_phys) :: nsradar_reset !< seconds between resetting radar reflectivity calculation
real(kind=kind_phys) :: ttendlim !< temperature tendency limiter per time step in K/s
Expand Down Expand Up @@ -2787,7 +2788,7 @@ subroutine coupling_create (Coupling, IM, Model)
endif

!--- needed for Thompson's aerosol option
if(Model%imp_physics == Model%imp_physics_thompson .and. Model%ltaerosol) then
if(Model%imp_physics == Model%imp_physics_thompson .and. (Model%ltaerosol .or. Model%mraerosol)) then
allocate (Coupling%nwfa2d (IM))
allocate (Coupling%nifa2d (IM))
Coupling%nwfa2d = clear_val
Expand Down Expand Up @@ -3075,6 +3076,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &

!--- Thompson microphysical parameters
logical :: ltaerosol = .false. !< flag for aerosol version
logical :: mraerosol = .false. !< flag for merra2_aerosol_aware
logical :: lradar = .false. !< flag for radar reflectivity
real(kind=kind_phys) :: nsradar_reset = -999.0 !< seconds between resetting radar reflectivity calculation, set to <0 for every time step
real(kind=kind_phys) :: ttendlim = -999.0 !< temperature tendency limiter, set to <0 to deactivate
Expand Down Expand Up @@ -3476,7 +3478,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
use_LW_jacobian, doGP_lwscat, damp_LW_fluxadj, lfnc_k, &
lfnc_p0, iovr_convcld, doGP_sgs_cnv, doGP_sgs_mynn, &
! IN CCN forcing
iccn, &
iccn, mraerosol, &
!--- microphysical parameterizations
imp_physics, psautco, prautco, evpco, wminco, &
fprcp, pdfflag, mg_dcs, mg_qcvar, mg_ts_auto_ice, mg_rhmini, &
Expand Down Expand Up @@ -4018,6 +4020,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &

!--- Thompson MP parameters
Model%ltaerosol = ltaerosol
Model%mraerosol = mraerosol
if (Model%ltaerosol .and. Model%mraerosol) then
write(0,*) 'Logic error: Only one Thompson aerosol option can be true, either ltaerosol or mraerosol)'
stop
end if
Model%lradar = lradar
Model%nsradar_reset = nsradar_reset
Model%ttendlim = ttendlim
Expand Down Expand Up @@ -5304,6 +5311,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
end if
if (Model%me == Model%master) print *,' Using Thompson double moment microphysics', &
' ltaerosol = ',Model%ltaerosol, &
' mraerosol = ',Model%mraerosol, &
' ttendlim =',Model%ttendlim, &
' ext_diag_thompson =',Model%ext_diag_thompson, &
' dt_inner =',Model%dt_inner, &
Expand Down Expand Up @@ -5808,6 +5816,7 @@ subroutine control_print(Model)
if (Model%imp_physics == Model%imp_physics_wsm6 .or. Model%imp_physics == Model%imp_physics_thompson) then
print *, ' Thompson microphysical parameters'
print *, ' ltaerosol : ', Model%ltaerosol
print *, ' mraerosol : ', Model%mraerosol
print *, ' lradar : ', Model%lradar
print *, ' nsradar_reset : ', Model%nsradar_reset
print *, ' lrefres : ', Model%lrefres
Expand Down
6 changes: 6 additions & 0 deletions ccpp/data/GFS_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -4042,6 +4042,12 @@
units = flag
dimensions = ()
type = logical
[mraerosol]
standard_name = do_merra2_aerosol_awareness
long_name = flag for merra2 aerosol-aware physics for example the thompson microphysics
units = flag
dimensions = ()
type = logical
[lradar]
standard_name = flag_for_radar_reflectivity
long_name = flag for radar reflectivity
Expand Down
106 changes: 66 additions & 40 deletions ccpp/driver/GFS_diagnostics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -3472,51 +3472,77 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop

!--------------------------aerosols
if (Model%ntwa>0) then
idx = idx + 1
ExtDiag(idx)%axes = 3
ExtDiag(idx)%name = 'nwfa'
ExtDiag(idx)%desc = 'number concentration of water-friendly aerosols'
ExtDiag(idx)%unit = 'kg-1'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var3 => Statein(nb)%qgrs(:,:,Model%ntwa)
enddo
if (Model%ltaerosol) then
idx = idx + 1
ExtDiag(idx)%axes = 3
ExtDiag(idx)%name = 'nwfa'
ExtDiag(idx)%desc = 'number concentration of water-friendly aerosols'
ExtDiag(idx)%unit = 'kg-1'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var3 => Statein(nb)%qgrs(:,:,Model%ntwa)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'nwfa2d'
ExtDiag(idx)%desc = 'water-friendly surface aerosol source'
ExtDiag(idx)%unit = 'kg-1 s-1'
ExtDiag(idx)%mod_name = 'gfs_sfc'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%nwfa2d
enddo
idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'nwfa2d'
ExtDiag(idx)%desc = 'water-friendly surface aerosol source'
ExtDiag(idx)%unit = 'kg-1 s-1'
ExtDiag(idx)%mod_name = 'gfs_sfc'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%nwfa2d
enddo
elseif (Model%mraerosol) then
idx = idx + 1
ExtDiag(idx)%axes = 3
ExtDiag(idx)%name = 'nwfa'
ExtDiag(idx)%desc = 'number concentration of water-friendly aerosols'
ExtDiag(idx)%unit = 'kg-1'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var3 => Stateout(nb)%gq0(:,:,Model%ntwa)
enddo
endif
endif

if (Model%ntia>0) then
idx = idx + 1
ExtDiag(idx)%axes = 3
ExtDiag(idx)%name = 'nifa'
ExtDiag(idx)%desc = 'number concentration of ice-friendly aerosols'
ExtDiag(idx)%unit = 'kg-1'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var3 => Statein(nb)%qgrs(:,:,Model%ntia)
enddo
if (Model%ltaerosol) then
idx = idx + 1
ExtDiag(idx)%axes = 3
ExtDiag(idx)%name = 'nifa'
ExtDiag(idx)%desc = 'number concentration of ice-friendly aerosols'
ExtDiag(idx)%unit = 'kg-1'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var3 => Statein(nb)%qgrs(:,:,Model%ntia)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'nifa2d'
ExtDiag(idx)%desc = 'ice-friendly surface aerosol source'
ExtDiag(idx)%unit = 'kg-1 s-1'
ExtDiag(idx)%mod_name = 'gfs_sfc'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%nifa2d
enddo
idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'nifa2d'
ExtDiag(idx)%desc = 'ice-friendly surface aerosol source'
ExtDiag(idx)%unit = 'kg-1 s-1'
ExtDiag(idx)%mod_name = 'gfs_sfc'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => Coupling(nb)%nifa2d
enddo
else if (Model%mraerosol) then
idx = idx + 1
ExtDiag(idx)%axes = 3
ExtDiag(idx)%name = 'nifa'
ExtDiag(idx)%desc = 'number concentration of ice-friendly aerosols'
ExtDiag(idx)%unit = 'kg-1'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var3 => Stateout(nb)%gq0(:,:,Model%ntia)
enddo
end if
endif

! Extended diagnostics from Thompson MP
Expand Down