Skip to content

Commit de87f79

Browse files
committed
make output of only ASNOW without requiring changes in GEOSgcm_GridComp repo (GEOS_EnsGridComp.F90)
1 parent b5f355c commit de87f79

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

GEOSens_GridComp/GEOS_EnsGridComp.F90

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
@@ -2924,11 +2922,11 @@ subroutine Collect_land_ens(gc, import, export, clock, rc)
29242922
VERIFY_(status)
29252923
call MAPL_GetPointer(export, AVETSNOW_enavg, 'AVETSNOW' ,rc=status)
29262924
VERIFY_(status)
2927-
call MAPL_GetPointer(export, FRSAT_enavg, 'FRSAT' , alloc=.true., rc=status) ! always allocate to support ASNOW_enavg calc below
2925+
call MAPL_GetPointer(export, FRSAT_enavg, 'FRSAT' ,rc=status)
29282926
VERIFY_(status)
2929-
call MAPL_GetPointer(export, FRUST_enavg, 'FRUST' , alloc=.true., rc=status) ! always allocate to support ASNOW_enavg calc below
2927+
call MAPL_GetPointer(export, FRUST_enavg, 'FRUST' ,rc=status)
29302928
VERIFY_(status)
2931-
call MAPL_GetPointer(export, FRWLT_enavg, 'FRWLT' , alloc=.true., rc=status) ! always allocate to support ASNOW_enavg calc below
2929+
call MAPL_GetPointer(export, FRWLT_enavg, 'FRWLT' ,rc=status)
29322930
VERIFY_(status)
29332931
call MAPL_GetPointer(export, SNOWMASS_enavg, 'SNOWMASS' ,rc=status)
29342932
VERIFY_(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

Comments
 (0)