35 use element_mod , only : nixs
36
37
38
39
40
41
42
43
44#include "implicit_f.inc"
45
46
47
48
49
50
51
52 INTEGER, INTENT(IN) :: NEL, NFT, JALE, IXS(NIXS, *)
54 . xgrid(3, *), wgrid(*)
55 my_real,
INTENT(OUT) :: wfac(3, 6, nel), surf(6, nel)
57
58
59
60 INTEGER :: II, NODE1, NODE2, NODE3, NODE4, KFACE
62 . x1(3), x2(3), x3(3), x4(3),
63 . w1(3), w2(3), w3(3), w4(3), xc(3), xf(3)
65
66 DO ii = 1, nel
67
68 node1 = ixs(2, ii + nft)
69 node2 = ixs(4, ii + nft)
70 node3 = ixs(7, ii + nft)
71 node4 = ixs(6, ii + nft)
72
73 x1(1:3) = xgrid(1:3, node1)
74 x2(1:3) = xgrid(1:3, node2)
75 x3(1:3) = xgrid(1:3, node3)
76 x4(1:3) = xgrid(1:3, node4)
77
78 xc(1:3) = fourth * (x1(1:3) + x2(1:3) + x3(1:3) + x4(1:3))
79 IF (jale /= 0) THEN
80
81 w1(1:3) = wgrid(3 * (node1 - 1) + 1 : 3 * (node1 - 1) + 3)
82 w2(1:3) = wgrid(3 * (node2 - 1) + 1 : 3 * (node2 - 1) + 3)
83 w3(1:3) = wgrid(3 * (node3 - 1) + 1 : 3 * (node3 - 1) + 3)
84 w4(1:3) = wgrid(3 * (node4 - 1) + 1 : 3 * (node4 - 1) + 3)
85 ELSE
86
87 w1(1:3) = zero
88 w2(1:3) = zero
89 w3(1:3) = zero
90 w4(1:3) = zero
91 ENDIF
92
93
94 kface = 5
95 norm(1, kface, ii) = half * ((x3(2) - x1(2)) * (x2(3) - x1(3)) -
96 . (x3(3) - x1(3)) * (x2(2) - x1(2)))
97 norm(2, kface, ii) = half * ((x3(3) - x1(3)) * (x2(1) - x1(1)) -
98 . (x3(1) - x1(1)) * (x2(3) - x1(3)))
99 norm(3, kface, ii) = half * ((x3(1) - x1(1)) * (x2(2) - x1(2)) -
100 . (x3(2) - x1(2)) * (x2(1) - x1(1)))
101 nx =>
norm(1, kface, ii)
102 ny =>
norm(2, kface, ii)
103 nz =>
norm(3, kface, ii)
104 surf(kface, ii) = sqrt(nx * nx + ny * ny + nz * nz)
105 nx = -nx / surf(kface, ii)
106 ny = -ny / surf(kface, ii)
107 nz = -nz / surf(kface, ii)
108 xf(1:3) = third * (x1 + x2 + x3)
109 IF ((xf(1) - xc(1)) * nx + (xf(2) - xc(2)) * ny + (xf(3) - xc(3)) * nz < zero) THEN
111 ENDIF
112
113 kface = 6
114 norm(1, kface, ii) = half * ((x1(2) - x4(2)) * (x2(3) - x4(3)) -
115 . (x1(3) - x4(3)) * (x2(2) - x4(2)))
116 norm(2, kface, ii) = half * ((x1(3) - x4(3)) * (x2(1) - x4(1)) -
117 . (x1(1) - x4(1)) * (x2(3) - x4(3)))
118 norm(3, kface, ii) = half * ((x1(1) - x4(1)) * (x2(2) - x4(2)) -
119 . (x1(2) - x4(2)) * (x2(1) - x4(1)))
120 nx =>
norm(1, kface, ii)
121 ny =>
norm(2, kface, ii)
122 nz =>
norm(3, kface, ii)
123 surf(kface, ii) = sqrt(nx * nx + ny * ny + nz * nz)
124 nx = -nx / surf(kface, ii)
125 ny = -ny / surf(kface, ii)
126 nz = -nz / surf(kface, ii)
127 xf(1:3) = third * (x1 + x2 + x4)
128 IF ((xf(1) - xc(1)) * nx + (xf(2) - xc(2)) * ny + (xf(3) - xc(3)) * nz < zero) THEN
130 ENDIF
131
132 kface = 2
133 norm(1, kface, ii) = half * ((x2(2) - x4(2)) * (x3(3) - x4(3)) -
134 . (x2(3) - x4(3)) * (x3(2) - x4(2)))
136 . (x2(1) - x4(1)) * (x3(3) - x4(3)))
137 norm(3, kface, ii) = half * ((x2(1) - x4(1)) * (x3(2) - x4(2)) -
138 . (x2(2) - x4(2)) * (x3(1) - x4(1)))
139 nx =>
norm(1, kface, ii)
140 ny =>
norm(2, kface, ii)
141 nz =>
norm(3, kface, ii)
142 surf(kface, ii) = sqrt(nx * nx + ny * ny + nz * nz)
143 nx = -nx / surf(kface, ii)
144 ny = -ny / surf(kface, ii)
145 nz = -nz / surf(kface, ii)
146 xf(1:3) = third * (x4 + x2 + x3)
147 IF ((xf(1) - xc(1)) * nx + (xf(2) - xc(2)) * ny + (xf(3) - xc(3)) * nz < zero) THEN
149 ENDIF
150
151 kface = 4
152 norm(1, kface, ii) = half * ((x3(2) - x4(2)) * (x1(3) - x4(3)) -
153 . (x3(3) - x4(3)) * (x1(2) - x4(2)))
154 norm(2, kface, ii) = half * ((x3(3) - x4(3)) * (x1(1) - x4(1)) -
155 . (x3(1) - x4(1)) * (x1(3) - x4(3)))
156 norm(3, kface, ii) = half * ((x3(1) - x4(1)) * (x1(2) - x4(2)) -
157 . (x3(2) - x4(2)) * (x1(1) - x4(1)))
158 nx =>
norm(1, kface, ii)
159 ny =>
norm(2, kface, ii)
160 nz =>
norm(3, kface, ii)
161 surf(kface, ii) = sqrt(nx * nx + ny * ny + nz * nz)
162 nx = -nx / surf(kface, ii)
163 ny = -ny / surf(kface, ii)
164 nz = -nz / surf(kface, ii)
165 xf(1:3) = third * (x1 + x4 + x3)
166 IF ((xf(1) - xc(1)) * nx + (xf(2) - xc(2)) * ny + (xf(3) - xc(3)) * nz < zero) THEN
168 ENDIF
169
170 wfac(1:3, 5, ii) = third * (w1(1:3) + w2(1:3) + w3(1:3))
171
172 wfac(1:3, 6, ii) = third * (w1(1:3) + w4(1:3) + w2(1:3))
173
174 wfac(1:3, 2, ii) = third * (w2(1:3) + w4(1:3) + w3(1:3))
175
176 wfac(1:3, 4, ii) = third * (w1(1:3) + w3(1:3) + w4(1:3))
177
178 wfac(1:3, 1, ii) = zero
179 wfac(1:3, 3, ii) = zero
180 surf(1, ii) = zero
181 surf(3, ii) = zero
182 norm(1:3, 1, ii) = zero
183 norm(1:3, 3, ii) = zero
184 ENDDO
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB