213
214
215
216
217
218
219
220
221
222
223
224 integer, intent(out) :: rc
225
226 TYPE (ESMF_GridComp) :: driver
227
228
229
230 integer :: i, j
231
232 character (len=*), parameter :: MyFile = &
233 & __FILE__//", ESM_SetModelServices"
234
235 TYPE (ESMF_GridComp) :: model
236 TYPE (ESMF_Clock) :: clock
237 TYPE (ESMF_CplComp) :: connector
238
239
240
241
242
243 IF (esm_track) THEN
244 WRITE (trac,'(a,a,i0)') '==> Entering ESM_SetModelServices', &
245 & ', PET', petrank
246 FLUSH (trac)
247 END IF
248 rc=esmf_success
249
250
251
252
253
254 DO i=1,nmodels
255 IF (models(i)%IsActive) THEN
256 SELECT CASE (trim(clabel(i)))
257 CASE ('OCN')
258 CALL nuopc_driveraddcomp (driver, &
259 & trim(models(i)%name), &
260 & roms_setservices, &
261 & petlist=models(i)%PETlist(:), &
262 & comp=model, &
263 & rc=rc)
264 IF (esmf_logfounderror(rctocheck=rc, &
265 & msg=esmf_logerr_passthru, &
266 & line=__line__, &
267 & file=myfile)) THEN
268 RETURN
269 END IF
270# ifdef ATM_COUPLING
271 CASE ('ATM')
272 CALL nuopc_driveraddcomp (driver, &
273 & trim(models(i)%name), &
274 & atm_setservices, &
275 & petlist=models(i)%PETlist(:), &
276 & comp=model, &
277 & rc=rc)
278 IF (esmf_logfounderror(rctocheck=rc, &
279 & msg=esmf_logerr_passthru, &
280 & line=__line__, &
281 & file=myfile)) THEN
282 RETURN
283 END IF
284# endif
285# ifdef ICE_COUPLING
286 CASE ('ICE')
287 CALL nuopc_driveraddcomp (driver, &
288 & trim(models(i)%name), &
289 & ice_setservices, &
290 & petlist=models(i)%PETlist(:), &
291 & comp=model, &
292 & rc=rc)
293 IF (esmf_logfounderror(rctocheck=rc, &
294 & msg=esmf_logerr_passthru, &
295 & line=__line__, &
296 & file=myfile)) THEN
297 RETURN
298 END IF
299# endif
300# ifdef WAV_COUPLING
301 CASE ('WAV')
302 CALL nuopc_driveraddcomp (driver, &
303 & trim(models(i)%name), &
304 & wav_setservices, &
305 & petlist=models(i)%PETlist(:), &
306 & comp=model, &
307 & rc=rc)
308 IF (esmf_logfounderror(rctocheck=rc, &
309 & msg=esmf_logerr_passthru, &
310 & line=__line__, &
311 & file=myfile)) THEN
312 RETURN
313 END IF
314# endif
315# ifdef DATA_COUPLING
316 CASE ('DAT')
317 CALL nuopc_driveraddcomp (driver, &
318 & trim(models(i)%name), &
319 & data_setservices, &
320 & petlist=models(i)%PETlist(:), &
321 & comp=model, &
322 & rc=rc)
323 IF (esmf_logfounderror(rctocheck=rc, &
324 & msg=esmf_logerr_passthru, &
325 & line=__line__, &
326 & file=myfile)) THEN
327 RETURN
328 END IF
329# endif
330 END SELECT
331
332
333
334 IF (debuglevel.gt.0) THEN
335 CALL esmf_attributeset (model, &
336 & name="Verbosity", &
337 & value="high", &
338 & rc=rc)
339 IF (esmf_logfounderror(rctocheck=rc, &
340 & msg=esmf_logerr_passthru, &
341 & line=__line__, &
342 & file=myfile)) THEN
343 RETURN
344 END IF
345 END IF
346 END IF
347 END DO
348
349
350
351
352
353 DO i=1,nmodels
354 DO j=1,nmodels
355 IF (connectors(i,j)%IsActive) THEN
356 CALL nuopc_driveraddcomp (driver, &
357 & srccomplabel=trim(models(i)%name), &
358 & dstcomplabel=trim(models(j)%name), &
359 & compsetservicesroutine=coupler_setservices, &
360 & comp=connector, &
361 & rc=rc)
362 IF (esmf_logfounderror(rctocheck=rc, &
363 & msg=esmf_logerr_passthru, &
364 & line=__line__, &
365 & file=myfile)) THEN
366 RETURN
367 END IF
368 IF (debuglevel.gt.0) THEN
369 CALL esmf_attributeset (connector, &
370 & name="Verbosity", &
371 & value="high", &
372 & rc=rc)
373 IF (esmf_logfounderror(rctocheck=rc, &
374 & msg=esmf_logerr_passthru, &
375 & line=__line__, &
376 & file=myfile)) THEN
377 RETURN
378 END IF
379 END IF
380 END IF
381 END DO
382 END DO
383
384
385
386
387
388
389 IF (clockinfo(idriver)%StartTime.ne. &
390 & clockinfo(idriver)%RestartTime) THEN
391 clockinfo(idriver)%Restarted=.true.
392 clock=esmf_clockcreate(clockinfo(idriver)%TimeStep, &
393 & clockinfo(idriver)%RestartTime, &
394 & stoptime=clockinfo(idriver)%StopTime, &
395
396 & name='ESM_clock', &
397 & rc=rc)
398 IF (esmf_logfounderror(rctocheck=rc, &
399 & msg=esmf_logerr_passthru, &
400 & line=__line__, &
401 & file=myfile)) THEN
402 RETURN
403 END IF
404 ELSE
405 clockinfo(idriver)%Restarted=.false.
406 clock=esmf_clockcreate(clockinfo(idriver)%TimeStep, &
407 & clockinfo(idriver)%StartTime, &
408 & stoptime=clockinfo(idriver)%StopTime, &
409
410 & name='ESM_clock', &
411 & rc=rc)
412 IF (esmf_logfounderror(rctocheck=rc, &
413 & msg=esmf_logerr_passthru, &
414 & line=__line__, &
415 & file=myfile)) THEN
416 RETURN
417 END IF
418 END IF
419 clockinfo(idriver)%Clock=clock
420
421 CALL esmf_gridcompset (driver, &
422 & clock=clockinfo(idriver)%Clock, &
423 & rc=rc)
424 IF (esmf_logfounderror(rctocheck=rc, &
425 & msg=esmf_logerr_passthru, &
426 & line=__line__, &
427 & file=myfile)) THEN
428 RETURN
429 END IF
430
431 IF (esm_track) THEN
432 WRITE (trac,'(a,a,i0)') '<== Exiting ESM_SetModelServices', &
433 & ', PET', petrank
434 FLUSH (trac)
435 END IF
436
437 RETURN