Skip to content

Commit 0c5bf7c

Browse files
committed
distribute forces
1 parent 54304cd commit 0c5bf7c

File tree

2 files changed

+288
-136
lines changed

2 files changed

+288
-136
lines changed

GEOS_LdasGridComp.F90

Lines changed: 76 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ module GEOS_LdasGridCompMod
6161
logical :: land_assim
6262
logical :: mwRTM
6363
logical :: ensemble_forcing ! switch between deterministic and ensemble forcing
64-
64+
logical :: with_landice
6565
contains
6666

6767
!BOP
@@ -87,7 +87,7 @@ subroutine SetServices(gc, rc)
8787
character(len=ESMF_MAXSTR) :: Iam
8888
character(len=ESMF_MAXSTR) :: comp_name
8989
character(len=ESMF_MAXSTR) :: ensid_string,childname
90-
character(len=ESMF_MAXSTR) :: LAND_ASSIM_STR, mwRTM_file, ENS_FORCING_STR
90+
character(len=ESMF_MAXSTR) :: LAND_ASSIM_STR, mwRTM_file, ENS_FORCING_STR, WITH_LANDICE_STR
9191
integer :: ens_id_width
9292
! Local variables
9393
type(T_TILECOORD_STATE), pointer :: tcinternal
@@ -96,7 +96,7 @@ subroutine SetServices(gc, rc)
9696
type(ESMF_Config) :: CF
9797
integer :: LSM_CHOICE
9898
integer :: FIRST_ENS_ID
99-
99+
100100
! Begin...
101101

102102
! Get my name and setup traceback handle
@@ -158,6 +158,12 @@ subroutine SetServices(gc, rc)
158158
VERIFY_(STATUS)
159159
land_assim = (trim(LAND_ASSIM_STR) /= 'NO')
160160

161+
call MAPL_GetResource ( MAPL, WITH_LANDICE_STR, Label="WITH_LANDICE:", DEFAULT="NO", RC=STATUS)
162+
VERIFY_(STATUS)
163+
WITH_LANDICE_STR = ESMF_UtilStringUpperCase(WITH_LANDICE_STR, rc=STATUS)
164+
VERIFY_(STATUS)
165+
with_landice = (trim(WITH_LANDICE_STR) /= 'NO')
166+
161167
call MAPL_GetResource ( MAPL, mwRTM_file, Label="LANDASSIM_INTERNAL_RESTART_FILE:", DEFAULT='', RC=STATUS)
162168
VERIFY_(STATUS)
163169
mwRTM = ( len_trim(mwRTM_file) /= 0 )
@@ -174,7 +180,7 @@ subroutine SetServices(gc, rc)
174180
endif
175181

176182
allocate(LAND(NUM_ENSEMBLE),LANDPERT(NUM_ENSEMBLE))
177-
allocate(LANDICE(NUM_ENSEMBLE))
183+
if (with_landice) allocate(LANDICE(NUM_ENSEMBLE))
178184

179185
! ens_id_with = 2 + number of digits = total number of chars in ensid_string ("_eXXXX")
180186
!
@@ -216,9 +222,11 @@ subroutine SetServices(gc, rc)
216222
LAND(i) = MAPL_AddChild(gc, name=childname, ss=LandSetServices, rc=status)
217223
VERIFY_(status)
218224

219-
childname='LANDICE'//trim(ensid_string)
220-
LANDICE(i) = MAPL_AddChild(gc, name=childname, ss=LandiceSetServices, rc=status)
221-
VERIFY_(status)
225+
if (with_landice) then
226+
childname='LANDICE'//trim(ensid_string)
227+
LANDICE(i) = MAPL_AddChild(gc, name=childname, ss=LandiceSetServices, rc=status)
228+
VERIFY_(status)
229+
endif
222230
enddo
223231

224232
ENSAVG = MAPL_AddChild(gc, name='ENSAVG', ss=EnsSetServices, rc=status)
@@ -231,19 +239,8 @@ subroutine SetServices(gc, rc)
231239

