Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
588d06b
MERRA2 3 hourly forcing passed compilation
AnningCheng-NOAA Nov 26, 2024
b33ccf9
debug mode1
AnningCheng-NOAA Nov 26, 2024
21c0af0
debug mode3
AnningCheng-NOAA Nov 26, 2024
2574f22
remove debug points
AnningCheng-NOAA Dec 6, 2024
5746150
update aero interpolation for restart consideration
AnningCheng-NOAA Feb 26, 2025
3050cec
fixed a comipilation error
SMoorthi-emc Feb 27, 2025
f837bed
ENH: Add water vapor photochemistry diagnostics.
DWesl Mar 5, 2025
bde6aba
Merge branch 'add-qv-photochemistry-diagnostics' of global-workflow-2…
DWesl Mar 5, 2025
9cd577b
merge with trunk
AnningCheng-NOAA Apr 3, 2025
fff2a7a
add read_aerdata_dl, aerinterpol_dl, read_aerdataf_dl to the existing…
AnningCheng-NOAA Apr 16, 2025
4cfbc4e
change intend(inout) to intend(Out) for eremsg, which reset right after
AnningCheng-NOAA Apr 16, 2025
6597dca
Merge branch 'ufs/dev' into add-qv-photochemistry-diagnostics
DWesl Apr 16, 2025
cd9ce5c
Merge remote-tracking branch 'origin/ufs/dev' into add-qv-photochemis…
DWesl Apr 29, 2025
1ce6d1d
mirror change from FV3 interstitial to SCM interstitial
grantfirl Apr 30, 2025
9064a31
Merge branch 'ufs/dev' into mr2_hf
grantfirl Apr 30, 2025
6224764
BUG: Avoid divide-by-zero
DWesl Apr 30, 2025
302b6c9
Merge branch 'ufs/dev' of ufs-community/ccpp-physics into add-qv-phot…
DWesl May 1, 2025
5ed9996
Merge remote-tracking branch 'upstream/ufs/dev' into mr2_hf
AnningCheng-NOAA May 2, 2025
f39db82
BUG: Allow photochemistry schemes to have parameters at different times.
DWesl May 22, 2025
c36a0b8
Merge branch 'ufs/dev' of ufs-community/ccpp-physics into photochemis…
DWesl May 22, 2025
02b210e
STY: Move the find_photochemistry_index calls inside the conditionals.
DWesl May 22, 2025
25e98dd
Merge branch 'photochemistry-index-fix' into add-qv-photochemistry-di…
DWesl May 28, 2025
f028dc3
Merge branch 'ufs/dev' of ufs-community/ccpp-physics into add-qv-phot…
DWesl Jun 3, 2025
4eb301c
update threshold for when to use prognostic closure
lisa-bengtsson Jun 9, 2025
b957d06
Update documentation for saSAS
lisa-bengtsson Jun 9, 2025
32f4a11
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
lisa-bengtsson Jun 20, 2025
9f04d29
Correct units in .meta files
lisa-bengtsson Jun 24, 2025
8ef7af5
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
lisa-bengtsson Jun 25, 2025
b558c8d
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
lisa-bengtsson Jun 30, 2025
3d236ca
Merge branch 'ufs/dev' of ufs-community/ccpp-physics into add-qv-phot…
DWesl Jul 3, 2025
19d82ff
Correct units in interstitial file
lisa-bengtsson Jul 9, 2025
f226729
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
lisa-bengtsson Jul 11, 2025
5d6bacf
Merge pull request #253 from noaa-oar-arl/feature/aqm_canopy2
rhaesung Jul 17, 2025
725b683
Merge branch 'ufs/dev' into mr2_hf
grantfirl Jul 17, 2025
6b47b1b
Merge branch 'add-qv-photochemistry-diagnostics' into combo_265_291
grantfirl Jul 17, 2025
ce2e1de
Merge branch 'conv_dx' into combo_265_291
grantfirl Jul 17, 2025
911b8ce
Merge branch 'mr2_hf' into combo_265_291
grantfirl Jul 17, 2025
1f46a90
add back iaermdl in GFS_phys_time_vary_run argument list
grantfirl Jul 17, 2025
5410686
Merge branch 'combo_265_291' into ufs-dev-PR302
grantfirl Aug 11, 2025
2f21a38
fix compilation errors in GFS_phys_time_vary.scm.F90
grantfirl Aug 11, 2025
3fa3190
Merge branch 'ufs-dev-PR253' into ufs-dev-PR302
grantfirl Aug 26, 2025
4e8d363
Merge branch 'main' into ufs-dev-PR302
grantfirl Aug 28, 2025
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 physics/CONV/SAMF/samfdeepcnv.f
Original file line number Diff line number Diff line change
Expand Up @@ -2537,10 +2537,10 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, &
c
c------- final changed variable per unit mass flux
c
!> - If grid size is less than a threshold value (dxcrtas: currently 8km if progsigma is not used and 30km if progsigma is used), the quasi-equilibrium assumption of Arakawa-Schubert is not used any longer.
!> - If grid size is less than a threshold value (dxcrtas: currently 8km if progsigma is not used), or progsigma = true, the quasi-equilibrium assumption of Arakawa-Schubert is not used any longer.
!
if(progsigma)then
dxcrtas=30.e3
dxcrtas=500.e3
dxcrtuf=10.e3
else
dxcrtas=8.e3
Expand Down
4 changes: 2 additions & 2 deletions physics/CONV/SAMF/samfdeepcnv.meta
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@
[omegain]
standard_name = prognostic_updraft_velocity_in_convection
long_name = convective updraft velocity
units = frac
units = Pa s-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
Expand All @@ -481,7 +481,7 @@
[omegaout]
standard_name = updraft_velocity_updated_by_physics
long_name = convective updraft velocity updated by physics
units = frac
units = Pa s-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
Expand Down
2 changes: 1 addition & 1 deletion physics/CONV/SAMF/samfshalcnv.f
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, &
parameter(betaw=.03,dxcrtc0=9.e3)
parameter(h1=0.33333333)
! progsigma
parameter(dxcrtas=30.e3,sigmind=0.01,sigmins=0.03,sigminm=0.01)
parameter(dxcrtas=500.e3,sigmind=0.01,sigmins=0.03,sigminm=0.01)
c local variables and arrays
real(kind=kind_phys) pfld(im,km), to(im,km), qo(im,km),
& uo(im,km), vo(im,km), qeso(im,km),
Expand Down
4 changes: 2 additions & 2 deletions physics/CONV/SAMF/samfshalcnv.meta
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@
[omegain]
standard_name = prognostic_updraft_velocity_in_convection
long_name = convective updraft velocity
units = frac
units = Pa s-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
Expand All @@ -513,7 +513,7 @@
[omegaout]
standard_name = updraft_velocity_updated_by_physics
long_name = convective updraft velocity updated by physics
units = frac
units = Pa s-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ end subroutine GFS_photochemistry_init
!!
subroutine GFS_photochemistry_run (dtp, ozphys, oz_phys_2015, oz_phys_2006, con_1ovg, &
prsl, dp, ozpl, h2o_phys, h2ophys, h2opl, h2o0, oz0, gt0, do3_dt_prd, do3_dt_ozmx, &
do3_dt_temp, do3_dt_ohoz, errmsg, errflg)
do3_dt_temp, do3_dt_ohoz, dqv_dt_prd, dqv_dt_qvmx, errmsg, errflg)

