Skip to content

Commit a503827

Browse files
authored
Merge pull request #1124 from GEOS-ESM/bugfix/1122-srftypefix-v11
v11: Fix for SRF_TYPE
2 parents f879c9a + 8e05081 commit a503827

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/Process_Library.F90

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ module GEOSmoist_Process_Library
3232
module procedure ICE_FRACTION_1D
3333
module procedure ICE_FRACTION_SC
3434
end interface ICE_FRACTION
35+
36+
! SRF_TYPE constants
37+
integer, parameter :: SRF_TYPE_LAND = 1
38+
integer, parameter :: SRF_TYPE_SNOW = 2
39+
integer, parameter :: SRF_TYPE_ICE = 3
40+
integer, parameter :: SRF_TYPE_OCEAN = 0
41+
3542
! ICE_FRACTION constants
3643
! In anvil/convective clouds
3744
real, parameter :: aT_ICE_ALL = 252.16
@@ -403,7 +410,8 @@ function ICE_FRACTION_SC (TEMP,CNV_FRACTION,SRF_TYPE) RESULT(ICEFRCT)
403410
ICEFRCT_C = MAX(ICEFRCT_C,0.00)
404411
ICEFRCT_C = ICEFRCT_C**aICEFRPWR
405412
! Sigmoidal functions like figure 6b/6c of Hu et al 2010, doi:10.1029/2009JD012384
406-
if (SRF_TYPE >= 2.0) then
413+
select case (nint(SRF_TYPE))
414+
case (SRF_TYPE_SNOW, SRF_TYPE_ICE)
407415
! Over snow (SRF_TYPE == 2.0) and ice (SRF_TYPE == 3.0)
408416
if (ICE_RADII_PARAM == 1) then
409417
! Jason formula
@@ -424,8 +432,8 @@ function ICE_FRACTION_SC (TEMP,CNV_FRACTION,SRF_TYPE) RESULT(ICEFRCT)
424432
ICEFRCT_M = MIN(ICEFRCT_M,1.00)
425433
ICEFRCT_M = MAX(ICEFRCT_M,0.00)
426434
ICEFRCT_M = ICEFRCT_M**iICEFRPWR
427-
else if (SRF_TYPE > 1.0) then
428-
! Over Land
435+
case (SRF_TYPE_LAND)
436+
! Over Land (SRF_TYPE == 1)
429437
ICEFRCT_M = 0.00
430438
if ( TEMP <= lT_ICE_ALL ) then
431439
ICEFRCT_M = 1.000
@@ -435,8 +443,8 @@ function ICE_FRACTION_SC (TEMP,CNV_FRACTION,SRF_TYPE) RESULT(ICEFRCT)
435443
ICEFRCT_M = MIN(ICEFRCT_M,1.00)
436444
ICEFRCT_M = MAX(ICEFRCT_M,0.00)
437445
ICEFRCT_M = ICEFRCT_M**lICEFRPWR
438-
else
439-
! Over Oceans
446+
case (SRF_TYPE_OCEAN)
447+
! Over Oceans (SRF_TYPE == 0)
440448
ICEFRCT_M = 0.00
441449
if ( TEMP <= oT_ICE_ALL ) then
442450
ICEFRCT_M = 1.000
@@ -446,7 +454,11 @@ function ICE_FRACTION_SC (TEMP,CNV_FRACTION,SRF_TYPE) RESULT(ICEFRCT)
446454
ICEFRCT_M = MIN(ICEFRCT_M,1.00)
447455
ICEFRCT_M = MAX(ICEFRCT_M,0.00)
448456
ICEFRCT_M = ICEFRCT_M**oICEFRPWR
449-
endif
457+
case default
458+
! You should not be here
459+
print *, 'ICE_FRACTION_SC: Unknown SRF_TYPE = ',SRF_TYPE
460+
error stop
461+
end select
450462
! Combine the Convective and MODIS functions
451463
ICEFRCT = ICEFRCT_M*(1.0-CNV_FRACTION) + ICEFRCT_C*(CNV_FRACTION)
452464
#endif

0 commit comments

Comments
 (0)