35
36
37
38
39
40
41
42
43
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "vect01_c.inc"
55#include "com04_c.inc"
56
57
58
59 INTEGER, INTENT(IN) :: IXS(NIXS,NUMELS)
60 my_real,
INTENT(IN) :: x(3,numnod)
61 INTEGER, INTENT(IN) :: ITRIMAT
62 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
63
64
65
66 INTEGER :: , II, KK, IAD2, LGTH
67 my_real :: xk, yk, zk, xl, yl, zl, xf
69 my_real :: mat(3, 3), rhs(3), sol(3)
70 INTEGER :: VOIS_ID
71 INTEGER :: FACE_TO_NODE_LOCAL_ID(6, 4)
72 my_real ::
norm(3), a(3), b(3), c(3), surf, surf1, surf2
73 TYPE(t_segvar) :: SEGVAR
74
75
76
77
78
79 face_to_node_local_id(1, 1) = 1 ; face_to_node_local_id(1, 2) = 4
80 face_to_node_local_id(1, 3) = 3 ; face_to_node_local_id(1, 4) = 2
81
82 face_to_node_local_id(2, 1) = 3 ; face_to_node_local_id(2, 2) = 4
83 face_to_node_local_id(2, 3) = 8 ; face_to_node_local_id(2, 4) = 7
84
85 face_to_node_local_id(3, 1) = 5 ; face_to_node_local_id(3, 2) = 6
86 face_to_node_local_id(3, 3) = 7 ; face_to_node_local_id(3, 4) = 8
87
88 face_to_node_local_id(4, 1) = 1 ; face_to_node_local_id(4, 2) = 2
89 face_to_node_local_id(4, 3) = 6 ; face_to_node_local_id(4, 4) = 5
90
91 face_to_node_local_id(5, 1) = 2 ; face_to_node_local_id(5, 2) = 3
92 face_to_node_local_id(5, 3) = 7 ; face_to_node_local_id(5, 4) = 6
93
94 face_to_node_local_id(6, 1) = 1 ; face_to_node_local_id(6, 2) = 5
95 face_to_node_local_id(6, 3) = 8 ; face_to_node_local_id(6, 4) = 4
96
97 DO i = lft, llt
98 ii = i + nft
99
100 mat(1:3, 1:3) = zero ; rhs(1:3) = zero
101
106
107 iad2 = ale_connect%ee_connect%iad_connect(ii)
108 lgth = ale_connect%ee_connect%iad_connect(ii+1)-iad2
109 DO kk = 1, lgth
110 vois_id = ale_connect%ee_connect%connected(iad2 + kk - 1)
111
112 IF (vois_id > 0) THEN
113
118 ELSE
119 IF(vois_id == 0) THEN
120 vall = valk
121 ELSE
122
123 vall = segvar%PHASE_ALPHA(itrimat,-vois_id)
124 ENDIF
125 xf = zero
126 yf = zero
127 zf = zero
128
129 a(1:3) = x(1:3, ixs(face_to_node_local_id(kk, 1) + 1, ii))
130 b(1:3) = x(1:3, ixs(face_to_node_local_id(kk, 2) + 1, ii))
131 c(1:3) = x(1:3, ixs(face_to_node_local_id(kk, 3) + 1, ii))
132
133 norm(1) = (b(2) - a(2)) * (c(3) - a(3)) - (b(3) - a(3)) * (c(2) - a(2))
134 norm(2) = (b(3) - a(3)) * (c(1) - a(1)) - (b(1) - a(1)) * (c(3) - a(3))
135 norm(3) = (b(1) - a(1)) * (c(2) - a(2)) - (b(2) - a(2)) * (c(1) - a(1))
136
138 xf = surf1 * third * (a(1) + b(1) + c(1))
139 yf = surf1 * third * (a(2) + b(2) + c(2))
140 zf = surf1 * third * (a(3) + b(3) + c(3))
141
142 a(1:3) = x(1:3, ixs(face_to_node_local_id(kk, 1) + 1, ii))
143 b(1:3) = x(1:3, ixs(face_to_node_local_id(kk, 3) + 1, ii))
144 c(1:3) = x(1:3, ixs(face_to_node_local_id(kk, 4) + 1, ii))
145
146 norm(1) = (b(2) - a(2)) * (c(3) - a(3)) - (b(3) - a(3)) * (c(2) - a(2))
147 norm(2) = (b(3) - a(3)) * (c(1) - a(1)) - (b(1) - a(1)) * (c(3) - a(3))
148 norm(3) = (b(1) - a(1)) * (c(2) - a(2)) - (b(2) - a(2)) * (c(1) - a(1))
149
151 xf = xf + surf2 * third * (a(1) + b(1) + c(1))
152 yf = yf + surf2 * third * (a(2) + b(2) + c(2))
153 zf = zf + surf2 * third * (a(3) + b(3) + c(3))
154
155 surf = surf1 + surf2
156 xf = xf / surf
157 yf = yf / surf
158 zf = zf / surf
159
160
161
162
163
164
165
169 ENDIF
170
171
172 rhs(1) = rhs(1) + (valk - vall) * (xl - xk)
173 rhs(2) = rhs(2) + (valk - vall) * (yl - yk)
174 rhs(3) = rhs(3) + (valk - vall) * (zl - zk)
175 mat(1, 1) = mat(1, 1) + (xl - xk) * (xl - xk)
176 mat(1, 2) = mat(1, 2) + (xl - xk) * (yl - yk)
177 mat(1, 3) = mat(1, 3) + (xl - xk) * (zl - zk)
178 mat(2, 1) = mat(2, 1) + (yl - yk) * (xl - xk)
179 mat(2, 2) = mat(2, 2) + (yl - yk) * (yl - yk)
180 mat(2, 3) = mat(2, 3) + (yl - yk) * (zl - zk)
181 mat(3, 1) = mat(3, 1) + (zl - zk) * (xl - xk)
182 mat(3, 2) = mat(3, 2) + (zl - zk) * (yl - yk)
183 mat(3, 3) = mat(3, 3) + (zl - zk) * (zl - zk)
184 ENDDO
185
186 CALL cg(3, mat, rhs, sol, 3, em10)
187
188
192 ENDDO
193
subroutine cg(dim, mat, rhs, sol, max_iter, tol)
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
type(alemuscl_buffer_) alemuscl_buffer