! Inputs
real(kind=kind_phys), intent(in) :: &
Expand All @@ -73,7 +73,9 @@ subroutine GFS_photochemistry_run (dtp, ozphys, oz_phys_2015, oz_phys_2006, con_
do3_dt_prd, & ! Physics tendency: production and loss effect
do3_dt_ozmx, & ! Physics tendency: ozone mixing ratio effect
do3_dt_temp, & ! Physics tendency: temperature effect
do3_dt_ohoz ! Physics tendency: overhead ozone effect
do3_dt_ohoz, & ! Physics tendency: overhead ozone effect
dqv_dt_prd, & ! Physics tendency: Climatological net production effect
dqv_dt_qvmx ! Physics tendency: specific humidity effect

! Outputs
real(kind=kind_phys), intent(inout), dimension(:,:) :: &
Expand All @@ -97,7 +99,7 @@ subroutine GFS_photochemistry_run (dtp, ozphys, oz_phys_2015, oz_phys_2006, con_
do3_dt_ozmx, do3_dt_temp, do3_dt_ohoz)
endif
if (h2o_phys) then
call h2ophys%run(dtp, prsl, h2opl, h2o0)
call h2ophys%run(dtp, prsl, h2opl, h2o0, dqv_dt_prd, dqv_dt_qvmx)
endif

end subroutine GFS_photochemistry_run
Expand Down
18 changes: 18 additions & 0 deletions physics/Interstitials/UFS_SCM_NEPTUNE/GFS_photochemistry.meta
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,24 @@
kind = kind_phys
intent = inout
optional = True
[dqv_dt_prd]
standard_name = water_vapor_tendency_due_to_production_and_loss_rate
long_name = water_vapor tendency due to production and loss rate
units = kg kg-1 s-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
intent = inout
optional = True
[dqv_dt_qvmx]
standard_name = water_vapor_tendency_due_to_water_vapor_mixing_ratio
long_name = water_vapor tendency due to water_vapor mixing ratio
units = kg kg-1 s-1
dimensions = (horizontal_loop_extent,vertical_layer_dimension)
type = real
kind = kind_phys
intent = inout
optional = True
[errmsg]
standard_name = ccpp_error_message
long_name = error message for error handling in CCPP
Expand Down
79 changes: 57 additions & 22 deletions physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.fv3.F90
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ module GFS_phys_time_vary
use module_h2ophys, only: ty_h2ophys

use aerclm_def, only : aerin, aer_pres, ntrcaer, ntrcaerm, iamin, iamax, jamin, jamax
use aerinterp, only : read_aerdata, setindxaer, aerinterpol, read_aerdataf
use aerinterp, only : read_aerdata, setindxaer, aerinterpol, read_aerdataf, &
read_aerdata_dl, aerinterpol_dl, read_aerdataf_dl

use iccn_def, only : ciplin, ccnin, ci_pres
use iccninterp, only : read_cidata, setindxci, ciinterpol
Expand Down Expand Up @@ -78,7 +79,7 @@ end subroutine copy_error
!>\section gen_GFS_phys_time_vary_init GFS_phys_time_vary_init General Algorithm
!> @{
subroutine GFS_phys_time_vary_init ( &
me, master, ntoz, h2o_phys, iaerclm, iccn, iaermdl, iflip, im, levs, &
me, master, ntoz, h2o_phys, iaerclm, iaermdl, iccn, iflip, im, levs, &
nx, ny, idate, xlat_d, xlon_d, &
jindx1_o3, jindx2_o3, ddy_o3, jindx1_h, jindx2_h, ddy_h, h2opl,fhour, &
jindx1_aer, jindx2_aer, ddy_aer, iindx1_aer, iindx2_aer, ddx_aer, aer_nm, &
Expand Down Expand Up @@ -227,7 +228,12 @@ subroutine GFS_phys_time_vary_init (
ntrcaer = ntrcaerm
myerrflg = 0
myerrmsg = 'read_aerdata failed without a message'
call read_aerdata (me,master,iflip,idate,myerrmsg,myerrflg)
if(iaermdl == 1) then
call read_aerdata (me,master,iflip,idate,myerrmsg,myerrflg)
elseif (iaermdl == 6) then
call read_aerdata_dl(me,master,iflip, &
idate,fhour, myerrmsg,myerrflg)
end if
call copy_error(myerrmsg, myerrflg, errmsg, errflg)
else if(iaermdl ==2 ) then
do ix=1,ntrcaerm
Expand Down Expand Up @@ -351,7 +357,11 @@ subroutine GFS_phys_time_vary_init (

if (iaerclm) then
! This call is outside the OpenMP section, so it should access errmsg & errflg directly.
call read_aerdataf (me, master, iflip, idate, fhour, errmsg, errflg)
if(iaermdl==1) then
call read_aerdataf (me, master, iflip, idate, fhour, errmsg, errflg)
elseif (iaermdl==6) then
call read_aerdataf_dl (me, master, iflip, idate, fhour, errmsg, errflg)
end if
! If it is moved to an OpenMP section, it must use myerrmsg, myerrflg, and copy_error.
if (errflg/=0) return
end if
Expand Down Expand Up @@ -704,7 +714,7 @@ end subroutine GFS_phys_time_vary_init
subroutine GFS_phys_time_vary_timestep_init ( &
me, master, cnx, cny, isc, jsc, nrcm, im, levs, kdt, idate, cplflx, &
nsswr, fhswr, lsswr, fhour, &
imfdeepcnv, cal_pre, random_clds, nscyc, ntoz, h2o_phys, iaerclm, iccn, clstp, &
imfdeepcnv, cal_pre, random_clds, nscyc, ntoz, h2o_phys, iaerclm, iaermdl, iccn, clstp, &
jindx1_o3, jindx2_o3, ddy_o3, ozpl, jindx1_h, jindx2_h, ddy_h, h2opl, iflip, &
jindx1_aer, jindx2_aer, ddy_aer, iindx1_aer, iindx2_aer, ddx_aer, aer_nm, &
jindx1_ci, jindx2_ci, ddy_ci, iindx1_ci, iindx2_ci, ddx_ci, in_nm, ccn_nm, fn_nml, &
Expand All @@ -722,7 +732,7 @@ subroutine GFS_phys_time_vary_timestep_init (

! Interface variables
integer, intent(in) :: me, master, cnx, cny, isc, jsc, nrcm, im, levs, kdt, &
nsswr, imfdeepcnv, iccn, nscyc, ntoz, iflip
nsswr, imfdeepcnv, iccn, nscyc, ntoz, iflip, iaermdl
integer, intent(in) :: idate(:)
real(kind_phys), intent(in) :: fhswr, fhour
logical, intent(in) :: lsswr, cal_pre, random_clds, h2o_phys, iaerclm, cplflx
Expand Down Expand Up @@ -790,7 +800,7 @@ subroutine GFS_phys_time_vary_timestep_init (

!$OMP parallel num_threads(nthrds) default(none) &
!$OMP shared(kdt,nsswr,lsswr,clstp,imfdeepcnv,cal_pre,random_clds) &
!$OMP shared(fhswr,fhour,seed0,cnx,cny,nrcm,wrk,rannie,rndval) &
!$OMP shared(fhswr,fhour,seed0,cnx,cny,nrcm,wrk,rannie,rndval, iaermdl) &
!$OMP shared(rann,im,isc,jsc,imap,jmap,ntoz,me,idate,jindx1_o3,jindx2_o3) &
!$OMP shared(ozpl,ddy_o3,h2o_phys,jindx1_h,jindx2_h,h2opl,ddy_h,iaerclm,master) &
!$OMP shared(levs,prsl,iccn,jindx1_ci,jindx2_ci,ddy_ci,iindx1_ci,iindx2_ci) &
Expand Down Expand Up @@ -863,23 +873,17 @@ subroutine GFS_phys_time_vary_timestep_init (
rjday = jdoy + jdat(5) / 24.
if (rjday < ozphys%time(1)) rjday = rjday + 365.

n2 = ozphys%ntime + 1
do j=2,ozphys%ntime
if (rjday < ozphys%time(j)) then
n2 = j
exit
endif
enddo
n1 = n2 - 1
if (n2 > ozphys%ntime) n2 = n2 - ozphys%ntime

!> - Update ozone concentration.
if (ntoz > 0) then
call find_photochem_time_index(ozphys%ntime, ozphys%time, rjday, n1, n2)

call ozphys%update_o3prog(jindx1_o3, jindx2_o3, ddy_o3, rjday, n1, n2, ozpl)
endif

!> - Update stratospheric h2o concentration.
if (h2o_phys) then
call find_photochem_time_index(h2ophys%ntime, h2ophys%time, rjday, n1, n2)

call h2ophys%update(jindx1_h, jindx2_h, ddy_h, rjday, n1, n2, h2opl)
endif

Expand Down Expand Up @@ -908,11 +912,19 @@ subroutine GFS_phys_time_vary_timestep_init (
if (iaerclm) then
! aerinterpol is using threading inside, don't
! move into OpenMP parallel section above
call aerinterpol (me, master, nthrds, im, idate, &
fhour, iflip, jindx1_aer, jindx2_aer, &
ddy_aer, iindx1_aer, &
iindx2_aer, ddx_aer, &
levs, prsl, aer_nm, errmsg, errflg)
if (iaermdl==1) then
call aerinterpol (me, master, nthrds, im, idate, &
fhour, iflip, jindx1_aer, jindx2_aer, &
ddy_aer, iindx1_aer, &
iindx2_aer, ddx_aer, &
levs, prsl, aer_nm, errmsg, errflg)
else if (iaermdl==6) then
call aerinterpol_dl (me, master, nthrds, im, idate, &
fhour, iflip, jindx1_aer, jindx2_aer, &
ddy_aer, iindx1_aer, &
iindx2_aer, ddx_aer, &
levs, prsl, aer_nm, errmsg, errflg)
endif
if(errflg /= 0) then
return
endif
Expand All @@ -933,6 +945,29 @@ subroutine GFS_phys_time_vary_timestep_init (
endif
endif

contains
!> Find the time indexes on either side of current time
subroutine find_photochem_time_index(ntime, time, rjday, n1, n2)
implicit none
!> The number of times provided in the parameter file
integer, intent(in) :: ntime
!> The indexes of the parameters just before and after the
!! current time
integer, intent(out) :: n1, n2
!> The times provided in the parameter file
real, intent(in), dimension(ntime+1) :: time
!> The current time of year
real, intent(in) :: rjday
n2 = ntime + 1
do j=2,ntime
if (rjday < time(j)) then
n2 = j
exit
endif
enddo
n1 = n2 - 1
if (n2 > ntime) n2 = n2 - ntime
end subroutine find_photochem_time_index
end subroutine GFS_phys_time_vary_timestep_init
!> @}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1259,6 +1259,13 @@
dimensions = ()
type = logical
intent = in
[iaermdl]
standard_name = control_for_aerosol_radiation_scheme
long_name = control of aerosol scheme in radiation
units = 1
dimensions = ()
type = integer
intent = in
[iccn]
standard_name = control_for_ice_cloud_condensation_nuclei_forcing
long_name = flag for IN and CCN forcing for morrison gettelman microphysics
Expand Down
Loading
Loading