Skip to content

Commit 5686f0a

Browse files
committed
Support empty or missing ESMX:Driver: section in ESMX run configuration.
1 parent 1c7415c commit 5686f0a

File tree

1 file changed

+49
-53
lines changed

1 file changed

+49
-53
lines changed

src/addon/ESMX/Driver/ESMX_Driver.F90

Lines changed: 49 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -145,40 +145,41 @@ subroutine SetModelServices(driver, rc)
145145
foundFlag=isFlag, rc=rc)
146146
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
147147
line=__LINE__, file=FILENAME)) return ! bail out
148-
if (.not.isFlag) then
149-
call ESMF_LogSetError(ESMF_RC_ARG_INCOMP, &
150-
msg="Must provide settings for: "//configKey(1)//":"//configKey(2), &
151-
line=__LINE__, file=FILENAME, rcToReturn=rc)
152-
return ! bail out
153-
endif
154-
155-
! Validate hconfigNode against ESMX/Driver controlled key vocabulary
156-
isFlag = ESMF_HConfigValidateMapKeys(hconfigNode, &
157-
vocabulary=["attributes ", & ! ESMX_Driver option
158-
"componentList", & ! ESMX_Driver option
159-
"runSequence " & ! ESMX_Driver option
160-
], badKey=string1, rc=rc)
161-
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
162-
line=__LINE__, file=FILENAME)) &
163-
call ESMF_Finalize(endflag=ESMF_END_ABORT)
164-
if (.not.isFlag) then
165-
call ESMF_LogSetError(ESMF_RC_ARG_WRONG, &
166-
msg="An invalid key was found in config under ESMX/Driver (maybe a typo?): "//string1, &
167-
line=__LINE__, file=FILENAME, rcToReturn=rc)
168-
call ESMF_Finalize(endflag=ESMF_END_ABORT)
148+
if (isFlag) then
149+
! Validate hconfigNode against ESMX/Driver controlled key vocabulary
150+
isFlag = ESMF_HConfigValidateMapKeys(hconfigNode, &
151+
vocabulary=["attributes ", & ! ESMX_Driver option
152+
"componentList", & ! ESMX_Driver option
153+
"runSequence " & ! ESMX_Driver option
154+
], badKey=string1, rc=rc)
155+
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
156+
line=__LINE__, file=FILENAME)) &
157+
call ESMF_Finalize(endflag=ESMF_END_ABORT)
158+
if (.not.isFlag) then
159+
call ESMF_LogSetError(ESMF_RC_ARG_WRONG, &
160+
msg="An invalid key was found in config under ESMX/Driver (maybe a typo?): "//string1, &
161+
line=__LINE__, file=FILENAME, rcToReturn=rc)
162+
call ESMF_Finalize(endflag=ESMF_END_ABORT)
163+
endif
164+
! Ingest the generic component label list
165+
isFlag = ESMF_HConfigIsSequence(hconfigNode, keyString="componentList", &
166+
rc=rc)
167+
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
168+
line=__LINE__, file=FILENAME)) return ! bail out
169+
if (isFlag) then
170+
componentList = ESMF_HConfigAsStringSeq(hconfigNode, stringLen=32, &
171+
keyString="componentList", rc=rc)
172+
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
173+
line=__LINE__, file=FILENAME)) return ! bail out
174+
endif
175+
call ESMF_HConfigDestroy(hconfigNode, rc=rc)
176+
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
177+
line=__LINE__, file=FILENAME)) return ! bail out
169178
endif
170179

171-
! Ingest the generic component label list
172-
componentList = ESMF_HConfigAsStringSeq(hconfigNode, stringLen=32, &
173-
keyString="componentList", rc=rc)
174-
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
175-
line=__LINE__, file=FILENAME)) return ! bail out
176-
call ESMF_HConfigDestroy(hconfigNode, rc=rc)
177-
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
178-
line=__LINE__, file=FILENAME)) return ! bail out
179-
180180
! Determine componentCount
181-
componentCount = size(componentList)
181+
componentCount = 0 ! no components for unallocated componentList
182+
if (allocated(componentList)) componentCount = size(componentList)
182183

183184
! Setup CompDef structure
184185
allocate(CompDef(componentDefCount))
@@ -388,36 +389,31 @@ subroutine SetRunSequence(driver, rc)
388389
foundFlag=isFlag, rc=rc)
389390
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
390391
line=__LINE__, file=FILENAME)) return ! bail out
391-
if (.not.isFlag) then
392-
call ESMF_LogSetError(ESMF_RC_ARG_INCOMP, &
393-
msg="Must provide settings for: "//configKey(1)//":"//configKey(2), &
394-
line=__LINE__, file=FILENAME, rcToReturn=rc)
395-
return ! bail out
396-
endif
397-
398-
isFlag = ESMF_HConfigIsDefined(hconfigNode, keyString="runSequence", &
399-
rc=rc)
400-
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
401-
line=__LINE__, file=FILENAME)) return ! bail out
402392
if (isFlag) then
403-
hconfig = ESMF_HConfigCreateAt(hconfigNode, keyString="runSequence", &
393+
isFlag = ESMF_HConfigIsDefined(hconfigNode, keyString="runSequence", &
404394
rc=rc)
405395
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
406396
line=__LINE__, file=FILENAME)) return ! bail out
407-
call NUOPC_DriverIngestRunSequence(driver, hconfig, &
408-
autoAddConnectors=.true., rc=rc)
409-
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
410-
line=__LINE__, file=FILENAME)) return ! bail out
411-
call ESMF_HConfigDestroy(hconfig, rc=rc)
397+
if (isFlag) then
398+
hconfig = ESMF_HConfigCreateAt(hconfigNode, keyString="runSequence", &
399+
rc=rc)
400+
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
401+
line=__LINE__, file=FILENAME)) return ! bail out
402+
call NUOPC_DriverIngestRunSequence(driver, hconfig, &
403+
autoAddConnectors=.true., rc=rc)
404+
if (ESMF_LogFoundError(rcToCheck=rc, &
405+
msg="Unable to ingest RunSequence!", &
406+
line=__LINE__, file=FILENAME)) return ! bail out
407+
call ESMF_HConfigDestroy(hconfig, rc=rc)
408+
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
409+
line=__LINE__, file=FILENAME)) return ! bail out
410+
endif
411+
! clean-up
412+
call ESMF_HConfigDestroy(hconfigNode, rc=rc)
412413
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
413414
line=__LINE__, file=FILENAME)) return ! bail out
414415
endif
415416

416-
! clean-up
417-
call ESMF_HConfigDestroy(hconfigNode, rc=rc)
418-
if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, &
419-
line=__LINE__, file=FILENAME)) return ! bail out
420-
421417
end subroutine SetRunSequence
422418

423419
!-----------------------------------------------------------------------------

0 commit comments

Comments
 (0)