22# if defined PIO_LIB && defined DISTRIBUTE
29# if defined PIO_LIB && defined DISTRIBUTE
37# if defined PIO_LIB && defined DISTRIBUTE
71 INTERFACE nf_fread2d_xtr
72 MODULE PROCEDURE nf90_fread2d_xtr
73# if defined PIO_LIB && defined DISTRIBUTE
74 MODULE PROCEDURE pio_fread2d_xtr
76 END INTERFACE nf_fread2d_xtr
80# if defined PARALLEL_IO && defined DISTRIBUTE
83 FUNCTION nf90_fread2d_xtr (ng, model, ncname, ncid, &
85 & tindex, gtype, Vsize, &
86 & LBi, UBi, LBj, UBj, &
93 & Lregrid)
RESULT (status)
104 logical,
intent(out),
optional :: Lregrid
106 integer,
intent(in) :: ng, model, ncid, ncvarid, tindex, gtype
107 integer,
intent(in) :: LBi, UBi, LBj, UBj
108 integer,
intent(in) :: Vsize(4)
110 integer(i8b),
intent(out),
optional :: checksum
112 real(dp),
intent(in) :: Ascl
113 real(r8),
intent(out) :: Amin
114 real(r8),
intent(out) :: Amax
116 character (len=*),
intent(in) :: ncname
117 character (len=*),
intent(in) :: ncvname
121 real(r8),
intent(in) :: Amask(LBi:,LBj:)
123 real(r8),
intent(out) :: Adat(LBi:,LBj:)
126 real(r8),
intent(in) :: Amask(LBi:UBi,LBj:UBj)
128 real(r8),
intent(out) :: Adat(LBi:UBi,LBj:UBj)
133 logical :: Lchecksum, interpolate
135 logical,
dimension(3) :: foundit
137 integer :: i, ic, ij, j, jc, np, MyNpts, Npts
138 integer :: Imin, Imax, Isize, Jmin, Jmax, Jsize, IJsize
139 integer :: Istr, Iend, Jstr, Jend
140 integer :: Ioff, Joff, IJoff
141 integer :: Ilen, Itile, Jlen, Jtile, IJlen
142 integer :: Cgrid, MyType, ghost, status, wtype
144 integer,
dimension(3) :: start, total
146 real(r8) :: Afactor, Aoffset, Aspval
148 real(r8),
parameter :: IniVal = 0.0_r8
150 real(r8),
dimension(2) :: rbuffer
151 real(r8),
dimension(3) :: AttValue
153 real(r8),
allocatable :: Awrk(:,:)
154# if defined MASKING && defined READ_WATER
155 real(r8),
allocatable :: A2d(:)
157 real(r8),
allocatable :: wrk(:)
159 character (len= 3),
dimension(2) :: op_handle
160 character (len=12),
dimension(3) :: AttName
162 character (len=*),
parameter :: MyFile = &
163 & __FILE__//
", nf90_fread2d"
184 IF (model.eq.
iadm)
THEN
193 SELECT CASE (abs(mytype))
196 isize=xtr_iobounds(ng)%xi_psi
197 jsize=xtr_iobounds(ng)%eta_psi
200 isize=xtr_iobounds(ng)%xi_rho
201 jsize=xtr_iobounds(ng)%eta_rho
204 isize=xtr_iobounds(ng)%xi_u
205 jsize=xtr_iobounds(ng)%eta_u
208 isize=xtr_iobounds(ng)%xi_v
209 jsize=xtr_iobounds(ng)%eta_v
212 isize=xtr_iobounds(ng)%xi_rho
213 jsize=xtr_iobounds(ng)%eta_rho
216 imin=xtr_bounds(ng)%Imin(cgrid,ghost,
myrank)
217 imax=xtr_bounds(ng)%Imax(cgrid,ghost,
myrank)
218 jmin=xtr_bounds(ng)%Jmin(cgrid,ghost,
myrank)
219 jmax=xtr_bounds(ng)%Jmax(cgrid,ghost,
myrank)
231 IF (((vsize(1).gt.0).and.(vsize(1).ne.isize)).or. &
232 & ((vsize(2).gt.0).and.(vsize(2).ne.jsize)))
THEN
237 IF (
PRESENT(lregrid))
THEN
254 attname(1)=
'scale_factor'
255 attname(2)=
'add_offset '
256 attname(3)=
'_FillValue '
259 & attvalue, foundit, &
266 IF (.not.foundit(1))
THEN
272 IF (.not.foundit(2))
THEN
278 IF (.not.foundit(3))
THEN
286 IF (
PRESENT(checksum))
THEN
303 SELECT CASE (abs(mytype))
325 IF (interpolate)
THEN
326 IF (.not.
allocated(awrk))
THEN
327 allocate ( awrk(ilen,jlen) )
330 IF (.not.
allocated(wrk))
THEN
331 allocate ( wrk(npts) )
335 IF (.not.
allocated(wrk))
THEN
343 IF (interpolate)
THEN
345 & istr, iend, jstr, jend)
356 mynpts=total(1)*total(2)
360 status=nf90_get_var(ncid, ncvarid, wrk, start, total)
365 IF (status.eq.nf90_noerr)
THEN
369 IF (abs(wrk(i)).ge.abs(aspval))
THEN
372 wrk(i)=ascl*(afactor*wrk(i)+aoffset)
373 amin=min(amin,wrk(i))
374 amax=max(amax,wrk(i))
377 IF ((abs(amin).ge.abs(aspval)).and. &
378 & (abs(amax).ge.abs(aspval)))
THEN
389 CALL mp_reduce (ng, model, 2, rbuffer, op_handle)
396 IF (interpolate)
THEN
397 CALL mp_collect (ng, model, npts, inival, wrk)
420# if defined MASKING && defined READ_WATER
433 SELECT CASE (abs(mytype))
435 npts=xtr_iobounds(ng)%xy_psi
440 npts=xtr_iobounds(ng)%xy_rho
445 npts=xtr_iobounds(ng)%xy_u
450 npts=xtr_iobounds(ng)%xy_v
455 npts=xtr_iobounds(ng)%xy_rho
464 IF (.not.
allocated(a2d))
THEN
465 allocate ( a2d(ijsize) )
468 IF (.not.
allocated(wrk))
THEN
469 allocate ( wrk(npts) )
484 status=nf90_get_var(ncid, ncvarid, wrk(istr:), start, total)
489 IF (status.eq.nf90_noerr)
THEN
490 CALL mp_collect (ng, model, npts, inival, wrk)
498 IF (abs(wrk(i)).ge.abs(aspval))
THEN
501 wrk(i)=ascl*(afactor*wrk(i)+aoffset)
502 amin=min(amin,wrk(i))
503 amax=max(amax,wrk(i))
506 IF ((abs(amin).ge.abs(aspval)).and. &
507 & (abs(amax).ge.abs(aspval)))
THEN
517 ij=
scalars(ng)%IJwater(np,wtype)
540 IF (interpolate.and.(status.eq.nf90_noerr))
THEN
541 SELECT CASE (abs(mytype))
546 & ilen, jlen, awrk, amin, amax, &
547 & lbi, ubi, lbj, ubj, &
548 & imin, imax, jmin, jmax, &
550 &
grid(ng) % pmask, &
552 &
grid(ng) % MyLon, &
559 & ilen, jlen, awrk, amin, amax, &
560 & lbi, ubi, lbj, ubj, &
561 & imin, imax, jmin, jmax, &
563 &
grid(ng) % pmask, &
565 &
grid(ng) % MyLon, &
574 & ilen, jlen, awrk, amin, amax, &
575 & lbi, ubi, lbj, ubj, &
576 & imin, imax, jmin, jmax, &
578 &
grid(ng) % rmask, &
580 &
grid(ng) % MyLon, &
587 & ilen, jlen, awrk, amin, amax, &
588 & lbi, ubi, lbj, ubj, &
589 & imin, imax, jmin, jmax, &
591 &
grid(ng) % rmask, &
593 &
grid(ng) % MyLon, &
602 & ilen, jlen, awrk, amin, amax, &
603 & lbi, ubi, lbj, ubj, &
604 & imin, imax, jmin, jmax, &
606 &
grid(ng) % umask, &
608 &
grid(ng) % MyLon, &
615 & ilen, jlen, awrk, amin, amax, &
616 & lbi, ubi, lbj, ubj, &
617 & imin, imax, jmin, jmax, &
619 &
grid(ng) % umask, &
621 &
grid(ng) % MyLon, &
630 & ilen, jlen, awrk, amin, amax, &
631 & lbi, ubi, lbj, ubj, &
632 & imin, imax, jmin, jmax, &
634 &
grid(ng) % vmask, &
636 &
grid(ng) % MyLon, &
643 & ilen, jlen, awrk, amin, amax, &
644 & lbi, ubi, lbj, ubj, &
645 & imin, imax, jmin, jmax, &
647 &
grid(ng) % vmask, &
649 &
grid(ng) % MyLon, &
658 & ilen, jlen, awrk, amin, amax, &
659 & lbi, ubi, lbj, ubj, &
660 & imin, imax, jmin, jmax, &
662 &
grid(ng) % rmask, &
664 &
grid(ng) % MyLon, &
671 & ilen, jlen, awrk, amin, amax, &
672 & lbi, ubi, lbj, ubj, &
673 & imin, imax, jmin, jmax, &
675 &
grid(ng) % rmask, &
677 &
grid(ng) % MyLon, &
689 IF (interpolate)
THEN
690 IF (
allocated(awrk))
THEN
695# if defined MASKING && defined READ_WATER
696 IF (
allocated(a2d))
THEN
701 IF (
allocated(wrk))
THEN
706 END FUNCTION nf90_fread2d_xtr
712 FUNCTION nf90_fread2d_xtr (ng, model, ncname, ncid, &
713 & ncvname, ncvarid, &
714 & tindex, gtype, Vsize, &
715 & LBi, UBi, LBj, UBj, &
716 & Ascl, Amin, Amax, &
722 & Lregrid)
RESULT (status)
735 logical,
intent(out),
optional :: Lregrid
737 integer,
intent(in) :: ng, model, ncid, ncvarid, tindex, gtype
738 integer,
intent(in) :: LBi, UBi, LBj, UBj
739 integer,
intent(in) :: Vsize(4)
741 integer(i8b),
intent(out),
optional :: checksum
743 real(dp),
intent(in) :: Ascl
744 real(r8),
intent(out) :: Amin
745 real(r8),
intent(out) :: Amax
747 character (len=*),
intent(in) :: ncname
748 character (len=*),
intent(in) :: ncvname
752 real(r8),
intent(in) :: Amask(LBi:,LBj:)
754 real(r8),
intent(out) :: Adat(LBi:,LBj:)
757 real(r8),
intent(in) :: Amask(LBi:UBi,LBj:UBj)
759 real(r8),
intent(out) :: Adat(LBi:UBi,LBj:UBj)
764 logical :: Lchecksum, interpolate
766 logical,
dimension(3) :: foundit
768 integer :: i, j, ic, Npts, NWpts, status, wtype
769 integer :: Is, Ie, Js, Je
770 integer :: Imin, Imax, Jmin, Jmax
771 integer :: Ilen, Jlen, IJlen
772 integer :: Cgrid, MyType, ghost
776 integer,
dimension(3) :: start, total
778 real(r8) :: Afactor, Aoffset, Aspval
780 real(r8),
dimension(3) :: AttValue
782 real(r8),
allocatable :: Cwrk(:)
783 real(r8),
allocatable :: wrk(:)
785 character (len=12),
dimension(3) :: AttName
787 character (len=*),
parameter :: MyFile = &
788 & __FILE__//
", nf90_fread2d"
802 SELECT CASE (abs(mytype))
805 is=xtr_iobounds(ng)%ILB_psi
806 ie=xtr_iobounds(ng)%IUB_psi
807 js=xtr_iobounds(ng)%JLB_psi
808 je=xtr_iobounds(ng)%JUB_psi
811 is=xtr_iobounds(ng)%ILB_rho
812 ie=xtr_iobounds(ng)%IUB_rho
813 js=xtr_iobounds(ng)%JLB_rho
814 je=xtr_iobounds(ng)%JUB_rho
817 is=xtr_iobounds(ng)%ILB_u
818 ie=xtr_iobounds(ng)%IUB_u
819 js=xtr_iobounds(ng)%JLB_u
820 je=xtr_iobounds(ng)%JUB_u
823 is=xtr_iobounds(ng)%ILB_v
824 ie=xtr_iobounds(ng)%IUB_v
825 js=xtr_iobounds(ng)%JLB_v
826 je=xtr_iobounds(ng)%JUB_v
829 is=xtr_iobounds(ng)%ILB_rho
830 ie=xtr_iobounds(ng)%IUB_rho
831 js=xtr_iobounds(ng)%JLB_rho
832 je=xtr_iobounds(ng)%JUB_rho
841 imin=xtr_bounds(ng)%Imin(cgrid,ghost,
myrank)
842 imax=xtr_bounds(ng)%Imax(cgrid,ghost,
myrank)
843 jmin=xtr_bounds(ng)%Jmin(cgrid,ghost,
myrank)
844 jmax=xtr_bounds(ng)%Jmax(cgrid,ghost,
myrank)
856 IF (model.eq.
iadm)
THEN
871 IF (((vsize(1).gt.0).and.(vsize(1).ne.ilen)).or. &
872 & ((vsize(2).gt.0).and.(vsize(2).ne.jlen)))
THEN
877 IF (
PRESENT(lregrid))
THEN
895 attname(1)=
'scale_factor'
896 attname(2)=
'add_offset '
897 attname(3)=
'_FillValue '
900 & attvalue, foundit, &
907 IF (.not.foundit(1))
THEN
913 IF (.not.foundit(2))
THEN
919 IF (.not.foundit(3))
THEN
925# if defined READ_WATER && defined MASKING
930 SELECT CASE (abs(mytype))
932 npts=xtr_iobounds(ng)%xy_psi
935 npts=xtr_iobounds(ng)%xy_rho
938 npts=xtr_iobounds(ng)%xy_u
941 npts=xtr_iobounds(ng)%xy_v
944 npts=xtr_iobounds(ng)%xy_rho
947 nwpts=(
lm(ng)+2)*(
mm(ng)+2)
952 IF (mytype.gt.0)
THEN
960# if defined READ_WATER && defined MASKING
975 IF (.not.
allocated(wrk))
THEN
976 IF (interpolate)
THEN
977 allocate ( wrk(npts) )
979 allocate ( wrk(npts+2) )
986 IF (
PRESENT(checksum))
THEN
999 status=nf90_get_var(ncid, ncvarid, wrk, start, total)
1000 IF (status.eq.nf90_noerr)
THEN
1004 IF (abs(wrk(i)).ge.abs(aspval))
THEN
1007 wrk(i)=ascl*(afactor*wrk(i)+aoffset)
1008 amin=min(amin,wrk(i))
1009 amax=max(amax,wrk(i))
1012 IF ((abs(amin).ge.abs(aspval)).and. &
1013 & (abs(amax).ge.abs(aspval)))
THEN
1022 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1032 IF (.not.interpolate)
THEN
1037 CALL mp_scatter2d_xtr (ng, model, lbi, ubi, lbj, ubj, &
1038 & nghost, mytype, amin, amax, &
1039# if defined READ_WATER && defined MASKING
1040 & nwpts,
scalars(ng)%IJwater(:,wtype), &
1048 IF (mytype.gt.0)
THEN
1056# if defined MASKING || defined READ_WATER
1061 IF (amask(i,j).gt.0.0_r8)
THEN
1083 IF (interpolate)
THEN
1084 SELECT CASE (abs(mytype))
1089 & ilen, jlen, wrk, amin, amax, &
1090 & lbi, ubi, lbj, ubj, &
1095 &
grid(ng) % MyLon, &
1096 &
grid(ng) % lonp, &
1097 &
grid(ng) % latp, &
1102 & ilen, jlen, wrk, amin, amax, &
1103 & lbi, ubi, lbj, ubj, &
1108 &
grid(ng) % MyLon, &
1117 & ilen, jlen, wrk, amin, amax, &
1118 & lbi, ubi, lbj, ubj, &
1121 &
grid(ng) % rmask, &
1123 &
grid(ng) % MyLon, &
1124 &
grid(ng) % lonr, &
1125 &
grid(ng) % latr, &
1130 & ilen, jlen, wrk, amin, amax, &
1131 & lbi, ubi, lbj, ubj, &
1134 &
grid(ng) % rmask, &
1136 &
grid(ng) % MyLon, &
1145 & ilen, jlen, wrk, amin, amax, &
1146 & lbi, ubi, lbj, ubj, &
1149 &
grid(ng) % umask, &
1151 &
grid(ng) % MyLon, &
1152 &
grid(ng) % lonu, &
1153 &
grid(ng) % latu, &
1158 & ilen, jlen, wrk, amin, amax, &
1159 & lbi, ubi, lbj, ubj, &
1162 &
grid(ng) % umask, &
1164 &
grid(ng) % MyLon, &
1173 & ilen, jlen, wrk, amin, amax, &
1174 & lbi, ubi, lbj, ubj, &
1177 &
grid(ng) % vmask, &
1179 &
grid(ng) % MyLon, &
1180 &
grid(ng) % lonv, &
1181 &
grid(ng) % latv, &
1186 & ilen, jlen, wrk, amin, amax, &
1187 & lbi, ubi, lbj, ubj, &
1190 &
grid(ng) % vmask, &
1192 &
grid(ng) % MyLon, &
1201 & ilen, jlen, wrk, amin, amax, &
1202 & lbi, ubi, lbj, ubj, &
1205 &
grid(ng) % rmask, &
1207 &
grid(ng) % MyLon, &
1208 &
grid(ng) % lonr, &
1209 &
grid(ng) % latr, &
1214 & ilen, jlen, wrk, amin, amax, &
1215 & lbi, ubi, lbj, ubj, &
1218 &
grid(ng) % rmask, &
1220 &
grid(ng) % MyLon, &
1234 npts=(imax-imin+1)*(jmax-jmin+1)
1235 IF (.not.
allocated(cwrk))
allocate ( cwrk(npts) )
1236 cwrk = pack(adat(imin:imax, jmin:jmax), .true.)
1237 CALL get_hash (cwrk, npts, checksum, .true.)
1239 npts=(ie-is+1)*(je-js+1)
1240 IF (.not.
allocated(cwrk))
allocate ( cwrk(npts) )
1241 cwrk = pack(adat(is:ie, js:je), .true.)
1242 CALL get_hash (cwrk, npts, checksum)
1244 IF (
allocated(cwrk))
deallocate (cwrk)
1251 IF (
allocated(wrk))
THEN
1256 END FUNCTION nf90_fread2d_xtr
1259# if defined PIO_LIB && defined DISTRIBUTE
1262 FUNCTION pio_fread2d_xtr (ng, model, ncname, pioFile, &
1263 & ncvname, pioVar, &
1264 & tindex, pioDesc, Vsize, &
1265 & LBi, UBi, LBj, UBj, &
1266 & Ascl, Amin, Amax, &
1272 & Lregrid)
RESULT (status)
1282 logical,
intent(out),
optional :: Lregrid
1284 integer,
intent(in) :: ng, model, tindex
1285 integer,
intent(in) :: LBi, UBi, LBj, UBj
1286 integer,
intent(in) :: Vsize(4)
1288 integer(i8b),
intent(out),
optional :: checksum
1290 real(dp),
intent(in) :: Ascl
1291 real(r8),
intent(out) :: Amin
1292 real(r8),
intent(out) :: Amax
1294 character (len=*),
intent(in) :: ncname
1295 character (len=*),
intent(in) :: ncvname
1297# ifdef ASSUMED_SHAPE
1299 real(r8),
intent(in) :: Amask(LBi:,LBj:)
1301 real(r8),
intent(out) :: Adat(LBi:,LBj:)
1304 real(r8),
intent(in) :: Amask(LBi:UBi,LBj:UBj)
1306 real(r8),
intent(out) :: Adat(LBi:UBi,LBj:UBj)
1309 TYPE (File_desc_t),
intent(inout) :: pioFile
1310 TYPE (IO_Desc_t),
intent(inout) :: pioDesc
1311 TYPE (My_VarDesc),
intent(inout) :: pioVar
1315 logical :: Lchecksum, interpolate
1317 logical,
dimension(3) :: foundit
1319 integer :: i, j, Npts, status
1320 integer :: Is, Ie, Js, Je
1321 integer :: Imin, Imax, Jmin, Jmax
1322 integer :: Ilen, Jlen, IJlen
1323 integer :: Cgrid, ghost, dkind, gtype
1325 integer,
dimension(3) :: start, total
1327 real(r8) :: Afactor, Aoffset, Aspval, Avalue
1328 real(r8) :: my_Amin, my_Amax
1330 real(r8),
dimension(3) :: AttValue
1331 real(r8),
dimension(2) :: rbuffer
1333 real(r4),
pointer :: Awrk4(:,:)
1334 real(r8),
pointer :: Awrk8(:,:)
1335 real(r8),
allocatable :: Cwrk(:)
1336 real(r8),
allocatable :: wrk(:,:)
1338 character (len=12),
dimension(3) :: AttName
1339 character (len= 3),
dimension(2) :: op_handle
1341 character (len=*),
parameter :: MyFile = &
1342 & __FILE__//
", pio_fread2d"
1361 SELECT CASE (abs(gtype))
1364 is=xtr_iobounds(ng)%ILB_psi
1365 ie=xtr_iobounds(ng)%IUB_psi
1366 js=xtr_iobounds(ng)%JLB_psi
1367 je=xtr_iobounds(ng)%JUB_psi
1370 is=xtr_iobounds(ng)%ILB_rho
1371 ie=xtr_iobounds(ng)%IUB_rho
1372 js=xtr_iobounds(ng)%JLB_rho
1373 je=xtr_iobounds(ng)%JUB_rho
1376 is=xtr_iobounds(ng)%ILB_u
1377 ie=xtr_iobounds(ng)%IUB_u
1378 js=xtr_iobounds(ng)%JLB_u
1379 je=xtr_iobounds(ng)%JUB_u
1382 is=xtr_iobounds(ng)%ILB_v
1383 ie=xtr_iobounds(ng)%IUB_v
1384 js=xtr_iobounds(ng)%JLB_v
1385 je=xtr_iobounds(ng)%JUB_v
1388 is=xtr_iobounds(ng)%ILB_rho
1389 ie=xtr_iobounds(ng)%IUB_rho
1390 js=xtr_iobounds(ng)%JLB_rho
1391 je=xtr_iobounds(ng)%JUB_rho
1403 imin=xtr_bounds(ng)%Imin(cgrid,ghost,
myrank)
1404 imax=xtr_bounds(ng)%Imax(cgrid,ghost,
myrank)
1405 jmin=xtr_bounds(ng)%Jmin(cgrid,ghost,
myrank)
1406 jmax=xtr_bounds(ng)%Jmax(cgrid,ghost,
myrank)
1415 IF (((vsize(1).gt.0).and.(vsize(1).ne.ilen)).or. &
1416 & ((vsize(2).gt.0).and.(vsize(2).ne.jlen)))
THEN
1421 IF (
PRESENT(lregrid))
THEN
1439 attname(1)=
'scale_factor'
1440 attname(2)=
'add_offset '
1441 attname(3)=
'_FillValue '
1444 & attvalue, foundit, &
1445 & piofile = piofile)
1451 IF (.not.foundit(1))
THEN
1457 IF (.not.foundit(2))
THEN
1463 IF (.not.foundit(3))
THEN
1473 IF (interpolate)
THEN
1474 IF (.not.
allocated(wrk))
THEN
1475 allocate ( wrk(ilen,jlen) )
1492 & piofile = piofile, &
1495 & broadcast = .false., &
1503 wrk(i,j)=ascl*wrk(i,j)
1510 IF (
PRESENT(checksum))
THEN
1521 IF (.not.interpolate)
THEN
1527 IF (dkind.eq.pio_double)
THEN
1528 IF (.not.
associated(awrk8))
THEN
1529 allocate ( awrk8(imin:imax, jmin:jmax) )
1533 IF (.not.
associated(awrk4))
THEN
1534 allocate ( awrk4(imin:imax, jmin:jmax) )
1541 IF (tindex.gt.0)
THEN
1542 CALL pio_setframe (piofile, &
1544 & int(tindex, kind=pio_offset_kind))
1549 IF (dkind.eq.pio_double)
THEN
1550 CALL pio_read_darray (piofile, &
1553 & awrk8(imin:,jmin:), &
1558 IF (abs(awrk8(i,j)).ge.abs(aspval))
THEN
1561 avalue=ascl*(afactor*awrk8(i,j)+aoffset)
1563 my_amin=min(my_amin,avalue)
1564 my_amax=max(my_amax,avalue)
1568 IF (
associated(awrk8))
deallocate (awrk8)
1573 CALL pio_read_darray (piofile, &
1576 & awrk4(imin:,jmin:), &
1581 IF (abs(awrk4(i,j)).ge.abs(real(aspval,r4)))
THEN
1584 avalue=real(ascl*(afactor*awrk4(i,j)+aoffset),r8)
1586 my_amin=real(min(my_amin,avalue),r8)
1587 my_amax=real(max(my_amax,avalue),r8)
1591 IF (
associated(awrk4))
deallocate (awrk4)
1600 CALL mp_reduce (ng, model, 2, rbuffer, op_handle)
1604 IF ((abs(amin).ge.abs(
spval)).and. &
1605 & (abs(amax).ge.abs(
spval)))
THEN
1616 IF (interpolate)
THEN
1620 CALL regrid_pio (ng, model, ncname, piofile, &
1622 & ilen, jlen, wrk, amin, amax, &
1623 & lbi, ubi, lbj, ubj, &
1624 & imin, imax, jmin, jmax, &
1628 &
grid(ng) % MyLon, &
1629 &
grid(ng) % lonp, &
1630 &
grid(ng) % latp, &
1633 CALL regrid_pio (ng, model, ncname, piofile, &
1635 & ilen, jlen, wrk, amin, amax, &
1636 & lbi, ubi, lbj, ubj, &
1637 & imin, imax, jmin, jmax, &
1641 &
grid(ng) % MyLon, &
1648 CALL regrid_pio (ng, model, ncname, piofile, &
1650 & ilen, jlen, wrk, amin, amax, &
1651 & lbi, ubi, lbj, ubj, &
1652 & imin, imax, jmin, jmax, &
1654 &
grid(ng) % rmask, &
1656 &
grid(ng) % MyLon, &
1657 &
grid(ng) % lonr, &
1658 &
grid(ng) % latr, &
1661 CALL regrid_pio (ng, model, ncname, piofile, &
1663 & ilen, jlen, wrk, amin, amax, &
1664 & lbi, ubi, lbj, ubj, &
1665 & imin, imax, jmin, jmax, &
1667 &
grid(ng) % rmask, &
1669 &
grid(ng) % MyLon, &
1676 CALL regrid_pio (ng, model, ncname, piofile, &
1678 & ilen, jlen, wrk, amin, amax, &
1679 & lbi, ubi, lbj, ubj, &
1680 & imin, imax, jmin, jmax, &
1682 &
grid(ng) % umask, &
1684 &
grid(ng) % MyLon, &
1685 &
grid(ng) % lonu, &
1686 &
grid(ng) % latu, &
1689 CALL regrid_pio (ng, model, ncname, piofile, &
1691 & ilen, jlen, wrk, amin, amax, &
1692 & lbi, ubi, lbj, ubj, &
1693 & imin, imax, jmin, jmax, &
1695 &
grid(ng) % umask, &
1697 &
grid(ng) % MyLon, &
1704 CALL regrid_pio (ng, model, ncname, piofile, &
1706 & ilen, jlen, wrk, amin, amax, &
1707 & lbi, ubi, lbj, ubj, &
1708 & imin, imax, jmin, jmax, &
1710 &
grid(ng) % vmask, &
1712 &
grid(ng) % MyLon, &
1713 &
grid(ng) % lonv, &
1714 &
grid(ng) % latv, &
1717 CALL regrid_pio (ng, model, ncname, piofile, &
1719 & ilen, jlen, wrk, amin, amax, &
1720 & lbi, ubi, lbj, ubj, &
1721 & imin, imax, jmin, jmax, &
1723 &
grid(ng) % vmask, &
1725 &
grid(ng) % MyLon, &
1732 CALL regrid_pio (ng, model, ncname, piofile, &
1734 & ilen, jlen, wrk, amin, amax, &
1735 & lbi, ubi, lbj, ubj, &
1736 & imin, imax, jmin, jmax, &
1738 &
grid(ng) % rmask, &
1740 &
grid(ng) % MyLon, &
1741 &
grid(ng) % lonr, &
1742 &
grid(ng) % latr, &
1745 CALL regrid_pio (ng, model, ncname, piofile, &
1747 & ilen, jlen, wrk, amin, amax, &
1748 & lbi, ubi, lbj, ubj, &
1749 & imin, imax, jmin, jmax, &
1751 &
grid(ng) % rmask, &
1753 &
grid(ng) % MyLon, &
1762 IF (
allocated(wrk))
THEN
1770 npts=(imax-imin+1)*(jmax-jmin+1)
1771 IF (.not.
allocated(cwrk))
allocate ( cwrk(npts) )
1772 cwrk=pack(adat(imin:imax, jmin:jmax), .true.)
1773 CALL get_hash (cwrk, npts, checksum, .true.)
1774 IF (
allocated(cwrk))
deallocate (cwrk)
1778 END FUNCTION pio_fread2d_xtr
subroutine, public tile_bounds_2d(ng, tile, imax, jmax, itile, jtile, istr, iend, jstr, jend)
subroutine, public tile_bounds_1d(ng, tile, imax, istr, iend)
subroutine, public get_hash(a, asize, hash, lreduce)
type(t_grid), dimension(:), allocatable grid
integer, dimension(:), allocatable tilesize
integer, parameter r3dvar
integer, parameter u3dvar
integer, dimension(:), allocatable lm
integer, parameter u2dvar
integer, parameter p2dvar
integer, dimension(:), allocatable mm
integer, parameter r2dvar
integer, parameter v2dvar
integer, parameter p3dvar
integer, parameter v3dvar
real(dp), parameter spval
real(dp), parameter spval_check
type(t_scalars), dimension(:), allocatable scalars
subroutine, public regrid_nf90(ng, model, ncname, ncid, ncvname, ncvarid, gtype, iflag, nx, ny, finp, amin, amax, lbi, ubi, lbj, ubj, imin, imax, jmin, jmax, mymask, myxout, xout, yout, fout)
subroutine, public regrid_pio(ng, model, ncname, piofile, ncvname, piovar, gtype, iflag, nx, ny, finp, amin, amax, lbi, ubi, lbj, ubj, imin, imax, jmin, jmax, mymask, myxout, xout, yout, fout)
logical function, public founderror(flag, noerr, line, routine)