201
202
203
204
205
206
207
208
209
210
211
212 integer, intent(out) :: rc
213
214 TYPE (ESMF_CplComp) :: coupler
215
216
217
218 logical :: rh1Exist, rh2Exist
219
220 integer :: i, ic, j, localPET, PETcount, MyComm, NcplSets
221 integer :: iSrc, iDst, idSrc, idDst, grSrc, grDst
222 integer :: etSrc, etDst, itSrc, itDst
223 integer :: srcCount, dstCount, itemCount, srcTerm
224
225 integer (i4b) :: srcMaskVal, dstMaskVal
226 integer (i4b) :: LandValue(1), SeaValue(1)
227
228 integer (i4b), allocatable, dimension(:,:) :: tlw, tuw
229
230 character (len=*), parameter :: MyFile = &
231 & __FILE__//", Coupler_ComputeRH"
232
233 character (ESMF_MAXSTR) :: msgString
234 character (ESMF_MAXSTR) :: Cname, Dname, Fname, Rname, Sname
235
236 character (ESMF_MAXSTR), pointer :: CplSetList(:) => null()
237 character (ESMF_MAXSTR), pointer :: dstList(:) => null()
238 character (ESMF_MAXSTR), pointer :: srcList(:) => null()
239
240 TYPE (ESMF_ExtrapMethod_Flag) :: extrapMethod
241 TYPE (ESMF_Field) :: dstField, srcField, tmpField
242 TYPE (ESMF_FieldBundle) :: dstFields, srcFields
243 TYPE (ESMF_FieldStatus_Flag) :: FieldStatus
244 TYPE (ESMF_RegridMethod_Flag) :: regridMethod
245 TYPE (ESMF_RouteHandle) :: routeHandle
246 TYPE (ESMF_State) :: state
247 TYPE (ESMF_UnmappedAction_Flag) :: unmap
248 TYPE (ESMF_VM) :: vm
249
250
251
252
253
254 rc=esmf_success
255
256
257
258
259
260
261
262 CALL esmf_cplcompget (coupler, &
263 & name=cname, &
264 & vm=vm, &
265 & rc=rc)
266 IF (esmf_logfounderror(rctocheck=rc, &
267 & msg=esmf_logerr_passthru, &
268 & line=__line__, &
269 & file=myfile)) THEN
270 RETURN
271 END IF
272
273 IF (esm_track) THEN
274 WRITE (trac,'(a,a,i0)') '==> Entering Coupler_ComputeRH for ' &
275 & // trim(cname), ', PET', petrank
276 FLUSH (trac)
277 END IF
278
279
280
281 CALL esmf_vmget (vm, &
282 & localpet=localpet, &
283 & petcount=petcount, &
284 & mpicommunicator=mycomm, &
285 & rc=rc)
286 IF (esmf_logfounderror(rctocheck=rc, &
287 & msg=esmf_logerr_passthru, &
288 & line=__line__, &
289 & file=myfile)) THEN
290 RETURN
291 END IF
292
293
294
295 DO i=1,nmodels
296 DO j=1,nmodels
297 IF ((connectors(i,j)%IsActive).and. &
298 & (trim(connectors(i,j)%name).eq.trim(cname))) THEN
299 isrc=i
300 idst=j
301 END if
302 END DO
303 END DO
304
305
306
307
308
309 landvalue(1)=models(isrc)%LandValue
310 CALL esmf_vmbroadcast (vm, &
311 & bcstdata=landvalue, &
312 & count=1, &
313 & rootpet=0, &
314 & rc=rc)
315 IF (esmf_logfounderror(rctocheck=rc, &
316 & msg=esmf_logerr_passthru, &
317 & line=__line__, &
318 & file=myfile)) THEN
319 RETURN
320 END IF
321 models(isrc)%LandValue=landvalue(1)
322
323 seavalue(1)=models(isrc)%SeaValue
324 CALL esmf_vmbroadcast (vm, &
325 & bcstdata=seavalue, &
326 & count=1, &
327 & rootpet=0, &
328 & rc=rc)
329 IF (esmf_logfounderror(rctocheck=rc, &
330 & msg=esmf_logerr_passthru, &
331 & line=__line__, &
332 & file=myfile)) THEN
333 RETURN
334 END IF
335 models(isrc)%SeaValue=seavalue(1)
336
337 landvalue(1)=models(idst)%LandValue
338 CALL esmf_vmbroadcast (vm, &
339 & bcstdata=landvalue, &
340 & count=1, &
341 & rootpet=0, &
342 & rc=rc)
343 IF (esmf_logfounderror(rctocheck=rc, &
344 & msg=esmf_logerr_passthru, &
345 & line=__line__, &
346 & file=myfile)) THEN
347 RETURN
348 END IF
349 models(idst)%LandValue=landvalue(1)
350
351 seavalue(1)=models(idst)%SeaValue
352 CALL esmf_vmbroadcast (vm, &
353 & bcstdata=seavalue, &
354 & count=1, &
355 & rootpet=0, &
356 & rc=rc)
357 IF (esmf_logfounderror(rctocheck=rc, &
358 & msg=esmf_logerr_passthru, &
359 & line=__line__, &
360 & file=myfile)) THEN
361 RETURN
362 END IF
363 models(idst)%SeaValue=seavalue(1)
364
365
366
367
368
369
370 SELECT CASE (connectors(isrc,idst)%MaskInteraction)
371 CASE (overocean)
372 srcmaskval=models(isrc)%LandValue
373 dstmaskval=models(idst)%LandValue
374 CASE (overland)
375 srcmaskval=models(isrc)%SeaValue
376 dstmaskval=models(idst)%SeaValue
377 END SELECT
378
379
380
381
382
383 IF ( associated(cplsetlist) ) nullify (cplsetlist)
384 CALL nuopc_connectorget (coupler, &
385 & cplsetlist=cplsetlist, &
386 & rc=rc)
387 IF (esmf_logfounderror(rctocheck=rc, &
388 & msg=esmf_logerr_passthru, &
389 & line=__line__, &
390 & file=myfile)) THEN
391 RETURN
392 END IF
393 ncplsets=SIZE(cplsetlist)
394
395
396
397
398
399 cplset_loop : DO ic=1,ncplsets
400
401
402
403 CALL nuopc_connectorget (coupler, &
404 & srcfields=srcfields, &
405 & dstfields=dstfields, &
406 & state=state, &
407 & cplset=cplsetlist(ic), &
408 & rc=rc)
409 IF (esmf_logfounderror(rctocheck=rc, &
410 & msg=esmf_logerr_passthru, &
411 & line=__line__, &
412 & file=myfile)) THEN
413 RETURN
414 END IF
415
416 CALL esmf_fieldbundleget (srcfields, &
417 & fieldcount=srccount, &
418 & rc=rc)
419 IF (esmf_logfounderror(rctocheck=rc, &
420 & msg=esmf_logerr_passthru, &
421 & line=__line__, &
422 & file=myfile)) THEN
423 RETURN
424 END IF
425
426 CALL esmf_fieldbundleget (dstfields, &
427 & fieldcount=dstcount, &
428 & rc=rc)
429 IF (esmf_logfounderror(rctocheck=rc, &
430 & msg=esmf_logerr_passthru, &
431 & line=__line__, &
432 & file=myfile)) THEN
433 RETURN
434 END IF
435
436 IF ((debuglevel.gt.0).and.(localpet.eq.0)) THEN
437 WRITE (cplout,10) localpet, isrc, idst, &
438 & srcmaskval, dstmaskval, &
439 & trim(cplsetlist(ic)), &
440 & trim(connectors(isrc,idst)%name)
441 END IF
442
443
444
445
446
447 define : IF ((srccount.eq.dstcount).and.(dstcount.gt. 0)) THEN
448
449
450
451 allocate ( srclist(srccount) )
452 allocate ( dstlist(dstcount) )
453
454
455
456 CALL esmf_fieldbundleget (srcfields, &
457 & fieldnamelist=srclist, &
458 & rc=rc)
459 IF (esmf_logfounderror(rctocheck=rc, &
460 & msg=esmf_logerr_passthru, &
461 & line=__line__, &
462 & file=myfile)) THEN
463 RETURN
464 END IF
465
466 CALL esmf_fieldbundleget (dstfields, &
467 & fieldnamelist=dstlist, &
468 & rc=rc)
469 IF (esmf_logfounderror(rctocheck=rc, &
470 & msg=esmf_logerr_passthru, &
471 & line=__line__, &
472 & file=myfile)) THEN
473 RETURN
474 END IF
475
476
477
478
479
480 create : DO i=1,srccount
481
482
483
484 idsrc=field_index(models(isrc)%ExportField, srclist(i))
485 iddst=field_index(models(idst)%ImportField, dstlist(i))
486
487
488
489
490 fname=trim(models(isrc)%ExportField(idsrc)%short_name)
491
492
493
494 itsrc=models(isrc)%ExportField(idsrc)%itype
495 itdst=models(idst)%ImportField(iddst)%itype
496
497 IF (itsrc.NE.itdst) THEN
498 WRITE (msgstring,'(a)') trim(cname)// &
499 & ': SRC and DST field interpolation type does not match!'
500 CALL esmf_logwrite (trim(msgstring), esmf_logmsg_error)
501 RETURN
502 END IF
503
504
505
506 etsrc=models(isrc)%ExportField(idsrc)%etype
507 etdst=models(idst)%ImportField(iddst)%etype
508
509 IF (etsrc.NE.etdst) THEN
510 WRITE (msgstring,'(a)') trim(cname)// &
511 & ': SRC and DST field extrapolation type does not match!'
512 CALL esmf_logwrite (trim(msgstring), esmf_logmsg_error)
513 RETURN
514 END IF
515
516
517
518 grsrc=models(isrc)%ExportField(idsrc)%gtype
519 grdst=models(idst)%ImportField(iddst)%gtype
520
521
522
523 CALL esmf_fieldbundleget (srcfields, &
524 & trim(fname), &
525 & field=srcfield, &
526 & rc=rc)
527 IF (esmf_logfounderror(rctocheck=rc, &
528 & msg=esmf_logerr_passthru, &
529 & line=__line__, &
530 & file=myfile)) THEN
531 RETURN
532 END IF
533
534 CALL esmf_fieldget (srcfield, &
535 & status=fieldstatus, &
536 & rc=rc)
537 IF (esmf_logfounderror(rctocheck=rc, &
538 & msg=esmf_logerr_passthru, &
539 & line=__line__, &
540 & file=myfile)) THEN
541 RETURN
542 END IF
543
544 IF (fieldstatus.ne.esmf_fieldstatus_complete) THEN
545 rc=esmf_rc_obj_bad
546 IF (localpet.eq.0) THEN
547 IF (fieldstatus.eq.esmf_fieldstatus_empty) THEN
548 msgstring='ESMF_FIELDSTATUS_EMPTY'
549 ELSE IF (fieldstatus.eq.esmf_fieldstatus_gridset) THEN
550 msgstring='ESMF_FIELDSTATUS_GRIDSET'
551 END IF
552 WRITE (cplout,20) 'Source Field: ', trim(fname), &
553 & trim(msgstring)
554 END IF
555 IF (esmf_logfounderror(rctocheck=rc, &
556 & msg=esmf_logerr_passthru, &
557 & line=__line__, &
558 & file=myfile)) THEN
559 RETURN
560 END IF
561 END IF
562
563 IF (debuglevel.gt.1) THEN
564 CALL esmf_fieldprint (srcfield, rc=rc)
565 IF (esmf_logfounderror(rctocheck=rc, &
566 & msg=esmf_logerr_passthru, &
567 & line=__line__, &
568 & file=myfile)) THEN
569 RETURN
570 END IF
571 END IF
572
573
574
575 CALL esmf_fieldbundleget (dstfields, &
576 & trim(fname), &
577 & field=dstfield, &
578 & rc=rc)
579 IF (esmf_logfounderror(rctocheck=rc, &
580 & msg=esmf_logerr_passthru, &
581 & line=__line__, &
582 & file=myfile)) THEN
583 RETURN
584 END IF
585
586 CALL esmf_fieldget (dstfield, &
587 & status=fieldstatus, &
588 & rc=rc)
589 IF (esmf_logfounderror(rctocheck=rc, &
590 & msg=esmf_logerr_passthru, &
591 & line=__line__, &
592 & file=myfile)) THEN
593 RETURN
594 END IF
595
596 IF (fieldstatus.ne.esmf_fieldstatus_complete) THEN
597 rc=esmf_rc_obj_bad
598 IF (localpet.eq.0) THEN
599 IF (fieldstatus.eq.esmf_fieldstatus_empty) THEN
600 msgstring='ESMF_FIELDSTATUS_EMPTY'
601 ELSE IF (fieldstatus.eq.esmf_fieldstatus_gridset) THEN
602 msgstring='ESMF_FIELDSTATUS_GRIDSET'
603 END IF
604 WRITE (cplout,20) 'Destination Field: ', trim(fname), &
605 & trim(msgstring)
606 END IF
607 IF (esmf_logfounderror(rctocheck=rc, &
608 & msg=esmf_logerr_passthru, &
609 & line=__line__, &
610 & file=myfile)) THEN
611 RETURN
612 END IF
613 END IF
614
615 IF (debuglevel.gt.1) THEN
616 CALL esmf_fieldprint (dstfield, rc=rc)
617 IF (esmf_logfounderror(rctocheck=rc, &
618 & msg=esmf_logerr_passthru, &
619 & line=__line__, &
620 & file=myfile)) THEN
621 RETURN
622 END IF
623 END IF
624
625
626
627
628
629 querry : IF (etsrc.eq.e2steps) THEN
630
631
632
633
634
635
636
637 IF (isrc.eq.idata) THEN
638 rname='rh_'//trim(srclist(i))//'_'// &
639 & trim(gridtype(grsrc ))//'_'// &
640 & trim(gridtype(grdst ))//'_'// &
641 & trim(intrptype(ibilin))//'_'// &
642 & trim(extrptype(etsrc ))//'_'// &
643 & trim(cplsetlist(ic))//'_'// &
644 & trim(cname)
645 ELSE
646 rname='rh_'// &
647 & trim(gridtype(grsrc ))//'_'// &
648 & trim(gridtype(grdst ))//'_'// &
649 & trim(intrptype(ibilin))//'_'// &
650 & trim(extrptype(etsrc ))//'_'// &
651 & trim(cplsetlist(ic))//'_'// &
652 & trim(cname)
653 END IF
654
655 CALL esmf_stateget (state, &
656 & itemsearch=trim(rname), &
657 & itemcount=itemcount, &
658 & rc=rc)
659 IF (esmf_logfounderror(rctocheck=rc, &
660 & msg=esmf_logerr_passthru, &
661 & line=__line__, &
662 & file=myfile)) THEN
663 RETURN
664 END IF
665
666 IF (itemcount.le.0) THEN
667 rh1exist=.false.
668 ELSE
669 rh1exist=.true.
670 END IF
671 rh2exist=.false.
672
673
674
675 IF ((debuglevel.gt.0).and.(localpet.eq.0)) THEN
676 WRITE (cplout,30) trim(cplsetlist(ic)), trim(cname), &
677 & trim(models(isrc)%ExportField(idsrc)%short_name), &
678 & trim(gridtype(models(isrc)%ExportField(idsrc)%gtype)), &
679 & trim(models(idst)%ImportField(iddst)%short_name), &
680 & trim(gridtype(models(idst)%ImportField(iddst)%gtype)), &
681 & trim(intrptype(models(isrc)%ExportField(idsrc)%itype)), &
682 & rh1exist, rh2exist
683 FLUSH (cplout)
684 END IF
685
686
687
688 IF (.not.rh1exist) THEN
689 unmap=esmf_unmappedaction_ignore
690 regridmethod=esmf_regridmethod_bilinear
691
692 srcterm=0
693
694 CALL esmf_fieldregridstore (srcfield=srcfield, &
695 & dstfield=dstfield, &
696 & srcmaskvalues=(/srcmaskval/), &
697 & dstmaskvalues=(/dstmaskval/), &
698 & unmappedaction=unmap, &
699 & routehandle=routehandle, &
700 & regridmethod=regridmethod, &
701 & ignoredegenerate=.true., &
702 & srctermprocessing=srcterm, &
703 & rc=rc)
704 IF (esmf_logfounderror(rctocheck=rc, &
705 & msg=esmf_logerr_passthru, &
706 & line=__line__, &
707 & file=myfile)) THEN
708 RETURN
709 END IF
710
711
712
713 CALL esmf_routehandleset (routehandle, &
714 & name=trim(rname), &
715 & rc=rc)
716 IF (esmf_logfounderror(rctocheck=rc, &
717 & msg=esmf_logerr_passthru, &
718 & line=__line__, &
719 & file=myfile)) THEN
720 RETURN
721 END IF
722
723
724
725 CALL esmf_stateadd (state, &
726 & (/ routehandle /), &
727 & rc=rc)
728 IF (esmf_logfounderror(rctocheck=rc, &
729 & msg=esmf_logerr_passthru, &
730 & line=__line__, &
731 & file=myfile)) THEN
732 RETURN
733 END IF
734
735
736
737 IF ((debuglevel.gt.0).and.(localpet.eq.0)) THEN
738 WRITE (cplout,40) trim(rname)
739 FLUSH (cplout)
740 END IF
741 END IF
742
743
744
745
746
747
748 IF (isrc.eq.idata) THEN
749 rname='rh_'//trim(srclist(i))//'_'// &
750 & trim(gridtype(grsrc ))//'_'// &
751 & trim(gridtype(grdst ))//'_'// &
752 & trim(intrptype(instod))//'_'// &
753 & trim(extrptype(etsrc ))//'_'// &
754 & trim(cplsetlist(ic))//'_'// &
755 & trim(cname)
756 ELSE
757 rname='rh_'// &
758 & trim(gridtype(grsrc ))//'_'// &
759 & trim(gridtype(grdst ))//'_'// &
760 & trim(intrptype(instod))//'_'// &
761 & trim(extrptype(etsrc ))//'_'// &
762 & trim(cplsetlist(ic))//'_'// &
763 & trim(cname)
764 END IF
765
766 CALL esmf_stateget (state, &
767 & itemsearch=trim(rname), &
768 & itemcount=itemcount, &
769 & rc=rc)
770 IF (esmf_logfounderror(rctocheck=rc, &
771 & msg=esmf_logerr_passthru, &
772 & line=__line__, &
773 & file=myfile)) THEN
774 RETURN
775 END IF
776
777 IF (itemcount.le.0) THEN
778 rh2exist=.false.
779 ELSE
780 rh2exist=.true.
781 END IF
782
783
784
785 IF (.not.rh2exist) THEN
786 tmpfield=coupler_fieldcreate(dstfield, 'temp_field', &
787 & 1.0_dp, -1_i4b, rc)
788
789
790
791 CALL coupler_findunmapped (srcfield, dstfield, &
792 & srcmaskval, dstmaskval, &
793 & isrc, idst, rc)
794 IF (esmf_logfounderror(rctocheck=rc, &
795 & msg=esmf_logerr_passthru, &
796 & line=__line__, &
797 & file=myfile)) THEN
798 RETURN
799 END IF
800
801
802
803 unmap=esmf_unmappedaction_ignore
804 regridmethod=esmf_regridmethod_nearest_stod
805
806 srcterm=0
807
808 CALL esmf_fieldregridstore (srcfield=tmpfield, &
809 & dstfield=dstfield, &
810 & srcmaskvalues=(/dstmaskval, &
811 & unmapped_mask/), &
812 & dstmaskvalues=(/dstmaskval, &
813 & mapped_mask/), &
814 & unmappedaction=unmap, &
815 & routehandle=routehandle, &
816 & regridmethod=regridmethod, &
817 & srctermprocessing=srcterm, &
818 & ignoredegenerate=.true., &
819 & rc=rc)
820 IF (esmf_logfounderror(rctocheck=rc, &
821 & msg=esmf_logerr_passthru, &
822 & line=__line__, &
823 & file=myfile)) THEN
824 RETURN
825 END IF
826
827
828
829 CALL esmf_routehandleset (routehandle, &
830 & name=trim(rname), &
831 & rc=rc)
832 IF (esmf_logfounderror(rctocheck=rc, &
833 & msg=esmf_logerr_passthru, &
834 & line=__line__, &
835 & file=myfile)) THEN
836 RETURN
837 END IF
838
839
840
841 CALL esmf_stateadd (state, &
842 & (/ routehandle /), &
843 & rc=rc)
844 IF (esmf_logfounderror(rctocheck=rc, &
845 & msg=esmf_logerr_passthru, &
846 & line=__line__, &
847 & file=myfile)) THEN
848 RETURN
849 END IF
850
851
852
853 CALL esmf_fielddestroy (tmpfield, rc=rc)
854 IF (esmf_logfounderror(rctocheck=rc, &
855 & msg=esmf_logerr_passthru, &
856 & line=__line__, &
857 & file=myfile)) THEN
858 RETURN
859 END IF
860
861
862
863 IF ((debuglevel.gt.0).and.(localpet.eq.0)) THEN
864 WRITE (cplout,40) trim(rname)
865 FLUSH (cplout)
866 END IF
867 END IF
868
869
870
871
872
873
874 ELSE
875
876 IF (isrc.eq.idata) THEN
877 rname='rh_'//trim(srclist(i))//'_'// &
878 & trim(gridtype(grsrc))//'_'// &
879 & trim(gridtype(grdst))//'_'// &
880 & trim(intrptype(itsrc))//'_'// &
881 & trim(extrptype(etsrc))//'_'// &
882 & trim(cplsetlist(ic))//'_'// &
883 & trim(cname)
884 ELSE
885 rname='rh_'// &
886 & trim(gridtype(grsrc))//'_'// &
887 & trim(gridtype(grdst))//'_'// &
888 & trim(intrptype(itsrc))//'_'// &
889 & trim(extrptype(etsrc))//'_'// &
890 & trim(cplsetlist(ic))//'_'// &
891 & trim(cname)
892 END IF
893
894 CALL esmf_stateget (state, &
895 & itemsearch=trim(rname), &
896 & itemcount=itemcount, &
897 & rc=rc)
898 IF (esmf_logfounderror(rctocheck=rc, &
899 & msg=esmf_logerr_passthru, &
900 & line=__line__, &
901 & file=myfile)) THEN
902 RETURN
903 END IF
904
905 IF (itemcount.le.0) THEN
906 rh1exist=.false.
907 ELSE
908 rh1exist=.true.
909 END IF
910 rh2exist=.false.
911
912
913
914 IF ((debuglevel.gt.0).and.(localpet.eq.0)) THEN
915 WRITE (cplout,30) trim(cplsetlist(ic)), trim(cname), &
916 & trim(models(isrc)%ExportField(idsrc)%short_name), &
917 & trim(gridtype(models(isrc)%ExportField(idsrc)%gtype)), &
918 & trim(models(idst)%ImportField(iddst)%short_name), &
919 & trim(gridtype(models(idst)%ImportField(iddst)%gtype)), &
920 & trim(intrptype(models(isrc)%ExportField(idsrc)%itype)), &
921 & rh1exist, rh2exist
922 FLUSH (cplout)
923 END IF
924
925
926
927 IF (.not.rh1exist) THEN
928 unmap=esmf_unmappedaction_ignore
929 IF (itsrc.eq.ibilin) THEN
930 regridmethod=esmf_regridmethod_bilinear
931 ELSE IF (itsrc.eq.ipatch) THEN
932 regridmethod=esmf_regridmethod_patch
933 ELSE IF (itsrc.eq.iconsv1) THEN
934 regridmethod=esmf_regridmethod_conserve
935 ELSE IF (itsrc.eq.instod) THEN
936 regridmethod=esmf_regridmethod_nearest_stod
937 ELSE IF (itsrc.eq.indtos) THEN
938 regridmethod=esmf_regridmethod_nearest_dtos
939 ELSE
940 WRITE (msgstring,'(a)') trim(cname)//': selected '// &
941 & 'interpolation type is not supported! '// &
942 & intrptype(itsrc)
943 CALL esmf_logwrite (trim(msgstring),esmf_logmsg_error)
944 CALL esmf_finalize (endflag=esmf_end_abort)
945 END IF
946
947 IF (etsrc.eq.enone) THEN
948 extrapmethod=esmf_extrapmethod_none
949 ELSE IF (etsrc.eq.exstod) THEN
950 extrapmethod=esmf_extrapmethod_nearest_stod
951 ELSE IF (etsrc.eq.eidavg) THEN
952 extrapmethod=esmf_extrapmethod_nearest_idavg
953 ELSE IF (etsrc.eq.ecreep) THEN
954 extrapmethod=esmf_extrapmethod_creep
955 ELSE
956 WRITE (msgstring,'(a)') trim(cname)//': selected '// &
957 & 'extrapolation type is not supported! '// &
958 & extrptype(etsrc)
959 CALL esmf_logwrite (trim(msgstring),esmf_logmsg_error)
960 CALL esmf_finalize (endflag=esmf_end_abort)
961 END IF
962
963 srcterm=0
964
965 SELECT CASE (cmodel(isrc))
966 CASE ('ROMS')
967 landvalue(1)=models(isrc)%LandValue
968 CALL esmf_fieldregridstore (srcfield=srcfield, &
969 & dstfield=dstfield, &
970 & srcmaskvalues=landvalue, &
971 & unmappedaction=unmap, &
972 & routehandle=routehandle, &
973 & regridmethod=regridmethod, &
974 & extrapmethod=extrapmethod, &
975 & extrapnumlevels=extrapnumlevels, &
976 & srctermprocessing=srcterm, &
977 & ignoredegenerate=.true., &
978 & rc=rc)
979 IF (esmf_logfounderror(rctocheck=rc, &
980 & msg=esmf_logerr_passthru, &
981 & line=__line__, &
982 & file=myfile)) THEN
983 RETURN
984 END IF
985 CASE ('DATA')
986 landvalue(1)=models(isrc)%LandValue
987 CALL esmf_fieldregridstore (srcfield=srcfield, &
988 & dstfield=dstfield, &
989 & srcmaskvalues=landvalue, &
990 & unmappedaction=unmap, &
991 & routehandle=routehandle, &
992 & regridmethod=regridmethod, &
993 & extrapmethod=extrapmethod, &
994 & extrapnumlevels=extrapnumlevels, &
995 & srctermprocessing=srcterm, &
996 & ignoredegenerate=.true., &
997 & rc=rc)
998 IF (esmf_logfounderror(rctocheck=rc, &
999 & msg=esmf_logerr_passthru, &
1000 & line=__line__, &
1001 & file=myfile)) THEN
1002 RETURN
1003 END IF
1004 CASE DEFAULT
1005 landvalue(1)=models(isrc)%LandValue
1006 CALL esmf_fieldregridstore (srcfield=srcfield, &
1007 & dstfield=dstfield, &
1008 & srcmaskvalues=landvalue, &
1009 & unmappedaction=unmap, &
1010 & routehandle=routehandle, &
1011 & regridmethod=regridmethod, &
1012 & extrapmethod=extrapmethod, &
1013 & extrapnumlevels=extrapnumlevels, &
1014 & srctermprocessing=srcterm, &
1015 & ignoredegenerate=.true., &
1016 & rc=rc)
1017 IF (esmf_logfounderror(rctocheck=rc, &
1018 & msg=esmf_logerr_passthru, &
1019 & line=__line__, &
1020 & file=myfile)) THEN
1021 RETURN
1022 END IF
1023 END SELECT
1024
1025
1026
1027 CALL esmf_routehandleset (routehandle, &
1028 & name=trim(rname), &
1029 & rc=rc)
1030 IF (esmf_logfounderror(rctocheck=rc, &
1031 & msg=esmf_logerr_passthru, &
1032 & line=__line__, &
1033 & file=myfile)) THEN
1034 RETURN
1035 END IF
1036
1037
1038
1039 CALL esmf_stateadd (state, &
1040 & (/ routehandle /), &
1041 & rc=rc)
1042 IF (esmf_logfounderror(rctocheck=rc, &
1043 & msg=esmf_logerr_passthru, &
1044 & line=__line__, &
1045 & file=myfile)) THEN
1046 RETURN
1047 END IF
1048 rh1exist=.true.
1049
1050
1051
1052 IF ((debuglevel.gt.0).and.(localpet.eq.0)) THEN
1053 WRITE (cplout,40) trim(rname)
1054 END IF
1055 END IF
1056
1057 END IF querry
1058 END DO create
1059 END IF define
1060 END DO cplset_loop
1061
1062 IF (esm_track) THEN
1063 WRITE (trac,'(a,a,i0)') '<== Exiting Coupler_ComputeRH for ' &
1064 & // trim(cname), ', PET', petrank
1065 FLUSH (trac)
1066 END IF
1067 IF (debuglevel.gt.0) FLUSH (cplout)
1068
1069 10 FORMAT (4x,'RouteHandle - PET = ',i0,' iSrc = ',i0,' iDst = ',i0, &
1070 & ' srcMask = ',i0,' dstMask = ',i0,', cplSet = ',a,', ',a)
1071 20 FORMAT (' Coupler_ComputerRH - ',a, &
1072 & '''',a,''' has an incorrect status',/,22x,a)
1073 30 FORMAT (4x,'RouteHandle - ESMF: ',a,', ',a,', ',a, &
1074 & ' [',a,'] to ',a,' [',a,']',' >> ',a, ' - ',l1,' - ',l1)
1075 40 FORMAT (18x,'Computed interpolant ''',a,''', sucessfully')
1076
1077 RETURN