V3FIT
gridintrp2d.f
1  subroutine gridintrp2d(
2  > x_newgrid,nx_new,y_newgrid,ny_new,f_new,if1,
3  > nx,xpkg,ny,ypkg,jspline,fspl,icoeff,ixdim,iydim,iwarn,ier)
4 c
5 c regrid a spline function f defined vs. x,y as in xpkg,ypkg
6 c to a new grid, given by x_newgrid, y_newgrid
7 c
8 c set warning flag if the range x_newgrid, y_newgrid
9 c exceeds the range of the original xpkg,ypkg.
10 c
11 c (xpkg,ypkg -- axis data, see genxpkg subroutine)
12 c
13 c input:
14 c
15  real x_newgrid(nx_new) ! new x grid
16  real y_newgrid(ny_new) ! new y grid
17 c
18 c output:
19 c
20  integer if1 ! 1st dimension of f_new
21  real f_new(if1,ny_new) ! f evaluated on this grid
22 c
23 c input:
24 c
25  integer nx ! size of old grid
26  real xpkg(nx,4) ! old grid "package"
27  integer ny ! size of old grid
28  real ypkg(ny,4) ! old grid "package"
29 c
30  integer jspline(2) ! interpolation type by dimension
31  integer :: icoeff ! coefficients per data point
32  integer :: ixdim,iydim ! fspl dimensions
33  ! =nx,ny unless zonal step function interpolation is used
34 
35  real fspl(icoeff,ixdim,iydim) ! spline coefficients of f
36 c
37 c output:
38 c condition codes, =0 for normal exit
39 c
40  integer iwarn ! =1 if new grid points out of range
41  integer ier ! =1 if there is an argument error
42 c
43 c--------------------------------------------
44 c local
45 c
46  real ytmp(nx_new)
47  integer ict(6)
48 c
49  data ict/1,0,0,0,0,0/
50 c
51 c--------------------------------------------
52 c
53  do iy=1,ny_new
54  ytmp=y_newgrid(iy)
55  call vecintrp2d(ict,nx_new,x_newgrid,ytmp,nx_new,f_new(1,iy),
56  > nx,xpkg,ny,ypkg,jspline,fspl,icoeff,ixdim,iydim,iwarn,ier)
57  enddo
58 c
59  return
60  end