48 . IXS , ELBUF_TAB ,IPARG ,ITAB ,ITASK ,
49 . BUFBRIC, NBRIC_L ,X ,ALE_CONNECTIVITY,V ,
50 . NV46 , VEUL ,IGRNOD,IPARI ,IGRTRUSS,
59! this
subroutine is called
for fsi interface 22
136 USE multimat_param_mod ,
ONLY : m51_n0phas, m51_nvphas
140#include "implicit_f.inc"
144#include "param_c.inc"
145#include "com01_c.inc"
146#include "com04_c.inc"
147#include "com08_c.inc"
149#include "vect01_c.inc"
150#include "inter22.inc"
151#include "mvsiz_p.inc"
152#include "comlock.inc"
153#include "subvolumes.inc"
157 INTEGER,
INTENT(IN) :: IXS(NIXS,*) ,IPARG(NPARG,*),ITAB(*) ,NV46 (*),
158 . IPARI(*) ,IXT(NIXT,*) ,ITASK ,IPM(NPROPMI,
159TYPE(ELBUF_STRUCT_),
TARGET,
DIMENSION(NGROUP) ::
160INTENT(IN) :: V(3,*), VEUL(LVEUL
161INTENT(IN),
TARGET :: bufmat(*)
162 my_real,
INTENT(INOUT) ::
164 TYPE () ,
DIMENSION(NGRNOD) :: IGRNOD
165 TYPE (
group_) ,
DIMENSION(NGRTRUS) :: igrtruss
170 TYPE(l_bufel_) ,
POINTER :: LBUF1,LBUF2
171 INTEGER :: I,J,K0,K1,K2,JV,IDV, NBCUT, NBCUTv, NBCUTprev, NEL,NG,NFL,NBF,NBL,,NBRIC_L,NIN
172 INTEGER :: brickID,tNB,NTAG,IV,NGv,IAD22
173INTEGER :: IB,IBV,IBv2,IBv_i,IBo,ICELL,ICELL2,MCELL,NCELL,MNOD,ID,ITAG(66)
174 INTEGER :: IPOS, LLT_, LLT_o,LLT_v, IDLOCv, , IPOSiadj,ICELLv,ICELLv2
175 INTEGER :: INODES(8),INOD
176LOGICAL :: lDONE,lStillTruss,lFOUND
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
187 TYPE(node_entity),
DIMENSION(:) ,
POINTER :: pNodWasMain
189 INTEGER,
DIMENSION(:,:),
POINTER :: pAdjBRICK, pAdjBRICKv
190 TYPE(node_entity),
DIMENSION(:) ,
POINTER ::
191 TYPE(node_entity),
DIMENSION(:),
POINTER :: pWhichCellNod,pWhichCellNodv
192 INTEGER ,
POINTER :: pMainID
193 my_real,
DIMENSION(:) ,
POINTER :: uparam
194 TYPE(),
DIMENSION(:),
POINTER :: pSUBVOLv
195 my_real ,
POINTER :: psubvold
196 TYPE(poly_entity),
DIMENSION(:),
POINTER :: pSUBVOL
198LOGICAL :: bool1, bool2
199 CHARACTER*10 :: debugMAINSECND
200 CHARACTER*10 ,
ALLOCATABLE :: debugMAINSECNDv(:,:,:)
201 INTEGER,
ALLOCATABLE :: IsMainV(:,:,:)
202 TYPE(buf_mat_) ,
POINTER :: MBUF,MBUFv
203INTEGER :: ICRIT_MAT_DEPORTATION, ICRIT_DEMERGE
204!
INTEGER,
ALLOCATABLE,
DIMENSION(:,:,:):: TARGET_DATA
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
209INTEGER :: ICELLTAG(9), ICELLTAG_OLD(9),IC, NAdjCELL,NAdjCELLv, IFV, FV, FV2
210 INTEGER :: IVv,MCELLv, MCELLvv, NGvv,IDLOCvv, ,IFVv
211 INTEGER :: GET_UNIQUE_MAIN_CELL, LINK_WITH_UNIQUE_MAIN_CELL,IADJ,NADJ,NADJv
212INTEGER :: NsecndNOD, NP, NP_NODE, JJ, NINTP(6,9), NNOD(6,9), NN, SECid, IDLOC, NewMnod(8), MLW
213 INTEGER :: ITASKv, NTRUS, NPOINT, IRES(2), NewInBuffer
214 INTEGER,
ALLOCATABLE,
DIMENSION(:,:) :: DESTROY_DATA
215 INTEGER :: I22LOOP,IT,IUNLINK,ITASKB, J1,J2, NTAR,,II
216 INTEGER :: FV_old, NumSECND, NumSECND2, IC1, IC2, ITARGET, NumTarget, WasCut, IFAC, IEDG
217 INTEGER :: , Cod2, Cod3, Icompl, Poly9woNodes, Poly9woNodesV, ISGN(2), ICODE, OLD_ICODE
218 INTEGER :: mainID,NC(8),MOLD,MNEW, IB2,NUM,IADBUF,NUPARAM,NGm,IDLOCm,ICELLm, NP_(9),NODE_ID
219 LOGICAL :: debug_outp,debug_outp2, lSKIP
221 my_real,
ALLOCATABLE,
DIMENSION(:,:) :: vol51, vol51v
222 my_real,
ALLOCATABLE,
DIMENSION(:) :: uvar,uvar_adv
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)
225 my_real :: cut_vel(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
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
232 my_real :: center(3,8)
234 my_real :: det, df11, df12,
236 my_real :: alp, alpo, beta, volcellold, vel_m(3), surf_s, norm_s(3), adv,
norm, vm, vs
237 my_real :: rho_adv, eint_adv, sig_adv(6), mom_adv(3), zm(3),zs(3), volratio
238 INTEGER :: ITER, NITER, LLTo, LLTm
239INTEGER,
ALLOCATABLE,
DIMENSION(:) :: ORDER, VALUE
241 INTEGER :: NC1,NC2,NC3,NC4,NC5,NC6,NC7,NC8
242 INTEGER :: IAD2, IAD3, LGTH2
247 INTEGER,
INTENT(IN) :: NPTS
248 my_real,
INTENT(IN) :: p(3,npts)
249 my_real,
INTENT(INOUT) :: c(3)
254 my_real,
DIMENSION(:),
POINTER :: p
258 INTEGER,
DIMENSION(:),
POINTER :: p
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)
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/
271 . aj7(mvsiz), aj8(mvsiz) , aj9
275 . x17 , x28 , x35 , x46,
276 . y17 , y28 , y35 , y46,
277 . z17 , z28 , z35 , z46,
278 . jac_59_68(mvsiz), jac_67_49(mvsiz
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)
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_
306 write (*,fmt=
'(A, 1000I7)')
"CUT CELL BUFFER : ", ixs(11,
brick_list(nin,1:
nb)%id)
314 dxmin = minval(dx22min_l(0:nthread-1))
315 vmax = maxval(v22max_l(0:nthread-1))
319 dt22_min = dxmin/ncross22 / vmax
322.AND.
!!sIF(DT1==ZERO ITASK==0) print *, "inter22, tolerance ratio
",RATIO22
324 !------------------------------------------------------------!
325 ! @02. INIT/PARAMETERS !
326 !------------------------------------------------------------!
327 IADV = 0 ! 0: advection step off 1: advection step on !When demerging a new main, advection is done from old main cell (possibly relocated due to a merging process) to new one.
331 I22LOOP = 0 !infinite loop detected
334 ALLOCATE(UVAR (I22LAW37))
335 ALLOCATE(UVAR_ADV (I22LAW37))
337 ALLOCATE(UVAR (M51_N0PHAS+TRIMAT*M51_NVPHAS))
338 ALLOCATE(UVAR_ADV (M51_N0PHAS+TRIMAT*M51_NVPHAS))
341 !------------------------------------------------------------!
342 ! @03. INIT/MULTITHREADING !
343 !------------------------------------------------------------!
344 NBF = 1+ITASK*NB/NTHREAD
345 NBL = (ITASK+1)*NB/NTHREAD
350 !!!!!!!!!!!!!!!!!!!!!!DEBUG OUTPUT!!!!!!!!!!!!!!!!!!!!!!!
355 ie = brick_list(nin,ib)%id
356.or.
if (ie == ibug22_sinit ibug22_sinit == -1)then
362.AND.
if(itask==0debug_outp)then
364 print *, " |----------i22sinit.f-----------|
"
365 print *, " | initialization
SUBROUTINE |
"
366 print *, " |-------------------------------|
"
369 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
371 !------------------------------------------------------------!
372 ! @04. INIT/ALLOCATION !
373 !------------------------------------------------------------!
374 ALLOCATE (debugMAINSECNDv(NBL-NBF+1,6,9))
375! ALLOCATE (TARGET_DATA(tNB,9,1:2)) !index1:IB, index2:1:Ntarget<=9, index3:1=localface_2=adjacent_cell
376 ALLOCATE (ORIGIN_DATA(NBF:NBL,9,1:3)) !index1:IB, index2:1:Ntarget<=9, index3:1=localface_2=adjacent_cell
377 ALLOCATE (IsMainV(NBF:NBL,6,9))
378 ALLOCATE (F(6,NBF:NBL))
379 ALLOCATE (VOL51(NBF:NBL,TRIMAT),VOL51v(NBF:NBL,TRIMAT))
381 ALLOCATE (Norigin(NBF:NBL))
382 !-------------------!
384 !-------------------!
385 !------------------------------------------------------------!
387 !------------------------------------------------------------!
388 !TAG22(I) is adress in cut cell buffer "brick_list(NIN,TAG22(I))
"
389 !for interface number NIN, and element I from current group.
390 !TAG22==0 means elem I is not in cut cell buffer.
391 DO NG=ITASK+1,NGROUP,NTHREAD
392 IF(IPARG(8,NG) /= 1) THEN
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.AND.
IF(JLAG /= 1 ITY<=2) THEN
402.AND.
IF (MTN /= 0 IPARG(64,NG)==0) THEN
405 ISOLNOD = IPARG(28,NG)
406.AND.
IF (ITY == 1 ISOLNOD /= 4) THEN
407 GBUF => ELBUF_TAB(NG)%GBUF
408 GBUF%TAG22(LFT:LLT) = 0
414 !------------------------------------------------------------!
415 ! @06. COMPUTE UNEXTENDED main CELL VOLUMES !
416 !------------------------------------------------------------!
417 DO NG=ITASK+1,NGROUP,NTHREAD
418 IF(IPARG(8,NG) /= 1) THEN
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.AND.
IF(JLAG /= 1 ITY<=2) THEN
428.AND.
IF (MTN /= 0 IPARG(64,NG)==0) THEN
431 ISOLNOD = IPARG(28,NG)
432.AND.
IF (ITY == 1 ISOLNOD /= 4) THEN
433 GBUF => ELBUF_TAB(NG)%GBUF
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)
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)) ;
465 AJ1(I)=X17+X28-X35-X46
466 AJ2(I)=Y17+Y28-Y35-Y46
467 AJ3(I)=Z17+Z28-Z35-Z46
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)
487 DETT(I)=ONE_OVER_64*(AJ1(I)*JAC_59_68(I)+AJ2(I)*JAC_67_49(I)+AJ3(I)*JAC_48_57(I))
489 GBUF%VOL(LFT:LLT) = DETT(LFT:LLT)
496 !------------------------------------------------------------!
497 ! @07. BUILDING BIJECTION APPLICATION for cut cells !
498 ! (local array) <--> (global buffer) !
499 ! NBRIC <--> (I,NG) !
500 !------------------------------------------------------------!
501 !-------------------!
502 CALL MY_BARRIER() !need %TAG22 to be init to 0. (initialisation is multithreading segmenting 1:NG, not 1:NB
503 !-------------------!
505 IDB(IB) = BRICK_LIST(NIN,IB)%ID
506 BRICK_LIST(NIN,IB)%ITASK = ITASK
510 !From IB get I and NG
515.AND.
IF((IDB(IB)>NFL)(IDB(IB)<=NFL+NEL))THEN
516 IF(IPARG(11,NG)==1) JEUL = 1
517 IF(IPARG(7,NG)==1) JALE = 1
518 IDLOCB(IB) = IDB(IB) - NFL
520 BRICK_LIST(NIN,IB)%NG = NGB(IB)
521 BRICK_LIST(NIN,IB)%IDLOC = IDLOCB(IB)
524 GBUF => ELBUF_TAB(NGB(IB))%GBUF
525 NBCUT = BRICK_LIST(NIN,IB)%NBCUT
526 GBUF%TAG22(IDLOCB(IB)) = IB ! les tags ont deja ete remis a zero
531.NOT.
if ((lDONE))then
532 write( *,*) "int 22 : error in group sorting
"
537 !-------------------!
539 !-------------------!
540 !------------------------------------------------------------!
541 ! @08. ADJACENT BRICKS DATA IN CUT CELL BUFFER !
542 !------------------------------------------------------------!
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)
549 IDV = ALE_CONNECTIVITY%ee_connect%connected(IAD2 + J - 1)
550 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,1) = IDV !IV
551 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,2) = 0 !NGV
552 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,3) = 0 !IDLOCV
553 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,4) = 0 !IBV
554 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,5) = 0 !IFV
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)
560 IF(ALE_CONNECTIVITY%ee_connect%connected(IAD3 + JV - 1)==brickID)THEN
561 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,5) = JV
565 CALL GET_GROUP_ID(IDV,NGv,IDLOCv,IPARG)
566 GBUFv => ELBUF_TAB(NGv)%GBUF
567 IAD22 = GBUFv%TAG22(IDLOCv)
568 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,2) = NGv
569 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,3) = IDLOCv
570 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,4) = IAD22
571.AND.
IF (IAD22==0 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 print *, " near related brick_id =
", IXS(11,brick_list(nin,ib)%id)
576 !print *, "itask=
", ITASK
578 stop 2202 !means that a real cut cell has an adjacent brick which is not in cut cell buffer : NOT EXPECTED unless if /INTER/TYPE22 GrBrick is not correctly defined.
581 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,2) = 0
582 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,3) = 0
583 BRICK_LIST(NIN,IB)%Adjacent_Brick(J,4) = 0
585 write (*,*) "unavailable in spmd
"
591 !------------------------------------------------------------!
592 ! @09. AREA and VOLUME RATIO UPDATE for cut cells !
593 !------------------------------------------------------------!
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(1:3,4)*N(1:3,4)))
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
611 !---8 local node numbers NC1 TO NC8 for solid element I ---!
621 !---Coordinates of the 8 nodes
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_)
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_)
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_)
667 N(1,4)=(Y2_-Y5_)*(Z6_-Z1_) - (Z2_-Z5_)*(Y6_-Y1_)
668 N(2,4)=(Z2_-Z5_)*(X6_-X1_) - (X2_-X5_)*(Z6_-Z1_)
669 N(3,4)=(X2_-X5_)*(Y6_-Y1_) - (Y2_-Y5_)*(X6_-X1_)
671 N(1,5)=(Y7_-Y2_)*(Z6_-Z3_) - (Z7_-Z2_)*(Y6_-Y3_)
672 N(2,5)=(Z7_-Z2_)*(X6_-X3_) - (X7_-X2_)*(Z6_-Z3_)
673 N(3,5)=(X7_-X2_)*(Y6_-Y3_) - (Y7_-Y2_)*(X6_-X3_)
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_)
679 BRICK_LIST(NIN,IB)%N(1,1:3) = N(1:3,1) / SQRT(SUM(N(1:3,1)*N(1:3,1)))
680 BRICK_LIST(NIN,IB)%N(2,1:3) = N(1:3,2) / SQRT(SUM(N(1:3,2)*N(1:3,2)))
681 BRICK_LIST(NIN,IB)%N(3,1:3) = N(1:3,3) / SQRT(SUM(N(1:3,3)*N(1:3,3)))
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)))
688 ! compute Brick Face New Area !suplicated eflux3/aflux3, to optimize
689 F(J,IB) = HALF * SQRT( SUM( N(:,J) * N(:,J) ) ) ! N is 2Sn
691 pFACE(1:9) => BRICK_LIST(NIN,IB)%POLY(1:9)
692! pFACE(2)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(2)%FACE(1:6)%Surf
693! pFACE(3)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(3)%FACE(1:6)%Surf
694! pFACE(4)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(4)%FACE(1:6)%Surf
695! pFACE(5)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(5)%FACE(1:6)%Surf
696! pFACE(6)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(6)%FACE(1:6)%Surf
697! pFACE(7)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(7)%FACE(1:6)%Surf
698! pFACE(8)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(8)%FACE(1:6)%Surf
699! pFACE(9)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(9)%FACE(1:6)%Surf
700 pFullFACE => BRICK_LIST(NIN,IB)%Face_BRICK(1:6)
701 pFullFACE(1:6) = F(1:6,IB)
702 IF(BRICK_LIST(NIN,IB)%NBCUT==0)THEN
703 pFACE(1)%FACE(1:6)%Surf = F(1:6,IB)
706 NCELL = BRICK_LIST(NIN,IB)%NBCUT !cell 9 not yet taken into account.
709 IF(BRICK_LIST(NIN,IB)%POLY(ICELL)%Vnew<ZERO)THEN
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
"
718 VOL = BRICK_LIST(NIN,IB)%POLY(ICELL)%Vnew
720 GBUF => ELBUF_TAB(NGB(IB))%GBUF
721 BRICK_LIST(NIN,IB)%POLY(ICELL)%Vnew = GBUF%VOL(IDLOCB(IB)) + VOL
723 VOLratio = BRICK_LIST(NIN,IB)%POLY(ICELL)%Vnew / ELBUF_TAB(NGB(IB))%GBUF%VOL(IDLOCB(IB))
724 ! THRESHOLD VOLUME : Smax = O(V**(2/3)), dh= EM03 * O(V**(1/3)) => Veps = EM04*O(V) => VOLratio = Veps/V = EM04 (EM04 => dh = 0.01 % * average_edge)
725 IF(ABS(VOLratio) <= EM04)THEN
729 ENDDO !next IB (cut cell)
734 !------------------------------------------------------------!
735 ! @10. BUILD CELL 9 !
736 ! which is complementary one : !
737 ! (faces,volumes,brick nodes and num points) !
738 !------------------------------------------------------------!
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)
749 pSUBVOL(1:9) => BRICK_LIST(NIN,IB)%POLY(1:9)
750 pWhichCellNod(1:8) => BRICK_LIST(NIN,IB)%NODE(1:8)
751 pFACE(1:9) => BRICK_LIST(NIN,IB)%POLY(1:9)!%FACE(1:6)%Surf
752! pFACE(2)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(2)%FACE(1:6)%Surf
753! pFACE(3)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(3)%FACE(1:6)%Surf
754! pFACE(4)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(4)%FACE(1:6)%Surf
755! pFACE(5)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(5)%FACE(1:6)%Surf
756! pFACE(6)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(6)%FACE(1:6)%Surf
757! pFACE(7)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(7)%FACE(1:6)%Surf
758! pFACE(8)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(8)%FACE(1:6)%Surf
759! pFACE(9)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(9)%FACE(1:6)%Surf
760 ID = BRICK_LISt(NIN,IB)%ID
761 NCELL = BRICK_LIST(NIN,IB)%NBCUT
762 Cod1 = IABS(BRICK_LIST(NIN,IB)%SecID_CELL(1))
763 Cod2 = IABS(BRICK_LIST(NIN,IB)%SecID_CELL(2))
764 IF(NCELL/=0)THEN !si decoupage de brique.
765 !---VOLUME AND CONNECTIVITY
766 BRICK_LIST(NIN,IB)%POLY(9)%FACE(1)%Surf = F(1,IB)-SUM( (/ (BRICK_LIST(NIN,IB)%POLY(K)%FACE(1)%Surf,K=1,NCELL)/) )
767 BRICK_LIST(NIN,IB)%POLY(9)%FACE(2)%Surf = F(2,IB)-SUM( (/ (BRICK_LIST(NIN,IB)%POLY(K)%FACE(2)%Surf,K=1,NCELL)/) )
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)/) )
769 BRICK_LIST(NIN,IB)%POLY(9)%FACE(4)%Surf = F(4,IB)-SUM( (/ (BRICK_LIST(NIN,IB)%POLY(K)%FACE(4)%Surf,K=1,NCELL)/) )
770 BRICK_LIST(NIN,IB)%POLY(9)%FACE(5)%Surf = F(5,IB)-SUM( (/ (BRICK_LIST(NIN,IB)%POLY(K)%FACE(5)%Surf,K=1,NCELL)/) )
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)/) )
772 BRICK_LIST(NIN,IB)%POLY(9)%FACE0%Surf = SUM( (/ (BRICK_LIST(NIN,IB)%POLY(K)%FACE0%Surf,K=1,NCELL) /) ) !sum of cut surfaces
773 BRICK_LIST(NIN,IB)%POLY(9)%Vnew = -SUM(BRICK_LIST(NIN,IB)%POLY(1:NCELL)%Vnew)
774 !print *, "psubvol(9)=
", pSUBVOL(9)
775 BRICK_LIST(NIN,IB)%POLY(9)%NumNOD = 0 !should noty be needed
776 BRICK_LIST(NIN,IB)%POLY(9)%NumPOINT = 0 !should noty be needed
779 !saving brick nodes used by remaining polyhedron (complementary one)
781 IF(pWhichCellNod(J)%WhichCell/=0) CYCLE !a tagged brick node is already used by a polyhedron
782 pWhichCellNod(J)%WhichCell = 9
784 pListNodID(9)%p(MNOD) = J !IXS(J+1,ID)
785 pPOINT(1) = pPOINT(1) + X(1,IXS(1+J,ID))
786 pPOINT(2) = pPOINT(2) + X(2,IXS(1+J,ID))
787 pPOINT(3) = pPOINT(3) + X(3,IXS(1+J,ID))
789 BRICK_LIST(NIN,IB)%POLY(9)%NumNOD = MNOD
790 BRICK_LIST(NIN,IB)%POLY(9)%NumPOINT =
791 . SUM(BRICK_LIST(NIN,IB)%POLY(1:NCELL)%NumPOINT ) - SUM(BRICK_LIST(NIN,IB)%POLY(1:NCELL)%NumNOD) + MNOD
792 GBUF => ELBUF_TAB(NGB(IB))%GBUF
793 BRICK_LIST(NIN,IB)%POLY(9)%Vnew = GBUF%VOL(IDLOCB(IB)) + BRICK_LIST(NIN,IB)%POLY(9)%Vnew
794 UNCUTvol = GBUF%VOL(IDLOCB(IB))
795 IF(ABS(BRICK_LIST(NIN,IB)%POLY(9)%Vnew /UNCUTVOL) <EM04
796.OR.
. ABS(BRICK_LIST(NIN,IB)%POLY(1)%Vnew /UNCUTVOL) <EM04)THEN
799 !---AND ALSO CELL CENTER
800 !MNOD brick nodes above + K1 intersection points below.
801 NPOINT = BRICK_LIST(NIN,IB)%POLY(9)%NumPOINT
804 NBCUT = BRICK_LIST(NIN,IB)%EDGE(J)%NBCUT
806 PointTMP(1:3) = BRICK_LIST(NIN,IB)%EDGE(J)%CUTPOINT(1:3,I)
807 pPOINT(1) = pPOINT(1) + PointTMP(1)
808 pPOINT(2) = pPOINT(2) + PointTMP(2)
809 pPOINT(3) = pPOINT(3) + PointTMP(3)
814 pPOINT(1) = pPOINT(1) / (K1+MNOD) !NPOINT
815 pPOINT(2) = pPOINT(2) / (K1+MNOD) !NPOINT
816 pPOINT(3) = pPOINT(3) / (K1+MNOD) !NPOINT
817 BRICK_LIST(NIN,IB)%POLY(9)%CellCENTER(1:3) = pPOINT(1:3)
822 !------------------------------------------------------------!
823 ! @11. BUILD UNCUT CELL IN CUT CELL BUFFER !
824 !------------------------------------------------------------!
826 IF(BRICK_LIST(NIN,IB)%NBCUT == 0)THEN
827 pSUBVOL(1:9) => BRICK_LIST(NIN,IB)%POLY(1:9)
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))
835 !------------------------------------------------------------!
836 ! @12. STORING BRICK REFERENCE VOLUME (UNCUT) !
837 !------------------------------------------------------------!
839 BRICK_LIST(NIN,IB)%UncutVol = ELBUF_TAB(NGB(IB))%GBUF%VOL(IDLOCB(IB))
845 !------------------------------------------------------------!
846 ! @13. POLY 9 : MARK IF NO NODE ON A FACE !
847 !------------------------------------------------------------!
850 NCELL = BRICK_LIST(NIN,IB)%NBCUT
851 BRICK_LIST(NIN,IB)%Poly9woNodes(1:6,1:2) = 0
854 FACE = BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%Surf
855 IF(FACE ==ZERO) CYCLE
856 !loop on nodes (1,2,3,4,5,6,7,8) composing face J
859 INOD = INT22_BUF%nodFACE(J,K)
860 ICELL = BRICK_LIST(NIN,IB)%NODE(INOD)%WhichCell
861 IF(ICELL == 9) lFOUND = .TRUE.
863 IF(lFOUND)CYCLE ! CELL 9 IS SHARING A NODE SO ITS ADJACENT CELL WAS FOUND ABOVE (See 14. FINDING & STORING ADJACENT CELLS)
864 !Here Cell 9 has a trace on face J but has no nodes on this face. An adjacent celle must be find (otherwise internal forces issue, missing area)
865 BRICK_LIST(NIN,IB)%Poly9woNodes(J,1) = 1
867 !UPDATE FLUX FOR THIS CASE : NO NODES => NO FLUXES (CLOSED SURFACE HYPOTHESIS)
873 BRICK_LIST(NIN,IB)%IsMergeTarget = 0
874 !print *, "0, ismergetarget
", ixs(11,brick_list(nin,ib)%id)
878 !------------------------------------------------------------!
879 ! @14. FILL MATERIAL BUFFER : %bakMAT%... !
880 !------------------------------------------------------------!
882 NCELL = BRICK_LIST(NIN,IB)%NBCUT
883 MCELL = BRICK_LIST(NIN,IB)%MainID
884 ID = BRICK_LIST(NIN,IB)%ID
885 NG = BRICK_LIST(NIN,IB)%NG
886 IDLOC = BRICK_LIST(NIN,IB)%IDLOC
887 MLW = BRIcK_LIST(NIN,IB)%MLW
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)
894 BRICK_LIST(NIN,IB)%bakMAT%RHO = ZERO
895 BRICK_LIST(NIN,IB)%bakMAT%rhoE = ZERO
896 BRICK_LIST(NIN,IB)%bakMAT%rhoU(1) = ZERO
897 BRICK_LIST(NIN,IB)%bakMAT%rhoU(2) = ZERO
898 BRICK_LIST(NIN,IB)%bakMAT%rhoU(3) = ZERO
899 BRICK_LIST(NIN,IB)%bakMAT%ssp = ZERO
900 BRICK_LIST(NIN,IB)%bakMAT%SIG(1) = ZERO
901 BRICK_LIST(NIN,IB)%bakMAT%SIG(2) = ZERO
902 BRICK_LIST(NIN,IB)%bakMAT%SIG(3) = ZERO
903 BRICK_LIST(NIN,IB)%bakMAT%SIG(4) = ZERO
904 BRICK_LIST(NIN,IB)%bakMAT%SIG(5) = ZERO
905 BRICK_LIST(NIN,IB)%bakMAT%SIG(6) = ZERO
906 !------MULTI-MATERIAL-----------!
907 IF(I22LAW37+I22LAW51 == 0) CYCLE
908 BRICK_LIST(NIN,IB)%bakMAT%UVAR(1) = ZERO
909 BRICK_LIST(NIN,IB)%bakMAT%UVAR(2) = ZERO
910 BRICK_LIST(NIN,IB)%bakMAT%UVAR(3) = ZERO
911 BRICK_LIST(NIN,IB)%bakMAT%UVAR(4) = ZERO
912 BRICK_LIST(NIN,IB)%bakMAT%UVAR(5) = ZERO
913 IF(I22LAW51 == 0) CYCLE
915 BRICK_LIST(NIN,IB)%bakMAT%UVAR(K) = ZERO
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 !------MULTI-MATERIAL-----------!
931 !IF(I22LAW37+I22LAW51 == 0) CYCLE
932.AND.
IF(MLW/=37 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
940 BRICK_LIST(NIN,IB)%bakMAT%UVAR(K) = MBUF%VAR((K-1)*LLT_+IDLOC)
945 !-------------------!
947 !-------------------!
949 !------------------------------------------------------------!
950 ! @15. FINDING & STORING ADJACENT CELLS !
951 !------------------------------------------------------------!
953 pFACE(1:9) => BRICK_LIST(NIN,IB)%POLY(1:9)
954! pFACE(2)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(2)%FACE(1:6)%Surf
955! pFACE(3)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(3)%FACE(1:6)%Surf
956! pFACE(4)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(4)%FACE(1:6)%Surf
957! pFACE(5)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(5)%FACE(1:6)%Surf
958! pFACE(6)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(6)%FACE(1:6)%Surf
959! pFACE(7)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(7)%FACE(1:6)%Surf
960! pFACE(8)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(8)%FACE(1:6)%Surf
961! pFACE(9)%p(1:6) => BRICK_LIST(NIN,IB)%POLY(9)%FACE(1:6)%Surf
962 !pNAdjCELL => BRICK_LIST(NIN,IB)%POLY(1:9)%FACE(1:6)%NAdjCell
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)
973 ID = BRICK_LIST(NIN,IB)%ID
974 NCELL = BRICK_LIST(NIN,IB)%NBCUT
975 !pNAdjCELL(1:9,1:6) = 0
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
985 DO WHILE (ICELL<=NCELL) ! loop on polyhedron {1:NCELL} U {9}
987.AND.
IF (ICELL>NCELL NCELL/=0)ICELL=9
988 DO J=1,NV46 ! loop on brick face
989 IF(pFACE(ICELL)%FACE(J)%Surf>ZERO)THEN ! if polyhedron has a non zero subface on this brick face
991 IF(IV==0)CYCLE !if there is no adjacent brick on this face
992 !if there is an adjacent brick on this face
993 IAD22 = pAdjBRICK(J,4)
995 !adjacent brick is in cut cell buffer : it also uncut
996 BRICK_LIST(NIN,IB)%POLY(ICELL)%FACE(J)%NAdjCell = 1
997 BRICK_LIST(NIN,IB)%POLY(ICELL)%FACE(J)%Adjacent_Cell(1) = 1 !necessarily ICELLv=1
998 ELSEIF(BRICK_LIST(NIN,IAD22)%NBCUT==0)THEN
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 !necessarily ICELLv=1
1004 pWhichCellNodv(1:8) => BRICK_LIST(NIN,IAD22)%NODE(1:8)
1005 !---brick nodes used by reference cell, must lay on current face J, and are identified by internal id : IXS(1+.,ID)
1007 DO K1=1,BRICK_LIST(NIN,IB)%POLY(ICELL)%NumNOD !loop on polyhedron nodes !TODO : might be optimized by looping on nodFACE and cycle with pNNODCELL
1008 DO K2=1,4 !loop on face nodes
1009 IF(pListNodID(ICELL)%p(K1) == INT22_BUF%nodFACE(J,K2))THEN !polyhedron node on the current face
1011 INODES(NNODES) = IXS(1+INT22_BUF%nodFACE(J,K2), ID)
1015 !---search for local nodes id in adjacent brick.
1018 DO K0=1,4 !loop on adjacent 'local' nodes (II,J)<->(IV,JV)
1019 K1 = INT22_BUF%nodFACE(JV,K0)
1021 IF(IXS(1+K1,IV)==INODES(IN) )THEN
1022 ICELLv = pWhichCellNodv(K1)%WhichCell
1024 print *, "itask,icellv,pwhichcellnodv(K1)
",ITASK,ICELLv,pWhichCellNodv(K1)%WhichCell
1027 IF(ICELLTAG(ICELLv)==0)THEN !check if cell is already stored as an adjacent cell, if not store it
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
1034 ENDDO!next IN (polyhedron node on face)
1035 ENDDO!next K0 (adjacent 'local' node)
1036 ENDIF!testing IV & IBV
1037 ENDIF!(pFACE(ICELL)%p(J)>ZERO)
1039 !COMPLEMENTARY POLYHEDRON WITH NO NODES ON A GIVEN FACE
1040 Poly9woNodes = BRICK_LIST(NIN,IB)%Poly9woNodes(J,1)
1041 ! forcemment IBv /= 0
1042 IF(Poly9woNodes == 1)THEN
1043 IV = BRICK_LIST(NIN,IB)%Adjacent_Brick(J,1)
1044 IBv = BRICK_LIST(NIN,IB)%Adjacent_Brick(J,4)
1046 BRICK_LIST(NIN,IB)%Poly9woNodes(J,2) = 0
1049 JV = BRICK_LIST(NIN,IB)%Adjacent_Brick(J,5)
1050 Poly9woNodesV = BRICK_LIST(NIN,IBv)%Poly9woNodes(Jv,1)
1051 IF(Poly9woNodesV==0)THEN
1052 NBCUTv = BRICK_LIST(NIN,IBv)%NBCUT
1054 !PAS DE VOISIN HYPOTHESE SURFACE FERMEE
1055 !le polyedre voisin est le polyedre 9
1056 ! +--------+--+-----------+
1063 ! +------+----+-----------+
1064 !BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%NAdjCell = BRICK_LIST(NIN,IB)%PoLY(9)%FACE(J)%NAdjCell + 1
1065 !NAdjCell = BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%NAdjCell
1066 !BRICK_LIST(NIN,IB)%Adjacent_Brick(J,9,NadjCell) = 1
1067 BRICK_LIST(NIN,IB)%Poly9woNodes(J,2) = 0
1073 !le polyedre voisin utilise le point d'intersection le plus proche du noeud sommet => le polyedre voisin deveint systematiquement le polyedre 9. (faire dessins)
1074 ! +--------+--+-----------+ +--------+--+-----------+
1076 ! | + ! | +-----------+
1077 ! | 9 | 9 | | 9 | 9 |
1078 ! | +-----------+ | | |
1080 ! | / 2 | | | / 2 | |
1081 ! +------+----+-----------+ +------+----+-----------+
1082 !autre hypothese => ... = 1
1083 BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%NAdjCell = BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%NAdjCell + 1
1084 NAdjCell = BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%NAdjCell
1085 BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%Adjacent_Cell(NadjCell) = 9
1086 BRICK_LIST(NIN,IB)%Poly9woNodes(J,2) = 9
1088 ELSEIF(Poly9woNodesV/=0)THEN
1089 !le polyedre voisin est le polyedre 9
1090 ! +--------+--+-----------+
1097 ! +------+----+-----------+
1099 ! SIMPLY CONNECTING poly_9 <-> polyV_9
1100 BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%NAdjCell = BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%NAdjCell + 1
1101 NAdjCell = BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%NAdjCell
1102 BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%Adjacent_Cell(NadjCell) = 9
1103 BRICK_LIST(NIN,IB)%Poly9woNodes(J,2) = 9
1104 ENDIF!(Poly9woNodesV==0)
1111 !------------------------------------------------------------!
1112 ! @16. BUILD POLYGONAL TRACE FOR POLY9 !
1113 !------------------------------------------------------------!
1114 !CUT CELL BUFFER REMINDER (check common source for complete & update source)
1115 !my_real :: N(3) !normal vector
1116 !my_real :: B(3) !basis
1117 !my_real :: SCUT(1) !Cut Area
1118 !my_real :: SEFF(1) !Efficace Section = Wetted Surface : Cut Aera - Holes (computed by suming lagrangian projection)
1119 !my_real :: P(3,8) !Cut Surface Polygon (coordinates)
1120 !INTEGER :: NP !Cut Surface Polygon (number of points) ! NP<=6 | NP<=8 for additional Scut (closed surface hypothesis)
1121 !BRICK_LIST(NIN,IB)%Edge(J)%NODE(1:2) = EDGE_LIST(NIN,K)%NODE(1:2)
1122 !BRICK_LIST(NIN,IB)%Edge(J)%NBCUT = EDGE_LIST(NIN,K)%NBCUT
1123 !BRICK_LIST(NIN,IB)%Edge(J)%CUTSHELL(1:2) = EDGE_LIST(NIN,K)%CUTSHELL(1:2)
1124 !BRICK_LIST(NIN,IB)%Edge(J)%CUTCOOR(1:2) = EDGE_LIST(NIN,K)%CUTCOOR(1:2)
1125 !BRICK_LIST(NIN,IB)%Edge(J)%CUTPOINT(1:3,1) = EDGE_LIST(NIN,K)%CUTPOINT(1:3,1)
1126 !BRICK_LIST(NIN,IB)%Edge(J)%CUTPOINT(1:3,2) = EDGE_LIST(NIN,K)%CUTPOINT(1:3,2)
1127 !BRICK_LIST(NIN,IB)%Edge(J)%CUTVEL(1:3,1) = EDGE_LIST(NIN,K)%CUTVEL(1:3,1)
1128 !BRICK_LIST(NIN,IB)%Edge(J)%CUTVEL(1:3,2) = EDGE_LIST(NIN,K)%CUTVEL(1:3,2)
1129 !BRICK_LIST(NIN,IB)%Edge(J)%VECTOR(1:3) = EDGE_LIST(NIN,K)%VECTOR(1:3)
1130 !BRICK_LIST(NIN,IB)%Edge(J)%LEN = EDGE_LIST(NIN,K)%LEN
1133 ! +--------+--+ +-------+---+
1135 ! | + Check WhichCellNode for each node of the face | | +
1136 ! | 9 | if digits 1,2, and 9 tagged then a polygon has => | | P |
1137 ! | + to be computed | | +
1140 ! +------+----+ +------+----+
1143 !must be counterclockwise from outward ( clockwise from point inside the brick )
1145 IE = BRICK_LIST(NIN,IB)%ID
1146 BRICK_LIST(NIN,IB)%ClosedSurf(1:6) = 0
1149 IV = BRICK_LIST(NIN,IB)%Adjacent_Brick(J,1)
1152 INOD = INT22_BUF%nodFACE(J,K)
1153 ICELL = BRICK_LIST(NIN,IB)%NODE(INOD)%WhichCell
1154 ICODE = IBSET(ICODE,ICELL)
1157 !ON EN PROFITE POUR MARQUER LES CAS DE FERMETURE (CLOSURE HYPOTHESIS)
1158.OR.
IF(ICODE == 518 ICODE == 6) THEN
1159 FACE9 = BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%Surf
1160 IBV = BRICK_LIST(NIN,IB)%Adjacent_Brick(J,4)
1161 !necessairement IBV>0 sinon on ne peut pas avoir ICODE=518 (autrement dit : la brique IB est intersectee donc la voisine est dans le buffer)
1162 NBCUTv = BRICK_LIST(NIN,IBv)%NBCUT
1163.AND.
IF(NBCUTv == 0 FACE9>ZERO) THEN
1164 !DISTINCITON IMPORTANTE CAR ON A BESOIN DU VOISIN POUR LES FORCES DE COTNACT MAIS SINON IL DOIT ETRE IGNORE POUR FINT ET CONVECTION
1165 BRICK_LIST(NIN,IB)%ClosedSurf(J) = 1
1171 Poly9woNodes = BRICK_LIST(NIN,IB)%Poly9woNodes(J,1)
1172 ICELLv = BRICK_LIST(NIN,IB)%Poly9woNodes(J,2)
1173.AND.
IF(Poly9woNodes /=0 ICELLv /= 0)CYCLE
1174.AND.
IF(Poly9woNodes==0 ICODE /= 518)CYCLE
1175 ! poly 1,2,9 on this current face => ICODE = b1000000110 = 518 (bits 1,2,9)
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(3)
1187 iEDG = INT22_BUF%iLeftEdge(J,INOD)
1189 IF(iEDG < 0) ISGN(1:2) = (/2,1/)
1191 NBCUT = BRICK_LIST(NIN,IB)%Edge(iEDG)%NBCUT
1194 ELSEIF(NBCUT == 1)THEN
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) = CUT_Vel(1:3) + BRICK_LIST(NIN,IB)%Edge(iEDG)%CUTVEL(1:3,1)
1199! IF(NBCUTprev==1)THEN
1200! !rajouter le point sommet au polygone 9
1202! NP _NODE = NP_NODE + 1
1203! CUT_Point(1:3) = X(1:3,IXS(1+iEDGE(ISGN(1),iEDG) ,IE))
1204! BRICK_LIST(NIN,IB)%PCUT(8+J)%P(1:3,NP) = CUT_Point(1:3)
1205! !do not increment CUTVEL
1206! print *, "pause-22-
"
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) + BRICK_LIST(NIN,IB)%Edge(iEDG)%CUTVEL(1:3,ISGN(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)
1221 BRICK_LIST(NIN,IB)%PCUT(8+J)%NP = NP
1222 BRICK_LIST(NIN,IB)%PCUT(8+J)%B(1) = FOURTH * pPOINT(1)
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)
1225 BRICK_LIST(NIN,IB)%PCUT(8+J)%N(1:3) = BRICK_LIST(NIN,IB)%N(J,1:3) * BRICK_LIST(NIN,IB)%POLY(9)%FACE(J)%Surf
1226 BRICK_LIST(NIN,IB)%PCUT(8+J)%SEFF = ZERO
1227 !BRICK_LIST(NIN,IB)%POLY(9)%FACE0%Vel(1:3) = CUT_Vel(1:3) / (NP*ONE)
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)))
1232 BRICK_LIST(NIN,IB)%PCUT(8+J)%SCUT = FACE
1237 !-------------------!
1239 !-------------------!
1241 !------------------------------------------------------------!
1242 ! @17. PRE-TREATMENT FOR DBLE SECND WITH BOTH V=0 !
1243 !------------------------------------------------------------!
1245 IF(I22_DEGENERATED == 1)THEN
1246 ALLOCATE (DESTROY_DATA(7,2*NB)) !on each thread
1250 !-------------------!
1252 !-------------------!
1255 NCELL = BRICK_LIST(NIN,IB)%NBCUT
1257 DO WHILE (ICELL<=NCELL) ! loop on polyhedron {1:NCELL} U {9}
1259.AND.
IF (ICELL>NCELL NCELL/=0)ICELL=9
1260 VOL = BRICK_LIST(NIN,IB)%POLY(ICELL)%Vnew
1261 UNCUTVOL = BRICK_LIST(NIN,IB)%UncutVol
1262 RATIO = VOL / UNCUTVOL
1263 IF(ABS(RATIO)>EM04)CYCLE !Vol=1.01e-05, UNCUTVOL=10 => ratio > EM06. So EM04 is retained. THRESHOLD VOLUME : Smax = O(V**(2/3)), dh= EM03 * O(V**(1/3)) => Veps = EM04*O(V) => ratio=Veps/V = EM04
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)
1267 !on cherche une correspondance voisine
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)
1272 IBV = BRICK_LIST(NIN,IB)%Adjacent_Brick(J,4)
1273 JV = BRICK_LIST(NIN,IB)%Adjacent_Brick(J,5)
1274 ITASKv = BRICK_LIST(NIN,IBv)%ITASK
1275 VOLv = BRICK_LIST(NIN,IBv)%POLY(ICELLv)%Vnew
1276 UNCUTVOLv = BRICK_LIST(NIN,IBv)%UncutVOL
1277 RATIOv = VOLv/UncutVOLv
1278 !Vol=1.01e-05, UNCUTVOL=10 => ratio > EM06. So EM04 is retained. THRESHOLD VOLUME : Smax = O(V**(2/3)), dh= EM03 * O(V**(1/3)) => Veps = EM04*O(V) => ratio=Veps/V = EM04
1279.OR.
IF(ABS(RATIOv)>EM04 IBv>IB )CYCLE
1280.AND..OR.
!IF( (ITASKv==ITASKIB>IBv) (ITASKv<ITASK) )THEN
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
1295 !detach from the previous loop and launch after barrier to avoid multi-threading issue
1296.AND..and.
if(itask==0 ibug22_destroy==1 IPOS>0)then
1298 print *, " |------i22_destroy_cell.f-------|
"
1299 print *, " | initialization subroutine |
"
1300 print *, " |-------------------------------|
"
1304 !-------------------!
1306 !-------------------!
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 !print *, "destroy
", ixs(11,brick_list(nin,ib)%id),ICELL
1316 CALL DESTROY_CELL( NIN, IB,ICELL,ICELLv,IBv,J,Jv, IXS, ITASK)
1319 IF(I22_DEGENERATED == 1)THEN ! this is activated if SECONDARY/SECONDARY adjacency with both 0-volumes
1320 !-------------------!
1322 !-------------------!
1324 I22LOOP = I22LOOP + 1
1325 if(I22LOOP >= 2)then
1326 print *, "**error : inter22, unexpected situation.
"
1329 GOTO 9 !can be optimized later by updating adjacency in destroy_cell.F or looping only on bricks related to destroyed cell. (need to reach finish line)
1333 !------------------------------------------------------------!
1334 ! @18. TAGGING SECONDARY CUT CELL !
1335 !------------------------------------------------------------!
1337 NG = BRICK_LIST(NIN,IB)%NG
1338 pMainID => BRICK_LIST(NIN,IB)%MainID
1339 pIsMain(1:9) => BRICK_LIST(NIN,IB)%POLY(1:9)
1340 pIsMain(1:9)%IsMain = 0
1342 IF(BRICK_LIST(NIN,IB)%NBCUT==0)THEN
1343 pIsMain(1)%IsMain = 1
1347 GBUF => ELBUF_TAB(NGB(IB))%GBUF
1348 VOL = BRICK_LIST(NIN,IB)%UncutVol
1349 NCELL = BRICK_LIST(NIN,IB)%NBCUT
1351 !tag les potentiel mains
1352 DO WHILE (ICELL<=NCELL) ! loop on polyhedron {1:NCELL} U {9}
1354.AND.
IF (ICELL>NCELL NCELL/=0)ICELL=9
1355 !if lower than 50% then it is a SECONDARY.
1356 VolCELL = BRICK_LIST(NIN,IB)%POLY(ICELL)%Vnew
1358 IF(FAC>CritMerge22)THEN
1359 !print *, "critmerge22
", CritMerge22
1360 pIsMain(ICELL)%IsMain = 1
1363 K = SUM(pIsMain(1:9)%IsMain)
1364 !In case of several potential main :Unicity with Reproductibility (indepandant from numbering)
1366 pMainID = MAXLOC(pIsMain(1:9)%IsMain,1)
1368 MCELL = GET_UNIQUE_MAIN_CELL(NIN,IB,K)
1369 pIsMain(1:9)%IsMain = 0
1370 pIsMain(MCELL)%IsMain = 1
1372 !In case of no cell satisfy criteria, choose cell 9 to avoid problem with partial cut
1374 pIsMain(9)%IsMain = 1
1379 !-------------------!
1381 !-------------------!
1382 !------------------------------------------------------------!
1383 ! @19. LINKING SECONDARY CELL TO A main ONE !
1384 !------------------------------------------------------------!
1385 N_UNLINKED_L(ITASK) = 0
1386 !if no main cell is found, it becomes itself a main cell (example : INTERF/INT_22/1BRICK-EOS/CEL_only)
1388 IE = BRICK_LIST(NIN,IB)%ID
1389 NCELL = BRICK_LIST(NIN,IB)%NBCUT
1390 pAdjBRICK => BRICK_LIST(NIN,IB)%Adjacent_Brick(1:6,1:5)
1391 !pAdjCELL => BRICK_LIST(NIN,IB)%POLY(1:9)%FACE(1:6)%Adjacent_Cell(1:5)
1392 !pNAdjCell => BRICK_LIST(NIN,IB)%POLY(1:9)%FACE(1:6)%NAdjCell
1393 pIsMain(1:9) => BRICK_LIST(NIN,IB)%POLY(1:9)
1394 pMainID => BRICK_LIST(NIN,IB)%MainID
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
1402 BRICK_LIST(NIN,IB)%POLY(MCELL)%WhereIsMain(3) = IE
1403 BRICK_LIST(NIN,IB)%POLY(MCELL)%WhereIsMain(4) = IB
1406 DO WHILE (ICELL<=NCELL) ! loop on polyhedron {1:NCELL} U {9}
1408.AND.
IF (ICELL>NCELL NCELL/=0)ICELL=9
1409 !--------------------------------------!
1410 !if cell needs to be linked to a main one
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
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 !Loop on face to list adjacent main cells
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:
",
1424 . IXS(11,BRICK_LIST(NIN,IB)%ID) ; stop 2206
1428 NAdjCell = BRICK_LIST(NIN,IB)%POLY(ICELL)%FACE(J)%NAdjCell
1429 IF(NAdjCell == 0)CYCLE
1431 IBV = pAdjBRICK(J,4)
1433 adjMAIN_face(J) = BRICK_LIST(NIN,IB)%POLY(ICELL)%FACE(J)%Surf
1435 IVadj_MCELLv(J) = IV
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
1442 ICELLv = BRICK_LIST(NIN,IB)%POLY(ICELL)%FACE(J)%Adjacent_Cell(K)
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 !no more main cell out this face (only one)
1456 sumFACE = SUM(adjMAIN_face(1:6))
1457 IF(sumFACE==ZERO)THEN
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 !number of adjacent cell on given face J : no adjacent cell on face J means no need to search out there
1464! adjMAIN_face(1:6) = adjMAIN_face(1:6) / sumFACE
1465 !IPOS = LINK_WITH_UNIQUE_MAIN_CELL(adjMAIN_face, adjMAIN_centroid)
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)
1474 !-----------------------------------------------------------!
1476 !-----------------------------------------------------------!
1477.OR..AND.
if((ibug22_UndirectLink==1ibug22_UndirectLink==-1) N_UNLINKED_L(ITASK)>0)
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)
1493 IF(mcell == 0) cycle
1504 ibv =
brick_list(nin,ib)%Adjacent_Brick(j,4) !necessarily different from zero because a cut cell(nbcut>0) has all its neighbor in cut cell buffer(tzinf increased)
1506 nadj =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%NAdjCell
1509 icellv =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%Adjacent_Cell(iadj)
1510 ie_m =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(3)
1513 numsecnd = numsecnd + 1
1514 nsecndnod = nsecndnod +
brick_list(nin,ibv)%POLY(icellv)%NumNOD
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
1535 DO iunlink=1,n_unlinked_l(itask)
1536 ib = unlinked_cells_l(itask,1,iunlink)
1537 icell = unlinked_cells_l(itask,2,iunlink)
1541 nadj =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
1547 ipos =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(1)
1550 adjface(j,iadj) =
min(
brick_list(nin,ib)%POLY(icell)%FACE(j)%Surf,
1551 .
brick_list(nin,ibv)%POLY(icellv)%FACE(jv)%Surf)
1553 adjface(j,iadj) =
brick_list(nin,ib)%POLY(icell)%FACE(j)%Surf
1557 ires(1:2) = maxloc(adjface)
1559 iposiadj = ires(2) !adjacent cell number
1560 ibv =
brick_list(nin,ib)%Adjacent_Brick(iposf,4)
1561 icellv =
brick_list(nin,ib)%POLY(icell)%FACE(iposf)%Adjacent_Cell(iposiadj)
1564 . ipos =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(1)
1565 IF(ipos==0 .OR. adjface(ires(1),ires(2))==zero)
THEN
1566 print *,
"***error : inter22 unable to treat cell ",ixs(11,
brick_list(nin,ib)%ID)
1567 print *,
" Cell seems trapped with no adjacent cells"
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"
1577 brick_list(nin,ib)%POLY(icell)%WhereIsMain(1) = j
1578 brick_list(nin,ib)%POLY(icell)%WhereIsMain(2) =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(2)
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,
" )"
1592 !-------------------
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)
1606 IF(itaskb/=itask)cycle
1608 volcell =
brick_list(nin,ib)%POLY(icell)%Vnew
1610 j =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(1)
1613 ibv =
brick_list(nin,ib)%Adjacent_Brick(j1,4)
1615 print *,
"inter22 :Error lagrangian surface is escaping eulerian domain."
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
1627 brick_list(nin,ibm)%SecndList%FV(numsecnd) = j !j>10
1628 brick_list(nin,ibm)%SecndList%IV(numsecnd) = id
1629 brick_list(nin,ibm)%SecndList%IBV(numsecnd) = ib
1630 brick_list(nin,ibm)%SecndList%ICELLv(numsecnd) = icell
1633 brick_list(nin,ibm)%SecndList%ListNodID(numsecnd,1:8) =
brick_list(nin,ib)%POLY(icell)%ListNodID(1:8)
1652 pnodwasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
1654 plistnodid(2)%p(1:8) =>
brick_list(nin,ib)%POLY(2)%ListNodID(
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(
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)
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
1674 DO WHILE (icell<=ncell)
1676 IF (icell>ncell .AND. ncell/=0)icell=9
1677 IF(icell==mcell)cycle
1680 IF(sum(pnodwasmain(plistnodid(icell)%p(1:mnod
1681 IF(pnodwasmain(inod_w)%NodWasMain<=0) cycle
1689 var = vol_s / (uncutvol)
1690 IF (var < critdvol22)cycle
1691 inod_w =
brick_list(nin,ib)%OldMainStrongNode
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)
1700 brick_list(nin,ib)%MergeTarget(1,ntag) = ipos
1722 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
1724 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
1734 icellv =
brick_list(nin,ib)%SecndList%ICELLv(ic)
1740 psubvolv(1:9) =>
brick_list(nin,ibv)%POLY(1:9)
1741 volv = psubvolv(icellv)%Vnew
1748 mtn_ = iparg(1,ngb(ib))
1750 llt_ = iparg(2,ngb(ib))
1756 k1 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
1758 vfrac(itrimat) = mbuf%VAR(k+idlocb(ib))
1760 k1 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
1762 var =
brick_list(nin,ib)%Vnew_SCell*vfrac(itrimat)
1763 mbuf%VAR(k+idlocb(ib)) = var
1776 IF(dt1==zero)nbl1 = 0
1778 if(itask==0)
allocate(tmp22array(7,
nb))
1780 tmp22array(1:7,nbf:nbl1)=zero
1786 gbuf => elbuf_tab(ngb(ib))%GBUF
1788 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
1789 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
1794 llt_ = iparg(2,ngb(ib))
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)
1808 ngv =
brick_list(nin,ib )%Adjacent_Brick(j,2)
1809 idlocv =
brick_list(nin,ib )%Adjacent_Brick(j,3)
1810 ibv =
brick_list(nin,ib )%Adjacent_Brick(j,4)
1812 gbufv => elbuf_tab(ngv)%GBUF
1823 tmp22array(1,ib)=cod1
1824 tmp22array(2,ib)=cod2
1835 supercellvol_l(itask,0,ibv) = supercellvol_l(itask,0,ibv) + ratio * vol
1837 eint = ratio * vol *
brick_list(nin,ib)%bakMAT%rhoE
1838 eint_l(itask,ibv) = eint_l(itask,ibv) + eint
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
1850 rho = ratio * vol *
brick_list(nin,ib)%bakMAT%RHO
1851 rho_l(itask,ibv) = rho_l(itask,ibv) + rho
1854 sig(j) = ratio * vol *
brick_list(nin,ib)%bakMAT%SIG(j)
1855 sig_l(itask,j,ibv) = sig_l(itask,j,ibv) + sig(j)
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)
1866 mtn_ = iparg(1,ngb(ib))
1873 llt_ = iparg(2,ngb(ib))
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)
1888 ELSEIF(mtn_==51)
THEN
1889 llt_ = iparg(2,ngb(ib))
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
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)
1907 var = ratio*vol51(ib,itrimat)
1909 DO ipos = 1,m51_nvphas
1911 k = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos)
1913 uvarl(itask,ibv,k) = uvarl(itask,ibv,k) + pvar * var
1931 cod1=nint(tmp22array(1,ib))
1932 cod2=nint(tmp22array(2,ib))
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
1942 call my_barrier !otherwise TMP22ARRAY IS MODIFIED
1948! IF(IMERGEL(ITASK)==0)THEN
1952! ALLOCATE(UVAR (I22LAW37))
1954! ALLOCATE(UVAR (M51_N0PHAS+TRIMAT*M51_NVPHAS))
1959 NBCUT = BRICK_LIST(NIN,IB)%NBCUT
1962 GBUF => ELBUF_TAB(NGB(IB))%GBUF
1963 LBUF => ELBUF_TAB(NGB(IB))%BUFLY(1)%LBUF(1,1,1)
1964 !pAdjCELL => BRICK_LIST(NIN,IB)%POLY(1:9)%FACE(1:6)%Adjacent_Cell(1:5)
1965 pAdjBRICK => BRICK_LIST(NIN,IB)%Adjacent_Brick(1:6,1:5)
1966 MBUF => ELBUF_TAB(NGB(IB))%BUFLY(1)%MAT(1,1,1)
1967 MLW = BRICK_LIST(NIN,IB)%MLW
1968 SOM = SUM(SuperCellVOL_L(0:NTHREAD-1,0,IB))
1969 LLT_ = IPARG(2,NGB(IB))
1970.OR.
IF(MLW==37 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))
1977 NG = BRICK_LIST(NIN,IB)%NG
1978 IDLOC = BRICK_LIST(NIN,IB)%IDLOC
1979 brickID = BRICK_LIST(NIN,IB)%ID
1981 IF(BRICK_LIST(NIN,IB)%Ntarget>0)THEN
1987 if (IBUG22_merge==-1)then
1988 !!!write(*,FMT='(a,e30.16)
') " TARGET=", IXS(11,brick_list(nin,ib)%id)
1989 !!!write(*,FMT='(a,e30.16)
') " DELTA=", DELTA
1990 !!!write(*,FMT='(a,e30.16)
') " rho=", BRICK_LIST(NIN,IB)%bakMAT%RHO
1991 !!!write(*,FMT='(a,3e30.16)
') " +rhoUx=", BRICK_LIST(NIN,IB)%bakMAT%rhoU(1:3)
1992 !!!write(*,FMT='(a,e30.16)
') " +Vol=", BRICK_LIST(NIN,IB)%Vold_SCell
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
2000 SOM = SOM + DELTA * BRICK_LIST(NIN,IB)%Vold_SCell
2001 SuperCellVOL_L(0:NTHREAD-1,0,IB) = ZERO
2003 EINT = DELTA*BRICK_LIST(NIN,IB)%bakMAT%rhoE*BRICK_LIST(NIN,IB)%Vold_SCell +SUM(EINT_L(0:NTHREAD-1,IB))
2005 EINT_L(0:NTHREAD-1,IB) = ZERO !to avoid full reinit
2007 RHO = DELTA*BRICK_LIST(NIN,IB)%bakMAT%RHO*BRICK_LIST(NIN,IB)%Vold_SCell +SUM(RHO_L(0:NTHREAD-1,IB))
2009 RHO_L(0:NTHREAD-1,IB) = ZERO !to avoid full reinit
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 !to avoid full reinit
2016 MOM(2) = DELTA*BRICK_LIST(NIN,IB)%bakMAT%rhoU(2)*BRICK_LIST(NIN,IB)%Vold_SCell+SUM(MOM_L(2,0:NTHREAD-1,IB))
2017 MOM(2) = MOM(2) / SOM
2018 MOM_L(2,0:NTHREAD-1,IB)= ZERO !to avoid full reinit
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 !to avoid full reinit
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 !to avoid full reinit
2030 GBUF%EINT(IDLOC) = EINT
2031 GBUF%RHO(IDLOC) = RHO ; ALEFVM_Buffer%FCELL(4, BRICK_LIST(NIN,IB)%ID ) = RHO
2032 GBUF%MOM(LLT_*(1-1) + IDLOC) = MOM(1) ; ALEFVM_Buffer%FCELL(1, BRICK_LIST(NIN,IB)%ID ) = MOM(1)
2033 GBUF%MOM(LLT_*(2-1) + IDLOC) = MOM(2) ; ALEFVM_Buffer%FCELL(2, BRICK_LIST(NIN,IB)%ID ) = MOM(2)
2034 GBUF%MOM(LLT_*(3-1) + IDLOC) = MOM(3) ; ALEFVM_Buffer%FCELL(3, BRICK_LIST(NIN,IB)%ID ) = MOM(3)
2035 !FCELL(5,.) voir bloc conditionnel ci-dessous
2038 GBUF%SIG(LLT_*(J-1)+IDLOC) = SIG(J)
2041 ! Cod1=ixs(11,brick_list(nin,ib)%id)
2042.or.
! if (IBUG22_merge==Cod1 IBUG22_merge==-1)then
2043 ! write(*,FMT='(a,i8,a,i8)
') " AFTER MERGING : id=", Cod1, " is going to be updated"
2044 ! write(*,FMT='(a,e30.16)
') " rho=", RHO
2045 ! write(*,FMT='(a,e30.16)
') " rho.Ux=", MOM(1)
2046 ! print *,"-------------------------"
2049 MTN_ = IPARG(1,NGB(IB))
2051 !UVAR(I,1) : massic percentage of liquid * global density (rho1*V1/V : it needs to give liquid mass multiplying by element volume in aleconve.F)
2052 !UVAR(I,2) : density of gas
2053 !UVAR(I,3) : density of liquid
2054 !UVAR(I,4) : volumetric fraction of liquid
2055 !UVAR(I,5) : volumetric fraction of gas
2056 LLT_ = IPARG(2,NGB(IB))
2058 SOM_(1) = SOM_(1) + DELTA*BRICK_LIST(NIN,IB)%bakMAT%UVAR(4)*BRICK_LIST(NIN,IB)%Vold_SCell
2059 SOM_(2) = SOM_(2) + DELTA*BRICK_LIST(NIN,IB)%bakMAT%UVAR(5)*BRICK_LIST(NIN,IB)%Vold_SCell
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))
2064 UVAR(3) = DELTA*BRICK_LIST(NIN,IB)%bakMAT%UVAR(3)*BRICK_LIST(NIN,IB)%bakMAT%UVAR(4)*BRICK_LIST(NIN,IB)%Vold_SCell
2065 UVAR(3) = UVAR(3) + SUM(UVARL(0:NTHREAD-1,IB,3))
2066 UVAR(2) = DELTA*BRICK_LIST(NIN,IB)%bakMAT%UVAR(2)*BRICK_LIST(NIN,IB)%bakMAT%UVAR(5)*BRICK_LIST(NIN,IB)%Vold_SCell
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
2078 MBUF%VAR((0*LLT_ + IDLOC)) = UVAR(1) / SOM !SOM=VOL
2079 IF(SOM_(2)>EM20)THEN
2080 MBUF%VAR((1*LLT_ + IDLOC)) = UVAR(2) / SOM_(2) !SOM2 = VOL_G =sum (vol_g , cell)
2081 MBUF%VAR((4*LLT_ + IDLOC)) = UVAR(5) / SOM
2083 IF(SOM_(1)>EM20)THEN
2084 MBUF%VAR((2*LLT_ + IDLOC)) = UVAR(3) / SOM_(1) !SOM3 = VOL_L =sum (vol_l , cell)
2085 MBUF%VAR((3*LLT_ + IDLOC)) = UVAR(4) / SOM
2087 SuperCellVOL_L(0:NTHREAD-1,1:4,IB) = ZERO
2090 !APPEL SIGEPS37 POUR EQUILIBRE PRESSION
2091 brickID = BRICK_LIST(NIN,IB)%ID
2095 CALL SIGEPS37_SINGLE_CELL (
2096 1 ELBUF_TAB, IXS, BUFMAT, IPARG, IPM,
2097 2 IDLOC , NG , brickID, VOL
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
2112 SOMi = SUM(SuperCellVOL_L(0:NTHREAD-1,ITRIMAT,IB))
2113 SuperCellVOL_L(0:NTHREAD-1,ITRIMAT,IB) = ZERO
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)
2120 DO IPOS=1,M51_NVPHAS
2122 K1 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1) ! ici UVAR(1:M51_N0PHAS+TRIMAT*M51_NVPHAS)
2124 MBUF%VAR(K+IDLOCB(IB)) = SOMi
2127 K1 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1) ! ici UVAR(1:M51_N0PHAS+TRIMAT*M51_NVPHAS)
2129 MBUF%VAR(K+IDLOCB(IB)) = SOMi / SOM
2132 K = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS)
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)
2143 K1 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1)
2145 MBUF%VAR(K+IDLOCB(IB)) = ZERO
2147 K1 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1)
2149 MBUF%VAR(K+IDLOCB(IB)) = ZERO
2155 BRICK_LIST(NIN,IB)%Vold_Scell= SOM
2163 if(IBUG22_merge/=0 )then
2168 if (TMP22ARRAY(1,IB)==zero )cycle
2169 write(*,FMT='(a,e30.16)
') " TARGET=", NINT(TMP22ARRAY(1,IB))
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)
2176 !print *, "deallocate"
2177 deallocate(TMP22ARRAY)
2181 !------------------------------------------------------------!
2182 ! @26. DEMERGING CRITERIA !
2183 ! (IF main HAS TO BE DEPORTED THEN !
2184 ! DEMERGING WILL OCCURS IN NEW main CELL) !
2185 ! STEP 1/2 - listing origin cell !
2186 !------------------------------------------------------------!
2187 ! if Ntar > 0 then material deporation has to be done from former main cell buffer (GBUF)
2188 ! to the N=Ntar target main cells.
2190 IF(DT1==ZERO)NBL1 = 0
2191 ORIGIN_DATA(:,:,:) = 0 !tag main cells linked to these secnd ones.
2192 Norigin(NBF:NBL) = 0
2194 NBCUT = BRICK_LIST(NIN,IB)%NBCUT
2197 MCELL = BRICK_LIST(NIN,IB)%mainID
2198 GBUF => ELBUF_TAB(NGB(IB))%GBUF
2199 pNodWasMain(1:8) => BRICK_LIST(NIN,IB)%NODE(1:8)!%NodWasMain
2200 pWhereWasMain(1:8) => BRICK_LIST(NIN,IB)%NODE(1:8)!%WhereWasMain
2201 brickID = BRICK_LIST(NIN,IB)%ID
2202 MBUF => ELBUF_TAB(NGB(IB))%BUFLY(1)%MAT(1,1,1)
2204 MTN_ = IPARG(1,NGB(IB))
2208 MNOD = BRICK_LIST(NIN,IB)%POLY(MCELL)%NumNOD
2210 !------CHECK NODES--------!
2212 INOD = BRICK_LIST(NIN,IB)%POLY(MCELL)%ListNodID(K)
2213 IF(pNodWasMain(INOD)%NodWasMain==1)CYCLE !node not concerned
2214 !Here node was secnd and just became main
2218 !Continuity Criteria To avoid unexpected demerging.
2219 !Consistent only with kinematic time step "several cycle to fully cross an element".
2220 VOL_M = BRICK_LIST(NIN,IB)%secndlist%VOL_unmerged !BRICK_LIST(NIN,IB)%POLY(MCELL)vnew
2221 UncutVOL = BRICK_LIST(NIN,IB)%UncutVol
2222 VAR = VOL_M / UncutVOL
2225!not correct with sharp edges
2226! IF (VAR > 1-CritDVol22)CYCLE
2228 CALL weighting_Cell_Nodes(NIN,IB,MCELL,INod_W,IDEMERGE)
2230 ! IF(pNodWasMain(BRICK_LIST(NIN,IB)%OldMainStrongNode) == 1) IDEMERGE = 0
2232 INod_W_old = BRICK_LIST(NIN,IB)%OldMainStrongNode
2234 IF(INOD_W_old<=0)CYCLE
2235 IF(BRICK_LIST(NIN,IB)%NODE(INod_W_old)%WhichCell == MCELL) IDEMERGE = 0
2238 IF( IDEMERGE==1 ) THEN !(negatif en debug si IB nouveau dans le buffer)
2239! IF(pNodWasMain(INod_W)<=0 ) THEN !(negatif en debug si IB nouveau dans le buffer)
2240.AND.
! IF(SUM(NewMnod)>=MNOD/2 MNOD/=0)THEN !DEMERGE criteria : all main nodes were secndo ones
2241 !get related main cell location (through its face)
2243 INOD = BRICK_LIST(NIN,IB)%POLY(MCELL)%ListNodID(K)
2244 J = pWhereWasMain(INOD)%WhereWasMain
2245 IF(J==0)CYCLE !means node was already main
2246 IF(ITAG(J)==1)CYCLE !list without doublon
2248 !Check if main cell was moved (merged)
2249 !Get main cut cell address
2253 IBv_i = BRICK_LIST(NIN,IB )%Adjacent_Brick(J1,4)
2254 IBv = BRICK_LISt(NIN,IBv_i)%Adjacent_Brick(J2,4)
2256 IBv = BRICK_LIST(NIN,IB )%Adjacent_Brick(J,4)
2258 Ntar = BRICK_LIST(NIN,IBv)%Ntarget
2261 ORIGIN_DATA(IB,NTAG,1) = IBv
2262 ORIGIN_DATA(IB,NTAG,2) = J
2263 ORIGIN_DATA(IB,NTAG,3) = IBv
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
2275 print *, "**error : inter22, topology issue."
2284 !------------------------------------------------------------!
2285 ! @27. MATERIAL DEMERGING !
2286 ! STEP 2 : filling main cell with data from origin cells !
2287 !------------------------------------------------------------!
2288 ! if Ntar > 0 then material deporation has to be done from former main cell buffer (GBUF)
2289 ! to the N=Ntar target main cells.
2291 IF(DT1==ZERO)NBL1 = 0
2293 if(IBUG22_merge/=0)then
2294 if(itask==0)ALLOCATE (TMP22ARRAY(8,NB))
2297 TMP22ARRAY(1:8,NBF:NBL1)=ZERO
2302 IF(Norigin(IB)==0)CYCLE
2303 NBCUT = BRICK_LIST(NIN,IB)%NBCUT
2307 MCELL = BRICK_LIST(NIN,IB)%mainID
2308 GBUF => ELBUF_TAB(NGB(IB))%GBUF
2309 LBUF => ELBUF_TAB(NGB(IB))%BUFLY(1)%LBUF(1,1,1)
2310 !pAdjCELL => BRICK_LIST(NIN,IB)%POLY(1:9)%FACE(1:6)%Adjacent_Cell(1:5)
2311 pAdjBRICK => BRICK_LIST(NIN,IB)%Adjacent_Brick(1:6,1:3)
2312 pNodWasMain(1:8) => BRICK_LIST(NIN,IB)%NODE(1:8)!%NodWasMain
2313 pWhereWasMain(1:8) => BRICK_LIST(NIN,IB)%NODE(1:8)!%WhereWasMain
2314 pSUBVOL(1:9) => BRICK_LIST(NIN,IB)%POLY(1:9)
2315 brickID = BRICK_LIST(NIN,IB)%ID
2316 IDLOC = BRICK_LIST(NIN,IB)%IDLOC
2317 MTN_ = IPARG(1,NGB(IB))
2318 LLT_ = IPARG(2,NGB(IB))
2319 MBUF => ELBUF_TAB(NGB(IB))%BUFLY(1)%MAT(1,1,1)
2321 VOLorig(1:24) = ZERO
2324 VolSECND51(:) = ZERO
2338 !-----------------------------------------------!
2339 ! INIT CELL CONTENT IF IT CAME FROM A MERGE !
2340 !-----------------------------------------------!
2341 IF(Brick_list(nin,ib)%IsMergeTarget==1)THEN
2343 !!!print *, "ismergeTarget , Norigin", ixs(11,brickID), Norigin(IB), BRICK_LIST(NIN,IB)%Ntarget
2344 ! This cell received material from a merge.it also has to be taken into account
2345 VolCell = BRICK_LIST(NIN,IB)%Vold_Scell
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(LLT_*(2-1) + IDLOC)
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)
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(((4-1)*LLT_ + IDLOC))
2363 UVAR(2) = VolCell*MBUF%VAR(((2-1)*LLT_ + IDLOC))*MBUF%VAR(((5-1)*LLT_ + IDLOC))
2364 UVAR(1) = VolCell*MBUF%VAR(((1-1)*LLT_ + IDLOC))
2365 ELSEIF(MTN_==51)THEN
2367 volSECND51(1) = MBUF%VAR(IDLOC + ((M51_N0PHAS + (1-1)*M51_NVPHAS )+IPOS-1)*LLT_)
2368 volSECND51(2) = MBUF%VAR(IDLOC + ((M51_N0PHAS + (2-1)*M51_NVPHAS )+IPOS-1)*LLT_)
2369 volSECND51(3) = MBUF%VAR(IDLOC + ((M51_N0PHAS + (3-1)*M51_NVPHAS )+IPOS-1)*LLT_)
2370 volSECND51(4) = MBUF%VAR(IDLOC + ((M51_N0PHAS + (4-1)*M51_NVPHAS )+IPOS-1)*LLT_)
2372 DO IPOS = 1 , M51_NVPHAS
2374 K = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1) ! example : IPOS=1 => VFRAC {UVAR(I,ADD)=UVAR(K+I)}
2376 UVAR(K+1) = volSECND51(ITRIMAT) * MBUF%VAR(K1+IDLOC)
2379 volSECND51(1:4) = ZERO
2383 ! Velocity of main is velocity wherever inside the supercell. It will be used to make an advection step get pressure gradient which did not occur on previous step due to homogeneity.
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)
2388 NTAR = BRICK_LIST(NIN,IB)%Ntarget
2389 !-----------------------------------------------!
2390 ! LOOP ON ORIGIN CELLS !
2391 !-----------------------------------------------!
2392 DO IORIG = 1, Norigin(IB)
2393 !IORIG data regarding IB
2394 IBm = ORIGIN_DATA(IB,IORIG,1) !real target
2395 IBo = ORIGIN_DATA(IB,IORIG,3) !original brick before knowing it was burged below
2396 IV = BRICK_LIST(NIN,IBm)%ID
2397 NGv = BRICK_LIST(NIN,IBm)%NG
2398 IDLOCv = BRICK_LIST(NIN,IBm)%IDLOC
2399 J = ORIGIN_DATA(IB,IORIG,2)
2404 IBv = BRICK_LIST(NIN,IB )%Adjacent_Brick(J1,4)
2405 JV = BRICK_LIST(NIN,IBv)%Adjacent_Brick(J2,5)
2407 JV = BRICK_LIST(NIN,IB)%Adjacent_Brick(J,5)
2410 NumSECND = OLD_SecndList(NIN,IBo)%Num !this is list from previous cycle
2411 !-----------------------------------------------!
2412 ! GET SECND CONNECTED TO IT !
2413 !-----------------------------------------------!
2415 IF (OLD_SecndList(NIN,IBo)%IBv(K) /= IB)CYCLE
2416 IF (OLD_SecndList(NIN,IBo)%FM(K) /= JV)CYCLE !next secnd : this one is not connecter through main face id %FM
2419 cod1 = ixs(11,brick_list(nin,ib)%id)
2420 cod2 = ixs(11,brick_list(nin,ibo)%id)
2421 if (IBUG22_merge==-1)then
2422#include "lockon.inc"
2424 ! write(*,FMT='(a,i8,a,i8)
') "DEMERGING : id=", Cod1,
2425 ! . " from idv:", ixs(11,brick_list(nin,ibo)%id)
2428 tmp22array(1,IN22)=Cod1
2429 tmp22array(2,IN22)=ixs(11,brick_list(nin,ibo)%id)
2430 tmp22array(3,IN22)=0
2433 ! write(*,FMT='(a,i8,a,i8,a,i8)
') "DEMERGING : id=", Cod1,
2434 ! . " from idv:", ixs(11,brick_list(nin,ibo)%id)," moved to", ixs(11,brick_list(nin,IBm)%id)
2437 tmp22array(1,IN22)=Cod1
2438 tmp22array(2,IN22)=ixs(11,brick_list(nin,ibo)%id)
2439 tmp22array(3,IN22)=ixs(11,brick_list(nin,IBm)%id)
2442 ! write (*,FMT='(i10,a,f30.16,a,f30.16)
')
2443 ! . Cod1," Vold=",brick_list(nin,ib)%Vold_scell, " Vnew=",brick_list(nin,ib)%Vnew_scell
2444 ! write (*,FMT='(i10,a,f30.16,a,f30.16)
')
2445 ! . Cod2," Vold=",brick_list(nin,ibo)%Vold_scell," Vnew=",brick_list(nin,ibo)%Vnew_scell
2447 tmp22array(4,IN22)= zero !brick_list(nin,ib)%Vold_scell !value not consistent, old main was merge elsewhere so scell has change of side since a demerge process is emerging a new scell
2448 tmp22array(5,IN22)= brick_list(nin,ib)%Vnew_scell
2449 tmp22array(6,IN22)= zero !brick_list(nin,ibo)%Vold_scell
2450 tmp22array(7,IN22)= brick_list(nin,ibo)%Vnew_scell
2451 tmp22array(8,IN22)=tmp22array(8,IN22)+1
2452#include "lockoff.inc"
2456 !here secnd is merged on the correct face, and also to the correct target main (IB)
2457 !!!!!!!!!!!!! VOLsecnd = OLD_SecndList(NIN,IBo)%VOL(K)
2458 !-----------------------------------------------!
2459 ! START TO CALCULATE SECND NEW QUANTITIES !
2460 !-----------------------------------------------!
2461 VOLsecnd = OLD_SecndList(NIN,IBo)%VOL(K)
2462 !!! VolsecndOLD = OLD_SecndList(NIN,IBo)%VOL(K)
2463 VOLcell = VOLcell + VOLsecnd !cumulative salve volume from previous cycle = old volume for new main cell
2464 !!! VOLcellOLD = VOLcell + VOLsecndOLD
2465 GBUF => ELBUF_TAB(NGv)%GBUF
2466 LBUF => ELBUF_TAB(NGv)%BUFLY(1)%LBUF(1,1,1)
2467 LLT_v = IPARG(2,NGv)
2469 SURF_S = OLD_SecndList(NIN,IBo)%SURF_V(K)
2470 FV = OLD_SecndList(NIN,IBo)%FV(K)
2472 NORM_S(1:3) = BRICK_LIST(NIN,IB)%N(FV,1:3)
2475 !NORM_S(1:3) = BRICK_LIST(NIN,IB)%N(FV,1:3)
2476 !IL Y A PLUSIEURS FACETTES POSSIBLE POUR LES VOISINS INDIRECT. IL FAUDRAIT SAUVEGARGER J>10 pour chaque chemin, puis advection
2477 !ou alors changer la normale en prenant le vecteur centroid_M-centroid_S
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
2490 !----------------------------------!
2491 ! ADVECTION STEP IN DEMERGED CELL !
2492 !----------------------------------!
2495 !MCELL = BRICK_LIST(NIN,IB)%MainID
2496 VM = ONE ! BRICK_LIST(NIN,IBm)%POLY(MCELL)%Vnew
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)
2510 !-------------------------------!
2511 ! MONO-MATERIAL CUMULATION !
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 ! MULTI-MATERIAL CUMULULATION !
2527 !-------------------------------!
2529 !UVAR(I,1) : massic percentage of liquid * global density (rho1*V1/V : it needs to give liquid mass multiplying by element volume in aleconve.F)
2530 !UVAR(I,2) : density of gas
2531 !UVAR(I,3) : density of liquid
2532 !UVAR(I,4) : volumetric fraction of liquid
2533 !UVAR(I,5) : volumetric fraction of gas
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))
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)
2548 !V1OLD = V1OLD - TIMESTEP*DDVOL1
2549 !Volume change correspond to DDVOL=DV/DT = f(fluxes). Gird deformation influences relative material velocity ans also fluxes
2551 !get,store Volumetric Fraction
2553 K1 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1) ! example : IPOS=1 => VFRAC {UVAR(I,ADD)=UVAR(K+I)}
2555 Vfrac(ITRIMAT) = MBUFv%VAR(Kv+IDLOCv)
2556 VolSECND51(ITRIMAT) = Vfrac(ITRIMAT) * VOLsecnd !submaterial volume in secnd cell
2557 VolCELL51(ITRIMAT) = VolCELL51(ITRIMAT) + VolSECND51(ITRIMAT) !submaterial volume in ALL secnd cell
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" !; pause
2567 DO IPOS = 1 , M51_NVPHAS
2568 Ko = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS ))
2569 K1 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1) ! example : IPOS=1 => VFRAC {UVAR(I,ADD)=UVAR(K+I)}
2572 UVAR(K1+1) = UVAR(K1+1) + volSECND51(ITRIMAT)
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" !; pause
2581 !---------------------------
2582#include "lockon.inc"
2583 !lock method : to be update later can be removed
2584 !SUBSTRACTING SECND VOLUME FROM SUPERCELL TO DEMERGE
2586 BRICK_LIST(NIN,IBm)%Vold_Scell = BRICK_LIST(NIN,IBm)%Vold_Scell - VOLsecnd
2590 !remove submaterial volume in detached secnd cell
2592 K1 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1) ! example : IPOS=1 => VFRAC {UVAR(I,ADD)=UVAR(K+I)}
2594 MBUFv%VAR(Kv+IDLOCv) = MBUFv%VAR(Kv+IDLOCv) - VolSECND51(ITRIMAT)
2597#include "lockoff.inc"
2601 IF(VOLcell==ZERO)CYCLE
2603 !-----------------------------------------------!
2604 ! GET VALUE FROM CUMULATIVE ONE !
2605 !---MONOMAT-------------------------------------!
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(3) +IADV*MOM_ADV(3))/ VOLcell
2611 SIG(:) = (SIG(:) +IADV*SIG_ADV(:))/ VOLcell
2612 SSP = SSP / VOLcell ! -> run EOS
2613 !---MULTIMAT -----------------------------------!
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 !call sigeps37_single_cell before storing in MBUF%VAR
2621 ELSEIF(MTN_==51)THEN
2622 UVAR(1) = (UVAR(1) + IADV*UVAR_ADV(1)) / VOLcell !sum of full volume because UVAR(1:3) are homogenized data, not submaterial one.
2623 UVAR(2) = (UVAR(2) + IADV*UVAR_ADV(2)) / VOLcell
2624 UVAR(3) = (UVAR(3) + IADV*UVAR_ADV(3)) / VOLcell
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) !submaterial data are averaged with sum of submaterial secnd volume
2629 UVAR(Ko+12:Ko+M51_NVPHAS) = (UVAR(Ko+12:Ko+M51_NVPHAS) + IADV*UVAR_ADV(Ko+12:Ko+M51_NVPHAS)) / VOLcell51(ITRIMAT) !except ipos=11 (volume)
2636 !-----------------------------------------------!
2638 !-----------------------------------------------!
2639 ! STORE VALUES IN DEMERGED CELLS !
2640 !---MONOMAT-------------------------------------!
2641 NG = BRICK_LIST(NIN,IB)%NG
2642 IDLOC = BRICK_LIST(NIN,IB)%IDLOC
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
2658 ALEFVM_Buffer%FCELL(4, BRICK_LIST(NIN,IB)%ID ) = RHO
2659 ALEFVM_Buffer%FCELL(1, BRICK_LIST(NIN,IB)%ID ) = MOM(1)
2660 ALEFVM_Buffer%FCELL(2, BRICK_LIST(NIN,IB)%ID ) = MOM(2)
2661 ALEFVM_Buffer%FCELL(3, BRICK_LIST(NIN,IB)%ID ) = MOM(3)
2662 ALEFVM_Buffer%FCELL(6, BRICK_LIST(NIN,IB)%ID ) = -THIRD*(SIG(1)+SIG(2)+SIG(3))
2663 ALEFVM_Buffer%FCELL(5, BRICK_LIST(NIN,IB)%ID ) = SSP
2665 !---MUKLTIMAT-------------------------------------!
2667 LLT_ = IPARG(2,NGB(IB))
2669 MBUF => ELBUF_TAB(NGB(IB))%BUFLY(1)%MAT(1,1,1)
2672 RHO10 = BUFMAT(IADBUF-1+11)
2673 RHO20 = BUFMAT(IADBUF-1+12)
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))
2690 MBUF => ELBUF_TAB(NGB(IB))%BUFLY(1)%MAT(1,1,1)
2692 IF(VOLcell51(ITRIMAT)/=ZERO)THEN
2693 !get,store Volumetric Fraction
2694 DO IPOS=1,M51_NVPHAS
2695 K0 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1) ! example : IPOS=1 => VFRAC {UVAR(I,ADD)=UVAR(K+I)}
2697 MBUF%VAR(K1+IDLOC) = UVAR(M51_N0PHAS+(ITRIMAT-1)*M51_NVPHAS+IPOS)
2701 K0 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1) ! example : IPOS=1 => VFRAC {UVAR(I,ADD)=UVAR(K+I)}
2703 MBUF%VAR(K1+IDLOC) = VolCELL51(ITRIMAT)/VolCELL
2705 K0 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1) ! example : IPOS=1 => VFRAC {UVAR(I,ADD)=UVAR(K+I)}
2707 MBUF%VAR(K1+IDLOC) = VolCELL51(ITRIMAT)
2710 K0 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1) ! example : IPOS=1 => VFRAC {UVAR(I,ADD)=UVAR(K+I)}
2712 MBUF%VAR(K1+IDLOC) = ZERO
2714 K0 = ((M51_N0PHAS + (ITRIMAT-1)*M51_NVPHAS )+IPOS-1) ! example : IPOS=1 => VFRAC {UVAR(I,ADD)=UVAR(K+I)}
2716 MBUF%VAR(K1+IDLOC) = ZERO
2720 !-----------------------------------------------!
2722 !-----------------------------------------------!
2723 ! NEW main CELL UPDATE !
2724 !-----------------------------------------------!
2725 BRICK_LIST(NIN,IB)%Vold_SCell = VOLcell
2727 !APPEL SIGEPS37 POUR EQUILIBRE PRESSION
2728 brickID = BRICK_LIST(NIN,IB)%ID
2734 CALL SIGEPS37_SINGLE_CELL (
2735 1 ELBUF_TAB, IXS, BUFMAT, IPARG, IPM,
2736 2 IDLOC , NG , brickID, VOL
2741 !VOLcell = sum (VOLslacve) : each volsecnd is removed from
2742 !its former main cell and cumulative value is set in new
2743 !main cell to demerge.
2744 !-----------------------------------------------------!
2745 ! ADVECTION STEP UPDATE ORIGIN CELL (PREVIOUS MAIN) !
2746 !-----------------------------------------------------!
2748 NG = BRICK_LIST(NIN,IBm)%NG
2749 IDLOC = BRICK_LIST(NIN,IBm)%IDLOC
2750 GBUF => ELBUF_TAB(NG)%GBUF
2751 LBUF => ELBUF_TAB(NG)%BUFLY(1)%LBUF(1,1,1)
2752 GBUF%RHO(IDLOC) = GBUF%RHO(IDLOC) - RHO_ADV/VolCEll
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(LLT_*(5-1) +IDLOC) - SIG_ADV(5)/VolCELL
2762 GBUF%SIG(LLT_*(6-1) +IDLOC) = GBUF%SIG(LLT_*(6-1) +IDLOC) - SIG_ADV(6)/VolCELL
2767 MBUF => ELBUF_TAB(NG)%BUFLY(1)%MAT(1,1,1)
2768 brickID = BRICK_LIST(NIN,IBm)%ID
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 !UVAR(I,1) : massic percentage of liquid * global density (rho1*V1/V : it needs to give liquid mass multiplying by element volume in aleconve.F)
2776 !UVAR(I,2) : density of gas
2777 !UVAR(I,3) : density of liquid
2778 !UVAR(I,4) : volumetric fraction of liquid
2779 !UVAR(I,5) : volumetric fraction of gas
2780 MBUF%VAR((1-1)*LLT_+IDLOC) = UVAR(1) - UVAR_ADV(1)/VolCELL
2782 !APPEL SIGEPS37 POUR EQUILIBRE PRESSION
2783 brickID = BRICK_LIST(NIN,IBm)%ID
2786 VOL = BRICK_LIST(NIN,IBm)%Vold_Scell
2789 CALL SIGEPS37_SINGLE_CELL (
2790 1 ELBUF_TAB, IXS, BUFMAT, IPARG, IPM,
2791 2 IDLOC , NG , brickID, VOL
2795 ELSEIF(MTN_==51)THEN
2796 ! print *, "todo" ; pause
2801 !-----------------------------------------------!
2804 if (IBUG22_merge==-1)then
2806.and.
if(itask==0 DT1>ZERO)then
2807 allocate(order(IN22),value(IN22))
2809 VALUE(ib)=tmp22array(1,ib)
2812 !CALL QUICKSORT_I2 !(ORDER,IN22,value)
2815 cod1=tmp22array(1,ib)
2816 cod2=tmp22array(2,ib)
2817 cod3=tmp22array(3,ib)
2820 write(*,FMT='(a,i8,a,i8)
') "DEMERGING : id=", Cod1, " from idv:", cod2
2822 write(*,FMT='(a,i8,a,i8,a,i8)
') "DEMERGING : id=", Cod1, " from idv:", cod2," moved to", cod3
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)
2831 if(allocated(tmp22array))deallocate(tmp22array)
2832.and.
if(DT1>ZERO allocated(order) )deallocate(order)
2837 !------------------------------------------------------------!
2838 ! @28. COMPUTE VOLD_Vnew_Cell for newly cell in buffer !
2839 !------------------------------------------------------------!
2840 !OLD_Vnew_Cell(1:9) are old cell volumes for a cut cell.
2841 !It is taken from previous cycle.
2842 !If brick was not cut on previous cycle then it must be initialized here
2843 IF(DT1==ZERO)NBL1 = 0
2845 NBCUT = BRICK_LIST(NIN,IB)%NBCUT
2846 WASCUT = BRICK_LIST(NIN,IB)%WasCut
2847 NewInBuffer = BRICK_LIST(NIN,IB)%NewInBuffer
2849 IF( NewInBuffer == 1 )THEN
2852 BRICK_LIST(NIN,IB)%POLY(MCELL)%OLD_Vnew = BRICK_LIST(NIN,IB)%POLY(MCELL)%Vnew
2853 BRICK_LIST(NIN,IB)%POLY(2:9)%OLD_Vnew = ZERO
2854! print *, "new brick in cut cell buffer:", IXS(11,brick_list(nin,ib)%id)
2855! print *, "new brick in cut cell buffer: BRICK_LIST(NIN,IB)%POLY(MCELL)%OLD_Vnew=",BRICK_LIST(NIN,IB)%POLY(MCELL)%Vnew
2857 NG = BRICK_LIST(NIN,IB)%NG
2858 IDLOC = BRICK_LIST(NIN,IB)%IDLOC
2859 ID = BRICK_LIST(NIN,IB)%ID
2860 GBUF => ELBUF_TAB(NG)%GBUF
2861 BRICK_LIST(NIN,IB)%Vold_Scell = GBUF%VOL(IDLOC)
2870 !------------------------------------------------------------!
2871 ! @29. COMPUTE VOLUME CHANGE FOR EACH CELL !
2872 !------------------------------------------------------------!
2873.OR..AND.
IF(IBUG22_TRACKING>0 IBUG22_TRACKING==-1ITASK==0)print *, "=== TOPOLOGICAL TRACKING ==="
2874 !topology is changing so this is not trivial and must be taken into account
2875 !example : a single secnd hexa can be split into {1 penta + 2 tetra} so
2876 !it is not possible to just make difference between two polyhedra volumes.
2881 BRICK_LIST(NIN,IB)%POLY(1:9)%DVOL(1) = ZERO
2882 BRICK_LIST(NIN,IB)%DVOL = ZERO
2886 ID = BRICK_LIST(NIN,IB)%ID
2887 MCELL = BRICK_LIST(NIN,IB)%mainID
2888 NCELL = BRICK_LIST(NIN,IB)%NBCUT
2891 WasCut = BRICK_LIST(NIN,IB)%WasCut
2892 MTN_ = IPARG(1,NGB(IB))
2894 IF(WasCut>0)THEN !forcemment M(9,JJ)>ZERO, sorti du test conditionel
2895 !filling relation matrix
2897 JJ = BRICK_LIST(NIN,IB)%NODE(INOD)%WhichCell
2898 II = BRICK_LIST(NIN,IB)%NODE(INOD)%OLD_WhichCell
2899 IF(II <0) II = 1 !just being cut on this cycle so whichcell node was not set on previous cycle
2900 M(II,JJ) = BRICK_LIST(NIN,IB)%POLY(JJ)%Vnew !instead of setting kronecker symbol, volume is directly stored. V=0 <=> delta_ij=0
2902.AND.
IF(NBCUT>2 M(9,9)==ZERO)M(9,9) = BRICK_LIST(NIN,IB)%POLY(JJ)%Vnew
2903 !cas particulier cellule 9 et cellule i (sigma_col>1)
2904 !les 2 ne peuvent etre liees car pas le meme cote de la surface.
2909 IF(M(II,JJ)>ZERO)VAR=VAR+ONE
2912 II=MAXLOC(BRICK_LIST(NIN,IB)%POLY(1:9)%OLD_Vnew,1)
2919 M(1:8,JJ) = ZERO !plusieurs polyedres disparraissent, on ne les compte plus.
2920 ELSEIF(VAR==TWO )THEN
2921 !garder le volume le plus gros
2932 !essai correction 20 avril 2010
2933 VAR = BRICK_LIST(NIN,IB)%POLY(1)%OLD_Vnew
2934 VAR_ = BRICK_LIST(NIN,IB)%POLY(9)%OLD_Vnew
2936 VAR = BRICK_LIST(NIN,IB)%POLY(1)%Vnew
2937 VAR_ = BRICK_LIST(NIN,IB)%POLY(9)%Vnew
2942! IF(lCOND1/=lCOND2)THEN
2953 ELSEIF(WASCUT == 0)THEN
2954 MCELL = BRICK_LIST(NIN,IB)%MainID
2956 M(1,MCELL) = BRICK_LIST(NIN,IB)%POLY(MCELL)%Vnew
2972 !calculating old_volume for each cell
2974 DO WHILE (ICELL<=NCELL) ! loop on polyhedron {1:NCELL} U {9}
2976.AND.
IF (ICELL>NCELL NCELL/=0)ICELL=9
2982 VOLD_phase(1:4) = ZERO
2983 Vj = BRICK_LIST(NIN,IB)%POLY(JJ)%Vnew
2985 IF(M(II,JJ)==ZERO)CYCLE
2986 Vi = BRICK_LIST(NIN,IB)%POLY(II)%OLD_Vnew
2987 !Vi : Vprev, Vj: Vnew for ratio
2988 VAR = VAR + Vi *Vj / SUM(M(II,:)) !this is not a sum of kronecker symbol since volume were stored instead
2990 BRICK_LIST(NIN,IB)%POLY(ICELL)%Vold = VAR
3040 !------------------------------------------------------------!
3041 ! @30. LINK SWITCHING !
3042 ! link has change then transportation must occur !
3043 !------------------------------------------------------------!
3046 debug_outp2 = .false.
3047 if(IBUG22_LINK_SWITCH/=0)then
3048 if(itask==0)ALLOCATE (TMP22ARRAY(6,NB))
3050 TMP22ARRAY(1:6,NBF:NBL)=ZERO
3052 ie = brick_list(nin,ib)%id
3053.OR.
if(ixs(11,ie)==IBUG22_LINK_SWITCH IBUG22_LINK_SWITCH==-1)then
3054 debug_outp2 = .true.
3058 endif!(IBUG22_LINK_SWITCH/=0)
3061 NCELL = BRICK_LIST(NIN,IB)%NBCUT
3062 !pAdjCELL => BRICK_LIST(NIN,IB)%POLY(1:9)%FACE(1:6)%Adjacent_Cell(1:5)
3063 !pNAdjCELL => BRICK_LIST(NIN,IB)%POLY(1:9)%FACE(1:6)%NAdjCell
3064 pAdjBRICK => BRICK_LIST(NIN,IB)%Adjacent_Brick(1:6,1:5)
3065 pSUBVOL(1:9) => BRICK_LIST(NIN,IB)%POLY(1:9)
3066 MBUF => ELBUF_TAB(NGB(IB))%BUFLY(1)%MAT(1,1,1)
3067 MCELL = BRICK_LIST(NIN,IB)%MainID
3068 ID = BRICK_LIST(NIN,IB)%ID
3069 NG = BRICK_LIST(NIN,IB)%NG
3070 IDLOC = BRICK_LIST(NIN,IB)%IDLOC
3071 GBUF => ELBUF_TAB(NGB(IB))%GBUF
3072 LBUF => ELBUF_TAB(NGB(IB))%BUFLY(1)%LBUF(1,1,1)
3075 !------LOOP--------!
3076 NumSECND = BRICK_LIST(NIN,IB)%SecndList%Num
3077 !BRICK_LIST(NIN,IB)%SecndList%ISWITCH(1:NumSECND) = 0
3079 ICELLv = BRICK_LIST(NIN,IB)%SecndList%ICELLv(IC)
3080 IBv = BRICK_LIST(NIN,IB)%SecndList%IBv(IC)
3081 FM = BRICK_LIST(NIN,IB)%SecndList%FM(IC)
3082 FV = BRICK_LIST(NIN,IB)%SecndList%FV(IC)
3083 brickID = BRICK_LIST(NIN,IB)%ID
3085 NGv = BRICK_LIST(NIN,IBv)%NG
3086 IDLOCv = BRICK_LIST(NIN,IBv)%IDLOC
3087 IV = BRICK_LIST(NIN,IBv)%ID
3088 ITASKv = BRICK_LIST(NIN,IBv)%ITASK
3089 ! loop over the nodes of the adjacent secondary cell
3090 NNODES = BRICK_LIST(NIN,IBv)%POLY(ICELLV)%NumNOD
3093 DO K1=1,NNODES !Nodes attached to IB
3094 INOD = BRICK_LIST(NIN,IBv)%POLY(ICELLv)%ListNodID(K1)
3095 FV_old = BRICK_LIST(NIN,IBv)%NODE(INOD)%WhereWasMain !FACE
3096 IF (FV_old == 0)CYCLE !the node was wet by main cell : MERGE PROCESS APPLIES (see related chapter)
3098 IF (FV_old == FV)CYCLE ! NO LINK CHANGE : this is still linked to the same direction
3099 !else FV_old /= FV : THERE WAS A SWITCH
3100 ! GET PREVIOUS FACE TO GET PREVIOUS main CELL
3101 IF(FV_old<=NV46)THEN
3102 IBmo = BRICK_LIST(NIN,IBv)%Adjacent_Brick(FV_old,4)
3107 IBv = BRICK_LIST(NIN,IBv)%Adjacent_Brick(J1,4)
3108 IBmo = BRICK_LIST(NIN,IBv)%Adjacent_Brick(J2,4)
3112 LLTm = IPARG(2,NGB(IB))
3113 ! IF(IBm==IBmo)CYCLE : impossible it meansFV_old=FV
3115 NumTarget = BRICK_LISt(NIN,IBmo)%Ntarget
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
3122 IBmo = BRICK_LIST(NIN,IBmo)%MergeTarget(3,ITarget) !en tout rigueur il faudrait prelever dans toutes les target, ici on prend le premier
3123 print *, "**inter22 : multiple targets", ixs(11,BRICK_LIST(NIN,IBv)%ID), ICELLv
3127 !remove salve cell volume from IBMo(Vold) and add it in IBo(Vold)
3128 !addition is treated now since only current thread is handling this cell IBm \in [NBF,NBL]
3129 !search corresponding secnd cell in IBmo%old_secnds_lit
3130 lFOUND = .FALSE. !if found old salve cell attached to INOD
3131 NumSecnd2 = OLD_SecndList(NIN,IBmo)%Num
3132 NGo = BRICK_LIST(NIN,IBmo)%NG
3134 DO IC2 = 1, NumSecnd2
3135 !get previous secnd cell
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 !Si la cellule escalve etait liee par une autre face que FV_old alors ce n'etait pas la bonne cellule
main et on passe outres
3140 IF(fv2 /= fv_old )cycle
3147 nnodes2 = old_secndlist(nin,ibmo)%NumNOD_Cell(ic2)
3149 inod2 = old_secndlist(nin,ibmo)%ListNodID(ic2,k2)
3150 icell2 =
brick_list(nin,ibv2)%NODE(inod2)%WhichCell
3152 IF(ibmcur == ib) volsecnd = volsecnd + one/nnodes*
brick_list(nin,ibv2)%POLY(icell2)%Vnew
3153 volcell = volcell + one
3155 if (volsecnd == zero)cycle
3160 ratio = volsecnd/volcell
3162 volcell = ratio * old_secndlist(nin,ibmo)%VOL(ic2)
3164 gbufo => elbuf_tab(ngb(ibmo))%GBUF
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))
3173 sig(j) = volcell * gbufo%SIG(llto*(j-1)+idlocb(ibmo))
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(ibm)) * vold + mom(2)) / (vold+volcell)
3179 gbuf%MOM(lltm*(3-1) + idlocb(ibm)) = (gbuf%MOM(lltm*(3-1) + idlocb(ibm)) * vold + mom(3)) / (vold+volcell)
3189 gbuf%SIG(lltm*(j-1)+idlocb(ibm)) = (gbuf%SIG(lltm*(j-1)+idlocb(ibm)) * vold + sig(j)) / (vold+volcell)
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
3213 mtn_ = iparg(1,ngb(ibmo))
3214 volcell51(1:trimat) = zero
3216 mbuf => elbuf_tab(ngb(ib))%BUFLY(1)%MAT(1,1,1)
3219 rho10 = bufmat(iadbuf-1+11)
3220 rho20 = bufmat(iadbuf-1+12)
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))
3232 pvar => mbuf%VAR((5-1)*llt_ +idlocb(ibm))
3233 pvaro => mbufo%VAR((5-1)*llt_o+idlocb(ibmo))
3235 pvar = (pvar * vold + volcell * pvaro)/ (vold+volcell)
3236 pvar =
max(pvar,zero)
3239 pvar => mbuf%VAR((4-1)*llt_ +idlocb(ibm))
3240 pvaro => mbufo%VAR((4-1)*llt_o+idlocb(ibmo))
3242 pvar = (pvar * vold + volcell * pvaro)/ (vold+volcell)
3243 pvar =
max(pvar,zero)
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))
3251 pvar = (pvar*alp*vold+volcell*pvaro*alpo)
3252 IF(pvar>zero)pvar=pvar/(alp*vold+alpo*volcell)
3253 pvar =
max(pvar,zero)
3255 IF( pvar == zero) pvar = rho10
3258 pvar => mbuf%VAR((2-1)*llt_ +idlocb(ibm))
3259 pvaro => mbufo%VAR((2-1)*llt_o+idlocb(ibmo))
3261 alpo = mbufo%VAR((5-1)*llt_o+idlocb(ibmo))
3263 pvar = (pvar*alp*vold+volcell*pvaro*alpo)
3264 IF(pvar>zero)pvar=pvar/(alp*vold+alpo*volcell)
3265 pvar =
max(pvar,zero)
3267 IF( pvar == zero) pvar = rho20
3270 pvar => mbuf%VAR((1-1)*llt_ +idlocb(ibm))
3271 pvaro => mbufo%VAR((1-1)*llt_o+idlocb(ibmo))
3273 pvar = (pvar * vold + volcell * pvaro)/ (vold+volcell)
3274 pvar =
max(pvar,zero)
3286 1 elbuf_tab, ixs, bufmat, iparg, ipm,
3287 2 idloc , ng , brickid, vol
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))
3300 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
3302 vfrac(itrimat) = mbufo%VAR(k+idlocb(ibmo))
3307 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
3309 volcell51(itrimat) = volcell * vfrac(itrimat)
3310 mbuf%VAR(k+idlocb(ibm)) = mbuf%VAR(k+idlocb(ibm)) + volcell51(itrimat)
3316 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
3318 vfrac(itrimat) = mbuf%VAR(k+idlocb(ibm))
3319 IF(volcell51(itrimat)<=zero)cycle
3320 DO ipos = 1,m51_nvphas
3322 k2 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
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))
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)
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 "updated target -old volume- =", tmp22array(5,ib)
3362 IF (vold_l(it,0,ib) == zero)cycle
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
3380 IF (vold_l(it,0,ib) == zero)cycle
3393 mtn_ = iparg(1,ngb(ib))
3395 mbuf => elbuf_tab(ngb(ib))%BUFLY(1
3396 llt_ = iparg(2,ngb(ib))
3399 k0 = m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1
3401 mbuf%VAR(k+idlocb(ib)) = mbuf%VAR(k+idlocb(ib)) - vold_l(it,itrimat,ib)
3409 vold_l(it,0:
max(0,trimat),ib) = zero
3418 if(itask==0)
DEALLOCATE (tmp22array)
3428 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
3439 ngv = padjbrick(j,2)
3440 idlocv = padjbrick(j,3)
3441 ibv = padjbrick(j,4)
3445 nadjcell =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%NAdjCell
3447 icellv =
brick_list(nin,ib)%POLY(mcell)%FACE(j)%Adjacent_Cell(ic)
3449 IF(icellv == mcellv)cycle
3452 jv =
brick_list(nin,ibv)%POLY(icellv)%WhereIsMain(1)
3461 brick_list(nin,ib)%ADJ_ELEMS%ICELL(k) = icellv
3462 brick_list(nin,ib)%ADJ_ELEMS%SecndFACE(k) = jv
3464 padjbrickv =>
brick_list(nin,ibv)%Adjacent_Brick(1:6,1:5)
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)
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
3489 ELSEIF(ibvv == 0)
THEN
3495 brick_list(nin,ib)%ADJ_ELEMS%SecndFACE(k2) = j2
3517 brick_list(nin,ib)%POLY(1)%FACE(1:6)%NumPOINT=(/4,4,4,4,4,4/)
3520 DO WHILE (icell<=ncell)
3522 IF (icell>ncell .AND. ncell/=0)
THEN
3527 brick_list(nin,ib)%POLY(icell)%FACE(1:6)%NumPOINT = 0
3533 brick_list(nin,ib)%POLY(icell)%FACE(jj)%NumPOINT = np
3534 nintp(jj,icell) = np-nn
3541 nn = sum( nnod(j,1:ncell) )
3544 np = sum( nintp(j,1:ncell) )
3546 brick_list(nin,ib)%POLY(9)%FACE(j)%NumPOINT = np + nn
3556 pwherewasmain(1:8) =>
brick_list(nin,ib)%NODE(1:8)
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)
3573 pnodwasmain(1:8)%NodWasMain = 0
3574 pwherewasmain(1:8)%WhereWasMain = 0
3576 pnodwasmain(plistnodid(mcell)%p(j))%NodWasMain = 1
3579 DO WHILE (icell<=ncell)
3581 IF (icell>ncell .AND. ncell/=0)icell=9
3582 IF(icell == mcell)cycle
3583 ipos =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(1) !pwhereismain(icell,1)
3587 pwherewasmain(plistnodid(icell)%p(j))%WhereWasMain = ipos
3599 iiad22(nin, ie) = ib
3606 mlw = iparg(1,ngb(ib))
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
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
3641 brick_list(nin,ib)%OldMainStrongNode = inod_w
3648 lstilltruss = .true.
3651 IF( itask==0 .AND. ntrus/=0 )
THEN
3655 IF (mcell==0 ) cycle
3656 IF (.NOT.lstilltruss) cycle
3657 point0(1:3) =
brick_list(nin,ib)%POLY(mcell)%CellCenter(1:3)
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)
3669 print *,
"** Warning inter22 : no more truss in group to mark cell links"
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)
3675 write (*,fmt=
'(A,I10,A,I10,A,I10)')
"set TRUS_id=", ixt(nixt,igrtruss(igr)%ENTITY(ii)) ,
3683 x(1:3,ixt(2,igrtruss(igr)%ENTITY(ii
3684 x(1:3,ixt(3,igrtruss(igr)%ENTITY(ii))) = (/ one, zero, zero/)
3698 brick_list(nin,ib)%POLY(icell)%DVOL(1) = zero
3701 DO WHILE (icell<=ncell)
3703 IF (icell>ncell .AND. ncell/=0)icell=9
3708 vsum(1) =
brick_list(nin,ib)%PCUT(icell)%Vel(1)
3709 vsum(2) =
brick_list(nin,ib)%PCUT(icell)%Vel(2)
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
3754 icellv =
brick_list(nin,ib)%SecndList%ICELLv(ic)
3794 dvol_numeric = vnew-vold
3810 IF(abs(dvol_numeric) > ratio22*abs(dvol_predic) .AND. dvol_predic /= zero .AND. ratio22 < 1000 )
THEN
3811 IF((icode /= old_icode ) )
THEN
3825 gbuf => elbuf_tab(ng)%GBUF
3835 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
3841 k = llt * (m51_n0phas + (itrimat-1)*m51_nvphas +ipos-1)
3842 vfrac(itrimat) = mbuf%VAR(k+idloc)
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)
3855! print *,
"+--------vold_4 =",volcell51_old(4) ,
"->", volcell51(4)
3870 dvol_numeric = vnew-vold
3873 print *,
"+------elem_id =",ixs(11,
brick_list(nin,ib)%id)
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
3904 gbuf => elbuf_tab(ngb(ib))%GBUF
3905 IF(psubvold>zero)gbuf%VOL(idlocb(ib)) = psubvold
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)
3924 plistnodid(8)%p(1:8) =>
brick_list(nin,ib)%POLY(8)%ListNodID(1:8)
3925 plistnodid(9)%p(1:8) =>
brick_list(nin,ib)%POLY(9)%ListNodID(1:8)
3928 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
3935 gbuf => elbuf_tab(ngb(ib))%GBUF
3936 vol = gbuf%VOL(idlocb(ib))
3939 write (*,fmt=
'(A,I12)')
"+=== BRICK ID===", ixs(11,id)
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))
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) ! loop on polyhedron {1:NCELL} U {9}
3960.AND.
IF (ICELL>NCELL NCELL/=0)ICELL=9
3961 debugMAINSECND = '.........|
'
3962 mnod = BRICK_LIST(NIN,IB)%POLY(icell)%NumNOD
3963 write (*,FMT='(a )
') "|"
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
3969 write (*,FMT='(a,a6)
') "+== REMAINING POLYHEDRON - ", Char1
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
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)
3990 IF( padjbrick(j,1)/=0 )
THEN
3991 write (*,fmt=
'(A,6I10)')
"| +===Adj Brick(u)=", ixs(11,padjbrick(j,1))
3995 nadjcell =
brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
3997 write (*,fmt=
'(A,I1,A,5I3)')
"| +======Adj Cells, face=",j,
" :",
3998 .
brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(1:nadjcell)
4003 write (*,fmt=
'(A )')
" "
4005 if(itask==0.AND.debug_outp)
then
4006 write (*,fmt=
'(A )')
" ----sini22_end----"
4007 write (*,fmt=
'(A )')
" "
4013 !------------------------------------------------------------
4023 IF (mainid ==0) cycle
4024 volcell =
brick_list(nin,ib)%POLY(mainid)%Vnew
4026 ppoint(1:3) =
brick_list(nin,ib)%POLY(mainid)%CellCenter(1:3) * volcell
4028 icellv =
brick_list(nin,ib)%SecndList%ICELLv(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)
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)
4047 IF(ipari(70)/=0)
THEN
4048 nnodes = igrnod(ipari(70))%NENTITY
4050 IF( itask==0 .AND. nnodes/=0 )
THEN
4054 IF (mcell==0 ) cycle
4055 IF (.NOT.lstillnode) cycle
4056 point0(1:3) =
brick_list(nin,ib)%SCellCenter(1:3)
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))
4063 x(1:3,igrnod(ipari(70))%ENTITY(ii)) = point0(1:3)
4065 write (*,fmt=
'(A,I10,A,I10,A,I10)')
"set orphan_node_id=",itab(igrnod(ipari(70))%ENTITY(ii))
4071 x(1:3,igrnod(ipari(70))%ENTITY(ii)) = (/zero, zero, zero/)
4084 nc(1:8) = ixs(2:9,ie)
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)) ) )
4093 nc(1:8) = ixs(2:9,ie)
4122 face =
brick_list(nin,ib)%POLY(9)%FACE(j)%Surf
4123 np_(9) =
brick_list(nin,ib)%POLY(9)%FACE(j)%NumPOINT
4124 IF(abs(face)<=em10 .OR. np_(9)==0)
THEN
4125 brick_list(nin,ib)%POLY(9)%FACE(j)%Center(1:3) = zero
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)
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)
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)
4167 IF(ipari(81)/=0)
THEN
4168 nnodes = igrnod(ipari(81))%NENTITY
4170 IF( itask==0 .AND. nnodes/=0 )
THEN
4175 DO WHILE (icell<=ncell)
4177 IF (icell>ncell .AND. ncell/=0)icell=9
4178 IF (.NOT.lstillnode) cycle
4179 point0(1:3) =
brick_list(nin,ib)%POLY(icell)%CellCenter(1:3)
4181 lstillnode = .false.
4182 print *,
"** Warning inter22 : no more node in group to mark cell center",
4183 . itab(igrnod(ipari(81))%ENTITY(nnodes))
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)
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)
4197 x(1:3,igrnod(ipari(81))%ENTITY(ii)) = zero
4206 IF(ipari(82)/=0)
THEN
4207 nnodes = igrnod(ipari(82))%NENTITY
4214 DO WHILE (icell<=ncell)
4216 IF (icell>ncell .AND. ncell/=0)icell=9
4217 IF(.NOT.lstillnode) cycle
4220 lstillnode = .false.
4221 print *,
"** Warning inter22 : no more node in group to mark face centers." ,
4222 . itab(igrnod(ipari(82))%ENTITY(nnodes))
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)
4249 IF(
ALLOCATED(debugmainsecndv))
DEALLOCATE (debugmainsecndv)
4250 IF(
ALLOCATED(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)