29 implicit double precision(a-h,o-z)
30 parameter(len=6000*40000)
31 real*4 z(len),zrec(40000)
32 integer h(len),hrec(40000)
34 equivalence(h(1),z(1)),(hrec(1),zrec(1))
35 common/gstuff/glamn,dgla,glamx,glomn,dglo,glomx,nla,nlo,nclip
42 write(*,*)
'program regrd2' 46 2
format(
'Enter master grid file: ',$)
49 open(lin,file=fname,status=
'old',form=
'unformatted')
50 read(lin) glamn,glomn,dgla,dglo,nla,nlo,ikind
51 glamx=glamn+dgla*(nla-1)
52 glomx=glomn+dglo*(nlo-1)
53 if(nla*nlo.gt.len) stop 12345
54 if(nla.lt.4.or.nlo.lt.4) stop 54321
58 write(*,*)
'kind=',ikind
59 write(*,*)
'LAT min=',glamn
60 write(*,*)
' del=',dgla,
' # lat=',nla
61 write(*,*)
' max=',glamx
62 write(*,*)
'LON min=',glomn
63 write(*,*)
' del=',dglo,
' # lon=',nlo
64 write(*,*)
' max=',glomx
68 3
format(
'Enter regridded output file:',$)
70 open(lout,file=fname,status=
'new',form=
'unformatted')
111 94
format(
'Enter new number of rows (latitude) : ',$)
113 if(nla2.lt.0)
go to 93
116 99
format(
'Enter new number of columns (longitude): ',$)
118 if(nlo2.lt.0)
go to 98
124 dgla2=(glamx2-glamn2)/(nla2-1)
125 dglo2=(glomx2-glomn2)/(nlo2-1)
132 call r1(lin,h,nla,nlo)
134 call r2(lin,z,nla,nlo)
140 write(lout) glamn2,glomn2,dgla2,dglo2,nla2,nlo2,ikind
144 gla=glamn2+(ir-1)*dgla2
146 glo=glomn2+(ic-1)*dglo2
147 call bquad1(h,gla,glo,ival)
148 if(ival.ge.2147483647) stop 11111
151 write(lout) (hrec(i),i=1,nlo2)
155 gla=glamn2+(ir-1)*dgla2
157 glo=glomn2+(ic-1)*dglo2
158 call bquad2(z,gla,glo,val)
159 if(val.ge.1.d30) stop 22222
162 write(lout) (zrec(i),i=1,nlo2)
168 subroutine bquad1(h,gla,glo,ival)
173 implicit double precision(a-h,o-z)
175 real*4 x,y,fx0,fx1,fx2,val,qterp1,qterp2
176 external qterp1,qterp2
177 common/gstuff/glamn,dgla,glamx,glomn,dglo,glomx,nla,nlo,nclip
179 if(gla.lt.glamn.or.gla.gt.glamx.or.
180 * glo.lt.glomn.or.glo.gt.glomx)
then 187 ix=(glo-glomn)/dglo+1.d0
200 x=(glo-dglo*(ix-1)-glomn)/dglo
204 if(x.lt.0.5.and.ix.gt.1)
then 210 if(x.lt.0..or.x.gt.2.) stop 55555
214 jy=(gla-glamn)/dgla+1.d0
223 y=(gla-dgla*(jy-1)-glamn)/dgla
224 if(y.lt.0.5.and.jy.gt.1)
then 230 if(y.lt.0..or.y.gt.2.) stop 33333
232 fx0=qterp1(x, h(jy ,ix ), h(jy ,ix1), h(jy ,ix2))
233 fx1=qterp1(x, h(jy1,ix ), h(jy1,ix1), h(jy1,ix2))
234 fx2=qterp1(x, h(jy2,ix ), h(jy2,ix1), h(jy2,ix2))
235 val=qterp2(y, fx0 , fx1 , fx2 )
241 subroutine bquad2(z,gla,glo,val)
246 implicit double precision(a-h,o-z)
248 real*4 x,y,fx0,fx1,fx2,qterp2
250 common/gstuff/glamn,dgla,glamx,glomn,dglo,glomx,nla,nlo,nclip
252 if(gla.lt.glamn.or.gla.gt.glamx.or.
253 * glo.lt.glomn.or.glo.gt.glomx)
then 260 ix=(glo-glomn)/dglo+1.d0
273 x=(glo-dglo*(ix-1)-glomn)/dglo
277 if(x.lt.0.5.and.ix.gt.1)
then 283 if(x.lt.0..or.x.gt.2.) stop 66666
287 jy=(gla-glamn)/dgla+1.d0
296 y=(gla-dgla*(jy-1)-glamn)/dgla
297 if(y.lt.0.5.and.jy.gt.1)
then 303 if(y.lt.0..or.y.gt.2.) stop 44444
305 fx0= qterp2(x, z(jy ,ix ), z(jy ,ix1), z(jy ,ix2))
306 fx1= qterp2(x, z(jy1,ix ), z(jy1,ix1), z(jy1,ix2))
307 fx2= qterp2(x, z(jy2,ix ), z(jy2,ix1), z(jy2,ix2))
308 val=dble(qterp2(y, fx0 , fx1 , fx2 ))
313 real function qterp1(x,if0,if1,if2)
325 qterp1=if0 + x*idf0 + 0.5*x*(x-1.)*id2f0
329 real function qterp2(x,f0,f1,f2)
341 qterp2=f0 + x*df0 + 0.5*x*(x-1.)*d2f0
345 subroutine r1(lin,h,nla,nlo)
349 implicit double precision(a-h,o-z)
353 1
read(lin) (h(i,j),j=1,nlo)
357 subroutine r2(lin,z,nla,nlo)
361 implicit double precision(a-h,o-z)
365 1
read(lin) (z(i,j),j=1,nlo)
subroutine bquad2(z, gla, glo, val)
subroutine bquad1(h, gla, glo, ival)
real function qterp2(x, f0, f1, f2)
real function qterp1(x, if0, if1, if2)
subroutine r2(lin, z, nla, nlo)
program regrd2
Part of the NADCON5 NADCON5 Core Library , regrid data.
subroutine r1(lin, h, nla, nlo)