@@ -33,6 +33,13 @@ module GEOSmoist_Process_Library
3333 module procedure ICE_FRACTION_1D
3434 module procedure ICE_FRACTION_SC
3535 end interface ICE_FRACTION
36+
37+ ! SRF_TYPE constants
38+ integer , parameter :: SRF_TYPE_LAND = 1
39+ integer , parameter :: SRF_TYPE_SNOW = 2
40+ integer , parameter :: SRF_TYPE_ICE = 3
41+ integer , parameter :: SRF_TYPE_OCEAN = 0
42+
3643 ! ICE_FRACTION constants
3744 ! In anvil/convective clouds
3845 real , parameter :: aT_ICE_ALL = 252.16
@@ -525,7 +532,8 @@ function ICE_FRACTION_SC (TEMP,CNV_FRACTION,SRF_TYPE) RESULT(ICEFRCT)
525532 ICEFRCT_C = MAX (ICEFRCT_C,0.00 )
526533 ICEFRCT_C = ICEFRCT_C** aICEFRPWR
527534 ! Sigmoidal functions like figure 6b/6c of Hu et al 2010, doi:10.1029/2009JD012384
528- if (SRF_TYPE >= 2.0 ) then
535+ select case (nint (SRF_TYPE))
536+ case (SRF_TYPE_SNOW, SRF_TYPE_ICE)
529537 ! Over snow (SRF_TYPE == 2.0) and ice (SRF_TYPE == 3.0)
530538 ICEFRCT_M = 0.00
531539 if ( TEMP <= iT_ICE_ALL ) then
@@ -536,8 +544,8 @@ function ICE_FRACTION_SC (TEMP,CNV_FRACTION,SRF_TYPE) RESULT(ICEFRCT)
536544 ICEFRCT_M = MIN (ICEFRCT_M,1.00 )
537545 ICEFRCT_M = MAX (ICEFRCT_M,0.00 )
538546 ICEFRCT_M = ICEFRCT_M** iICEFRPWR
539- else if (SRF_TYPE == 1.0 ) then
540- ! Over Land
547+ case (SRF_TYPE_LAND)
548+ ! Over Land (SRF_TYPE == 1)
541549 ICEFRCT_M = 0.00
542550 if ( TEMP <= lT_ICE_ALL ) then
543551 ICEFRCT_M = 1.000
@@ -547,8 +555,8 @@ function ICE_FRACTION_SC (TEMP,CNV_FRACTION,SRF_TYPE) RESULT(ICEFRCT)
547555 ICEFRCT_M = MIN (ICEFRCT_M,1.00 )
548556 ICEFRCT_M = MAX (ICEFRCT_M,0.00 )
549557 ICEFRCT_M = ICEFRCT_M** lICEFRPWR
550- else
551- ! Over Oceans
558+ case (SRF_TYPE_OCEAN)
559+ ! Over Oceans (SRF_TYPE == 0)
552560 ICEFRCT_M = 0.00
553561 if ( TEMP <= oT_ICE_ALL ) then
554562 ICEFRCT_M = 1.000
@@ -558,7 +566,11 @@ function ICE_FRACTION_SC (TEMP,CNV_FRACTION,SRF_TYPE) RESULT(ICEFRCT)
558566 ICEFRCT_M = MIN (ICEFRCT_M,1.00 )
559567 ICEFRCT_M = MAX (ICEFRCT_M,0.00 )
560568 ICEFRCT_M = ICEFRCT_M** oICEFRPWR
561- endif
569+ case default
570+ ! You should not be here
571+ print * , ' ICE_FRACTION_SC: Unknown SRF_TYPE = ' ,SRF_TYPE
572+ error stop
573+ end select
562574 ! Combine the Convective and MODIS functions
563575 ICEFRCT = ICEFRCT_M* (1.0 - CNV_FRACTION) + ICEFRCT_C* (CNV_FRACTION)
564576#endif
0 commit comments