232240
! Connections
233241
do i=1,NUM_ENSEMBLE
234-
! -METFORCE-feeds-LANDPERT's-imports-
235242
k = 1
236243
if ( ensemble_forcing ) k = i
237-
call MAPL_AddConnectivity( &
238-
gc, &
239-
SHORT_NAME = ['Tair ', 'Qair ', 'Psurf ', 'Rainf_C', 'Rainf ', &
240-
'Snowf ', 'LWdown ', 'SWdown ', 'PARdrct', 'PARdffs', &
241-
'Wind ', 'RefH '], &
242-
SRC_ID = METFORCE(k), &
243-
DST_ID = LANDPERT(i), &
244-
rc = status &
245-
)
246-
VERIFY_(status)
247244
! -LANDPERT-feeds-LAND's-imports-
248245
call MAPL_AddConnectivity( &
249246
gc, &
@@ -262,57 +259,6 @@ subroutine SetServices(gc, rc)
262259
)
263260
VERIFY_(status)
264261

265-
! -LANDPERT-feeds-LANDICE's-imports-
266-
call MAPL_AddConnectivity( &
267-
gc, &
268-
SRC_NAME = ['TApert ', 'QApert ', 'UUpert ', &
269-
'UWINDLMTILEpert', 'VWINDLMTILEpert', 'PCUpert ', &
270-
'PLSpert ', 'SNOpert ', 'DRPARpert ', &
271-
'DFPARpert ', 'DRNIRpert ', 'DFNIRpert ', &
272-
'DRUVRpert ', 'DFUVRpert ', 'LWDNSRFpert '], &
273-
SRC_ID = LANDPERT(i), &
274-
DST_NAME = ['TA ', 'QA ', 'UU ', 'UWINDLMTILE',&
275-
'VWINDLMTILE', 'PCU ', 'PLS ', 'SNO ',&
276-
'DRPAR ', 'DFPAR ', 'DRNIR ', 'DFNIR ',&
277-
'DRUVR ', 'DFUVR ', 'LWDNSRF '], &
278-
DST_ID = LANDICE(i), &
279-
rc = status &
280-
)
281-
282-
! -METFORCE-feeds-LAND's-imports-
283-
call MAPL_AddConnectivity( &
284-
gc, &
285-
SRC_NAME = ['Psurf', 'RefH ', &
286-
'DUDP ', 'DUSV ', 'DUWT ', 'DUSD ', 'BCDP ', 'BCSV ', &
287-
'BCWT ', 'BCSD ', 'OCDP ', 'OCSV ', 'OCWT ', 'OCSD ', &
288-
'SUDP ', 'SUSV ', 'SUWT ', 'SUSD ', 'SSDP ', 'SSSV ' ], &
289-
SRC_ID = METFORCE(k), &
290-
DST_NAME = ['PS ', 'DZ ', &
291-
'DUDP', 'DUSV', 'DUWT', 'DUSD', 'BCDP', 'BCSV', &
292-
'BCWT', 'BCSD', 'OCDP', 'OCSV', 'OCWT', 'OCSD', &
293-
'SUDP', 'SUSV', 'SUWT', 'SUSD', 'SSDP', 'SSSV' ], &
294-
DST_ID = LAND(i), &
295-
rc = status &
296-
)
297-
VERIFY_(status)
298-
299-
! -METFORCE-feeds-LANDICE's-imports-
300-
call MAPL_AddConnectivity( &
301-
gc, &
302-
SRC_NAME = ['Psurf', 'RefH ', &
303-
'DUDP ', 'DUSV ', 'DUWT ', 'DUSD ', 'BCDP ', 'BCSV ', &
304-
'BCWT ', 'BCSD ', 'OCDP ', 'OCSV ', 'OCWT ', 'OCSD ', &
305-
'SUDP ', 'SUSV ', 'SUWT ', 'SUSD ', 'SSDP ', 'SSSV ' ], &
306-
SRC_ID = METFORCE(k), &
307-
DST_NAME = ['PS ', 'DZ ', &
308-
'DUDP', 'DUSV', 'DUWT', 'DUSD', 'BCDP', 'BCSV', &
309-
'BCWT', 'BCSD', 'OCDP', 'OCSV', 'OCWT', 'OCSD', &
310-
'SUDP', 'SUSV', 'SUWT', 'SUSD', 'SSDP', 'SSSV' ], &
311-
DST_ID = LANDICE(i), &
312-
rc = status &
313-
)
314-
VERIFY_(status)
315-
316262
! -LAND-feeds-LANDPERT's-imports-
317263
call MAPL_AddConnectivity( &
318264
gc, &
@@ -411,6 +357,7 @@ subroutine Initialize(gc, import, export, clock, rc)
411357
type(MAPL_LocStream) :: surf_locstream
412358
type(MAPL_LocStream) :: land_locstream
413359
type(MAPL_LocStream) :: landice_locstream
360+
type(MAPL_LocStream) :: force_locstream
414361
type(MAPL_MetaComp), pointer :: MAPL=>null() ! GC's MAPL obj
415362
type(MAPL_MetaComp), pointer :: CHILD_MAPL=>null() ! Child's MAPL obj
416363

@@ -426,7 +373,7 @@ subroutine Initialize(gc, import, export, clock, rc)
426373
character(len=ESMF_MAXSTR) :: LAND_PARAMS
427374
character(len=ESMF_MAXSTR) :: grid_type
428375

429-
integer :: total_nt,land_nt_local,i,j
376+
integer :: total_nt, land_nt_local, i, j
430377
real, pointer :: LandTileLats(:)
431378
real, pointer :: LandTileLons(:)
432379
integer, pointer :: local_id(:)
@@ -614,15 +561,25 @@ subroutine Initialize(gc, import, export, clock, rc)
614561
)
615562
VERIFY_(status)
616563

