Skip to content

Commit 56b0975

Browse files
Support HISTORY output of ASNOW alone from ENSAVG Gridcomp (#49)
2 parents 9d6d699 + ad4d2b4 commit 56b0975

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1919

2020
- Bug fix and improved efficiency in matlab script for generation of mwRTM_param.
2121
- Changed EXPDIR to absolute path for POSTPROC_HIST>0 option to work.
22+
- Support HISTORY output of ASNOW alone from ENSAVG Gridcomp.
2223

2324
### Removed
2425

GEOSens_GridComp/GEOS_EnsGridComp.F90

Lines changed: 17 additions & 11 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)
@@ -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)