53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
133 USE elbufdef_mod
137 USE multimat_param_mod , ONLY : m51_n0phas, m51_nvphas
138 use element_mod , only : nixs,nixt
139
140
141
142#include "implicit_f.inc"
143
144
145
146#include "param_c.inc"
147#include "com01_c.inc"
148#include "com04_c.inc"
149#include "com08_c.inc"
150#include "task_c.inc"
151#include "vect01_c.inc"
152#include "inter22.inc"
153#include "mvsiz_p.inc"
154#include "comlock.inc"
155#include "subvolumes.inc"
156
157
158
159 INTEGER,INTENT(IN) :: IXS(NIXS,*) ,IPARG(NPARG,*),ITAB(*) ,NV46 ,BUFBRIC(*),
160 . IPARI(*) ,IXT(NIXT,*) ,ITASK ,IPM(NPROPMI
161TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
162 my_real,
INTENT(IN) :: v(3,*), veul(lveul,*)
163 my_real,
INTENT(IN),
TARGET :: bufmat(*)
164 my_real,
INTENT(INOUT) :: x(3,*)
165
166 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
167 TYPE (GROUP_) , DIMENSION(NGRTRUS) :: IGRTRUSS
168 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECTIVITY
169
170
171
172 TYPE(L_BUFEL_) ,POINTER :: LBUF1,LBUF2
173 INTEGER :: I,J,K0,K1,K2,JV,IDV, NBCUT, NBCUTv, NBCUTprev, NEL,NG,NFL,NBF,NBL,NBL1,NBRIC_L,NIN
174 INTEGER :: brickID,tNB,NTAG,IV,NGv,IAD22,NCELLv,ICV,IGR
175 INTEGER :: IB,IBV,IBv2,IBv_i,IBo,ICELL,ICELL2,MCELL,NCELL,MNOD,ID,ITAG(66)
176 INTEGER :: IPOS, LLT_, LLT_o,LLT_v, IDLOCv, IPOSf, IPOSiadj,ICELLv,ICELLv2
177 INTEGER :: INODES(8),INOD,INOD2,INODE,NNODES, NNODES2, ADD, ADD0, ITRIMAT, K
178LOGICAL :: lDONE,lStillTruss,lFOUND,lCYCLE,lTARGET,lStillNode, lCOND1
179
180 my_real :: adjmain_vol(6), adjmain_face(6), adjmain_centroid(3,6),n(3,6), fac
181 INTEGER :: IDadj_MCELLv(6), IVadj_MCELLv(6), IBadj_MCELLv(6)
182 my_real,
DIMENSION(:,:),
ALLOCATABLE :: f
183 my_real,
POINTER :: pvar, pvarv, pvaro
184 my_real,
DIMENSION(:),
POINTER :: pvar3
185 TYPE(G_BUFEL_) ,POINTER :: , GBUFv, GBUFo
186 TYPE(L_BUFEL_) ,POINTER :: LBUF
187 TYPE(POLY_ENTITY),DIMENSION(:), POINTER :: ,pIsMainV
188 my_real,
DIMENSION(:) ,
POINTER :: pfullface
189 TYPE(NODE_ENTITY),DIMENSION(:) , POINTER :: pNodWasMain
190
191 INTEGER,DIMENSION(:,:), POINTER :: pAdjBRICK, pAdjBRICKv
192 TYPE(NODE_ENTITY),DIMENSION(:) , POINTER :: pWhereWasMain
193 TYPE(NODE_ENTITY), DIMENSION(:), POINTER :: pWhichCellNod,pWhichCellNodv
194 INTEGER , POINTER :: pMainID
195 my_real,
DIMENSION(:) ,
POINTER :: uparam
196 TYPE(POLY_ENTITY), DIMENSION(:), POINTER :: pSUBVOLv
198 TYPE(POLY_ENTITY), DIMENSION(:), POINTER :: pSUBVOL
199 CHARACTER*6 :: char1
200 LOGICAL :: bool1, bool2
201 CHARACTER*10 :: debugMAINSECND
202 CHARACTER*10 ,ALLOCATABLE :: debugMAINSECNDv(:,:,:)
203 INTEGER,ALLOCATABLE :: IsMainV(:,:,:)
204 TYPE(BUF_MAT_) ,POINTER :: MBUF,MBUFv, MBUFo
205 INTEGER :: ICRIT_MAT_DEPORTATION, ICRIT_DEMERGE
206
207 INTEGER,ALLOCATABLE,DIMENSION(:,:,:)::
208 INTEGER,ALLOCATABLE,DIMENSION(:) :: Ntarget,Norigin
209 INTEGER :: MTN_,ITAR, IORIG, MAIN_TAG(6,9)
210 INTEGER :: IPLA, , FM, IBm,IBmCur,IBMo,IBMold, IDM, IE, IN, MT
211 INTEGER :: ICELLTAG(9), (9),IC, NAdjCELL,NAdjCELLv, IFV, FV, FV2
212 INTEGER
213INTEGER :: GET_UNIQUE_MAIN_CELL, LINK_WITH_UNIQUE_MAIN_CELL,IADJ,NADJ,NADJv,IE_M
214 INTEGER :: NsecndNOD, NP, , JJ, NINTP(6,9), NNOD(6,9), , SECid, IDLOC, NewMnod(8), MLW
215 INTEGER
216INTEGER,ALLOCATABLE,DIMENSION(:,:) :: DESTROY_DATA
217 INTEGER :: ,IT,IUNLINK,ITASKB, J1,J2, NTAR, INod_W, IDEMERGE, INod_W_old, ISECND, IAD0,II
218 INTEGER :: FV_old, NumSECND, NumSECND2, IC1, IC2, ITARGET, NumTarget, WasCut, LID, IFAC, IEDG
219 INTEGER :: Cod1, Cod2, Cod3, Icompl, Poly9woNodes, Poly9woNodesV, ISGN(2), ICODE, OLD_ICODE
220 INTEGER :: mainID,NC(8),MOLD,MNEW, IB2,NUM,IADBUF,NUPARAM,NGm,IDLOCm,ICELLm, (9),NODE_ID
221 LOGICAL :: debug_outp,debug_outp2, lSKIP
222
223 my_real,
ALLOCATABLE,
DIMENSION(:,:) :: vol51, vol51v
224 my_real,
ALLOCATABLE,
DIMENSION(:) :: uvar,uvar_adv
225 my_real :: vfrac(4),som, som_(4), somi, adjface(nv46,nadj_f), delta, ppoint(3)
226 my_real :: sumface, vectmp(3), volorig(24), pointtmp(3), point0(3), cut_point(3)
228 my_real :: eint, eintv, rho,rho_u(3),mom(3),rhov,sigv(6), sig(6),volv,vol,vol_m,vol_s
229 my_real :: var, var_,var__, var_6(6), var_vf(4), vold_phase
230 my_real :: tmp(6),dxmin,vmax,ratiof,ratiofv,ratio,ratiov,uncutvol,uncutvolv
231 my_real :: vuncut, vi,vj, m(9,9)
232 my_real :: vsum(3) , n_(3), vnew, vold, dvol_numeric, dvol_predic
233 my_real :: sgn, dvi, dvii, face, face9, m_tot
235
236 my_real :: det, df11, df12, df21, df22, f1, f2, p1, p2, drho1, drho2, error, tol, r1, psh, pmin
237 my_real :: c1, gam, p0, p, rho1, rho2, mas, mas1, mas2, ssp, ssp1, ssp2, rhoc2_1, rhoc2_2, rhoc2
238 my_real :: alp, alpo, beta, volcellold, vel_m(3), surf_s, norm_s(3), adv,
norm, vm, vs
239 my_real :: rho_adv, eint_adv, sig_adv(6), mom_adv(3), zm(3),zs(3), volratio
240 INTEGER :: ITER, NITER, LLTo, LLTm, NGo, IADV
241 INTEGER, ALLOCATABLE, DIMENSION(:) :: ORDER, VALUE
242
243 INTEGER :: NC1,NC2,NC3,NC4,NC5,NC6,NC7,NC8
244 INTEGER :: IAD2, IAD3, LGTH2, LGTH3
245
246 INTERFACE
249 INTEGER, INTENT(IN) :: NPTS
250 my_real,
INTENT(IN) :: p(3,npts)
252 END FUNCTION
253 END INTERFACE
254
255 TYPE pointer_array_r
256 my_real,
DIMENSION(:),
POINTER :: p
257 END TYPE
258
259 TYPE pointer_array_i
260 INTEGER,DIMENSION(:), POINTER :: p
261 END TYPE
262
263 TYPE(POLY_ENTITY), DIMENSION(:), POINTER :: pFACE
264 TYPE(POINTER_ARRAY_R) :: pFACEv(9)
265 TYPE(POINTER_ARRAY_I) :: pListNodID(9)
266 TYPE(POINTER_ARRAY_I) :: pListNodIDv(9)
267
268
269 INTEGER ICF(4,6)
270 DATA icf/1,4,3,2,3,4,8,7,5,6,7,8,1,2,6,5,2,3,7,6,1,5,8,4/
271
273 . aj7(mvsiz), aj8(mvsiz) , aj9(mvsiz),
274 . aji1, aji2, aji3,
275 . aji4, aji5, aji6,
276 . aji7, aji8, aji9,
277 . x17 , x28 , x35 , x46,
278 . y17 , y28 , y35 , y46,
279 . z17 , z28 , z35 , z46,
280 . jac_59_68(mvsiz), jac_67_49(mvsiz), jac_48_57(mvsiz
281 . aj12, aj45, aj78,
282 . a17 , a28 ,
283 . b17 , b28 ,
284 . c17 , c28 ,
285 . x1(mvsiz),x2(mvsiz),x3(mvsiz),x4(mvsiz),x5(mvsiz),x6(mvsiz),x7(mvsiz),x8(mvsiz),
286 . y1(mvsiz),y2(mvsiz),y3(mvsiz),y4(mvsiz),y5(mvsiz),y6(mvsiz),y7(mvsiz),y8(mvsiz),
287 . z1(mvsiz),z2(mvsiz),z3(mvsiz),z4(mvsiz),z5(mvsiz),z6(mvsiz),z7(mvsiz),z8(mvsiz),
288 . dett(mvsiz),
289 . aj1(mvsiz),aj2(mvsiz),aj3(mvsiz),
290 . aj4(mvsiz),aj5(mvsiz),aj6(mvsiz),hxp,hyp,hzp,
291 . x1_,x2_,x3_,x4_,x5_,x6_,x7_,x8_,
292 . y1_,y2_,y3_,y4_,y5_,y6_,y7_,y8_,
293 . z1_,z2_,z3_,z4_,z5_,z6_,z7_,z8_
294
295
296
297
298
299
300
301
302
303
304
306 nin = 1
307 IF(itask==0)THEN
308 write (*,fmt=
'(A, 1000I7)')
"CUT CELL BUFFER : ", ixs(11,
brick_list(nin,1:
nb)%id)
309 ENDIF
310 ENDIF
311
312
313
314
315 idt_int22 = 1
316 dxmin = minval(dx22min_l(0:nthread-1))
317 vmax = maxval(v22max_l(0:nthread-1))
318 IF(vmax == zero)THEN
319 dt22_min = ep30
320 ELSE
321 dt22_min = dxmin/ncross22 / vmax
322 ENDIF
324
325
326
327
328
329 iadv = 0
330 nin = 1
331 dbvol = zero
332 dbmass = zero
333 i22loop = 0
334 imergel(itask) = 0
335 IF(trimat<=0)THEN
336 ALLOCATE(uvar(i22law37))
337 ALLOCATE(uvar_adv(i22law37))
338 ELSE
339 ALLOCATE(uvar(m51_n0phas+trimat*m51_nvphas))
340 ALLOCATE(uvar_adv(m51_n0phas+trimat*m51_nvphas))
341 ENDIF
342
343
344
345
346 nbf = 1+itask*
nb/nthread
347 nbl = (itask+1)*
nb/nthread
349 tnb = nbl-nbf+1
350 i22_degenerated = 0
351
352
353 debug_outp = .false.
354 debug_outp2= .false.
355
356 do ib=nbf,nbl
359 debug_outp = .true.
360 exit
361 endif
362 enddo
363
364 if(itask==0.AND.debug_outp)then
365 print *, ""
366 print *, " |----------i22sinit.F-----------|"
367 print *, " | INITIALIZATION SUBROUTINE |"
368 print *, " |-------------------------------|"
369 char1 = ' '
370 end if
371
372
373
374
375
376 ALLOCATE (debugmainsecndv(nbl-nbf+1,6,9))
377
378 ALLOCATE (origin_data(nbf:nbl,9,1:3))
379 ALLOCATE (ismainv(nbf:nbl,6,9))
380 ALLOCATE (f(6,nbf:nbl))
381 ALLOCATE (vol51(nbf:nbl,trimat),vol51v(nbf:nbl,trimat))
382
383 ALLOCATE (norigin(nbf:nbl))
384
386
387
388
389
390
391
392
393 DO ng=itask+1,ngroup,nthread
394 IF(iparg(8,ng) /= 1) THEN
396 1 iparg ,ng ,
397 2 mtn ,nel ,nft ,iad ,ity ,
398 3 npt ,jale ,ismstr ,jeul ,jtur ,
399 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
400 5 nvaux ,jpor ,jcvt ,jclose ,ipla ,
401 6 irep ,iint ,igtyp ,israt ,isrot ,
402 7 icsen ,isorth ,isorthg ,ifailure,jsms )
403 IF(jlag /= 1 .AND. ity<=2) THEN
404 IF (mtn /= 0 .AND. iparg(64,ng)==0) THEN
405 lft = 1
406 llt = nel
407 isolnod = iparg(28,ng)
408 IF (ity == 1 .AND. isolnod /= 4) THEN
409 gbuf => elbuf_tab(ng)%GBUF
410 gbuf%TAG22(lft:llt) = 0
411 ENDIF
412 ENDIF
413 ENDIF
414 ENDIF
415 ENDDO
416
417
418
419 DO ng=itask+1,ngroup,nthread
420 IF(iparg(8,ng) /= 1) THEN
422 1 iparg ,ng ,
423 2 mtn ,nel ,nft ,iad ,ity ,
424 3 npt ,jale ,ismstr ,jeul ,jtur ,
425 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
426 5 nvaux ,jpor ,jcvt ,jclose ,ipla ,
427 6 irep ,iint ,igtyp ,israt ,isrot ,
428 7 icsen ,isorth ,isorthg ,ifailure,jsms )
429 IF(jlag /= 1 .AND. ity<=2) THEN
430 IF (mtn /= 0 .AND. iparg(64,ng)==0) THEN
431 lft = 1
432 llt = nel
433 isolnod = iparg(28,ng)
434 IF (ity == 1 .AND. isolnod /= 4) THEN
435 gbuf => elbuf_tab(ng)%GBUF
436 IF(jeul/=0)THEN
437 IF(integ8==0)THEN
438 gbuf%VOL(lft:llt) = veul(32,nft+lft:nft+llt)
439 ELSEIF(integ8==1)THEN
440 gbuf%VOL(lft:llt) = veul(52,nft+lft:nft+llt)
441 endif
442 ELSE
443 DO i=lft,llt
444 ii = i+nft
445 x1(i) = x(1,ixs(2,ii)) ; y1(i) = x(2,ixs(2,ii)) ; z1(i) = x(3,ixs(2,ii)) ;
446 x2(i) = x(1,ixs(3,ii)) ; y2(i) = x(2,ixs(3,ii)) ; z2(i) = x(3,ixs(3,ii)) ;
447 x3(i) = x(1,ixs(4,ii)) ; y3(i) = x(2,ixs(4,ii)) ; z3(i) = x(3,ixs(4,ii)) ;
448 x4(i) = x(1,ixs(5,ii)) ; y4(i) = x(2,ixs(5,ii)) ; z4(i) = x(3,ixs(5,ii)) ;
449 x5(i) = x(1,ixs(6,ii)) ; y5(i) = x(2,ixs(6,ii)) ; z5(i) = x(3,ixs(6,ii)) ;
450 x6(i) = x(1,ixs(7,ii)) ; y6(i) = x(2,ixs(7,ii)) ; z6(i) = x(3,ixs(7,ii)) ;
451 x7(i) = x(1,ixs(8,ii)) ; y7(i) = x(2,ixs(8,ii)) ; z7(i) = x(3,ixs(8,ii)) ;
452 x8(i) = x(1,ixs(9,ii)) ; y8(i) = x(2,ixs(9,ii)) ; z8(i) = x(3,ixs(9,ii)) ;
453 ENDDO
454 DO i=lft,llt
455 x17=x7(i)-x1(i)
456 x28=x8(i)-x2(i)
457 x35=x5(i)-x3(i)
458 x46=x6(i)-x4(i)
459 y17=y7(i)-y1(i)
460 y28=y8(i)-y2(i)
461 y35=y5(i)-y3(i)
462 y46=y6(i)-y4(i)
463 z17=z7(i)-z1(i)
464 z28=z8(i)-z2(i)
465 z35=z5(i)-z3(i)
466 z46=z6(i)-z4(i)
467 aj1(i)=x17+x28-x35-x46
468 aj2(i)=y17+y28-y35-y46
469 aj3(i)=z17+z28-z35-z46
470 a17=x17+x46
471 a28=x28+x35
472 b17=y17+y46
473 b28=y28+y35
474 c17=z17+z46
475 c28=z28+z35
476 aj4(i)=a17+a28
477 aj5(i)=b17+b28
478 aj6(i)=c17+c28
479 aj7(i)=a17-a28
480 aj8(i)=b17-b28
481 aj9(i)=c17-c28
482 ENDDO
483 DO i=lft,llt
484 jac_59_68(i)=aj5(i)*aj9(i)-aj6(i)*aj8(i)
485 jac_67_49(i)=aj6(i)*aj7(i)-aj4(i)*aj9(i)
486 jac_48_57(i)=aj4(i)*aj8(i)-aj5(i)*aj7(i)
487 ENDDO
488 DO i=lft,llt
489 dett(i)=one_over_64*(aj1(i)*jac_59_68(i)+aj2(i)*jac_67_49(i)+aj3(i)*jac_48_57(i))
490 ENDDO
491 gbuf%VOL(lft:llt) = dett(lft:llt)
492 endif
493 ENDIF
494 ENDIF
495 ENDIF
496 ENDIF
497 ENDDO
498
499
500
501
502
503
505
506 DO ib=nbf,nbl
509 ENDDO
510 DO ib=nbf,nbl
511
512
513 ldone = .false.
514 DO ng=1,ngroup
515 nel=iparg(2,ng)
516 nfl=iparg(3,ng)
517 IF((idb(ib)>nfl).AND.(idb(ib)<=nfl+nel))THEN
518 IF(iparg(11,ng)==1) jeul = 1
519 IF(iparg(7,ng)==1) jale = 1
520 idlocb(ib) = idb(ib) - nfl
521 ngb(ib) = ng
524 nelb(ib) = nel
525 ldone =.true.
526 gbuf => elbuf_tab(ngb(ib))%GBUF
528 gbuf%TAG22(idlocb(ib)) = ib
529 EXIT
530 ELSE
531 cycle
532 ENDIF
533 if (.NOT.(ldone))then
534 write( *,*) "int 22 : error in group sorting"
535 stop 2201
536 end if
537 ENDDO
538 ENDDO
539
541
542
543
544
545 DO ib=nbf,nbl
546 brickid = idb(ib)
547 iad2 = ale_connectivity%ee_connect%iad_connect(brickid)
548 lgth2 = ale_connectivity%ee_connect%iad_connect(brickid+1) -
549 . ale_connectivity%ee_connect%iad_connect(brickid)
550 DO j=1,lgth2
551 idv = ale_connectivity%ee_connect%connected(iad2 + j - 1)
557 IF(idv>0)THEN
558 iad3 = ale_connectivity%ee_connect%iad_connect(idv)
559 lgth3 = ale_connectivity%ee_connect%iad_connect(idv+1) -
560 . ale_connectivity%ee_connect%iad_connect(idv)
561 DO jv=1,lgth3
562 IF(ale_connectivity%ee_connect%connected(iad3 + jv - 1)==brickid)THEN
564 EXIT
565 ENDIF
566 enddo
568 gbufv => elbuf_tab(ngv)%GBUF
569 iad22 = gbufv%TAG22(idlocv)
571 brick_list(nin,ib)%Adjacent_Brick(j,3) = idlocv
572 brick_list(nin,ib)%Adjacent_Brick(j,4) = iad22
573 IF (iad22==0 .AND.
brick_list(nin,ib)%NBCUT>0)
THEN
574 print *, "**error : inter22 : Lagrangian Surface seems to"
575 print *, " reach eulerian boundary domain. "
576 print *, " Check Surface location and GRBRICK definition"
577 print *,
" near related Brick_ID =", ixs(11,
brick_list(nin,ib)%id)
578
579
580 stop 2202
581 ENDIF
582 ELSEIF(idv==0)THEN
586 ELSEIF(idv<0)THEN
587 write (*,*) "unavailable in SPMD"
588 stop 2203
589 ENDIF
590 ENDDO
591 ENDDO
592
593
594
595
596 DO ib=nbf,nbl
597 brickid = idb(ib)
598 IF(i22_aleul==2)THEN
599 n(1:3,1) = (/ veul(14,brickid) , veul(20,brickid) , veul(26,brickid) /)
600 n(1:3,2) = (/ veul(15,brickid) , veul(21,brickid) , veul(27,brickid) /)
601 n(1:3,3) = (/ veul(16,brickid) , veul(22,brickid) , veul(28,brickid) /)
602 n(1:3,4) = (/ veul(17,brickid) , veul(23,brickid) , veul(29,brickid) /)
603 n(1:3,5) = (/ veul(18,brickid) , veul(24,brickid) , veul(30,brickid) /)
604 n(1:3,6) = (/ veul(19,brickid) , veul(25,brickid) , veul(31,brickid) /)
605 brick_list(nin,ib)%N(1,1:3) = n(1:3,1) / sqrt(sum(n(1:3,1)*n(1:3,1)))
606 brick_list(nin,ib)%N(2,1:3) = n(1:3,2) / sqrt(sum(n(1:3,2)*n(1:3,2)))
607 brick_list(nin,ib)%N(3,1:3) = n(1:3,3) / sqrt(sum(n(1:3,3)*n(1:3,3)))
608 brick_list(nin,ib)%N(4,1:3) = n(1:3,4) / sqrt(sum(n(1:3,4)*n(1:3,4)))
609 brick_list(nin,ib)%N(5,1:3) = n(1:3,5) / sqrt(sum(n(1:3,5)*n(1:3,5)))
610 brick_list(nin,ib)%N(6,1:3) = n(1:3,6) / sqrt(sum(n(1:3,6)*n(1:3,6)))
611 ELSEIF(i22_aleul==1)THEN
612 ii = brickid
613
614 nc1=ixs(2,ii)
615 nc2=ixs(3,ii)
616 nc3=ixs(4,ii)
617 nc4=ixs(5,ii)
618 nc5=ixs(6,ii)
619 nc6=ixs(7,ii)
620 nc7=ixs(8,ii)
621 nc8=ixs(9,ii)
622
623
624 x1_=x(1,nc1)
625 y1_=x(2,nc1)
626 z1_=x(3,nc1)
627
628 x2_=x(1,nc2)
629 y2_=x(2,nc2)
630 z2_=x(3,nc2)
631
632 x3_=x(1,nc3)
633 y3_=x(2,nc3)
634 z3_=x(3,nc3)
635
636 x4_=x(1,nc4)
637 y4_=x(2,nc4)
638 z4_=x(3,nc4)
639
640 x5_=x(1,nc5)
641 y5_=x(2,nc5)
642 z5_=x(3,nc5)
643
644 x6_=x(1,nc6)
645 y6_=x(2,nc6)
646 z6_=x(3,nc6)
647
648 x7_=x(1,nc7)
649 y7_=x(2,nc7)
650 z7_=x(3,nc7)
651
652 x8_=x(1,nc8)
653 y8_=x(2,nc8)
654 z8_=x(3,nc8)
655
656
657 n(1,1)=(y3_-y1_)*(z2_-z4_) - (z3_-z1_)*(y2_-y4_)
658 n(2,1)=(z3_-z1_)*(x2_-x4_) - (x3_-x1_)*(z2_-z4_)
659 n(3,1)=(x3_-x1_)*(y2_-y4_) - (y3_-y1_)*(x2_-x4_)
660
661 n(1,2)=(y7_-y4_)*(z3_-z8_) - (z7_-z4_)*(y3_-y8_)
662 n(2,2)=(z7_-z4_)*(x3_-x8_) - (x7_-x4_)*(z3_-z8_)
663 n(3,2)=(x7_-x4_)*(y3_-y8_) - (y7_-y4_)*(x3_-x8_)
664
665 n(1,3)=(y6_-y8_)*(z7_-z5_) - (z6_-z8_)*(y7_-y5_)
666 n(2,3)=(z6_-z8_)*(x7_-x5_) - (x6_-x8_)*(z7_-z5_)
667 n(3,3)=(x6_-x8_)*(y7_-y5_) - (y6_-y8_)*(x7_-x5_)
668
669 n(1,4)=(y2_-y5_)*(z6_-z1_) - (z2_-z5_)*(y6_-y1_)
670 n(2,4)=(z2_-z5_)*(x6_-x1_) - (x2_-x5_)*(z6_-z1_)
671 n(3,4)=(x2_-x5_)*(y6_-y1_) - (y2_-y5_)*(x6_-x1_)
672
673 n(1,5)=(y7_-y2_)*(z6_-z3_) - (z7_-z2_)*(y6_-y3_)
674 n(2,5)=(z7_-z2_)*(x6_-x3_) - (x7_-x2_)*(z6_-z3_)
675 n(3,5)=(x7_-x2_)*(y6_-y3_) - (y7_-y2_)*(x6_-x3_)
676
677 n(1,6)=(y8_-y1_)*(z4_-z5_) - (z8_-z1_)*(y4_-y5_)
678 n(2,6)=(z8_-z1_)*(x4_-x5_) - (x8_-x1_)*(z4_-z5_)
679 n(3,6)=(x8_-x1_)*(y4_-y5_) - (y8_-y1_)*(x4_-x5_)
680
681 brick_list(nin,ib)%N(1,1:3) = n(1:3,1) / sqrt(sum(n(1:3,1)*n(1:3,1)))
682 brick_list(nin,ib)%N(2,1:3) = n(1:3,2) / sqrt(sum(n(1:3,2)*n(1:3,2)))
683 brick_list(nin,ib)%N(3,1:3) = n(1:3,3) / sqrt(sum(n(1:3,3)*n(1:3,3)))
684 brick_list(nin,ib)%N(4,1:3) = n(1:3,4) / sqrt(sum(n(1:3,4)*n(1:3,4)))
685 brick_list(nin,ib)%N(5,1:3) = n(1:3,5) / sqrt(sum(n(1:3,5)*n(1:3,5)))
686 brick_list(nin,ib)%N(6,1:3) = n(1:3,6) / sqrt(sum(n(1:3,
687 ENDIF
688
689 DO j=1,nv46
690
691 f(j,ib) = half * sqrt( sum( n(:,j) * n(:,j) ) )
692 ENDDO
694
695
696
697
698
699
700
701
702 pfullface =>
brick_list(nin,ib)%Face_BRICK(1:6)
703 pfullface(1:6) = f(1:6,ib)
705 pface(1)%FACE(1:6)%Surf = f(1:6,ib)
706 cycle
707 ENDIF
709 DO icell=1,ncell
710
711 IF(
brick_list(nin,ib)%POLY(icell)%Vnew<zero)
THEN
712 DO j=1,nv46
713 pface(icell)%FACE(j)%Surf = f(j,ib) + pface(icell)%FACE(j)%Surf
714 if(pface(icell)%FACE(j)%Surf<zero)then
715 write (*,*) "**error : inter22 negative cell face"
716 endif
717 enddo
718 ENDIF
719
721 IF(vol<zero)THEN
722 gbuf => elbuf_tab(ngb(ib))%GBUF
723 brick_list(nin,ib)%POLY(icell)%Vnew = gbuf%VOL(idlocb(ib)) + vol
724 ENDIF
725 volratio =
brick_list(nin,ib)%POLY(icell)%Vnew / elbuf_tab(ngb(ib))%GBUF%VOL(idlocb(ib))
726
727 IF(abs(volratio) <= em04)THEN
728 i22_degenerated = 1
729 ENDIF
730 enddo
731 ENDDO
732
733
734
735
736
737
738
739
740
741 DO ib=nbf,nbl
742 plistnodid(1)%p(1:8) =>
brick_list(nin,ib)%POLY(1)%ListNodID(1:8)
743 plistnodid(2)%p(1:8) =>
brick_list(nin,ib)%POLY(2)%ListNodID(1:8)
744 plistnodid(3)%p(1:8) =>
brick_list(nin,ib)%POLY(3)%ListNodID(1:8)
745 plistnodid(4)%p(1:8) =>
brick_list(nin,ib)%POLY(4)%ListNodID(1:8)
746 plistnodid(5)%p(1:8) =>
brick_list(nin,ib)%POLY(5)%ListNodID(1:8)
747 plistnodid(6)%p(1:8) =>
brick_list(nin,ib)%POLY(6)%ListNodID(1:8)
748 plistnodid(7)%p(1:8) =>
brick_list(nin,ib)%POLY(7)%ListNodID(1:8)
749 plistnodid(8)%p(1:8) =>
brick_list(nin,ib)%POLY(8)%ListNodID(1:8)
750 plistnodid(9)%p(1:8) =>
brick_list(nin,ib)%POLY(9)%ListNodID(1:8)
752 pwhichcellnod(1:8) =>
brick_list(nin,ib)%NODE(1:8)
754
755
756
757! pface(5)%p(1:6) =>
brick_list(nin,ib)%POLY(5)%FACE(1:6)%Surf
758
759
760
761! pface(9)%p(1:6) =>
brick_list(nin,ib)%POLY(9)%FACE(1:6)%Surf
766 IF(ncell/=0)THEN
767
768 brick_list(nin,ib)%POLY(9)%FACE(1)%Surf = f(1,ib)-sum( (/ (
brick_list(nin,ib)%POLY(k)%FACE(1)%Surf,k=1,ncell)/) )
769 brick_list(nin,ib)%POLY(9)%FACE(2)%Surf = f(2,ib)-sum( (/ (
brick_list(nin,ib)%POLY(k)%FACE(2)%Surf,k=1,ncell)/) )
770 brick_list(nin,ib)%POLY(9)%FACE(3)%Surf = f(3,ib)-sum( (/ (
brick_list(nin,ib)%POLY(k)%FACE(3)%Surf,k=1,ncell)/) )
771 brick_list(nin,ib)%POLY(9)%FACE(4)%Surf = f(4,ib)-sum( (/ (
brick_list(nin,ib)%POLY(k)%FACE(4)%Surf,k=1,ncell)/) )
772 brick_list(nin,ib)%POLY(9)%FACE(5)%Surf = f(5,ib)-sum( (/ (
brick_list(nin,ib)%POLY(k)%FACE(5)%Surf,k=1,ncell)/) )
773 brick_list(nin,ib)%POLY(9)%FACE(6)%Surf = f(6,ib)-sum( (/ (
brick_list(nin,ib)%POLY(k)%FACE(6)%Surf,k=1,ncell)/) )
774 brick_list(nin,ib)%POLY(9)%FACE0%Surf = sum( (/ (
brick_list(nin,ib)%POLY(k)%FACE0%Surf,k=1,ncell) /) )
776
779 mnod = 0
780 ppoint(1:3) = zero
781
782 DO j=1,8
783 IF(pwhichcellnod(j)%WhichCell/=0) cycle
784 pwhichcellnod(j)%WhichCell = 9
785 mnod = mnod + 1
786 plistnodid(9)%p(mnod) = j
787 ppoint(1) = ppoint(1) + x(1,ixs(1+j,
id))
788 ppoint(2) = ppoint(2) + x(2,ixs(1+j,
id))
789 ppoint(3) = ppoint(3) + x(3,ixs(1+j,
id))
790 ENDDO
793 . sum(
brick_list(nin,ib)%POLY(1:ncell)%NumPOINT ) - sum(
brick_list(nin,ib)%POLY(1:ncell)%NumNOD) + mnod
794 gbuf => elbuf_tab(ngb(ib))%GBUF
796 uncutvol = gbuf%VOL(idlocb(ib))
797 IF(abs(
brick_list(nin,ib)%POLY(9)%Vnew /uncutvol) <em04
798 . .OR. abs(
brick_list(nin,ib)%POLY(1)%Vnew /uncutvol) <em04
THEN
799 i22_degenerated = 1
800 ENDIF
801
802
804 k1 = 0
805 DO j=1,12
807 DO i=1,nbcut
808 pointtmp(1:3) =
brick_list(nin,ib)%EDGE(j)%CUTPOINT(1:3,i)
809 ppoint(1) = ppoint(1) + pointtmp(1)
810 ppoint(2) = ppoint(2) + pointtmp(2)
811 ppoint(3) = ppoint(3) + pointtmp(3)
812 k1 = k1 + 1
813 ENDDO
814 ENDDO
815 IF(npoint/=0)THEN
816 ppoint(1) = ppoint(1) / (k1+mnod)
817 ppoint(2) = ppoint(2) / (k1+mnod)
818 ppoint(3) = ppoint(3) / (k1+mnod)
819 brick_list(nin,ib)%POLY(9)%CellCENTER(1:3) = ppoint(1:3)
820 ENDIF
821 endif
822 enddo
823
824
825
826
827 DO ib=nbf,nbl
830 psubvol(1:9)%Vnew = 0
831 gbuf => elbuf_tab(ngb(ib))%GBUF
832 psubvol(1)%Vnew = gbuf%VOL(idlocb(ib))
833 brick_list(nin,ib)%Vnew_SCell = gbuf%VOL(idlocb(ib))
834 ENDIF
835 ENDDO
836
837
838
839
840 DO ib=nbf,nbl
841 brick_list(nin,ib)%UncutVol = elbuf_tab(ngb(ib))%GBUF%VOL(idlocb(ib))
842 ENDDO
843
844 9 CONTINUE
845
846
847
848
849
850
851 DO ib=nbf,nbl
854 IF(ncell<= 1) cycle
855 DO j=1,6
856 face =
brick_list(nin,ib)%POLY(9)%FACE(j)%Surf
857 IF(face ==zero) cycle
858
859 lfound = .false.
860 DO k=1,4
862 icell =
brick_list(nin,ib)%NODE(inod)%WhichCell
863 IF(icell == 9) lfound = .true.
864 ENDDO
865 IF(lfound)cycle
866
868 enddo
869
870 enddo
871
872
873
874 DO ib=nbf,nbl
876
877 ENDDO
878
879
880
881
882
883 DO ib=nbf,nbl
890 gbuf => elbuf_tab(ng)%GBUF
891 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
892 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
893 llt_ = iparg(2,ng)
894 icell = 0
895 IF(mcell==0)THEN
908
909 IF(i22law37+i22law51 == 0) cycle
915 IF(i22law51 == 0) cycle
916 DO k=6, i22law51
918 enddo
919 ELSE
920 brick_list(nin,ib)%bakMAT%RHO = gbuf%RHO(idloc)
921 brick_list(nin,ib)%bakMAT%rhoE = gbuf%EINT(idloc)
922 brick_list(nin,ib)%bakMAT%rhoU(1) = gbuf%MOM(llt_*(1-1) +idloc)
923 brick_list(nin,ib)%bakMAT%rhoU(2) = gbuf%MOM(llt_*(2-1) +idloc)
924 brick_list(nin,ib)%bakMAT%rhoU(3) = gbuf%MOM(llt_*(3-1) +idloc)
925 brick_list(nin,ib)%bakMAT%ssp = lbuf%SSP(idloc)
926 brick_list(nin,ib)%bakMAT%SIG(1) = gbuf%SIG(llt_*(1-1) +idloc)
927 brick_list(nin,ib)%bakMAT%SIG(2) = gbuf%SIG(llt_*(2-1) +idloc)
928 brick_list(nin,ib)%bakMAT%SIG(3) = gbuf%SIG(llt_*(3-1) +idloc
929 brick_list(nin,ib)%bakMAT%SIG(4) = gbuf%SIG(llt_*(4-1) +idloc)
930 brick_list(nin,ib)%bakMAT%SIG(5) = gbuf%SIG(llt_*(5-1) +idloc)
931 brick_list(nin,ib)%bakMAT%SIG(6) = gbuf%SIG(llt_*(6-1) +idloc)
932
933
934 IF(mlw/=37 .AND. mlw/=51)cycle
935 brick_list(nin,ib)%bakMAT%UVAR(1) = mbuf%VAR((1-1)*llt_+idloc)
936 brick_list(nin,ib)%bakMAT%UVAR(2) = mbuf%VAR((2-1)*llt_+idloc)
937 brick_list(nin,ib)%bakMAT%UVAR(3) = mbuf%VAR((3-1)*llt_+idloc)
938 brick_list(nin,ib)%bakMAT%UVAR(4) = mbuf%VAR((4-1)*llt_+idloc)
939 brick_list(nin,ib)%bakMAT%UVAR(5) = mbuf%VAR((5-1)*llt_+idloc)
940 IF(i22law51 == 0) cycle
941 DO k=6, i22law51
942 brick_list(nin,ib)%bakMAT%UVAR(k) = mbuf%VAR((k-1)*llt_+idloc)
943 enddo
944 ENDIF
945 enddo
946
947
949
950
951
952
953
954 DO ib=nbf,nbl
956
957
958
959
960
961
962
963
964
965 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
966 plistnodid(1)%p(1:8) =>
brick_list(nin,ib)%POLY(1)%ListNodID
967 plistnodid(2)%p(1:8) =>
brick_list(nin,ib)%POLY(2)%ListNodID(1:8)
968 plistnodid(3)%p(1:8) =>
brick_list(nin,ib)%POLY(3)%ListNodID(1:8)
969 plistnodid(4)%p(1:8) =>
brick_list(nin,ib)%POLY(4)%ListNodID(1:8)
970 plistnodid(5)%p(1:8) =>
brick_list(nin,ib)%POLY(5)%ListNodID(1:8)
971 plistnodid(6)%p(1:8) =>
brick_list(nin,ib)%POLY(6)%ListNodID(1:8)
972 plistnodid(7)%p(1:8) =>
brick_list(nin,ib)%POLY(7)%ListNodID(1:8)
973 plistnodid(8)%p(1:8) =>
brick_list(nin,ib)%POLY(8)%ListNodID(1:8)
974 plistnodid(9)%p(1:8) =>
brick_list(nin,ib)%POLY(9)%ListNodID(1:8)
977
978 DO k=1,6
979 brick_list(nin,ib)%POLY(1:9)%FACE(k)%Adjacent_Cell(1) = 0
981 brick_list(nin,ib)%POLY(1:9)%FACE(k)%Adjacent_Cell(3) = 0
982 brick_list(nin,ib)%POLY(1:9)%FACE(k)%Adjacent_Cell(4) = 0
983 brick_list(nin,ib)%POLY(1:9)%FACE(k)%Adjacent_Cell(5) = 0
984 brick_list(nin,ib)%POLY(1:9)%FACE(k)%NAdjCell = 0
985 ENDDO
986 icell = 0
987 DO WHILE (icell<=ncell)
988 icell = icell +1
989 IF (icell>ncell .AND. ncell/=0)icell=9
990 DO j=1,nv46
991 IF(pface(icell)%FACE(j)%Surf>zero)THEN
992 iv = padjbrick(j,1)
993 IF(iv==0)cycle
994
995 iad22 = padjbrick(j,4)
996 IF(iad22 == 0)THEN
997
998 brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell = 1
999 brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(1) = 1
1001
1002 brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell = 1
1003 brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(1) = 1
1004 ELSE
1005
1006 pwhichcellnodv(1:8) =>
brick_list(nin,iad22)%NODE(1:8)
1007
1008 nnodes = 0
1009 DO k1=1,
brick_list(nin,ib)%POLY(icell)%NumNOD
1010 DO k2=1,4
1011 IF(plistnodid(icell)%p(k1) ==
int22_buf%nodFACE(j,k2))
THEN
1012 nnodes = nnodes +1
1013 inodes
1014 ENDIF
1015 ENDDO
1016 ENDDO
1017
1018 icelltag(1:9) = 0
1019 jv = padjbrick(j,5)
1020 DO k0=1,4 !loop on adjacent 'local' nodes(ii,j)<->(iv,jv)
1022 DO in=1,nnodes
1023 IF(ixs(1+k1,iv)==inodes(in) )THEN
1024 icellv = pwhichcellnodv(k1)%WhichCell
1025 if (icellv==0)then
1026 print *, "ITASK,ICELLv,pWhichCellNodv(K1)",itask,icellv,pwhichcellnodv(k1)%WhichCell
1027 stop 2245
1028 endif
1029 IF(icelltag(icellv)==0)THEN
1030 icelltag( icellv ) = 1
1031 brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell + 1
1032 nadjcell =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
1033 brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(nadjcell) = icellv
1034 ENDIF
1035 ENDIF
1036 enddo
1037 enddo
1038 endif
1039 endif
1040
1041
1042 poly9wonodes =
brick_list(nin,ib)%Poly9woNodes(j,1)
1043
1044 IF(poly9wonodes == 1)THEN
1047 IF(ibv==0)THEN
1049 cycle
1050 ENDIF
1052 poly9wonodesv =
brick_list(nin,ibv)%Poly9woNodes(jv,1)
1053 IF(poly9wonodesv==0)THEN
1055 IF(nbcutv == 0)THEN
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1070
1071
1072
1073
1074 ELSE
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1086 nadjcell =
brick_list(nin,ib)%POLY(9)%FACE(j)%NAdjCell
1087 brick_list(nin,ib)%POLY(9)%FACE(j)%Adjacent_Cell(nadjcell) = 9
1089 ENDIF
1090 ELSEIF(poly9wonodesv/=0)THEN
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1103 nadjcell =
brick_list(nin,ib)%POLY(9)%FACE(j)%NAdjCell
1104 brick_list(nin,ib)%POLY(9)%FACE(j)%Adjacent_Cell(nadjcell) = 9
1106 endif
1107 ENDIF
1108 enddo
1109 enddo
1110 enddo
1111
1112
1113 !------------------------------------------------------------
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146 DO ib=nbf,nbl
1149 DO j=1,6
1150 icode = 0
1152 IF(iv==0)cycle
1153 DO k=1,4
1155 icell =
brick_list(nin,ib)%NODE(inod)%WhichCell
1156 icode = ibset(icode,icell)
1157 ENDDO
1158
1159
1160 IF(icode == 518 .OR. icode == 6) THEN
1161 face9 =
brick_list(nin,ib)%POLY(9)%FACE(j)%Surf
1163
1165 IF(nbcutv == 0 .AND. face9>zero) THEN
1166
1168
1169
1170 ENDIF
1171 ENDIF
1172
1173 poly9wonodes =
brick_list(nin,ib)%Poly9woNodes(j,1)
1174 icellv =
brick_list(nin,ib)%Poly9woNodes(j,2)
1175 IF(poly9wonodes /=0 .AND. icellv /= 0)cycle
1176 IF(poly9wonodes==0 .AND. icode /= 518)cycle
1177
1178 np = 0
1179 ppoint(1:3) = zero
1180 cut_vel(1:3) = zero
1181 nbcutprev = 0
1182 DO inod=4,1,-1
1183
1184 pointtmp(1:3) = x(1:3,ixs(1+
int22_buf%NodFace(j,inod),ie))
1185 ppoint(1) = ppoint(1) + pointtmp
1186 ppoint(2) = ppoint(2) + pointtmp
1187 ppoint(3) = ppoint(3) + pointtmp(3)
1188
1190 isgn(1:2) = (/1,2/)
1191 IF(iedg < 0) isgn(1:2) = (/2,1/)
1192 iedg = iabs(iedg)
1194 IF(nbcut == 0)THEN
1195 cycle
1196 ELSEIF(nbcut == 1)THEN
1197 np = np + 1
1198 cut_point(1:3) =
brick_list(nin,ib)%Edge(iedg)%CUTPOINT(1:3,1)
1199 brick_list(nin,ib)%PCUT(8+j)%P(1:3,np) = cut_point(1:3)
1200 cut_vel(1:3) = cut_vel(1:3) +
brick_list(nin,ib)%Edge(iedg)%CUTVEL(1:3,1)
1201
1202
1203
1204
1205
1206!
brick_list(nin,ib)%PCUT(8+j)%P(1:3,np) = cut_point(1:3)
1207
1208
1209
1210
1211 ELSE
1212 np = np + 1
1213 cut_point(1:3) =
brick_list(nin,ib)%Edge(iedg)%CUTPOINT(1:3,isgn(1))
1214 brick_list(nin,ib)%PCUT(8+j)%P(1:3,np) = cut_point(1:3)
1215 cut_vel(1:3) = cut_vel(1:3) +
brick_list(nin,ib)%Edge(iedg)%CUTVEL(1:3,isgn(1))
1216 np = np + 1
1217 cut_point(1:3) =
brick_list(nin,ib)%Edge(iedg)%CUTPOINT(1:3,isgn(2))
1218 cut_vel(1:3) = cut_vel(1:3) +
brick_list(nin,ib)%Edge(iedg)%CUTVEL(1:3,isgn(2))
1219 brick_list(nin,ib)%PCUT(8+j)%P(1:3,np) = cut_point(1:3)
1220 ENDIF
1221 nbcutprev = nbcut
1222 enddo
1224 brick_list(nin,ib)%PCUT(8+j)%B(1) = fourth * ppoint(1)
1225 brick_list(nin,ib)%PCUT(8+j)%B(2) = fourth * ppoint(2)
1226 brick_list(nin,ib)%PCUT(8+j)%B(3) = fourth * ppoint(3)
1229
1230 brick_list(nin,ib)%PCUT(8+j)%Vel(1:3) = cut_vel(1:3) / (np*one)
1231 ppoint(1:3) =
brick_list(nin,ib)%PCUT(8+j)%B(1:3)
1232 vectmp(1:3) =
i22aera(np,
brick_list(nin,ib)%PCUT(8+j)%P(1:3,1:np), ppoint(1:3) )
1233 face = sqrt(sum(vectmp(1:3)*vectmp(1:3)))
1235 enddo
1236 enddo
1237
1238
1239
1241
1242
1243
1244
1245
1246 nbl1 = nbl
1247 IF(i22_degenerated == 1)THEN
1248 ALLOCATE (destroy_data(7,2*
nb))
1249 ELSE
1250 nbl1 = 0
1251 ENDIF
1252
1254
1255 ipos = 0
1256 DO ib=nbf,nbl1
1258 icell = 0
1259 DO WHILE (icell<=ncell)
1260 icell = icell +1
1261 IF (icell>ncell .AND. ncell/=0)icell=9
1264 ratio = vol / uncutvol
1265 IF(abs(ratio)>em04)cycle
1266 idloc = maxloc(
brick_list(nin,ib)%POLY(icell)%FACE(1:6)%SURF,1)
1267 ratiof =
brick_list(nin,ib)%POLY(icell)%FACE(idloc)%SURF /
brick_list(nin,ib)%Face_Brick(idloc)
1268
1269
1270 j = idloc
1271 nadjcell =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
1272 DO iadj = 1,nadjcell
1273 icellv =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(iadj)
1279 ratiov = volv/uncutvolv
1280 !vol=1.01e-05, uncutvol=10 => ratio > em06. so em04 is retained. threshold volume : smax = o(v**(2/3)), dh= em03 * o(v**(1/3)) => veps = em04*o(v) => ratio=veps/v = em04
1281 IF(abs(ratiov)>em04 .OR. ibv>ib )cycle
1282
1283 ipos = ipos + 1
1284 destroy_data(1,ipos) = nin
1285 destroy_data(2,ipos) = ib
1286 destroy_data(3,ipos) = icell
1287 destroy_data(4,ipos) = icellv
1288 destroy_data(5,ipos) = ibv
1289
1290 destroy_data(7,ipos) = jv
1291
1292 enddo
1293
1294 enddo
1295 enddo
1296
1297
1299 print *, ""
1300 print *, " |------i22_destroy_cell.F-------|"
1301 print *, " | INITIALIZATION SUBROUTINE |"
1302 print *, " |-------------------------------|"
1303 print *, ""
1304 endif
1305
1306
1308
1309
1310 DO i=1,ipos
1311 ib = destroy_data(2,i)
1312 icell = destroy_data(3,i)
1313 icellv = destroy_data(4,i)
1314 ibv = destroy_data(5,i)
1315 j = destroy_data(6,i)
1316 jv = destroy_data(7,i)
1317
1318 CALL destroy_cell( nin, ib,icell,icellv,ibv,j,jv, ixs, itask)
1319 ENDDO
1320
1321 IF(i22_degenerated == 1)THEN
1322 !-------------------
1324
1325
1326 i22loop = i22loop + 1
1327 if(i22loop >= 2)then
1328 print *, "**error : inter22, unexpected situation."
1329 endif
1330 i22_degenerated = 0
1331 GOTO 9
1332 ENDIF
1333
1334
1335
1336
1337
1338 DO ib=nbf,nbl
1342 pismain(1:9)%IsMain = 0
1343 pmainid = 0
1345 pismain(1)%IsMain = 1
1346 pmainid = 1
1347 cycle
1348 ENDIF
1349 gbuf => elbuf_tab(ngb(ib
1352 icell = 0
1353
1354 DO WHILE (icell<=ncell)
1355 icell = icell +1
1356 IF (icell>ncell .AND. ncell/=0)icell=9
1357
1358 volcell =
brick_list(nin,ib)%POLY(icell)%Vnew
1359 fac = volcell / vol
1360 IF(fac>critmerge22)THEN
1361
1362 pismain(icell)%IsMain = 1
1363 ENDIF
1364 enddo
1365 k = sum(pismain(1:9)%IsMain)
1366
1367 IF(k==1)THEN
1368 pmainid = maxloc(pismain(1:9)%IsMain,1)
1369 ELSEIF(k>=2)THEN
1371 pismain(1:9)%IsMain = 0
1372 pismain(mcell)%IsMain = 1
1373 pmainid = mcell
1374
1375 ELSEIF(k==0)THEN
1376 pismain(9)%IsMain = 1
1377 pmainid = 9
1378 ENDIF
1379 enddo
1380
1381
1383
1384
1385
1386
1387 n_unlinked_l(itask) = 0
1388
1389 DO ib=nbf,nbl
1392 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
1393
1394
1397 mcell = pmainid
1398 icell = 0
1399 brick_list(nin,ib)%POLY(1:9)%WhereIsMain(1) = 0
1400 brick_list(nin,ib)%POLY(1:9)%WhereIsMain(2) = 0
1401 brick_list(nin,ib)%POLY(1:9)%WhereIsMain(3) = 0
1402 brick_list(nin,ib)%POLY(1:9)%WhereIsMain(4) = 0
1403 IF(ncell == 0) THEN
1404 brick_list(nin,ib)%POLY(mcell)%WhereIsMain(3) = ie
1405 brick_list(nin,ib)%POLY(mcell)%WhereIsMain(4) = ib
1406 cycle
1407 ENDIF
1408 DO WHILE (icell<=ncell)
1409 icell = icell +1
1410 IF (icell>ncell .AND. ncell/=0)icell=9
1411
1412
1413 IF(icell == mcell)THEN
1414 brick_list(nin,ib)%POLY(icell)%WhereIsMain(1:2) = 0
1415 brick_list(nin,ib)%POLY(icell)%WhereIsMain(3) = ie
1416 brick_list(nin,ib)%POLY(icell)%WhereIsMain(4) = ib
1417 ELSE
1418 adjmain_face(1:6) = zero
1419 adjmain_centroid(1:3,1:6) = zero
1420 idadj_mcellv(1:6) = 0
1421 ivadj_mcellv(1:6) = 0
1422 ibadj_mcellv(1:6) = 0
1423
1424 IF(sum(
brick_list(nin,ib)%POLY(icell)%FACE(1:6)%NAdjCell) == 0)
THEN
1425 print *, "**error : inter22 - Cell trapped. Check Lagrangian Surface surrounding BRICK ID:",
1427 cycle
1428 ENDIF
1429 DO j=1,nv46
1430 nadjcell =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
1431 IF(nadjcell == 0)cycle
1432 iv = padjbrick(j,1)
1433 ibv = padjbrick(j,4)
1434 IF(ibv==0)THEN
1435 adjmain_face(j) =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Surf
1436 idadj_mcellv(j) = 1
1437 ivadj_mcellv(j) = iv
1438 ibadj_mcellv(j) = 0
1439 adjmain_centroid(1,j) = sum(x(1,ixs(2:9,iv))) / eight
1440 adjmain_centroid(2,j) = sum(x(2,ixs(2:9,iv))) / eight
1441 adjmain_centroid(3,j) = sum(x(3,ixs(2:9,iv))) / eight
1442 ELSE
1443 DO k=1,nadjcell
1444 icellv =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(k)
1445 jv = padjbrick(j,5)
1446 IF(
brick_list(nin,ibv)%POLY(icellv)%IsMain == 1)
THEN
1447 adjmain_face(j) =
min(
brick_list(nin,ib)%POLY(icell)%FACE(j)%Surf,
1448 .
brick_list(nin,ibv)%POLY(icellv)%FACE(jv)%Surf)
1449 adjmain_centroid(1:3,j) =
brick_list(nin,ibv)%POLY(icellv)%CellCenter(1:3)
1450 idadj_mcellv(j) = icellv
1451 ivadj_mcellv(j) = iv
1452 ibadj_mcellv(j) = ibv
1453 EXIT
1454 ENDIF
1455 enddo
1456 ENDIF
1457 ENDDO
1458 sumface = sum(adjmain_face(1:6))
1459 IF(sumface==zero)THEN
1460
1461 n_unlinked_l(itask) = n_unlinked_l(itask) + 1
1462 unlinked_cells_l(itask,1,n_unlinked_l(itask)) = ib
1463 unlinked_cells_l(itask,2,n_unlinked_l(itask)) = icell
1464 cycle
1465 ENDIF
1466
1467
1468 ipos = maxloc(adjmain_face(1:6),1)
1469 brick_list(nin,ib)%POLY(icell)%WhereIsMain(1) = ipos
1470 brick_list(nin,ib)%POLY(icell)%WhereIsMain(2) = idadj_mcellv(ipos)
1471 brick_list(nin,ib)%POLY(icell)%WhereIsMain(3) = ivadj_mcellv(ipos)
1472 brick_list(nin,ib)%POLY(icell)%WhereIsMain(4) = ibadj_mcellv(ipos)
1473 ENDIF
1474 enddo
1475 ENDDO
1476
1478
1480 . print *, " **SINIT** : UNLINKED CELL SYNTHESIS "
1481 DO i=1,n_unlinked_l(itask)
1482 ib = unlinked_cells_l(itask,1,i)
1483 icell = unlinked_cells_l(itask,2,i)
1485 ENDDO
1487
1488
1489
1490
1491
1492 DO ib=nbf,nbl
1495 IF(mcell == 0) cycle
1496
1498 nsecndnod = 0
1499 numsecnd = 0
1502 DO j=1,nv46
1505 idlocv =
brick_list(nin,ib)%Adjacent_Brick(j,3)
1508 nadj =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%NAdjCell
1509 IF(ibv==0)cycle
1510 DO iadj = 1,nadj
1511 icellv =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%Adjacent_Cell(iadj)
1512 ie_m =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(3)
1513 IF(ie_m/=ie)cycle
1514
1515 numsecnd = numsecnd + 1
1516 nsecndnod = nsecndnod +
brick_list(nin,ibv)%POLY(icellv)%NumNOD
1517 brick_list(nin,ib)%SecndList%FM(numsecnd) = j
1518 brick_list(nin,ib)%SecndList%FV(numsecnd) = ifv
1519 brick_list(nin,ib)%SecndList%IV(numsecnd) = iv
1520 brick_list(nin,ib)%SecndList%IBV(numsecnd) = ibv
1521 brick_list(nin,ib)%SecndList%ICELLv(numsecnd) = icellv
1525 brick_list(nin,ib)%SecndList%SURF_v(numsecnd) =
brick_list(nin,ibv)%POLY(icellv)%FACE(ifv)%SURF
1526 enddo
1528 enddo
1529 brick_list(nin,ib)%SecndList%NumSecndNodes = nsecndnod
1530 ENDDO
1531
1532
1533
1534
1535
1536
1537 DO iunlink=1,n_unlinked_l(itask)
1538 ib = unlinked_cells_l(itask,1,iunlink)
1539 icell = unlinked_cells_l(itask,2,iunlink)
1540 adjface(:,:) = zero
1541 ipos = 0
1542 DO j=1,nv46
1543 nadj =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
1545
1546 DO iadj=1,nadj
1548 icellv =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(iadj)
1549 ipos =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(1)
1550 IF(ipos==0)cycle
1551 IF(ibv/=0)THEN
1552 adjface(j,iadj) =
min(
brick_list(nin,ib)%POLY(icell)%FACE(j)%Surf,
1553 .
brick_list(nin,ibv)%POLY(icellv)%FACE(jv)%Surf)
1554 ELSE
1555 adjface(j,iadj) =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Surf
1556 ENDIF
1557 ENDDO
1558 ENDDO
1559 ires(1:2) = maxloc(adjface)
1560 iposf = ires(1)
1561 iposiadj = ires(2)
1562 ibv =
brick_list(nin,ib)%Adjacent_Brick(iposf,4)
1563 icellv =
brick_list(nin,ib)%POLY(icell)%FACE(iposf)%Adjacent_Cell(iposiadj)
1564 ipos = 0
1565 IF(icellv/=0)
1566 . ipos =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(1)
1567 IF(ipos==0 .OR. adjface(ires(1),ires(2))==zero)THEN
1568 print *,
"***error : inter22 unable to treat cell ",ixs(11,
brick_list(nin,ib)%ID)
1569 print *, " Cell seems trapped with no adjacent cells"
1570 stop 2207
1571 ENDIF
1572 IF(ipos>=10)THEN
1573 print *,
"***error : inter22 unable to treat cell ",ixs(11,
brick_list(nin,ib)%ID)
1574 print *, " Cell seems trapped with no adjacent cells"
1575 print *, " Fluid mesh in interaction area should be refined"
1576 stop 2208
1577 ENDIF
1578 j = iposf*10 + ipos
1579 brick_list(nin,ib)%POLY(icell)%WhereIsMain(1) = j
1580 brick_list(nin,ib)%POLY(icell)%WhereIsMain(2) =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(2)
1581 brick_list(nin,ib)%POLY(icell)%WhereIsMain(3) =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(3)
1584 write(*,fmt=
'(A,I10,A1,I1,A,I2,I2,A1,I2,A2)')
"unlinked cell:", ixs(11,
brick_list(nin,ib)%ID),
1585 . ".",icell, " is now linked to faces ", iposf, ipos,"(",j," )"
1586 ENDIF
1587 ENDDO
1588
1589
1590
1591
1592
1593
1594
1596
1597
1598
1599 DO it=0,nthread-1
1600 DO iunlink=1,n_unlinked_l(it)
1601 ib = unlinked_cells_l(it,1,iunlink)
1602 icell = unlinked_cells_l(it,2,iunlink)
1603 ibm =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(4)
1605
1606
1607
1608 IF(itaskb/=itask)cycle
1609
1610 volcell =
brick_list(nin,ib)%POLY(icell)%Vnew
1612 j =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(1)
1613 j1 = j/10
1614 j2 = mod(j,10)
1615 ibv =
brick_list(nin,ib)%Adjacent_Brick(j1,4)
1616 IF(ibv==0)THEN
1617 print *, "inter22 :Error lagrangian surface is escaping eulerian domain."
1618
1619 stop
1620 ENDIF
1621 fm =
brick_list(nin,ibv)%Adjacent_Brick(j2,5)
1623 nsecndnod =
brick_list(nin,ibm)%SecndList%NumSecndNodes
1624 numsecnd = numsecnd + 1
1625 nsecndnod = nsecndnod +
brick_list(nin,ib)%POLY(icell)%NumNOD
1627 brick_list(nin,ibm)%SecndList%NumSecndNodes = nsecndnod
1628 brick_list(nin,ibm)%SecndList%FM(numsecnd) = fm
1629 brick_list(nin,ibm)%SecndList%FV(numsecnd) = j
1631 brick_list(nin,ibm)%SecndList%IBV(numsecnd) = ib
1632 brick_list(nin,ibm)%SecndList%ICELLv(numsecnd) = icell
1633 brick_list(nin,ibm)%SecndList%VOL(numsecnd) = volcell
1635 brick_list(nin,ibm)%SecndList%ListNodID(numsecnd,1:8) =
brick_list(nin,ib)%POLY(icell)%ListNodID(1:8)
1637 enddo
1638 enddo
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649 DO ib=nbf,nbl
1652 ncell = nbcut
1653 icell = 0
1654 pnodwasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
1655 plistnodid(1)%p(1:8) =>
brick_list(nin,ib)%POLY(1)%ListNodID(1:8)
1656 plistnodid(2)%p(1:8) =>
brick_list(nin,ib)%POLY(2)%ListNodID(1:8)
1657 plistnodid(3)%p(1:8) =>
brick_list(nin,ib)%POLY(3)%ListNodID(1:8)
1658 plistnodid(4)%p(1:8) =>
brick_list(nin,ib)%POLY(4)%ListNodID(1:8)
1659 plistnodid(5)%p(1:8) =>
brick_list(nin,ib)%POLY(5)%ListNodID(1:8)
1660 plistnodid(6)%p(1:8) =>
brick_list(nin,ib)%POLY(6)%ListNodID(1:8)
1661 plistnodid(7)%p(1:8) =>
brick_list(nin,ib)%POLY(7)%ListNodID(1:8)
1662 plistnodid(8)%p(1:8) =>
brick_list(nin,ib)%POLY(8)%ListNodID(1:8)
1663 plistnodid(9)%p(1:8) =>
brick_list(nin,ib)%POLY(9)%ListNodID(1:8)
1665 ntag = 0
1666 main_tag(:,:) = 0
1667
1669
1670 inod_w =
brick_list(nin,ib)%OldMainStrongNode
1671 IF( inod_w*dt1 > zero)THEN
1672 IF (
brick_list(nin,ib)%NODE(inod_w)%WhichCell==mcell)ncell = -1
1673 ENDIF
1674
1675
1676 DO WHILE (icell<=ncell)
1677 icell = icell +1
1678 IF (icell>ncell .AND. ncell/=0)icell=9
1679 IF(icell==mcell)cycle
1682 IF(sum(pnodwasmain(plistnodid(icell)%p(1:mnod))%NodWasMain)==0)cycle
1683 IF(pnodwasmain(inod_w)%NodWasMain<=0) cycle
1684
1685
1686
1687
1688
1691 var = vol_s / (uncutvol)
1692 IF (var < critdvol22)cycle
1693 inod_w =
brick_list(nin,ib)%OldMainStrongNode
1694 IF(inod_w==0)cycle
1695
1696 ipos =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(1)
1697 icv =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(2)
1698 ibm =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(4)
1699 ntag = ntag + 1
1700
1701
1702 brick_list(nin,ib)%MergeTarget(1,ntag) = ipos
1705 enddo
1706
1707
1709
1710
1711
1712 enddo
1713
1714
1715
1716
1717
1718
1719
1720 DO ib=nbf,nbl
1722
1723
1724 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
1726 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
1731 icell = 0
1733
1735 DO ic=1,numsecnd
1736 icellv =
brick_list(nin,ib)%SecndList%ICELLv(ic)
1741
1742 psubvolv(1:9) =>
brick_list(nin,ibv)%POLY(1:9)
1743 volv = psubvolv(icellv)%Vnew
1744
1746 enddo
1747
1748 IF(dt1==zero)THEN
1749
1750 mtn_ = iparg(1,ngb(ib))
1751 IF(mtn_==51)THEN
1752 llt_ = iparg(2,ngb(ib))
1753
1754
1755
1756 DO itrimat=1,trimat
1757 ipos = 1
1758 k1 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos
1759 k = k1 * llt_
1760 vfrac(itrimat) = mbuf%VAR(k+idlocb(ib))
1761 ipos = 11
1762 k1 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
1763 k = k1 * llt_
1764 var =
brick_list(nin,ib)%Vnew_SCell*vfrac(itrimat)
1765 mbuf%VAR(k+idlocb(ib)) = var
1766 enddo
1767 endif
1768 endif
1769 enddo
1770
1771
1772
1773
1774
1775
1776
1777 nbl1 = nbl
1778 IF(dt1==zero)nbl1 = 0
1780 if(itask==0)
allocate(tmp22array(7,
nb))
1782 tmp22array(1:7,nbf:nbl1)=zero
1783 endif
1784 DO ib=nbf,nbl1
1786 ncell = nbcut
1787 icell = 0
1788 gbuf => elbuf_tab(ngb(ib))%GBUF
1789
1790 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
1791 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
1793 vol = zero
1794 volv = zero
1796 llt_ = iparg(2,ngb(ib))
1797
1798
1799 DO itar = 1,ntar
1802 IF(j>=10)THEN
1803 j1 = j/10
1804 j2 = mod(j,10)
1805 ibv_i =
brick_list(nin,ib )%Adjacent_Brick(j1,4)
1806 ngv =
brick_list(nin,ibv_i)%Adjacent_Brick(j2,2)
1807 idlocv =
brick_list(nin,ibv_i)%Adjacent_Brick(j2,3)
1808 ibv =
brick_list(nin,ibv_i)%Adjacent_Brick(j2,4)
1809 ELSE
1810 ngv =
brick_list(nin,ib )%Adjacent_Brick(j,2)
1811 idlocv =
brick_list(nin,ib )%Adjacent_Brick(j,3)
1812 ibv =
brick_list(nin,ib )%Adjacent_Brick(j,4)
1813 ENDIF
1814 gbufv => elbuf_tab(ngv)%GBUF
1815 ratio = one/ntar
1817 imergel(itaskv) = 1
1819
1820
1824
1825 tmp22array(1,ib)=cod1
1826 tmp22array(2,ib)=cod2
1827 endif
1828
1829
1830
1831
1832
1833
1834
1835
1837 supercellvol_l(itask,0,ibv) = supercellvol_l(itask,0,ibv) + ratio * vol
1838
1839 eint = ratio * vol *
brick_list(nin,ib)%bakMAT%rhoE
1840 eint_l(itask,ibv) = eint_l
1841
1843
1844
1845
1846
1847 tmp22array(3,ib)=ratio
1848 tmp22array(4,ib)=gbuf%RHO(idlocb(ib))
1849 tmp22array(5,ib)=gbuf%MOM(llt_*(1-1) + idlocb(ib))
1850 tmp22array(6,ib)=vol
1851 endif
1852 rho = ratio * vol *
brick_list(nin,ib)%bakMAT%RHO
1853 rho_l(itask,ibv) = rho_l(itask,ibv) + rho
1854
1855 DO j=1,nv46
1856 sig(j) = ratio * vol *
brick_list(nin,ib)%bakMAT%SIG(j)
1857 sig_l(itask,j,ibv) = sig_l(itask,j,ibv) + sig(j)
1858 ENDDO
1859
1860
1861 mom(1) = ratio * vol *
brick_list(nin,ib)%bakMAT%rhoU(1)
1862 mom_l(1,itask,ibv) = mom_l(1,itask,ibv) + mom(1)
1863 mom(2) = ratio * vol *
brick_list(nin,ib)%bakMAT%rhoU(2)
1864 mom_l(2,itask,ibv) = mom_l(2,itask,ibv) + mom(2)
1865 mom(3) = ratio * vol *
brick_list(nin,ib)%bakMAT%rhoU(3)
1866 mom_l(3,itask,ibv) = mom_l(3,itask,ibv) + mom(3)
1867
1868 mtn_ = iparg(1,ngb(ib))
1869 IF(mtn_==37)THEN
1870
1871
1872
1873
1874
1875 llt_ = iparg(2,ngb(ib))
1876
1877
1878
1879
1880
1881
1882 uvarl(itask,ibv,5) = uvarl(itask,ibv,5)+ratio*vol*
brick_list(nin,ib)%bakMAT%UVAR(5)
1883 uvarl(itask,ibv,4) = uvarl(itask,ibv,4)+ratio*vol*
brick_list(nin,ib)%bakMAT%UVAR(4)
1884 uvarl(itask,ibv,3) = uvarl(itask,ibv,3)+ratio*vol*
brick_list(nin,ib)%bakMAT%UVAR(3)*
brick_list(nin,ib)%bakMAT%UVAR(4)
1885 uvarl(itask,ibv,2) = uvarl(itask,ibv,2)+ratio*vol*
brick_list(nin,ib)%bakMAT%UVAR(2)*
brick_list(nin,ib)%bakMAT%UVAR(5)
1886 uvarl(itask,ibv,1) = uvarl(itask,ibv,1)+ratio*vol*
brick_list(nin,ib)%bakMAT%UVAR(1)
1887 supercellvol_l(itask,1,ibv) = supercellvol_l(itask,1,ibv) + uvarl(itask,ibv,4)
1888 supercellvol_l(itask,2,ibv) = supercellvol_l(itask,2,ibv) + uvarl(itask,ibv,5)
1889
1890 ELSEIF(mtn_==51)THEN
1891 llt_ = iparg(2,ngb(ib))
1892
1893
1894
1895 DO itrimat=1,trimat
1896 ipos = 11
1897 k = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos)
1898 vol51(ib,itrimat) =
brick_list(nin,ib)%bakMAT%UVAR(k)
1899 var = ratio * vol51(ib,itrimat)
1900 IF(var/=zero) supercellvol_l(itask,itrimat,ibv) = supercellvol_l(itask,itrimat,ibv) + var
1901 enddo
1902 uvarl(itask,ibv,1) = uvarl(itask,ibv,1) +
brick_list(nin,ib)%bakMAT%UVAR(1)
1903 uvarl(itask,ibv,2) = uvarl(itask,ibv,2) +
brick_list(nin,ib)%bakMAT%UVAR(2)
1904 uvarl(itask,ibv,3) = uvarl(itask,ibv,3) +
brick_list(nin,ib)%bakMAT%UVAR(3)
1905
1906
1907
1908 DO itrimat=1,trimat
1909 var = ratio*vol51(ib,itrimat)
1910 IF(var==zero)cycle
1911 DO ipos = 1,m51_nvphas
1912 IF(ipos==11)cycle
1913 k = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos)
1915 uvarl(itask,ibv,k) = uvarl(itask,ibv,k) + pvar * var
1916
1917 enddo
1918 enddo
1919 endif
1920
1921 enddo
1922
1923 enddo
1924
1925
1927
1928
1929
1931 if(itask==0)then
1933 cod1=nint(tmp22array(1,ib))
1934 cod2=nint(tmp22array(2,ib))
1935 if(cod1<=0)cycle
1936 write(*,fmt='(A,I8,A,I8)') " MERGING : id=", cod1, " to idv:", cod2
1937 write(*,fmt='(A,E30.16)') " RATIO=", tmp22array(3,ib)
1938 write(*,fmt='(A,E30.16)') " +rho=", tmp22array(4,ib)
1939 write(*,fmt='(A,E30.16)') " +rhoUx=", tmp22array(5,ib)
1940 write(*,fmt='(A,E30.16)') " +Vol=", tmp22array(6,ib)
1941 tmp22array(:,ib) = zero
1942 enddo
1943 endif
1945 endif
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960 DO ib=nbf,nbl1
1962 ncell = nbcut
1963 icell = 0
1964 gbuf => elbuf_tab(ngb(ib))%GBUF
1965 lbuf => elbuf_tab(ngb(ib))%BUFLY(1)%LBUF(1,1,1)
1966
1967 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
1968 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
1970 som = sum(supercellvol_l(0:nthread-1,0,ib))
1971 llt_ = iparg(2,ngb(ib))
1972 IF(mlw==37 .OR. mlw==51)THEN
1973 som_(1) = sum(supercellvol_l(0:nthread-1,1,ib))
1974 som_(2) = sum(supercellvol_l(0:nthread-1,2,ib))
1975 som_(3) = sum(supercellvol_l(0:nthread-1,3,ib))
1976 som_(4) = sum(supercellvol_l(0:nthread-1,4,ib))
1977 ENDIF
1978 IF(som==zero)cycle
1982
1984 delta = zero
1985 ELSE
1986 delta = one
1987 ENDIF
1988
1990
1991
1992
1993
1994
1995 tmp22array(1,ib) = ixs(11,
brick_list(nin,ib)%id)
1996 tmp22array(2,ib) = delta
1997 tmp22array(3,ib) =
brick_list(nin,ib)%bakMAT%RHO
1998 tmp22array(4:6,ib) =
brick_list(nin,ib)%bakMAT%rhoU(1:3)
1999 tmp22array(7,ib) =
brick_list(nin,ib)%Vold_SCell
2000 endif
2001
2002 som = som + delta *
brick_list(nin,ib)%Vold_SCell
2003 supercellvol_l(0:nthread-1,0,ib) = zero
2004
2005 eint = delta*
brick_list(nin,ib)%bakMAT%rhoE*
brick_list(nin,ib)%Vold_SCell +sum(eint_l(0:nthread-1,ib))
2006 eint = eint / som
2007 eint_l(0:nthread-1,ib) = zero
2008
2009 rho = delta*
brick_list(nin,ib)%bakMAT%RHO*
brick_list(nin,ib)%Vold_SCell +sum(rho_l(0:nthread-1,ib))
2010 rho = rho / som
2011 rho_l(0:nthread-1,ib) = zero
2012
2013
2014 mom(1) = delta*
brick_list(nin,ib)%bakMAT%rhoU(1)*
brick_list(nin,ib)%Vold_SCell+sum(mom_l(1,0:nthread-1,ib))
2015 mom(1) = mom(1) / som
2016 mom_l(1,0:nthread-1,ib)= zero
2017
2018 mom(2) = delta*
brick_list(nin,ib)%bakMAT%rhoU(2)*
brick_list(nin,ib)%Vold_SCell+sum(mom_l(2,0:nthread-1,ib))
2019 mom(2) = mom(2) / som
2020 mom_l(2,0:nthread-1,ib)= zero
2021
2022 mom(3) = delta*
brick_list(nin,ib)%bakMAT%rhoU(3)*
brick_list(nin,ib)%Vold_SCell+sum(mom_l(3,0:nthread-1,ib))
2023 mom(3) = mom(3) / som
2024 mom_l(3,0:nthread-1,ib)= zero
2025
2026 DO j=1,nv46
2027 sig(j) = delta*
brick_list(nin,ib)%bakMAT%SIG(j)*
brick_list(nin,ib)%Vold_SCell+sum(sig_l(0:nthread-1,j,ib))
2028 sig(j) = sig(j) / som
2029 sig_l(0:nthread-1,j,ib)= zero
2030 ENDDO
2031
2032 gbuf%EINT(idloc) = eint
2037
2038
2039 DO j=1,nv46
2040 gbuf%SIG(llt_*(j-1)+idloc) = sig(j)
2041 ENDDO
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051 mtn_ = iparg(1,ngb(ib))
2052 IF(mtn_==37)THEN
2053
2054
2055
2056
2057
2058 llt_ = iparg(2,ngb(ib))
2059
2062
2063
2064 uvar(5) = delta*
brick_list(nin,ib)%bakMAT%UVAR(5)*
brick_list(nin,ib)%Vold_SCell + sum(uvarl(0:nthread-1,ib,5))
2065 uvar(4) = delta*
brick_list(nin,ib)%bakMAT%UVAR(4)*
brick_list(nin,ib)%Vold_SCell + sum(uvarl(0:nthread-1,ib,4))
2067 uvar(3) = uvar(3) + sum(uvarl(0:nthread-1,ib,3))
2069 uvar(2) = uvar(2) + sum(uvarl(0:nthread-1,ib,2))
2070 uvar(1) = delta*
brick_list(nin,ib)%bakMAT%UVAR(1)*
brick_list(nin,ib)%Vold_SCell + sum(uvarl(0:nthread-1,ib,1))
2071 uvarl(0:nthread-1,ib,1:5) = zero
2072
2073
2074
2075
2076
2077
2078
2079
2080 mbuf%VAR((0*llt_ + idloc)) = uvar(1) / som !som=vol
2081 IF(som_(2)>em20)THEN
2082 mbuf%VAR((1*llt_ + idloc)) = uvar(2) / som_(2)
2083 mbuf%VAR((4*llt_ + idloc)) = uvar(5) / som
2084 ENDIF
2085 IF(som_(1)>em20)THEN
2086 mbuf%VAR((2*llt_ + idloc)) = uvar(3) / som_(1)
2087 mbuf%VAR((3*llt_ + idloc)) = uvar(4) / som
2088 ENDIF
2089 supercellvol_l(0:nthread-1,1:4,ib) = zero
2090
2091
2092
2094 idloc = idlocb(ib)
2095 ng = ngb(ib)
2096 vol = som
2098 1 elbuf_tab, ixs, bufmat, iparg, ipm,
2099 2 idloc , ng , brickid, vol
2100 . )
2101
2102
2103
2104 ELSEIF(mtn_==51)THEN
2105 llt_ = iparg(2,ngb(ib))
2106 uvar(1) = delta*
brick_list(nin,ib)%bakMAT%UVAR(1) + sum(uvarl(0:nthread-1,ib,1))
2107 uvar(2) = delta*
brick_list(nin,ib)%bakMAT%UVAR(2) + sum(uvarl(0:nthread-1,ib,2))
2108 uvar(3) = delta*
brick_list(nin,ib)%bakMAT%UVAR(3) + sum(uvarl(0:nthread-1,ib,3))
2109 uvarl(0:nthread-1,ib,1:3) = zero
2110 mbuf%VAR((0*llt_ + idloc))= uvar(1) / som
2111 mbuf%VAR((1*llt_ + idloc))= uvar(2) / som
2112 mbuf%VAR((2*llt_ + idloc))= uvar(3) / som
2113 DO itrimat=1,trimat
2114 somi = sum(supercellvol_l(0:nthread-1,itrimat,ib))
2115 supercellvol_l(0:nthread-1,itrimat,ib) = zero
2116 ipos = 11
2117 k = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos)
2118 somi = somi + delta*
brick_list(nin,ib)%bakMAT%UVAR(k)
2119 vol51(ib,itrimat) =
brick_list(nin,ib)%bakMAT%UVAR(k)
2120 uvar(:) = zero
2121 IF(somi>zero)THEN
2122 DO ipos=1,m51_nvphas
2123 IF(ipos==11)THEN
2124 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2125 k = k1 * llt_
2126 mbuf%VAR(k+idlocb(ib)) = somi
2127 cycle
2128 ELSEIF(ipos==1)THEN
2129 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2130 k = k1 * llt_
2131 mbuf%VAR(k+idlocb(ib)) = somi / som
2132 cycle
2133 ENDIF
2134 k = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos)
2135 k1 = (k-1)*llt_
2136 pvar => mbuf%VAR(k1+idlocb(ib))
2137 uvar(k) = sum(uvarl(0:nthread-1,ib,k)) + pvar * vol51(ib,itrimat) * delta
2138 uvarl(0:nthread-1,ib,k) = zero
2139 uvar(k) = uvar(k) / somi
2140 IF(ipos/=1)pvar = uvar(k)
2141 enddo
2142 ELSE
2143
2144 ipos = 1
2145 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2146 k = k1 * llt_
2147 mbuf%VAR(k+idlocb(ib)) = zero
2148 ipos = 11
2149 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2150 k = k1 * llt_
2151 mbuf%VAR(k+idlocb(ib)) = zero
2152 endif
2153 enddo
2154
2155 endif
2156
2158
2159
2160 enddo
2161
2162
2163
2164
2167 if(itask==0)then
2168 if(dt1>zero)then
2170 if (tmp22array(1,ib)==zero )cycle
2171 write(*,fmt='(A,E30.16)') " TARGET=", nint(tmp22array(1,ib))
2172 write(*,fmt='(A,E30.16)') " DELTA=", tmp22array(2,ib)
2173 write(*,fmt='(A,E30.16)') " rho=", tmp22array(3,ib)
2174 write(*,fmt='(A,3E30.16)') " +rhoUx=", tmp22array(4,ib)
2175 write(*,fmt='(A,E30.16)') " +Vol=", tmp22array(5,ib)
2176 enddo
2177 endif
2178
2179 deallocate(tmp22array)
2180 endif
2181 endif
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191 nbl1 = nbl
2192 IF(dt1==zero)nbl1 = 0
2193 origin_data(:,:,:) = 0
2194 norigin(nbf:nbl) = 0
2195 DO ib=nbf,nbl1
2197 ncell = nbcut
2198 icell = 0
2200 gbuf => elbuf_tab(ngb(ib))%GBUF
2201 pnodwasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
2202 pwherewasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
2204 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
2205 ntag = 0
2206 mtn_ = iparg(1,ngb(ib))
2207 newmnod(1:8) = 0
2208 itag(:) = 0
2209 IF(mcell == 0)cycle
2211
2212
2213 DO k=1,mnod
2214 inod =
brick_list(nin,ib)%POLY(mcell)%ListNodID(k)
2215 IF(pnodwasmain(inod)%NodWasMain==1)cycle
2216
2217 newmnod(inod) = 1
2218 ENDDO
2219
2220
2221
2222 vol_m =
brick_list(nin,ib)%secndlist%VOL_unmerged
2224 var = vol_m / uncutvol
2225
2226
2227!not correct with sharp edges
2228
2229 IF(mnod==0) cycle
2231
2232
2233
2234 inod_w_old =
brick_list(nin,ib)%OldMainStrongNode
2235
2236 IF(inod_w_old<=0)cycle
2237 IF(
brick_list(nin,ib)%NODE(inod_w_old)%WhichCell == mcell) idemerge = 0
2238
2239
2240 IF( idemerge==1 ) THEN
2241
2242
2243
2244 DO k=1,mnod
2245 inod =
brick_list(nin,ib)%POLY(mcell)%ListNodID(k)
2246 j = pwherewasmain(inod)%WhereWasMain
2247 IF(j==0)cycle
2248 IF(itag(j)==1)cycle
2249 itag(j) = 1
2250
2251
2252 IF(j>=10)THEN
2253 j1 = j/10
2254 j2 = mod(j,10)
2255 ibv_i =
brick_list(nin,ib )%Adjacent_Brick(j1,4)
2256 ibv =
brick_list(nin,ibv_i)%Adjacent_Brick(j2,4)
2257 ELSE
2258 ibv =
brick_list(nin,ib )%Adjacent_Brick(j,4)
2259 ENDIF
2261 IF(ntar == 0)THEN
2262 ntag = ntag + 1
2263 origin_data(ib,ntag,1) = ibv
2264 origin_data(ib,ntag,2) = j
2265 origin_data(ib,ntag,3) = ibv
2266 ELSE
2267 DO itar=1,ntar
2268 ntag = ntag + 1
2269 origin_data(ib,ntag,1) =
brick_list(nin,ibv)%MergeTarget(3,itar)
2270 origin_data(ib,ntag,2) = j
2271 origin_data(ib,ntag,3) = ibv
2272 ENDDO
2273 ENDIF
2274 ENDDO
2275 norigin(ib) = ntag
2276 IF(ntag==0)THEN
2277 print *, "**error : inter22, topology issue."
2278 ENDIF
2279 ENDIF
2280 enddo
2281
2282
2284
2285
2286
2287
2288
2289
2290
2291
2292 nbl1 = nbl
2293 IF(dt1==zero)nbl1 = 0
2294
2296 if(itask==0)
ALLOCATE (tmp22array(8,
nb))
2299 tmp22array(1:8,nbf:nbl1)=zero
2300 endif
2301
2302
2303 DO ib=nbf,nbl1
2304 IF(norigin(ib)==0)cycle
2306 IF(nbcut==0)cycle
2307 ncell = nbcut
2308 icell = 0
2310 gbuf => elbuf_tab(ngb(ib))%GBUF
2311 lbuf => elbuf_tab(ngb(ib))%BUFLY(1)%LBUF(1,1,1)
2312
2313 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:3)
2314 pnodwasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
2315 pwherewasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
2319 mtn_ = iparg(1,ngb(ib))
2320 llt_ = iparg(2,ngb(ib))
2321 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
2322 ntag = 0
2323 volorig(1:24) = zero
2324 volcell = zero
2325 volcell51(:) = zero
2326 volsecnd51(:) = zero
2327 vol = zero
2328 rho = zero
2329 eint = zero
2330 sig(1:6) = zero
2331 mom(1:3) = zero
2332 ssp = zero
2333 uvar(:) = zero
2334 rho_adv = zero
2335 eint_adv = zero
2336 sig_adv(1:6) = zero
2337 mom_adv(1:3) = zero
2338 uvar_adv(:) = zero
2339
2340
2341
2342
2344
2345
2346
2348 rho = volcell* gbuf%RHO(idloc)
2349 eint = volcell* gbuf%EINT(idloc)
2350 mom(1) = volcell* gbuf%MOM(llt_*(1-1) + idloc)
2351 mom(2) = volcell* gbuf%MOM(llt_*(2-1) + idloc)
2352 mom(3) = volcell* gbuf%MOM(llt_*(3-1) + idloc)
2353 sig(1) = volcell* gbuf%SIG(llt_*(1-1)+idloc)
2354 sig(2) = volcell* gbuf%SIG(llt_*(2-1)+idloc)
2355 sig(3) = volcell* gbuf%SIG(llt_*(3-1)+idloc)
2356 sig(4) = volcell* gbuf%SIG(llt_*(4-1)+idloc)
2357 sig(5) = volcell* gbuf%SIG(llt_*(5-1)+idloc)
2358 sig(6) = volcell* gbuf%SIG(llt_*(6-1)+idloc)
2359 ssp = volcell* lbuf%SSP(idloc)
2360 volcell = zero
2361 IF(mtn_==37)THEN
2362 uvar(5) = volcell*mbuf%VAR(((5-1)*llt_ + idloc))
2363 uvar(4) = volcell*mbuf%VAR(((4-1)*llt_ + idloc))
2364 uvar(3) = volcell*mbuf%VAR(((3-1)*llt_ + idloc))*mbuf%VAR(((4-1)*llt_ + idloc))
2365 uvar(2) = volcell*mbuf%VAR(((2-1)*llt_ + idloc))*mbuf%VAR(((5-1)*llt_ + idloc))
2366 uvar(1) = volcell*mbuf%VAR(((1-1)*llt_ + idloc))
2367 ELSEIF(mtn_==51)THEN
2368 ipos = 11
2369 volsecnd51(1) = mbuf%VAR(idloc + ((m51_n0phas + (1-1)*m51_nvphas )+ipos-1)*llt_)
2370 volsecnd51(2) = mbuf%VAR(idloc + ((m51_n0phas + (2-1)*m51_nvphas )+ipos-1)*llt_)
2371 volsecnd51(3) = mbuf%VAR(idloc + ((m51_n0phas + (3-1)*m51_nvphas )+ipos-1)*llt_)
2372 volsecnd51(4) = mbuf%VAR(idloc + ((m51_n0phas + (4-1)*m51_nvphas )+ipos-1)*llt_)
2373 DO itrimat=1,trimat
2374 DO ipos = 1 , m51_nvphas
2375 IF(ipos==11) cycle
2376 k = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2377 k1 = k * llt_
2378 uvar(k+1) = volsecnd51(itrimat) * mbuf%VAR(k1+idloc)
2379 enddo
2380 enddo
2381 volsecnd51(1:4) = zero
2382 ENDIF
2383 ENDIF
2384
2385
2386 vel_m(1) = gbuf%MOM(3*(idloc-1)+1) / gbuf%RHO(idloc)
2387 vel_m(2) = gbuf%MOM(3*(idloc-1)+2) / gbuf%RHO(idloc)
2388 vel_m(3) = gbuf%MOM(3*(idloc-1)+3) / gbuf%RHO(idloc)
2389
2391
2392
2393
2394 DO iorig = 1, norigin(ib)
2395
2396 ibm = origin_data(ib,iorig,1)
2397 ibo = origin_data(ib,iorig,3)
2401 j = origin_data(ib,iorig,2)
2402 IF(ibm==ib)cycle
2403 IF(j>=10)THEN
2404 j1 = j/10
2405 j2 = mod(j,10)
2406 ibv =
brick_list(nin,ib )%Adjacent_Brick(j1,4)
2407 jv =
brick_list(nin,ibv)%Adjacent_Brick(j2,5)
2408 ELSE
2410 ENDIF
2411
2412 numsecnd = old_secndlist(nin,ibo)%Num
2413
2414
2415
2416 DO k=1,numsecnd
2417 IF (old_secndlist(nin,ibo)%IBv(k) /= ib)cycle
2418 IF (old_secndlist(nin,ibo)%FM(k) /= jv)cycle
2419
2420
2424#include "lockon.inc"
2425 if(ibm==ibo)then
2426
2427
2428
2430 tmp22array(1,
in22)=cod1
2432 tmp22array(3,
in22)=0
2433
2434 else
2435
2437
2439 tmp22array(1,
in22)=cod1
2442
2443 endif
2444
2445
2446
2448
2449 tmp22array(4,
in22)= zero
2451 tmp22array(6,
in22)= zero
2453 tmp22array(8,
in22)=tmp22array(8,
in22)+1
2454#include "lockoff.inc"
2455 endif
2456
2457
2458
2459
2460
2461
2462
2463 volsecnd = old_secndlist(nin,ibo)%VOL(k)
2464
2465 volcell = volcell + volsecnd
2466
2467 gbuf => elbuf_tab(ngv)%GBUF
2468 lbuf => elbuf_tab(ngv)%BUFLY(1)%LBUF(1,1,1)
2469 llt_v = iparg(2,ngv)
2470
2471 surf_s = old_secndlist(nin,ibo)%SURF_V(k)
2472 fv = old_secndlist(nin,ibo)%FV(k)
2473 IF(fv<10)THEN
2475 ELSE
2476
2477
2478
2479
2480 zm(1:3) =
brick_list(nin,ibo)%SCellCenter(1:3)
2481 zs(1:3) =
brick_list(nin,ib)%POLY(mcell)%CellCenter(1:3)
2482 norm_s(1) = zm(1)-zs(1)
2483 norm_s(2) = zm(2)-zs(2)
2484 norm_s(3) = zm(3)-zs(3)
2485 norm = sqrt(norm_s(1)*norm_s(1)+norm_s(2)*norm_s(2)+norm_s(3)*norm_s(3))
2486 norm_s(1) = norm_s(1) /
norm
2487 norm_s(2) = norm_s(2) /
norm
2488 norm_s(3) = norm_s(3) /
norm
2489 ENDIF
2490
2491
2492
2493
2494
2495 adv = zero
2496 IF(iadv==1)THEN
2497
2498 vm = one
2499 adv = -half* half* dt1*vm*surf_s* (vel_m(1)*norm_s(1)+vel_m(2)*norm_s(2)+vel_m(3)*norm_s(3))
2500 rho_adv = rho_adv + adv * gbuf%RHO(idlocv)
2501 eint_adv = eint + adv * gbuf%EINT(idlocv)
2502 mom_adv(1) = mom_adv(1) + adv * gbuf%MOM(3*(idlocv-1)+1)
2503 mom_adv(2) = mom_adv(2) + adv * gbuf%MOM(3*(idlocv-1)+2)
2504 mom_adv(3) = mom_adv(3) + adv * gbuf%MOM(3*(idlocv-1)+3)
2505 sig_adv(1) = sig_adv(1) + adv * gbuf%SIG(llt_v*(1-1)+idlocv)
2506 sig_adv(2) = sig_adv(2) + adv * gbuf%SIG(llt_v
2507 sig_adv(3) = sig_adv(3) + adv * gbuf%SIG
2508 sig_adv(4) = sig_adv(4) + adv * gbuf%SIG(llt_v*(4-1)+idlocv)
2509 sig_adv(5) = sig_adv(5) + adv * gbuf%SIG(llt_v*(5-1)+idlocv)
2510 sig_adv(6) = sig_adv(6) + adv * gbuf%SIG(llt_v*(6-1)+idlocv)
2511 ENDIF
2512
2513
2514
2515 rho = rho + volsecnd * gbuf%RHO(idlocv)
2516 eint = eint + volsecnd * gbuf%EINT(idlocv)
2517 mom(1) = mom(1) + volsecnd * gbuf%MOM(llt_v*(1-1)+idlocv)
2518 mom(2) = mom(2) + volsecnd * gbuf%MOM(llt_v*(2-1)+idlocv)
2519 mom(3) = mom(3) + volsecnd * gbuf%MOM(llt_v*(3-1)+idlocv)
2520 sig(1) = sig(1) + volsecnd * gbuf%SIG(llt_v*(1-1)+idlocv)
2521 sig(2) = sig(2) + volsecnd * gbuf%SIG(llt_v*(2-1)+idlocv)
2522 sig(3) = sig(3) + volsecnd * gbuf%SIG(llt_v*(3-1)+idlocv)
2523 sig(4) = sig(4) + volsecnd * gbuf%SIG(llt_v*(4-1)+idlocv)
2524 sig(5) = sig(5) + volsecnd * gbuf%SIG(llt_v*(5-1)+idlocv)
2525 sig(6) = sig(6) + volsecnd * gbuf%SIG(llt_v*(6-1)+idlocv)
2526 ssp = ssp + volsecnd * lbuf%SSP(idlocv)
2527
2528
2529
2530 IF(mtn_==37)THEN
2531
2532
2533
2534
2535
2536 mbufv => elbuf_tab(ngv)%BUFLY(1)%MAT(1,1,1)
2537 llt_v = iparg(2,ngv)
2538 uvar(5) = uvar(5) +volsecnd*mbufv%VAR(((5-1)*llt_v + idlocv))
2539 uvar(4) = uvar(4) +volsecnd*mbufv%VAR(((4-1)*llt_v + idlocv))
2540 uvar(3) = uvar(3) +volsecnd*mbufv%VAR(((3-1)*llt_v + idlocv))*mbufv%VAR(((4-1)*llt_v + idlocv))
2541 uvar(2) = uvar(2) +volsecnd*mbufv%VAR(((2-1)*llt_v + idlocv))*mbufv%VAR(((5-1)*llt_v + idlocv))
2542 uvar(1) = uvar(1) +volsecnd*mbufv%VAR(((1-1)*llt_v + idlocv))
2543 uvar_adv(1) = uvar_adv(1) +adv * mbufv%VAR(((1-1)*llt_v + idlocv))
2544
2545 ELSEIF(mtn_==51)THEN
2546 mbufv => elbuf_tab(ngv)%BUFLY(1)%MAT(1,1,1)
2547 llt_ = iparg(2,ngb(ib))
2548 llt_v = iparg(2,ngv)
2549
2550
2551
2552 DO itrimat=1,trimat
2553
2554 ipos = 1
2555 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2556 kv = k1 * llt_v
2557 vfrac(itrimat) = mbufv%VAR(kv+idlocv)
2558 volsecnd51(itrimat) = vfrac(itrimat) * volsecnd
2559 volcell51(itrimat) = volcell51(itrimat) + volsecnd51(itrimat)
2560 enddo
2561 uvar(1) = uvar(1) + mbufv%VAR((0*llt_v + idlocv)) * volsecnd
2562 uvar(2) = uvar(2) + mbufv%VAR((1*llt_v + idlocv)) * volsecnd
2563 uvar(3) = uvar(3) + mbufv%VAR((2*llt_v + idlocv)) * volsecnd
2564 uvar_adv(1) = uvar_adv(1) + mbufv%VAR((0*llt_v + idlocv)) * adv
2565 uvar_adv(2) = uvar_adv(2) + mbufv%VAR((1*llt_v + idlocv)) * adv
2566 uvar_adv(3) = uvar_adv(3) + mbufv%VAR((2*llt_v + idlocv)) * adv
2567 IF(iadv==1)print *, "to do compute/get vfrac on face"
2568 DO itrimat=1,trimat
2569 DO ipos = 1 , m51_nvphas
2570 ko = ((m51_n0phas + (itrimat-1)*m51_nvphas ))
2571 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2572 kv = k1 * llt_v
2573 IF(ipos==11)THEN
2574 uvar(k1+1) = uvar(k1+1) + volsecnd51(itrimat)
2575 ELSE
2576 uvar(k1+1) = uvar(k1+1) + volsecnd51(itrimat) * mbufv%VAR(kv+idlocv)
2577 uvar_adv(k1+1) = uvar_adv(k1+1) + adv * mbufv%VAR(kv+idlocv)
2578 IF(iadv==1)print *, "to do compute/get vfrac on face"
2579 ENDIF
2580 enddo
2581 enddo
2582 endif
2583
2584#include "lockon.inc"
2585
2586
2587
2589
2590 IF(mtn_==51)THEN
2591 DO itrimat=1,trimat
2592
2593 ipos = 11
2594 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2595 kv = k1 * llt_v
2596 mbufv%VAR(kv+idlocv) = mbufv%VAR(kv+idlocv) - volsecnd51(itrimat)
2597 enddo
2598 ENDIF
2599#include "lockoff.inc"
2600 enddo
2601 enddo
2602
2603 IF(volcell==zero)cycle
2604
2605
2606
2607
2608 rho = (rho +iadv*rho_adv )/ volcell
2609 eint = (eint +iadv*eint_adv )/ volcell
2610 mom(1) = (mom(1) +iadv*mom_adv(1))/ volcell
2611 mom(2) = (mom(2) +iadv*mom_adv(2))/ volcell
2612 mom(3) = (mom(3) +iadv*mom_adv(3))/ volcell
2613 sig(:) = (sig(:) +iadv*sig_adv(:))/ volcell
2614 ssp = ssp / volcell
2615
2616 IF(mtn_==37)THEN
2617 uvar(1) = (uvar(1)+ iadv*uvar_adv(1)) / volcell
2618 uvar(2) = uvar(2) / volcell
2619 uvar(3) = uvar(3) / volcell
2620 uvar(4) = uvar(4) / volcell
2621 uvar(5) = uvar(5) / volcell
2622
2623 ELSEIF(mtn_==51)THEN
2624 uvar(1) = (uvar(1) + iadv*uvar_adv(1)) / volcell
2625 uvar(2) = (uvar(2) + iadv*uvar_adv(2)) / volcell
2626 uvar(3) = (uvar(3) + iadv*uvar_adv(3)) / volcell
2627 DO itrimat=1,trimat
2628 ko = m51_n0phas + (itrimat-1)*m51_nvphas
2629 IF(volcell51(itrimat)/=zero)THEN
2630 uvar(ko+01:ko+10) = (uvar(ko+01:ko+10) + iadv*uvar_adv(ko+01:ko+10)) / volcell51(itrimat)
2631 uvar(ko+12:ko+m51_nvphas) = (uvar(ko+12:ko+m51_nvphas) + iadv*uvar_adv(ko+12:ko+m51_nvphas)) / volcell51(itrimat)
2632 ELSE
2633 uvar(ko+01) = zero
2634 uvar(ko+11) = zero
2635 ENDIF
2636 ENDDO
2637 endif
2638
2639
2640
2641
2642
2645 llt_ = iparg(2,ng)
2646 gbuf => elbuf_tab(ng)%GBUF
2647 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
2648 gbuf%RHO(idloc) = rho
2649 gbuf%EINT(idloc)
2650 gbuf%MOM(llt_*(1-1)+idloc) = mom(1)
2651 gbuf%MOM(llt_*(2-1)+idloc) = mom(2)
2652 gbuf%MOM(llt_*(3-1)+idloc) = mom(3)
2653 gbuf%SIG(llt_*(1-1)+idloc) = sig(1)
2654 gbuf%SIG(llt_*(2-1)+idloc) = sig(2)
2655 gbuf%SIG(llt_*(3-1)+idloc) = sig(3)
2656 gbuf%SIG(llt_*(4-1)+idloc) = sig(4)
2657 gbuf%SIG(llt_*(5-1)+idloc) = sig(5)
2658 gbuf%SIG(llt_*(6-1)+idloc) = sig(6)
2659 lbuf%SSP(idloc) = ssp
2666
2667
2668 IF(mtn_==37)THEN
2669 llt_ = iparg(2,ngb(ib))
2670 idloc = idlocb(ib)
2671 mbuf => elbuf_tab(ngb(ib))%BUFLY
2672 mt = ixs(1,brickid)
2673 iadbuf = ipm(7,mt)
2674 rho10 = bufmat(iadbuf-1+11)
2675 rho20 = bufmat(iadbuf-1+12)
2676
2677
2678
2679
2680
2681
2682 IF(uvar(3) == zero) uvar(3) = rho10
2683 IF(uvar(2) == zero) uvar(2) = rho20
2684 mbuf%VAR((5-1)*llt_+idloc) = uvar(5)
2685 mbuf%VAR((4-1)*llt_+idloc) = uvar(4)
2686 mbuf%VAR((3-1)*llt_+idloc) = uvar(3)
2687 mbuf%VAR((2-1)*llt_+idloc) = uvar(2)
2688 mbuf%VAR((1-1)*llt_+idloc) = uvar(1)
2689 ELSEIF(mtn_==51)THEN
2690 llt_ = iparg(2,ngb(ib))
2691 idloc = idlocb(ib)
2692 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
2693 DO itrimat=1,trimat
2694 IF(volcell51(itrimat)/=zero)THEN
2695
2696 DO ipos=1,m51_nvphas
2697 k0 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2698 k1 = k0 * llt_
2699 mbuf%VAR(k1+idloc) = uvar(m51_n0phas+(itrimat-1)*m51_nvphas+ipos)
2700 ENDDO
2701
2702 ipos=1
2703 k0 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2704 k1 = k0 * llt_
2705 mbuf%VAR(k1+idloc) = volcell51(itrimat)/volcell
2706 ipos=11
2707 k0 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2708 k1 = k0 * llt_
2709 mbuf%VAR(k1+idloc) = volcell51(itrimat)
2710 ELSE
2711 ipos=1
2712 k0 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2713 k1 = k0 * llt_
2714 mbuf%VAR(k1+idloc) = zero
2715 ipos=11
2716 k0 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2717 k1 = k0 * llt_
2718 mbuf%VAR(k1+idloc) = zero
2719 ENDIF
2720 ENDDO
2721 endif
2722
2723
2724
2725
2726
2728
2729
2731 idloc = idlocb(ib)
2732 ng = ngb(ib)
2733 vol = volcell
2734 mtn_ = iparg(1,ng)
2735 IF(mtn_==37)THEN
2737 1 elbuf_tab, ixs, bufmat, iparg, ipm,
2738 2 idloc , ng , brickid, vol
2739 . )
2740 ENDIF
2741
2742
2743
2744
2745
2746
2747
2748
2749 IF(iadv==1)THEN
2752 gbuf => elbuf_tab(ng)%GBUF
2753 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
2754 gbuf%RHO(idloc) = gbuf%RHO(idloc) - rho_adv/volcell
2755 gbuf%EINT(idloc) = gbuf%EINT(idloc) - eint_adv/volcell
2756 gbuf%MOM(3*(idloc-1) +1) = gbuf%MOM(3*(idloc-1) +1) - mom_adv(1)/volcell
2757 gbuf%MOM(3*(idloc-1) +2) = gbuf%MOM(3*(idloc-1) +2) - mom_adv(2)/volcell
2758 gbuf%MOM(3*(idloc-1) +3) = gbuf%MOM(3*(idloc-1) +3) - mom_adv(3)/volcell
2759 gbuf%SIG(llt_*(1-1) +idloc) = gbuf%SIG(llt_*(1-1) +idloc) - sig_adv(1)/volcell
2760 gbuf%SIG(llt_*(2-1) +idloc) = gbuf%SIG(llt_*(2-1) +idloc) - sig_adv(2)/volcell
2761 gbuf%SIG(llt_*(3-1) +idloc) = gbuf%SIG(llt_*(3-1) +idloc) - sig_adv(3)/volcell
2762 gbuf%SIG(llt_*(4-1) +idloc) = gbuf%SIG(llt_*(4-1) +idloc) - sig_adv(4)/volcell
2763 gbuf%SIG(llt_*(5-1) +idloc) = gbuf%SIG(llt_*(5-1) +idloc) - sig_adv(5)/volcell
2764 gbuf%SIG(llt_*(6-1) +idloc) = gbuf%SIG(llt_*(6-1) +idloc) - sig_adv(6)/volcell
2765 mtn_ = iparg(1,ng)
2766 IF(mtn_==37)THEN
2767 llt_ = iparg(2,ng)
2768 idloc = idlocb(ibm)
2769 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
2771 mt = ixs(1,brickid)
2772 iadbuf = ipm(7,mt)
2773 rho10 = bufmat(iadbuf-1+11)
2774 rho20 = bufmat(iadbuf-1+12)
2775 IF(uvar(3) == zero) uvar(3) = rho10
2776 IF(uvar(2) == zero) uvar(2) = rho20
2777
2778
2779
2780
2781
2782 mbuf%VAR((1-1)*llt_+idloc) = uvar(1) - uvar_adv(1)/volcell
2783
2784
2786 idloc = idlocb(ibm)
2787 ng = ngb(ibm)
2789 mtn_ = iparg(1,ng)
2790 IF(mtn_==37)THEN
2792 1 elbuf_tab, ixs, bufmat, iparg, ipm,
2793 2 idloc , ng , brickid, vol
2794 . )
2795 ENDIF
2796
2797 ELSEIF(mtn_==51)THEN
2798
2799 ENDIF
2800 ENDIF
2801
2802
2803
2804 enddo
2805
2808 if(itask==0 .and. dt1>zero)then
2811 value(ib)=tmp22array(1,ib)
2812 ENDDO
2813 order=0
2814
2816 ib=order(ib2)
2817 cod1=tmp22array(1,ib)
2818 cod2=tmp22array(2,ib)
2819 cod3=tmp22array(3,ib)
2820
2821 if(cod3==0)then
2822 write(*,fmt='(A,I8,A,I8)') "DEMERGING : id=", cod1, " from idv:", cod2
2823 else
2824 write(*,fmt='(A,I8,A,I8,A,I8)') "DEMERGING : id=", cod1, " from idv:", cod2," moved to", cod3
2825 endif
2826 write (*,fmt='(I10,A,F30.16,A,F30.16)') cod1," Vold=", tmp22array(4,ib), " Vnew=", tmp22array(5,ib)
2827 write (*,fmt='(I10,A,F30.16,A,F30.16)') cod2," Vold=", tmp22array(6,ib), " Vnew=", tmp22array(7,ib)
2828 write (*,fmt='(A,F30.16)') " Number of access =", tmp22array(8,ib)
2829 enddo
2830 endif
2832 if(itask==0)then
2833 if(allocated(tmp22array))deallocate(tmp22array)
2834 if(dt1>zero .and. allocated(order) )deallocate(order)
2835 endif
2836 endif
2837
2838
2839
2840
2841
2842
2843
2844
2845 IF(dt1==zero)nbl1 = 0
2846 DO ib=nbf,nbl1
2850
2851 IF( newinbuffer == 1 )THEN
2852
2853 mcell = 1
2856
2857
2858
2862 gbuf => elbuf_tab(ng)%GBUF
2863 brick_list(nin,ib)%Vold_Scell = gbuf%VOL(idloc)
2864
2865
2866
2867
2868
2869 ENDIF
2870 enddo
2871
2872
2873
2874
2876
2877
2878
2879 nbl1 = nbl
2880 IF(dt1==zero)THEN
2881 nbl1 = 0
2882 DO ib=nbf,nbl
2885 ENDDO
2886 ENDIF
2887 DO ib=nbf,nbl1
2891 icell = 0
2892 m(:,:) = zero
2894 mtn_ = iparg(1,ngb(ib))
2895
2896 IF(wascut>0)THEN
2897
2898 DO inod = 1,8
2900 ii =
brick_list(nin,ib)%NODE(inod)%OLD_WhichCell
2901 IF(ii <0) ii = 1
2903 enddo
2904 IF(nbcut>2 .AND. m(9,9)==zero)m(9,9) =
brick_list(nin,ib)%POLY(jj)%Vnew
2905
2906
2907 icell = 9
2908 jj = icell
2909 var = zero
2910 DO ii=1,9
2911 IF(m(ii,jj)>zero)var=var+one
2912 enddo
2913 IF(ncell==0)THEN
2914 ii=maxloc(
brick_list(nin,ib)%POLY(1:9)%OLD_Vnew,1)
2915 DO i=1,9
2916 IF (i==ii) cycle
2917 m(i,jj) = zero
2918 ENDDO
2919 ELSE
2920 IF(var>two )THEN
2921 m(1:8,jj) = zero
2922 ELSEIF(var==two )THEN
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2937 lcond1 = var<var_
2940 lcond2 = var<var_
2941
2942 m(9,9) = zero
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952 ENDIF
2953 endif
2954
2955 ELSEIF(wascut == 0)THEN
2957 m(1:9,1:9) = zero
2958 m(1,mcell) =
brick_list(nin,ib)%POLY(mcell)%Vnew
2959
2960 ENDIF
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975 icell = 0
2976 DO WHILE (icell<=ncell)
2977 icell = icell + 1
2978 IF (icell>ncell .AND. ncell/=0)icell=9
2979 var = zero
2980 var_ = zero
2981 jj = icell
2982 vfrac(1:4) = zero
2983 var_vf(1:4) = zero
2984 vold_phase(1:4) = zero
2986 DO ii=1,9
2987 IF(m(ii,jj)==zero)cycle
2989
2990 var = var + vi *vj / sum(m(ii,:))
2991 ENDDO
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037 enddo
3038 ENDDO
3039
3040
3041
3042
3043
3044
3045
3046 nbl1 = nbl
3047 in = 0
3048 debug_outp2 = .false.
3050 if(itask==0)
ALLOCATE (tmp22array(6,
nb))
3052 tmp22array(1:6,nbf:nbl)=zero
3053 do ib=nbf,nbl
3056 debug_outp2 = .true.
3057 exit
3058 endif
3059 enddo
3060 endif
3061 IF(dt1==zero)nbl1=0
3062 DO ib=nbf,nbl1
3064
3065
3066 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
3068 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
3073 gbuf => elbuf_tab(ngb(ib))%GBUF
3074 lbuf => elbuf_tab(ngb(ib))%BUFLY(1)%LBUF(1,1,1)
3075 icell = 0
3076
3077
3079
3080 DO ic=1,numsecnd
3081 icellv =
brick_list(nin,ib)%SecndList%ICELLv(ic)
3086 ibv = ibv
3091
3092 nnodes =
brick_list(nin,ibv)%POLY(icellv)%NumNOD
3093 j1 = 0
3094 j2 = 0
3095 DO k1=1,nnodes
3096 inod =
brick_list(nin,ibv)%POLY(icellv)%ListNodID(k1)
3097 fv_old =
brick_list(nin,ibv)%NODE(inod)%WhereWasMain
3098 IF (fv_old == 0)cycle
3099
3100 IF (fv_old == fv)cycle
3101
3102
3103 IF(fv_old<=nv46)THEN
3104 ibmo =
brick_list(nin,ibv)%Adjacent_Brick(fv_old,4)
3105 ELSE
3106 j = fv_old
3107 j1 = j/10
3108 j2 = mod(j,10)
3109 ibv =
brick_list(nin,ibv)%Adjacent_Brick(j1,4)
3110 ibmo =
brick_list(nin,ibv)%Adjacent_Brick(j2,4)
3111 ENDIF
3112
3113 ibm = ib
3114 lltm = iparg(2,ngb(ib))
3115
3116 lcycle = .false.
3118 IF(numtarget>=2)print *,
"**inter22 - Warning Multiple targets",ixs(11,
brick_list(nin
3119 DO itarget=1,numtarget
3120 IF (
brick_list(nin,ibmo)%MergeTarget(3,itarget)==ibm)
THEN
3121 lcycle = .true.
3122 EXIT
3123 ENDIF
3124 ibmo =
brick_list(nin,ibmo)%MergeTarget(3,itarget)
3125 print *,
"**inter22 : multiple targets", ixs(11,
brick_list(nin,ibv)%ID), icellv
3126 ENDDO
3127 if(lcycle)cycle
3128 lcycle = .false.
3129
3130
3131
3132 lfound = .false.
3133 numsecnd2 = old_secndlist(nin,ibmo)%Num
3135 llto = iparg(2,ngo)
3136 DO ic2 = 1, numsecnd2
3137
3138 fv2 = old_secndlist(nin,ibmo)%FV(ic2)
3139 icellv2 = old_secndlist(nin,ibmo)%ICELLv(ic2)
3140 ibv2 = old_secndlist(nin,ibmo)%IBv(ic2)
3141
3142 IF(fv2 /= fv_old )cycle
3143
3144
3145
3146
3147 volcell = zero
3148 volsecnd = zero
3149 nnodes2 = old_secndlist(nin,ibmo)%NumNOD_Cell(ic2)
3150 DO k2=1,nnodes2
3151 inod2 = old_secndlist(nin,ibmo)%ListNodID(ic2,k2)
3152 icell2 =
brick_list(nin,ibv2)%NODE(inod2)%WhichCell
3153 ibmcur =
brick_list(nin,ibv2)%POLY(icell2)%WhereIsMain(4)
3154 IF(ibmcur == ib) volsecnd = volsecnd + one/nnodes*
brick_list(nin,ibv2)%POLY(icell2)%Vnew
3155 volcell = volcell + one/nnodes*
brick_list(nin,ibv2)%POLY(icell2)%Vnew
3156 ENDDO
3157 if (volsecnd == zero)cycle
3158
3159
3160
3161
3162 ratio = volsecnd/volcell
3163
3164 volcell = ratio * old_secndlist(nin,ibmo)%VOL(ic2)
3166 gbufo => elbuf_tab(ngb(ibmo))%GBUF
3167
3168
3169 eint = volcell * gbufo%EINT(idlocb(ibmo))
3170 rho = volcell * gbufo%RHO(idlocb(ibmo))
3171 mom(1) = volcell * gbufo%MOM(llto*(1-1) + idlocb(ibmo))
3172 mom(2) = volcell * gbufo%MOM(llto*(2-1) + idlocb(ibmo))
3173 mom(3) = volcell * gbufo%MOM(llto*(3-1) + idlocb(ibmo))
3174 DO j=1,nv46
3175 sig(j) = volcell * gbufo%SIG(llto*(j-1)+idlocb(ibmo))
3176 ENDDO
3177 gbuf%EINT(idlocb(ibm)) = (gbuf%EINT(idlocb(ibm)) * vold + eint) / (vold+volcell)
3178 gbuf%RHO(idlocb(ibm)) = (gbuf%RHO(idlocb(ibm)) * vold + rho) / (vold+volcell)
3179 gbuf%MOM(lltm*(1-1) + idlocb(ibm)) = (gbuf%MOM(lltm*(1-1) + idlocb(ibm)) * vold + mom(1)) / (vold+volcell)
3180 gbuf%MOM(lltm*(2-1) + idlocb(ibm)) = (gbuf%MOM(lltm*(2-1) + idlocb(ibm)) * vold + mom(2)) / (vold+volcell)
3181 gbuf%MOM(lltm*(3-1) + idlocb(ibm)) = (gbuf%MOM(lltm*(3-1) + idlocb(ibm)) * vold + mom(3)) / (vold+volcell)
3186
3187
3188
3189
3190 DO j=1,nv46
3191 gbuf%SIG(lltm*(j-1)+idlocb(ibm)) = (gbuf%SIG(lltm*(j-1)+idlocb(ibm)) * vold + sig(j)) / (vold+volcell
3192 ENDDO
3193
3194 if(debug_outp2)then
3195
3196 in = in + 1
3197 endif
3198
3200
3201
3202
3203
3204 tmp22array(1,ibm)= ixs(11,
brick_list(nin,ib)%id)
3205 tmp22array(2,ibm)= ixs(11,
brick_list(nin,ibmo)%id)
3206 tmp22array(3,ibm)= ixs(11,
brick_list(nin,ibm)%id)
3207 tmp22array(4,ibm)=
brick_list(nin,ibm)%Vold_SCell
3208 tmp22array(5,ibm)=
brick_list(nin,ibm)%Vold_SCell +volcell
3209 tmp22array(6,ibm)= volcell
3210 endif
3211
3212
3214
3215 mtn_ = iparg(1,ngb(ibmo))
3216 volcell51(1:trimat) = zero
3217 IF(mtn_==37)THEN
3218 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
3219 mt = ixs(1,brickid)
3220 iadbuf = ipm(7,mt)
3221 rho10 = bufmat(iadbuf-1+11)
3222 rho20 = bufmat(iadbuf-1+12)
3223
3224
3225
3226
3227
3228 mbuf => elbuf_tab(ngb(ibm))%BUFLY(1)%MAT(1,1,1)
3229 mbufo => elbuf_tab(ngb(ibmo))%BUFLY(1)%MAT(1,1,1)
3230 llt_ = iparg(2,ngb(ibm))
3231 llt_o = iparg(2,ngb(ibmo))
3232
3233
3234 pvar => mbuf%VAR((5-1)*llt_ +idlocb(ibm))
3235 pvaro => mbufo%VAR((5-1)*llt_o+idlocb(ibmo))
3236
3237 pvar = (pvar * vold + volcell * pvaro)/ (vold+volcell)
3238 pvar =
max(pvar,zero)
3239
3240
3241 pvar => mbuf%VAR((4-1)*llt_ +idlocb(ibm))
3242 pvaro => mbufo%VAR((4-1)*llt_o+idlocb(ibmo))
3243
3244 pvar = (pvar * vold + volcell * pvaro)/ (vold+volcell)
3245 pvar =
max(pvar,zero)
3246
3247
3248 pvar => mbuf%VAR((3-1)*llt_ +idlocb(ibm))
3249 pvaro => mbufo%VAR((3-1)*llt_o+idlocb(ibmo))
3250 alp = mbuf%VAR((4-1)*llt_ +idlocb(ibm))
3251 alpo = mbufo%VAR((4-1)*llt_o+idlocb(ibmo))
3252
3253 pvar = (pvar*alp*vold+volcell*pvaro*alpo)
3254 IF(pvar>zero)pvar=pvar/(alp*vold+alpo*volcell)
3255 pvar =
max(pvar,zero)
3256
3257 IF( pvar == zero) pvar = rho10
3258
3259
3260 pvar => mbuf%VAR((2-1)*llt_ +idlocb(ibm))
3261 pvaro => mbufo%VAR((2-1)*llt_o+idlocb(ibmo))
3262 alp = mbuf%VAR((5-1)*llt_ +idlocb(ibm))
3263 alpo = mbufo%VAR((5-1)*llt_o+idlocb(ibmo))
3264
3265 pvar = (pvar*alp*vold+volcell*pvaro*alpo)
3266 IF(pvar>zero)pvar=pvar/(alp*vold+alpo*volcell)
3267 pvar =
max(pvar,zero)
3268
3269 IF( pvar == zero) pvar = rho20
3270
3271
3272 pvar => mbuf%VAR((1-1)*llt_ +idlocb(ibm))
3273 pvaro => mbufo%VAR((1-1)*llt_o+idlocb(ibmo))
3274
3275 pvar = (pvar * vold + volcell * pvaro)/ (vold+volcell)
3276 pvar =
max(pvar,zero)
3277
3278
3279
3280
3281
3282
3284 idloc = idlocb(ibm)
3285 ng = ngb(ibm)
3286 vol = vold+volcell
3288 1 elbuf_tab, ixs, bufmat, iparg, ipm,
3289 2 idloc , ng , brickid, vol
3290 . )
3291
3292
3293 ELSEIF(mtn_==51)THEN
3294 mbuf => elbuf_tab(ngb(ibm))%BUFLY(1)%MAT(1,1,1)
3295 llt_ = iparg(2,ngb(ibm))
3296 mbufo => elbuf_tab(ngb(ibmo))%BUFLY(1)%MAT(1,1,1)
3297 llt_o = iparg(2,ngb(ibmo))
3298
3299 DO itrimat=1,trimat
3300
3301 ipos = 1
3302 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
3303 k = k0 * llt_o
3304 vfrac(itrimat) = mbufo%VAR(k+idlocb(ibmo))
3305 enddo
3306
3307 DO itrimat=1,trimat
3308 ipos = 11
3309 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
3310 k = k0 * llt_
3311 volcell51(itrimat) = volcell * vfrac(itrimat)
3312 mbuf%VAR(k+idlocb(ibm)) = mbuf%VAR(k+idlocb(ibm)) + volcell51(itrimat)
3313 enddo
3314
3315 DO itrimat=1,trimat
3316
3317 ipos = 1
3318 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
3319 k = k0 * llt_
3320 vfrac(itrimat) = mbuf%VAR(k+idlocb(ibm))
3321 IF(volcell51(itrimat)<=zero)cycle
3322 DO ipos = 1,m51_nvphas
3323 IF(ipos==11)cycle
3324 k2 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
3325 k = llt_ * k2
3326 ko = llt_o * k2
3327 pvar => mbuf%VAR(k+idlocb(ibm))
3328 pvar = ( pvar * vfrac(itrimat)*vold + volcell51(itrimat)*mbufo%VAR(ko+idlocb(ibmo)) )
3329 pvar = pvar / (vfrac(itrimat)*vold + volcell51(itrimat))
3330 enddo
3331 enddo
3332
3333 endif
3334
3335
3336 vold_l(itask,0,ibmo) = vold_l(itask,0,ibmo) + volcell
3337 vold_l(itask,1:trimat,ibmo) = vold_l(itask,1:trimat,ibmo) + volcell51(1:trimat)
3338 enddo
3339 EXIT
3340 enddo
3341 enddo
3342 enddo
3343
3345
3347 write (*,fmt='(A)') " === LINK SWITCH ==="
3349 IF(tmp22array(1,ib)==0)cycle
3350 print *, "brick target =", tmp22array(1,ib)
3351 print *, "brick origin =", tmp22array(2,ib)
3352 print *, "brick main =", tmp22array(3,ib)
3353 print *, "adding",tmp22array(6,ib) ,'to', tmp22array(4,ib)
3354 print *, "updated target -old volume- =", tmp22array(5,ib)
3355 ENDDO
3356 endif
3358
3359
3360 if(itask==0)then
3363 DO it = 0,nthread-1
3364 IF (vold_l(it,0,ib) == zero)cycle
3365 print *, ""
3366 print *,
" brick ID =", ixs(11,
brick_list(nin,ib)%id)
3367 print *,
" removing ",vold_l(it,0,ib),
'from',
brick_list(nin,ib)%Vold_SCell
3368 print *,
" new origin volume =", ixs(11,
brick_list(nin,ib)%id)
3369 print *,
" %vold, %vnew " ,
brick_list(nin,ib)%Vold_SCell- vold_l(it,0,ib),
brick_list(nin,ib)%Vnew_SCell
3370 print *, ""
3371 ENDDO
3372 ENDDO
3373 endif
3374 endif
3376
3377
3378
3379 DO ib=nbf,nbl1
3380
3381 DO it = 0,nthread-1
3382 IF (vold_l(it,0,ib) == zero)cycle
3384
3385
3386
3387
3388
3389
3390 endif
3391
3393
3394
3395 mtn_ = iparg(1,ngb(ib))
3396 IF(mtn_==51)THEN
3397 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
3398 llt_ = iparg(2,ngb(ib))
3399 DO itrimat=1,trimat
3400 ipos = 11
3401 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
3402 k = k0 * llt_
3403 mbuf%VAR(k+idlocb(ib)) = mbuf%VAR(k+idlocb(ib)) - vold_l(it,itrimat,ib)
3404 enddo
3405 endif
3406
3407
3408
3409
3410
3411 vold_l(it,0:
max(0,trimat),ib) = zero
3412 enddo
3413 enddo
3414
3415
3416
3417
3420 if(itask==0)DEALLOCATE (tmp22array)
3421 endif
3422
3423
3424
3425
3426 DO ib=nbf,nbl
3429
3430 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
3432 ncell = nbcut
3433 icell = 0
3435
3436 mcell = pmainid
3437 IF(mcell == 0)cycle
3439 DO j=1,6
3440 iv = padjbrick(j,1)
3441 ngv = padjbrick(j,2)
3442 idlocv = padjbrick(j,3)
3443 ibv = padjbrick(j,4)
3444 IF(ibv>0)THEN
3446 IF(nbcutv==0)cycle
3447 nadjcell =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%NAdjCell
3448 DO ic=1,nadjcell
3449 icellv =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%Adjacent_Cell(ic)
3451 IF(icellv == mcellv)cycle
3452
3453
3454 jv =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(1)
3455 idm =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(3)
3456 IF(ie/=idm)THEN
3457
3458
3463 brick_list(nin,ib)%ADJ_ELEMS%ICELL(k) = icellv
3464 brick_list(nin,ib)%ADJ_ELEMS%SecndFACE(k) = jv
3465 else
3466 padjbrickv =>
brick_list(nin,ibv)%Adjacent_Brick(1:6,1:5)
3467 DO j2=1,6
3468 IF (j2==jv)cycle
3469 ivv = padjbrick(j2,1)
3470 ngvv = padjbrick(j2,2)
3471 idlocvv = padjbrick(j2,3)
3472 ibvv = padjbrick(j2,4)
3473 ifvv = padjbrick(j2,5)
3474 IF(ivv == 0)cycle
3475
3476 IF(ibvv > 0)THEN
3478
3479 nadjcellv =
brick_list(nin,ibvv)%POLY(mcellvv)%FACE(ifvv)%NAdjCell
3480 DO k=1,nadjcellv
3481 icv =
brick_list(nin,ibvv)%POLY(mcellvv)%FACE(ifvv)%Adjacent_Cell(k)
3482 IF(icv/=icellv)cycle
3487 brick_list(nin,ib)%ADJ_ELEMS%ICELL(k2) = icellv
3488 brick_list(nin,ib)%ADJ_ELEMS%SecndFACE(k2) = j2
3489 EXIT
3490 enddo
3491 ELSEIF(ibvv == 0)THEN
3497 brick_list(nin,ib)%ADJ_ELEMS%SecndFACE(k2) = j2
3498 ENDIF
3499 enddo
3500 endif
3501 enddo
3502 ENDIF
3503 enddo
3504 ENDDO
3505
3506
3507
3508
3509
3510
3511 DO ib=nbf,nbl
3515 icell = 0
3516 nintp(1:6,1:9) = 0
3517 nnod(1:6,1:9) = 0
3518 IF(nbcut == 0) THEN
3519 brick_list(nin,ib)%POLY(1)%FACE(1:6)%NumPOINT=(/4,4,4,4,4,4/)
3520 cycle
3521 ENDIF
3522 DO WHILE (icell<=ncell)
3523 icell = icell + 1
3524 IF (icell>ncell .AND. ncell/=0)THEN
3525 icell=9
3526 cycle
3527 ENDIF
3529 brick_list(nin,ib)%POLY(icell)%FACE(1:6)%NumPOINT = 0
3530 DO j=1,6
3531 jj = gface(j,secid)
3532 IF(jj==0)EXIT
3533 np = gnpt(j,secid)
3534 nn = gnnod(j,secid)
3535 brick_list(nin,ib)%POLY(icell)%FACE(jj)%NumPOINT = np
3536 nintp(jj,icell) = np-nn
3537 nnod(jj,icell) = nn
3538 ENDDO
3539 enddo
3540 IF(icell==9)THEN
3541 DO j=1,6
3542
3543 nn = sum( nnod(j,1:ncell) )
3544 nn = 4 - nn
3545
3546 np = sum( nintp(j,1:ncell) )
3547
3548 brick_list(nin,ib)%POLY(9)%FACE(j)%NumPOINT = np + nn
3549 ENDDO
3550 ENDIF
3551 ENDDO
3552
3553
3554
3555
3556
3557 DO ib=nbf,nbl
3558 pwherewasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
3559
3560 plistnodid(1)%p(1:8) =>
brick_list(nin,ib)%POLY(1)%ListNodID(1:8)
3561 plistnodid(2)%p(1:8) =>
brick_list(nin,ib)%POLY(2)%ListNodID(1:8)
3562 plistnodid(3)%p(1:8) =>
brick_list(nin,ib)%POLY(3)%ListNodID(1:8)
3563 plistnodid(4)%p(1:8) =>
brick_list(nin,ib)%POLY(4)%ListNodID(1:8)
3564 plistnodid(5)%p(1:8) =>
brick_list(nin,ib)%POLY(5)%ListNodID(1:8)
3565 plistnodid(6)%p(1:8) =>
brick_list(nin,ib)%POLY(6)%ListNodID(
3566 plistnodid(7)%p(1:8) =>
brick_list(nin,ib)%POLY(7)%ListNodID(1:8)
3567 plistnodid(8)%p(1:8) =>
brick_list(nin,ib)%POLY(8)%ListNodID(1:8)
3568 plistnodid(9)%p(1:8) =>
brick_list(nin,ib)%POLY(9)%ListNodID(1:8)
3569 pnodwasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
3571 icell = 0
3573
3575 pnodwasmain(1:8)%NodWasMain = 0
3576 pwherewasmain(1:8)%WhereWasMain = 0
3577 DO j=1,mnod
3578 pnodwasmain(plistnodid(mcell)%p(j))%NodWasMain = 1
3579 ENDDO
3580
3581 DO WHILE (icell<=ncell)
3582 icell = icell +1
3583 IF (icell>ncell .AND. ncell/=0)icell=9
3584 IF(icell == mcell)cycle
3585 ipos =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(1)
3587
3588 DO j=1,mnod
3589 pwherewasmain(plistnodid(icell)%p(j))%WhereWasMain = ipos
3590 enddo
3591 enddo
3592 ENDDO
3593
3594
3595
3596
3597
3598
3599 DO ib=nbf,nbl
3601 iiad22(nin, ie) = ib
3602 ENDDO
3603
3604
3605
3606
3607 DO ib=nbf,nbl
3608 mlw = iparg(1,ngb(ib))
3610 ENDDO
3611
3612
3613
3614
3615
3616
3617 DO ib=nbf,nbl
3618 numsecnd = old_secndlist(nin,ib)%Num
3619 IF (numsecnd==0)cycle
3620 old_secndlist(nin,ib)%Num = 0
3621 old_secndlist(nin,ib)%NumSecndNodes = 0
3622 DO j=1,24
3623 old_secndlist(nin,ib)%FM(j) = 0
3624 old_secndlist(nin,ib)%FV(j) = 0
3625 old_secndlist(nin,ib)%IV(j) = 0
3626 old_secndlist(nin,ib)%IBV(j) = 0
3627 old_secndlist(nin,ib)%ICELLv(j) = 0
3628 old_secndlist(nin,ib)%VOL(j) = zero
3629 old_secndlist(nin,ib)%NumNOD_Cell(j) = 0
3630 old_secndlist(nin,ib)%ListNodID(j,1:8) = 0
3631 ENDDO
3632 enddo
3633
3634
3635
3636
3637 DO ib=nbf,nbl
3640 IF(mcell==0)THEN
3642 ELSE
3643 brick_list(nin,ib)%OldMainStrongNode = inod_w
3644 ENDIF
3645 ENDDO
3646
3647
3648
3649
3650 lstilltruss = .true.
3651 igr = ipari(52)
3652 ntrus = ipari(53 )
3653 IF( itask==0 .AND. ntrus/=0 )THEN
3654 ii = 1
3655 DO ib=nbf,nbl
3657 IF (mcell==0 ) cycle
3658 IF (.NOT.lstilltruss) cycle
3659 point0(1:3) =
brick_list(nin,ib)%POLY(mcell)%CellCenter(1:3)
3660
3661
3663 DO isecnd=1,numsecnd
3664 ibv =
brick_list(nin,ib)%SecndList%IBV(isecnd)
3665 icellv =
brick_list(nin,ib)%SecndList%ICELLv(isecnd)
3666 pointtmp(1:3) =
brick_list(nin,ibv)%POLY(icellv)%CellCenter(1:3)
3667
3668 IF (ii>ntrus) THEN
3669 lstilltruss=.false.
3670 EXIT
3671 print *, "** Warning inter22 : no more truss in group to mark cell links"
3672 ENDIF
3673 x(1:3,ixt(2,igrtruss(igr)%ENTITY(ii))) = point0(1:3)
3674 x(1:3,ixt(3,igrtruss(igr)%ENTITY(ii))) = pointtmp(1:3)
3675
3677 write (*,fmt='(A,I10,A,I10,A,I10)') "set TRUS_id=", ixt(nixt,igrtruss(igr)%ENTITY(ii)) ,
3679 endif
3680 ii = ii + 1
3681 ENDDO
3682 ENDDO
3683 DO ii = 1,ntrus
3684
3685 x(1:3,ixt(2,igrtruss(igr)%ENTITY(ii))) = (/zero, zero, zero/)
3686 x(1:3,ixt(3,igrtruss(igr)%ENTITY(ii))) = (/ one, zero, zero/)
3687 ENDDO
3688 ENDIF
3689
3690
3691
3692
3693
3694 DO ib=nbf,nbl
3696 icell = 0
3697 ncell = nbcut
3698 IF(nbcut == 0)THEN
3699 icell = 1
3700 brick_list(nin,ib)%POLY(icell)%DVOL(1) = zero
3701 cycle
3702 ENDIF
3703 DO WHILE (icell<=ncell)
3704 icell = icell +1
3705 IF (icell>ncell .AND. ncell/=0)icell=9
3706 IF(icell == 9)THEN
3708 ELSE
3709
3710 vsum(1) =
brick_list(nin,ib)%PCUT(icell)%Vel(1)
3711 vsum(2) =
brick_list(nin,ib)%PCUT(icell)%Vel(2)
3712 vsum(3) =
brick_list(nin,ib)%PCUT(icell)%Vel(3)
3713
3714
3715
3716
3720 dvol_predic = dt1*(vsum(1)*n_(1) + vsum(2)*n_(2) + vsum(3)*n_(3))
3721 brick_list(nin,ib)%POLY(icell)%DVOL(1) = dvol_predic
3722 ENDIF
3723 enddo
3724 enddo
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3747
3748
3749 DO ib=nbf,nbl
3753
3755 DO ic=1,numsecnd
3756 icellv =
brick_list(nin,ib)%SecndList%ICELLv(ic)
3762 enddo
3763 enddo
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777 lskip = .false.
3778
3779
3780
3781
3782 if(dt1==zero)then
3783 do ib=nbf,nbl
3785 enddo
3786 endif
3787
3788
3789 if(.NOT.lskip)then
3790 DO ib=nbf,1*nbl
3796 dvol_numeric = vnew-vold
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812 IF(abs(dvol_numeric) > ratio22*abs(dvol_predic) .AND. dvol_predic /= zero .AND. ratio22 < 1000 )THEN
3813 IF((icode /= old_icode ) )THEN
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3827 gbuf => elbuf_tab(ng)%GBUF
3828
3829
3830
3831
3832
3836 IF(mlw==51)THEN
3837 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
3838 llt = iparg(2,ng)
3839 DO itrimat=1,trimat
3840
3841
3842 ipos = 1
3843 k = llt * (m51_n0phas
3844 vfrac(itrimat) = mbuf%VAR(k+idloc)
3845 ipos = 11
3846 k = llt * (m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1)
3847 volcell51_old(itrimat) = mbuf%VAR(k+idloc)
3848 mbuf%VAR(k+idloc) =
max(zero, (vnew-dvol_predic)*vfrac(itrimat) )
3849 volcell51(itrimat) = mbuf%VAR(k+idloc)
3850 enddo
3851 ENDIF
3853
3854
3855
3856
3857
3858 endif
3859 endif
3860 endif
3861 enddo
3862 endif
3863
3866 IF(itask==0)THEN
3872 dvol_numeric = vnew-vold
3875 print *,
"+------elem_id =",ixs(11,
brick_list(nin,ib)%id)
3876 print *, "+--------old_icode =",old_icode
3877 print *, "+--------icode =",icode
3878 print *,
"+--------dvol_prediction =",
brick_list(nin,ib)%dvol
3879 print *, "+--------dvol_numeric =",vnew-vold
3880 print *, "+--------vnew =",vnew
3881 print *,
"+--------vold =",vold ,
"->",
brick_list(nin,ib)%Vold_SCell
3882 ENDDO
3883 ENDIF
3884 ENDIF
3885
3886
3887
3888
3889
3890
3891
3892 IF(dt1==zero)THEN
3893 DO ib=nbf,nbl
3897 IF(mcell==0)cycle
3899 ENDDO
3900 ENDIF
3901 DO ib=nbf,nbl
3905
3906 gbuf => elbuf_tab(ngb(ib))%GBUF
3907 IF(psubvold>zero)gbuf%VOL(idlocb(ib)) = psubvold
3908
3909
3910 ENDDO
3911
3912
3913
3914
3915
3917 do ib=nbf,nbl
3919 plistnodid(1)%p(1:8) =>
brick_list(nin,ib)%POLY(1)%ListNodID(1:8)
3920 plistnodid(2)%p(1:8) =>
brick_list(nin,ib)%POLY(2)%ListNodID(1:8)
3921 plistnodid(3)%p(1:8) =>
brick_list(nin,ib)%POLY(3)%ListNodID(1:8)
3922 plistnodid(4)%p(1:8) =>
brick_list(nin,ib)%POLY(4)%ListNodID(1:8)
3923 plistnodid(5)%p(1:8) =>
brick_list(nin,ib)%POLY(5)%ListNodID(1:8)
3924 plistnodid(6)%p(1:8) =>
brick_list(nin,ib)%POLY(6)%ListNodID(1:8)
3925 plistnodid(7)%p(1:8) =>
brick_list(nin,ib)%POLY(7)%ListNodID(1:8)
3926 plistnodid(8)%p(1:8) =>
brick_list(nin,ib)%POLY(8)%ListNodID(1:8)
3927 plistnodid(9)%p(1:8) =>
brick_list(nin,ib)%POLY(9)%ListNodID(1:8)
3928
3929
3930 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
3934 icell = 0
3935 mcell = mcell
3937 gbuf => elbuf_tab(ngb(ib))%GBUF
3938 vol = gbuf%VOL(idlocb(ib))
3939 brickid = idb(ib)
3941 write (*,fmt=
'(A,I12)')
"+=== BRICK ID===", ixs(11,
id)
3942 if(ncell==0)then
3943 write (*,fmt='(A )') "| uncut: "
3944 write (*,fmt='(A,1F30.20)') "| volume: ", vol
3945 write (*,fmt=
'(A,1F30.20)')
"| ext. volume: ",
brick_list(nin,ib)%Vnew_Scell
3946 write (*,fmt='(A,1F30.20)') "| masse: ", gbuf%VOL(idlocb(ib)) * gbuf%RHO(idlocb(ib
3949 write (*,fmt='(A )') "| secnd list : "
3950 write (*,fmt=
'(A,I10 )')
"| + J : ",
brick_list(nin,ib)%SecndList%FM(j)
3951 write (*,fmt=
'(A,I10 )')
"| + IB : ",
brick_list(nin,ib)%SecndList%IBv(j)
3952 write (*,fmt=
'(A,I10 )')
"| + brickID : ", ixs(11,
brick_list(nin,ib)%SecndList%IV(j))
3953 enddo
3954 endif
3955 cycle
3956 endif
3957 write (*,fmt='(A,1F30.20)') "| volume: ", vol
3958 write (*,fmt='(A,6F30.20)') "| faces: ", f(1:6,ib)
3959 write (*,fmt='(A,1F30.20)') "| masse: ", gbuf%VOL(idlocb(ib)) * gbuf%RHO(idlocb(ib))
3960 DO WHILE (icell<=ncell)
3961 icell = icell +1
3962 IF (icell>ncell .AND. ncell/=0)icell=9
3963 debugmainsecnd = '.........|'
3965 write (*,fmt='(A )') "|"
3966 if(icell/=9)then
3967 write (*,fmt='(A,I1,A,A,A1,I2,A,A6)')
3968 .
"+== ICELL= ", icell ,
", SecType=",
brick_list(nin,ib)%SECTYPE(icell
3969 .
"(",
brick_list(nin,ib)%SecID_Cell(icell) ,
") - "
3970 else
3971 write (*,fmt='(A,A6)') "+== REMAINING POLYHEDRON - ", char1
3972 endif
3973
3974 write (*,fmt='(A )') "| |"
3975 write (*,fmt='(A,I1)') "| +===Main/Secnd=", pismain(icell)%IsMain
3976 write (*,fmt='(A,F30.20)') "| +======SUVOLUMES=", psubvol(icell)%Vnew
3977 write (*,fmt=
'(A,6F30.20)')
"| +=======SUBFACES=",
brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Surf
3978 write (*,fmt=
'(A,F30.20)')
"| +=======CUT AERA=",
brick_list(nin,ib)%PCUT(icell)%SCUT(1)
3979 write (*,fmt=
'(A,A,I2)')
"| +======NUM POINT=",
" ",
brick_list(nin,ib)%POLY(icell
3980 write (*,fmt='(A,A,I1,A,8I12)') "| +======NODE LIST=",
3981 . " (",mnod,") ", plistnodid(icell)%p(1:mnod)
3982 write (*,fmt='(A,A,8I12)') "| | radIDs=",
3983 .
" ", ixs(1+plistnodid(icell)%p(1:mnod),
id)
3984 write (*,fmt='(A,A,8I12)') "| | userIDs=",
3985 .
" ", itab(ixs(1+plistnodid(icell)%p(1:mnod),
id))
3986 iad2 = ale_connectivity%ee_connect%iad_connect(brickid)
3987 lgth2 = ale_connectivity%ee_connect%iad_connect(brickid+1) -
3988 . ale_connectivity%ee_connect%iad_connect(brickid)
3989 If(sum(iabs(ale_connectivity%ee_connect%connected(iad2:iad2 + lgth2 - 1)))/=0)then
3990 write (*,fmt='(A,6I10)') "| +===Adj Brick(i)=", padjbrick(1:6,1)
3991 DO j=1,6
3992 IF( padjbrick(j,1)/=0 )THEN
3993 write (*,fmt='(A,6I10)') "| +===Adj Brick(u)=", ixs(11,padjbrick(j,1))
3994 ENDIF
3995 ENDDO
3996 DO j=1,6
3997 nadjcell =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
3998 IF(nadjcell/=0)THEN
3999 write (*,fmt='(A,I1,A,5I3)') "| +======Adj Cells, face=",j, " :",
4000 .
brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(1:nadjcell
4001 ENDIF
4002 ENDDO
4003 ENDIF
4004 enddo
4005 write (*,fmt='(A )') " "
4006 enddo
4007 if(itask==0.AND.debug_outp)then
4008 write (*,fmt='(A )') " ----sini22_end----"
4009 write (*,fmt='(A )') " "
4010 endif
4011 endif
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021 DO ib=nbf,nbl
4025 IF (mainid ==0) cycle
4026 volcell =
brick_list(nin,ib)%POLY(mainid)%Vnew
4027 vol = volcell
4028 ppoint(1:3) =
brick_list(nin,ib)%POLY(mainid)%CellCenter(1:3) * volcell
4029 DO ic=1,numsecnd
4030 icellv =
brick_list(nin,ib)%SecndList%ICELLv(ic)
4032 volcell =
brick_list(nin,ibv)%POLY(icellv)%Vnew
4033 point0(1:3) =
brick_list(nin,ibv)%POLY(icellv)%CellCenter(1:3)
4034 ppoint(1) = ppoint(1) + volcell * point0(1)
4035 ppoint(2) = ppoint(2) + volcell * point0(2)
4036 ppoint(3) = ppoint(3) + volcell * point0(3)
4037 vol = vol + volcell
4038 enddo
4039 ppoint(1) = ppoint(1) / vol
4040 ppoint(2) = ppoint(2) / vol
4041 ppoint(3) = ppoint(3) / vol
4042 brick_list(nin,ib)%SCellCenter(1:3) = ppoint(1:3)
4043 enddo
4044
4045
4046
4047
4048 lstillnode = .true.
4049 IF(ipari(70)/=0)THEN
4050 nnodes = igrnod(ipari(70))%NENTITY
4051
4052 IF( itask==0 .AND. nnodes/=0 )THEN
4053 ii = 1
4054 DO ib=nbf,nbl
4056 IF (mcell==0 ) cycle
4057 IF (.NOT.lstillnode) cycle
4058 point0(1:3) =
brick_list(nin,ib)%SCellCenter(1:3)
4059 IF (ii>nnodes) THEN
4060 lstillnode = .false.
4061 print *, "** Warning inter22 : no more node in group to mark cell center. Last one was" ,
4062 . itab(igrnod(ipari(70))%ENTITY(nnodes))
4063 EXIT
4064 ENDIF
4065 x(1:3,igrnod(ipari(70))%ENTITY(ii)) = point0(1:3)
4067 write (*,fmt='(A,I10,A,I10,A,I10)')"set orphan_node_id=",itab(igrnod(ipari(70))%ENTITY(ii))
4068 endif
4069 ii = ii + 1
4070 ENDDO
4071 DO ii = 1, nnodes
4072
4073 x(1:3,igrnod(ipari(70))%ENTITY(ii)) = (/zero, zero, zero/)
4074 ENDDO
4075 ENDIF
4076 ENDIF
4077
4078
4079
4080
4081
4082 DO ib=nbf,nbl
4084 IF(ncell==0)THEN
4086 nc(1:8) = ixs(2:9,ie)
4087 DO j=1,6
4088 brick_list(nin,ib)%POLY(1)%FACE(j)%Center(1) = fourth * sum( x(1, nc(icf(1:4,j)) ) )
4089 brick_list(nin,ib)%POLY(1)%FACE(j)%Center(2) = fourth * sum( x(2, nc(icf(1:4,j)) ) )
4090 brick_list(nin,ib)%POLY(1)%FACE(j)%Center(3) = fourth * sum( x(3, nc(icf(1:4,j)) ) )
4091 ENDDO
4092 ELSE
4093
4095 nc(1:8) = ixs(2:9,ie)
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123 Do j=1,6
4124 face =
brick_list(nin,ib)%POLY(9)%FACE(j)%Surf
4125 np_(9) =
brick_list(nin,ib)%POLY(9)%FACE(j)%NumPOINT
4126 center(:,:) = zero
4127 IF(abs(face)<=em10 .OR. np_(9)==0)THEN
4128 brick_list(nin,ib)%POLY(9)%FACE(j)%Center(1:3) = zero
4129 ELSE
4131 DO icell = 1 ,ncell
4132 np_(icell) =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NumPOINT
4133 center(1:3,icell) =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Center(1:3)
4134 ENDDO
4135
4136
4137
4138
4139
4140 np_(ncell+1:9) = 0
4141 np_(9) =
brick_list(nin,ib)%POLY(9)%FACE(j)%NumPOINT
4142 ppoint(1) = sum( x(1, nc(icf(1:4,j)) ) )
4143 ppoint(2) = sum( x(2, nc(icf(1:4,j)) ) )
4144 ppoint(3) = sum( x(3, nc(icf(1:4,j)) ) )
4145 cut_point(1:3) =
brick_list(nin,ib)%POLY(9)%FACE(j)%Center(1:3)
4146 point0(1) = ppoint(1) + two*cut_point(1)
4147 . - np_(1)*center(1,1)- np_(2)*center(1,2)- np_(3)*center(1,3)- np_(4)*center(1,4)
4148 . - np_(5)*center(1,5)- np_(6)*center(1,6)- np_(7)*center(1,7)- np_(8)*center(1,8)
4149 point0(2) = ppoint(2) + two*cut_point(2)
4150 . - np_(1)*center(2,1)- np_(2)*center(2,2)- np_(3)*center(2,3)- np_(4)*center(2,4)
4151 . - np_(5)*center(2,5)- np_(6)*center(2,6)- np_(7)*center(2,7)- np_(8)*center(2,8)
4152 point0(3) = ppoint(3) + two*cut_point(3)
4153 . - np_(1)*center(3,1)- np_(2)*center(3,2)- np_(3)*center(3,3)- np_(4)*center(3,4)
4154 . - np_(5)*center(3,5)- np_(6)*center(3,6)- np_(7)*center(3,7)- np_(8)*center(3,8)
4155 point0(1:3) = point0(1:3) / np_(9)
4156 brick_list(nin,ib)%POLY(9)%FACE(j)%Center(1:3) = point0(1:3)
4157
4158
4159 ENDIF
4160 enddo
4161 ENDIF
4162 enddo
4163
4164
4165
4166
4167
4168
4169 lstillnode = .true.
4170 IF(ipari(81)/=0)THEN
4171 nnodes = igrnod(ipari(81))%NENTITY
4172
4173 IF( itask==0 .AND. nnodes/=0 )THEN
4174 ii = 1
4175 DO ib=nbf,nbl
4176 icell = 0
4178 DO WHILE (icell<=ncell)
4179 icell = icell +1
4180 IF (icell>ncell .AND. ncell/=0)icell=9
4181 IF (.NOT.lstillnode) cycle
4182 point0(1:3) =
brick_list(nin,ib)%POLY(icell)%CellCenter(1:3)
4183 IF(ii>nnodes)THEN
4184 lstillnode = .false.
4185 print *, "** Warning inter22 : no more node in group to mark cell center",
4186 . itab(igrnod(ipari(81))%ENTITY(nnodes))
4187 EXIT
4188 ENDIF
4189 brick_list(nin,ib)%POLY(icell)%ID_FREE_NODE = igrnod(ipari(81))%ENTITY(ii)
4190 x(1:3,igrnod(ipari(81))%ENTITY(ii)) = point0(1:3)
4192 write (*,fmt='(A,I10,A,I10,A,I10)')"set orphan_node_id=",
4193 . itab(igrnod(ipari(81))%ENTITY(ii)),
"in brick_id=",ixs(11,
brick_list(nin,ib)%id)
4194 endif
4195 ii = ii + 1
4196 ENDDO
4197 ENDDO
4198 DO ii = 1,nnodes
4199
4200 x(1:3,igrnod(ipari(81))%ENTITY(ii)) = zero
4201 ENDDO
4202 ENDIF
4203 ENDIF
4204
4205
4206
4207
4208
4209 IF(ipari(82)/=0)THEN
4210 nnodes = igrnod(ipari(82))%NENTITY
4211 IF(nnodes==0)RETURN
4212 ii = 1
4213 DO ib=nbf,nbl
4215 icell = 0
4217 DO WHILE (icell<=ncell)
4218 icell = icell +1
4219 IF (icell>ncell .AND. ncell/=0)icell=9
4220 IF(.NOT.lstillnode) cycle
4221 DO j=1, 6
4222 IF (ii>nnodes) THEN
4223 lstillnode = .false.
4224 print *, "** Warning inter22 : no more node in group to mark face centers." ,
4225 . itab(igrnod(ipari(82))%ENTITY(nnodes))
4226 EXIT
4227 ENDIF
4228 node_id = igrnod(ipari(82))%ENTITY(ii)
4229 x(1:3,node_id) =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Center(1:3)
4230 ii = ii + 1
4231 ENDDO
4232 ENDDO
4233 enddo
4234 ENDIF
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252 IF(ALLOCATED(debugmainsecndv))DEALLOCATE (debugmainsecndv)
4253 IF(ALLOCATED(ismainv))DEALLOCATE (ismainv)
4254 IF(ALLOCATED(f))DEALLOCATE (f)
4255 IF(ALLOCATED(vol51))DEALLOCATE (vol51,vol51v)
4256 IF(ALLOCATED(origin_data))DEALLOCATE (origin_data)
4257 IF(ALLOCATED(destroy_data))DEALLOCATE (destroy_data)
4258 IF(ALLOCATED(norigin))DEALLOCATE (norigin)
4259
4260
4261 RETURN
subroutine destroy_cell(nin, ib, icell_target, icellv, ibv, j, jv, ixs, itask)
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine get_group_id(ii, ng, ig, iparg)
integer function get_unique_main_cell(nin, ib, k)
function i22aera(npts, p, c)
type(alefvm_buffer_), target alefvm_buffer
type(brick_entity), dimension(:,:), allocatable, target brick_list
type(int22_buf_t) int22_buf
integer ibug22_orphannodes
integer ibug22_undirectlink
integer ibug22_link_switch
integer ibug22_prediction
subroutine initbuf(iparg, ng, mtn, llt, nft, iad, ity, npt, jale, ismstr, jeul, jtur, jthe, jlag, jmult, jhbe, jivf, mid, jpor, jcvt, jclose, jpla, irep, iint, igtyp, israt, isrot, icsen, isorth, isorthg, ifailure, jsms)
subroutine sigeps37_single_cell(elbuf_tab, ixs, bufmat, iparg, ipm, idloc, ng, brickid, vol)
subroutine weighting_cell_nodes(nin, ib, icell, ires, idemerge)