@@ -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