Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
f7a1b91
added more protections on QSAT tables
wmputman Jul 30, 2024
20092d4
more protections on bounds for QSAT tables
wmputman Aug 13, 2024
e13522e
added L186 extended model top
wmputman Aug 13, 2024
5a6e8cf
Merge remote-tracking branch 'origin/main' into feature/sdrabenh/gcm_v12
sdrabenh Aug 14, 2024
2ccc664
Merge branch 'main' into feature/sdrabenh/gcm_v12
mathomp4 Sep 23, 2024
f133cc5
Merge remote-tracking branch 'origin/main' into feature/sdrabenh/gcm_v12
sdrabenh Oct 4, 2024
02e0203
Merge remote-tracking branch 'origin/main' into feature/sdrabenh/gcm_v12
sdrabenh Dec 11, 2024
a01c5c4
Merge branch 'main' into feature/sdrabenh/gcm_v12
mathomp4 Apr 25, 2025
487ffb8
Merge pull request #378 from GEOS-ESM/feature/sdrabenh/dev_into_v12_2…
sdrabenh Apr 25, 2025
434cd55
added 41 ML levels for PYMLINC
wmputman May 5, 2025
5e18bad
Merge branch 'main' into feature/sdrabenh/gcm_v12
mathomp4 May 13, 2025
583d816
Update CI
mathomp4 May 13, 2025
fa8d225
Merge pull request #380 from GEOS-ESM/hotfix/v12-f2py-fix
mathomp4 May 13, 2025
70a0c67
Merge remote-tracking branch 'origin/main' into feature/sdrabenh/gcm_v12
sdrabenh Jun 30, 2025
f64addb
Merge branch 'main' into feature/sdrabenh/gcm_v12
mathomp4 Jul 7, 2025
d863049
Merge remote-tracking branch 'origin/main' into feature/sdrabenh/gcm_v12
sdrabenh Aug 28, 2025
492aadc
Merge remote-tracking branch 'origin/main' into feature/sdrabenh/gcm_v12
sdrabenh Sep 5, 2025
b215790
Merge remote-tracking branch 'origin/main' into feature/sdrabenh/gcm_v12
sdrabenh Oct 1, 2025
fa0cef0
v12: Updates for ifx builds
mathomp4 Oct 20, 2025
fac075b
Merge pull request #393 from GEOS-ESM/feature/v12-ifx-cmake-fix
mathomp4 Oct 20, 2025
934decf
Merge branch 'main' into feature/sdrabenh/gcm_v12
mathomp4 Jan 2, 2026
3b308af
v12: Merge main, update CI
mathomp4 Jan 2, 2026
f5d8cbb
Merge pull request #401 from GEOS-ESM/feature/v12-update-main-2026-01-02
sdrabenh Jan 2, 2026
3b09874
Merge branch 'main' into feature/sdrabenh/gcm_v12
mathomp4 Jan 7, 2026
89ffa41
Merge pull request #403 from GEOS-ESM/feature/v12-merge-from-downstre…
sdrabenh Jan 16, 2026
6669be4
Fix for Open MPI 5
mathomp4 Mar 4, 2026
27961c6
Fix the openmpi5 fix
mathomp4 Mar 9, 2026
6ef9e05
v12: Fixes for Flang 22
mathomp4 Mar 11, 2026
2f43ad6
Merge branch 'main' into feature/sdrabenh/gcm_v12
mathomp4 Mar 12, 2026
8362d17
updated iliqskin to apply to just snow or snow & graupel as in SFE25
wmputman Apr 14, 2026
adaf9a7
Update spack CI
mathomp4 May 1, 2026
9e2f1cf
minimal zero-diff for L72 merge from latest v12-SFE26 code
wmputman May 6, 2026
af70d1e
added new radar reflectivity module
wmputman May 12, 2026
dcd86a5
Merge remote-tracking branch 'origin/feature/wmputman/LM_v12rc29_ZD' …
sdrabenh May 13, 2026
5d77fa0
bug fixed in updated calcdbz when ivarint==0
wmputman May 13, 2026
39f57e6
Merge remote-tracking branch 'origin/feature/wmputman/LM_v12rc29_ZD' …
sdrabenh May 14, 2026
b0903e5
hand-merge main into feature/sdrabenh/gcm_v12
sdrabenh May 20, 2026
a9e51bc
Merge pull request #445 from GEOS-ESM/feature/sdrabenh/gcm_v11_into_v12
sdrabenh May 26, 2026
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
11 changes: 7 additions & 4 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
version: 2.1

# Anchors in case we need to override the defaults from the orb
#baselibs_version: &baselibs_version v7.27.0
#bcs_version: &bcs_version v11.6.0
#baselibs_version: &baselibs_version v8.24.0
#bcs_version: &bcs_version v12.0.0

orbs:
ci: geos-esm/circleci-tools@4
ci: geos-esm/circleci-tools@5

