File: numerical.f

package info (click to toggle)
flextra 5.0-2.1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 860 kB
  • ctags: 402
  • sloc: fortran: 6,987; makefile: 55; sh: 17
file content (100 lines) | stat: -rw-r--r-- 2,826 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
C THESE ROUTINES HAVE BEEN TAKEN FROM PRESS ET AL. (1992): NUMERICAL RECIPES
C HOWEVER, THEY HAVE BEEN MODIFIED FOR PERFORMANCE REASONS.
C A. Stohl, 31 May 1994


      SUBROUTINE BICUBIC(Y,Y1,Y2,Y12,X1L,X1U,X2L,X2U,X1,X2,ANSY,LD1,LD2)
      DIMENSION Y(4,LD1,LD2),Y1(4,LD1,LD2),Y2(4,LD1,LD2),Y12(4,LD1,LD2)
      DIMENSION C(4,4,2,3),ANSY(LD1,LD2)
      CALL BCUCOF(Y,Y1,Y2,Y12,X1U-X1L,X2U-X2L,C,LD1,LD2)
      T=(X1-X1L)/(X1U-X1L)
      U=(X2-X2L)/(X2U-X2L)
      DO 11 M=1,LD1
        DO 11 N=1,LD2
          ANSY(M,N)=0.
          DO 11 I=4,1,-1
11          ANSY(M,N)=T*ANSY(M,N)+((C(I,4,M,N)*U+C(I,3,M,N))*U+
     +      C(I,2,M,N))*U+C(I,1,M,N)
      RETURN
      END
 

      SUBROUTINE BCUCOF(Y,Y1,Y2,Y12,D1,D2,C,LD1,LD2)
      DIMENSION C(4,4,2,3),Y(4,LD1,LD2),Y1(4,LD1,LD2)
      DIMENSION Y2(4,LD1,LD2),Y12(4,LD1,LD2)
      DIMENSION CL(16),X(16),WT(16,16)
      SAVE WT
      DATA WT/1.,0.,-3.,2.,4*0.,-3.,0.,9.,-6.,2.,0.,-6.,
     *  4.,8*0.,3.,0.,-9.,6.,-2.,0.,6.,-4.,10*0.,9.,-6.,
     *  2*0.,-6.,4.,2*0.,3.,-2.,6*0.,-9.,6.,2*0.,6.,-4.,
     *  4*0.,1.,0.,-3.,2.,-2.,0.,6.,-4.,1.,0.,-3.,2.,8*0.,
     *  -1.,0.,3.,-2.,1.,0.,-3.,2.,10*0.,-3.,2.,2*0.,3.,
     *  -2.,6*0.,3.,-2.,2*0.,-6.,4.,2*0.,3.,-2.,0.,1.,-2.,
     *  1.,5*0.,-3.,6.,-3.,0.,2.,-4.,2.,9*0.,3.,-6.,3.,0.,
     *  -2.,4.,-2.,10*0.,-3.,3.,2*0.,2.,-2.,2*0.,-1.,1.,
     *  6*0.,3.,-3.,2*0.,-2.,2.,5*0.,1.,-2.,1.,0.,-2.,4.,
     *  -2.,0.,1.,-2.,1.,9*0.,-1.,2.,-1.,0.,1.,-2.,1.,10*0.,
     *  1.,-1.,2*0.,-1.,1.,6*0.,-1.,1.,2*0.,2.,-2.,2*0.,-1.,1./
      D1D2=D1*D2
      DO 15 M=1,LD1
        DO 15 N=1,LD2
          DO 11 I=1,4
            X(I)=Y(I,M,N)
            X(I+4)=Y1(I,M,N)*D1
            X(I+8)=Y2(I,M,N)*D2
11          X(I+12)=Y12(I,M,N)*D1D2
          DO 13 I=1,16
            XX=0.
            DO 12 K=1,16
12            XX=XX+WT(I,K)*X(K)
13          CL(I)=XX
          L=0
          DO 15 I=1,4
            DO 15 J=1,4
              L=L+1
15            C(I,J,M,N)=CL(L)
      RETURN
      END




      SUBROUTINE POLYNOM(XA,YA,N,X,Y,LD)
      PARAMETER (NMAX=10)
      DIMENSION XA(N),YA(LD,N),C(2,NMAX),D(2,NMAX),Y(LD)
      NSS=1
      DIF=ABS(X-XA(1))
      DO 11 I=1,N
        DIFT=ABS(X-XA(I))
        IF (DIFT.LT.DIF) THEN
          NSS=I
          DIF=DIFT
        ENDIF
        DO 11 MM=1,LD
        C(MM,I)=YA(MM,I)
11      D(MM,I)=YA(MM,I)

      DO 13 MM=1,LD
        NS=NSS
        Y(MM)=YA(MM,NS)
        NS=NS-1
      DO 13 M=1,N-1
        DO 12 I=1,N-M
          HO=XA(I)-X
          HP=XA(I+M)-X
          W=C(MM,I+1)-D(MM,I)
          DEN=HO-HP
          DEN=W/DEN
          D(MM,I)=HP*DEN
          C(MM,I)=HO*DEN
12      CONTINUE
        IF (2*NS.LT.N-M)THEN
          DY=C(MM,NS+1)
        ELSE
          DY=D(MM,NS)
          NS=NS-1
        ENDIF
        Y(MM)=Y(MM)+DY
13    CONTINUE
      RETURN
      END