617-
call MAPL_LocStreamCreate( &
618-
landice_locstream, &
619-
surf_locstream, &
620-
name=gcnames(LANDICE(1)), &
621-
mask=[MAPL_LANDICE], &
622-
rc=status &
564+
if (with_landice) then
565+
call MAPL_LocStreamCreate( &
566+
force_locstream, &
567+
surf_locstream, &
568+
name=gcnames(METFORCE(1)), &
569+
mask=[MAPL_LAND, MAPL_LANDICE], &
570+
rc=status &
623571
)
624-
VERIFY_(status)
572+
VERIFY_(status)
625573

574+
call MAPL_LocStreamCreate( &
575+
landice_locstream, &
576+
surf_locstream, &
577+
name=gcnames(LANDICE(1)), &
578+
mask=[MAPL_LANDICE], &
579+
rc=status &
580+
)
581+
VERIFY_(status)
582+
endif
626583

627584
call MAPL_TimerOff(MAPL, "-LocStreamCreate")
628585
! Convert LAND's LocStream to LDAS' tile_coord and save it in the GridComp
@@ -760,10 +717,14 @@ subroutine Initialize(gc, import, export, clock, rc)
760717
do i = 1, NUM_ENSEMBLE
761718
call MAPL_GetObjectFromGC(gcs(METFORCE(i)), CHILD_MAPL, rc=status)
762719
VERIFY_(status) ! CHILD = METFORCE
763-
call MAPL_Set(CHILD_MAPL, LocStream=land_locstream, rc=status)
764-
VERIFY_(status)
765-
call ESMF_UserCompSetInternalState(gcs(METFORCE(i)), 'TILE_COORD', tcwrap, status)
766-
VERIFY_(status)
720+
if ( with_landice) then
721+
call MAPL_Set(CHILD_MAPL, LocStream=force_locstream, rc=status)
722+
VERIFY_(status)
723+
else
724+
call MAPL_Set(CHILD_MAPL, LocStream=land_locstream, rc=status)
725+
VERIFY_(status)
726+
endif
727+
767728
! exit after i=1 if using deterministic forcing
768729
if (.not. ensemble_forcing) exit
769730
enddo
@@ -779,10 +740,12 @@ subroutine Initialize(gc, import, export, clock, rc)
779740
call MAPL_Set(CHILD_MAPL, LocStream=land_locstream, rc=status)
780741
VERIFY_(status)
781742

782-
call MAPL_GetObjectFromGC(gcs(LANDICE(i)), CHILD_MAPL, rc=status)
783-
VERIFY_(status)
784-
call MAPL_Set(CHILD_MAPL, LocStream=landice_locstream, rc=status)
785-
VERIFY_(status)
743+
if (with_landice) then
744+
call MAPL_GetObjectFromGC(gcs(LANDICE(i)), CHILD_MAPL, rc=status)
745+
VERIFY_(status)
746+
call MAPL_Set(CHILD_MAPL, LocStream=landice_locstream, rc=status)
747+
VERIFY_(status)
748+
endif
786749

787750
call MAPL_GetObjectFromGC(gcs(LANDPERT(i)), CHILD_MAPL, rc=status)
788751
VERIFY_(status) ! CHILD = LANDPERT
@@ -792,8 +755,6 @@ subroutine Initialize(gc, import, export, clock, rc)
792755
! Add LAND's tile_coord to children's GridComps
793756
call ESMF_UserCompSetInternalState(gcs(LAND(i)), 'TILE_COORD', tcwrap, status)
794757
VERIFY_(status)
795-
call ESMF_UserCompSetInternalState(gcs(LANDICE(i)), 'TILE_COORD', tcwrap, status)
796-
VERIFY_(status)
797758
call ESMF_UserCompSetInternalState(gcs(LANDPERT(i)), 'TILE_COORD', tcwrap, status)
798759
VERIFY_(status)
799760
enddo
@@ -886,7 +847,7 @@ subroutine Run(gc, import, export, clock, rc)
886847
type(MAPL_MetaComp), pointer :: MAPL
887848

888849
! Misc variables
889-
integer :: igc,i, ens_id, FIRST_ENS_ID, ens_id_width
850+
integer :: igc, i, ens_id, FIRST_ENS_ID, ens_id_width, k
890851
logical :: IAmRoot
891852
integer :: LSM_CHOICE
892853
type (ESMF_Field) :: field
@@ -957,13 +918,30 @@ subroutine Run(gc, import, export, clock, rc)
957918
do i = 1, NUM_ENSEMBLE
958919
igc = METFORCE(i)
959920
call MAPL_TimerOn(MAPL, gcnames(igc))
960-
call ESMF_GridCompRun(gcs(igc), importState=gim(igc), exportState=gex(igc), clock=clock, userRC=status)
921+
call ESMF_GridCompRun(gcs(igc), importState=gim(igc), exportState=gex(igc), clock=clock, phase=1, userRC=status)
961922
VERIFY_(status)
962923
call MAPL_TimerOff(MAPL, gcnames(igc))
963924
! exit after i=1 if using deterministic forcing
964925
if (.not. ensemble_forcing) exit
965926
enddo
966927

928+
! distribute force. ( export of focrce to the import of land, landpert and landice)
929+
do i = 1, NUM_ENSEMBLE
930+
k = 1
931+
if (ensemble_forcing) k = i
932+
igc = METFORCE(k)
933+
call MAPL_TimerOn(MAPL, gcnames(igc))
934+
935+
call ESMF_GridCompRun(gcs(igc), importState=gex(igc), exportState=gim(LAND(i)), clock=clock, phase=2, userRC=status)
936+
VERIFY_(status)
937+
call ESMF_GridCompRun(gcs(igc), importState=gex(igc), exportState=gim(LANDPERT(i)), clock=clock, phase=3, userRC=status)
938+
VERIFY_(status)
939+
if (with_landice) then
940+
call ESMF_GridCompRun(gcs(igc), importState=gex(igc), exportState=gim(LANDICE(i)), clock=clock, phase=4, userRC=status)
941+
VERIFY_(status)
942+
endif
943+
call MAPL_TimerOff(MAPL, gcnames(igc))
944+
enddo
967945

968946
do i = 1,NUM_ENSEMBLE
969947

@@ -991,15 +969,15 @@ subroutine Run(gc, import, export, clock, rc)
991969
VERIFY_(status)
992970
call MAPL_TimerOff(MAPL, gcnames(igc))
993971

994-
995-
igc = LANDICE(i)
996-
call MAPL_TimerOn(MAPL, gcnames(igc))
997-
call ESMF_GridCompRun(gcs(igc), importState=gim(igc), exportState=gex(igc), clock=clock, phase=1, userRC=status)
998-
VERIFY_(status)
999-
call ESMF_GridCompRun(gcs(igc), importState=gim(igc), exportState=gex(igc), clock=clock, phase=2, userRC=status)
1000-
VERIFY_(status)
1001-
call MAPL_TimerOff(MAPL, gcnames(igc))
1002-
972+
if (with_landice) then
973+
igc = LANDICE(i)
974+
call MAPL_TimerOn(MAPL, gcnames(igc))
975+
call ESMF_GridCompRun(gcs(igc), importState=gim(igc), exportState=gex(igc), clock=clock, phase=1, userRC=status)
976+
VERIFY_(status)
977+
call ESMF_GridCompRun(gcs(igc), importState=gim(igc), exportState=gex(igc), clock=clock, phase=2, userRC=status)
978+
VERIFY_(status)
979+
call MAPL_TimerOff(MAPL, gcnames(igc))
980+
endif
1003981

1004982
! ApplyPrognPert - moved: now before calculating ensemble average that is picked up by land analysis and HISTORY; reichle 28 May 2020
1005983
igc = LANDPERT(i)

0 commit comments

Comments
 (0)