212 integer,
intent(out) :: rc
214 TYPE (esmf_cplcomp) :: coupler
218 logical :: rh1exist, rh2exist
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
225 integer (i4b) :: srcmaskval, dstmaskval
226 integer (i4b) :: landvalue(1), seavalue(1)
228 integer (i4b),
allocatable,
dimension(:,:) :: tlw, tuw
230 character (len=*),
parameter :: myfile = &
231 & __FILE__//
", Coupler_ComputeRH"
233 character (ESMF_MAXSTR) :: msgstring
234 character (ESMF_MAXSTR) :: cname, dname, fname, rname, sname
236 character (ESMF_MAXSTR),
pointer :: cplsetlist(:) => null()
237 character (ESMF_MAXSTR),
pointer :: dstlist(:) => null()
238 character (ESMF_MAXSTR),
pointer :: srclist(:) => null()
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
262 CALL esmf_cplcompget (coupler, &
266 IF (esmf_logfounderror(rctocheck=rc, &
267 & msg=esmf_logerr_passthru, &
274 WRITE (
trac,
'(a,a,i0)')
'==> Entering Coupler_ComputeRH for ' &
275 & // trim(cname),
', PET',
petrank
281 CALL esmf_vmget (vm, &
282 & localpet=localpet, &
283 & petcount=petcount, &
284 & mpicommunicator=mycomm, &
286 IF (esmf_logfounderror(rctocheck=rc, &
287 & msg=esmf_logerr_passthru, &
298 & (trim(
connectors(i,j)%name).eq.trim(cname)))
THEN
309 landvalue(1)=
models(isrc)%LandValue
310 CALL esmf_vmbroadcast (vm, &
311 & bcstdata=landvalue, &
315 IF (esmf_logfounderror(rctocheck=rc, &
316 & msg=esmf_logerr_passthru, &
321 models(isrc)%LandValue=landvalue(1)
323 seavalue(1)=
models(isrc)%SeaValue
324 CALL esmf_vmbroadcast (vm, &
325 & bcstdata=seavalue, &
329 IF (esmf_logfounderror(rctocheck=rc, &
330 & msg=esmf_logerr_passthru, &
335 models(isrc)%SeaValue=seavalue(1)
337 landvalue(1)=
models(idst)%LandValue
338 CALL esmf_vmbroadcast (vm, &
339 & bcstdata=landvalue, &
343 IF (esmf_logfounderror(rctocheck=rc, &
344 & msg=esmf_logerr_passthru, &
349 models(idst)%LandValue=landvalue(1)
351 seavalue(1)=
models(idst)%SeaValue
352 CALL esmf_vmbroadcast (vm, &
353 & bcstdata=seavalue, &
357 IF (esmf_logfounderror(rctocheck=rc, &
358 & msg=esmf_logerr_passthru, &
363 models(idst)%SeaValue=seavalue(1)
370 SELECT CASE (
connectors(isrc,idst)%MaskInteraction)
372 srcmaskval=
models(isrc)%LandValue
373 dstmaskval=
models(idst)%LandValue
375 srcmaskval=
models(isrc)%SeaValue
376 dstmaskval=
models(idst)%SeaValue
383 IF (
associated(cplsetlist) )
nullify (cplsetlist)
384 CALL nuopc_connectorget (coupler, &
385 & cplsetlist=cplsetlist, &
387 IF (esmf_logfounderror(rctocheck=rc, &
388 & msg=esmf_logerr_passthru, &
393 ncplsets=
SIZE(cplsetlist)
399 cplset_loop :
DO ic=1,ncplsets
403 CALL nuopc_connectorget (coupler, &
404 & srcfields=srcfields, &
405 & dstfields=dstfields, &
407 & cplset=cplsetlist(ic), &
409 IF (esmf_logfounderror(rctocheck=rc, &
410 & msg=esmf_logerr_passthru, &
416 CALL esmf_fieldbundleget (srcfields, &
417 & fieldcount=srccount, &
419 IF (esmf_logfounderror(rctocheck=rc, &
420 & msg=esmf_logerr_passthru, &
426 CALL esmf_fieldbundleget (dstfields, &
427 & fieldcount=dstcount, &
429 IF (esmf_logfounderror(rctocheck=rc, &
430 & msg=esmf_logerr_passthru, &
436 IF ((
debuglevel.gt.0).and.(localpet.eq.0))
THEN
437 WRITE (
cplout,10) localpet, isrc, idst, &
438 & srcmaskval, dstmaskval, &
439 & trim(cplsetlist(ic)), &
447 define :
IF ((srccount.eq.dstcount).and.(dstcount.gt. 0))
THEN
451 allocate ( srclist(srccount) )
452 allocate ( dstlist(dstcount) )
456 CALL esmf_fieldbundleget (srcfields, &
457 & fieldnamelist=srclist, &
459 IF (esmf_logfounderror(rctocheck=rc, &
460 & msg=esmf_logerr_passthru, &
466 CALL esmf_fieldbundleget (dstfields, &
467 & fieldnamelist=dstlist, &
469 IF (esmf_logfounderror(rctocheck=rc, &
470 & msg=esmf_logerr_passthru, &
480 create :
DO i=1,srccount
490 fname=trim(
models(isrc)%ExportField(idsrc)%short_name)
494 itsrc=
models(isrc)%ExportField(idsrc)%itype
495 itdst=
models(idst)%ImportField(iddst)%itype
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)
506 etsrc=
models(isrc)%ExportField(idsrc)%etype
507 etdst=
models(idst)%ImportField(iddst)%etype
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)
518 grsrc=
models(isrc)%ExportField(idsrc)%gtype
519 grdst=
models(idst)%ImportField(iddst)%gtype
523 CALL esmf_fieldbundleget (srcfields, &
527 IF (esmf_logfounderror(rctocheck=rc, &
528 & msg=esmf_logerr_passthru, &
534 CALL esmf_fieldget (srcfield, &
535 & status=fieldstatus, &
537 IF (esmf_logfounderror(rctocheck=rc, &
538 & msg=esmf_logerr_passthru, &
544 IF (fieldstatus.ne.esmf_fieldstatus_complete)
THEN
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'
552 WRITE (
cplout,20)
'Source Field: ', trim(fname), &
555 IF (esmf_logfounderror(rctocheck=rc, &
556 & msg=esmf_logerr_passthru, &
564 CALL esmf_fieldprint (srcfield, rc=rc)
565 IF (esmf_logfounderror(rctocheck=rc, &
566 & msg=esmf_logerr_passthru, &
575 CALL esmf_fieldbundleget (dstfields, &
579 IF (esmf_logfounderror(rctocheck=rc, &
580 & msg=esmf_logerr_passthru, &
586 CALL esmf_fieldget (dstfield, &
587 & status=fieldstatus, &
589 IF (esmf_logfounderror(rctocheck=rc, &
590 & msg=esmf_logerr_passthru, &
596 IF (fieldstatus.ne.esmf_fieldstatus_complete)
THEN
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'
604 WRITE (
cplout,20)
'Destination Field: ', trim(fname), &
607 IF (esmf_logfounderror(rctocheck=rc, &
608 & msg=esmf_logerr_passthru, &
616 CALL esmf_fieldprint (dstfield, rc=rc)
617 IF (esmf_logfounderror(rctocheck=rc, &
618 & msg=esmf_logerr_passthru, &
629 querry :
IF (etsrc.eq.
e2steps)
THEN
637 IF (isrc.eq.
idata)
THEN
638 rname=
'rh_'//trim(srclist(i))//
'_'// &
643 & trim(cplsetlist(ic))//
'_'// &
651 & trim(cplsetlist(ic))//
'_'// &
655 CALL esmf_stateget (state, &
656 & itemsearch=trim(rname), &
657 & itemcount=itemcount, &
659 IF (esmf_logfounderror(rctocheck=rc, &
660 & msg=esmf_logerr_passthru, &
666 IF (itemcount.le.0)
THEN
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), &
679 & trim(
models(idst)%ImportField(iddst)%short_name), &
688 IF (.not.rh1exist)
THEN
689 unmap=esmf_unmappedaction_ignore
690 regridmethod=esmf_regridmethod_bilinear
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, &
704 IF (esmf_logfounderror(rctocheck=rc, &
705 & msg=esmf_logerr_passthru, &
713 CALL esmf_routehandleset (routehandle, &
714 & name=trim(rname), &
716 IF (esmf_logfounderror(rctocheck=rc, &
717 & msg=esmf_logerr_passthru, &
725 CALL esmf_stateadd (state, &
726 & (/ routehandle /), &
728 IF (esmf_logfounderror(rctocheck=rc, &
729 & msg=esmf_logerr_passthru, &
737 IF ((
debuglevel.gt.0).and.(localpet.eq.0))
THEN
738 WRITE (
cplout,40) trim(rname)
748 IF (isrc.eq.
idata)
THEN
749 rname=
'rh_'//trim(srclist(i))//
'_'// &
754 & trim(cplsetlist(ic))//
'_'// &
762 & trim(cplsetlist(ic))//
'_'// &
766 CALL esmf_stateget (state, &
767 & itemsearch=trim(rname), &
768 & itemcount=itemcount, &
770 IF (esmf_logfounderror(rctocheck=rc, &
771 & msg=esmf_logerr_passthru, &
777 IF (itemcount.le.0)
THEN
785 IF (.not.rh2exist)
THEN
787 & 1.0_dp, -1_i4b, rc)
792 & srcmaskval, dstmaskval, &
794 IF (esmf_logfounderror(rctocheck=rc, &
795 & msg=esmf_logerr_passthru, &
803 unmap=esmf_unmappedaction_ignore
804 regridmethod=esmf_regridmethod_nearest_stod
808 CALL esmf_fieldregridstore (srcfield=tmpfield, &
809 & dstfield=dstfield, &
810 & srcmaskvalues=(/dstmaskval, &
812 & dstmaskvalues=(/dstmaskval, &
814 & unmappedaction=unmap, &
815 & routehandle=routehandle, &
816 & regridmethod=regridmethod, &
817 & srctermprocessing=srcterm, &
818 & ignoredegenerate=.true., &
820 IF (esmf_logfounderror(rctocheck=rc, &
821 & msg=esmf_logerr_passthru, &
829 CALL esmf_routehandleset (routehandle, &
830 & name=trim(rname), &
832 IF (esmf_logfounderror(rctocheck=rc, &
833 & msg=esmf_logerr_passthru, &
841 CALL esmf_stateadd (state, &
842 & (/ routehandle /), &
844 IF (esmf_logfounderror(rctocheck=rc, &
845 & msg=esmf_logerr_passthru, &
853 CALL esmf_fielddestroy (tmpfield, rc=rc)
854 IF (esmf_logfounderror(rctocheck=rc, &
855 & msg=esmf_logerr_passthru, &
863 IF ((
debuglevel.gt.0).and.(localpet.eq.0))
THEN
864 WRITE (
cplout,40) trim(rname)
876 IF (isrc.eq.
idata)
THEN
877 rname=
'rh_'//trim(srclist(i))//
'_'// &
882 & trim(cplsetlist(ic))//
'_'// &
890 & trim(cplsetlist(ic))//
'_'// &
894 CALL esmf_stateget (state, &
895 & itemsearch=trim(rname), &
896 & itemcount=itemcount, &
898 IF (esmf_logfounderror(rctocheck=rc, &
899 & msg=esmf_logerr_passthru, &
905 IF (itemcount.le.0)
THEN
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), &
918 & trim(
models(idst)%ImportField(iddst)%short_name), &
927 IF (.not.rh1exist)
THEN
928 unmap=esmf_unmappedaction_ignore
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
940 WRITE (msgstring,
'(a)') trim(cname)//
': selected '// &
941 &
'interpolation type is not supported! '// &
943 CALL esmf_logwrite (trim(msgstring),esmf_logmsg_error)
944 CALL esmf_finalize (endflag=esmf_end_abort)
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
956 WRITE (msgstring,
'(a)') trim(cname)//
': selected '// &
957 &
'extrapolation type is not supported! '// &
959 CALL esmf_logwrite (trim(msgstring),esmf_logmsg_error)
960 CALL esmf_finalize (endflag=esmf_end_abort)
965 SELECT CASE (
cmodel(isrc))
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, &
976 & srctermprocessing=srcterm, &
977 & ignoredegenerate=.true., &
979 IF (esmf_logfounderror(rctocheck=rc, &
980 & msg=esmf_logerr_passthru, &
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, &
995 & srctermprocessing=srcterm, &
996 & ignoredegenerate=.true., &
998 IF (esmf_logfounderror(rctocheck=rc, &
999 & msg=esmf_logerr_passthru, &
1001 & file=myfile))
THEN
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, &
1014 & srctermprocessing=srcterm, &
1015 & ignoredegenerate=.true., &
1017 IF (esmf_logfounderror(rctocheck=rc, &
1018 & msg=esmf_logerr_passthru, &
1020 & file=myfile))
THEN
1027 CALL esmf_routehandleset (routehandle, &
1028 & name=trim(rname), &
1030 IF (esmf_logfounderror(rctocheck=rc, &
1031 & msg=esmf_logerr_passthru, &
1033 & file=myfile))
THEN
1039 CALL esmf_stateadd (state, &
1040 & (/ routehandle /), &
1042 IF (esmf_logfounderror(rctocheck=rc, &
1043 & msg=esmf_logerr_passthru, &
1045 & file=myfile))
THEN
1052 IF ((
debuglevel.gt.0).and.(localpet.eq.0))
THEN
1053 WRITE (
cplout,40) trim(rname)
1063 WRITE (
trac,
'(a,a,i0)')
'<== Exiting Coupler_ComputeRH for ' &
1064 & // trim(cname),
', PET',
petrank
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')
1093 integer,
intent(out) :: rc
1095 TYPE (esmf_cplcomp) :: coupler
1101 integer :: localpet, petcount, mycomm
1102 integer :: i, ic, is, j, srccount, dstcount, ncplsets
1103 integer :: isrc, idst, idsrc, iddst, grsrc, grdst
1104 integer :: etsrc, etdst, itsrc, itdst
1106 real (dp) :: src_total, dst_total, rel_error
1108 real (dp),
dimension(:,:),
pointer :: ptr2d => null()
1110 character (len=*),
parameter :: myfile = &
1111 & __FILE__//
", Coupler_ExecuteRH"
1113 character (len=19 ) :: dstfilestring, srcfilestring
1114 character (ESMF_MAXSTR) :: msgstring, cname, fname, rname
1115 character (ESMF_MAXSTR) :: dsttimestring, srctimestring
1116 character (ESMF_MAXSTR) :: dstfile, srcfile
1118 character (ESMF_MAXSTR),
pointer :: cplsetlist(:) => null()
1119 character (ESMF_MAXSTR),
pointer :: dstlist(:) => null()
1120 character (ESMF_MAXSTR),
pointer :: srclist(:) => null()
1122 TYPE (esmf_field) :: srcfield, dstfield, tmpfield
1123 TYPE (esmf_fieldbundle) :: dstfields, srcfields
1124 TYPE (esmf_routehandle) :: routehandle
1125 TYPE (esmf_state) :: state
1126 TYPE (esmf_time) :: dsttime, srctime
1127 TYPE (esmf_vm) :: vm
1141 CALL esmf_cplcompget (coupler, &
1145 IF (esmf_logfounderror(rctocheck=rc, &
1146 & msg=esmf_logerr_passthru, &
1148 & file=myfile))
THEN
1153 WRITE (
trac,
'(a,a,i0)')
'==> Entering Coupler_ExecuteRH for ' &
1154 & // trim(cname),
', PET',
petrank
1160 CALL esmf_vmget (vm, &
1161 & localpet=localpet, &
1162 & petcount=petcount, &
1163 & mpicommunicator=mycomm, &
1165 IF (esmf_logfounderror(rctocheck=rc, &
1166 & msg=esmf_logerr_passthru, &
1168 & file=myfile))
THEN
1177 & (trim(
connectors(i,j)%name).eq.trim(cname)))
THEN
1188 IF (
associated(cplsetlist) )
nullify (cplsetlist)
1189 CALL nuopc_connectorget (coupler, &
1190 & cplsetlist=cplsetlist, &
1192 IF (esmf_logfounderror(rctocheck=rc, &
1193 & msg=esmf_logerr_passthru, &
1195 & file=myfile))
THEN
1198 ncplsets=
SIZE(cplsetlist)
1204 cplset_loop :
DO ic=1,ncplsets
1208 CALL nuopc_connectorget (coupler, &
1209 & srcfields=srcfields, &
1210 & dstfields=dstfields, &
1212 & cplset=cplsetlist(ic), &
1214 IF (esmf_logfounderror(rctocheck=rc, &
1215 & msg=esmf_logerr_passthru, &
1217 & file=myfile))
THEN
1223 CALL esmf_fieldbundleget (srcfields, &
1224 & fieldcount=srccount, &
1226 IF (esmf_logfounderror(rctocheck=rc, &
1227 & msg=esmf_logerr_passthru, &
1229 & file=myfile))
THEN
1235 CALL esmf_fieldbundleget (dstfields, &
1236 & fieldcount=dstcount, &
1238 IF (esmf_logfounderror(rctocheck=rc, &
1239 & msg=esmf_logerr_passthru, &
1241 & file=myfile))
THEN
1247 allocate ( srclist(srccount) )
1249 CALL esmf_fieldbundleget (srcfields, &
1250 & fieldnamelist=srclist, &
1252 IF (esmf_logfounderror(rctocheck=rc, &
1253 & msg=esmf_logerr_passthru, &
1255 & file=myfile))
THEN
1261 allocate ( dstlist(dstcount) )
1263 CALL esmf_fieldbundleget (dstfields, &
1264 & fieldnamelist=dstlist, &
1266 IF (esmf_logfounderror(rctocheck=rc, &
1267 & msg=esmf_logerr_passthru, &
1269 & file=myfile))
THEN
1277 exchange :
DO i=1,srccount
1287 fname=trim(
models(isrc)%ExportField(idsrc)%short_name)
1291 itsrc=
models(isrc)%ExportField(idsrc)%itype
1292 itdst=
models(idst)%ImportField(iddst)%itype
1294 IF (itsrc.ne.itdst)
THEN
1295 WRITE (msgstring,
'(a)') trim(cname)// &
1296 &
': SRC and DST field interpolation type does not match!'
1297 CALL esmf_logwrite (trim(msgstring), esmf_logmsg_error)
1303 etsrc=
models(isrc)%ExportField(idsrc)%etype
1304 etdst=
models(idst)%ImportField(iddst)%etype
1306 IF (etsrc.NE.etdst)
THEN
1307 WRITE (msgstring,
'(a)') trim(cname)// &
1308 &
': SRC and DST field extrapolation type does not match!'
1309 CALL esmf_logwrite (trim(msgstring), esmf_logmsg_error)
1315 grsrc=
models(isrc)%ExportField(idsrc)%gtype
1316 grdst=
models(idst)%ImportField(iddst)%gtype
1320 CALL esmf_fieldbundleget (srcfields, &
1324 IF (esmf_logfounderror(rctocheck=rc, &
1325 & msg=esmf_logerr_passthru, &
1327 & file=myfile))
THEN
1333 CALL esmf_fieldbundleget (dstfields, &
1337 IF (esmf_logfounderror(rctocheck=rc, &
1338 & msg=esmf_logerr_passthru, &
1340 & file=myfile))
THEN
1348 querry :
IF (etsrc.eq.
e2steps)
THEN
1356 IF (isrc.eq.
idata)
THEN
1357 rname=
'rh_'//trim(srclist(i))//
'_'// &
1362 & trim(cplsetlist(ic))//
'_'// &
1370 & trim(cplsetlist(ic))//
'_'// &
1374 CALL esmf_stateget (state, &
1378 IF (esmf_logfounderror(rctocheck=rc, &
1379 & msg=esmf_logerr_passthru, &
1381 & file=myfile))
THEN
1390 IF (esmf_logfounderror(rctocheck=rc, &
1391 & msg=esmf_logerr_passthru, &
1393 & file=myfile))
THEN
1399 CALL esmf_fieldregrid (srcfield, &
1402 & zeroregion=esmf_region_select, &
1403 & termorderflag=esmf_termorder_srcseq, &
1405 IF (esmf_logfounderror(rctocheck=rc, &
1406 & msg=esmf_logerr_passthru, &
1408 & file=myfile))
THEN
1414 CALL esmf_fieldcopy (dstfield, &
1417 IF (esmf_logfounderror(rctocheck=rc, &
1418 & msg=esmf_logerr_passthru, &
1420 & file=myfile))
THEN
1426 IF (isrc.eq.
idata)
THEN
1427 rname=
'rh_'//trim(srclist(i)) //
'_'// &
1432 & trim(cplsetlist(ic))//
'_'// &
1440 & trim(cplsetlist(ic))//
'_'// &
1444 CALL esmf_stateget (state, &
1448 IF (esmf_logfounderror(rctocheck=rc, &
1449 & msg=esmf_logerr_passthru, &
1451 & file=myfile))
THEN
1457 CALL esmf_fieldregrid (tmpfield, &
1460 & zeroregion=esmf_region_select, &
1461 & termorderflag=esmf_termorder_srcseq, &
1463 IF (esmf_logfounderror(rctocheck=rc, &
1464 & msg=esmf_logerr_passthru, &
1466 & file=myfile))
THEN
1470 CALL esmf_fielddestroy (tmpfield, rc=rc)
1471 IF (esmf_logfounderror(rctocheck=rc, &
1472 & msg=esmf_logerr_passthru, &
1474 & file=myfile))
THEN
1480 IF (
models(isrc)%ExportField(idsrc)% &
1481 & enable_integral_adj)
THEN
1487 IF (esmf_logfounderror(rctocheck=rc, &
1488 & msg=esmf_logerr_passthru, &
1490 & file=myfile))
THEN
1494 IF (localpet.eq.0)
THEN
1496 & localpet,
'SRC. INTEGRAL', src_total, &
1497 & trim(
models(isrc)%ExportField(idsrc)%short_name)
1505 IF (esmf_logfounderror(rctocheck=rc, &
1506 & msg=esmf_logerr_passthru, &
1508 & file=myfile))
THEN
1512 IF (localpet.eq.0)
THEN
1514 & localpet,
'DST. INTEGRAL', dst_total, &
1515 & trim(
models(isrc)%ExportField(idsrc)%short_name)
1517 IF (src_total.ne.0.0_dp)
THEN
1518 rel_error=(dst_total-src_total)/src_total
1521 & localpet,
'RELATIVE ERROR 1', rel_error, &
1522 & trim(
models(isrc)%ExportField(idsrc)%short_name)
1530 & dst_total-src_total, &
1532 IF (esmf_logfounderror(rctocheck=rc, &
1533 & msg=esmf_logerr_passthru, &
1535 & file=myfile))
THEN
1544 IF (esmf_logfounderror(rctocheck=rc, &
1545 & msg=esmf_logerr_passthru, &
1547 & file=myfile))
THEN
1551 IF (localpet.eq.0)
THEN
1553 & localpet,
'DST. INTEGRAL (CORR)', dst_total, &
1554 & trim(
models(isrc)%ExportField(idsrc)%short_name)
1556 IF (src_total.ne.0.0_dp)
THEN
1557 rel_error=(dst_total-src_total)/src_total
1560 & localpet,
'RELATIVE ERROR 2', rel_error, &
1561 & trim(
models(isrc)%ExportField(idsrc)%short_name)
1573 IF (isrc.eq.
idata)
THEN
1574 rname=
'rh_'//trim(srclist(i))//
'_'// &
1579 & trim(cplsetlist(ic))//
'_'// &
1587 & trim(cplsetlist(ic))//
'_'// &
1591 CALL esmf_stateget (state, &
1595 IF (esmf_logfounderror(rctocheck=rc, &
1596 & msg=esmf_logerr_passthru, &
1598 & file=myfile))
THEN
1604 CALL esmf_fieldregrid (srcfield, &
1607 & zeroregion=esmf_region_select, &
1608 & termorderflag=esmf_termorder_srcseq, &
1610 IF (esmf_logfounderror(rctocheck=rc, &
1611 & msg=esmf_logerr_passthru, &
1613 & file=myfile))
THEN
1623 IF ((
debuglevel.gt.0).and.(localpet.eq.0))
THEN
1625 trim(cplsetlist(ic)), trim(cname), &
1626 & trim(
models(isrc)%ExportField(idsrc)%short_name), &
1628 & trim(
models(idst)%ImportField(iddst)%short_name), &
1638 CALL nuopc_gettimestamp (srcfield, &
1639 & isvalid = isvalid, &
1642 IF (esmf_logfounderror(rctocheck=rc, &
1643 & msg=esmf_logerr_passthru, &
1645 & file=myfile))
THEN
1650 CALL esmf_timeget (srctime, &
1651 & timestringisofrac = srctimestring, &
1653 IF (esmf_logfounderror(rctocheck=rc, &
1654 & msg=esmf_logerr_passthru, &
1656 & file=myfile))
THEN
1659 is=index(srctimestring,
'T')
1660 IF (is.gt.0) srctimestring(is:is)=
' '
1661 srcfilestring=srctimestring(1:19)
1663 srcfilestring=
'0000-00-00 00:00:00'
1665 srcfilestring(11:11)=
'_'
1666 srcfilestring(14:14)=
'.'
1667 srcfilestring(17:17)=
'.'
1669 CALL nuopc_gettimestamp (dstfield, &
1670 & isvalid = isvalid, &
1673 IF (esmf_logfounderror(rctocheck=rc, &
1674 & msg=esmf_logerr_passthru, &
1676 & file=myfile))
THEN
1681 CALL esmf_timeget (dsttime, &
1682 & timestringisofrac = dsttimestring, &
1684 IF (esmf_logfounderror(rctocheck=rc, &
1685 & msg=esmf_logerr_passthru, &
1687 & file=myfile))
THEN
1690 is=index(dsttimestring,
'T')
1691 IF (is.gt.0) dsttimestring(is:is)=
' '
1692 dstfilestring=dsttimestring(1:19)
1694 dstfilestring=
'0000-00-00 00:00:00'
1696 dstfilestring(11:11)=
'_'
1697 dstfilestring(14:14)=
'.'
1698 dstfilestring(17:17)=
'.'
1700 IF (localpet.eq.0)
THEN
1701 WRITE (
cplout,30) trim(srctimestring), &
1702 & trim(dsttimestring), &
1703 & trim(
models(isrc)%ExportField(idsrc)%short_name), &
1704 & trim(
models(idst)%ImportField(iddst)%short_name)
1716 &
models(isrc)%ExportField(idsrc)%debug_write)
THEN
1717 WRITE (srcfile,40)
'src_'//trim(srclist(i))//
'_'// &
1718 & trim(cplsetlist(ic))//
'_'// &
1720 & trim(srcfilestring)
1721 CALL esmf_fieldwrite (srcfield, &
1723 & variablename=trim(srclist(i)), &
1724 & overwrite=.true., &
1726 IF (esmf_logfounderror(rctocheck=rc, &
1727 & msg=esmf_logerr_passthru, &
1729 & file=myfile))
THEN
1735 &
models(idst)%ImportField(iddst)%debug_write)
THEN
1736 WRITE (dstfile,40)
'dst_'//trim(dstlist(i))//
'_'// &
1737 & trim(cplsetlist(ic))//
'_'// &
1739 & trim(srcfilestring)
1740 CALL esmf_fieldwrite (dstfield, &
1742 & variablename=trim(dstlist(i)), &
1743 & overwrite=.true., &
1745 IF (esmf_logfounderror(rctocheck=rc, &
1746 & msg=esmf_logerr_passthru, &
1748 & file=myfile))
THEN
1759 deallocate (srclist)
1760 deallocate (dstlist)
1764 WRITE (
trac,
'(a,a,i0)')
'<== Exiting Coupler_ExecuteRH for ' &
1765 & // trim(cname),
', PET',
petrank
1770 10
FORMAT (3x,
'ESMF Coupler - PET(',i3.3,
') - ',a,
' = ',e14.5, &
1772 20
FORMAT (3x,
'ESMF Coupler - ',a,
', ',a,
': Regridded ',a, &
1773 &
' [',a,
'] to ',a,
' [',a,
']',
' >> ',a)
1774 30
FORMAT (18x,
'(SRC TimeStamp = ',a,
', DST TimeStamp = ',a,
')', &
1776 40
FORMAT (a,
'_',a,
'.nc')
1792 integer,
intent(out) :: rc
1794 TYPE (esmf_cplcomp) :: coupler
1798 logical :: rhexist, rh1exist, rh2exist
1800 integer :: i, ic, j, localpet, petcount, mycomm
1801 integer :: itemcount, srccount, dstcount, ncplsets
1802 integer :: isrc, idst, idsrc, iddst, grsrc, grdst
1803 integer :: etsrc, etdst, itsrc, itdst
1805 character (len=*),
parameter :: myfile = &
1806 & __FILE__//
", Coupler_ReleaseRH"
1808 character(ESMF_MAXSTR) :: cname, rname
1810 character (ESMF_MAXSTR),
pointer :: cplsetlist(:) => null()
1811 character (ESMF_MAXSTR),
pointer :: dstlist(:) => null()
1812 character (ESMF_MAXSTR),
pointer :: srclist(:) => null()
1814 TYPE (esmf_vm) :: vm
1815 TYPE (esmf_state) :: state
1816 TYPE (esmf_fieldbundle) :: srcfields, dstfields
1817 TYPE (esmf_routehandle) :: routehandle
1824 WRITE (
trac,
'(a,a,i0)')
'==> Entering Coupler_ReleaseRH', &
1836 CALL esmf_cplcompget (coupler, &
1840 IF (esmf_logfounderror(rctocheck=rc, &
1841 & msg=esmf_logerr_passthru, &
1843 & file=myfile))
THEN
1849 CALL esmf_vmget (vm, &
1850 & localpet=localpet, &
1851 & petcount=petcount, &
1852 & mpicommunicator=mycomm, &
1854 IF (esmf_logfounderror(rctocheck=rc, &
1855 & msg=esmf_logerr_passthru, &
1857 & file=myfile))
THEN
1866 & (trim(
connectors(i,j)%name).eq.trim(cname)))
THEN
1877 IF (
associated(cplsetlist) )
nullify (cplsetlist)
1878 CALL nuopc_connectorget (coupler, &
1879 & cplsetlist=cplsetlist, &
1881 IF (esmf_logfounderror(rctocheck=rc, &
1882 & msg=esmf_logerr_passthru, &
1884 & file=myfile))
THEN
1887 ncplsets=
SIZE(cplsetlist)
1893 cplset_loop :
DO ic=1,ncplsets
1897 CALL nuopc_connectorget (coupler, &
1898 & srcfields=srcfields, &
1899 & dstfields=dstfields, &
1901 & cplset=cplsetlist(ic), &
1903 IF (esmf_logfounderror(rctocheck=rc, &
1904 & msg=esmf_logerr_passthru, &
1906 & file=myfile))
THEN
1912 CALL esmf_fieldbundleget (srcfields, &
1913 & fieldcount=srccount, &
1915 IF (esmf_logfounderror(rctocheck=rc, &
1916 & msg=esmf_logerr_passthru, &
1918 & file=myfile))
THEN
1924 CALL esmf_fieldbundleget (dstfields, &
1925 & fieldcount=dstcount, &
1927 IF (esmf_logfounderror(rctocheck=rc, &
1928 & msg=esmf_logerr_passthru, &
1930 & file=myfile))
THEN
1936 allocate ( srclist(srccount) )
1938 CALL esmf_fieldbundleget (srcfields, &
1939 & fieldnamelist=srclist, &
1941 IF (esmf_logfounderror(rctocheck=rc, &
1942 & msg=esmf_logerr_passthru, &
1944 & file=myfile))
THEN
1950 allocate ( dstlist(dstcount) )
1952 CALL esmf_fieldbundleget (dstfields, &
1953 & fieldnamelist=dstlist, &
1955 IF (esmf_logfounderror(rctocheck=rc, &
1956 & msg=esmf_logerr_passthru, &
1958 & file=myfile))
THEN
1967 exchange :
DO i=1,srccount
1976 itsrc=
models(isrc)%ExportField(idsrc)%itype
1977 itdst=
models(idst)%ImportField(iddst)%itype
1981 etsrc=
models(isrc)%ExportField(idsrc)%etype
1982 etdst=
models(idst)%ImportField(iddst)%etype
1986 grsrc=
models(isrc)%ExportField(idsrc)%gtype
1987 grdst=
models(idst)%ImportField(iddst)%gtype
1993 querry :
IF (etsrc.eq.
e2steps)
THEN
1997 IF (isrc.eq.
idata)
THEN
1998 rname=
'rh_'//trim(srclist(i))//
'_'// &
2003 & trim(cplsetlist(ic))//
'_'// &
2011 & trim(cplsetlist(ic))//
'_'// &
2015 CALL esmf_stateget (state, &
2016 & itemsearch=trim(rname), &
2017 & itemcount=itemcount, &
2019 IF (esmf_logfounderror(rctocheck=rc, &
2020 & msg=esmf_logerr_passthru, &
2022 & file=myfile))
THEN
2026 IF (itemcount.le.0)
THEN
2035 CALL esmf_stateget (state, &
2039 IF (esmf_logfounderror(rctocheck=rc, &
2040 & msg=esmf_logerr_passthru, &
2042 & file=myfile))
THEN
2046 CALL esmf_fieldbundleregridrelease (routehandle, &
2048 IF (esmf_logfounderror(rctocheck=rc, &
2049 & msg=esmf_logerr_passthru, &
2051 & file=myfile))
THEN
2058 IF (isrc.eq.
idata)
THEN
2059 rname=
'rh_'//trim(srclist(i))//
'_'// &
2064 & trim(cplsetlist(ic))//
'_'// &
2072 & trim(cplsetlist(ic))//
'_'// &
2076 CALL esmf_stateget (state, &
2077 & itemsearch=trim(rname), &
2078 & itemcount=itemcount, &
2080 IF (esmf_logfounderror(rctocheck=rc, &
2081 & msg=esmf_logerr_passthru, &
2083 & file=myfile))
THEN
2087 IF (itemcount.le.0)
THEN
2096 CALL esmf_stateget (state, &
2100 IF (esmf_logfounderror(rctocheck=rc, &
2101 & msg=esmf_logerr_passthru, &
2103 & file=myfile))
THEN
2107 CALL esmf_fieldbundleregridrelease (routehandle, &
2109 IF (esmf_logfounderror(rctocheck=rc, &
2110 & msg=esmf_logerr_passthru, &
2112 & file=myfile))
THEN
2125 IF (isrc.eq.
idata)
THEN
2126 rname=
'rh_'//trim(srclist(i))//
'_'// &
2131 & trim(cplsetlist(ic))//
'_'// &
2139 & trim(cplsetlist(ic))//
'_'// &
2143 CALL esmf_stateget (state, &
2144 & itemsearch=trim(rname), &
2145 & itemcount=itemcount, &
2147 IF (esmf_logfounderror(rctocheck=rc, &
2148 & msg=esmf_logerr_passthru, &
2150 & file=myfile))
THEN
2154 IF (itemcount.le.0)
THEN
2163 CALL esmf_stateget (state, &
2167 IF (esmf_logfounderror(rctocheck=rc, &
2168 & msg=esmf_logerr_passthru, &
2170 & file=myfile))
THEN
2174 CALL esmf_fieldbundleregridrelease (routehandle, &
2176 IF (esmf_logfounderror(rctocheck=rc, &
2177 & msg=esmf_logerr_passthru, &
2179 & file=myfile))
THEN
2189 WRITE (
trac,
'(a,a,i0)')
'<== Exiting Coupler_ReleaseRH', &
2216 integer (i4b),
intent(in) :: maskval(:)
2217 integer,
intent(out) :: rc
2219 real (dp),
intent(in) :: error
2221 TYPE (esmf_vm),
intent(in) :: vm
2222 TYPE (esmf_field),
intent(inout) :: field
2227 integer :: localde, localdecount, localpet, petcount, mycomm
2228 integer :: clbnd(2), cubnd(2)
2230 integer (i4b),
pointer :: ptrmask(:,:) => null()
2232 real (dp) :: myareasum(1), areasum(1)
2233 real (dp) :: error_unit
2235 real (dp),
pointer :: ptrfield(:,:) => null()
2236 real (dp),
pointer :: ptrarea(:,:) => null()
2238 character (len=*),
parameter :: myfile = &
2239 & __FILE__//
", Coupler_AdjustedField"
2241 character(ESMF_MAXSTR) :: fname
2243 TYPE (esmf_grid) :: grid
2244 TYPE (esmf_staggerloc) :: sloc
2253 WRITE (
trac,
'(a,a,i0)')
'==> Entering Coupler_AdjustField', &
2268 CALL esmf_vmget (vm, &
2269 & localpet=localpet, &
2270 & petcount=petcount, &
2271 & mpicommunicator=mycomm, &
2273 IF (esmf_logfounderror(rctocheck=rc, &
2274 & msg=esmf_logerr_passthru, &
2276 & file=myfile))
THEN
2284 CALL esmf_fieldget (field, &
2287 & staggerloc=sloc, &
2289 IF (esmf_logfounderror(rctocheck=rc, &
2290 & msg=esmf_logerr_passthru, &
2292 & file=myfile))
THEN
2298 CALL esmf_gridget (grid, &
2299 & localdecount=localdecount, &
2301 IF (esmf_logfounderror(rctocheck=rc, &
2302 & msg=esmf_logerr_passthru, &
2304 & file=myfile))
THEN
2310 de_loop1 :
DO localde=0,localdecount-1
2311 CALL esmf_fieldget (field, &
2312 & localde=localde, &
2313 & farrayptr=ptrfield, &
2314 & computationallbound=clbnd, &
2315 & computationalubound=cubnd, &
2317 IF (esmf_logfounderror(rctocheck=rc, &
2318 & msg=esmf_logerr_passthru, &
2320 & file=myfile))
THEN
2326 CALL esmf_gridgetitem (grid, &
2327 & esmf_griditem_area, &
2328 & staggerloc=sloc, &
2329 & localde=localde, &
2330 & farrayptr=ptrarea, &
2332 IF (esmf_logfounderror(rctocheck=rc, &
2333 & msg=esmf_logerr_passthru, &
2335 & file=myfile))
THEN
2341 CALL esmf_gridgetitem (grid, &
2342 & esmf_griditem_mask, &
2343 & staggerloc=sloc, &
2344 & localde=localde, &
2345 & farrayptr=ptrmask, &
2347 IF (esmf_logfounderror(rctocheck=rc, &
2348 & msg=esmf_logerr_passthru, &
2350 & file=myfile))
THEN
2358 clbnd(1)=lbound(ptrmask, dim=1)
2359 cubnd(1)=ubound(ptrmask, dim=1)
2360 clbnd(2)=lbound(ptrmask, dim=2)
2361 cubnd(2)=ubound(ptrmask, dim=2)
2363 DO j=clbnd(2),cubnd(2)
2364 DO i=clbnd(1),cubnd(1)
2365 IF (any(ptrmask(i,j).eq.maskval))
THEN
2366 myareasum(1)=myareasum(1)+ptrarea(i,j)
2376 IF (
associated(ptrarea))
THEN
2379 IF (
associated(ptrmask))
THEN
2389 CALL esmf_vmallreduce (vm, &
2392 & esmf_reduce_sum, &
2394 IF (esmf_logfounderror(rctocheck=rc, &
2395 & msg=esmf_logerr_passthru, &
2397 & file=myfile))
THEN
2405 error_unit=error/areasum(1)
2406 IF (localpet.eq.0)
THEN
2407 WRITE (
cplout,10) localpet, areasum(1), error_unit, trim(fname)
2408 10
FORMAT (
' PET(',i3.3,
') - AVGERAGE DIFF = ',2e14.5,
' (',a,
')')
2416 de_loop2 :
DO localde=0,localdecount-1
2420 CALL esmf_fieldget (field, &
2421 & localde=localde, &
2422 & farrayptr=ptrfield, &
2423 & computationallbound=clbnd, &
2424 & computationalubound=cubnd, &
2426 IF (esmf_logfounderror(rctocheck=rc, &
2427 & msg=esmf_logerr_passthru, &
2429 & file=myfile))
THEN
2435 CALL esmf_gridgetitem (grid, &
2436 & esmf_griditem_mask, &
2437 & staggerloc=sloc, &
2438 & localde=localde, &
2439 & farrayptr=ptrmask, &
2441 IF (esmf_logfounderror(rctocheck=rc, &
2442 & msg=esmf_logerr_passthru, &
2444 & file=myfile))
THEN
2450 DO j=clbnd(2),cubnd(2)
2451 DO i=clbnd(1),cubnd(1)
2452 IF (any(ptrmask(i,j).eq.maskval))
THEN
2453 ptrfield(i,j)=ptrfield(i,j)-error_unit
2463 IF (
associated(ptrfield))
THEN
2466 IF (
associated(ptrmask))
THEN
2472 WRITE (
trac,
'(a,a,i0)')
'<== Exiting Coupler_AdjustField', &
2491 integer (i4b),
intent(in) :: maskval(:)
2492 integer,
intent(out) :: rc
2496 TYPE (esmf_field),
intent(in) :: field
2497 TYPE (esmf_vm),
intent(in) :: vm
2502 integer :: localde, localdecount, localpet, petcount, mycomm
2503 integer :: clbnd(2), cubnd(2)
2505 integer (i4b),
pointer :: ptrmask(:,:) => null()
2507 real (dp) :: myareasum(1), areasum(1)
2509 real (dp),
pointer :: ptrfield(:,:) => null()
2510 real (dp),
pointer :: ptrarea(:,:) => null()
2512 character (len=*),
parameter :: myfile = &
2513 & __FILE__//
", Coupler_AreaIntegral"
2515 character (ESMF_MAXSTR) :: fname
2517 TYPE (esmf_grid) :: grid
2518 TYPE (esmf_staggerloc) :: sloc
2527 WRITE (
trac,
'(a,a,i0)')
'==> Entering Coupler_AreaIntegral', &
2543 CALL esmf_vmget (vm, &
2544 & localpet=localpet, &
2545 & petcount=petcount, &
2546 & mpicommunicator=mycomm, &
2548 IF (esmf_logfounderror(rctocheck=rc, &
2549 & msg=esmf_logerr_passthru, &
2551 & file=myfile))
THEN
2559 CALL esmf_fieldget (field, &
2562 & staggerloc=sloc, &
2564 IF (esmf_logfounderror(rctocheck=rc, &
2565 & msg=esmf_logerr_passthru, &
2567 & file=myfile))
THEN
2573 CALL esmf_gridget (grid, &
2574 & localdecount=localdecount, &
2576 IF (esmf_logfounderror(rctocheck=rc, &
2577 & msg=esmf_logerr_passthru, &
2579 & file=myfile))
THEN
2585 de_loop :
DO localde=0,localdecount-1
2586 CALL esmf_fieldget (field, &
2587 & localde=localde, &
2588 & farrayptr=ptrfield, &
2589 & computationallbound=clbnd, &
2590 & computationalubound=cubnd, &
2592 IF (esmf_logfounderror(rctocheck=rc, &
2593 & msg=esmf_logerr_passthru, &
2595 & file=myfile))
THEN
2601 CALL esmf_gridgetitem (grid, &
2602 & esmf_griditem_area, &
2603 & staggerloc=sloc, &
2604 & localde=localde, &
2605 & farrayptr=ptrarea, &
2607 IF (esmf_logfounderror(rctocheck=rc, &
2608 & msg=esmf_logerr_passthru, &
2610 & file=myfile))
THEN
2616 CALL esmf_gridgetitem (grid, &
2617 & esmf_griditem_mask, &
2618 & staggerloc=sloc, &
2619 & localde=localde, &
2620 & farrayptr=ptrmask, &
2622 IF (esmf_logfounderror(rctocheck=rc, &
2623 & msg=esmf_logerr_passthru, &
2625 & file=myfile))
THEN
2633 DO j=clbnd(2),cubnd(2)
2634 DO i=clbnd(1),cubnd(1)
2635 IF (any(ptrmask(i,j).eq.maskval))
THEN
2636 myareasum(1)=myareasum(1)+ptrfield(i,j)*ptrarea(i,j)
2646 IF (
associated(ptrfield))
THEN
2649 IF (
associated(ptrarea))
THEN
2652 IF (
associated(ptrmask))
THEN
2662 WRITE (
cplout,10) localpet, localde, myareasum(1), trim(fname)
2663 10
FORMAT (
' PET(',i3.3,
') - DE(',i2.2,
') - Area Integral = ', &
2665 CALL esmf_vmbarrier (vm, rc=rc)
2666 IF (esmf_logfounderror(rctocheck=rc, &
2667 & msg=esmf_logerr_passthru, &
2669 & file=myfile))
THEN
2678 CALL esmf_vmallreduce (vm, &
2679 & myareasum, areasum, 1, &
2680 & esmf_reduce_sum, &
2682 IF (esmf_logfounderror(rctocheck=rc, &
2683 & msg=esmf_logerr_passthru, &
2685 & file=myfile))
THEN
2696 IF (localpet.eq.0)
THEN
2697 WRITE (
cplout,20) localpet, areasum(1), trim(fname)
2698 20
FORMAT (
' PET(',i3.3,
') - Global Area Integral = ',e14.5, &
2701 CALL esmf_vmbarrier (vm, rc=rc)
2702 IF (esmf_logfounderror(rctocheck=rc, &
2703 & msg=esmf_logerr_passthru, &
2705 & file=myfile))
THEN
2711 WRITE (
trac,
'(a,a,i0)')
'<== Exiting Coupler_AreaIntegral', &
2940 & srcLandMask, dstLandMask, &
2941 & srcMId, dstMId, rc)
2953 integer (i4b),
intent(in) :: srclandmask, dstlandmask
2954 integer,
intent(in) :: srcmid, dstmid
2956 integer,
intent(out) :: rc
2958 TYPE (esmf_field),
intent(in) :: srcfield, dstfield
2962 integer :: i, j, k, srctermprocessing
2963 integer :: localde, localdecount
2964 integer :: clbnd(2), cubnd(2)
2966 integer (i4b),
pointer :: msk2d(:,:) => null()
2970 real (dp),
pointer :: bdy2d(:,:) => null()
2971 real (dp),
pointer :: ptr2d(:,:) => null()
2973 character (len=*),
parameter :: myfile = &
2974 & __FILE__//
", Coupler_FindUnmapped"
2976 character (ESMF_MAXSTR) :: fname
2978 TYPE (esmf_grid) :: grid
2979 TYPE (esmf_field) :: afield, bfield, cfield
2980 TYPE (esmf_unmappedaction_flag) :: unmap
2981 TYPE (esmf_regridmethod_flag) :: regridmethod
2982 TYPE (esmf_routehandle) :: routehandle
2983 TYPE (esmf_staggerloc) :: sloc
2990 WRITE (
trac,
'(a,a,i0)')
'==> Entering Coupler_FindUnmapped', &
3004 IF (esmf_logfounderror(rctocheck=rc, &
3005 & msg=esmf_logerr_passthru, &
3007 & file=myfile))
THEN
3015 IF (esmf_logfounderror(rctocheck=rc, &
3016 & msg=esmf_logerr_passthru, &
3018 & file=myfile))
THEN
3026 IF (esmf_logfounderror(rctocheck=rc, &
3027 & msg=esmf_logerr_passthru, &
3029 & file=myfile))
THEN
3038 unmap=esmf_unmappedaction_ignore
3039 IF (
iatmos.eq.srcmid)
THEN
3040 regridmethod=esmf_regridmethod_nearest_stod
3042 regridmethod=esmf_regridmethod_nearest_dtos
3047 CALL esmf_fieldregridstore (srcfield=afield, &
3048 & dstfield=bfield, &
3049 & srcmaskvalues=(/srclandmask/), &
3050 & dstmaskvalues=(/dstlandmask/), &
3051 & unmappedaction=unmap, &
3052 & routehandle=routehandle, &
3053 & regridmethod=regridmethod, &
3054 & srctermprocessing=srctermprocessing, &
3055 & ignoredegenerate=.true., &
3057 IF (esmf_logfounderror(rctocheck=rc, &
3058 & msg=esmf_logerr_passthru, &
3060 & file=myfile))
THEN
3068 CALL esmf_fieldregrid (afield, &
3071 & zeroregion=esmf_region_empty, &
3072 & termorderflag=esmf_termorder_srcseq, &
3074 IF (esmf_logfounderror(rctocheck=rc, &
3075 & msg=esmf_logerr_passthru, &
3077 & file=myfile))
THEN
3086 unmap=esmf_unmappedaction_ignore
3087 regridmethod=esmf_regridmethod_bilinear
3089 CALL esmf_fieldregridstore (srcfield=afield, &
3090 & dstfield=cfield, &
3091 & srcmaskvalues=(/srclandmask/), &
3092 & dstmaskvalues=(/dstlandmask/), &
3093 & unmappedaction=unmap, &
3094 & routehandle=routehandle, &
3095 & regridmethod=regridmethod, &
3096 & srctermprocessing=srctermprocessing, &
3097 & ignoredegenerate=.true., &
3099 IF (esmf_logfounderror(rctocheck=rc, &
3100 & msg=esmf_logerr_passthru, &
3102 & file=myfile))
THEN
3110 CALL esmf_fieldregrid (afield, &
3113 & zeroregion=esmf_region_total, &
3114 & termorderflag=esmf_termorder_srcseq, &
3116 IF (esmf_logfounderror(rctocheck=rc, &
3117 & msg=esmf_logerr_passthru, &
3119 & file=myfile))
THEN
3127 CALL esmf_fieldget (cfield, &
3129 & staggerloc=sloc, &
3131 IF (esmf_logfounderror(rctocheck=rc, &
3132 & msg=esmf_logerr_passthru, &
3134 & file=myfile))
THEN
3142 CALL esmf_gridget (grid, &
3143 & localdecount=localdecount, &
3145 IF (esmf_logfounderror(rctocheck=rc, &
3146 & msg=esmf_logerr_passthru, &
3148 & file=myfile))
THEN
3154 de_loop :
DO localde=0,localdecount-1
3155 CALL esmf_fieldget (bfield, &
3156 & localde=localde, &
3157 & farrayptr=bdy2d, &
3159 IF (esmf_logfounderror(rctocheck=rc, &
3160 & msg=esmf_logerr_passthru, &
3162 & file=myfile))
THEN
3166 CALL esmf_fieldget (cfield, &
3167 & localde=localde, &
3168 & farrayptr=ptr2d, &
3169 & computationallbound=clbnd, &
3170 & computationalubound=cubnd, &
3172 IF (esmf_logfounderror(rctocheck=rc, &
3173 & msg=esmf_logerr_passthru, &
3175 & file=myfile))
THEN
3181 CALL esmf_gridgetitem (grid, &
3182 & esmf_griditem_mask, &
3183 & staggerloc=sloc, &
3184 & localde=localde, &
3185 & farrayptr=msk2d, &
3187 IF (esmf_logfounderror(rctocheck=rc, &
3188 & msg=esmf_logerr_passthru, &
3190 & file=myfile))
THEN
3196 DO j=clbnd(2),cubnd(2)
3197 DO i=clbnd(1),cubnd(1)
3198 IF ((bdy2d(i,j).lt.
tol_dp).and. &
3199 & (msk2d(i,j).ne.dstlandmask))
THEN
3200 IF (ptr2d(i,j).lt.0.5_dp)
THEN
3212 IF (
associated(ptr2d))
THEN
3215 IF (
associated(bdy2d))
THEN
3218 IF (
associated(msk2d))
THEN
3227 CALL esmf_fielddestroy (afield, rc=rc)
3228 IF (esmf_logfounderror(rctocheck=rc, &
3229 & msg=esmf_logerr_passthru, &
3231 & file=myfile))
THEN
3235 CALL esmf_fielddestroy (bfield, rc=rc)
3236 IF (esmf_logfounderror(rctocheck=rc, &
3237 & msg=esmf_logerr_passthru, &
3239 & file=myfile))
THEN
3243 CALL esmf_fielddestroy (cfield, rc=rc)
3244 IF (esmf_logfounderror(rctocheck=rc, &
3245 & msg=esmf_logerr_passthru, &
3247 & file=myfile))
THEN
3252 WRITE (
trac,
'(a,a,i0)')
'<== Exiting Coupler_FindUnmapped', &