32
33
34
37
38
39
40#include "implicit_f.inc"
41
42
43
44 TYPE(TABLE_4D_) ,INTENT(IN) :: TABLE
45 my_real ,
INTENT(OUT) :: stiffini,stiffmin,stiffmax
47
48
49
50 INTEGER I,J,K,L,NDIM,NPT,LEN2,LEN3,LEN4
52
53
54
55 stiffini = zero
56 stiffmax = zero
57 stiffmin = ep20
58 xmax = zero
59 y1 = 0
60 ndim = table%NDIM
61 npt = SIZE(table%X(1)%VALUES)
62
63 IF (ndim == 1) THEN
64 x1 = table%X(1)%VALUES(1)
65 y1 = table%Y1D(1)
66 IF (x1 >= zero) THEN
67 dx = table%X(1)%VALUES(2) - x1
68 dy = table%Y1D(2) - y1
69 stiffini = dy/dx
70 ENDIF
71 DO i = 2,npt
72 x2 = table%X(1)%VALUES(i)
73 y2 = table%Y1D(i)
74 dx = x2 - x1
75 dy = y2 - y1
76 dydx = dy/dx
77 IF (dydx > stiffmax) THEN
78 stiffmax = dydx
79 xmax = x1
80 END IF
81 stiffmin =
min(stiffmin,dydx)
82 IF (x1 == zero .or. x2 == zero) THEN
83 stiffini =
max(stiffini, dydx)
84 ENDIF
85 x1 = x2
86 y1 = y2
87 ENDDO
88
89 ELSE IF (ndim == 2) THEN
90 len2 = SIZE(table%X(2)%VALUES)
91 x1 = table%X(1)%VALUES(1)
92 y1 = table%Y2D(1,1)
93 y2 = 0
94 DO i = 2,npt
95 x2 = table%X(1)%VALUES(i)
96 dx = x2 - x1
97 DO j = 1,len2
98 y2 = table%Y2D(i,j)
99 dy = y2 - y1
100 dydx = dy/dx
101 IF (dydx > stiffmax) THEN
102 stiffmax = dydx
103 xmax = x1
104 END IF
105 stiffmin =
min(stiffmin,dydx)
106 IF (x1 == zero .or. x2 == zero) THEN
107 stiffini =
max(stiffini, dydx)
108 ENDIF
109 ENDDO
110 y1 = y2
111 x1 = x2
112 ENDDO
113
114 ELSE IF (ndim == 3) THEN
115 len2 = SIZE(table%X(2)%VALUES)
116 len3 = SIZE(table%X(3)%VALUES)
117 x1 = table%X(1)%VALUES(1)
118 DO i = 2,npt
119 x2 = table%X(1)%VALUES(i)
120 dx = x2 - x1
121 DO j = 1,len2
122 DO k = 1,len3
123 y1 = table%Y3D(i-1,j,k)
124 y2 = table%Y3D(i ,j,k)
125 dy = y2 - y1
126 dydx = dy/dx
127 IF (dydx > stiffmax) THEN
128 stiffmax = dydx
129 xmax = x1
130 END IF
131 stiffmin =
min(stiffmin,dydx)
132 IF (x1 == zero .or. x2 == zero) THEN
133 stiffini =
max(stiffini, dydx)
134 ENDIF
135 ENDDO
136 ENDDO
137 x1 = x2
138 ENDDO
139
140 ELSE IF (ndim == 4) THEN
141 len2 = SIZE(table%X(2)%VALUES)
142 len3 = SIZE(table%X(3)%VALUES)
143 len4 = SIZE(table%X(4)%VALUES)
144 x1 = table%X(1)%VALUES(1)
145 DO i = 2,npt
146 x2 = table%X(1)%VALUES(i)
147 dx = x2 - x1
148 DO j = 1,len2
149 DO k = 1,len3
150 DO l = 1,len4
151 y1 = table%Y4D(i-1,j,k,l)
152 y2 = table%Y4D(i ,j,k,l)
153 dy = y2 - y1
154 dydx = dy/dx
155 IF (dydx > stiffmax) THEN
156 stiffmax = dydx
157 xmax = x1
158 END IF
159 stiffmin =
min(stiffmin,dydx)
160 IF (x1 == zero .or. x2 == zero) THEN
161 stiffini =
max(stiffini, dydx)
162 ENDIF
163 ENDDO
164 ENDDO
165 ENDDO
166 x1 = x2
167 ENDDO
168
169 END IF
170
171 RETURN