52
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
132 USE elbufdef_mod
136 USE multimat_param_mod , ONLY : m51_n0phas, m51_nvphas
137
138
139
140#include "implicit_f.inc"
141
142
143
144#include "param_c.inc"
145#include "com01_c.inc"
146#include "com04_c.inc"
147#include "com08_c.inc"
148#include "task_c.inc"
149#include "vect01_c.inc"
150#include "inter22.inc"
151#include "mvsiz_p.inc"
152#include "comlock.inc"
153#include "subvolumes.inc"
154
155
156
157 INTEGER,INTENT(IN) :: IXS(NIXS,*) ,IPARG(NPARG,*),ITAB(*) ,NV46 ,(*),
158 . IPARI(*) ,IXT(NIXT,*) ,ITASK ,IPM(NPROPMI,*)
159 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
160 my_real,
INTENT(IN) :: v(3,*), veul(lveul,*)
161 my_real,
INTENT(IN),
TARGET :: bufmat(*)
162 my_real,
INTENT(INOUT) :: x(3,*)
163
164 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
165 TYPE (GROUP_) , DIMENSION(NGRTRUS) :: IGRTRUSS
166 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECTIVITY
167
168
169
170 TYPE(L_BUFEL_) ,POINTER :: LBUF1,LBUF2
171 INTEGER :: I,J,K0,K1,K2,JV,IDV, NBCUT, NBCUTv, NBCUTprev, NEL,NG,NFL,NBF,NBL,NBL1,NBRIC_L,NIN
172 INTEGER :: brickID,tNB,NTAG,IV,NGv,IAD22,NCELLv,ICV,IGR
173 INTEGER :: IB,IBV,IBv2,IBv_i,IBo,ICELL,ICELL2,MCELL,NCELL,MNOD,ID,ITAG(66)
174 INTEGER :: IPOS, LLT_, LLT_o,LLT_v, IDLOCv, IPOSf, IPOSiadj,ICELLv,ICELLv2
175 INTEGER :: INODES(8),INOD,INOD2,INODE,NNODES, NNODES2, ADD, ADD0, ITRIMAT, K, KV, Ko
176 LOGICAL :: lDONE,lStillTruss,lFOUND,lCYCLE,lTARGET,lStillNode, lCOND1, lCOND2
177 my_real :: volcell, volcell51(trimat), volsecnd51(trimat),volsecnd
178 my_real :: adjmain_vol(6), adjmain_face(6), adjmain_centroid(3,6),n(3,6), fac
179 INTEGER :: IDadj_MCELLv(6), IVadj_MCELLv(6), IBadj_MCELLv(6)
180 my_real,
DIMENSION(:,:),
ALLOCATABLE :: f
181 my_real,
POINTER :: pvar, pvarv, pvaro
182 my_real,
DIMENSION(:),
POINTER :: pvar3
183 TYPE(G_BUFEL_) ,POINTER :: GBUF, GBUFv, GBUFo
184 TYPE(L_BUFEL_) ,POINTER :: LBUF
185 TYPE(POLY_ENTITY),DIMENSION(:), POINTER :: pIsMain ,pIsMainV
186 my_real,
DIMENSION(:) ,
POINTER :: pfullface
187 TYPE(NODE_ENTITY),DIMENSION(:) , POINTER :: pNodWasMain
188
189 INTEGER,DIMENSION(:,:), POINTER :: pAdjBRICK, pAdjBRICKv
190 TYPE(NODE_ENTITY),DIMENSION(:) , POINTER :: pWhereWasMain
191 TYPE(NODE_ENTITY), DIMENSION(:), POINTER :: pWhichCellNod,pWhichCellNodv
192 INTEGER , POINTER :: pMainID
193 my_real,
DIMENSION(:) ,
POINTER :: uparam
194 TYPE(POLY_ENTITY), DIMENSION(:), POINTER :: pSUBVOLv
196 TYPE(POLY_ENTITY), DIMENSION(:), POINTER :: pSUBVOL
197 CHARACTER*6 :: char1
198 LOGICAL :: bool1, bool2
199 CHARACTER*10 :: debugMAINSECND
200 CHARACTER*10 ,ALLOCATABLE :: debugMAINSECNDv(:,:,:)
201 INTEGER,ALLOCATABLE :: IsMainV(:,:,:)
202 TYPE(BUF_MAT_) ,POINTER :: MBUF,MBUFv, MBUFo
203 INTEGER :: ICRIT_MAT_DEPORTATION, ICRIT_DEMERGE
204
205 INTEGER,ALLOCATABLE,DIMENSION(:,:,:):: ORIGIN_DATA
206 INTEGER,ALLOCATABLE,DIMENSION(:) :: Ntarget,Norigin
207 INTEGER :: MTN_,ITAR, IORIG, MAIN_TAG(6,9)
208 INTEGER :: IPLA, ISOLNOD, FM, IBm,IBmCur,IBMo,IBMold, IDM, IE, IN
209INTEGER :: ICELLTAG(9), ICELLTAG_OLD(9),IC, NAdjCELL,NAdjCELLv, IFV, FV, FV2
210 INTEGER :: IVv,MCELLv, MCELLvv, NGvv,IDLOCvv, IBvv,IFVv
211 INTEGER :: GET_UNIQUE_MAIN_CELL, LINK_WITH_UNIQUE_MAIN_CELL
212INTEGER :: NsecndNOD, NP, NP_NODE, JJ, NINTP(6,9), NNOD(6,9), NN, SECid
213INTEGER :: ITASKv, NTRUS, NPOINT, IRES(2), NewInBuffer
214 INTEGER,ALLOCATABLE,DIMENSION(:,:) :: DESTROY_DATA
215 INTEGER :: I22LOOP,IT,IUNLINK,ITASKB, J1,J2, NTAR, INod_W, IDEMERGE, INod_W_old, ISECND, IAD0,II
216 INTEGER
217INTEGER :: Cod1, Cod2, Cod3, Icompl, Poly9woNodes
218INTEGER :: mainID,NC(8),MOLD,MNEW, IB2,NUM,IADBUF,NUPARAM,NGm,IDLOCm,ICELLm, NP_(9),NODE_ID
219 LOGICAL :: debug_outp,debug_outp2, lSKIP
220
221 my_real,
ALLOCATABLE,
DIMENSION(:,:) :: vol51, vol51v
222 my_real,
ALLOCATABLE,
DIMENSION(:) :: uvar
223 my_real :: vfrac(4),som, som_(4), somi, adjface(nv46,nadj_f), delta, ppoint(3)
224 my_real :: sumface, vectmp(3), volorig(24), pointtmp(3), point0(3), cut_point(3)
226 my_real :: eint, eintv, rho,rho_u(3),mom(3),rhov,sigv(6), sig(6),volv,vol,vol_m,vol_s
227 my_real :: var, var_,var__, var_6(6), var_vf(4), vold_phase(4)
228 my_real :: tmp(6),dxmin,vmax,ratiof,ratiofv,ratio,ratiov,uncutvol,uncutvolv
229 my_real :: vuncut, vi,vj, m(9,9)
230 my_real :: vsum(3) , n_(3), vnew, vold, dvol_numeric, dvol_predic
231 my_real :: sgn, dvi, dvii, face, face9, m_tot, m_liq, m_toto,m_liqo, rho10, rho20, mfrac
233
235 my_real :: c1, gam, p0, p, rho1, rho2, mas, mas1, mas2, ssp, ssp1, ssp2, rhoc2_1, rhoc2_2
237 my_real :: rho_adv, eint_adv, sig_adv(6), mom_adv(3), zm(3),zs(3), volratio
238 INTEGER :: ITER, NITER, LLTo, LLTm, NGo, IADV
239 INTEGER, ALLOCATABLE, DIMENSION(:) :: ORDER, VALUE
240
241 INTEGER :: NC1,NC2,NC3,NC4,NC5,NC6,NC7,NC8
242 INTEGER :: IAD2, IAD3, LGTH2, LGTH3
243
244 INTERFACE
247 INTEGER, INTENT(IN) :: NPTS
248 my_real,
INTENT(IN) :: p(3,npts)
250 END FUNCTION
251 END INTERFACE
252
253 TYPE pointer_array_r
254 my_real,
DIMENSION(:),
POINTER :: p
255 END TYPE
256
257 TYPE pointer_array_i
258 INTEGER,DIMENSION(:), POINTER :: p
259 END TYPE
260
261 TYPE(POLY_ENTITY), DIMENSION(:), POINTER :: pFACE
262 TYPE(POINTER_ARRAY_R) :: pFACEv(9)
263 TYPE(POINTER_ARRAY_I) :: pListNodID(9)
264 TYPE(POINTER_ARRAY_I) :: pListNodIDv(9)
265
266
267 INTEGER ICF(4,6)
268 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/
269
271 . aj7(mvsiz), aj8(mvsiz) , aj9(mvsiz),
272 . aji1, aji2, aji3,
273 . aji4, aji5, aji6,
274 . aji7, aji8, aji9,
275 . x17 , x28 , x35 , x46,
276 . y17 , y28 , y35 , y46,
277 . z17 , z28 , z35 , z46,
278 . jac_59_68(mvsiz), jac_67_49(mvsiz), jac_48_57(mvsiz),
279 . aj12, aj45, aj78,
280 . a17 , a28 ,
281 . b17 , b28 ,
282 . c17 , c28 ,
283 . x1(mvsiz),x2(mvsiz),x3(mvsiz),x4(mvsiz),x5(mvsiz),x6(mvsiz),x7(mvsiz),x8(mvsiz),
284 . y1(mvsiz),y2(mvsiz),y3(mvsiz),y4(mvsiz),y5(mvsiz),y6(mvsiz),y7(mvsiz),y8(mvsiz),
285 . z1(mvsiz),z2(mvsiz),z3(mvsiz),z4(mvsiz),z5(mvsiz),z6(mvsiz),z7(mvsiz),z8(mvsiz),
286 . dett(mvsiz),
287 . aj1(mvsiz),aj2(mvsiz),aj3(mvsiz),
288 . aj4(mvsiz),aj5(mvsiz),aj6(mvsiz),hxp,hyp,hzp,
289 . x1_,x2_,x3_,x4_,x5_,x6_,x7_,x8_,
290 . y1_,y2_,y3_,y4_,y5_,y6_,y7_,y8_,
291 . z1_,z2_,z3_,z4_,z5_,z6_,z7_,z8_
292
293
294
295
296
297
298
299
300
301
302
304 nin = 1
305 IF(itask==0)THEN
306 write (*,fmt=
'(A, 1000I7)')
"CUT CELL BUFFER : ", ixs(11,
brick_list(nin,1:
nb)%id)
307 ENDIF
308 ENDIF
309
310
311
312
313 idt_int22 = 1
314 dxmin = minval(dx22min_l(0:nthread-1))
315 vmax = maxval(v22max_l(0:nthread-1))
316 IF(vmax == zero)THEN
317 dt22_min = ep30
318 ELSE
319 dt22_min = dxmin/ncross22 / vmax
320 ENDIF
322
323
324
325
326
327 iadv = 0
328 nin = 1
329 dbvol = zero
330 dbmass = zero
331 i22loop = 0
332 imergel(itask) = 0
333 IF(trimat<=0)THEN
334 ALLOCATE(uvar(i22law37))
335 ALLOCATE(uvar_adv(i22law37))
336 ELSE
337 ALLOCATE(uvar(m51_n0phas+trimat*m51_nvphas))
338 ALLOCATE(uvar_adv(m51_n0phas+trimat*m51_nvphas
339 ENDIF
340
341
342
343
344 nbf = 1+itask*
nb/nthread
345 nbl = (itask+1)*
nb/nthread
347 tnb = nbl-nbf+1
348 i22_degenerated = 0
349
350
351 debug_outp = .false.
352 debug_outp2= .false.
353
354 do ib=nbf,nbl
357 debug_outp = .true.
358 exit
359 endif
360 enddo
361
362 if(itask==0.AND.debug_outp)then
363 print *, ""
364 print *, " |----------i22sinit.F-----------|"
365 print *, " | INITIALIZATION SUBROUTINE |"
366 print *, " |-------------------------------|"
367 char1 = ' '
368 end if
369
370
371
372
373
374 ALLOCATE (debugmainsecndv(nbl-nbf+1,6,9))
375
376 ALLOCATE (origin_data(nbf:nbl,9,1:3))
377 ALLOCATE (ismainv(nbf:nbl,6,9))
378 ALLOCATE (f(6,nbf:nbl))
379 ALLOCATE (vol51(nbf:nbl,trimat),vol51v(nbf:nbl,trimat))
380
381 ALLOCATE (norigin(nbf:nbl))
382
384
385
386
387
388
389
390
391 DO ng=itask+1,ngroup,nthread
392 IF(iparg(8,ng) /= 1) THEN
394 1 iparg ,ng ,
395 2 mtn ,nel ,nft ,iad ,ity ,
396 3 npt ,jale ,ismstr ,jeul ,jtur ,
397 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
398 5 nvaux ,jpor ,jcvt ,jclose ,ipla ,
399 6 irep ,iint ,igtyp ,israt ,isrot ,
400 7 icsen ,isorth ,isorthg ,ifailure,jsms )
401 IF(jlag /= 1 .AND. ity<=2) THEN
402 IF (mtn /= 0 .AND. iparg(64,ng)==0) THEN
403 lft = 1
404 llt = nel
405 isolnod = iparg(28,ng)
406 IF (ity == 1 .AND. isolnod /= 4) THEN
407 gbuf => elbuf_tab(ng)%GBUF
408 gbuf%TAG22(lft:llt) = 0
409 ENDIF
410 ENDIF
411 ENDIF
412 ENDIF
413 ENDDO
414
415
416
417 DO ng=itask+1,ngroup,nthread
418 IF(iparg(8,ng) /= 1) THEN
420 1 iparg ,ng ,
421 2 mtn ,nel ,nft ,iad ,ity ,
422 3 npt ,jale ,ismstr ,jeul ,jtur ,
423 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
424 5 nvaux ,jpor ,jcvt ,jclose ,ipla ,
425 6 irep ,iint ,igtyp ,israt ,isrot ,
426 7 icsen ,isorth ,isorthg ,ifailure,jsms )
427 IF(jlag /= 1 .AND. ity<=2) THEN
428 IF (mtn /= 0 .AND. iparg(64,ng)==0) THEN
429 lft = 1
430 llt = nel
431 isolnod = iparg(28,ng)
432 IF (ity == 1 .AND. isolnod /= 4) THEN
433 gbuf => elbuf_tab(ng)%GBUF
434 IF(jeul/=0)THEN
435 IF(integ8==0)THEN
436 gbuf%VOL(lft:llt) = veul(32,nft+lft:nft+llt)
437 ELSEIF(integ8==1)THEN
438 gbuf%VOL(lft:llt) = veul(52,nft+lft:nft+llt)
439 endif
440 ELSE
441 DO i=lft,llt
442 ii = i+nft
443 x1(i) = x(1,ixs(2,ii)) ; y1(i) = x(2,ixs(2,ii)) ; z1(i) = x(3,ixs(2,ii)) ;
444 x2(i) = x(1,ixs(3,ii)) ; y2(i) = x(2,ixs(3,ii)) ; z2(i) = x(3,ixs(3,ii)) ;
445 x3(i) = x(1,ixs(4,ii)) ; y3(i) = x(2,ixs(4,ii)) ; z3(i) = x(3,ixs(4,ii)) ;
446 x4(i) = x(1,ixs(5,ii)) ; y4(i) = x(2,ixs(5,ii)) ; z4(i) = x(3,ixs(5,ii)) ;
447 x5(i) = x(1,ixs(6,ii)) ; y5(i) = x(2,ixs(6,ii)) ; z5(i) = x(3,ixs(6,ii)) ;
448 x6(i) = x(1,ixs(7,ii)) ; y6(i) = x(2,ixs(7,ii)) ; z6(i) = x(3,ixs(7,ii)) ;
449 x7(i) = x(1,ixs(8,ii)) ; y7(i) = x(2,ixs(8,ii)) ; z7(i) = x(3,ixs(8,ii)) ;
450 x8(i) = x(1,ixs(9,ii)) ; y8(i) = x(2,ixs(9,ii)) ; z8(i) = x(3,ixs(9,ii)) ;
451 ENDDO
452 DO i=lft,llt
453 x17=x7(i)-x1(i)
454 x28=x8(i)-x2(i)
455 x35=x5(i)-x3(i)
456 x46=x6(i)-x4(i)
457 y17=y7(i)-y1(i)
458 y28=y8(i)-y2(i)
459 y35=y5(i)-y3(i)
460 y46=y6(i)-y4(i)
461 z17=z7(i)-z1(i)
462 z28=z8(i)-z2(i)
463 z35=z5(i)-z3(i)
464 z46=z6(i)-z4(i)
465 aj1(i)=x17+x28-x35-x46
466 aj2(i)=y17+y28-y35-y46
467 aj3(i)=z17+z28-z35-z46
468 a17=x17+x46
469 a28=x28+x35
470 b17=y17+y46
471 b28=y28+y35
472 c17=z17+z46
473 c28=z28+z35
474 aj4(i)=a17+a28
475 aj5(i)=b17+b28
476 aj6(i)=c17+c28
477 aj7(i)=a17-a28
478 aj8(i)=b17-b28
479 aj9(i)=c17-c28
480 ENDDO
481 DO i=lft,llt
482 jac_59_68(i)=aj5(i)*aj9(i)-aj6(i)*aj8(i)
483 jac_67_49(i)=aj6(i)*aj7(i)-aj4(i)*aj9(i)
484 jac_48_57(i)=aj4(i)*aj8(i)-aj5(i)*aj7(i)
485 ENDDO
486 DO i=lft,llt
487 dett(i)=one_over_64*(aj1(i)*jac_59_68(i)+aj2(i)*jac_67_49(i)+aj3(i)*jac_48_57(i))
488 ENDDO
489 gbuf%VOL(lft:llt) = dett(lft:llt)
490 endif
491 ENDIF
492 ENDIF
493 ENDIF
494 ENDIF
495 ENDDO
496
497
498
499
500
501
503
504 DO ib=nbf,nbl
507 ENDDO
508 DO ib=nbf,nbl
509
510
511 ldone = .false.
512 DO ng=1,ngroup
513 nel=iparg(2,ng)
514 nfl=iparg(3,ng)
515 IF((idb(ib)>nfl).AND.(idb(ib)<=nfl+nel))THEN
516 IF(iparg(11,ng)==1) jeul = 1
517 IF(iparg(7,ng)==1) jale
518 idlocb(ib) = idb(ib) - nfl
519 ngb(ib) = ng
522 nelb(ib) = nel
523 ldone =.true.
524 gbuf => elbuf_tab(ngb(ib))%GBUF
526 gbuf%TAG22(idlocb(ib)) = ib
527 EXIT
528 ELSE
529 cycle
530 ENDIF
531 if (.NOT.(ldone))then
532 write( *,*) "int 22 : error in group sorting"
533 stop 2201
534 end if
535 ENDDO
536 ENDDO
537
539
540
541
542
543 DO ib=nbf,nbl
544 brickid = idb(ib)
545 iad2 = ale_connectivity%ee_connect%iad_connect(brickid)
546 lgth2 = ale_connectivity%ee_connect%iad_connect(brickid+1) -
547 . ale_connectivity%ee_connect%iad_connect(brickid)
548 DO j=1,lgth2
549 idv
555 IF(idv>0)THEN
556 iad3 = ale_connectivity%ee_connect%iad_connect(idv)
557 lgth3 = ale_connectivity%ee_connect%iad_connect(idv+1) -
558 . ale_connectivity%ee_connect%iad_connect(idv)
559 DO jv=1,lgth3
560 IF(ale_connectivity%ee_connect%connected(iad3 + jv - 1)==brickid)THEN
562 EXIT
563 ENDIF
564 enddo
566 gbufv => elbuf_tab(ngv)%GBUF
567 iad22 = gbufv%TAG22(idlocv)
569 brick_list(nin,ib)%Adjacent_Brick(j,3) = idlocv
570 brick_list(nin,ib)%Adjacent_Brick(j,4) = iad22
571 IF (iad22==0 .AND.
brick_list(nin,ib)%NBCUT>0)
THEN
572 print *, "**error : inter22 : Lagrangian Surface seems to"
573 print *, " reach eulerian boundary domain. "
574 print *, " Check Surface location and GRBRICK definition"
575 " near related Brick_ID =", ixs(11,
brick_list(nin,ib)%id)
576
577
578 stop 2202
579 ENDIF
580 ELSEIF(idv==0)THEN
584 ELSEIF(idv<0)THEN
585 write (*,*) "unavailable in SPMD"
586 stop 2203
587 ENDIF
588 ENDDO
589 ENDDO
590
591
592
593
594 DO ib=nbf,nbl
595 brickid = idb(ib)
596 IF(i22_aleul==2)THEN
597 n(1:3,1) = (/ veul(14,brickid) , veul(20,brickid) , veul(26,brickid) /)
598 n(1:3,2) = (/ veul(15,brickid) , veul(21,brickid) , veul(27,brickid) /)
599 n(1:3,3) = (/ veul(16,brickid) , veul(22,brickid) , veul(28,brickid) /)
600 n(1:3,4) = (/ veul(17,brickid) , veul(23,brickid) , veul(29,brickid) /)
601 n(1:3,5) = (/ veul(18,brickid) , veul(24,brickid) , veul(30,brickid
602 n(1:3,6) = (/ veul(19,brickid) , veul(25,brickid) , veul(31,brickid
603 brick_list(nin,ib)%N(1,1:3) = n(1:3,1) / sqrt(sum(n(1:3,1)*n(1:3,1)))
604 brick_list(nin,ib)%N(2,1:3) = n(1:3,2) / sqrt(sum(n(1:3,2)*n(1:3,2)))
605 brick_list(nin,ib)%N(3,1:3) = n(1:3,3) / sqrt(sum(n(1:3,3)*n(1:3,3)))
606 brick_list(nin,ib)%N(4,1:3) = n(1:3,4) / sqrt(sum(n(
607 brick_list(nin,ib)%N(5,1:3) = n(1:3,5) / sqrt(sum(n(1:3,5)*n(1:3,5)))
608 brick_list(nin,ib)%N(6,1:3) = n(1:3,6) / sqrt(sum(n(1:3,6)*n(1:3,6)))
609 ELSEIF(i22_aleul==1)THEN
610 ii = brickid
611
612 nc1=ixs(2,ii)
613 nc2=ixs(3,ii)
614 nc3=ixs(4,ii)
615 nc4=ixs(5,ii)
616 nc5=ixs(6,ii)
617 nc6=ixs(7,ii)
618 nc7=ixs(8,ii)
619 nc8=ixs(9,ii)
620
621
622 x1_=x(1,nc1)
623 y1_=x(2,nc1)
624 z1_=x(3,nc1)
625
626 x2_=x(1,nc2)
627 y2_=x(2,nc2)
628 z2_=x(3,nc2)
629
630 x3_=x(1,nc3)
631 y3_=x(2,nc3)
632 z3_=x(3,nc3)
633
634 x4_=x(1,nc4)
635 y4_=x(2,nc4)
636 z4_=x(3,nc4)
637
638 x5_=x(1,nc5)
639 y5_=x(2,nc5)
640 z5_=x(3,nc5)
641
642 x6_=x(1,nc6)
643 y6_=x(2,nc6)
644 z6_=x(3,nc6)
645
646 x7_=x(1,nc7)
647 y7_=x(2,nc7)
648 z7_=x(3,nc7)
649
650 x8_=x(1,nc8)
651 y8_=x(2,nc8)
652 z8_=x(3,nc8)
653
654
655 n(1,1)=(y3_-y1_)*(z2_-z4_) - (z3_-z1_)*(y2_-y4_)
656 n(2,1)=(z3_-z1_)*(x2_-x4_) - (x3_-x1_)*(z2_-z4_)
657 n(3,1)=(x3_-x1_)*(y2_-y4_) - (y3_-y1_)*(x2_-x4_)
658
659 n(1,2)=(y7_-y4_)*(z3_-z8_) - (z7_-z4_)*(y3_-y8_)
660 n(2,2)=(z7_-z4_)*(x3_-x8_) - (x7_-x4_)*(z3_-z8_)
661 n(3,2)=(x7_-x4_)*(y3_-y8_) - (y7_-y4_)*(x3_-x8_)
662
663 n(1,3)=(y6_-y8_)*(z7_-z5_) - (z6_-z8_)*(y7_-y5_)
664 n(2,3)=(z6_-z8_)*(x7_-x5_) - (x6_-x8_)*(z7_-z5_)
665 n(3,3)=(x6_-x8_)*(y7_-y5_) - (y6_-y8_)*(x7_-x5_)
666
667 n(1,4)=(y2_-y5_)*(z6_-z1_) - (z2_-z5_)*(y6_-y1_)
668
669 n(3,4)=(x2_-x5_)*(y6_-y1_) - (y2_-y5_)*(x6_-x1_)
670
671 n(1,5)=(y7_-y2_)*(z6_-z3_
672 n(2,5)=(z7_-z2_)*(x6_-x3_) - (x7_-x2_)*(z6_-z3_)
673 n(3,5)=(x7_-x2_)*(y6_-y3_) - (y7_-y2_)*(x6_-x3_)
674
675 n(1,6)=(y8_-y1_)*(z4_-z5_) - (z8_-z1_)*(y4_-y5_)
676 n(2,6)=(z8_-z1_)*(x4_-x5_) - (x8_-x1_)*(z4_-z5_)
677 n(3,6)=(x8_-x1_)*(y4_-y5_) - (y8_-y1_)*(x4_-x5_)
678
680 brick_list(nin,ib)%N(2,1:3) = n(1:3,2) / sqrt(sum(n(1:3,2)*n(1:3,2)))
682 brick_list(nin,ib)%N(4,1:3) = n(1:3,4) / sqrt(sum(n(1:3,4)*n(1:3,4)))
683 brick_list(nin,ib)%N(5,1:3) = n(1:3,5) / sqrt(sum(n(1:3,5)*n(1:3,5)))
684 brick_list(nin,ib)%N(6,1:3) = n(1:3,6) / sqrt(sum(n(1:3,6)*n(1:3,6)))
685 ENDIF
686
687 DO j=1,nv46
688
689 f(j,ib) = half * sqrt( sum( n(:,j) * n(:,j) ) )
690 ENDDO
692
693
694
695
696! pface(6)%p(1:6) =>
brick_list(nin,ib)%POLY(6)%FACE(1:6)%Surf
697
698
699
700 pfullface =>
brick_list(nin,ib)%Face_BRICK(1:6)
701 pfullface(1:6) = f(1:6,ib)
703 pface(1)%FACE(1:6)%Surf = f(1:6,ib)
704 cycle
705 ENDIF
707 DO icell=1,ncell
708
709 IF(
brick_list(nin,ib)%POLY(icell)%Vnew<zero)
THEN
710 DO j=1,nv46
711 pface(icell)%FACE(j)%Surf = f(j,ib) + pface(icell)%FACE(j)%Surf
712 if(pface(icell)%FACE(j)%Surf<zero)then
713 write (*,*) "**error : inter22 negative cell face"
714 endif
715 enddo
716 ENDIF
717
719 IF(vol<zero)THEN
720 gbuf => elbuf_tab(ngb(ib))%GBUF
721 brick_list(nin,ib)%POLY(icell)%Vnew = gbuf%VOL(idlocb(ib)) + vol
722 ENDIF
723 volratio =
brick_list(nin,ib)%POLY(icell)%Vnew / elbuf_tab(ngb(ib))%GBUF%VOL(idlocb(ib))
724
725 IF(abs(volratio) <= em04)THEN
726 i22_degenerated = 1
727 ENDIF
728 enddo
729 ENDDO
730
731
732
733
734
735
736
737
738
739 DO ib=nbf,nbl
740 plistnodid(1)%p(1:8) =>
brick_list(nin,ib)%POLY(1)%ListNodID(1:8)
741 plistnodid(2)%p(1:8) =>
brick_list(nin,ib)%POLY(2)%ListNodID(1:8)
742 plistnodid(3)%p(1:8) =>
brick_list(nin,ib)%POLY(3)%ListNodID(1:8)
743 plistnodid(4)%p(1:8) =>
brick_list(nin,ib)%POLY(4)%ListNodID(1:8)
744 plistnodid(5)%p(1:8) =>
brick_list(nin,ib)%POLY(5)%ListNodID(1:8)
745 plistnodid(6)%p(1:8) =>
brick_list(nin,ib)%POLY(6)%ListNodID(1:8)
746 plistnodid(7)%p(1:8) =>
brick_list(nin,ib)%POLY(7)%ListNodID(1:8)
747 plistnodid(8)%p(1:8) =>
brick_list(nin,ib)%POLY(8)%ListNodID(1:8)
748 plistnodid(9)%p(1:8) =>
brick_list(nin,ib)%POLY(9)%ListNodID(1:8)
750 pwhichcellnod(1:8) =>
brick_list(nin,ib)%NODE(1:8)
752
753
754
755
756
757
758
759
764 IF(ncell/=0)THEN
765
768 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(6)%Surf = f(6,ib)-sum( (/ (
brick_list(nin,ib)%POLY(k)%FACE(6)%Surf,k=1,ncell)/) )
774
777 mnod = 0
778 ppoint(1:3) = zero
779
780 DO j=1,8
781 IF(pwhichcellnod(j)%WhichCell/=0) cycle
782 pwhichcellnod(j)%WhichCell = 9
783 mnod = mnod + 1
784 plistnodid(9)%p(mnod) = j
785
786 ppoint(2) = ppoint(2) + x(2,ixs(1+j,
id))
787 ppoint(3) = ppoint(3) + x(3,ixs(1+j,
id))
788 ENDDO
791 . sum(
brick_list(nin,ib)%POLY(1:ncell)%NumPOINT ) - sum
792 gbuf => elbuf_tab(ngb
794 uncutvol = gbuf%VOL(idlocb(ib))
796 . .OR. abs(
brick_list(nin,ib)%POLY(1)%Vnew /uncutvol) <em04)
THEN
797 i22_degenerated = 1
798 ENDIF
799
800
802 k1
803 DO j=1,12
805 DO i=1,nbcut
806 pointtmp(1:3) =
brick_list(nin,ib)%EDGE(j)%CUTPOINT(1:3,i)
807 ppoint(1) = ppoint(1) + pointtmp
808 ppoint(2)
809 ppoint(3) = ppoint(3) + pointtmp(3)
810 k1 = k1 + 1
811 ENDDO
812 ENDDO
813 IF(npoint/=0)THEN
814 ppoint(1) = ppoint(1) / (k1+mnod)
815 ppoint(2) = ppoint(2) / (k1+mnod)
816 ppoint(3) = ppoint(3) / (k1+mnod)
817 brick_list(nin,ib)%POLY(9)%CellCENTER(1:3) = ppoint
818 ENDIF
819 endif
820 enddo
821
822
823
824
825 DO ib=nbf,nbl
828 psubvol(1:9)%Vnew = 0
829 gbuf => elbuf_tab(ngb(ib))%GBUF
830 psubvol(1)%Vnew = gbuf%VOL(idlocb(ib))
831 brick_list(nin,ib)%Vnew_SCell = gbuf%VOL(idlocb(ib))
832 ENDIF
833 ENDDO
834
835
836
837
838 DO ib=nbf,nbl
840 ENDDO
841
842 9 CONTINUE
843
844
845
846
847
848
849 DO ib=nbf,nbl
852 IF(ncell<= 1) cycle
853 DO j=1,6
854 face =
brick_list(nin,ib)%POLY(9)%FACE(j)%Surf
855 IF(face ==zero) cycle
856
857 lfound = .false.
858 DO k=1,4
860 icell =
brick_list(nin,ib)%NODE(inod)%WhichCell
861 IF(icell == 9) lfound = .true.
862 ENDDO
863 IF(lfound)cycle
864
866 enddo
867
868 enddo
869
870
871
872 DO ib=nbf,nbl
874
875 ENDDO
876
877
878
879
880
881 DO ib=nbf,nbl
888 gbuf => elbuf_tab(ng)%GBUF
889 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
890 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
891 llt_ = iparg(2,ng)
892 icell = 0
893 IF(mcell==0)THEN
906
907 IF(i22law37+i22law51 == 0) cycle
913 IF(i22law51 == 0) cycle
914 DO k=6, i22law51
916 enddo
917 ELSE
918 brick_list(nin,ib)%bakMAT%RHO = gbuf%RHO(idloc)
919 brick_list(nin,ib)%bakMAT%rhoE = gbuf%EINT(idloc)
920 brick_list(nin,ib)%bakMAT%rhoU(1) = gbuf%MOM(llt_*(1-1) +idloc)
921 brick_list(nin,ib)%bakMAT%rhoU(2) = gbuf%MOM(llt_*(2-1) +idloc)
922 brick_list(nin,ib)%bakMAT%rhoU(3) = gbuf%MOM(llt_*(3-1) +idloc)
923 brick_list(nin,ib)%bakMAT%ssp = lbuf%SSP(idloc)
924 brick_list(nin,ib)%bakMAT%SIG(1) = gbuf%SIG(llt_*(1-1) +idloc)
925 brick_list(nin,ib)%bakMAT%SIG(2) = gbuf%SIG(llt_*(2-1) +idloc)
926 brick_list(nin,ib)%bakMAT%SIG(3) = gbuf%SIG(llt_*(3-1) +idloc)
927 brick_list(nin,ib)%bakMAT%SIG(4) = gbuf%SIG(llt_*(4-1) +idloc)
928 brick_list(nin,ib)%bakMAT%SIG(5) = gbuf%SIG(llt_*(5-1) +idloc)
929 brick_list(nin,ib)%bakMAT%SIG(6) = gbuf%SIG(llt_*(6-1) +idloc)
930
931
932 IF(mlw/=37 .AND. mlw/=51)cycle
933 brick_list(nin,ib)%bakMAT%UVAR(1) = mbuf%VAR((1-1)*llt_+idloc)
934 brick_list(nin,ib)%bakMAT%UVAR(2) = mbuf%VAR((2-1)*llt_+idloc)
935 brick_list(nin,ib)%bakMAT%UVAR(3) = mbuf%VAR((3-1)*llt_+idloc)
936 brick_list(nin,ib)%bakMAT%UVAR(4) = mbuf%VAR((4-1)*llt_+idloc)
937 brick_list(nin,ib)%bakMAT%UVAR(5) = mbuf%VAR((5-1)*llt_+idloc)
938 IF(i22law51 == 0) cycle
939 DO k=6, i22law51
940 brick_list(nin,ib)%bakMAT%UVAR(k) = mbuf%VAR((k-1)*llt_+idloc)
941 enddo
942 ENDIF
943 enddo
944
945
947
948
949
950
951
952 DO ib=nbf,nbl
954
955
956
957! pface(5)%p(1:6) =>
brick_list(nin,ib)%POLY(5)%FACE(1:6)%Surf
958
959
960
961
962
963 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
964 plistnodid(1)%p(1:8) =>
brick_list(nin,ib)%POLY(1)%ListNodID(1:8)
965 plistnodid(2)%p(1:8) =>
brick_list(nin,ib)%POLY(2)%ListNodID(1:8)
966 plistnodid(3)%p(1:8) =>
brick_list(nin,ib)%POLY(3)%ListNodID(1:8)
967 plistnodid(4)%p(1:8) =>
brick_list(nin,ib)%POLY(4)%ListNodID(1:8)
968 plistnodid(5)%p(1:8) =>
brick_list(nin,ib)%POLY(5)%ListNodID(1:8)
969 plistnodid(6)%p(1:8) =>
brick_list(nin,ib)%POLY(6)%ListNodID(1:8)
970 plistnodid(7)%p(1:8) =>
brick_list(nin,ib)%POLY(7)%ListNodID(1:8)
971 plistnodid(8)%p(1:8) =>
brick_list(nin,ib)%POLY(8)%ListNodID(1:8)
972 plistnodid(9)%p(1:8) =>
brick_list(nin,ib)%POLY(9)%ListNodID(1:8)
975
976 DO k=1,6
977 brick_list(nin,ib)%POLY(1:9)%FACE(k)%Adjacent_Cell(1) = 0
978 brick_list(nin,ib)%POLY(1:9)%FACE(k)%Adjacent_Cell(2) = 0
979 brick_list(nin,ib)%POLY(1:9)%FACE(k)%Adjacent_Cell(3) = 0
980 brick_list(nin,ib)%POLY(1:9)%FACE(k)%Adjacent_Cell(4) = 0
981 brick_list(nin,ib)%POLY(1:9)%FACE(k)%Adjacent_Cell(5) = 0
982 brick_list(nin,ib)%POLY(1:9)%FACE(k)%NAdjCell = 0
983 ENDDO
984 icell = 0
985 DO WHILE (icell<=ncell)
986 icell = icell +1
987 IF (icell>ncell .AND. ncell/=0)icell=9
988 DO j=1,nv46
989 IF(pface(icell)%FACE(j)%Surf>zero)THEN
990 iv = padjbrick(j,1)
991 IF(iv==0)cycle
992
993 iad22 = padjbrick(j,4)
994 IF(iad22 == 0)THEN
995
996 brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell = 1
997 brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(1) = 1
999 !adjacent brick is in cut cell buffer but is uncut
1000 brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell = 1
1001 brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(1) = 1
1002 ELSE
1003
1004 pwhichcellnodv(1:8) =>
brick_list(nin,iad22)%NODE(1:8)
1005
1006 nnodes = 0
1007 DO k1=1,
brick_list(nin,ib)%POLY(icell)%NumNOD
1008 DO k2=1,4
1009 IF(plistnodid(icell)%p(k1) ==
int22_buf%nodFACE(j,k2))
THEN
1010 nnodes = nnodes +1
1011 inodes(nnodes) = ixs(1+
int22_buf%nodFACE(j,k2),
id)
1012 ENDIF
1013 ENDDO
1014 ENDDO
1015
1016 icelltag(1:9) = 0
1017 jv = padjbrick(j,5)
1018 DO k0=1,4
1020 DO in=1,nnodes
1021 IF(ixs(1+k1,iv)==inodes(in) )THEN
1022 icellv = pwhichcellnodv(k1)%WhichCell
1023 if (icellv==0)then
1024 print *, "ITASK,ICELLv,pWhichCellNodv(K1)",itask,icellv,pwhichcellnodv(k1)%WhichCell
1025 stop 2245
1026 endif
1027 IF(icelltag(icellv)==0)THEN
1028 icelltag( icellv ) = 1
1029 brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell + 1
1030 nadjcell =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
1031 brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(nadjcell) = icellv
1032 ENDIF
1033 ENDIF
1034 enddo
1035 enddo
1036 endif!testing iv & ibv
1037 endif
1038
1039
1040 poly9wonodes =
brick_list(nin,ib)%Poly9woNodes(j,1)
1041
1042 IF(poly9wonodes == 1)THEN
1045 IF(ibv==0)THEN
1047 cycle
1048 ENDIF
1050 poly9wonodesv =
brick_list(nin,ibv)%Poly9woNodes
1051 IF(poly9wonodesv==0)THEN
1053 IF(nbcutv == 0)THEN
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1068
1069
1070
1071
1072 ELSE
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1085 brick_list(nin,ib)%POLY(9)%FACE(j)%Adjacent_Cell(nadjcell) = 9
1087 ENDIF
1088 ELSEIF(poly9wonodesv/=0)THEN
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1101 nadjcell =
brick_list(nin,ib)%POLY(9)%FACE(j)%NAdjCell
1102 brick_list(nin,ib)%POLY(9)%FACE(j)%Adjacent_Cell(nadjcell) = 9
1104 endif
1105 ENDIF
1106 enddo
1107 enddo
1108 enddo
1109
1110
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 DO ib=nbf,nbl
1147 DO j=1,6
1148 icode = 0
1150 IF(iv==0)cycle
1151 DO k=1,4
1153 icell =
brick_list(nin,ib)%NODE(inod)%WhichCell
1154 icode = ibset(icode,icell)
1155 ENDDO
1156
1157
1158 IF(icode == 518 .OR. icode == 6) THEN
1159 face9 =
brick_list(nin,ib)%POLY(9)%FACE(j)%Surf
1161
1163 IF(nbcutv == 0 .AND. face9>zero) THEN
1164
1166
1167
1168 ENDIF
1169 ENDIF
1170
1171 poly9wonodes =
brick_list(nin,ib)%Poly9woNodes(j,1)
1172 icellv =
brick_list(nin,ib)%Poly9woNodes(j,2)
1173 IF(poly9wonodes /=0 .AND. icellv /= 0)cycle
1174 IF(poly9wonodes==0 .AND. icode /= 518)cycle
1175
1176 np = 0
1177 ppoint(1:3) = zero
1178 cut_vel(1:3)
1179 nbcutprev
1180 DO inod=4,1,-1
1181
1182 pointtmp(1:3) = x(1:3,ixs(1+
int22_buf%NodFace(j,inod),ie))
1183 ppoint(1) = ppoint(1) + pointtmp(1)
1184 ppoint(2) = ppoint(2) + pointtmp(2)
1185 ppoint(3) = ppoint(3) + pointtmp
1186
1188 isgn(1:2) = (/1,2/)
1189 IF(iedg < 0) isgn(1:2) = (/2,1/)
1190 iedg = iabs(iedg)
1192 IF(nbcut == 0)THEN
1193 cycle
1194 ELSEIF(nbcut == 1)THEN
1195 np = np + 1
1196 cut_point(1:3) =
brick_list(nin,ib)%Edge(iedg)%CUTPOINT(1:3,1)
1197 brick_list(nin,ib)%PCUT(8+j)%P(1:3,np) = cut_point(1:3)
1198 cut_vel(1:3)
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209 ELSE
1210 np = np + 1
1211 cut_point(1:3) =
brick_list(nin,ib)%Edge(iedg)%CUTPOINT(1:3,isgn(1))
1212 brick_list(nin,ib)%PCUT(8+j)%P(1:3,np) = cut_point(1:3)
1213 cut_vel(1:3) = cut_vel(1:3
1214 np = np + 1
1215 cut_point(1:3) =
brick_list(nin,ib)%Edge(iedg)%CUTPOINT(1:3,isgn(2))
1216 cut_vel(1:3) = cut_vel(1:3) +
brick_list(nin,ib)%Edge(iedg)%CUTVEL(1:3,isgn(2))
1217 brick_list(nin,ib)%PCUT(8+j)%P(1:3,np) = cut_point(1:3)
1218 ENDIF
1219 nbcutprev = nbcut
1220 enddo
1223 brick_list(nin,ib)%PCUT(8+j)%B(2) = fourth * ppoint(2)
1224 brick_list(nin,ib)%PCUT(8+j)%B(3) = fourth * ppoint(3)
1227
1228 brick_list(nin,ib)%PCUT(8+j)%Vel(1:3) = cut_vel(1:3) / (np*one)
1229 ppoint(1:3) =
brick_list(nin,ib)%PCUT(8+j)%B(1:3)
1230 vectmp(1:3) =
i22aera(np,
brick_list(nin,ib)%PCUT(8+j)%P(1:3,1:np), ppoint(1:3) )
1231 face = sqrt(sum(vectmp(1:3)*vectmp(1:3)))
1233 enddo
1234 enddo
1235
1236
1237
1239
1240
1241
1242
1243
1244 nbl1 = nbl
1245 IF(i22_degenerated == 1)THEN
1246 ALLOCATE (destroy_data(7,2*
nb))
1247 ELSE
1248 nbl1 = 0
1249 ENDIF
1250
1252
1253 ipos = 0
1254 DO ib=nbf,nbl1
1256 icell = 0
1257 DO WHILE (icell<=ncell)
1258 icell = icell +1
1259 IF (icell>ncell .AND. ncell/=0)icell=9
1262 ratio = vol / uncutvol
1263 IF(abs(ratio)>em04)cycle
1264 idloc = maxloc(
brick_list(nin,ib)%POLY(icell)%FACE(1:6)%SURF,1)
1265 ratiof =
brick_list(nin,ib)%POLY(icell)%FACE(idloc)%SURF /
brick_list(nin,ib)%Face_Brick(idloc)
1266
1267
1268 j = idloc
1269 nadjcell =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
1270 DO iadj = 1,nadjcell
1271 icellv =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(iadj)
1277 ratiov = volv/uncutvolv
1278
1279 IF(abs(ratiov)>em04 .OR. ibv>ib )cycle
1280
1281 ipos = ipos + 1
1282 destroy_data(1,ipos) = nin
1283 destroy_data(2,ipos) = ib
1284 destroy_data(3,ipos) = icell
1285 destroy_data(4,ipos) = icellv
1286 destroy_data(5,ipos) = ibv
1287 destroy_data(6,ipos) = j
1288 destroy_data(7,ipos) = jv
1289
1290 enddo
1291
1292 enddo
1293 enddo
1294
1295
1297 print *, ""
1298 print *, " |------i22_destroy_cell.F-------|"
1299 print *, " | INITIALIZATION SUBROUTINE |"
1300 print *, " |-------------------------------|"
1301 print *, ""
1302 endif
1303
1304
1306
1307
1308 DO i=1,ipos
1309 ib = destroy_data(2,i)
1310 icell = destroy_data(3,i)
1311 icellv = destroy_data(4,i)
1312 ibv = destroy_data(5,i)
1313 j = destroy_data(6,i)
1314 jv = destroy_data(7,i)
1315
1316 CALL destroy_cell( nin, ib,icell,icellv,ibv,j,jv, ixs, itask)
1317 ENDDO
1318
1319 IF(i22_degenerated == 1)THEN
1320
1322
1323
1324 i22loop = i22loop + 1
1325 if(i22loop >= 2)then
1326 print *, "**error : inter22, unexpected situation."
1327 endif
1328 i22_degenerated = 0
1329 GOTO 9
1330 ENDIF
1331
1332
1333
1334
1335
1336 DO ib=nbf,nbl
1340 pismain(1:9)%IsMain = 0
1341 pmainid = 0
1343 pismain(1)%IsMain = 1
1344 pmainid = 1
1345 cycle
1346 ENDIF
1347 gbuf => elbuf_tab(ngb(ib))%GBUF
1350 icell = 0
1351
1352 DO WHILE (icell<=ncell)
1353 icell = icell +1
1354 IF (icell>ncell .AND. ncell/=0)icell=9
1355
1356 volcell =
brick_list(nin,ib)%POLY(icell)%Vnew
1357 fac = volcell / vol
1358 IF(fac>critmerge22)THEN
1359
1360 pismain(icell)%IsMain = 1
1361 ENDIF
1362 enddo
1363 k = sum(pismain(1:9)%IsMain)
1364
1365 IF(k==1)THEN
1366 pmainid = maxloc(pismain(1:9)%IsMain,1)
1367 ELSEIF(k>=2)THEN
1369 pismain(1:9)%IsMain = 0
1370 pismain(mcell)%IsMain = 1
1371 pmainid = mcell
1372
1373 ELSEIF(k==0)THEN
1374 pismain(9)%IsMain = 1
1375 pmainid = 9
1376 ENDIF
1377 enddo
1378
1379
1381
1382
1383
1384
1385 n_unlinked_l(itask) = 0
1386
1387 DO ib=nbf,nbl
1390 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
1391
1392
1395 mcell = pmainid
1396 icell = 0
1397 brick_list(nin,ib)%POLY(1:9)%WhereIsMain(1) = 0
1398 brick_list(nin,ib)%POLY(1:9)%WhereIsMain(2) = 0
1399 brick_list(nin,ib)%POLY(1:9)%WhereIsMain(3) = 0
1400 brick_list(nin,ib)%POLY(1:9)%WhereIsMain(4) = 0
1401 IF(ncell == 0) THEN
1402 brick_list(nin,ib)%POLY(mcell)%WhereIsMain(3) = ie
1403 brick_list(nin,ib)%POLY(mcell)%WhereIsMain(4) = ib
1404 cycle
1405 ENDIF
1406 DO WHILE (icell<=ncell)
1407 icell = icell +1
1408 IF (icell>ncell .AND. ncell
1409
1410
1411 IF(icell == mcell)THEN
1412 brick_list(nin,ib)%POLY(icell)%WhereIsMain(1:2) = 0
1413 brick_list(nin,ib)%POLY(icell)%WhereIsMain(3) = ie
1414 brick_list(nin,ib)%POLY(icell)%WhereIsMain(4) = ib
1415 ELSE
1416 adjmain_face(1:6) = zero
1417 adjmain_centroid(1:3,1:6) = zero
1418 idadj_mcellv(1:6) = 0
1419 ivadj_mcellv(1:6) = 0
1420 ibadj_mcellv(1:6) = 0
1421
1422 IF(sum(
brick_list(nin,ib)%POLY(icell)%FACE(1:6)%NAdjCell) == 0)
THEN
1423 print *, "**error : inter22 - Cell trapped. Check Lagrangian Surface surrounding BRICK ID:",
1425 cycle
1426 ENDIF
1427 DO j=1,nv46
1428 nadjcell =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
1429 IF(nadjcell == 0)cycle
1430 iv = padjbrick(j,1)
1431 ibv = padjbrick(j,4)
1432 IF(ibv==0)THEN
1433 adjmain_face(j) =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Surf
1434 idadj_mcellv(j) = 1
1435 ivadj_mcellv(j) = iv
1436 ibadj_mcellv(j) = 0
1437 adjmain_centroid(1,j) = sum(x(1,ixs(2:9,iv))) / eight
1438 adjmain_centroid(2,j) = sum(x(2,ixs(2:9,iv))) / eight
1439 adjmain_centroid(3,j) = sum(x(3,ixs(2:9,iv))) / eight
1440 ELSE
1441 DO k=1,nadjcell
1442 icellv =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(k)
1443 jv = padjbrick(j,5)
1444 IF(
brick_list(nin,ibv)%POLY(icellv)%IsMain == 1)
THEN
1445 adjmain_face(j) =
min(
brick_list(nin,ib)%POLY(icell)%FACE(j)%Surf,
1446 .
brick_list(nin,ibv)%POLY(icellv)%FACE(jv)%Surf)
1447 adjmain_centroid(1:3,j) =
brick_list(nin,ibv)%POLY(icellv)%CellCenter(1:3)
1448 idadj_mcellv(j) = icellv
1449 ivadj_mcellv(j) = iv
1450 ibadj_mcellv(j) = ibv
1451 EXIT
1452 ENDIF
1453 enddo
1454 ENDIF
1455 ENDDO
1456 sumface = sum(adjmain_face(1:6))
1457 IF(sumface==zero)THEN
1458
1459 n_unlinked_l(itask) = n_unlinked_l(itask) + 1
1460 unlinked_cells_l(itask,1,n_unlinked_l(itask)) = ib
1461 unlinked_cells_l(itask,2,n_unlinked_l(itask)) = icell
1462 cycle
1463 ENDIF
1464
1465
1466 ipos = maxloc(adjmain_face(1:6),1)
1467 brick_list(nin,ib)%POLY(icell)%WhereIsMain(1) = ipos
1468 brick_list(nin,ib)%POLY(icell)%WhereIsMain(2) = idadj_mcellv(ipos)
1469 brick_list(nin,ib)%POLY(icell)%WhereIsMain(3) = ivadj_mcellv(ipos)
1470 brick_list(nin,ib)%POLY(icell)%WhereIsMain(4) = ibadj_mcellv(ipos)
1471 ENDIF
1472 enddo
1473 ENDDO
1474
1476
1478 . print *, " **SINIT** : UNLINKED CELL SYNTHESIS "
1479 DO i=1,n_unlinked_l(itask)
1480 ib = unlinked_cells_l(itask,1,i)
1481 icell = unlinked_cells_l(itask,2,i)
1483 ENDDO
1485
1486
1487
1488
1489
1490 DO ib=nbf,nbl
1493 IF(mcell == 0) cycle
1494
1496 nsecndnod = 0
1497 numsecnd = 0
1500 DO j=1,nv46
1503 idlocv =
brick_list(nin,ib)%Adjacent_Brick(j,3)
1506 nadj =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%NAdjCell
1507 IF(ibv==0)cycle
1508 DO iadj = 1,nadj
1509 icellv =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%Adjacent_Cell(iadj)
1510 ie_m =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(3)
1511 IF(ie_m/=ie)cycle
1512
1513 numsecnd = numsecnd + 1
1514 nsecndnod = nsecndnod +
brick_list(nin,ibv)%POLY(icellv)%NumNOD
1515 brick_list(nin,ib)%SecndList%FM(numsecnd) = j
1516 brick_list(nin,ib)%SecndList%FV(numsecnd) = ifv
1517 brick_list(nin,ib)%SecndList%IV(numsecnd) = iv
1518 brick_list(nin,ib)%SecndList%IBV(numsecnd) = ibv
1519 brick_list(nin,ib)%SecndList%ICELLv(numsecnd) = icellv
1522 brick_list(nin,ib)%SecndList%ListNodID(numsecnd,1:8) =
brick_list(nin,ibv)%POLY(icellv)%ListNodID(1:8)
1523 brick_list(nin,ib)%SecndList%SURF_v(numsecnd) =
brick_list(nin,ibv)%POLY(icellv)%FACE(ifv)%SURF
1524 enddo
1526 enddo
1527 brick_list(nin,ib)%SecndList%NumSecndNodes = nsecndnod
1528 ENDDO
1529
1530
1531
1532
1533
1534
1535 DO iunlink=1,n_unlinked_l(itask)
1536 ib = unlinked_cells_l(itask,1,iunlink)
1537 icell = unlinked_cells_l(itask,2,iunlink)
1538 adjface(:,:) = zero
1539 ipos = 0
1540 DO j=1,nv46
1541 nadj =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
1543
1544 DO iadj=1,nadj
1546 icellv =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(iadj)
1547 ipos =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(1)
1548 IF(ipos==0)cycle
1549 IF(ibv/=0)THEN
1550 adjface(j,iadj) =
min(
brick_list(nin,ib)%POLY(icell)%FACE(j)%Surf,
1551 .
brick_list(nin,ibv)%POLY(icellv)%FACE(jv)%Surf)
1552 ELSE
1553 adjface(j,iadj) =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Surf
1554 ENDIF
1555 ENDDO
1556 ENDDO
1557 ires(1:2) = maxloc(adjface)
1558 iposf = ires(1)
1559 iposiadj = ires(2)
1560 ibv =
brick_list(nin,ib)%Adjacent_Brick(iposf,4)
1561 icellv =
brick_list(nin,ib)%POLY(icell)%FACE(iposf)%Adjacent_Cell(iposiadj)
1562 ipos = 0
1563 IF(icellv/=0)
1564 . ipos =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(1)
1565 IF(ipos==0 .OR. adjface(ires(1),iresTHEN
1566 print *,
"***error : inter22 unable to treat cell ",ixs(11,
brick_list(nin,ib)%ID)
1567 print *, " Cell seems trapped with no adjacent cells"
1568 stop 2207
1569 ENDIF
1570 IF(ipos>=10)THEN
1571 print *,
"***error : inter22 unable to treat cell ",ixs(11,
brick_list(nin,ib)%ID)
1572 print *, " Cell seems trapped with no adjacent cells"
1573 print *, " Fluid mesh in interaction area should be refined"
1574 stop 2208
1575 ENDIF
1576 j = iposf*10 + ipos
1577 brick_list(nin,ib)%POLY(icell)%WhereIsMain(1) = j
1579 brick_list(nin,ib)%POLY(icell)%WhereIsMain(3) =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(3)
1580 brick_list(nin,ib)%POLY(icell)%WhereIsMain(4) =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(4)
1582 write(*,fmt=
'(A,I10,A1,I1,A,I2,I2,A1,I2,A2)')
"unlinked cell:", ixs(11,
brick_list(nin,ib)%ID),
1583 . ".",icell, " is now linked to faces ", iposf, ipos,"(",j," )"
1584 ENDIF
1585 ENDDO
1586
1587
1588
1589
1590
1591
1592
1594
1595
1596
1597DO
1598 DO iunlink=1,n_unlinked_l(it)
1599 ib = unlinked_cells_l(it,1,iunlink)
1600 icell = unlinked_cells_l(it,2,iunlink)
1601 ibm =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(4)
1603
1604
1605
1606 IF(itaskb/=itask)cycle
1607
1608 volcell =
brick_list(nin,ib)%POLY(icell)%Vnew
1610 j =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(1)
1611 j1 = j/10
1612 j2 = mod(j,10)
1613 ibv =
brick_list(nin,ib)%Adjacent_Brick(j1,4)
1614 IF(ibv==0)THEN
1615 print *, "inter22 :Error lagrangian surface is escaping eulerian domain."
1616
1617 stop
1618 ENDIF
1619 fm =
brick_list(nin,ibv)%Adjacent_Brick(j2,5)
1621 nsecndnod =
brick_list(nin,ibm)%SecndList%NumSecndNodes
1622 numsecnd = numsecnd + 1
1623 nsecndnod = nsecndnod +
brick_list(nin,ib)%POLY(icell)%NumNOD
1625 brick_list(nin,ibm)%SecndList%NumSecndNodes = nsecndnod
1626 brick_list(nin,ibm)%SecndList%FM(numsecnd) = fm
1629 brick_list(nin,ibm)%SecndList%IBV(numsecnd) = ib
1630 brick_list(nin,ibm)%SecndList%ICELLv(numsecnd) = icell
1631 brick_list(nin,ibm)%SecndList%VOL(numsecnd) = volcell
1633 brick_list(nin,ibm)%SecndList%ListNodID(numsecnd,1:8) =
brick_list(nin,ib)%POLY(icell)%ListNodID(1:8)
1635 enddo
1636 enddo
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647 DO ib=nbf,nbl
1650 ncell = nbcut
1651 icell = 0
1652 pnodwasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
1653 plistnodid(1)%p(1:8) =>
brick_list(nin,ib)%POLY(1)%ListNodID(1:8)
1654 plistnodid(2)%p(1:8) =>
brick_list(nin,ib)%POLY(2)%ListNodID(1:8)
1655 plistnodid(3)%p(1:8) =>
brick_list(nin,ib)%POLY(3)%ListNodID(1:8)
1656 plistnodid(4)%p(1:8) =>
brick_list(nin,ib)%POLY(4)%ListNodID(1:8)
1657 plistnodid(5)%p(1:8) =>
brick_list(nin,ib)%POLY(5)%ListNodID(1:8)
1658 plistnodid(6)%p(1:8) =>
brick_list(nin,ib)%POLY(6)%ListNodID(1:8)
1659 plistnodid(7)%p(1:8) =>
brick_list(nin,ib)%POLY(7)%ListNodID(1:8)
1660 plistnodid(8)%p(1:8) =>
brick_list(nin,ib)%POLY(8)%ListNodID(1:8)
1661 plistnodid(9)%p(1:8) =>
brick_list(nin,ib)%POLY(9)%ListNodID(1:8)
1663 ntag = 0
1664 main_tag(:,:) = 0
1665
1667
1668 inod_w =
brick_list(nin,ib)%OldMainStrongNode
1669 IF( inod_w*dt1 > zero)THEN
1670 IF (
brick_list(nin,ib)%NODE(inod_w)%WhichCell==mcell)ncell = -1
1671 ENDIF
1672
1673
1674 DO WHILE (icell<=ncell)
1675 icell = icell +1
1676 IF (icell>ncell .AND. ncell/=0)icell=9
1677 IF(icell==mcell)cycle
1680 IF(sum(pnodwasmain(plistnodid(icell)%p(1:mnod))%NodWasMain)==0)cycle
1681 IF(pnodwasmain(inod_w)%NodWasMain<=0) cycle
1682
1683
1684
1685
1686
1689 var = vol_s / (uncutvol)
1690 IF (var < critdvol22)cycle
1691 inod_w =
brick_list(nin,ib)%OldMainStrongNode
1692 IF(inod_w==0)cycle
1693
1694 ipos =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(1)
1695 icv =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(2)
1696 ibm =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(4)
1697 ntag = ntag + 1
1698
1699
1700 brick_list(nin,ib)%MergeTarget(1,ntag) = ipos
1703 enddo
1704
1705
1707
1708
1709
1710 enddo
1711
1712
1713
1714
1715
1716
1717
1718 DO ib=nbf,nbl
1720
1721
1722 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
1724 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
1729
1731
1733 DO ic=1,numsecnd
1734 icellv =
brick_list(nin,ib)%SecndList%ICELLv(ic)
1739
1740 psubvolv(1:9) =>
brick_list(nin,ibv)%POLY(1:9)
1741 volv = psubvolv(icellv)%Vnew
1742
1744 enddo
1745
1746 IF(dt1==zero)THEN
1747
1748 mtn_ = iparg(1,ngb(ib))
1749 IF(mtn_==51)THEN
1750 llt_ = iparg(2,ngb(ib))
1751
1752
1753
1754 DO itrimat=1,trimat
1755 ipos = 1
1756 k1 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
1757 k = k1 * llt_
1758 vfrac(itrimat) = mbuf%VAR(k+idlocb(ib))
1759 ipos = 11
1760 k1 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
1761 k = k1 * llt_
1762 var =
brick_list(nin,ib)%Vnew_SCell*vfrac(itrimat)
1763 mbuf%VAR(k+idlocb(ib)) = var
1764 enddo
1765 endif
1766 endif
1767 enddo
1768
1769
1770
1771
1772
1773 !
if ntarget > 0
then material deporation has to be done from former
main cell buffer(gbuf)
1774
1775 nbl1 = nbl
1776 IF(dt1==zero)nbl1 = 0
1778 if(itask==0)
allocate(tmp22array(7,
nb))
1780 tmp22array(1:7,nbf:nbl1)=zero
1781 endif
1782 DO ib=nbf,nbl1
1784 ncell = nbcut
1785 icell = 0
1786 gbuf => elbuf_tab(ngb(ib))%GBUF
1787
1788 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
1789 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
1791 vol = zero
1792 volv = zero
1794 llt_ = iparg(2,ngb(ib))
1795
1796
1797 DO itar = 1,ntar
1800 IF(j>=10)THEN
1801 j1 = j/10
1802 j2 = mod(j,10)
1803 ibv_i =
brick_list(nin,ib )%Adjacent_Brick(j1,4)
1804 ngv =
brick_list(nin,ibv_i)%Adjacent_Brick(j2,2)
1805 idlocv =
brick_list(nin,ibv_i)%Adjacent_Brick(j2,3)
1806 ibv =
brick_list(nin,ibv_i)%Adjacent_Brick(j2,4)
1807 ELSE
1809 idlocv =
brick_list(nin,ib )%Adjacent_Brick(j,3)
1810 ibv =
brick_list(nin,ib )%Adjacent_Brick(j,4)
1811 ENDIF
1812 gbufv => elbuf_tab(ngv)%GBUF
1813 ratio = one/ntar
1815 imergel(itaskv) = 1
1817
1818
1822
1823 tmp22array(1,ib)=cod1
1824 tmp22array(2,ib)=cod2
1825 endif
1826
1827
1828
1829
1830
1831
1832
1833
1835 supercellvol_l(itask,0,ibv) = supercellvol_l(itask,0,ibv) + ratio * vol
1836
1837 eint = ratio * vol *
brick_list(nin,ib)%bakMAT%rhoE
1838 eint_l(itask,ibv) = eint_l(itask,ibv) + eint
1839
1841
1842
1843
1844
1845 tmp22array(3,ib)=ratio
1846 tmp22array(4,ib)=gbuf%RHO(idlocb(ib))
1847 tmp22array(5,ib)=gbuf%MOM(llt_*(1-1) + idlocb(ib))
1848 tmp22array(6,ib)=vol
1849 endif
1850 rho = ratio * vol *
brick_list(nin,ib)%bakMAT%RHO
1851 rho_l(itask,ibv) = rho_l(itask,ibv) + rho
1852
1853 DO j=1,nv46
1854 sig(j) = ratio * vol *
brick_list(nin,ib)%bakMAT%SIG
1855 sig_l(itask,j,ibv) = sig_l(itask,j,ibv) + sig(j)
1856 ENDDO
1857
1858
1859 mom(1) = ratio * vol *
brick_list(nin,ib)%bakMAT%rhoU(1)
1860 mom_l(1,itask,ibv) = mom_l(1,itask,ibv) + mom(1)
1861 mom(2) = ratio * vol *
brick_list(nin,ib)%bakMAT%rhoU(2)
1862 mom_l(2,itask,ibv) = mom_l(2,itask,ibv) + mom(2)
1863 mom(3) = ratio * vol *
brick_list(nin,ib)%bakMAT%rhoU(3)
1864 mom_l(3,itask,ibv) = mom_l(3,itask,ibv) + mom(3)
1865
1866 mtn_ = iparg(1,ngb(ib))
1867 IF(mtn_==37)THEN
1868
1869
1870
1871
1872
1873 llt_ = iparg(2,ngb(ib))
1874
1875
1876
1877
1878
1879
1880 uvarl(itask,ibv,5) = uvarl(itask,ibv,5)+ratio*vol*
brick_list(nin,ib)%bakMAT%UVAR(5)
1881 uvarl(itask,ibv,4) = uvarl(itask,ibv,4)+ratio*vol*
brick_list(nin,ib)%bakMAT%UVAR(4)
1882 uvarl(itask,ibv,3) = uvarl(itask,ibv,3)+ratio*vol*
brick_list(nin,ib)%bakMAT%UVAR(3)*
brick_list(nin,ib)%bakMAT%UVAR(4)
1883 uvarl(itask,ibv,2) = uvarl(itask,ibv,2)+ratio*vol*
brick_list(nin,ib)%bakMAT%UVAR(2)*
brick_list(nin,ib)%bakMAT%UVAR(5)
1884 uvarl(itask,ibv,1) = uvarl(itask,ibv,1)+ratio*vol*
brick_list(nin,ib)%bakMAT%UVAR(1)
1885 supercellvol_l(itask,1,ibv) = supercellvol_l(itask,1,ibv) + uvarl(itask,ibv,4)
1886 supercellvol_l(itask,2,ibv) = supercellvol_l(itask,2,ibv) + uvarl(itask,ibv,5)
1887
1888 ELSEIF(mtn_==51)THEN
1889 llt_ = iparg(2,ngb(ib))
1890
1891
1892
1893 DO itrimat=1,trimat
1894 ipos = 11
1895 k = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos)
1896 vol51(ib,itrimat) =
brick_list(nin,ib)%bakMAT%UVAR(k)
1897 var = ratio * vol51(ib,itrimat)
1898 IF(var/=zero) supercellvol_l(itask,itrimat,ibv) = supercellvol_l(itask,itrimat,ibv) + var
1899 enddo
1900 uvarl(itask,ibv,1) = uvarl(itask,ibv,1) +
brick_list(nin,ib)%bakMAT%UVAR(1)
1901 uvarl(itask,ibv,2) = uvarl(itask,ibv,2) +
brick_list(nin,ib)%bakMAT%UVAR(2)
1902 uvarl(itask,ibv,3) = uvarl(itask,ibv,3) +
brick_list(nin,ib)%bakMAT%UVAR(3)
1903
1904
1905
1906 DO itrimat=1,trimat
1907 var = ratio*vol51(ib,itrimat)
1908 IF(var==zero)cycle
1909 DO ipos = 1,m51_nvphas
1910 IF(ipos==11)cycle
1911 k = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos)
1913 uvarl(itask,ibv,k) = uvarl(itask,ibv,k) + pvar * var
1914
1915 enddo
1916 enddo
1917 endif
1918
1919 enddo
1920
1921 enddo
1922
1923
1925
1926
1927
1929 if(itask==0)then
1931 cod1=nint(tmp22array(1,ib))
1932 cod2=nint(tmp22array(2,ib))
1933 if(cod1<=0)cycle
1934 write(*,fmt='(A,I8,A,I8)') " MERGING : id=", cod1, " to idv:", cod2
1935 write(*,fmt='(A,E30.16)') " RATIO=", tmp22array(3,ib)
1936 write(*,fmt='(A,E30.16)') " +rho=", tmp22array(4,ib)
1937 write(*,fmt='(A,E30.16)') " +rhoUx=", tmp22array(5,ib)
1938 write(*,fmt='(A,E30.16)') " +Vol=", tmp22array(6,ib)
1939 tmp22array(:,ib) = zero
1940 enddo
1941 endif
1943 endif
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958 DO ib=nbf,nbl1
1960 ncell = nbcut
1961 icell = 0
1962 gbuf => elbuf_tab(ngb(ib))%GBUF
1963 lbuf => elbuf_tab(ngb(ib))%BUFLY(1)%LBUF(1,1,1)
1964
1965 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
1966 mbuf => elbuf_tab(ngb
1968 som = sum(supercellvol_l(0:nthread-1,0,ib))
1969 llt_ = iparg(2,ngb(ib))
1970 IF(mlw==37 .OR. mlw==51)THEN
1971 som_(1) = sum(supercellvol_l(0:nthread-1,1,ib))
1972 som_(2) = sum(supercellvol_l(0:nthread-1,2,ib))
1973 som_(3) = sum(supercellvol_l(0:nthread-1,3,ib))
1974 som_(4) = sum(supercellvol_l(0:nthread-1,4,ib))
1975 ENDIF
1976 IF(som==zero)cycle
1980
1982 delta = zero
1983 ELSE
1984 delta = one
1985 ENDIF
1986
1988
1989
1990
1991
1992
1993 tmp22array(1,ib) = ixs(11,
brick_list(nin,ib)%id)
1994 tmp22array(2,ib) = delta
1995 tmp22array(3,ib) =
brick_list(nin,ib)%bakMAT%RHO
1996 tmp22array(4:6,ib) =
brick_list(nin,ib)%bakMAT%rhoU(1:3)
1997 tmp22array(7,ib) =
brick_list(nin,ib)%Vold_SCell
1998 endif
1999
2000 som = som + delta *
brick_list(nin,ib)%Vold_SCell
2001 supercellvol_l(0:nthread-1,0,ib) = zero
2002
2003 eint = delta*
brick_list(nin,ib)%bakMAT%rhoE*
brick_list(nin,ib)%Vold_SCell +sum(eint_l(0:nthread-1,ib))
2004 eint = eint / som
2005 eint_l(0:nthread-1,ib) = zero
2006
2007 rho = delta*
brick_list(nin,ib)%bakMAT%RHO*
brick_list(nin,ib)%Vold_SCell +sum(rho_l(0:nthread-1,ib))
2008 rho = rho / som
2009 rho_l(0:nthread-1,ib) = zero
2010
2011
2012 mom(1) = delta*
brick_list(nin,ib)%bakMAT%rhoU(1)*
brick_list(nin,ib)%Vold_SCell+sum(mom_l(1,0:nthread-1,ib))
2013 mom(1) = mom(1) / som
2014 mom_l(1,0:nthread-1,ib)= zero
2015
2017 mom(2) = mom(2) / som
2018 mom_l(2,0:nthread-1,ib)= zero
2019
2020 mom(3) = delta*
brick_list(nin,ib)%bakMAT%rhoU(3)*
brick_list(nin,ib)%Vold_SCell+sum(mom_l(3,0:nthread-1,ib))
2021 mom(3) = mom(3) / som
2022 mom_l(3,0:nthread-1,ib)= zero
2023
2024 DO j=1,nv46
2025 sig(j) = delta*
brick_list(nin,ib)%bakMAT%SIG(j)*
brick_list(nin,ib)%Vold_SCell+sum(sig_l(0:nthread-1,j,ib))
2026 sig(j) = sig(j) / som
2027 sig_l(0:nthread-1,j,ib)= zero
2028 ENDDO
2029
2030 gbuf%EINT(idloc) = eint
2035
2036
2037 DO j=1,nv46
2038 gbuf%SIG(llt_*(j-1)+idloc) = sig(j)
2039 ENDDO
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049 mtn_ = iparg(1,ngb(ib))
2050 IF(mtn_==37)THEN
2051
2052
2053
2054
2055
2056 llt_ = iparg(2,ngb(ib))
2057
2060
2061
2062 uvar(5) = delta*
brick_list(nin,ib)%bakMAT%UVAR(5)*
brick_list(nin,ib)%Vold_SCell + sum(uvarl(0:nthread-1,ib,5))
2063 uvar(4) = delta*
brick_list(nin,ib)%bakMAT%UVAR(4)*
brick_list(nin,ib)%Vold_SCell + sum(uvarl(0:nthread-1,ib,4))
2065 uvar(3) = uvar(3) + sum(uvarl(0:nthread-1,ib,3))
2067 uvar(2) = uvar(2) + sum(uvarl(0:nthread-1,ib,2))
2068 uvar(1) = delta*
brick_list(nin,ib)%bakMAT%UVAR(1)*
brick_list(nin,ib)%Vold_SCell + sum(uvarl(0:nthread-1,ib,1))
2069 uvarl(0:nthread-1,ib,1:5) = zero
2070
2071
2072
2073
2074
2075
2076
2077
2078 mbuf%VAR((0*llt_ + idloc)) = uvar(1) / som
2079 IF(som_(2)>em20)THEN
2080 mbuf%VAR((1*llt_ + idloc)) = uvar(2) / som_(2)
2081 mbuf%VAR((4*llt_ + idloc)) = uvar(5) / som
2082 ENDIF
2083 IF(som_(1)>em20)THEN
2084 mbuf%VAR((2*llt_ + idloc)) = uvar(3) / som_(1)
2085 mbuf%VAR((3*llt_ + idloc)) = uvar(4) / som
2086 ENDIF
2087 supercellvol_l(0:nthread-1,1:4,ib) = zero
2088
2089
2090
2092 idloc = idlocb(ib)
2093 ng = ngb(ib)
2094 vol = som
2096 1 elbuf_tab, ixs, bufmat, iparg, ipm,
2097 2 idloc , ng , brickid, vol
2098 . )
2099
2100
2101
2102 ELSEIF(mtn_==51)THEN
2103 llt_ = iparg(2,ngb(ib))
2104 uvar(1) = delta*
brick_list(nin,ib)%bakMAT%UVAR(1) + sum(uvarl(0:nthread-1,ib,1))
2105 uvar(2) = delta*
brick_list(nin,ib)%bakMAT%UVAR(2) + sum(uvarl(0:nthread-1,ib,2))
2106 uvar(3) = delta*
brick_list(nin,ib)%bakMAT%UVAR(3) + sum(uvarl(0:nthread-1,ib,3))
2107 uvarl(0:nthread-1,ib,1:3) = zero
2108 mbuf%VAR((0*llt_ + idloc))= uvar(1) / som
2109 mbuf%VAR((1*llt_ + idloc))= uvar(2) / som
2110 mbuf%VAR((2*llt_ + idloc))= uvar(3) / som
2111 DO itrimat=1,trimat
2112 somi = sum(supercellvol_l(0:nthread-1,itrimat,ib))
2113 supercellvol_l(0:nthread-1,itrimat,ib) = zero
2114 ipos = 11
2115 k = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos)
2116 somi = somi + delta*
brick_list(nin,ib)%bakMAT%UVAR(k)
2117 vol51(ib,itrimat) =
brick_list(nin,ib)%bakMAT%UVAR(k)
2118 uvar(:) = zero
2119 IF(somi>zero)THEN
2120 DO ipos=1,m51_nvphas
2121 IF(ipos==11)THEN
2122 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2123 k = k1 * llt_
2124 mbuf%VAR(k+idlocb(ib)) = somi
2125 cycle
2126 ELSEIF(ipos==1)THEN
2127 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2128 k = k1 * llt_
2129 mbuf%VAR(k+idlocb(ib)) = somi / som
2130 cycle
2131 ENDIF
2132 k = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos)
2133 k1 = (k-1)*llt_
2134 pvar => mbuf%VAR(k1+idlocb(ib))
2135 uvar(k) = sum(uvarl(0:nthread-1,ib,k)) + pvar * vol51(ib,itrimat) * delta
2136 uvarl(0:nthread-1,ib,k) = zero
2137 uvar(k) = uvar(k) / somi
2138 IF(ipos/=1)pvar = uvar(k)
2139 enddo
2140 ELSE
2141
2142 ipos = 1
2143 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2144 k = k1 * llt_
2145 mbuf%VAR(k+idlocb(ib)) = zero
2146 ipos = 11
2147 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2148 k
2149 mbuf%VAR(k+idlocb(ib)) = zero
2150 endif
2151 enddo
2152
2153 endif
2154
2156
2157
2158 enddo
2159
2160
2161
2162
2165 if(itask==0)then
2166 if(dt1>zero)then
2168 if (tmp22array(1,ib)==zero )cycle
2169 write(*,fmt='(A,E30.16)') " TARGET="
2170 write(*,fmt='(A,E30.16)'" DELTA=", tmp22array(2,ib)
2171 write(*,fmt='(A,E30.16)') " rho=", tmp22array(3,ib)
2172 write(*,fmt='(a,3e30.16)') " +rhoUx=", TMP22ARRAY(4,IB)
2173 write(*,FMT='(a,e30.16)') " +Vol=", tmp22array(5,ib)
2174 enddo
2175 endif
2176
2177 deallocate(tmp22array)
2178 endif
2179 endif
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189 nbl1 = nbl
2190 IF(dt1==zero)nbl1 = 0
2191 origin_data(:,:,:) = 0
2192 norigin(nbf:nbl) = 0
2193 DO ib=nbf,nbl1
2195 ncell = nbcut
2196 icell = 0
2198 gbuf => elbuf_tab(ngb(ib))%GBUF
2199 pnodwasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
2200 pwherewasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
2202 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
2203 ntag = 0
2204 mtn_ = iparg(1,ngb(ib))
2205 newmnod(1:8) = 0
2206 itag(:) = 0
2207 IF(mcell == 0)cycle
2209
2210
2211 DO k=1,mnod
2212 inod =
brick_list(nin,ib)%POLY(mcell)%ListNodID(k)
2213 IF(pnodwasmain(inod)%NodWasMain==1)cycle
2214
2215 newmnod(inod) = 1
2216 ENDDO
2217
2218
2219
2220 vol_m =
brick_list(nin,ib)%secndlist%VOL_unmerged
2222 var = vol_m / uncutvol
2223
2224
2225
2226
2227 IF(mnod==0) cycle
2229
2230
2231
2232 inod_w_old =
brick_list(nin,ib)%OldMainStrongNode
2233
2234 IF(inod_w_old<=0)cycle
2235 IF(
brick_list(nin,ib)%NODE(inod_w_old)%WhichCell == mcell) idemerge = 0
2236
2237
2238 IF( idemerge==1 ) THEN
2239
2240
2241
2242 DO k=1,mnod
2243 inod =
brick_list(nin,ib)%POLY(mcell)%ListNodID(k)
2244 j = pwherewasmain(inod)%WhereWasMain
2245 IF(j==0)cycle
2246 IF(itag(j)==1)cycle
2247 itag(j) = 1
2248
2249
2250 IF(j>=10)THEN
2251 j1 = j/10
2252 j2 = mod(j,10)
2253 ibv_i =
brick_list(nin,ib )%Adjacent_Brick(j1,4)
2254 ibv =
brick_list(nin,ibv_i)%Adjacent_Brick(j2,4)
2255 ELSE
2256 ibv =
brick_list(nin,ib )%Adjacent_Brick(j,4)
2257 ENDIF
2259 IF(ntar == 0)THEN
2260 ntag = ntag + 1
2261 origin_data(ib,ntag,1) = ibv
2262 origin_data(ib,ntag,2) = j
2263 origin_data(ib,ntag,3) = ibv
2264 ELSE
2265 DO itar=1,ntar
2266 ntag = ntag + 1
2267 origin_data(ib,ntag,1) =
brick_list(nin,ibv)%MergeTarget(3,itar)
2268 origin_data(ib,ntag,2) = j
2269 origin_data(ib,ntag,3) = ibv
2270 ENDDO
2271 ENDIF
2272 ENDDO
2273 norigin(ib) = ntag
2274 IF(ntag==0)THEN
2275 print *, "**error : inter22, topology issue."
2276 ENDIF
2277 ENDIF
2278 enddo
2279
2280
2282
2283
2284
2285
2286
2287
2288
2289 ! to
the n=ntar
target main cells.
2290 nbl1 = nbl
2291 IF(dt1==zero)nbl1 = 0
2292
2294 if(itask==0)
ALLOCATE (tmp22array(8,
nb))
2297 tmp22array(1:8,nbf:nbl1)=zero
2298 endif
2299
2300
2301 DO ib=nbf,nbl1
2302 IF(norigin(ib)==0)cycle
2304 IF(nbcut==0)cycle
2305 ncell = nbcut
2306 icell = 0
2308 gbuf => elbuf_tab(ngb(ib))%GBUF
2309 lbuf => elbuf_tab(ngb(ib))%BUFLY(1)%LBUF(1,1,1)
2310
2311 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:3)
2312 pnodwasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
2313 pwherewasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
2317 mtn_ = iparg(1,ngb(ib))
2318 llt_ = iparg(2,ngb(ib))
2319 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
2320 ntag = 0
2321 volorig(1:24) = zero
2322 volcell = zero
2323 volcell51(:) = zero
2324 volsecnd51(:) = zero
2325 vol = zero
2326 rho = zero
2327 eint = zero
2328 sig(1:6) = zero
2329 mom(1:3) = zero
2330 ssp = zero
2331 uvar(:) = zero
2332 rho_adv = zero
2333 eint_adv = zero
2334 sig_adv(1:6) = zero
2335 mom_adv(1:3) = zero
2336 uvar_adv(:) = zero
2337
2338
2339
2340
2342
2343
2344
2346 rho = volcell* gbuf%RHO(idloc)
2347 eint = volcell* gbuf%EINT(idloc)
2348 mom(1) = volcell* gbuf%MOM(llt_*(1-1) + idloc)
2349 mom(2) = volcell* gbuf%MOM
2350 mom(3) = volcell* gbuf%MOM(llt_*(3-1) + idloc)
2351 sig(1) = volcell* gbuf%SIG(llt_*(1-1)+idloc)
2352 sig(2) = volcell* gbuf%SIG(llt_*(2-1)+idloc)
2353 sig(3) = volcell* gbuf%SIG(llt_*(3-1)+idloc)
2354 sig(4) = volcell* gbuf%SIG(llt_*(4-1)+idloc)
2355 sig(5) = volcell* gbuf%SIG(llt_*(5-1)+idloc)
2356 sig(6) = volcell* gbuf%SIG(llt_*(6-1)+idloc)
2357 ssp = volcell* lbuf%SSP(idloc)
2358 volcell = zero
2359 IF(mtn_==37)THEN
2360 uvar(5) = volcell*mbuf%VAR(((5-1)*llt_ + idloc))
2361 uvar(4) = volcell*mbuf%VAR(((4-1)*llt_ + idloc))
2362 uvar(3) = volcell*mbuf%VAR(((3-1)*llt_ + idloc))*mbuf%VAR
2363 uvar(2) = volcell*mbuf%VAR(((2-1)*llt_ + idloc
2364 uvar(1) = volcell*mbuf%VAR(((1-1)*llt_ + idloc))
2365 ELSEIF(mtn_==51)THEN
2366 ipos = 11
2367 volsecnd51(1) = mbuf%VAR(idloc + ((m51_n0phas + (1-1)*m51_nvphas )+ipos-1
2368 volsecnd51(2) = mbuf%VAR(idloc + ((m51_n0phas + (2-1)*m51_nvphas )+ipos-1)*llt_)
2369 volsecnd51(3) = mbuf%VAR(idloc + ((m51_n0phas + (
2370 volsecnd51(4) = mbuf%VAR(idloc + ((m51_n0phas + (4-1)*m51_nvphas )+ipos-1)*llt_)
2371 DO itrimat=1,trimat
2372 DO ipos = 1 , m51_nvphas
2373 IF(ipos==11) cycle
2374 k = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2375 k1 = k * llt_
2376 uvar(k+1) = volsecnd51(itrimat) * mbuf%VAR(k1+idloc)
2377 enddo
2378 enddo
2379 volsecnd51(1:4) = zero
2380 ENDIF
2381 ENDIF
2382
2383
2384 vel_m(1) = gbuf%MOM(3*(idloc-1)+1) / gbuf%RHO(idloc)
2385 vel_m(2) = gbuf%MOM(3*(idloc-1)+2) / gbuf%RHO(idloc)
2386 vel_m(3) = gbuf%MOM(3*(idloc-1)+3) / gbuf%RHO(idloc)
2387
2389
2390
2391
2392 DO iorig = 1, norigin(ib)
2393
2394 ibm = origin_data(ib,iorig,1)
2395 ibo = origin_data(ib,iorig,3)
2396 iv
2399 j = origin_data(ib,iorig,2)
2400 IF(ibm==ib)cycle
2401 IF(j>=10)THEN
2402 j1 = j/10
2403 j2 = mod(j,10)
2404 ibv =
brick_list(nin,ib )%Adjacent_Brick(j1,4)
2406 ELSE
2408 ENDIF
2409
2410 numsecnd = old_secndlist(nin,ibo)%Num
2411
2412
2413
2414 DO k=1,numsecnd
2415 IF (old_secndlist(nin,ibo)%IBv(k) /= ib)cycle
2416 IF (old_secndlist(nin,ibo)%FM(k) /= jv)cycle
2417
2418
2422#include "lockon.inc"
2423 if(ibm==ibo)then
2424 ! write(*,fmt='(A,I8,A,I8)') "DEMERGING : id=", cod1,
2425 ! .
" from idv:", ixs(11,
brick_list(nin,ibo)%id)
2426
2428 tmp22array(1,
in22)=cod1
2430 tmp22array(3,
in22)=0
2431
2432 else
2433 ! write(*,fmt='(A,I8,A,I8,A,I8)') "DEMERGING : id=", cod1,
2434
2435
2437 tmp22array(1,
in22)=cod1
2440
2441 endif
2442
2443
2444 ! write (*,fmt='(I10,A,F30.16,A,F30.16)')
2445
2446
2447 tmp22array(4,
in22)= zero
2449 tmp22array(6,
in22)= zero
2451 tmp22array(8,
in22)=tmp22array(8,
in22)+1
2452#include "lockoff.inc"
2453 endif
2454
2455
2456
2457
2458
2459
2460
2461 volsecnd = old_secndlist(nin,ibo)%VOL(k)
2462
2463 volcell = volcell + volsecnd
2464
2465 gbuf => elbuf_tab(ngv)%GBUF
2466 lbuf => elbuf_tab(ngv)%BUFLY(1)%LBUF(1,1,1)
2467 llt_v = iparg(2,ngv)
2468
2469 surf_s = old_secndlist(nin,ibo)%SURF_V(k)
2470 fv = old_secndlist(nin,ibo)%FV(k)
2471 IF(fv<10)THEN
2473 ELSE
2474
2475
2476
2477
2478 zm(1:3) =
brick_list(nin,ibo)%SCellCenter(1:3)
2479 zs(1:3) =
brick_list(nin,ib)%POLY(mcell)%CellCenter(1:3)
2480 norm_s(1) = zm(1)-zs(1)
2481 norm_s(2) = zm(2)-zs(2)
2482 norm_s(3) = zm(3)-zs(3)
2483 norm = sqrt(norm_s(1)*norm_s(1)+norm_s(2)*norm_s(2)+norm_s(3)*norm_s(3))
2484 norm_s(1) = norm_s(1) /
norm
2485 norm_s(2) = norm_s(2) /
norm
2486 norm_s(3) = norm_s(3) /
norm
2487 ENDIF
2488
2489
2490
2491
2492
2493 adv = zero
2494 IF(iadv==1)THEN
2495
2496 vm = one
2497 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))
2498 rho_adv = rho_adv + adv * gbuf%RHO(idlocv)
2499 eint_adv = eint + adv * gbuf%EINT(idlocv)
2500 mom_adv(1) = mom_adv(1) + adv * gbuf%MOM(3*(idlocv-1)+1)
2501 mom_adv(2) = mom_adv(2) + adv * gbuf%MOM(3*(idlocv-1)+2)
2502 mom_adv(3) = mom_adv(3) + adv * gbuf%MOM(3*(idlocv-1)+3)
2503 sig_adv(1) = sig_adv(1) + adv * gbuf%SIG(llt_v*(1-1)+idlocv)
2504 sig_adv(2) = sig_adv(2) + adv * gbuf%SIG(llt_v*(2-1)+idlocv)
2505 sig_adv(3) = sig_adv(3) + adv * gbuf%SIG(llt_v*(3-1)+idlocv)
2506 sig_adv(4) = sig_adv(4) + adv * gbuf%SIG(llt_v*(4-1)+idlocv)
2507 sig_adv(5) = sig_adv(5) + adv * gbuf%SIG(llt_v*(5-1)+idlocv)
2508 sig_adv(6) = sig_adv(6) + adv * gbuf%SIG(llt_v*(6-1)+idlocv)
2509 ENDIF
2510
2511
2512
2513 rho = rho + volsecnd * gbuf%RHO(idlocv)
2514 eint = eint + volsecnd * gbuf%EINT(idlocv)
2515 mom(1) = mom(1) + volsecnd * gbuf%MOM(llt_v*(1-1)+idlocv)
2516 mom(2) = mom(2) + volsecnd * gbuf%MOM(llt_v*(2-1)+idlocv)
2517 mom(3) = mom(3) + volsecnd * gbuf%MOM(llt_v*(3-1)+idlocv)
2518 sig(1) = sig(1) + volsecnd * gbuf%SIG(llt_v*(1-1)+idlocv)
2519 sig(2) = sig(2) + volsecnd * gbuf%SIG(llt_v*(2-1)+idlocv)
2520 sig(3) = sig(3) + volsecnd * gbuf%SIG(llt_v*(3-1)+idlocv)
2521 sig(4) = sig(4) + volsecnd * gbuf%SIG(llt_v*(4-1)+idlocv)
2522 sig(5) = sig(5) + volsecnd * gbuf%SIG(llt_v*(5-1)+idlocv)
2523 sig(6) = sig(6) + volsecnd * gbuf%SIG(llt_v*(6-1)+idlocv)
2524 ssp = ssp + volsecnd * lbuf%SSP(idlocv)
2525
2526
2527
2528 IF(mtn_==37)THEN
2529
2530
2531
2532
2533
2534 mbufv => elbuf_tab(ngv)%BUFLY(1)%MAT(1,1,1)
2535 llt_v = iparg(2,ngv)
2536 uvar(5) = uvar(5) +volsecnd*mbufv%VAR(((5-1)*llt_v + idlocv))
2537 uvar(4) = uvar(4) +volsecnd*mbufv%VAR(((4-1)*llt_v + idlocv))
2538 uvar(3) = uvar(3) +volsecnd*mbufv%VAR(((3-1)*llt_v + idlocv))*mbufv%VAR(((4-1)*llt_v + idlocv))
2539 uvar(2) = uvar(2) +volsecnd*mbufv%VAR(((2-1)*llt_v + idlocv))*mbufv%VAR(((5-1)*llt_v + idlocv))
2540 uvar(1) = uvar(1) +volsecnd*mbufv%VAR(((1-1)*llt_v + idlocv))
2541 uvar_adv(1) = uvar_adv(1) +adv * mbufv%VAR(((1-1)*llt_v + idlocv))
2542
2543 ELSEIF(mtn_==51)THEN
2544 mbufv => elbuf_tab(ngv)%BUFLY(1)%MAT(1,1,1)
2545 llt_ = iparg(2,ngb(ib))
2546 llt_v = iparg(2,ngv)
2547
2548
2549
2550 DO itrimat=1,trimat
2551
2552 ipos = 1
2553 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2554 kv = k1 * llt_v
2555 vfrac(itrimat) = mbufv%VAR(kv+idlocv)
2556 volsecnd51(itrimat) = vfrac(itrimat) * volsecnd
2557 volcell51(itrimat) = volcell51(itrimat) + volsecnd51(itrimat)
2558 enddo
2559 uvar(1) = uvar(1) + mbufv%VAR((0*llt_v + idlocv)) * volsecnd
2560 uvar(2) = uvar(2) + mbufv%VAR((1*llt_v + idlocv)) * volsecnd
2561 uvar(3) = uvar(3) + mbufv%VAR((2*llt_v + idlocv)) * volsecnd
2562 uvar_adv(1) = uvar_adv(1) + mbufv%VAR((0*llt_v + idlocv)) * adv
2563 uvar_adv(2) = uvar_adv(2) + mbufv%VAR((1*llt_v + idlocv)) * adv
2564 uvar_adv(3) = uvar_adv(3) + mbufv%VAR((2*llt_v + idlocv)) * adv
2565 IF(iadv==1)print *, "to do compute/get vfrac on face"
2566 DO itrimat=1,trimat
2567 DO ipos = 1 , m51_nvphas
2568 ko = ((m51_n0phas + (itrimat-1)*m51_nvphas ))
2569 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2570 kv = k1 * llt_v
2571 IF(ipos==11)THEN
2572 uvar(k1+1) = uvar(k1+1) + volsecnd51(itrimat)
2573 ELSE
2574 uvar(k1+1) = uvar(k1+1) + volsecnd51(itrimat) * mbufv%VAR(kv+idlocv)
2575 uvar_adv(k1+1) = uvar_adv(k1+1) + adv * mbufv%VAR(kv+idlocv)
2576 IF(iadv==1)print *, "to do compute/get vfrac on face"
2577 ENDIF
2578 enddo
2579 enddo
2580 endif
2581
2582#include "lockon.inc"
2583
2584
2585
2587
2588 IF(mtn_==51)THEN
2589 DO itrimat=1,trimat
2590
2591 ipos = 11
2592 k1 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2593
2594 mbufv%VAR(kv+idlocv) = mbufv%VAR(kv+idlocv) - volsecnd51(itrimat)
2595 enddo
2596 ENDIF
2597#include "lockoff.inc"
2598 enddo
2599 enddo
2600
2601 IF(volcell==zero)cycle
2602
2603
2604
2605
2606 rho = (rho +iadv*rho_adv )/ volcell
2607 eint = (eint +iadv*eint_adv )/ volcell
2608 mom(1) = (mom(1) +iadv*mom_adv(1))/ volcell
2609 mom(2) = (mom(2) +iadv*mom_adv(2))/ volcell
2610 mom(3) = (mom(
2611 sig(:) = (sig(:) +iadv*sig_adv(:))/ volcell
2612 ssp = ssp / volcell
2613
2614 IF(mtn_==37)THEN
2615 uvar(1) = (uvar(1)+ iadv*uvar_adv(1)) / volcell
2616 uvar(2) = uvar(2) / volcell
2617 uvar(3) = uvar(3) / volcell
2618 uvar(4) = uvar(4) / volcell
2619 uvar(5) = uvar(5) / volcell
2620
2621 ELSEIF(mtn_==51)THEN
2622 uvar(1) = (uvar(1) + iadv*uvar_adv(1)) / volcell
2623 uvar(2) = (uvar(2) + iadv*uvar_adv(2)) / volcell
2624 uvar(3) = (uvar(3) + iadv*uvar_adv(3)) / volcell
2625 DO itrimat=1,trimat
2626 ko = m51_n0phas + (itrimat-1)*m51_nvphas
2627 IF(volcell51(itrimat)/=zero)THEN
2628 uvar(ko+01:ko+10) = (uvar(ko+01:ko+10) + iadv*uvar_adv(ko+01:ko+10)) / volcell51(itrimat)
2629 uvar(ko+12:ko+m51_nvphas) = (uvar(ko+12:ko+m51_nvphas) + iadv*uvar_adv(ko+12:ko+m51_nvphas)) / volcell51(itrimat)
2630 ELSE
2631 uvar(ko+01) = zero
2632 uvar(ko+11) = zero
2633 ENDIF
2634 ENDDO
2635 endif
2636
2637
2638
2639
2640
2643 llt_ = iparg(2,ng)
2644 gbuf => elbuf_tab(ng)%GBUF
2645 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
2646 gbuf%RHO(idloc) = rho
2647 gbuf%EINT(idloc) = eint
2648 gbuf%MOM(llt_*(1-1)+idloc) = mom(1)
2649 gbuf%MOM(llt_*(2-1)+idloc) = mom(2)
2650 gbuf%MOM(llt_*(3-1)+idloc) = mom(3)
2651 gbuf%SIG(llt_*(1-1)+idloc) = sig(1)
2652 gbuf%SIG(llt_*(2-1)+idloc) = sig(2)
2653 gbuf%SIG(llt_*(3-1)+idloc) = sig(3)
2654 gbuf%SIG(llt_*(4-1)+idloc) = sig(4)
2655 gbuf%SIG(llt_*(5-1)+idloc) = sig(5)
2656 gbuf%SIG(llt_*(6-1)+idloc) = sig(6)
2657 lbuf%SSP(idloc) = ssp
2664
2665
2666 IF(mtn_==37)THEN
2667 llt_ = iparg(2,ngb(ib))
2668 idloc = idlocb(ib)
2669 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
2670 mt = ixs(1,brickid)
2671 iadbuf = ipm(7,mt)
2672 rho10 = bufmat(iadbuf-1+11)
2673 rho20 = bufmat(iadbuf-1+12)
2674
2675
2676
2677
2678
2679
2680 IF(uvar(3) == zero) uvar(3) = rho10
2681 IF(uvar(2) == zero) uvar(2) = rho20
2682 mbuf%VAR((5-1)*llt_+idloc) = uvar(5)
2683 mbuf%VAR((4-1)*llt_+idloc) = uvar(4)
2684 mbuf%VAR((3-1)*llt_+idloc) = uvar(3)
2685 mbuf%VAR((2-1)*llt_+idloc) = uvar(2)
2686 mbuf%VAR((1-1)*llt_+idloc) = uvar(1)
2687 ELSEIF(mtn_==51)THEN
2688 llt_ = iparg(2,ngb(ib))
2689 idloc = idlocb(ib)
2690 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
2691 DO itrimat=1,trimat
2692 IF(volcell51(itrimat)/=zero)THEN
2693
2694 DO ipos=1,m51_nvphas
2695 k0 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2696 k1 = k0 * llt_
2697 mbuf%VAR(k1+idloc) = uvar(m51_n0phas+(itrimat-1)*m51_nvphas+ipos)
2698 ENDDO
2699
2700 ipos=1
2701 k0 = ((m51_n0phas + (itrimat-1)
2702 k1 = k0 * llt_
2703 mbuf%VAR(k1+idloc) = volcell51(itrimat)/volcell
2704 ipos=11
2705 k0 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2706 k1 = k0 * llt_
2707 mbuf%VAR(k1+idloc) = volcell51(itrimat)
2708 ELSE
2709 ipos=1
2710 k0 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
2711 k1 = k0 * llt_
2712 mbuf%VAR(k1+idloc) = zero
2713 ipos=11
2714 k0 = ((m51_n0phas + (itrimat-1)*m51_nvphas
2715 k1 = k0 * llt_
2716 mbuf%VAR(k1+idloc) = zero
2717 ENDIF
2718 ENDDO
2719 endif
2720
2721
2722
2723
2724
2726
2727
2729 idloc = idlocb(ib)
2730 ng = ngb(ib)
2731 vol = volcell
2732 mtn_ = iparg(1,ng)
2733 IF(mtn_==37)THEN
2735 1 elbuf_tab, ixs, bufmat, iparg, ipm,
2736 2 idloc , ng , brickid, vol
2737 . )
2738 ENDIF
2739
2740
2741
2742
2743
2744
2745
2746
2747 IF(iadv==1)THEN
2750 gbuf => elbuf_tab(ng)%GBUF
2751 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
2752 gbuf%RHO(idloc) = gbuf%RHO(idloc)
2753 gbuf%EINT(idloc) = gbuf%EINT(idloc) - eint_adv/volcell
2754 gbuf%MOM(3*(idloc-1) +1) = gbuf%MOM(3*(idloc-1) +1) - mom_adv(1)/volcell
2755 gbuf%MOM(3*(idloc-1) +2) = gbuf%MOM(3*(idloc-1) +2) - mom_adv(2)/volcell
2756 gbuf%MOM(3*(idloc-1) +3) = gbuf%MOM(3*(idloc-1) +3) - mom_adv(3)/volcell
2757 gbuf%SIG(llt_*(1-1) +idloc) = gbuf%SIG(llt_*(1-1) +idloc) - sig_adv(1)/volcell
2758 gbuf%SIG(llt_*(2-1) +idloc) = gbuf%SIG(llt_*(2-1) +idloc) - sig_adv(2)/volcell
2759 gbuf%SIG(llt_*(3-1) +idloc) = gbuf%SIG(llt_*(3-1) +idloc) - sig_adv(3)/volcell
2760 gbuf%SIG(llt_*(4-1) +idloc) = gbuf%SIG(llt_*(4-1) +idloc) - sig_adv(4)/volcell
2761 gbuf%SIG(llt_*(5-1) +idloc) = gbuf%SIG
2762 gbuf%SIG(llt_*(6-1) +idloc) = gbuf%SIG(llt_*(6-1) +idloc) - sig_adv(6)/volcell
2763 mtn_ = iparg(1,ng)
2764 IF(mtn_==37)THEN
2765 llt_ = iparg(2,ng)
2766 idloc = idlocb(ibm)
2767 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
2769 mt = ixs(1,brickid)
2770 iadbuf = ipm(7,mt)
2771 rho10 = bufmat(iadbuf-1+11)
2772 rho20 = bufmat(iadbuf-1+12)
2773 IF(uvar(3) == zero) uvar(3) = rho10
2774 IF(uvar(2) == zero) uvar(2) = rho20
2775
2776
2777
2778
2779
2780 mbuf%VAR((1-1)*llt_+idloc) = uvar(1) - uvar_adv(1)/volcell
2781
2782
2784 idloc = idlocb(ibm)
2785 ng = ngb(ibm)
2787 mtn_ = iparg(1,ng)
2788 IF(mtn_==37)THEN
2790 1 elbuf_tab, ixs, bufmat, iparg, ipm,
2791 2 idloc , ng , brickid, vol
2792 . )
2793 ENDIF
2794
2795 ELSEIF(mtn_==51)THEN
2796
2797 ENDIF
2798 ENDIF
2799
2800
2801
2802 enddo
2803
2806 if(itask==0 .and. dt1>zero)then
2809 value(ib)=tmp22array(1,ib)
2810 ENDDO
2811 order=0
2812
2814 ib=order(ib2)
2815 cod1=tmp22array(1,ib)
2816 cod2=tmp22array(2,ib)
2817 cod3=tmp22array(3,ib)
2818
2819 if(cod3==0)then
2820 write(*,fmt='(A,I8,A,I8)') "DEMERGING : id=", cod1, " from idv:", cod2
2821 else
2822 write(*,fmt='(A,I8,A,I8,A,I8)') "DEMERGING : id="" from idv:", cod2," moved to", cod3
2823 endif
2824 write (*,fmt='(I10,A,F30.16,A,F30.16)') cod1," Vold=", tmp22array(4,ib), " Vnew=", tmp22array(5,ib)
2825 write (*,fmt='(I10,A,F30.16,A,F30.16)') cod2," Vold=", tmp22array(6,ib), " Vnew=", tmp22array(7,ib)
2826 write (*,fmt='(A,F30.16)') " Number of access =", tmp22array(8,ib)
2827 enddo
2828 endif
2830 if(itask==0)then
2831 if(allocated(tmp22array))deallocate(tmp22array)
2832 if(dt1>zero .and. allocated(order) )deallocate(order)
2833 endif
2834 endif
2835
2836
2837
2838
2839
2840
2841
2842
2843 IF(dt1==zero)nbl1 = 0
2844 DO ib=nbf,nbl1
2848
2849 IF( newinbuffer == 1 )THEN
2850
2851 mcell = 1
2854
2855
2856
2860 gbuf => elbuf_tab(ng)%GBUF
2861 brick_list(nin,ib)%Vold_Scell = gbuf%VOL(idloc)
2862
2863
2864
2865
2866
2867 ENDIF
2868 enddo
2869
2870
2871
2872
2874
2875
2876
2877 nbl1 = nbl
2878 IF(dt1==zero)THEN
2879 nbl1 = 0
2880 DO ib=nbf,nbl
2883 ENDDO
2884 ENDIF
2885 DO ib=nbf,nbl1
2889 icell = 0
2890 m(:,:) = zero
2892 mtn_ = iparg(1,ngb(ib))
2893
2894 IF(wascut>0)THEN
2895
2896 DO inod = 1,8
2898 ii =
brick_list(nin,ib)%NODE(inod)%OLD_WhichCell
2899 IF(ii <0) ii = 1
2901 enddo
2902 IF(nbcut>2 .AND. m(9,9)==zero)m(9,9) =
brick_list(nin,ib)%POLY(jj)%Vnew
2903
2904
2905 icell = 9
2906 jj = icell
2907 var = zero
2908 DO ii=1,9
2909 IF(m(ii,jj)>zero)var=var
2910 enddo
2911 IFTHEN
2912 ii=maxloc(
brick_list(nin,ib)%POLY(1:9)%OLD_Vnew,1)
2913 DO i=1,9
2914 IF (i==ii) cycle
2915 m(i,jj) = zero
2916 ENDDO
2917 ELSE
2918 IF(var>two )THEN
2919 m(1:8,jj) = zero
2920 ELSEIF(var==two )THEN
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2935 lcond1 = var<var_
2938 lcond2 = var<var_
2939
2940 m(9,9) = zero
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950 ENDIF
2951 endif
2952
2953 ELSEIF(wascut == 0)THEN
2955 m(1:9,1:9) = zero
2956 m(1,mcell) =
brick_list(nin,ib)%POLY(mcell)%Vnew
2957
2958 ENDIF
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973 icell = 0
2974 DO WHILE (icell<=ncell)
2975 icell = icell + 1
2976 IF (icell>ncell .AND. ncell/=0)icell=9
2977 var = zero
2978 var_ = zero
2979 jj = icell
2980 vfrac(1:4) = zero
2981 var_vf(1:4) = zero
2982 vold_phase(1:4) = zero
2984 DO ii=1,9
2985 IF(m(ii,jj)==zero)cycle
2986 vi
2987
2988 var = var + vi *vj / sum(m(ii,:))
2989 ENDDO
2991
2992
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 enddo
3036 ENDDO
3037
3038
3039
3040
3041
3042
3043
3044 nbl1 = nbl
3045 in = 0
3046 debug_outp2 = .false.
3048 if(itask==0)
ALLOCATE (tmp22array(6,
nb))
3050 tmp22array(1:6,nbf:nbl)=zero
3051 do ib=nbf,nbl
3054 debug_outp2 = .true.
3055 exit
3056 endif
3057 enddo
3058 endif
3059 IF(dt1==zero)nbl1=0
3060 DO ib=nbf,nbl1
3062
3063
3064 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
3066 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
3071 gbuf => elbuf_tab(ngb(ib))%GBUF
3072 lbuf => elbuf_tab(ngb(ib))%BUFLY(1)%LBUF(1,1,1)
3073 icell = 0
3074
3075
3077
3078 DO ic=1,numsecnd
3079 icellv =
brick_list(nin,ib)%SecndList%ICELLv(ic)
3084 ibv = ibv
3089
3090 nnodes =
brick_list(nin,ibv)%POLY(icellv)%NumNOD
3091 j1 = 0
3092 j2 = 0
3093 DO k1=1,nnodes
3094 inod =
brick_list(nin,ibv)%POLY(icellv)%ListNodID(k1)
3095 fv_old =
brick_list(nin,ibv)%NODE(inod)%WhereWasMain
3096 IF (fv_old == 0)cycle
3097
3098 IF (fv_old == fv)cycle
3099
3100
3101 IF(fv_old<=nv46)THEN
3102 ibmo =
brick_list(nin,ibv)%Adjacent_Brick(fv_old,4)
3103 ELSE
3104 j = fv_old
3105 j1 = j/10
3106 j2 = mod(j,10)
3107 ibv =
brick_list(nin,ibv)%Adjacent_Brick(j1,4)
3108 ibmo =
brick_list(nin,ibv)%Adjacent_Brick(j2,4)
3109 ENDIF
3110
3111 ibm = ib
3112 lltm = iparg(2,ngb(ib))
3113
3114 lcycle = .false.
3116 IF(numtarget>=2)print *,
"**inter22 - Warning Multiple targets",ixs(11,
brick_list(nin,ibv)%ID), icellv
3117 DO itarget=1,numtarget
3118 IF (
brick_list(nin,ibmo)%MergeTarget(3,itarget)==ibm)
THEN
3119 lcycle = .true.
3120 EXIT
3121 ENDIF
3122 ibmo =
brick_list(nin,ibmo)%MergeTarget(3,itarget)
3123 print *,
"**inter22 : multiple targets", ixs(11,
brick_list(nin,ibv)%ID), icellv
3124 ENDDO
3125 if(lcycle)cycle
3126 lcycle = .false.
3127
3128
3129
3130 lfound = .false.
3131 numsecnd2 = old_secndlist(nin,ibmo)%Num
3133 llto = iparg(2,ngo)
3134 DO ic2 = 1, numsecnd2
3135
3136 fv2 = old_secndlist(nin,ibmo)%FV(ic2)
3137 icellv2 = old_secndlist(nin,ibmo)%ICELLv(ic2)
3138 ibv2 = old_secndlist(nin,ibmo)%IBv(ic2)
3139
3140 IF(fv2 /= fv_old )cycle
3141
3142
3143
3144
3145 volcell = zero
3146 volsecnd = zero
3147 nnodes2 = old_secndlist(nin,ibmo)%NumNOD_Cell(ic2)
3148 DO k2=1,nnodes2
3149 inod2 = old_secndlist(nin,ibmo)%ListNodID(ic2,k2)
3150 icell2 =
brick_list(nin,ibv2)%NODE(inod2)%WhichCell
3151
3152 IF(ibmcur == ib) volsecnd = volsecnd + one/nnodes*
brick_list(nin,ibv2)%POLY(icell2)%Vnew
3153 volcell = volcell + one/nnodes*
brick_list(nin,ibv2)%POLY(icell2)%Vnew
3154 ENDDO
3155 if (volsecnd == zero)cycle
3156
3157
3158
3159
3160 ratio = volsecnd/volcell
3161
3162 volcell = ratio * old_secndlist(nin,ibmo)%VOL(ic2)
3164 gbufo => elbuf_tab(ngb(ibmo))%GBUF
3165
3166
3167 eint = volcell * gbufo%EINT(idlocb(ibmo))
3168 rho = volcell * gbufo%RHO(idlocb(ibmo))
3169 mom(1) = volcell * gbufo%MOM(llto*(1-1) + idlocb(ibmo))
3170 mom(2) = volcell * gbufo%MOM(llto*(2-1) + idlocb(ibmo))
3171 mom(3) = volcell * gbufo%MOM(llto*(3-1) + idlocb(ibmo))
3172 DO j=1,nv46
3173 sig(j) = volcell * gbufo%SIG(llto*(j-1)+idlocb(ibmo))
3174 ENDDO
3175 gbuf%EINT(idlocb(ibm)) = (gbuf%EINT(idlocb(ibm)) * vold + eint) / (vold+volcell)
3176 gbuf%RHO(idlocb(ibm)) = (gbuf%RHO(idlocb(ibm)) * vold + rho) / (vold+volcell)
3177 gbuf%MOM(lltm*(1-1) + idlocb(ibm)) = (gbuf%MOM(lltm*(1-1) + idlocb(ibm)) * vold + mom(1)) / (vold+volcell)
3178 gbuf%MOM(lltm*(2-1) + idlocb(ibm)) = (gbuf%MOM(lltm*(2-1) + idlocb
3179 gbuf%MOM(lltm*(3-1) + idlocb(ibm)) = (gbuf%MOM(lltm*(3-1) + idlocb(ibm)) * vold + mom(3)) / (vold+volcell)
3184
3185
3186
3187
3188 DO j=1,nv46
3189 gbuf%SIG(lltm*(j-1)+idlocb(ibm)) = (gbuf%SIG(lltm*(j-1)+idlocb(ibm)) * vold + sig(j)) / (vold+volcell)
3190 ENDDO
3191
3192 if(debug_outp2)then
3193
3194 in = in + 1
3195 endif
3196
3198
3199
3200
3201
3202 tmp22array(1,ibm)= ixs(11,
brick_list(nin,ib)%id)
3203 tmp22array(2,ibm)= ixs(11,
brick_list(nin,ibmo)%id)
3204 tmp22array(3,ibm)= ixs(11,
brick_list(nin,ibm)%id)
3205 tmp22array(4,ibm)=
brick_list(nin,ibm)%Vold_SCell
3206 tmp22array(5,ibm)=
brick_list(nin,ibm)%Vold_SCell +volcell
3207 tmp22array(6,ibm)= volcell
3208 endif
3209
3210
3212
3213 mtn_ = iparg(1,ngb(ibmo))
3214 volcell51(1:trimat) = zero
3215 IF(mtn_==37)THEN
3216 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
3217 mt = ixs(1,brickid)
3218 iadbuf = ipm(7,mt)
3219 rho10 = bufmat(iadbuf-1+11)
3220 rho20 = bufmat(iadbuf-1+12)
3221
3222
3223
3224
3225
3226 mbuf => elbuf_tab(ngb(ibm))%BUFLY(1)%MAT(1,1,1)
3227 mbufo => elbuf_tab(ngb(ibmo))%BUFLY(1)%MAT(1,1,1)
3228 llt_ = iparg(2,ngb(ibm))
3229 llt_o = iparg(2,ngb(ibmo))
3230
3231
3232 pvar => mbuf%VAR((5-1)*llt_ +idlocb(ibm))
3233 pvaro => mbufo%VAR((5-1)*llt_o+idlocb(ibmo))
3234
3235 pvar = (pvar * vold + volcell * pvaro)/ (vold+volcell)
3236 pvar =
max(pvar,zero)
3237
3238
3239 pvar => mbuf%VAR((4-1)*llt_ +idlocb(ibm))
3240 pvaro => mbufo%VAR((4-1)*llt_o+idlocb(ibmo))
3241
3242 pvar = (pvar * vold + volcell * pvaro)/ (vold+volcell)
3243 pvar =
max(pvar,zero)
3244
3245
3246 pvar => mbuf%VAR((3-1)*llt_ +idlocb(ibm))
3247 pvaro => mbufo%VAR((3-1)*llt_o+idlocb(ibmo))
3248 alp = mbuf%VAR((4-1)*llt_ +idlocb(ibm
3249 alpo = mbufo%VAR((4-1)*llt_o+idlocb(ibmo))
3250
3251 pvar = (pvar*alp*vold+volcell*pvaro*alpo)
3252 IF(pvar>zero)pvar=pvar/(alp*vold+alpo*volcell)
3253 pvar =
max(pvar,zero)
3254
3255 IF( pvar == zero) pvar = rho10
3256
3257
3258 pvar => mbuf%VAR((2-1)*llt_ +idlocb(ibm))
3259 pvaro => mbufo%VAR((2-1)*llt_o+idlocb(ibmo))
3260 alp = mbuf%VAR((5-1)*llt_ +idlocb(ibm))
3261 alpo = mbufo%VAR((5-1)*llt_o+idlocb(ibmo))
3262
3263 pvar = (pvar*alp*vold+volcell*pvaro*alpo)
3264 IF(pvar>zero)pvar=pvar/(alp*vold+alpo*volcell)
3265 pvar =
max(pvar,zero)
3266
3267 IF( pvar == zero) pvar = rho20
3268
3269
3270 pvar => mbuf%VAR((1-1)*llt_ +idlocb(ibm))
3271 pvaro => mbufo%VAR((1-1)*llt_o+idlocb(ibmo))
3272
3273 pvar = (pvar * vold + volcell * pvaro)/ (vold+volcell)
3274 pvar =
max(pvar,zero)
3275
3276
3277
3278
3279
3280
3282 idloc = idlocb(ibm)
3283 ng = ngb(ibm)
3284 vol = vold+volcell
3286 1 elbuf_tab, ixs, bufmat, iparg, ipm,
3287 2 idloc , ng , brickid, vol
3288 . )
3289
3290
3291 ELSEIF(mtn_==51)THEN
3292 mbuf => elbuf_tab(ngb(ibm))%BUFLY(1)%MAT(1,1,1)
3293 llt_ = iparg(2,ngb(ibm))
3294 mbufo => elbuf_tab(ngb(ibmo))%BUFLY(1)%MAT(1,1,1)
3295 llt_o = iparg(2,ngb(ibmo))
3296
3297 DO itrimat=1,trimat
3298
3299 ipos = 1
3300 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
3301 k = k0 * llt_o
3302 vfrac(itrimat) = mbufo%VAR(k+idlocb(ibmo))
3303 enddo
3304
3305 DO itrimat=1,trimat
3306 ipos = 11
3307 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
3308 k = k0 * llt_
3309 volcell51(itrimat) = volcell * vfrac(itrimat)
3310 mbuf%VAR(k+idlocb(ibm)) = mbuf%VAR(k+idlocb(ibm)) + volcell51(itrimat)
3311 enddo
3312
3313 DO itrimat=1,trimat
3314
3315 ipos = 1
3316 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos
3317 k = k0 * llt_
3318 vfrac(itrimat) = mbuf%VAR(k+idlocb(ibm))
3319 IF(volcell51(itrimat)<=zero)cycle
3320 DO ipos = 1,m51_nvphas
3321 IF(ipos==11)cycle
3322 k2 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
3323 k = llt_ * k2
3324 ko = llt_o * k2
3325 pvar => mbuf%VAR(k+idlocb(ibm))
3326 pvar = ( pvar * vfrac(itrimat)*vold + volcell51(itrimat)*mbufo%VAR(ko+idlocb(ibmo)) )
3327 pvar = pvar / (vfrac(itrimat)*vold + volcell51(itrimat))
3328 enddo
3329 enddo
3330
3331 endif
3332
3333
3334 vold_l(itask,0,ibmo) = vold_l(itask,0,ibmo) + volcell
3335 vold_l(itask,1:trimat,ibmo) = vold_l(itask,1:trimat,ibmo) + volcell51(1:trimat)
3336 enddo
3337 EXIT
3338 enddo
3339 enddo
3340 enddo
3341
3343
3345 write (*,fmt='(A)') " === LINK SWITCH ==="
3347 IF(tmp22array(1,ib)==0)cycle
3348 print *, "brick target =", tmp22array(1,ib)
3349 print *, "brick origin =", tmp22array(2,ib)
3350 print *, "brick main =", tmp22array(3,ib)
3351 print *, "adding",tmp22array(6,ib) ,'to', tmp22array(4,ib)
3352 print *, "updated target -old volume- =", tmp22array(5,ib)
3353 ENDDO
3354 endif
3356
3357
3358 if(itask==0)then
3361 DO it = 0,nthread-1
3362 IF (vold_l(it,0,ib) == zero)cycle
3363 print *, ""
3364 print *,
" brick ID =", ixs(11,
brick_list(nin,ib)%id)
3365 print *,
" removing ",vold_l(it,0,ib),'from',
brick_list(nin,ib)%Vold_SCell
3366 print *,
" new origin volume =", ixs(11,
brick_list(nin,ib)%id)
3367 print *,
" %vold, %vnew " ,
brick_list(nin,ib)%Vold_SCell- vold_l(it,0,ib),
brick_list(nin,ib)%Vnew_SCell
3368 print *, ""
3369 ENDDO
3370 ENDDO
3371 endif
3372 endif
3374
3375
3376
3377 DO ib=nbf,nbl1
3378
3379 DO it = 0,nthread-1
3380 IF (vold_l(it,0,ib) == zero)cycle
3382
3383
3384
3385
3386
3387
3388 endif
3389
3391
3392
3393 mtn_ = iparg(1,ngb(ib))
3394 IF(mtn_==51)THEN
3395 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
3396 llt_ = iparg(2,ngb(ib))
3397 DO itrimat=1,trimat
3398 ipos = 11
3399 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
3400 k = k0 * llt_
3401 mbuf%VAR(k+idlocb(ib)) = mbuf%VAR(k+idlocb(ib)) - vold_l(it,itrimat,ib)
3402 enddo
3403 endif
3404
3405
3406
3407
3408
3409 vold_l(it,0:
max(0,trimat),ib) = zero
3410 enddo
3411 enddo
3412
3413
3414
3415
3418 if(itask==0)DEALLOCATE (tmp22array)
3419 endif
3420
3421
3422
3423
3424 DO ib=nbf,nbl
3427
3428 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
3430 ncell = nbcut
3431 icell = 0
3433
3434 mcell = pmainid
3435 IF(mcell == 0)cycle
3437 DO j=1,6
3438 iv = padjbrick(j,1)
3439 ngv = padjbrick(j,2)
3440 idlocv = padjbrick(j,3)
3441 ibv = padjbrick(j,4)
3442 IF(ibv>0)THEN
3444 IF(nbcutv==0)cycle
3445 nadjcell =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%NAdjCell
3446 DO ic=1,nadjcell
3447 icellv =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%Adjacent_Cell(ic)
3449 IF(icellv == mcellv)cycle
3450
3451
3452 jv =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(1)
3453 idm =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(3)
3454 IF(ie/=idm)THEN
3455
3456
3461 brick_list(nin,ib)%ADJ_ELEMS%ICELL(k) = icellv
3462 brick_list(nin,ib)%ADJ_ELEMS%SecndFACE(k) = jv
3463 else
3464 padjbrickv =>
brick_list(nin,ibv)%Adjacent_Brick(1:6,1:5)
3465 DO j2=1,6
3466 IF (j2==jv)cycle
3467 ivv = padjbrick(j2,1)
3468 ngvv = padjbrick(j2,2)
3469 idlocvv = padjbrick(j2,3)
3470 ibvv = padjbrick(j2,4)
3471 ifvv = padjbrick(j2,5)
3472 IF(ivv == 0)cycle
3473
3474 IF(ibvv > 0)THEN
3476
3477 nadjcellv =
brick_list(nin,ibvv)%POLY(mcellvv)%FACE(ifvv)%NAdjCell
3478 DO k=1,nadjcellv
3479 icv =
brick_list(nin,ibvv)%POLY(mcellvv)%FACE(ifvv)%Adjacent_Cell(k)
3480 IF(icv/=icellv)cycle
3485 brick_list(nin,ib)%ADJ_ELEMS%ICELL(k2) = icellv
3486 brick_list(nin,ib)%ADJ_ELEMS%SecndFACE(k2) = j2
3487 EXIT
3488 enddo
3489 ELSEIF(ibvv == 0)THEN
3495 brick_list(nin,ib)%ADJ_ELEMS%SecndFACE(k2) = j2
3496 ENDIF
3497 enddo
3498 endif
3499 enddo
3500 ENDIF
3501 enddo
3502 ENDDO
3503
3504
3505
3506
3507
3508
3509 DO ib=nbf,nbl
3513 icell = 0
3514 nintp(1:6,1:9) = 0
3515 nnod(1:6,1:9) = 0
3516 IF(nbcut == 0) THEN
3517 brick_list(nin,ib)%POLY(1)%FACE(1:6)%NumPOINT=(/4,4,4,4,4,4/)
3518 cycle
3519 ENDIF
3520 DO WHILE (icell<=ncell)
3521 icell = icell + 1
3522 IF (icell>ncell .AND. ncell/=0)THEN
3523 icell=9
3524 cycle
3525 ENDIF
3527 brick_list(nin,ib)%POLY(icell)%FACE(1:6)%NumPOINT = 0
3528 DO j=1,6
3529 jj = gface(j,secid)
3530 IF(jj==0)EXIT
3531 np = gnpt(j,secid)
3532 nn = gnnod(j,secid)
3534 nintp(jj,icell) = np-nn
3535 nnod(jj,icell) = nn
3536 ENDDO
3537 enddo
3538 IF(icell==9)THEN
3539 DO j=1,6
3540
3541 nn = sum( nnod(j,1:ncell) )
3542 nn = 4 - nn
3543
3544 np = sum( nintp(j,1:ncell) )
3545
3546 brick_list(nin,ib)%POLY(9)%FACE(j)%NumPOINT = np + nn
3547 ENDDO
3548 ENDIF
3549 ENDDO
3550
3551
3552
3553
3554
3555 DO ib=nbf,nbl
3557
3558 plistnodid(1)%p(1:8) =>
brick_list(nin,ib)%POLY(1)%ListNodID(1:8)
3559 plistnodid(2)%p(1:8) =>
brick_list(nin,ib)%POLY(2)%ListNodID(1:8)
3560 plistnodid(3)%p(1:8) =>
brick_list(nin,ib)%POLY(3)%ListNodID(1:8)
3561 plistnodid(4)%p(1:8) =>
brick_list(nin,ib)%POLY(4)%ListNodID(1:8)
3562 plistnodid(5)%p(1:8) =>
brick_list(nin,ib)%POLY(5)%ListNodID(1:8)
3563 plistnodid(6)%p(1:8) =>
brick_list(nin,ib)%POLY(6)%ListNodID(1:8)
3564 plistnodid(7)%p(1:8) =>
brick_list(nin,ib)%POLY(7)%ListNodID(1:8)
3565 plistnodid(8)%p(1:8) =>
brick_list(nin,ib)%POLY(8)%ListNodID(1:8)
3566 plistnodid(9)%p(1:8) =>
brick_list(nin,ib)%POLY(9)%ListNodID(1:8)
3567 pnodwasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
3569 icell = 0
3571
3573 pnodwasmain(1:8)%NodWasMain = 0
3574 pwherewasmain(1:8)%WhereWasMain = 0
3575 DO j=1,mnod
3576 pnodwasmain(plistnodid(mcell)%p(j))%NodWasMain = 1
3577 ENDDO
3578
3579 DO WHILE (icell<=ncell)
3580 icell = icell +1
3581 IF (icell>ncell .AND. ncell/=0)icell=9
3582 IF(icell == mcell)cycle
3583 ipos =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(1)
3585
3586 DO j=1,mnod
3587 pwherewasmain(plistnodid(icell)%p(j))%WhereWasMain = ipos
3588 enddo
3589 enddo
3590 ENDDO
3591
3592
3593
3594
3595
3596
3597 DO ib=nbf,nbl
3599 iiad22(nin, ie) = ib
3600 ENDDO
3601
3602
3603
3604
3605 DO ib=nbf,nbl
3606 mlw = iparg(1,ngb(ib))
3608 ENDDO
3609
3610
3611
3612
3613
3614
3615 DO ib=nbf,nbl
3616 numsecnd = old_secndlist(nin,ib)%Num
3617 IF (numsecnd==0)cycle
3618 old_secndlist(nin,ib)%Num = 0
3619 old_secndlist(nin,ib)%NumSecndNodes = 0
3620 DO j=1,24
3621 old_secndlist(nin,ib)%FM(j) = 0
3622 old_secndlist(nin,ib)%FV(j) = 0
3623 old_secndlist(nin,ib)%IV(j) = 0
3624 old_secndlist(nin,ib)%IBV(j) = 0
3625 old_secndlist(nin,ib)%ICELLv(j) = 0
3626 old_secndlist(nin,ib)%VOL(j) = zero
3627 old_secndlist(nin,ib)%NumNOD_Cell(j) = 0
3628 old_secndlist(nin,ib)%ListNodID(j,1:8) = 0
3629 ENDDO
3630 enddo
3631
3632
3633
3634 !------------------------------------------------------------
3635 DO ib=nbf,nbl
3638 IF(mcell==0)THEN
3640 ELSE
3641 brick_list(nin,ib)%OldMainStrongNode = inod_w
3642 ENDIF
3643 ENDDO
3644
3645
3646
3647
3648 lstilltruss = .true.
3649 igr = ipari(52)
3650 ntrus = ipari(53 )
3651 IF( itask==0 .AND. ntrus/=0 )THEN
3652 ii = 1
3653 DO ib=nbf,nbl
3655 IF (mcell==0 ) cycle
3656 IF (.NOT.lstilltruss) cycle
3657 point0(1:3) =
brick_list(nin,ib)%POLY(mcell)%CellCenter(1:3)
3658
3659
3661 DO isecnd=1,numsecnd
3662 ibv =
brick_list(nin,ib)%SecndList%IBV(isecnd)
3663 icellv =
brick_list(nin,ib)%SecndList%ICELLv(isecnd)
3664 pointtmp(1:3) =
brick_list(nin,ibv)%POLY(icellv)%CellCenter(1:3)
3665
3666 IF (ii>ntrus) THEN
3667 lstilltruss=.false.
3668 EXIT
3669 print *, "** Warning inter22 : no more truss in group to mark cell links"
3670 ENDIF
3671 x(1:3,ixt(2,igrtruss(igr)%ENTITY(ii))) = point0(1:3)
3672 x(1:3,ixt(3,igrtruss(igr)%ENTITY(ii))) = pointtmp(1:3)
3673
3675 write (*,fmt='(A,I10,A,I10,A,I10)') "set TRUS_id=", ixt(nixt,igrtruss(igr)%ENTITY(ii)) ,
3677 endif
3678 ii = ii + 1
3679 ENDDO
3680 ENDDO
3681 DO ii = 1,ntrus
3682
3683 x(1:3,ixt(2,igrtruss(igr)%ENTITY(ii))) = (/zero, zero, zero/)
3684 x(1:3,ixt(3,igrtruss(igr)%ENTITY(ii))) = (/ one, zero, zero/)
3685 ENDDO
3686 ENDIF
3687
3688
3689
3690
3691
3692 DO ib=nbf,nbl
3694 icell = 0
3695 ncell = nbcut
3696 IF(nbcut == 0)THEN
3697 icell = 1
3698 brick_list(nin,ib)%POLY(icell)%DVOL(1) = zero
3699 cycle
3700 ENDIF
3701 DO WHILE (icell<=ncell)
3702 icell = icell +1
3703 IF (icell>ncell .AND. ncell/=0)icell=9
3704 IF(icell == 9)THEN
3706 ELSE
3707
3708 vsum(1) =
brick_list(nin,ib)%PCUT(icell)%Vel(1)
3709 vsum(2) =
brick_list(nin,ib)%PCUT(icell)%Vel(2)
3710 vsum(3) =
brick_list(nin,ib)%PCUT(icell)%Vel(3)
3711
3712
3713
3714
3718 dvol_predic = dt1*(vsum(1)*n_(1) + vsum(2)*n_(2) + vsum(3)*n_(3))
3719 brick_list(nin,ib)%POLY(icell)%DVOL(1) = dvol_predic
3720 ENDIF
3721 enddo
3722 enddo
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3745
3746
3747 DO ib=nbf,nbl
3751
3753 DO ic=1,numsecnd
3754 icellv =
brick_list(nin,ib)%SecndList%ICELLv(ic)
3760 enddo
3761 enddo
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775 lskip = .false.
3776
3777
3778
3779
3780 if(dt1==zero)then
3781 do ib=nbf,nbl
3783 enddo
3784 endif
3785
3786
3787 if(.NOT.lskip)then
3788 DO ib=nbf,1*nbl
3794 dvol_numeric = vnew-vold
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810 IF(abs(dvol_numeric) > ratio22*abs(dvol_predic) .AND. dvol_predic /= zero .AND. ratio22 < 1000 )THEN
3811 IF((icode /= old_icode ) )THEN
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3825 gbuf => elbuf_tab(ng)%GBUF
3826
3827
3828
3829
3830
3831 mlw
3834 IF(mlw==51)THEN
3835 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
3836 llt = iparg(2,ng)
3837 DO itrimat=1,trimat
3838
3839
3840 ipos = 1
3841 k = llt * (m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1)
3842 vfrac(itrimat) = mbuf%VAR(k+idloc)
3843 ipos = 11
3844 k = llt * (m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1)
3845 volcell51_old(itrimat) = mbuf%VAR(k+idloc)
3846 mbuf%VAR(k+idloc) =
max(zero, (vnew-dvol_predic)*vfrac(itrimat) )
3847 volcell51(itrimat) = mbuf%VAR(k+idloc)
3848 enddo
3849 ENDIF
3851
3852
3853
3854
3855
3856 endif
3857 endif
3858 endif
3859 enddo
3860 endif
3861
3864 IF(itask==0)THEN
3870 dvol_numeric = vnew-vold
3873 print *,
"+------elem_id =",ixs(11,
brick_list
3874 print *, "+--------old_icode =",old_icode
3875 print *, "+--------icode =",icode
3876 print *,
"+--------dvol_prediction =",
brick_list(nin,ib)%dvol
3877 print *, "+--------dvol_numeric =",vnew-vold
3878 print *, "+--------vnew =",vnew
3879 print *,
"+--------vold =",vold ,
"->",
brick_list(nin,ib)%Vold_SCell
3880 ENDDO
3881 ENDIF
3882 ENDIF
3883
3884
3885
3886
3887
3888
3889
3890 IF(dt1==zero)THEN
3891 DO ib=nbf,nbl
3895 IF(mcell==0)cycle
3897 ENDDO
3898 ENDIF
3899 DO ib=nbf,nbl
3901
3903
3904 gbuf => elbuf_tab
3905 IF(psubvold>zero)gbuf%VOL(idlocb(ib)) = psubvold
3906
3907
3908 ENDDO
3909
3910
3911
3912
3913
3915 do ib=nbf,nbl
3917 plistnodid(1)%p(1:8) =>
brick_list(nin,ib)%POLY(1)%ListNodID(1:8)
3918 plistnodid(2)%p(1:8) =>
brick_list(nin,ib)%POLY(2)%ListNodID(1:8)
3919 plistnodid(3)%p(1:8) =>
brick_list(nin,ib)%POLY(3)%ListNodID(1:8)
3920 plistnodid(4)%p(1:8) =>
brick_list(nin,ib)%POLY(4)%ListNodID(1:8)
3921 plistnodid(5)%p(1:8) =>
brick_list(nin,ib)%POLY(5)%ListNodID(1:8)
3922 plistnodid(6)%p(1:8) =>
brick_list(nin,ib)%POLY(6)%ListNodID(1:8)
3923 plistnodid(7)%p(1:8) =>
brick_list(nin,ib)%POLY(7)%ListNodID(1:8)
3925 plistnodid(9)%p(1:8) =>
brick_list(nin,ib)%POLY(9)%ListNodID(1:8)
3926
3927
3928 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(
3932 icell = 0
3933 mcell = mcell
3935 gbuf => elbuf_tab(ngb(ib))%GBUF
3936 vol = gbuf%VOL(idlocb(ib))
3937 brickid = idb(ib)
3939 write (*,fmt=
'(A,I12)')
"+=== BRICK ID===", ixs(11,
id)
3940 if(ncell==0)then
3941 write (*,fmt='(A )') "| uncut: "
3942 write (*,fmt='(A,1F30.20)') "| volume: ", vol
3943 write (*,fmt=
'(A,1F30.20)')
"| ext. volume: ",
brick_list(nin,ib)%Vnew_Scell
3944 write (*,fmt='(A,1F30.20)') "| masse: ", gbuf%VOL(idlocb(ib)) * gbuf%RHO(idlocb(ib))
3947 write (*,fmt='(A )') "| secnd list : "
3948 write (*,fmt=
'(A,I10 )')
"| + J : ",
brick_list(nin,ib)%SecndList%FM(j)
3949 write (*,fmt=
'(A,I10 )')
"| + IB : ",
brick_list(nin,ib)%SecndList%IBv(j)
3950 write (*,fmt=
'(A,I10 )')
"| + brickID : ", ixs(11,
brick_list(nin,ib)%SecndList%IV(j))
3951 enddo
3952 endif
3953 cycle
3954 endif
3955 write (*,fmt='(A,1F30.20)') "| volume: ", vol
3956 write (*,fmt='(A,6F30.20)') "| faces: ", f(1:6,ib)
3957 write (*,fmt='(A,1F30.20)') "| masse: ", gbuf%VOL(idlocb(ib)) * gbuf%RHO(idlocb(ib))
3958 DO WHILE (icell<=ncell)
3959 icell = icell +1
3960 IF (icell>ncell .AND. ncell/=0)icell=9
3961 debugmainsecnd = '.........|'
3963 write (*,fmt='(A )') "|"
3964 if(icell/=9)then
3965 write (*,fmt='(A,I1,A,A,A1,I2,A,A6)')
3966 .
"+== ICELL= ", icell ,
", SecType=",
brick_list(nin,ib)%SECTYPE(icell) ,
3967 .
"(",
brick_list(nin,ib)%SecID_Cell(icell) ,
") - ", char1
3968 else
3969 write (*,fmt='(A,A6)') "+== REMAINING POLYHEDRON - ", char1
3970 endif
3971
3972 write (*,fmt='(A )') "| |"
3973 write (*,fmt='(A,I1)') "| +===Main/Secnd=", pismain(icell)%IsMain
3974 write (*,fmt='(A,F30.20)') "| +======SUVOLUMES=", psubvol(icell)%Vnew
3975 write (*,fmt=
'(A,6F30.20)')
"| +=======SUBFACES=",
brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Surf
3976 write (*,fmt=
'(A,F30.20)')
"| +=======CUT AERA=",
brick_list(nin,ib)%PCUT(icell)%SCUT(1)
3977 write (*,fmt='(A,A,I2)') "| +======NUM POINT=", " ",BRICK_LIST(NIN,IB)%POLY(ICELL)%NumPOINT
3978 write (*,FMT='(A,A,I1,A,8I12)') "| +======node list=",
3979 . " (",MNOD,") ", pListNodID(ICELL)%p(1:MNOD)
3980 write (*,FMT='(A,A,8I12)') "| | radids=",
3981 . " ", IXS(1+pListNodID(ICELL)%p(1:MNOD),ID)
3982 write (*,FMT='(A,A,8I12)') "| | userids=",
3983 . " ", ITAB(IXS(1+pListNodID(ICELL)%p(1:MNOD),ID))
3984 IAD2 = ALE_CONNECTIVITY%ee_connect%iad_connect(brickID)
3985 LGTH2 = ALE_CONNECTIVITY%ee_connect%iad_connect(brickID+1) -
3986 . ALE_CONNECTIVITY%ee_connect%iad_connect(brickID)
3987 If(SUM(IABS(ALE_CONNECTIVITY%ee_connect%connected(IAD2:IAD2 + LGTH2 - 1)))/=0)then
3988 write (*,FMT='(A,6I10)') "| +===adj brick(i)=", pAdjBRICK(1:6,1)
3989 DO J=1,6
3990 IF( pAdjBRICK(J,1)/=0 )THEN
3991 write (*,FMT='(A,6I10)') "| +===adj brick(u)=", IXS(11,pAdjBRICK(J,1))
3992 ENDIF
3993 ENDDO
3994 DO J=1,6
3995 NadjCell = BRICK_LIST(NIN,IB)%POLY(ICELL)%FACE(J)%NAdjCell
3996 IF(NadjCell/=0)THEN
3997 write (*,FMT='(A,I1,A,5I3)') "| +======adj cells, face",J, "",
3998 . BRICK_LIST(NIN,IB)%POLY(ICELL)%FACE(J)%Adjacent_Cell(1:NadjCell)
3999 ENDIF
4000 ENDDO
4001 ENDIF
4002 enddo!next icell
4003 write (*,FMT='(A )') " "
4004 enddo!next IB
4005.AND. if(itask==0debug_outp)then
4006 write (*,FMT='(A )') " ----sini22_end----"
4007 write (*,FMT='(A )') " "
4008 endif
4009 endif! (IBUG22_sinit/=0)
4010
4011 !------------------------------------------------------------!
4012 ! @44. DEBUG - WRITE CUT CELL BUFFER !
4013 !------------------------------------------------------------!
4014 ! CALL WRITE_CUT_CELL_BUFFER() !post/debug
4015
4016 !------------------------------------------------------------!
4017 ! @45. SUPERCELL CENTERS !
4018 !------------------------------------------------------------!
4019 DO IB=NBF,NBL
4020 NCELL = BRICK_LIST(NIN,IB)%NBCUT
4021 NumSECND = BRICK_LIST(NIN,IB)%SecndList%Num
4022 MainID = BRICK_LIST(NIN,IB)%mainID
4023 IF (MainID ==0) CYCLE
4024 VolCELL = BRICK_LIST(NIN,IB)%POLY(mainID)%Vnew
4025 VOL = VolCELL !cumul
4026 pPOINT(1:3) = BRICK_LIST(NIN,IB)%POLY(mainID)%CellCenter(1:3) * VolCELL
4027 DO IC=1,NumSECND
4028 ICELLv = BRICK_LIST(NIN,IB)%SecndList%ICELLv(IC)
4029 IBv = BRICK_LIST(NIN,IB)%SecndList%IBv(IC)
4030 VolCELL = BRICK_LIST(NIN,IBv)%POLY(ICELLv)%Vnew
4031 Point0(1:3) = BRICK_LIST(NIN,IBv)%POLY(ICELLv)%CellCenter(1:3)
4032 pPOINT(1) = pPOINT(1) + VolCELL * Point0(1)
4033 pPOINT(2) = pPOINT(2) + VolCELL * Point0(2)
4034 pPOINT(3) = pPOINT(3) + VolCELL * Point0(3)
4035 VOL = VOL + VolCELL
4036 ENDDO!next IC
4037 pPOINT(1) = pPOINT(1) / VOL
4038 pPOINT(2) = pPOINT(2) / VOL
4039 pPOINT(3) = pPOINT(3) / VOL
4040 BRICK_LIST(NIN,IB)%SCellCenter(1:3) = pPOINT(1:3)
4041 ENDDO!next IB
4042
4043 !------------------------------------------------------------!
4044 ! @46. MARK SUPER-CELL CENTERS WITH ORPHAN NODES !
4045 !------------------------------------------------------------!
4046 lStillNode = .TRUE.
4047 IF(IPARI(70)/=0)THEN
4048 NNODES = IGRNOD(IPARI(70))%NENTITY
4049 !!!WRITE(*,*)(ITAB(IBUFSSG(J)),J=IAD0,IAD0+NNODES-1)
4050.AND. IF( ITASK==0 NNODES/=0 )THEN
4051 II = 1 ! first node of group node
4052 DO IB=NBF,NBL
4053 MCELL = BRICK_LIST(NIN,IB)%mainID
4054 IF (MCELL==0 ) CYCLE
4055.NOT. IF (lStillNode) CYCLE
4056 Point0(1:3) = BRICK_LIST(NIN,IB)%SCellCenter(1:3)
4057 IF (II>NNODES) THEN
4058 lStillNode = .FALSE.
4059 print *, "** warning inter22 : no more node in group to mark cell center. last one was" ,
4060 . ITAB(IGRNOD(IPARI(70))%ENTITY(NNODES))
4061 EXIT
4062 ENDIF
4063 X(1:3,IGRNOD(IPARI(70))%ENTITY(II)) = Point0(1:3)
4064 if(IBUG22_OrphanNodes == 1)then
4065 write (*,FMT='(A,I10,A,I10,A,I10)')"set orphan_node_id=",ITAB(IGRNOD(IPARI(70))%ENTITY(II))
4066 endif
4067 II = II + 1 !next node
4068 ENDDO !next IB
4069 DO II = 1, NNODES
4070 !print *, "reset sphcel_id=", IXT(NIXT,IGRNOD(IPARI(70))%ENTITY(II))
4071 X(1:3,IGRNOD(IPARI(70))%ENTITY(II)) = (/ZERO, ZERO, ZERO/)
4072 ENDDO
4073 ENDIF !ITASK==0
4074 ENDIF
4075
4076 !------------------------------------------------------------!
4077 ! @47. UNCUT CELLS + POLY 9 : CENTERS !
4078 !------------------------------------------------------------!
4079 !FOR UNCUT BRICKS, Centers for polyehedra faces computed in i22subvol
4080 DO IB=NBF,NBL
4081 NCELL = BRICK_LIST(NIN,IB)%NBCUT
4082 IF(NCELL==0)THEN
4083 IE = BRICK_LIST(NIN,IB)%ID
4084 NC(1:8) = IXS(2:9,IE)
4085 DO J=1,6
4086 BRICK_LIST(NIN,IB)%POLY(1)%FACE(J)%Center(1) = FOURTH * SUM( X(1, NC(ICF(1:4,J)) ) )
4087 BRICK_LIST(NIN,IB)%POLY(1)%FACE(J)%Center(2) = FOURTH * SUM( X(2, NC(ICF(1:4,J)) ) )
4088 BRICK_LIST(NIN,IB)%POLY(1)%FACE(J)%Center(3) = FOURTH * SUM( X(3, NC(ICF(1:4,J)) ) )
4089 ENDDO
4090 ELSE
4091 !simplification, car approximation precendente invalide lorsque limit(FACE9) = 0
4092 IE = BRICK_LIST(NIN,IB)%ID
4093 NC(1:8) = IXS(2:9,IE)
4094 !
4095 !ICELL 9 only since polyhedra face centers were computed in i22subvol.
4096 ! Poly9 is complementary polyhedron, it is built without graph but deduced by boolean operation from full brick.
4097 ! its face centers must be computed to display face center (velocity post-treatment)
4098 ! face center are only known for cut polyhedra (A & C below), center for poly9 must be deduced (poly B below)
4099 !
4100 ! N4 N3
4101 ! !------------+-------!
4102 ! ! | I3 !
4103 ! ! | !
4104 ! ! | ! Ni : nodes
4105 ! ! | ! Ii : intersection points
4106 ! ! I4 B | C ! A,C : cut polyhedra
4107 ! !\ | ! B : complemntary polyhedron
4108 ! ! \ | ! Ca,Cb,Cc : face centers for each A,B,C polyhedra
4109 ! ! \ | ! Npa,Npb,Npc : number of points for polygon on face
4110 ! ! A \ I1 | I2 !
4111 ! !----+-------|-------!
4112 ! N1 N2
4113 !
4114 ! Ca = (N1+I1+I4)/3
4115 ! Cb = (N4+I1+I2+I3+I4)/5
4116 ! Cc = (N2+N3+I2+I3)/4
4117 ! 3Ca + 5Cb + 4Cc = Sum(Ni) + 2 Sum(Ii)
4118 ! => poly9 C9 = [-Npa.Ca -Npc.Cc + Sum(Ni) +2.Sum(Ii)] / Np9
4119 !
4120 !
4121 Do J=1,6
4122 FACE = BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%Surf
4123 NP_(9) = BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%NumPOINT
4124.OR. IF(ABS(FACE)<=EM10 NP_(9)==0)THEN
4125 BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%Center(1:3) = ZERO
4126 ELSE
4127 NCELL = BRICK_LIST(NIN,IB)%NBCUT
4128 DO ICELL = 1 ,NCELL
4129 NP_(ICELL) = BRICK_LIST(NIN,IB)%POLY(ICELL)%FACE(J)%NumPOINT
4130 Center(1:3,ICELL) = BRICK_LIST(NIN,IB)%POLY(ICELL)%FACE(J)%Center(1:3)
4131 ENDDO
4132 !NP_ is number of points (intersection + nodes)
4133 ! pPoint is sum of nodes
4134 !CUT_point is sum of intersection points
4135 ! Center : are face center
4136 ! Point0 : is center of poly 9
4137 NP_(NCELL+1:9) = 0
4138 NP_(9) = BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%NumPOINT
4139 pPOINT(1) = SUM( X(1, NC(ICF(1:4,J)) ) )
4140 pPOINT(2) = SUM( X(2, NC(ICF(1:4,J)) ) )
4141 pPOINT(3) = SUM( X(3, NC(ICF(1:4,J)) ) )
4142 CUT_point(1:3) = BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%Center(1:3) !stored there in i22subvol.F it is SUM(cutpoints on the face J)
4143 Point0(1) = pPOINT(1) + TWO*CUT_point(1)
4144 . - Np_(1)*Center(1,1)- Np_(2)*Center(1,2)- Np_(3)*Center(1,3)- Np_(4)*Center(1,4)
4145 . - Np_(5)*Center(1,5)- Np_(6)*Center(1,6)- Np_(7)*Center(1,7)- Np_(8)*Center(1,8)
4146 Point0(2) = pPOINT(2) + TWO*CUT_point(2)
4147 . - Np_(1)*Center(2,1)- Np_(2)*Center(2,2)- Np_(3)*Center(2,3)- Np_(4)*Center(2,4)
4148 . - Np_(5)*Center(2,5)- Np_(6)*Center(2,6)- Np_(7)*Center(2,7)- Np_(8)*Center(2,8)
4149 Point0(3) = pPOINT(3) + TWO*CUT_point(3)
4150 . - Np_(1)*Center(3,1)- Np_(2)*Center(3,2)- Np_(3)*Center(3,3)- Np_(4)*Center(3,4)
4151 . - Np_(5)*Center(3,5)- Np_(6)*Center(3,6)- Np_(7)*Center(3,7)- Np_(8)*Center(3,8)
4152 Point0(1:3) = Point0(1:3) / NP_(9)
4153 BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%Center(1:3) = Point0(1:3)
4154 !print *, "poly9 center, ixs(11,ie), face j ", ixs(11,IE), J
4155 !print *, BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%Center(1:3)
4156 ENDIF
4157 ENDDO!next J
4158 ENDIF
4159 ENDDO!next IB
4160
4161
4162
4163 !------------------------------------------------------------!
4164 ! @48. MARK CELL CENTERS WITH ORPHAN NODES !
4165 !------------------------------------------------------------!
4166 lStillNode = .TRUE.
4167 IF(IPARI(81)/=0)THEN
4168 NNODES = IGRNOD(IPARI(81))%NENTITY
4169 !!!WRITE(*,*)(ITAB(IBUFSSG(J)),J=IAD0,IAD0+NNODES-1)
4170.AND. IF( ITASK==0 NNODES/=0 )THEN
4171 II = 1 ! first node of group node
4172 DO IB=NBF,NBL
4173 ICELL = 0
4174 NCELL = BRICK_LIST(NIN,IB)%NBCUT
4175 DO WHILE (ICELL<=NCELL) ! loop on polyhedron {1:NCELL} U {9}
4176 ICELL = ICELL +1
4177.AND. IF (ICELL>NCELL NCELL/=0)ICELL=9
4178.NOT. IF (lStillNode) CYCLE
4179 Point0(1:3) = BRICK_LIST(NIN,IB)%POLY(ICELL)%CellCenter(1:3)
4180 IF(II>NNODES)THEN
4181 lStillNode = .FALSE.
4182 print *, "** warning inter22 : no more node in group to mark cell center",
4183 . ITAB(IGRNOD(IPARI(81))%ENTITY(NNODES))
4184 EXIT
4185 ENDIF
4186 BRICK_LIST(NIN,IB)%POLY(ICELL)%ID_FREE_NODE = IGRNOD(IPARI(81))%ENTITY(II)
4187 X(1:3,IGRNOD(IPARI(81))%ENTITY(II)) = Point0(1:3)
4188 if(IBUG22_OrphanNodes == 1)then
4189 write (*,FMT='(A,I10,A,I10,A,I10)')"set orphan_node_id=",
4190 . ITAB(IGRNOD(IPARI(81))%ENTITY(II)),"in brick_id=",ixs(11,brick_list(nin,ib)%id)
4191 endif
4192 II = II + 1 !next node
4193 ENDDO
4194 ENDDO !next IB
4195 DO II = 1,NNODES
4196 !print *, "reset sphcel_id=", ixt(nixt,igrnod(ipari(81))%ENTITY(ii))
4197 x(1:3,igrnod(ipari(81))%ENTITY(ii)) = zero
4198 ENDDO
4199 ENDIF
4200 ENDIF
4201
4202
4203
4204
4205
4206 IF(ipari(82)/=0)THEN
4207 nnodes = igrnod(ipari(82))%NENTITY
4208 IF(nnodes==0)RETURN
4209 ii = 1
4210 DO ib=nbf,nbl
4212 icell = 0
4214 DO WHILE (icell<=ncell)
4215 icell = icell +1
4216 IF (icell>ncell .AND. ncell/=0)icell=9
4217 IF(.NOT.lstillnode) cycle
4218 DO j=1, 6
4219 IF (ii>nnodes) THEN
4220 lstillnode = .false.
4221 print *, "** Warning inter22 : no more node in group to mark face centers." ,
4222 . itab(igrnod(ipari(82))%ENTITY(nnodes))
4223 EXIT
4224 ENDIF
4225 node_id = igrnod(ipari(82))%ENTITY(ii)
4226 x(1:3,node_id) =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Center(1:3)
4227 ii = ii + 1
4228 ENDDO
4229 ENDDO
4230 enddo
4231 ENDIF
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249 IF(ALLOCATED(debugmainsecndv))DEALLOCATE (debugmainsecndv)
4250 IFALLOCATED(ismainv))DEALLOCATE (ismainv)
4251 IF(ALLOCATED(f))DEALLOCATE (f)
4252 IF(ALLOCATED(vol51))DEALLOCATE (vol51,vol51v)
4253 IF(ALLOCATED(origin_data))DEALLOCATE (origin_data)
4254 IF(ALLOCATED(destroy_data))DEALLOCATE (destroy_data)
4255 IF(ALLOCATED(norigin))DEALLOCATE (norigin)
4256
4257
4258 RETURN
subroutine destroy_cell(nin, ib, icell_target, icellv, ibv, j, jv, ixs, itask)
end diagonal values have been computed in the(sparse) matrix id.SOL
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_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)
int main(int argc, char *argv[])
subroutine weighting_cell_nodes(nin, ib, icell, ires, idemerge)