54# ifdef ADJUST_BOUNDARY
55 INTERFACE extract_boundary
56 MODULE PROCEDURE extract_boundary2d
57 MODULE PROCEDURE extract_boundary3d
58 END INTERFACE extract_boundary
61 INTERFACE extract_field
62 MODULE PROCEDURE extract_field2d
63 MODULE PROCEDURE extract_field3d
64 MODULE PROCEDURE extract_field4d
65 END INTERFACE extract_field
67 PUBLIC :: interp_coords
69# ifdef ADJUST_BOUNDARY
70 PRIVATE :: average_boundary2d
71 PRIVATE :: average_boundary3d
73 PRIVATE :: average_field2d
74 PRIVATE :: average_field3d
75# ifdef ADJUST_BOUNDARY
76 PRIVATE :: decimate_boundary2d
77 PRIVATE :: decimate_boundary3d
79 PRIVATE :: decimate_field2d
80 PRIVATE :: decimate_field3d
81 PRIVATE :: decimate_field4d
82 PRIVATE :: interp_field2d
83 PRIVATE :: interp_field3d
84 PRIVATE :: interp_field4d
85 PRIVATE :: regrid_field2d
86 PRIVATE :: regrid_field3d
90 logical,
parameter :: ParallelOutput = .false.
92 integer,
parameter :: Bilinear = 0
93 integer,
parameter :: Bicubic = 1
97# ifdef ADJUST_BOUNDARY
99 SUBROUTINE extract_boundary2d (ng, model, tile, &
100 & gtype, ncvname, tindex, &
102 & Imin, Imax, Jmin, Jmax, &
139 integer,
intent(in) :: ng, model, tile
140 integer,
intent(in) :: gtype, tindex, Extract_flag
141 integer,
intent(in) :: Imin, Imax, Jmin, Jmax
142 integer,
intent(in) :: Nrec
143 integer,
intent(in) :: Npts
144 integer,
intent(out) :: start(:), total(:)
146 real(r8),
intent(inout) :: Bdat(:)
148 character (len=*),
intent(in) :: ncvname
152 character (len=*),
parameter :: MyFile = &
153 & __FILE__//
", extract_boundary2d"
161 IF (extract_flag.ge.2)
THEN
162 CALL decimate_boundary2d (ng, model, tile, &
163 & gtype, ncvname, tindex, extract_flag, &
164 & imin, imax, jmin, jmax, &
168 ELSE IF (extract_flag.eq.1)
THEN
172 END SUBROUTINE extract_boundary2d
174 SUBROUTINE extract_boundary3d (ng, model, tile, &
175 & gtype, ncvname, tindex, &
177 & Imin, Imax, Jmin, Jmax, LBk, UBk, &
216 integer,
intent(in) :: ng, model, tile
217 integer,
intent(in) :: gtype, tindex, Extract_flag
218 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, LBk, UBk
219 integer,
intent(in) :: Nrec
220 integer,
intent(in) :: Npts
221 integer,
intent(out) :: start(:), total(:)
223 real(r8),
intent(inout) :: Bdat(:)
225 character (len=*),
intent(in) :: ncvname
231 character (len=*),
parameter :: MyFile = &
232 & __FILE__//
", extract_boundary3d"
238 IF (extract_flag.ge.2)
THEN
239 CALL decimate_boundary3d (ng, model, tile, &
240 & gtype, ncvname, tindex, extract_flag, &
241 & imin, imax, jmin, jmax, lbk, ubk, &
245 ELSE IF (extract_flag.eq.1)
THEN
249 END SUBROUTINE extract_boundary3d
252 SUBROUTINE extract_field2d (ng, model, tile, &
253 & gtype, ifield, tindex, Extract_Flag, &
254 & Imin, Imax, Jmin, Jmax, &
291 integer,
intent(in) :: ng, model, tile
292 integer,
intent(in) :: gtype, ifield, tindex, Extract_Flag
293 integer,
intent(in) :: Imin, Imax, Jmin, Jmax
294 integer,
intent(in) :: Npts
295 integer,
intent(out) :: start(:), total(:)
297 real(r8),
intent(inout) :: Fdat(:)
301 character (len=*),
parameter :: MyFile = &
302 & __FILE__//
", extract_field2d"
310 IF (extract_flag.ge.2)
THEN
311 CALL decimate_field2d (ng, model, tile, &
312 & gtype, ifield, tindex, extract_flag, &
313 & imin, imax, jmin, jmax, &
316 ELSE IF (extract_flag.eq.1)
THEN
317 IF (paralleloutput)
THEN
318 CALL interp_field2d (ng, model, tile, &
319 & gtype, ifield, tindex, &
320 & imin, imax, jmin, jmax, &
324 CALL interp_field2d_global (ng, model, tile, &
325 & gtype, ifield, tindex, &
326 & imin, imax, jmin, jmax, &
333 END SUBROUTINE extract_field2d
335 SUBROUTINE extract_field3d (ng, model, tile, &
336 & gtype, ifield, tindex, Extract_Flag, &
337 & Imin, Imax, Jmin, Jmax, Kmin, Kmax, &
375 integer,
intent(in) :: ng, model, tile
376 integer,
intent(in) :: gtype, ifield, tindex, Extract_Flag
377 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, Kmin, Kmax
378 integer,
intent(in) :: Npts
379 integer,
intent(out) :: start(:), total(:)
381 real(r8),
intent(inout) :: Fdat(:)
385 character (len=*),
parameter :: MyFile = &
386 & __FILE__//
", extract_field3d"
394 IF (extract_flag.ge.2)
THEN
395 CALL decimate_field3d (ng, model, tile, &
396 & gtype, ifield, tindex, extract_flag, &
397 & imin, imax, jmin, jmax, &
401 ELSE IF (extract_flag.eq.1)
THEN
402 IF (paralleloutput)
THEN
403 CALL interp_field3d (ng, model, tile, &
404 & gtype, ifield, tindex, &
405 & imin, imax, jmin, jmax, &
410 CALL interp_field3d_global (ng, model, tile, &
411 & gtype, ifield, tindex, &
412 & imin, imax, jmin, jmax, &
420 END SUBROUTINE extract_field3d
422 SUBROUTINE extract_field4d (ng, model, tile, &
423 & gtype, ifield, tindex, Extract_Flag, &
424 & Imin, Imax, Jmin, Jmax, Kmin, Kmax, &
468 integer,
intent(in) :: ng, model, tile
469 integer,
intent(in) :: gtype, ifield, tindex, Extract_Flag
470 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, Kmin, Kmax
471 integer,
intent(in) :: fourth, Loff
472 integer,
intent(in) :: Npts
473 integer,
intent(out) :: start(:), total(:)
475 real(r8),
intent(inout) :: Fdat(:)
479 character (len=*),
parameter :: MyFile = &
480 & __FILE__//
", extract_field4d"
488 IF (extract_flag.ge.2)
THEN
489 CALL decimate_field4d (ng, model, tile, &
490 & gtype, ifield, tindex, extract_flag, &
491 & imin, imax, jmin, jmax, &
492 & kmin, kmax, fourth, loff, &
495 ELSE IF (extract_flag.eq.1)
THEN
496 IF (paralleloutput)
THEN
497 CALL interp_field4d (ng, model, tile, &
498 & gtype, ifield, tindex, &
499 & imin, imax, jmin, jmax, &
500 & kmin, kmax, fourth, loff, &
504 CALL interp_field4d_global (ng, model, tile, &
505 & gtype, ifield, tindex, &
506 & imin, imax, jmin, jmax, &
507 & kmin, kmax, fourth, loff, &
514 END SUBROUTINE extract_field4d
516# ifdef ADJUST_BOUNDARY
518 SUBROUTINE average_boundary2d (ng, model, tile, &
519 & gtype, ncvname, Extract_Flag, &
520 & Imin, Imax, Jmin, Jmax, Nrec, &
551 integer,
intent(in) :: ng, model, tile
552 integer,
intent(in) :: gtype, Extract_Flag
553 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, Nrec
554 integer,
intent(in) :: Npts
556 real(r8),
intent(in) :: Bdat(:)
557 real(r8),
intent(out) :: Bavg(:)
559 character (len=*),
intent(in) :: ncvname
563 logical,
dimension(4) :: bounded
565 integer :: bc, i, ib, ij, ir, j, rc
568 character (len=*),
parameter :: MyFile = &
569 & __FILE__//
", average_boundary2d"
588 IF (extract_flag.ge.2)
THEN
601 IF (bounded(ib).and. &
605 bavg(ij)=0.5_r8*(bdat(ij)+bdat(ij+1))
620 IF (bounded(ib).and. &
624 bavg(ij)=0.5_r8*(bdat(ij)+bdat(ij+1))
634 END SUBROUTINE average_boundary2d
636 SUBROUTINE average_boundary3d (ng, model, tile, &
637 & gtype, ncvname, Extract_Flag, &
638 & Imin, Imax, Jmin, Jmax, LBk, UBk, &
672 integer,
intent(in) :: ng, model, tile
673 integer,
intent(in) :: gtype, Extract_Flag
674 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, LBk, UBk, Nrec
675 integer,
intent(in) :: Npts
677 real(r8),
intent(in) :: Bdat(:)
678 real(r8),
intent(out) :: Bavg(:)
680 character (len=*),
intent(in) :: ncvname
684 logical,
dimension(4) :: bounded
686 integer :: bc, i, ib, ij, ir, j, k, kc, rc
687 integer :: IJKlen, IorJ, Klen
689 character (len=*),
parameter :: MyFile = &
690 & __FILE__//
", average_boundary3d"
709 IF (extract_flag.ge.2)
THEN
724 IF (bounded(ib).and. &
730 bavg(ij)=0.5_r8*(bdat(ij)+bdat(ij+1))
746 IF (bounded(ib).and. &
752 bavg(ij)=0.5_r8*(bdat(ij)+bdat(ij+1))
763 END SUBROUTINE average_boundary3d
766 SUBROUTINE average_field2d (ng, model, tile, &
767 & gtype, ifield, Extract_Flag, &
768 & Imin, Imax, Jmin, Jmax, &
798 integer,
intent(in) :: ng, model, tile
799 integer,
intent(in) :: gtype, ifield, Extract_Flag
800 integer,
intent(in) :: Imin, Imax, Jmin, Jmax
801 integer,
intent(in) :: Npts
803 real(r8),
intent(in) :: Fdat(:)
804 real(r8),
intent(out) :: Favg(:)
809 integer :: Ioff, Joff, Isize, Jsize
811 character (len=*),
parameter :: MyFile = &
812 & __FILE__//
", average_field2d"
818 IF (extract_flag.ge.2)
THEN
833 ij=i+ioff+(j-1+joff)*isize
834 favg(ij)=0.5_r8*(fdat(ij)+fdat(ij+1))
847 ij=i+ioff+(j-1+joff)*isize
848 favg(ij)=0.5_r8*(fdat(ij)+fdat(ij+isize))
856 END SUBROUTINE average_field2d
858 SUBROUTINE average_field3d (ng, model, tile, &
859 & gtype, ifield, Extract_Flag, &
860 & Imin, Imax, Jmin, Jmax, Kmin, Kmax, &
892 integer,
intent(in) :: ng, model, tile
893 integer,
intent(in) :: gtype, ifield, Extract_Flag
894 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, Kmin, Kmax
895 integer,
intent(in) :: Npts
897 real(r8),
intent(in) :: Fdat(:)
898 real(r8),
intent(out) :: Favg(:)
902 integer :: i, j, k, ij, ijk
903 integer :: Ioff, Joff, Koff
904 integer :: Isize, Jsize, Ksize, IJsize
906 character (len=*),
parameter :: MyFile = &
907 & __FILE__//
", average_field3d"
913 IF (extract_flag.ge.2)
THEN
919 SELECT CASE (abs(gtype))
932 ij=i+ioff+(j-1+joff)*isize
933 ijk=ij+(k-1+koff)*ijsize
934 favg(ijk)=0.5_r8*(fdat(ijk)+fdat(ijk+1))
950 ij=i+ioff+(j-1+joff)*isize
951 ijk=ij+(k-1+koff)*ijsize
952 favg(ijk)=0.5_r8*(fdat(ijk)+fdat(ijk+isize))
961 END SUBROUTINE average_field3d
963# ifdef ADJUST_BOUNDARY
965 SUBROUTINE decimate_boundary2d (ng, model, tile, &
966 & gtype, ncvname, tindex, &
968 & Imin, Imax, Jmin, Jmax, &
1006 integer,
intent(in) :: ng, model, tile
1007 integer,
intent(in) :: gtype, tindex, Extract_Flag
1008 integer,
intent(in) :: Imin, Imax, Jmin, Jmax
1009 integer,
intent(in) :: Nrec, Npts
1010 integer,
intent(out) :: start(:), total(:)
1012 real(r8),
intent(inout) :: Bdat(:)
1014 character (len=*),
intent(in) :: ncvname
1018 integer :: bc, ib, ic, ij, ir, ifactor, rc
1019 integer :: Idim, IJdim, IorJ, Mpts
1021 real(r8) :: Bwrk(SIZE(Bdat))
1023 character (len=*),
parameter :: MyFile = &
1024 & __FILE__//
", decimate_boundary2d"
1032 ifactor=abs(extract_flag)
1048 DO ij=1,iorj,ifactor
1052 IF ((ir.eq.1).and.(ib.eq.1)) ijdim=ic
1061 CALL average_boundary2d (ng, model, tile, &
1062 & gtype, ncvname, extract_flag, &
1063 & imin, imax, jmin, jmax, nrec, &
1072 DO ij=1,iorj,ifactor
1076 IF ((ir.eq.1).and.(ib.eq.1)) ijdim=ic
1085 CALL average_boundary2d (ng, model, tile, &
1086 & gtype, ncvname, extract_flag, &
1087 & imin, imax, jmin, jmax, nrec, &
1096 DO ij=1,iorj,ifactor
1100 IF ((ir.eq.1).and.(ib.eq.1)) ijdim=ic
1110 WRITE (
stdout,10) gtype, &
1111 &
'not supported for decimation:', &
1130 10
FORMAT (
' DECIMATE_BOUNDARY2D - Staggered variable, gtype = ', &
1134 END SUBROUTINE decimate_boundary2d
1136 SUBROUTINE decimate_boundary3d (ng, model, tile, &
1137 & gtype, ncvname, tindex, &
1139 & Imin, Imax, Jmin, Jmax, LBk, UBk, &
1179 integer,
intent(in) :: ng, model, tile
1180 integer,
intent(in) :: gtype, tindex, Extract_Flag
1181 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, LBk, UBk
1182 integer,
intent(in) :: Nrec, Npts
1183 integer,
intent(out) :: start(:), total(:)
1185 real(r8),
intent(inout) :: Bdat(:)
1187 character (len=*),
intent(in) :: ncvname
1191 integer :: bc, ib, ic, ij, ir, ifactor, k, rc
1192 integer :: Idim, IJdim, IJKlen, IorJ, Klen, Mpts
1194 real(r8) :: Bwrk(SIZE(Bdat))
1196 character (len=*),
parameter :: MyFile = &
1197 & __FILE__//
", decimate_boundary3d"
1205 ifactor=abs(extract_flag)
1224 DO ij=1,iorj,ifactor
1228 IF ((ir.eq.1).and.(ib.eq.1).and.(k.eq.lbk)) ijdim=ic
1238 CALL average_boundary3d (ng, model, tile, &
1239 & gtype, ncvname, extract_flag, &
1240 & imin, imax, jmin, jmax, lbk, ubk, &
1251 DO ij=1,iorj,ifactor
1255 IF ((ir.eq.1).and.(ib.eq.1).and.(k.eq.lbk)) ijdim=ic
1265 CALL average_boundary3d (ng, model, tile, &
1266 & gtype, ncvname, extract_flag, &
1267 & imin, imax, jmin, jmax, lbk, ubk, &
1278 DO ij=1,iorj,ifactor
1282 IF ((ir.eq.1).and.(ib.eq.1).and.(k.eq.lbk)) ijdim=ic
1293 WRITE (
stdout,10) gtype, &
1294 &
'not supported for decimation:', &
1315 10
FORMAT (
' DECIMATE_BOUNDARY3D - Staggered variable, gtype = ', &
1319 END SUBROUTINE decimate_boundary3d
1322 SUBROUTINE decimate_field2d (ng, model, tile, &
1323 & gtype, ifield, tindex, Extract_Flag, &
1324 & Imin, Imax, Jmin, Jmax, &
1359 integer,
intent(in) :: ng, model, tile
1360 integer,
intent(in) :: gtype, ifield, tindex, Extract_Flag
1361 integer,
intent(in) :: Imin, Imax, Jmin, Jmax
1362 integer,
intent(in) :: Npts
1363 integer,
intent(out) :: start(:), total(:)
1365 real(r8),
intent(inout) :: Fdat(:)
1369 integer :: i, j, ij, ic, jc, ifactor
1370 integer :: Idim, Jdim, Ioff, Joff, Isize, Jsize, Mpts
1372 real(r8) :: Fwrk(SIZE(Fdat))
1374 character (len=*),
parameter :: MyFile = &
1375 & __FILE__//
", decimate_field2d"
1383 ifactor=abs(extract_flag)
1399 DO j=jmin,jmax,ifactor
1401 DO i=imin,imax,ifactor
1402 ij=i+ioff+(j-1+joff)*isize
1406 IF (j.eq.jmin) idim=ic
1415 CALL average_field2d (ng, model, tile, &
1416 & gtype, ifield, extract_flag, &
1417 & imin, imax, jmin, jmax, &
1425 DO j=jmin,jmax,ifactor
1427 DO i=imin,imax,ifactor
1428 ij=i+ioff+(j-1+joff)*isize
1431 fdat(ic)=fwrk(ij)*extract(ng)%Gmask_u(ic)
1436 IF (j.eq.jmin) idim=ic
1445 CALL average_field2d (ng, model, tile, &
1446 & gtype, ifield, extract_flag, &
1447 & imin, imax, jmin, jmax, &
1455 DO j=jmin,jmax,ifactor
1457 DO i=imin,imax,ifactor
1458 ij=i+ioff+(j-1+joff)*isize
1461 fdat(ic)=fwrk(ij)*extract(ng)%Gmask_v(ic)
1466 IF (j.eq.jmin) idim=ic
1476 WRITE (
stdout,10) gtype, &
1477 &
'not supported for decimation:', &
1478 & trim(
vname(1,ifield))
1487 IF (gtype.gt.0)
THEN
1503 10
FORMAT (
' DECIMATE_FIELD2D - Staggered variable, gtype = ', i0, &
1507 END SUBROUTINE decimate_field2d
1509 SUBROUTINE decimate_field3d (ng, model, tile, &
1510 & gtype, ifield, tindex, Extract_Flag, &
1511 & Imin, Imax, Jmin, Jmax, Kmin, Kmax, &
1548 integer,
intent(in) :: ng, model, tile
1549 integer,
intent(in) :: gtype, ifield, tindex, Extract_Flag
1550 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, Kmin, Kmax
1551 integer,
intent(in) :: Npts
1552 integer,
intent(out) :: start(:), total(:)
1554 real(r8),
intent(inout) :: Fdat(:)
1558 integer :: i, j, k, ij, ijk, ic, jc, ifactor, mc
1559 integer :: Idim, Jdim, Ioff, Joff, Koff
1560 integer :: Isize, IJsize, Jsize, Ksize, Mpts
1562 real(r8) :: Fwrk(SIZE(Fdat))
1564 character (len=*),
parameter :: MyFile = &
1565 & __FILE__//
", decimate_field3d"
1573 ifactor=abs(extract_flag)
1593 DO j=jmin,jmax,ifactor
1594 DO i=imin,imax,ifactor
1595 ij=i+ioff+(j-1+joff)*isize
1596 ijk=ij+(k-1+koff)*ijsize
1600 IF ((j.eq.jmin).and.(k.eq.kmin)) idim=ic
1601 IF (k.eq.kmin) jc=jc+1
1611 CALL average_field3d (ng, model, tile, &
1612 & gtype, ifield, extract_flag, &
1613 & imin, imax, jmin, jmax, kmin, kmax, &
1626 DO j=jmin,jmax,ifactor
1627 DO i=imin,imax,ifactor
1628 ij=i+ioff+(j-1+joff)*isize
1629 ijk=ij+(k-1+koff)*ijsize
1633 fdat(ic)=fwrk(ijk)*extract(ng)%Gmask_u(mc)
1638 IF ((j.eq.jmin).and.(k.eq.kmin)) idim=ic
1639 IF (k.eq.kmin) jc=jc+1
1649 CALL average_field3d (ng, model, tile, &
1650 & gtype, ifield, extract_flag, &
1651 & imin, imax, jmin, jmax, kmin, kmax, &
1664 DO j=jmin,jmax,ifactor
1665 DO i=imin,imax,ifactor
1666 ij=i+ioff+(j-1+joff)*isize
1667 ijk=ij+(k-1+koff)*ijsize
1671 fdat(ic)=fwrk(ijk)*extract(ng)%Gmask_v(mc)
1676 IF ((j.eq.jmin).and.(k.eq.kmin)) idim=ic
1677 IF (k.eq.kmin) jc=jc+1
1695 DO j=jmin,jmax,ifactor
1696 DO i=imin,imax,ifactor
1697 ij=i+ioff+(j-1+joff)*isize
1698 ijk=ij+(k-1+koff)*ijsize
1702 IF ((j.eq.jmin).and.(k.eq.kmin)) idim=ic
1703 IF (k.eq.kmin) jc=jc+1
1714 WRITE (
stdout,10) gtype, &
1715 &
'not supported for decimation:', &
1716 & trim(
vname(1,ifield))
1725 IF (gtype.gt.0)
THEN
1743 10
FORMAT (
' DECIMATE_FIELD3D - Staggered variable, gtype = ', i0, &
1747 END SUBROUTINE decimate_field3d
1749 SUBROUTINE decimate_field4d (ng, model, tile, &
1750 & gtype, ifield, tindex, Extract_Flag, &
1751 & Imin, Imax, Jmin, Jmax, Kmin, Kmax, &
1793 integer,
intent(in) :: ng, model, tile
1794 integer,
intent(in) :: gtype, ifield, tindex, Extract_Flag
1795 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, Kmin, Kmax
1796 integer,
intent(in) :: fourth, Loff
1797 integer,
intent(in) :: Npts
1798 integer,
intent(out) :: start(:), total(:)
1800 real(r8),
intent(inout) :: Fdat(:)
1804 integer :: i, j, k, ij, ijk, ic, jc, ifactor, mc
1805 integer :: Idim, Jdim, Ioff, Joff, Koff
1806 integer :: Isize, IJsize, Jsize, Ksize, Mpts
1808 real(r8) :: Fwrk(SIZE(Fdat))
1810 character (len=*),
parameter :: MyFile = &
1811 & __FILE__//
", decimate_field4d"
1819 ifactor=abs(extract_flag)
1839 DO j=jmin,jmax,ifactor
1840 DO i=imin,imax,ifactor
1841 ij=i+ioff+(j-1+joff)*isize
1842 ijk=ij+(k-1+koff)*ijsize
1846 IF ((j.eq.jmin).and.(k.eq.kmin)) idim=ic
1847 IF (k.eq.kmin) jc=jc+1
1857 CALL average_field3d (ng, model, tile, &
1858 & gtype, ifield, extract_flag, &
1859 & imin, imax, jmin, jmax, kmin, kmax, &
1872 DO j=jmin,jmax,ifactor
1873 DO i=imin,imax,ifactor
1874 ij=i+ioff+(j-1+joff)*isize
1875 ijk=ij+(k-1+koff)*ijsize
1879 fdat(ic)=fwrk(ijk)*extract(ng)%Gmask_u(mc)
1884 IF ((j.eq.jmin).and.(k.eq.kmin)) idim=ic
1885 IF (k.eq.kmin) jc=jc+1
1895 CALL average_field3d (ng, model, tile, &
1896 & gtype, ifield, extract_flag, &
1897 & imin, imax, jmin, jmax, kmin, kmax, &
1910 DO j=jmin,jmax,ifactor
1911 DO i=imin,imax,ifactor
1912 ij=i+ioff+(j-1+joff)*isize
1913 ijk=ij+(k-1+koff)*ijsize
1917 fdat(ic)=fwrk(ijk)*extract(ng)%Gmask_v(mc)
1922 IF ((j.eq.jmin).and.(k.eq.kmin)) idim=ic
1923 IF (k.eq.kmin) jc=jc+1
1941 DO j=jmin,jmax,ifactor
1942 DO i=imin,imax,ifactor
1943 ij=i+ioff+(j-1+joff)*isize
1944 ijk=ij+(k-1+koff)*ijsize
1948 IF ((j.eq.jmin).and.(k.eq.kmin)) idim=ic
1949 IF (k.eq.kmin) jc=jc+1
1960 10
FORMAT (
' DECIMATE_FIELD4D - Staggered variable, gtype = ', &
1961 & i0,/,20x,
'not supported for field: ',a)
1969 IF (gtype.gt.0)
THEN
1976 start(4)=fourth+loff
1982 start(1)=1+(fourth+loff-1)*mpts
1990 END SUBROUTINE decimate_field4d
1992 SUBROUTINE interp_coords (ng, tile, model, gtype, &
2050 integer,
intent(in) :: ng, tile, model, gtype
2052 real(r8),
intent(out) :: Ainp(:)
2054 real(r8),
intent(out) :: Minp(:)
2056 real(r8),
intent(out) :: Xinp(:)
2057 real(r8),
intent(out) :: Yinp(:)
2059 real(r8),
intent(out) :: Mout(:)
2061 real(r8),
intent(out) :: Xout(:)
2062 real(r8),
intent(out) :: Yout(:)
2063 real(r8),
intent(out) :: Iout(:)
2064 real(r8),
intent(out) :: Jout(:)
2068 integer :: LBi_inp, UBi_inp, LBj_inp, UBj_inp
2069 integer :: LBi_out, UBi_out, LBj_out, UBj_out
2070 integer :: Is_inp, Ie_inp, Js_inp, Je_inp
2071 integer :: Is_out, Ie_out, Js_out, Je_out
2072 integer :: Isize, Jsize, Msize, Nsize
2073 integer :: Cgrid, Npts, ghost, i, ic, j
2077 real(r8),
allocatable :: angle(:,:)
2079 real(r8),
pointer :: mask_inp(:,:), mask_out(:,:)
2081 real(r8),
pointer :: Xi(:,:), Yi(:,:)
2082 real(r8),
pointer :: Xo(:,:), Yo(:,:)
2084 character (len=*),
parameter :: MyFile = &
2085 & __FILE__//
", interp_coord"
2087# include "set_bounds.h"
2097 lbi_inp=
bounds(ng)%LBi(tile)
2098 ubi_inp=
bounds(ng)%UBi(tile)
2099 lbj_inp=
bounds(ng)%LBj(tile)
2100 ubj_inp=
bounds(ng)%UBj(tile)
2102 lbi_out=xtr_bounds(ng)%LBi(tile)
2103 ubi_out=xtr_bounds(ng)%UBi(tile)
2104 lbj_out=xtr_bounds(ng)%LBj(tile)
2105 ubj_out=xtr_bounds(ng)%UBj(tile)
2123 is_out=xtr_iobounds(ng)%ILB_psi
2124 ie_out=xtr_iobounds(ng)%IUB_psi
2125 js_out=xtr_iobounds(ng)%JLB_psi
2126 je_out=xtr_iobounds(ng)%JUB_psi
2131 xo => extract(ng)%lonp
2132 yo => extract(ng)%latp
2136 xo => extract(ng)%xp
2137 yo => extract(ng)%yp
2140 mask_inp =>
grid(ng)%pmask
2141 mask_out => extract(ng)%pmask
2155 is_out=xtr_iobounds(ng)%ILB_rho
2156 ie_out=xtr_iobounds(ng)%IUB_rho
2157 js_out=xtr_iobounds(ng)%JLB_rho
2158 je_out=xtr_iobounds(ng)%JUB_rho
2163 xo => extract(ng)%lonr
2164 yo => extract(ng)%latr
2168 xo => extract(ng)%xr
2169 yo => extract(ng)%yr
2172 mask_inp =>
grid(ng)%rmask
2173 mask_out => extract(ng)%rmask
2187 is_out=xtr_iobounds(ng)%ILB_u
2188 ie_out=xtr_iobounds(ng)%IUB_u
2189 js_out=xtr_iobounds(ng)%JLB_u
2190 je_out=xtr_iobounds(ng)%JUB_u
2195 xo => extract(ng)%lonu
2196 yo => extract(ng)%latu
2200 xo => extract(ng)%xu
2201 yo => extract(ng)%yu
2204 mask_inp =>
grid(ng)%umask
2205 mask_out => extract(ng)%umask
2220 is_out=xtr_iobounds(ng)%ILB_v
2221 ie_out=xtr_iobounds(ng)%IUB_v
2222 js_out=xtr_iobounds(ng)%JLB_v
2223 je_out=xtr_iobounds(ng)%JUB_v
2228 xo => extract(ng)%lonv
2229 yo => extract(ng)%latv
2233 xo => extract(ng)%xv
2234 yo => extract(ng)%yv
2237 mask_inp =>
grid(ng)%vmask
2238 mask_out => extract(ng)%vmask
2243 isize=ie_inp-is_inp+1
2244 jsize=je_inp-js_inp+1
2245 msize=ie_out-is_out+1
2246 nsize=je_out-js_out+1
2250 IF (.not.
allocated(angle))
THEN
2251 allocate ( angle(lbi_inp:ubi_inp,lbj_inp:ubj_inp) )
2254 IF (cgrid.eq.1)
THEN
2257 angle(i,j)=0.25_r8*(
grid(ng)%angler(i-1,j-1)+ &
2258 &
grid(ng)%angler(i-1,j )+ &
2259 &
grid(ng)%angler(i ,j-1)+ &
2260 &
grid(ng)%angler(i ,j ))
2263 ELSE IF (cgrid.eq.2)
THEN
2266 angle(i,j)=
grid(ng)%angler(i,j)
2269 ELSE IF (cgrid.eq.3)
THEN
2272 angle(i,j)=0.5_r8*(
grid(ng)%angler(i-1,j)+ &
2273 &
grid(ng)%angler(i ,j))
2276 ELSE IF (cgrid.eq.4)
THEN
2279 angle(i,j)=0.5_r8*(
grid(ng)%angler(i,j-1)+ &
2280 &
grid(ng)%angler(i,j ))
2294 & lbi_inp, ubi_inp, lbj_inp, ubj_inp, &
2295 & 0, gtype, scale, &
2297 & mask_inp, npts, minp, .false.)
2301 & lbi_inp, ubi_inp, lbj_inp, ubj_inp, &
2302 & 0, gtype, scale, &
2306 & angle, npts, ainp, .false.)
2309 & lbi_inp, ubi_inp, lbj_inp, ubj_inp, &
2310 & 0, gtype, scale, &
2314 & xi, npts, xinp, .false.)
2317 & lbi_inp, ubi_inp, lbj_inp, ubj_inp, &
2318 & 0, gtype, scale, &
2322 & yi, npts, yinp, .false.)
2326 & lbi_inp, ubi_inp, lbj_inp, ubj_inp, &
2327 & 0, gtype, scale, &
2331 & xi, npts, xinp, .false.)
2334 & lbi_inp, ubi_inp, lbj_inp, ubj_inp, &
2335 & 0, gtype, scale, &
2339 & yi, npts, yinp, .false.)
2343 CALL mp_gather2d_xtr (ng, model, &
2344 & lbi_out, ubi_out, lbj_out, ubj_out, &
2345 & 0, gtype, scale, &
2347 & mask_out, npts, mout, .false.)
2350 CALL mp_gather2d_xtr (ng, model, &
2351 & lbi_out, ubi_out, lbj_out, ubj_out, &
2352 & 0, gtype, scale, &
2356 & xo, npts, xout, .false.)
2358 CALL mp_gather2d_xtr (ng, model, &
2359 & lbi_out, ubi_out, lbj_out, ubj_out, &
2360 & 0, gtype, scale, &
2364 & yo, npts, yout, .false.)
2372 ainp=pack(angle, .true.)
2374 minp=pack(mask_inp, .true.)
2376 xinp=pack(xi, .true.)
2377 yinp=pack(yi, .true.)
2380 mout=pack(mask_out, .true.)
2382 xout=pack(xo, .true.)
2383 yout=pack(yo, .true.)
2395 & 1, isize, 1, jsize, &
2396 & 1, isize, 1, jsize, &
2397 & ainp, xinp, yinp, &
2398 & 1, msize, 1, nsize, &
2399 & 1, msize, 1, nsize, &
2409 & 1, isize, 1, jsize, &
2410 & 1, isize, 1, jsize, &
2411 & ainp, xinp, yinp, &
2412 & lbi_out, ubi_out, lbj_out, ubj_out, &
2413 & is_out, ie_out, js_out, je_out, &
2421 IF (
allocated(angle))
deallocate ( angle )
2424 END SUBROUTINE interp_coords
2426 SUBROUTINE interp_field2d (ng, model, tile, &
2427 & gtype, ifield, tindex, &
2428 & Imin, Imax, Jmin, Jmax, &
2463 integer,
intent(in) :: ng, model, tile
2464 integer,
intent(in) :: gtype, ifield, tindex
2465 integer,
intent(in) :: Imin, Imax, Jmin, Jmax
2466 integer,
intent(in) :: Npts
2467 integer,
intent(out) :: start(:), total(:)
2469 real(r8),
intent(inout) :: Fdat(:)
2475 integer :: ghost, i, j, ij, ic, jc, ifactor, method
2476 integer :: Cgrid, Ilen, Jlen, Ioff, Joff, Isize, Jsize
2477 integer :: Istr, Iend, Jstr, Jend
2478 integer :: LBi, UBi, LBj, UBj
2480 real(r8) :: Fmin, Fmax
2482 real(r8) :: Fwrk(Npts)
2484 character (len=*),
parameter :: MyFile = &
2485 & __FILE__//
", extract_field2d"
2500 lbi=xtr_bounds(ng)%LBi(tile)
2501 ubi=xtr_bounds(ng)%UBi(tile)
2502 lbj=xtr_bounds(ng)%LBj(tile)
2503 ubj=xtr_bounds(ng)%UBj(tile)
2515 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
2516 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
2517 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
2518 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
2523 CALL regrid_field2d (ng, model, tile, gtype, ifield, &
2524 & method, landfill, &
2525 & 1, isize, 1, jsize, &
2526 &
grid(ng) % Gx_rho, &
2527 &
grid(ng) % Gy_rho, &
2529 &
grid(ng) % Gmask_rho, &
2532 & istr, iend, jstr, jend, &
2533 & lbi, ubi, lbj, ubj, &
2534 & extract(ng) % Iout_rho, &
2535 & extract(ng) % Jout_rho, &
2536 & extract(ng) % lonr, &
2537 & extract(ng) % latr, &
2539 & extract(ng) % rmask, &
2541 & npts, fdat, fmin, fmax)
2543 CALL regrid_field2d (ng, model, tile, gtype, ifield, &
2544 & method, landfill, &
2545 & 1, isize, 1, jsize, &
2546 &
grid(ng) % Gx_rho, &
2547 &
grid(ng) % Gy_rho, &
2549 &
grid(ng) % Gmask_rho, &
2552 & istr, iend, jstr, jend, &
2553 & lbi, ubi, lbj, ubj, &
2554 & extract(ng) % Iout_rho, &
2555 & extract(ng) % Jout_rho, &
2556 & extract(ng) % xr, &
2557 & extract(ng) % Yr, &
2559 & extract(ng) % rmask, &
2561 & npts, fdat, fmin, fmax)
2569 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
2570 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
2571 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
2572 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
2577 CALL regrid_field2d (ng, model, tile, gtype, ifield, &
2578 & method, landfill, &
2579 & 1, isize, 1, jsize, &
2580 &
grid(ng) % Gx_u, &
2581 &
grid(ng) % Gy_u, &
2583 &
grid(ng) % Gmask_u, &
2586 & istr, iend, jstr, jend, &
2587 & lbi, ubi, lbj, ubj, &
2588 & extract(ng) % Iout_u, &
2589 & extract(ng) % Jout_u, &
2590 & extract(ng) % lonu, &
2591 & extract(ng) % latu, &
2593 & extract(ng) % umask, &
2595 & npts, fdat, fmin, fmax)
2597 CALL regrid_field2d (ng, model, tile, gtype, ifield, &
2598 & method, landfill, &
2599 & 1, isize, 1, jsize, &
2600 &
grid(ng) % Gx_u, &
2601 &
grid(ng) % Gy_u, &
2603 &
grid(ng) % Gmask_u, &
2606 & istr, iend, jstr, jend, &
2607 & lbi, ubi, lbj, ubj, &
2608 & extract(ng) % Iout_u, &
2609 & extract(ng) % Jout_u, &
2610 & extract(ng) % xu, &
2611 & extract(ng) % yu, &
2613 & extract(ng) % umask, &
2615 & npts, fdat, fmin, fmax)
2623 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
2624 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
2625 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
2626 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
2631 CALL regrid_field2d (ng, model, tile, gtype, ifield, &
2632 & method, landfill, &
2633 & 1, isize, 1, jsize, &
2634 &
grid(ng) % Gx_v, &
2635 &
grid(ng) % Gy_v, &
2637 &
grid(ng) % Gmask_v, &
2640 & istr, iend, jstr, jend, &
2641 & lbi, ubi, lbj, ubj, &
2642 & extract(ng) % Iout_v, &
2643 & extract(ng) % Jout_v, &
2644 & extract(ng) % lonv, &
2645 & extract(ng) % latv, &
2647 & extract(ng) % vmask, &
2649 & npts, fdat, fmin, fmax)
2651 CALL regrid_field2d (ng, model, tile, gtype, ifield, &
2652 & method, landfill, &
2653 & 1, isize, 1, jsize, &
2654 &
grid(ng) % Gx_v, &
2655 &
grid(ng) % Gy_v, &
2657 &
grid(ng) % Gmask_v, &
2660 & istr, iend, jstr, jend, &
2661 & lbi, ubi, lbj, ubj, &
2662 & extract(ng) % Iout_v, &
2663 & extract(ng) % Jout_v, &
2664 & extract(ng) % lonv, &
2665 & extract(ng) % latv, &
2667 & extract(ng) % vmask, &
2669 & npts, fdat, fmin, fmax)
2677 WRITE (
stdout,10) gtype, &
2678 &
'not supported for interpolation:', &
2679 & trim(
vname(1,ifield))
2688 IF (gtype.gt.0)
THEN
2690 total(1)=iend-istr+1
2692 total(2)=jend-jstr+1
2704 10
FORMAT (
' INTERP_FIELD2D - Staggered variable, gtype = ', i0, &
2708 END SUBROUTINE interp_field2d
2710 SUBROUTINE interp_field3d (ng, model, tile, &
2711 & gtype, ifield, tindex, &
2712 & Imin, Imax, Jmin, Jmax, Kmin, Kmax, &
2751 integer,
intent(in) :: ng, model, tile
2752 integer,
intent(in) :: gtype, ifield, tindex
2753 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, Kmin, Kmax
2754 integer,
intent(in) :: Npts
2755 integer,
intent(out) :: start(:), total(:)
2757 real(r8),
intent(inout) :: Fdat(:)
2763 integer :: ghost, i, j, k, ij, ijk, ic, jc, ifactor, method
2764 integer :: Ilen, Jlen, Ioff, Joff, Koff
2765 integer :: Cgrid, Isize, IJsize, Jsize, Ksize
2766 integer :: Istr, Iend, Jstr, Jend
2767 integer :: LBi, UBi, LBj, UBj
2769 real(r8) :: Fmin, Fmax
2771 real(r8) :: Fwrk(Npts)
2773 character (len=*),
parameter :: MyFile = &
2774 & __FILE__//
", interp_field3d"
2790 lbi=xtr_bounds(ng)%LBi(tile)
2791 ubi=xtr_bounds(ng)%UBi(tile)
2792 lbj=xtr_bounds(ng)%LBj(tile)
2793 ubj=xtr_bounds(ng)%UBj(tile)
2802 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
2803 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
2804 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
2805 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
2810 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
2811 & method, landfill, &
2812 & 1, isize, 1, jsize, kmin, kmax, &
2813 &
grid(ng) % Gx_rho, &
2814 &
grid(ng) % Gy_rho, &
2816 &
grid(ng) % Gmask_rho, &
2819 & istr, iend, jstr, jend, &
2820 & lbi, ubi, lbj, ubj, &
2821 & extract(ng) % Iout_rho, &
2822 & extract(ng) % Jout_rho, &
2823 & extract(ng) % lonr, &
2824 & extract(ng) % latr, &
2826 & extract(ng) % rmask, &
2828 & npts, fdat, fmin, fmax)
2830 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
2831 & method, landfill, &
2832 & 1, isize, 1, jsize, kmin, kmax, &
2833 &
grid(ng) % Gx_rho, &
2834 &
grid(ng) % Gy_rho, &
2836 &
grid(ng) % Gmask_rho, &
2839 & istr, iend, jstr, jend, &
2840 & lbi, ubi, lbj, ubj, &
2841 & extract(ng) % Iout_rho, &
2842 & extract(ng) % Jout_rho, &
2843 & extract(ng) % xr, &
2844 & extract(ng) % Yr, &
2846 & extract(ng) % rmask, &
2848 & npts, fdat, fmin, fmax)
2856 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
2857 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
2858 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
2859 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
2864 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
2865 & method, landfill, &
2866 & 1, isize, 1, jsize, kmin, kmax, &
2867 &
grid(ng) % Gx_u, &
2868 &
grid(ng) % Gy_u, &
2870 &
grid(ng) % Gmask_u, &
2873 & istr, iend, jstr, jend, &
2874 & lbi, ubi, lbj, ubj, &
2875 & extract(ng) % Iout_u, &
2876 & extract(ng) % Jout_u, &
2877 & extract(ng) % lonu, &
2878 & extract(ng) % latu, &
2880 & extract(ng) % umask, &
2882 & npts, fdat, fmin, fmax)
2884 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
2885 & method, landfill, &
2886 & 1, isize, 1, jsize, kmin, kmax, &
2887 &
grid(ng) % Gx_u, &
2888 &
grid(ng) % Gy_u, &
2890 &
grid(ng) % Gmask_u, &
2893 & istr, iend, jstr, jend, &
2894 & lbi, ubi, lbj, ubj, &
2895 & extract(ng) % Iout_u, &
2896 & extract(ng) % Jout_u, &
2897 & extract(ng) % xu, &
2898 & extract(ng) % yu, &
2900 & extract(ng) % umask, &
2902 & npts, fdat, fmin, fmax)
2910 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
2911 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
2912 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
2913 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
2918 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
2919 & method, landfill, &
2920 & 1, isize, 1, jsize, kmin, kmax, &
2921 &
grid(ng) % Gx_v, &
2922 &
grid(ng) % Gy_v, &
2924 &
grid(ng) % Gmask_v, &
2927 & istr, iend, jstr, jend, &
2928 & lbi, ubi, lbj, ubj, &
2929 & extract(ng) % Iout_v, &
2930 & extract(ng) % Jout_v, &
2931 & extract(ng) % lonv, &
2932 & extract(ng) % latv, &
2934 & extract(ng) % vmask, &
2936 & npts, fdat, fmin, fmax)
2938 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
2939 & method, landfill, &
2940 & 1, isize, 1, jsize, kmin, kmax, &
2941 &
grid(ng) % Gx_v, &
2942 &
grid(ng) % Gy_v, &
2944 &
grid(ng) % Gmask_v, &
2947 & istr, iend, jstr, jend, &
2948 & lbi, ubi, lbj, ubj, &
2949 & extract(ng) % Iout_v, &
2950 & extract(ng) % Jout_v, &
2951 & extract(ng) % lonv, &
2952 & extract(ng) % latv, &
2954 & extract(ng) % vmask, &
2956 & npts, fdat, fmin, fmax)
2964 WRITE (
stdout,10) gtype, &
2965 &
'not supported for interpolation:', &
2966 & trim(
vname(1,ifield))
2975 IF (gtype.gt.0)
THEN
2977 total(1)=iend-istr+1
2979 total(2)=jend-jstr+1
2993 10
FORMAT (
' INTERP_FIELD3D - Staggered variable, gtype = ', i0, &
2997 END SUBROUTINE interp_field3d
2999 SUBROUTINE interp_field4d (ng, model, tile, &
3000 & gtype, ifield, tindex, &
3001 & Imin, Imax, Jmin, Jmax, Kmin, Kmax, &
3042 integer,
intent(in) :: ng, model, tile
3043 integer,
intent(in) :: gtype, ifield, tindex
3044 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, Kmin, Kmax
3045 integer,
intent(in) :: fourth, Loff
3046 integer,
intent(in) :: Npts
3047 integer,
intent(out) :: start(:), total(:)
3049 real(r8),
intent(inout) :: Fdat(:)
3055 integer :: ghost, i, j, k, ij, ijk, ic, jc, ifactor, method
3056 integer :: Cgrid, Ilen, Jlen, Ioff, Joff, Koff
3057 integer :: Isize, IJsize, Jsize, Ksize
3058 integer :: Istr, Iend, Jstr, Jend
3059 integer :: LBi, UBi, LBj, UBj
3061 real(r8) :: Fmin, Fmax
3063 real(r8) :: Fwrk(Npts)
3065 character (len=*),
parameter :: MyFile = &
3066 & __FILE__//
", interp_field4d"
3081 lbi=xtr_bounds(ng)%LBi(tile)
3082 ubi=xtr_bounds(ng)%UBi(tile)
3083 lbj=xtr_bounds(ng)%LBj(tile)
3084 ubj=xtr_bounds(ng)%UBj(tile)
3093 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3094 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3095 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3096 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3101 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3102 & method, landfill, &
3103 & 1, isize, 1, jsize, kmin, kmax, &
3104 &
grid(ng) % Gx_rho, &
3105 &
grid(ng) % Gy_rho, &
3107 &
grid(ng) % Gmask_rho, &
3110 & istr, iend, jstr, jend, &
3111 & lbi, ubi, lbj, ubj, &
3112 & extract(ng) % Iout_rho, &
3113 & extract(ng) % Jout_rho, &
3114 & extract(ng) % lonr, &
3115 & extract(ng) % latr, &
3117 & extract(ng) % rmask, &
3119 & npts, fdat, fmin, fmax)
3121 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3122 & method, landfill, &
3123 & 1, isize, 1, jsize, kmin, kmax, &
3124 &
grid(ng) % Gx_rho, &
3125 &
grid(ng) % Gy_rho, &
3127 &
grid(ng) % Gmask_rho, &
3130 & istr, iend, jstr, jend, &
3131 & lbi, ubi, lbj, ubj, &
3132 & extract(ng) % Iout_rho, &
3133 & extract(ng) % Jout_rho, &
3134 & extract(ng) % xr, &
3135 & extract(ng) % Yr, &
3137 & extract(ng) % rmask, &
3139 & npts, fdat, fmin, fmax)
3147 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3148 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3149 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3150 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3155 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3156 & method, landfill, &
3157 & 1, isize, 1, jsize, kmin, kmax, &
3158 &
grid(ng) % Gx_u, &
3159 &
grid(ng) % Gy_u, &
3161 &
grid(ng) % Gmask_u, &
3164 & istr, iend, jstr, jend, &
3165 & lbi, ubi, lbj, ubj, &
3166 & extract(ng) % Iout_u, &
3167 & extract(ng) % Jout_u, &
3168 & extract(ng) % lonu, &
3169 & extract(ng) % latu, &
3171 & extract(ng) % umask, &
3173 & npts, fdat, fmin, fmax)
3175 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3176 & method, landfill, &
3177 & 1, isize, 1, jsize, kmin, kmax, &
3178 &
grid(ng) % Gx_u, &
3179 &
grid(ng) % Gy_u, &
3181 &
grid(ng) % Gmask_u, &
3184 & istr, iend, jstr, jend, &
3185 & lbi, ubi, lbj, ubj, &
3186 & extract(ng) % Iout_u, &
3187 & extract(ng) % Jout_u, &
3188 & extract(ng) % xu, &
3189 & extract(ng) % yu, &
3191 & extract(ng) % umask, &
3193 & npts, fdat, fmin, fmax)
3201 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3202 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3203 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3204 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3209 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3210 & method, landfill, &
3211 & 1, isize, 1, jsize, kmin, kmax, &
3212 &
grid(ng) % Gx_v, &
3213 &
grid(ng) % Gy_v, &
3215 &
grid(ng) % Gmask_v, &
3218 & istr, iend, jstr, jend, &
3219 & lbi, ubi, lbj, ubj, &
3220 & extract(ng) % Iout_v, &
3221 & extract(ng) % Jout_v, &
3222 & extract(ng) % lonv, &
3223 & extract(ng) % latv, &
3225 & extract(ng) % vmask, &
3227 & npts, fdat, fmin, fmax)
3229 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3230 & method, landfill, &
3231 & 1, isize, 1, jsize, kmin, kmax, &
3232 &
grid(ng) % Gx_v, &
3233 &
grid(ng) % Gy_v, &
3235 &
grid(ng) % Gmask_v, &
3238 & istr, iend, jstr, jend, &
3239 & lbi, ubi, lbj, ubj, &
3240 & extract(ng) % Iout_v, &
3241 & extract(ng) % Jout_v, &
3242 & extract(ng) % lonv, &
3243 & extract(ng) % latv, &
3245 & extract(ng) % vmask, &
3247 & npts, fdat, fmin, fmax)
3255 WRITE (
stdout,10) gtype, &
3256 &
'not supported for interpolation:', &
3257 & trim(
vname(1,ifield))
3266 IF (gtype.gt.0)
THEN
3268 total(1)=iend-istr+1
3270 total(2)=jend-jstr+1
3273 start(4)=fourth+loff
3279 start(1)=1+(fourth+loff-1)*npts
3286 10
FORMAT (
' INTERP_FIELD4D - Staggered variable, gtype = ', i0, &
3290 END SUBROUTINE interp_field4d
3292 SUBROUTINE interp_field2d_global (ng, model, tile, &
3293 & gtype, ifield, tindex, &
3294 & Imin, Imax, Jmin, Jmax, &
3329 integer,
intent(in) :: ng, model, tile
3330 integer,
intent(in) :: gtype, ifield, tindex
3331 integer,
intent(in) :: Imin, Imax, Jmin, Jmax
3332 integer,
intent(in) :: Npts
3333 integer,
intent(out) :: start(:), total(:)
3335 real(r8),
intent(inout) :: Fdat(:)
3341 integer :: ghost, i, j, ij, ic, jc, ifactor, method
3342 integer :: Cgrid, Ilen, Jlen, Ioff, Joff, Isize, Jsize
3343 integer :: Istr, Iend, Jstr, Jend
3344 integer :: LBi, UBi, LBj, UBj
3346 real(r8) :: Fmin, Fmax
3348 real(r8) :: Fwrk(Npts)
3350 character (len=*),
parameter :: MyFile = &
3351 & __FILE__//
", extract_field2d_global"
3366 lbi=xtr_bounds(ng)%LBi(tile)
3367 ubi=xtr_bounds(ng)%UBi(tile)
3368 lbj=xtr_bounds(ng)%LBj(tile)
3369 ubj=xtr_bounds(ng)%UBj(tile)
3381 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3382 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3383 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3384 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3388 CALL regrid_field2d (ng, model, tile, gtype, ifield, &
3389 & method, landfill, &
3390 & imin, imax, jmin, jmax, &
3391 &
grid(ng) % Gx_rho, &
3392 &
grid(ng) % Gy_rho, &
3394 &
grid(ng) % Gmask_rho, &
3397 & istr, iend, jstr, jend, &
3398 & istr, iend, jstr, jend, &
3399 & extract(ng) % Iout_rho, &
3400 & extract(ng) % Jout_rho, &
3401 & extract(ng) % Gx_rho, &
3402 & extract(ng) % Gy_rho, &
3404 & extract(ng) % Gmask_rho, &
3406 & npts, fdat, fmin, fmax)
3413 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3414 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3415 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3416 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3420 CALL regrid_field2d (ng, model, tile, gtype, ifield, &
3421 & method, landfill, &
3422 & imin, imax, jmin, jmax, &
3423 &
grid(ng) % Gx_u, &
3424 &
grid(ng) % Gy_u, &
3426 &
grid(ng) % Gmask_u, &
3429 & istr, iend, jstr, jend, &
3430 & istr, iend, jstr, jend, &
3431 & extract(ng) % Iout_u, &
3432 & extract(ng) % Jout_u, &
3433 & extract(ng) % Gx_u, &
3434 & extract(ng) % Gx_u, &
3436 & extract(ng) % Gmask_u, &
3438 & npts, fdat, fmin, fmax)
3445 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3446 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3447 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3448 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3452 CALL regrid_field2d (ng, model, tile, gtype, ifield, &
3453 & method, landfill, &
3454 & imin, imax, jmin, jmax, &
3455 &
grid(ng) % Gx_v, &
3456 &
grid(ng) % Gy_v, &
3458 &
grid(ng) % Gmask_v, &
3461 & istr, iend, jstr, jend, &
3462 & istr, iend, jstr, jend, &
3463 & extract(ng) % Iout_v, &
3464 & extract(ng) % Jout_v, &
3465 & extract(ng) % Gx_v, &
3466 & extract(ng) % Gy_v, &
3468 & extract(ng) % Gmask_v, &
3470 & npts, fdat, fmin, fmax)
3477 WRITE (
stdout,10) gtype, &
3478 &
'not supported for interpolation:', &
3479 & trim(
vname(1,ifield))
3488 IF (gtype.gt.0)
THEN
3490 total(1)=iend-istr+1
3492 total(2)=jend-jstr+1
3504 10
FORMAT (
' INTERP_FIELD2D_GLOBAL - Staggered variable, gtype = ', &
3508 END SUBROUTINE interp_field2d_global
3510 SUBROUTINE interp_field3d_global (ng, model, tile, &
3511 & gtype, ifield, tindex, &
3512 & Imin, Imax, Jmin, Jmax, &
3551 integer,
intent(in) :: ng, model, tile
3552 integer,
intent(in) :: gtype, ifield, tindex
3553 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, Kmin, Kmax
3554 integer,
intent(in) :: Npts
3555 integer,
intent(out) :: start(:), total(:)
3557 real(r8),
intent(inout) :: Fdat(:)
3563 integer :: ghost, i, j, k, ij, ijk, ic, jc, ifactor, method
3564 integer :: Ilen, Jlen, Ioff, Joff, Koff
3565 integer :: Cgrid, Isize, IJsize, Jsize, Ksize
3566 integer :: Istr, Iend, Jstr, Jend
3567 integer :: LBi, UBi, LBj, UBj
3569 real(r8) :: Fmin, Fmax
3571 real(r8) :: Fwrk(Npts)
3573 character (len=*),
parameter :: MyFile = &
3574 & __FILE__//
", interp_field3d_global"
3590 lbi=xtr_bounds(ng)%LBi(tile)
3591 ubi=xtr_bounds(ng)%UBi(tile)
3592 lbj=xtr_bounds(ng)%LBj(tile)
3593 ubj=xtr_bounds(ng)%UBj(tile)
3602 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3603 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3604 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3605 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3609 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3610 & method, landfill, &
3611 & imin, imax, jmin, jmax, kmin, kmax, &
3612 &
grid(ng) % Gx_rho, &
3613 &
grid(ng) % Gy_rho, &
3615 &
grid(ng) % Gmask_rho, &
3618 & istr, iend, jstr, jend, &
3619 & istr, iend, jstr, jend, &
3620 & extract(ng) % Iout_rho, &
3621 & extract(ng) % Jout_rho, &
3622 & extract(ng) % Gx_rho, &
3623 & extract(ng) % Gy_rho, &
3625 & extract(ng) % Gmask_rho, &
3627 & npts, fdat, fmin, fmax)
3634 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3635 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3636 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3637 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3641 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3642 & method, landfill, &
3643 & imin, imax, jmin, jmax, kmin, kmax, &
3644 &
grid(ng) % Gx_u, &
3645 &
grid(ng) % Gy_u, &
3647 &
grid(ng) % Gmask_u, &
3650 & istr, iend, jstr, jend, &
3651 & istr, iend, jstr, jend, &
3652 & extract(ng) % Iout_u, &
3653 & extract(ng) % Jout_u, &
3654 & extract(ng) % Gx_u, &
3655 & extract(ng) % Gy_u, &
3657 & extract(ng) % Gmask_u, &
3659 & npts, fdat, fmin, fmax)
3666 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3667 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3668 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3669 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3673 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3674 & method, landfill, &
3675 & imin, imax, jmin, jmax, kmin, kmax, &
3676 &
grid(ng) % Gx_v, &
3677 &
grid(ng) % Gy_v, &
3679 &
grid(ng) % Gmask_v, &
3682 & istr, iend, jstr, jend, &
3683 & istr, iend, jstr, jend, &
3684 & extract(ng) % Iout_v, &
3685 & extract(ng) % Jout_v, &
3686 & extract(ng) % Gx_v, &
3687 & extract(ng) % Gy_v, &
3689 & extract(ng) % Gmask_v, &
3691 & npts, fdat, fmin, fmax)
3698 WRITE (
stdout,10) gtype, &
3699 &
'not supported for interpolation:', &
3700 & trim(
vname(1,ifield))
3709 IF (gtype.gt.0)
THEN
3711 total(1)=iend-istr+1
3713 total(2)=jend-jstr+1
3727 10
FORMAT (
' INTERP_FIELD3D_GLOBAL - Staggered variable, gtype = ', &
3731 END SUBROUTINE interp_field3d_global
3733 SUBROUTINE interp_field4d_global (ng, model, tile, &
3734 & gtype, ifield, tindex, &
3735 & Imin, Imax, Jmin, Jmax, &
3736 & Kmin, Kmax, Fourth, Loff, &
3776 integer,
intent(in) :: ng, model, tile
3777 integer,
intent(in) :: gtype, ifield, tindex
3778 integer,
intent(in) :: Imin, Imax, Jmin, Jmax, Kmin, Kmax
3779 integer,
intent(in) :: fourth, Loff
3780 integer,
intent(in) :: Npts
3781 integer,
intent(out) :: start(:), total(:)
3783 real(r8),
intent(inout) :: Fdat(:)
3789 integer :: ghost, i, j, k, ij, ijk, ic, jc, ifactor, method
3790 integer :: Cgrid, Ilen, Jlen, Ioff, Joff, Koff
3791 integer :: Isize, IJsize, Jsize, Ksize
3792 integer :: Istr, Iend, Jstr, Jend
3793 integer :: LBi, UBi, LBj, UBj
3795 real(r8) :: Fmin, Fmax
3797 real(r8) :: Fwrk(Npts)
3799 character (len=*),
parameter :: MyFile = &
3800 & __FILE__//
", interp_field4d_global"
3815 lbi=xtr_bounds(ng)%LBi(tile)
3816 ubi=xtr_bounds(ng)%UBi(tile)
3817 lbj=xtr_bounds(ng)%LBj(tile)
3818 ubj=xtr_bounds(ng)%UBj(tile)
3827 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3828 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3829 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3830 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3834 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3835 & method, landfill, &
3836 & imin, imax, jmin, jmax, kmin, kmax, &
3837 &
grid(ng) % Gx_rho, &
3838 &
grid(ng) % Gy_rho, &
3840 &
grid(ng) % Gmask_rho, &
3843 & istr, iend, jstr, jend, &
3844 & istr, iend, jstr, jend, &
3845 & extract(ng) % Iout_rho, &
3846 & extract(ng) % Jout_rho, &
3847 & extract(ng) % Gx_rho, &
3848 & extract(ng) % Gy_rho, &
3850 & extract(ng) % Gmask_rho, &
3852 & npts, fdat, fmin, fmax)
3859 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3860 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3861 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3862 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3866 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3867 & method, landfill, &
3868 & imin, imax, jmin, jmax, kmin, kmax, &
3869 &
grid(ng) % Gx_u, &
3870 &
grid(ng) % Gy_u, &
3872 &
grid(ng) % Gmask_u, &
3875 & istr, iend, jstr, jend, &
3876 & istr, iend, jstr, jend, &
3877 & extract(ng) % Iout_u, &
3878 & extract(ng) % Jout_u, &
3879 & extract(ng) % Gx_u, &
3880 & extract(ng) % Gy_u, &
3882 & extract(ng) % Gmask_u, &
3884 & npts, fdat, fmin, fmax)
3891 istr=xtr_bounds(ng)%Imin(cgrid,ghost,tile)
3892 iend=xtr_bounds(ng)%Imax(cgrid,ghost,tile)
3893 jstr=xtr_bounds(ng)%Jmin(cgrid,ghost,tile)
3894 jend=xtr_bounds(ng)%Jmax(cgrid,ghost,tile)
3898 CALL regrid_field3d (ng, model, tile, gtype, ifield, &
3899 & method, landfill, &
3900 & 1, isize, 1, jsize, kmin, kmax, &
3901 &
grid(ng) % Gx_v, &
3902 &
grid(ng) % Gy_v, &
3904 &
grid(ng) % Gmask_v, &
3907 & istr, iend, jstr, jend, &
3908 & istr, iend, jstr, jend, &
3909 & extract(ng) % Iout_v, &
3910 & extract(ng) % Jout_v, &
3911 & extract(ng) % Gx_v, &
3912 & extract(ng) % Gy_v, &
3914 & extract(ng) % Gmask_v, &
3916 & npts, fdat, fmin, fmax)
3923 WRITE (
stdout,10) gtype, &
3924 &
'not supported for interpolation:', &
3925 & trim(
vname(1,ifield))
3934 IF (gtype.gt.0)
THEN
3936 total(1)=iend-istr+1
3938 total(2)=jend-jstr+1
3941 start(4)=fourth+loff
3947 start(1)=1+(fourth+loff-1)*npts
3954 10
FORMAT (
' INTERP_FIELD4D_GLOBAL - Staggered variable, gtype = ', &
3958 END SUBROUTINE interp_field4d_global
3960 SUBROUTINE regrid_field2d (ng, model, tile, gtype, ifield, &
3961 & method, LandFill, &
3962 & LBx, UBx, LBy, UBy, &
3968 & Istr, Iend, Jstr, Jend, &
3969 & LBi, UBi, LBj, UBj, &
3975 & Npts, Fout, Fmin, Fmax)
4027 logical,
intent(in) :: LandFill
4029 integer,
intent(in) :: ng, model, tile, gtype, ifield, method
4030 integer,
intent(in) :: LBx, UBx, LBy, UBy
4031 integer,
intent(in) :: LBi, UBi, LBj, UBj
4032 integer,
intent(in) :: Istr, Iend, Jstr, Jend
4033 integer,
intent(in) :: Npts
4035 real(r8),
intent(in) :: Xinp(LBx:UBx,LBy:UBy)
4036 real(r8),
intent(in) :: Yinp(LBx:UBx,LBy:UBy)
4038 real(r8),
intent(in) :: maskInp(LBx:UBx,LBy:UBy)
4040 real(r8),
intent(in) :: Finp(LBx:UBx,LBy:UBy)
4041 real(r8),
intent(in) :: Iout(LBi:UBi,LBj:UBj)
4042 real(r8),
intent(in) :: Jout(LBi:UBi,LBj:UBj)
4043 real(r8),
intent(in) :: Xout(LBi:UBi,LBj:UBj)
4044 real(r8),
intent(in) :: Yout(LBi:UBi,LBj:UBj)
4046 real(r8),
intent(in) :: maskOut(LBi:UBi,LBj:UBj)
4048 real(r8),
intent(out) :: Fout(LBi:UBi,LBj:UBj)
4049 real(r8),
intent(out) :: Fmin, Fmax
4055 character (len=*),
parameter :: MyFile = &
4056 & __FILE__//
", regrid_field2d"
4062 SELECT CASE (abs(method))
4065 & lbx, ubx, lby, uby, &
4066 & xinp, yinp, finp, &
4067 & lbi, ubi, lbj, ubj, &
4068 & istr, iend, jstr, jend, &
4074 & lbx, ubx, lby, uby, &
4075 & xinp, yinp, finp, &
4076 & lbi, ubi, lbj, ubj, &
4077 & istr, iend, jstr, jend, &
4098 IF ((maskout(i,j).lt.1.0_r8).and.landfill)
THEN
4101 fmin=min(fmin,fout(i,j))
4102 fmax=max(fmax,fout(i,j))
4105 fmin=min(fmin,fout(i,j))
4106 fmax=max(fmax,fout(i,j))
4111 10
FORMAT (
' REGRID_FIEL2D - Illegal interpolation method =', i0)
4114 END SUBROUTINE regrid_field2d
4116 SUBROUTINE regrid_field3d (ng, model, tile, gtype, ifield, &
4117 & method, LandFill, &
4118 & LBx, UBx, LBy, UBy, Kmin, Kmax, &
4124 & Istr, Iend, Jstr, Jend, &
4125 & LBi, UBi, LBj, UBj, &
4131 & Npts, Fout, Fmin, Fmax)
4186 logical,
intent(in) :: landFill
4188 integer,
intent(in) :: ng, model, tile, gtype, ifield, method
4189 integer,
intent(in) :: LBx, UBx, LBy, UBy
4190 integer,
intent(in) :: Kmin, Kmax
4191 integer,
intent(in) :: Istr, Iend, Jstr, Jend
4192 integer,
intent(in) :: LBi, UBi, LBj, UBj
4193 integer,
intent(in) :: Npts
4195 real(r8),
intent(in) :: Xinp(LBx:UBx,LBy:UBy)
4196 real(r8),
intent(in) :: Yinp(LBx:UBx,LBy:UBy)
4198 real(r8),
intent(in) :: maskInp(LBx:UBx,LBy:UBy)
4200 real(r8),
intent(in) :: Finp(LBx:UBx,LBy:UBy,Kmin:Kmax)
4201 real(r8),
intent(in) :: Iout(LBi:UBi,LBj:UBj)
4202 real(r8),
intent(in) :: Jout(LBi:UBi,LBj:UBj)
4203 real(r8),
intent(in) :: Xout(LBi:UBi,LBj:UBj)
4204 real(r8),
intent(in) :: Yout(LBi:UBi,LBj:UBj)
4206 real(r8),
intent(in) :: maskOut(LBi:UBi,LBj:UBj)
4208 real(r8),
intent(out) :: Fout(LBi:UBi,LBj:UBj,Kmin:Kmax)
4209 real(r8),
intent(out) :: Fmin, Fmax
4213 integer :: i, ic, j, k
4215 character (len=*),
parameter :: MyFile = &
4216 & __FILE__//
", regrid_field3d"
4222 SELECT CASE (abs(method))
4226 & lbx, ubx, lby, uby, &
4227 & xinp, yinp, finp(:,:,k), &
4228 & lbi, ubi, lbj, ubj, &
4229 & istr, iend, jstr, jend, &
4232 & fout(lbi:,lbj:,k))
4237 & lbx, ubx, lby, uby, &
4238 & xinp, yinp, finp(:,:,k), &
4239 & lbi, ubi, lbj, ubj, &
4240 & istr, iend, jstr, jend, &
4243 & fout(lbi:,lbj:,k))
4263 IF ((maskout(i,j).lt.1.0_r8).and.landfill)
THEN
4266 fmin=min(fmin,fout(i,j,k))
4267 fmax=max(fmax,fout(i,j,k))
4270 fmin=min(fmin,fout(i,j,k))
4271 fmax=max(fmax,fout(i,j,k))
4277 10
FORMAT (
' REGRID_FIEL3D - Illegal interpolation method =', i0)
4280 END SUBROUTINE regrid_field3d
subroutine hindices(ng, lbi, ubi, lbj, ubj, is, ie, js, je, angler, xgrd, ygrd, lbm, ubm, lbn, ubn, ms, me, ns, ne, xpos, ypos, ipos, jpos, ijspv, rectangular)
subroutine cinterp2d(ng, lbx, ubx, lby, uby, xinp, yinp, finp, lbi, ubi, lbj, ubj, istr, iend, jstr, jend, iout, jout, xout, yout, fout, minval, maxval)
subroutine linterp2d(ng, lbx, ubx, lby, uby, xinp, yinp, finp, lbi, ubi, lbj, ubj, istr, iend, jstr, jend, iout, jout, xout, yout, fout, minval, maxval)
subroutine mp_gather2d(ng, model, lbi, ubi, lbj, ubj, tindex, gtype, ascl, amask, a, npts, awrk, setfillval)
type(t_grid), dimension(:), allocatable grid
character(len=256) sourcefile
character(len=maxlen), dimension(6, 0:nv) vname
type(t_bounds), dimension(:), allocatable bounds
integer, parameter r3dvar
type(t_iobounds), dimension(:), allocatable iobounds
integer, parameter u3dvar
type(t_domain), dimension(:), allocatable domain
integer, parameter u2dvar
integer, parameter w3dvar
integer, parameter p2dvar
integer, parameter r2dvar
integer, parameter v2dvar
integer, parameter p3dvar
integer, parameter v3dvar
real(dp), parameter spval
integer, parameter isouth
integer, parameter inorth
logical function, public founderror(flag, noerr, line, routine)