30
31
32
33#include "implicit_f.inc"
34
35
36
37
39 . x(3,*),d(3,*),xnorm(3,*),cdg(*)
40 INTEGER II(*),INVERT
41
43 . x0(4),y0(4),z0(4),nx,ny,nz,xc,yc,zc,s
44 INTEGER ,I1,,I3,I4
45
46
47
48 DO 100 i = 1,4
49 x0(i) = x(1,ii(i))-d(1,ii(i))
50 y0(i) = x(2,ii(i))-d(2,ii(i))
51 z0(i) = x(3,ii(i))-d(3,ii(i))
52 100 CONTINUE
53
54 nx = (y0(3) - y0(1)) * (z0(4) - z0(2)) -
55 . (z0(3) - z0(1)) * (y0(4) - y0(2))
56 ny = (z0(3) - z0(1)) * (x0(4) - x0(2)) -
57 . (x0(3) - x0(1)) * (z0(4) - z0(2))
58 nz = (x0(3) - x0(1)) * (y0(4) - y0(2)) -
59 . (y0(3) - y0(1)) * (x0(4) - x0(2))
60
61 xc = .25*(x0(1) + x0(2) + x0(3) + x0(4))
62 yc = .25*(y0(1) + y0(2) + y0(3) + y0(4))
63 zc = .25*(z0(1) + z0(2) + z0(3) + z0(4))
64 xc = xc - cdg(1)
65 yc = yc - cdg(2)
66 zc = zc - cdg(3)
67 s = nx * xc + ny * yc + nz * zc
69 IF(s<zero)THEN
71 i1 = ii(2)
72 i2 = ii(1)
73 i3 = ii(4)
74 i4 = ii(3)
75 ii(1) = i1
76 ii(2) = i2
77 ii(3) = i3
78 ii(4) = i4
79 ENDIF
80
81 DO 200 i = 1,4
82 x0(i) = x(1,ii(i))
83 y0(i) = x(2,ii(i))
84 z0(i) = x(3,ii(i))
85 200 CONTINUE
86
87 nx = (y0(3) - y0(1)) * (z0(4) - z0(2)) -
88 . (z0(3) - z0(1)) * (y0(4) - y0(2))
89 ny = (z0(3) - z0(1)) * (x0(4) - x0(2)) -
90 . (x0(3) - x0(1)) * (z0(4) - z0(2))
91 nz = (x0(3) - x0(1)) * (y0(4) - y0(2)) -
92 . (y0(3) - y0(1)) * (x0(4) - x0(2))
93
94 DO 300 i = 1,4
95 xnorm(1,ii(i)) = xnorm(1,ii(i)) + nx
96 xnorm(2,ii(i)) = xnorm(2,ii(i)) + ny
97 xnorm(3,ii(i)) = xnorm(3,ii(i)) + nz
98 300 CONTINUE
99
100
101 RETURN
subroutine invert(matrix, inverse, n, errorflag)