@@ -2339,8 +2339,7 @@ subroutine Collect_land_ens(gc, import, export, clock, rc)
23392339 real , dimension (:),pointer :: TPUNST,TPUNST_enavg
23402340 real , dimension (:),pointer :: TPSAT,TPSAT_enavg
23412341 real , dimension (:),pointer :: TPWLT,TPWLT_enavg
2342- ! real, dimension(:),pointer :: ASNOW,ASNOW_enavg
2343- real , dimension (:),pointer :: ASNOW_enavg
2342+ real , dimension (:),pointer :: ASNOW,ASNOW_enavg
23442343 real , dimension (:),pointer :: SHSNOW,SHSNOW_enavg
23452344 real , dimension (:),pointer :: AVETSNOW,AVETSNOW_enavg
23462345 real , dimension (:),pointer :: FRSAT,FRSAT_enavg
@@ -2633,9 +2632,8 @@ subroutine Collect_land_ens(gc, import, export, clock, rc)
26332632 VERIFY_(status)
26342633 call MAPL_GetPointer(import, FRWLT, ' FRWLT' ,rc= status)
26352634 VERIFY_(status)
2636- ! for offline model , there is no 'ASNOW', recompute
2637- ! call MAPL_GetPointer(import, ASNOW, 'ASNOW' ,rc=status)
2638- ! VERIFY_(status)
2635+ call MAPL_GetPointer(import, ASNOW, ' ASNOW' ,rc= status)
2636+ VERIFY_(status)
26392637 call MAPL_GetPointer(import, SNOWMASS, ' SNOWMASS' ,rc= status)
26402638 VERIFY_(status)
26412639 call MAPL_GetPointer(import, SNOWDP, ' SNOWDP' ,rc= status)
@@ -3380,8 +3378,8 @@ subroutine Collect_land_ens(gc, import, export, clock, rc)
33803378 TPSAT_enavg = TPSAT_enavg + TPSAT
33813379 if (associated (TPWLT_enavg) .and. associated (TPWLT)) &
33823380 TPWLT_enavg = TPWLT_enavg + TPWLT
3383- ! if(associated(ASNOW_enavg) .and. associated(ASNOW)) &
3384- ! ASNOW_enavg = ASNOW_enavg + ASNOW
3381+ if (associated (ASNOW_enavg) .and. associated (ASNOW)) &
3382+ ASNOW_enavg = ASNOW_enavg + ASNOW
33853383 if (associated (SHSNOW_enavg) .and. associated (SHSNOW)) &
33863384 SHSNOW_enavg = SHSNOW_enavg + SHSNOW
33873385 if (associated (AVETSNOW_enavg) .and. associated (AVETSNOW)) &
@@ -3680,10 +3678,18 @@ subroutine Collect_land_ens(gc, import, export, clock, rc)
36803678 if (associated (TPWLT_enavg)) TPWLT_enavg = TPWLT_enavg/ NUM_ENSEMBLE
36813679 if (associated (SHSNOW_enavg)) SHSNOW_enavg = SHSNOW_enavg/ NUM_ENSEMBLE
36823680 if (associated (AVETSNOW_enavg)) AVETSNOW_enavg = AVETSNOW_enavg/ NUM_ENSEMBLE
3683- if (associated (FRSAT_enavg)) FRSAT_enavg = FRSAT_enavg/ NUM_ENSEMBLE
3684- if (associated (FRUST_enavg)) FRUST_enavg = FRUST_enavg/ NUM_ENSEMBLE
3685- if (associated (FRWLT_enavg)) FRWLT_enavg = FRWLT_enavg/ NUM_ENSEMBLE
3686- if (associated (ASNOW_enavg)) ASNOW_enavg = max (min (1.0 - (FRSAT_enavg+ FRUST_enavg+ FRWLT_enavg),1.0 ),0.0 )
3681+ if (associated (FRSAT_enavg)) FRSAT_enavg = max (min (FRSAT_enavg/ NUM_ENSEMBLE,1.0 ),0.0 )
3682+ if (associated (FRUST_enavg)) FRUST_enavg = max (min (FRUST_enavg/ NUM_ENSEMBLE,1.0 ),0.0 )
3683+ if (associated (FRWLT_enavg)) FRWLT_enavg = max (min (FRWLT_enavg/ NUM_ENSEMBLE,1.0 ),0.0 )
3684+ if (associated (ASNOW_enavg)) then
3685+ ASNOW_enavg = max (min (1.0 ,ASNOW_enavg/ NUM_ENSEMBLE),0.0 )
3686+ ! If all four area fractions are calculated, try to make them sum up to 1.
3687+ ! Because the [0,1] range is also enforced, the following simple approach does not always
3688+ ! work perfectly, but it should be good enough. A more robust approach would require
3689+ ! many more if statements. -reichle, 5 Jun 2024
3690+ if (associated (FRSAT_enavg) .and. associated (FRUST_enavg) .and. associated (FRWLT_enavg)) &
3691+ ASNOW_enavg = max (min (1.0 - (FRSAT_enavg+ FRUST_enavg+ FRWLT_enavg),1.0 ),0.0 )
3692+ end if
36873693 if (associated (SNOWMASS_enavg)) SNOWMASS_enavg = SNOWMASS_enavg/ NUM_ENSEMBLE
36883694 if (associated (SNOWDP_enavg)) SNOWDP_enavg = SNOWDP_enavg/ NUM_ENSEMBLE
36893695 if (associated (WET1_enavg)) WET1_enavg = WET1_enavg/ NUM_ENSEMBLE
0 commit comments