workflows:
build-test:
Expand All @@ -21,7 +21,10 @@ workflows:
#baselibs_version: *baselibs_version
repo: GEOSgcm
checkout_fixture: true
mepodevelop: true
# V12 code uses a special branch for now.
fixture_branch: feature/sdrabenh/gcm_v12
# We comment out this as it will "undo" the fixture_branch
#mepodevelop: true
persist_workspace: true # Needs to be true to run fv3/gcm experiment, costs extra

# Run AMIP GCM (1 hour, no ExtData)
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ concurrency:
jobs:
build_gcm:
strategy:
fail-fast: false
matrix:
compiler: [ifort, gfortran-14, gfortran-15]
build-type: [Debug]
Expand All @@ -26,6 +27,7 @@ jobs:
compiler: ${{ matrix.compiler }}
cmake-build-type: ${{ matrix.build-type }}
fixture-repo: GEOS-ESM/GEOSgcm
fixture-ref: feature/sdrabenh/gcm_v12

spack_build:
uses: GEOS-ESM/CI-workflows/.github/workflows/spack_gcc_build.yml@project/geosgcm
Expand All @@ -34,4 +36,6 @@ jobs:
BUILDCACHE_TOKEN: ${{ secrets.BUILDCACHE_TOKEN }}
with:
fixture-repo: GEOS-ESM/GEOSgcm
fixture-ref: feature/sdrabenh/gcm_v12
load-fms: true

2 changes: 1 addition & 1 deletion GEOS_Shared/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ set (srcs
GEOS_Utilities.F90 DragCoefficients.F90 GEOS.F90
tropovars.F90 surfacelayer.F90 GEOS_TopoGet.F90
GEOS_GmapMod.F90 GEOS_RemapMod.F90 G3_MPI_Util_Mod.F90 windfix.F90
PWSSSP.F sphere.F calcdbz.F OVP.F90
PWSSSP.F sphere.F calcdbz.F compute_radar_reflectivity.F90 OVP.F90
getco2.F90 atmOceanIntLayer.F90
)

Expand Down
4 changes: 2 additions & 2 deletions GEOS_Shared/GEOS_Utilities.F90
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,7 @@ function QSAT0(TL,PL,RAMP,PASCALS,DQSAT) result(QSAT)
end if

TI = (TI - TMINTBL)*DEGSUBS+1
IT = int(TI)
IT = min(max(1,int(TI)),TABLESIZE-1)

if(URAMP==TMIX) then
DQ = ESTBLX(IT+1) - ESTBLX(IT)
Expand Down Expand Up @@ -764,7 +764,7 @@ function DQSAT0(TL,PL,RAMP,PASCALS,QSAT) result(DQSAT)
end if

TT = (TI - TMINTBL)*DEGSUBS+1
IT = int(TT)
IT = min(max(1,int(TT)),TABLESIZE-1)

