35
36
37
38
39
40
41
42
43
44
45
46
50
51
52
53#include "implicit_f.inc"
54
55
56
57#include "mvsiz_p.inc"
58
59
60
61#include "com01_c.inc"
62#include "com04_c.inc"
63#include "inter22.inc"
64#include "param_c.inc"
65
66
67
68
69
70
71
72
73
74
75
76 INTEGER :: IXS(NIXS,NUMELS),NV46, ITASK
77 INTEGER :: NBF, NBL, NIN
78
79
80
81 INTEGER :: IB, IBm, IBs, IADJ, MCELL, NumSECND, NADJ, ISECND
82 INTEGER :: I, II, J, IBv, NBCUT, NBCUTv, K, IV
83 INTEGER :: ICELLv, JV, ICELLs, ClosedSurface, IPRES_MOM, ISGN_NORM
88
89
90
92 IF(int22 == 0) RETURN
93
94
95
96
97
98
99
100
101
102
103
104
106
107
108
109 SELECT CASE(ipres_mom)
110 CASE (5)
111
112 coef1 = zero
113 coef2 = one
114 CASE DEFAULT
115 coef1 = one
116 coef2 = zero
117 END SELECT
118
119
120
121
122
123
124
125 DO ib=nbf,nbl
126
127
128 f0(1:3) = zero
132 IF (mcell==0)cycle
133
137
138 IF(nbcut>0)THEN
139
140
141 isgn_norm = one
142 IF(mcell==9)THEN
143 isgn_norm=-one
144 DO k=1,nbcut
145 n(1:3) = isgn_norm*
brick_list(nin,ib)%PCUT(k)%N(1:3)
146 norm = sqrt(n(1)**2+n(2)**2+n(3)**2)
151 un1 =
brick_list(nin,ib)%POLY(mcell)%FACE0%U_N(k)
152 mf = m1
154 pf = p1 + coef2*theta*half*z1*un1
155 f0(1) = f0(1) -pf*surf*n(1)
156 f0(2) = f0(2) -pf*surf*n(2)
157 f0(3) = f0(3) -pf*surf*n(3)
158 enddo
159 ELSE
160 isgn_norm = one
161 k = mcell
162 n(1:3) = isgn_norm*
brick_list(nin,ib)%PCUT(k)%N(1:3)
163 norm = sqrt(n(1)**2+n(2)**2+n(3)**2)
168 un1 =
brick_list(nin,ib)%POLY(mcell)%FACE0%U_N(k)
169
170 mf = m1
172 pf = p1 + coef2*theta*half*z1*un1
173 f0(1) = f0(1) -pf*surf*n(1)
174 f0(2) = f0(2) -pf*surf*n(2)
175 f0(3) = f0(3) -pf*surf*n(3)
176 ENDIF
177 ENDIF
178
179
180
181 closedsurface = 0
182 DO j=1,nv46
183 nadj =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%NAdjCell
184 closedsurface =
brick_list(nin,ib)%ClosedSurf(j)
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200 IF(nadj==0 .OR. closedsurface == 1)THEN
201
202 un1 =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%U_N
203 un2 = zero
204 mf = m1
206
207 pf = p1 + coef2*theta*half*z1*un1
209 surf =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%Surf
210 f0(1) = f0(1) -pf*surf*n(1)
211 f0(2) = f0(2) -pf*surf*n(2)
212 f0(3) = f0(3) -pf*surf*n(3)
213 ELSE
219 un1 =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%U_N
221 DO iadj=1,nadj
222 icellv =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%Adjacent_Cell(iadj)
223 ibm = 0
224 IF(ibv/=0)THEN
225 ibm =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(4)
226 IF(ibm == ib)cycle
227 areav =
brick_list(nin,ibv)%POLY(icellv)%FACE(jv)%Surf
232 un2 =
brick_list(nin,ibv)%POLY(icellv)%FACE(jv)%U_N
233 denom = z1+z2
234
237 pf = coef1*(half
238 f0(1) = f0(1) - pf*surf*n(1)
239 f0(2) = f0(2) - pf*surf*n(2)
240 f0(3) = f0(3) - pf*surf*n(3)
241 else
247 denom = z1+z2
248
251 pf = coef1*(half*(p1+p2)) + coef2*((z1*p2 + z2*p1)/denom + theta*z1*z2*(un1+un2)/denom)
252 f0(1) = f0(1) - pf*surf*n(1)
253 f0(2) = f0(2) - pf*surf*n(2)
254 f0(3) = f0(3) - pf*surf*n(3)
255 ENDIF
256 enddo
257 ENDIF
258
259 enddo
260
261
262
264 DO isecnd=1,numsecnd
265 ibs =
brick_list(nin,ib)%SecndList%IBV(isecnd)
266 icells =
brick_list(nin,ib)%SecndList%ICELLv(isecnd)
267 js =
brick_list(nin,ibs)%POLY(icells)%WhereIsMain(1)
269
270
271
272
273
274
275
276
277
278
279 isgn_norm = one
280 IF(icells==9)THEN
281 isgn_norm=-one
282 DO k=1,nbcutv
283 n(1:3) = isgn_norm*
brick_list(nin,ibs)%PCUT(k)%N(1:3)
284 norm = sqrt(n(1)**2+n(2)**2+n(3)**2)
289 un1 =
brick_list(nin,ibs)%POLY(icells)%FACE0%U_N(k)
290
291 mf = m1
293 pf = p1 + coef2*theta*half*z1*un1
294 f0(1) = f0(1) -pf*surf*n(1)
295 f0(2) = f0(2) -pf*surf*n(2)
296 f0(3) = f0
297 ENDDO
298 ELSE
299 k=icells
300 n(1:3) = isgn_norm*
brick_list(nin,ibs)%PCUT(k)%N(1:3)
301 norm = sqrt(n(1)**2+n(2)**2+n
307 mf = m1
309
310 pf = p1 + coef2*theta*half*z1*un1
311 f0(1) = f0(1) -pf*surf*n(1)
312 f0(2) = f0(2) -pf*surf*n(2)
313 f0(3) = f0(3) -pf*surf*n(3)
314 ENDIF
315
316
317
318 DO j=1,nv46
319 IF(j==js) cycle
320 nadj =
brick_list(nin,ibs)%POLY(icells)%FACE(j)%NAdjCell
321 z2 = zero
322 IF(nadj==0 .OR. closedsurface == 1)THEN
323
324 un1 =
brick_list(nin,ibs)%POLY(icells)%FACE(j)%U_N
325
326 mf = m1
328 pf = p1 + coef2*theta*half*z1*un1
330 surf =
brick_list(nin,ibs)%POLY(icells)%FACE(j)%Surf
331 f0(1) = f0(1) -pf*surf*n(1)
332 f0(2) = f0(2) -pf*surf*n(2)
333 f0(3) = f0(3) -pf*surf*n(3)
334 ELSE
340 un1 =
brick_list(nin,ibs)%POLY(icells)%FACE(j)%U_N
342 DO iadj=1,nadj
343 icellv =
brick_list(nin,ibs)%POLY(icells)%FACE(j)%Adjacent_Cell(iadj)
344 ibm = 0
345 IF(ibv/=0)THEN
346 ibm =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(4)
351 un2 =
brick_list(nin,ibv)%POLY(icellv)%FACE(jv)%U_N
352 denom = z1+z2
356
357 pf = coef1*(half*(p1+p2)) + coef2*((z1*p2 + z2*p1)/denom + theta*z1*z2*(un1+un2)/denom)
358 IF(ibm == ib)cycle
359 f0(1) = f0(1) - pf*surf*n(1)
360 f0(2) = f0(2) - pf*surf*n(2)
361 f0(3) = f0(3) - pf*surf*n(3)
362 else
368 denom = z1+z2
369
372 pf = coef1*(half*(p1+p2)) + coef2*((z1*p2 + z2*p1
373 f0(1) = f0(1) - pf*surf*n(1)
374 f0(2) = f0(2) - pf*surf*n(2)
375 f0(3) = f0(3) - pf*surf*n(3)
376 ENDIF
377 enddo
378 ENDIF
379 enddo
380 enddo
381
382
386
387
388
389
390
394
395 enddo
396
397
398
399
401
403
404 if(itask==0)then
405 print *, " |---alefvm_sfint3_int22.F---|"
406 print *, " | THREAD INFORMATION |"
407 print *, " |---------------------------|"
408 print *, " NCYCLE =", ncycle
409
413 IF (mcell==0)cycle
414 print *, " brique_=", ixs(11,ii)
415 write(*,fmt='(A34,6A26)') " ",
416 . "#--- internal force -----#"
417
418
419 write (*,fmt=
'(A,8E26.14)' )
" force-X =",
alefvm_buffer%FCELL(1,ii)
420 write (*,fmt=
'(A,8E26.14)' )
" force-Y =",
alefvm_buffer%FCELL(2,ii)
421 write (*,fmt=
'(A,8E26.14)' )
" force-Z =",
alefvm_buffer%FCELL(3,ii)
422 write (*,fmt=
'(A,8E26.14)' )
" P =",
brick_list(nin
423
424
425 print *, " "
426 enddo
427
428 endif
429
431
432 endif
433
434
435 RETURN
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine area(d1, x, x2, y, y2, eint, stif0)
type(alefvm_buffer_), target alefvm_buffer
type(alefvm_param_), target alefvm_param
type(brick_entity), dimension(:,:), allocatable, target brick_list