18 real(kind=realtype),
dimension(3),
intent(in) :: frac
19 real(kind=realtype),
dimension(3),
intent(in) :: fracd
20 real(kind=realtype),
dimension(8),
intent(out) :: weights
21 real(kind=realtype),
dimension(8),
intent(out) :: weightsd
22 real(kind=realtype) :: temp
24 temp = (
one-frac(1))*(
one-frac(2))
25 weightsd(1) = (
one-frac(3))*(-((
one-frac(2))*fracd(1))-(
one-frac(1))&
26 & *fracd(2)) - temp*fracd(3)
27 weights(1) = temp*(
one-frac(3))
28 temp = frac(1)*(
one-frac(2))
29 weightsd(2) = (
one-frac(3))*((
one-frac(2))*fracd(1)-frac(1)*fracd(2)&
31 weights(2) = temp*(
one-frac(3))
32 temp = (
one-frac(1))*frac(2)
33 weightsd(3) = (
one-frac(3))*((
one-frac(1))*fracd(2)-frac(2)*fracd(1)&
35 weights(3) = temp*(
one-frac(3))
36 weightsd(4) = (
one-frac(3))*(frac(2)*fracd(1)+frac(1)*fracd(2)) - &
37 & frac(1)*frac(2)*fracd(3)
38 weights(4) = frac(1)*frac(2)*(
one-frac(3))
39 temp = (
one-frac(1))*frac(3)
40 weightsd(5) = (
one-frac(2))*((
one-frac(1))*fracd(3)-frac(3)*fracd(1)&
42 weights(5) = temp*(
one-frac(2))
43 weightsd(6) = (
one-frac(2))*(frac(3)*fracd(1)+frac(1)*fracd(3)) - &
44 & frac(1)*frac(3)*fracd(2)
45 weights(6) = frac(1)*(
one-frac(2))*frac(3)
46 weightsd(7) = (
one-frac(1))*(frac(3)*fracd(2)+frac(2)*fracd(3)) - &
47 & frac(2)*frac(3)*fracd(1)
48 weights(7) = (
one-frac(1))*frac(2)*frac(3)
49 weightsd(8) = frac(3)*(frac(2)*fracd(1)+frac(1)*fracd(2)) + frac(1)*&
51 weights(8) = frac(1)*frac(2)*frac(3)
60 real(kind=realtype),
dimension(3),
intent(in) :: frac
61 real(kind=realtype),
dimension(8),
intent(out) :: weights
62 weights(1) = (
one-frac(1))*(
one-frac(2))*(
one-frac(3))
63 weights(2) = frac(1)*(
one-frac(2))*(
one-frac(3))
64 weights(3) = (
one-frac(1))*frac(2)*(
one-frac(3))
65 weights(4) = frac(1)*frac(2)*(
one-frac(3))
66 weights(5) = (
one-frac(1))*(
one-frac(2))*frac(3)
67 weights(6) = frac(1)*(
one-frac(2))*frac(3)
68 weights(7) = (
one-frac(1))*frac(2)*frac(3)
69 weights(8) = frac(1)*frac(2)*frac(3)
75 real(kind=realtype),
dimension(3),
intent(in) :: frac
76 real(kind=realtype),
dimension(8),
intent(out) :: weights
77 weights(1) = (
one-frac(1))*(
one-frac(2))*(
one-frac(3))
78 weights(2) = frac(1)*(
one-frac(2))*(
one-frac(3))
79 weights(3) = frac(1)*frac(2)*(
one-frac(3))
80 weights(4) = (
one-frac(1))*frac(2)*(
one-frac(3))
81 weights(5) = (
one-frac(1))*(
one-frac(2))*frac(3)
82 weights(6) = frac(1)*(
one-frac(2))*frac(3)
83 weights(7) = frac(1)*frac(2)*frac(3)
84 weights(8) = (
one-frac(1))*frac(2)*frac(3)
100 real(kind=realtype),
dimension(3),
intent(in) :: xcen
101 real(kind=realtype),
dimension(3),
intent(in) :: xcend
102 real(kind=realtype),
dimension(3, 3, 3, 3),
intent(in) :: blk
103 real(kind=realtype),
dimension(3, 3, 3, 3),
intent(in) :: blkd
104 real(kind=realtype),
dimension(3),
intent(in) :: frac0
106 real(kind=realtype),
dimension(3),
intent(out) :: frac
107 real(kind=realtype),
dimension(3),
intent(out) :: fracd
109 real(kind=realtype),
dimension(3, 8) :: xn
110 real(kind=realtype),
dimension(3, 8) :: xnd
111 real(kind=realtype) :: u, v, w, uv, uw, vw, wvu, du, dv, dw
112 real(kind=realtype) :: ud, vd, wd, uvd, uwd, vwd, wvud, dud, dvd, &
114 real(kind=realtype) :: a11, a12, a13, a21, a22, a23, a31, a32, a33, &
116 real(kind=realtype) :: a11d, a12d, a13d, a21d, a22d, a23d, a31d, &
118 real(kind=realtype) :: f(3), x(3)
119 real(kind=realtype) :: fd(3), xd(3)
120 integer(kind=inttype),
dimension(8),
parameter :: indices=(/1, 2, 4&
122 integer(kind=inttype) :: i, j, k, ii, ll
123 real(kind=realtype),
parameter :: adteps=1.e-25_realtype
124 real(kind=realtype),
parameter :: thresconv=1.e-10_realtype
129 real(kind=realtype) :: x1
130 real(kind=realtype) :: x1d
131 real(kind=realtype) :: max1
132 real(kind=realtype) :: max1d
133 real(kind=realtype) :: arg1
134 real(kind=realtype) :: temp
135 real(kind=realtype) :: temp0
136 real(kind=realtype) :: temp1
137 real(kind=realtype) :: temp2
146 xnd(:, indices(ii)) =
eighth*(blkd(i, j, k, :)+blkd(i+1, j, k&
147 & , :)+blkd(i, j+1, k, :)+blkd(i+1, j+1, k, :)+blkd(i, j, k+1&
148 & , :)+blkd(i+1, j, k+1, :)+blkd(i, j+1, k+1, :)+blkd(i+1, j+1&
150 xn(:, indices(ii)) =
eighth*(blk(i, j, k, :)+blk(i+1, j, k, :)&
151 & +blk(i, j+1, k, :)+blk(i+1, j+1, k, :)+blk(i, j, k+1, :)+blk&
152 & (i+1, j, k+1, :)+blk(i, j+1, k+1, :)+blk(i+1, j+1, k+1, :))
158 xnd(:, i) = xnd(:, i) - xnd(:, 1)
159 xn(:, i) = xn(:, i) - xn(:, 1)
162 xd = xcend - xnd(:, 1)
167 xnd(1, 7) = xnd(1, 7) + xnd(1, 2) + xnd(1, 4) + xnd(1, 5) - xnd(1, 3&
168 & ) - xnd(1, 6) - xnd(1, 8)
169 xn(1, 7) = xn(1, 7) + xn(1, 2) + xn(1, 4) + xn(1, 5) - xn(1, 3) - xn&
171 xnd(2, 7) = xnd(2, 7) + xnd(2, 2) + xnd(2, 4) + xnd(2, 5) - xnd(2, 3&
172 & ) - xnd(2, 6) - xnd(2, 8)
173 xn(2, 7) = xn(2, 7) + xn(2, 2) + xn(2, 4) + xn(2, 5) - xn(2, 3) - xn&
175 xnd(3, 7) = xnd(3, 7) + xnd(3, 2) + xnd(3, 4) + xnd(3, 5) - xnd(3, 3&
176 & ) - xnd(3, 6) - xnd(3, 8)
177 xn(3, 7) = xn(3, 7) + xn(3, 2) + xn(3, 4) + xn(3, 5) - xn(3, 3) - xn&
179 xnd(1, 3) = xnd(1, 3) - xnd(1, 2) - xnd(1, 4)
180 xn(1, 3) = xn(1, 3) - xn(1, 2) - xn(1, 4)
181 xnd(2, 3) = xnd(2, 3) - xnd(2, 2) - xnd(2, 4)
182 xn(2, 3) = xn(2, 3) - xn(2, 2) - xn(2, 4)
183 xnd(3, 3) = xnd(3, 3) - xnd(3, 2) - xnd(3, 4)
184 xn(3, 3) = xn(3, 3) - xn(3, 2) - xn(3, 4)
185 xnd(1, 6) = xnd(1, 6) - xnd(1, 2) - xnd(1, 5)
186 xn(1, 6) = xn(1, 6) - xn(1, 2) - xn(1, 5)
187 xnd(2, 6) = xnd(2, 6) - xnd(2, 2) - xnd(2, 5)
188 xn(2, 6) = xn(2, 6) - xn(2, 2) - xn(2, 5)
189 xnd(3, 6) = xnd(3, 6) - xnd(3, 2) - xnd(3, 5)
190 xn(3, 6) = xn(3, 6) - xn(3, 2) - xn(3, 5)
191 xnd(1, 8) = xnd(1, 8) - xnd(1, 4) - xnd(1, 5)
192 xn(1, 8) = xn(1, 8) - xn(1, 4) - xn(1, 5)
193 xnd(2, 8) = xnd(2, 8) - xnd(2, 4) - xnd(2, 5)
194 xn(2, 8) = xn(2, 8) - xn(2, 4) - xn(2, 5)
195 xnd(3, 8) = xnd(3, 8) - xnd(3, 4) - xnd(3, 5)
196 xn(3, 8) = xn(3, 8) - xn(3, 4) - xn(3, 5)
207 newtonhexa:
do ll=1,15
215 wvud = w*(v*ud+u*vd) + u*v*wd
217 fd(1) = u*xnd(1, 2) + xn(1, 2)*ud + v*xnd(1, 4) + xn(1, 4)*vd + w*&
218 & xnd(1, 5) + xn(1, 5)*wd + uv*xnd(1, 3) + xn(1, 3)*uvd + uw*xnd(1&
219 & , 6) + xn(1, 6)*uwd + vw*xnd(1, 8) + xn(1, 8)*vwd + wvu*xnd(1, 7&
220 & ) + xn(1, 7)*wvud - xd(1)
221 f(1) = xn(1, 2)*u + xn(1, 4)*v + xn(1, 5)*w + xn(1, 3)*uv + xn(1, &
222 & 6)*uw + xn(1, 8)*vw + xn(1, 7)*wvu - x(1)
223 fd(2) = u*xnd(2, 2) + xn(2, 2)*ud + v*xnd(2, 4) + xn(2, 4)*vd + w*&
224 & xnd(2, 5) + xn(2, 5)*wd + uv*xnd(2, 3) + xn(2, 3)*uvd + uw*xnd(2&
225 & , 6) + xn(2, 6)*uwd + vw*xnd(2, 8) + xn(2, 8)*vwd + wvu*xnd(2, 7&
226 & ) + xn(2, 7)*wvud - xd(2)
227 f(2) = xn(2, 2)*u + xn(2, 4)*v + xn(2, 5)*w + xn(2, 3)*uv + xn(2, &
228 & 6)*uw + xn(2, 8)*vw + xn(2, 7)*wvu - x(2)
229 fd(3) = u*xnd(3, 2) + xn(3, 2)*ud + v*xnd(3, 4) + xn(3, 4)*vd + w*&
230 & xnd(3, 5) + xn(3, 5)*wd + uv*xnd(3, 3) + xn(3, 3)*uvd + uw*xnd(3&
231 & , 6) + xn(3, 6)*uwd + vw*xnd(3, 8) + xn(3, 8)*vwd + wvu*xnd(3, 7&
232 & ) + xn(3, 7)*wvud - xd(3)
233 f(3) = xn(3, 2)*u + xn(3, 4)*v + xn(3, 5)*w + xn(3, 3)*uv + xn(3, &
234 & 6)*uw + xn(3, 8)*vw + xn(3, 7)*wvu - x(3)
236 a11d = xnd(1, 2) + v*xnd(1, 3) + xn(1, 3)*vd + w*xnd(1, 6) + xn(1&
237 & , 6)*wd + vw*xnd(1, 7) + xn(1, 7)*vwd
238 a11 = xn(1, 2) + xn(1, 3)*v + xn(1, 6)*w + xn(1, 7)*vw
239 a12d = xnd(1, 4) + u*xnd(1, 3) + xn(1, 3)*ud + w*xnd(1, 8) + xn(1&
240 & , 8)*wd + uw*xnd(1, 7) + xn(1, 7)*uwd
241 a12 = xn(1, 4) + xn(1, 3)*u + xn(1, 8)*w + xn(1, 7)*uw
242 a13d = xnd(1, 5) + u*xnd(1, 6) + xn(1, 6)*ud + v*xnd(1, 8) + xn(1&
243 & , 8)*vd + uv*xnd(1, 7) + xn(1, 7)*uvd
244 a13 = xn(1, 5) + xn(1, 6)*u + xn(1, 8)*v + xn(1, 7)*uv
245 a21d = xnd(2, 2) + v*xnd(2, 3) + xn(2, 3)*vd + w*xnd(2, 6) + xn(2&
246 & , 6)*wd + vw*xnd(2, 7) + xn(2, 7)*vwd
247 a21 = xn(2, 2) + xn(2, 3)*v + xn(2, 6)*w + xn(2, 7)*vw
248 a22d = xnd(2, 4) + u*xnd(2, 3) + xn(2, 3)*ud + w*xnd(2, 8) + xn(2&
249 & , 8)*wd + uw*xnd(2, 7) + xn(2, 7)*uwd
250 a22 = xn(2, 4) + xn(2, 3)*u + xn(2, 8)*w + xn(2, 7)*uw
251 a23d = xnd(2, 5) + u*xnd(2, 6) + xn(2, 6)*ud + v*xnd(2, 8) + xn(2&
252 & , 8)*vd + uv*xnd(2, 7) + xn(2, 7)*uvd
253 a23 = xn(2, 5) + xn(2, 6)*u + xn(2, 8)*v + xn(2, 7)*uv
254 a31d = xnd(3, 2) + v*xnd(3, 3) + xn(3, 3)*vd + w*xnd(3, 6) + xn(3&
255 & , 6)*wd + vw*xnd(3, 7) + xn(3, 7)*vwd
256 a31 = xn(3, 2) + xn(3, 3)*v + xn(3, 6)*w + xn(3, 7)*vw
257 a32d = xnd(3, 4) + u*xnd(3, 3) + xn(3, 3)*ud + w*xnd(3, 8) + xn(3&
258 & , 8)*wd + uw*xnd(3, 7) + xn(3, 7)*uwd
259 a32 = xn(3, 4) + xn(3, 3)*u + xn(3, 8)*w + xn(3, 7)*uw
260 a33d = xnd(3, 5) + u*xnd(3, 6) + xn(3, 6)*ud + v*xnd(3, 8) + xn(3&
261 & , 8)*vd + uv*xnd(3, 7) + xn(3, 7)*uvd
262 a33 = xn(3, 5) + xn(3, 6)*u + xn(3, 8)*v + xn(3, 7)*uv
266 temp = a22*a33 - a32*a23
267 temp0 = a13*a32 - a12*a33
268 temp1 = a12*a23 - a13*a22
269 vald = temp*a11d + a11*(a33*a22d+a22*a33d-a23*a32d-a32*a23d) + &
270 & temp0*a21d + a21*(a32*a13d+a13*a32d-a33*a12d-a12*a33d) + temp1*&
271 & a31d + a31*(a23*a12d+a12*a23d-a22*a13d-a13*a22d)
272 val = a11*temp + a21*temp0 + a31*temp1
273 if (val .ge. 0.)
then
280 if (x1 .lt. adteps)
then
287 temp1 = sign(
one, val)/max1
288 vald = -(temp1*max1d/max1)
291 temp1 = a12*a23 - a13*a22
292 temp0 = a13*a32 - a12*a33
293 temp = a22*a33 - a23*a32
294 temp2 = temp*f(1) + temp0*f(2) + temp1*f(3)
295 dud = temp2*vald + val*(f(1)*(a33*a22d+a22*a33d-a32*a23d-a23*a32d)&
296 & +temp*fd(1)+f(2)*(a32*a13d+a13*a32d-a33*a12d-a12*a33d)+temp0*fd(&
297 & 2)+f(3)*(a23*a12d+a12*a23d-a22*a13d-a13*a22d)+temp1*fd(3))
299 temp2 = a13*a21 - a11*a23
300 temp1 = a11*a33 - a13*a31
301 temp0 = a23*a31 - a21*a33
302 temp = temp0*f(1) + temp1*f(2) + temp2*f(3)
303 dvd = temp*vald + val*(f(1)*(a31*a23d+a23*a31d-a33*a21d-a21*a33d)+&
304 & temp0*fd(1)+f(2)*(a33*a11d+a11*a33d-a31*a13d-a13*a31d)+temp1*fd(&
305 & 2)+f(3)*(a21*a13d+a13*a21d-a23*a11d-a11*a23d)+temp2*fd(3))
307 temp2 = a11*a22 - a12*a21
308 temp1 = a12*a31 - a11*a32
309 temp0 = a21*a32 - a22*a31
310 temp = temp0*f(1) + temp1*f(2) + temp2*f(3)
311 dwd = temp*vald + val*(f(1)*(a32*a21d+a21*a32d-a31*a22d-a22*a31d)+&
312 & temp0*fd(1)+f(2)*(a31*a12d+a12*a31d-a32*a11d-a11*a32d)+temp1*fd(&
313 & 2)+f(3)*(a22*a11d+a11*a22d-a21*a12d-a12*a21d)+temp2*fd(3))
323 arg1 = du*du + dv*dv + dw*dw
325 if (val .le. thresconv)
exit
348 real(kind=realtype),
dimension(3),
intent(in) :: xcen
349 real(kind=realtype),
dimension(3, 3, 3, 3),
intent(in) :: blk
350 real(kind=realtype),
dimension(3),
intent(in) :: frac0
352 real(kind=realtype),
dimension(3),
intent(out) :: frac
354 real(kind=realtype),
dimension(3, 8) :: xn
355 real(kind=realtype) :: u, v, w, uv, uw, vw, wvu, du, dv, dw
356 real(kind=realtype) :: a11, a12, a13, a21, a22, a23, a31, a32, a33, &
358 real(kind=realtype) :: f(3), x(3)
359 integer(kind=inttype),
dimension(8),
parameter :: indices=(/1, 2, 4&
361 integer(kind=inttype) :: i, j, k, ii, ll
362 real(kind=realtype),
parameter :: adteps=1.e-25_realtype
363 real(kind=realtype),
parameter :: thresconv=1.e-10_realtype
368 real(kind=realtype) :: x1
369 real(kind=realtype) :: max1
370 real(kind=realtype) :: arg1
378 xn(:, indices(ii)) =
eighth*(blk(i, j, k, :)+blk(i+1, j, k, :)&
379 & +blk(i, j+1, k, :)+blk(i+1, j+1, k, :)+blk(i, j, k+1, :)+blk&
380 & (i+1, j, k+1, :)+blk(i, j+1, k+1, :)+blk(i+1, j+1, k+1, :))
386 xn(:, i) = xn(:, i) - xn(:, 1)
393 xn(1, 7) = xn(1, 7) + xn(1, 2) + xn(1, 4) + xn(1, 5) - xn(1, 3) - xn&
395 xn(2, 7) = xn(2, 7) + xn(2, 2) + xn(2, 4) + xn(2, 5) - xn(2, 3) - xn&
397 xn(3, 7) = xn(3, 7) + xn(3, 2) + xn(3, 4) + xn(3, 5) - xn(3, 3) - xn&
399 xn(1, 3) = xn(1, 3) - xn(1, 2) - xn(1, 4)
400 xn(2, 3) = xn(2, 3) - xn(2, 2) - xn(2, 4)
401 xn(3, 3) = xn(3, 3) - xn(3, 2) - xn(3, 4)
402 xn(1, 6) = xn(1, 6) - xn(1, 2) - xn(1, 5)
403 xn(2, 6) = xn(2, 6) - xn(2, 2) - xn(2, 5)
404 xn(3, 6) = xn(3, 6) - xn(3, 2) - xn(3, 5)
405 xn(1, 8) = xn(1, 8) - xn(1, 4) - xn(1, 5)
406 xn(2, 8) = xn(2, 8) - xn(2, 4) - xn(2, 5)
407 xn(3, 8) = xn(3, 8) - xn(3, 4) - xn(3, 5)
414 newtonhexa:
do ll=1,15
420 f(1) = xn(1, 2)*u + xn(1, 4)*v + xn(1, 5)*w + xn(1, 3)*uv + xn(1, &
421 & 6)*uw + xn(1, 8)*vw + xn(1, 7)*wvu - x(1)
422 f(2) = xn(2, 2)*u + xn(2, 4)*v + xn(2, 5)*w + xn(2, 3)*uv + xn(2, &
423 & 6)*uw + xn(2, 8)*vw + xn(2, 7)*wvu - x(2)
424 f(3) = xn(3, 2)*u + xn(3, 4)*v + xn(3, 5)*w + xn(3, 3)*uv + xn(3, &
425 & 6)*uw + xn(3, 8)*vw + xn(3, 7)*wvu - x(3)
427 a11 = xn(1, 2) + xn(1, 3)*v + xn(1, 6)*w + xn(1, 7)*vw
428 a12 = xn(1, 4) + xn(1, 3)*u + xn(1, 8)*w + xn(1, 7)*uw
429 a13 = xn(1, 5) + xn(1, 6)*u + xn(1, 8)*v + xn(1, 7)*uv
430 a21 = xn(2, 2) + xn(2, 3)*v + xn(2, 6)*w + xn(2, 7)*vw
431 a22 = xn(2, 4) + xn(2, 3)*u + xn(2, 8)*w + xn(2, 7)*uw
432 a23 = xn(2, 5) + xn(2, 6)*u + xn(2, 8)*v + xn(2, 7)*uv
433 a31 = xn(3, 2) + xn(3, 3)*v + xn(3, 6)*w + xn(3, 7)*vw
434 a32 = xn(3, 4) + xn(3, 3)*u + xn(3, 8)*w + xn(3, 7)*uw
435 a33 = xn(3, 5) + xn(3, 6)*u + xn(3, 8)*v + xn(3, 7)*uv
439 val = a11*(a22*a33-a32*a23) + a21*(a13*a32-a12*a33) + a31*(a12*a23&
441 if (val .ge. 0.)
then
446 if (x1 .lt. adteps)
then
451 val = sign(
one, val)/max1
453 du = val*((a22*a33-a23*a32)*f(1)+(a13*a32-a12*a33)*f(2)+(a12*a23-&
455 dv = val*((a23*a31-a21*a33)*f(1)+(a11*a33-a13*a31)*f(2)+(a13*a21-&
457 dw = val*((a21*a32-a22*a31)*f(1)+(a12*a31-a11*a32)*f(2)+(a11*a22-&
464 arg1 = du*du + dv*dv + dw*dw
466 if (val .le. thresconv)
goto 100
real(kind=realtype), parameter eighth
real(kind=realtype), parameter one
subroutine newtonupdate_d(xcen, xcend, blk, blkd, frac0, frac, fracd)
subroutine newtonupdate(xcen, blk, frac0, frac)
subroutine fractoweights2(frac, weights)
subroutine fractoweights_d(frac, fracd, weights, weightsd)
subroutine fractoweights(frac, weights)