@@ -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
6565contains
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