NCEPLIBS-w3emc  2.11.0
w3ft03.f
Go to the documentation of this file.
1 C> @file
2 C> @brief A point interpolater.
3 C> @author James Howcroft @date 1979-02-15
4 
5 C> Do either bilinear or biquadratic interpolation for a
6 C> point within a two-dimensional data array.
7 C>
8 C> ### Program History Log:
9 C> Date | Programmer | Comment
10 C> -----|------------|--------
11 C> 1979-02-15 | James Howcroft | Initial.
12 C> 1989-01-25 | Ralph Jones | Change to microsoft fortran 4.10.
13 C> 1990-06-12 | Ralph Jones | Change to sun fortran 1.3.
14 C> 1991-03-30 | Ralph Jones | Convert to silicongraphics fortran.
15 C> 1993-03-29 | Ralph Jones | Add save statement.
16 C> 1996-07-01 | Ralph Jones | Compile on cray.
17 C>
18 C> @param[in] FL Real*4 two-dimensional cartesian array of data.
19 C> @param[in] MAXI Integer*4 i-dimension of fl.
20 C> @param[in] MAXJ Integer*4 j-dimension of fl.
21 C> @param[in] STI Real*4 i-coordinate to which a value is to be
22 C> interpolated.
23 C> @param[in] STJ Real*4 j-coordinate to which a value is to be
24 C> interpolated.
25 C> @param ITYPE
26 C> @param[out] HI Real*4 interpolated output value.
27 C>
28 C> @remark No error checks are made. it is left for the user to
29 C> determine that the point for which interpolation is desired
30 C> lies within the grid.
31 C>
32 C> @author James Howcroft @date 1979-02-15
33  SUBROUTINE w3ft03(FL,HI,STI,STJ,MAXI,MAXJ,ITYPE)
34 C
35  REAL FL(MAXI,MAXJ)
36  REAL E (4)
37 C
38  SAVE
39 C
40  i = sti
41  j = stj
42  di = i
43  dj = j
44  di = sti - di
45  dj = stj - dj
46 C
47  hi = 0.
48 C TEST FOR POINT OFF GRID.
49  IF (i.LT.1 .OR. i.GT.maxi) GO TO 300
50  IF (j.LT.1 .OR. j.GT.maxj) GO TO 300
51  IF (itype .NE. 2) GO TO 100
52 C DO BILINEAR IF POINT IS BETWEEN ULTIMATE AND
53 C PENULTIMATE ROWS, WHERE BIQUAD NOT POSSIBLE.
54  IF (i.LT.2 .OR. i.GT.(maxi-1)) GO TO 100
55  IF (j.LT.2 .OR. j.GT.(maxj-1)) GO TO 100
56  GO TO 200
57 C
58 C BILINEAR.
59  100 CONTINUE
60  hi = fl(i ,j )*(1.-di)*(1.-dj) + fl(i+1,j )*di*(1.-dj)
61  & + fl(i ,j+1)*(1.-di)*dj + fl(i+1,j+1)*di*dj
62  GO TO 300
63 C
64  200 CONTINUE
65 C BIQUADRATIC.
66  di2 = di*(di-1.)*.25
67  dj2 = dj*(dj-1.)*.25
68  j1 = j - 1
69  DO 250 k=1,4
70  e(k) = fl(i ,j1)*(1.-di-di2) + fl(i+1,j1)*(di-di2)
71  & + (fl(i-1,j1) + fl(i+2,j1))*di2
72  j1 = j1 + 1
73  250 CONTINUE
74  hi = e(2)*(1.-dj-dj2) + e(3)*(dj-dj2) + (e(1) + e(4))*dj2
75 C
76  300 CONTINUE
77  RETURN
78  END
subroutine w3ft03(FL, HI, STI, STJ, MAXI, MAXJ, ITYPE)
Do either bilinear or biquadratic interpolation for a point within a two-dimensional data array.
Definition: w3ft03.f:34