if(URAMP==TMIX) then
DQQ = ESTBLX(IT+1) - ESTBLX(IT)
Expand Down
63 changes: 51 additions & 12 deletions GEOS_Shared/calcdbz.F
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ SUBROUTINE CALCDBZ(DBZ,PRS,TMK,QVP,QRA,QSN,QGR,WEDIM,SNDIM,BTDIM,
c calculated in Thompson, Rasmussen, and Manning (2004, Monthly
c Weather Review, Vol. 132, No. 2, pp. 519-542.)
c
c 4. If iliqskin=1, frozen particles that are at a temperature above
c 4. If iliqskin=1, snow particles that are at a temperature above
c freezing are assumed to scatter as a liquid particle.
c
c 4. If iliqskin=2, snow & graupel particles that are at a temperature above
c freezing are assumed to scatter as a liquid particle.
c
c More information on the derivation of simulated reflectivity in
Expand All @@ -51,8 +54,10 @@ SUBROUTINE CALCDBZ(DBZ,PRS,TMK,QVP,QRA,QSN,QGR,WEDIM,SNDIM,BTDIM,
REAL TEMP_C,VIRTUAL_T
REAL GONV,RONV,SONV
REAL FACTOR_G,FACTOR_R,FACTOR_S
REAL FACTORB_G,FACTORB_R,FACTORB_S
REAL FACTORB_G,FACTORB_S
REAL RHOAIR,Z_E
REAL ZE_R,ZE_S,ZE_G


c Constants used to calculate variable intercepts
REAL R1,RON,RON2,SON,GON
Expand All @@ -65,13 +70,11 @@ SUBROUTINE CALCDBZ(DBZ,PRS,TMK,QVP,QRA,QSN,QGR,WEDIM,SNDIM,BTDIM,
REAL GAMMA_SEVEN,ALPHA
REAL RHOWAT,CELKEL,PI,RD


c Constants used to calculate variable intercepts
R1 = 1.D-15
RON = 8.D6
RON2 = 1.D10
SON = 2.D7
GON = 5.D7
RON_MIN = 8.D6
RON_QR0 = 0.00010D0
RON_DELQR0 = 0.25D0*RON_QR0
Expand All @@ -81,19 +84,28 @@ SUBROUTINE CALCDBZ(DBZ,PRS,TMK,QVP,QRA,QSN,QGR,WEDIM,SNDIM,BTDIM,
c Constant intercepts
RN0_R = 8.D6
RN0_S = 2.D7
RN0_G = 4.D6

c Other constants
GAMMA_SEVEN = 720.D0
RHOWAT = 1000.D0
RHO_R = RHOWAT
RHO_S = 100.D0
RHO_G = 400.D0
ALPHA = 0.224D0
CELKEL = 273.15D0
PI = 3.141592653589793D0
RD = 287.04D0

c --- NEW: HAIL VS GRAUPEL CONSTANTS ---
IF (IVARINT .GE. 3) THEN
RHO_G = 917.D0 ! Hail density (kg/m^3)
GON = 4.D4 ! Hail max intercept (fewer, much larger stones)
RN0_G = 4.D4 ! Constant hail intercept
ELSE
RHO_G = 400.D0 ! Graupel density (kg/m^3)
GON = 5.D7 ! Graupel max intercept (many, smaller stones)
RN0_G = 4.D6 ! Constant graupel intercept
END IF

c Force all Q arrays to be 0.0 or greater.
DO K = 1,BTDIM
DO J = 1,SNDIM
Expand Down Expand Up @@ -150,6 +162,8 @@ SUBROUTINE CALCDBZ(DBZ,PRS,TMK,QVP,QRA,QSN,QGR,WEDIM,SNDIM,BTDIM,

IF (ILIQSKIN.EQ.1 .AND. TMK(I,J,K).GT.CELKEL) THEN
FACTORB_S = FACTOR_S/ALPHA
ELSEIF (ILIQSKIN.EQ.2 .AND. TMK(I,J,K).GT.CELKEL) THEN
FACTORB_S = FACTOR_S/ALPHA
FACTORB_G = FACTOR_G/ALPHA
ELSE
FACTORB_S = FACTOR_S
Expand All @@ -158,11 +172,19 @@ SUBROUTINE CALCDBZ(DBZ,PRS,TMK,QVP,QRA,QSN,QGR,WEDIM,SNDIM,BTDIM,

c Calculate variable intercept parameters

IF (IVARINT.EQ.1) THEN
IF (IVARINT.GE.1) THEN

TEMP_C = DMIN1(-0.001D0,TMK(I,J,K)-CELKEL)
SONV = DMIN1(2.0D8,2.0D6*EXP(-0.12D0*TEMP_C))

c simulate large snow aggregates by halving the intercept parameter.
c Apply this to both option 2 and 3!
IF (IVARINT.GE.2) THEN
IF (QSN(I,J,K).GT.R1) THEN
SONV = SONV * 0.5D0
END IF
END IF

GONV = GON
IF (QGR(I,J,K).GT.R1) THEN
GONV = 2.38D0* (PI*RHO_G/
Expand All @@ -184,14 +206,31 @@ SUBROUTINE CALCDBZ(DBZ,PRS,TMK,QVP,QRA,QSN,QGR,WEDIM,SNDIM,BTDIM,

END IF


c Total equivalent reflectivity factor (z_e, in mm^6 m^-3) is
c the sum of z_e for each hydrometeor species:

Z_E = FACTOR_R* (RHOAIR*QRA(I,J,K))**1.75D0/
+ RONV**.75D0 + FACTORB_S*
+ (RHOAIR*QSN(I,J,K))**1.75D0/SONV**.75D0 +
+ FACTORB_G* (RHOAIR*QGR(I,J,K))**1.75D0/
+ GONV**.75D0
c Calculate individual equivalent reflectivity factors
ZE_R = (RHOAIR*QRA(I,J,K))**1.75D0
ZE_R = FACTOR_R * ZE_R / RONV**.75D0

ZE_S = (RHOAIR*QSN(I,J,K))**1.75D0
ZE_S = FACTORB_S * ZE_S / SONV**.75D0

ZE_G = (RHOAIR*QGR(I,J,K))**1.75D0
ZE_G = FACTORB_G * ZE_G / GONV**.75D0

c --- PSEUDO-MIE PLATEAU FOR WET HAIL ---
c If using Hail (IVARINT>=3) with a liquid skin, Rayleigh math overestimates.
c Cap the hail's specific Ze contribution at 10^7 (approx 70 dBZ).
IF (IVARINT.GE.3 .AND. ILIQSKIN.EQ.2 .AND.
+ TMK(I,J,K).GT.CELKEL) THEN
ZE_G = MIN(ZE_G, 1.0D7)
END IF

c Total equivalent reflectivity factor (z_e, in mm^6 m^-3) is
c the sum of z_e for each hydrometeor species:
Z_E = ZE_R + ZE_S + ZE_G

c Adjust small values of Z_e so that dBZ is no lower than -30
Z_E = MAX(Z_E,.001D0)
Expand Down
Loading
Loading