74
75
76
88 USE matparam_def_mod
89 USE format_mod , ONLY : fmw_a_i
90
91
92
93#include "implicit_f.inc"
94
95
96
97#include "assert.inc"
98#include "com01_c.inc"
99#include "com04_c.inc"
100#include "scr12_c.inc"
101#include "param_c.inc"
102#include "units_c.inc"
103#include "scr15_c.inc"
104#include "scr05_c.inc"
105#include "scr17_c.inc"
106#include "scr23_c.inc"
107#include "sms_c.inc"
108#include "r2r_c.inc"
109#include "kincod_c.inc"
110#include "sphcom.inc"
111
112
113
114 INTEGER IXS(NIXS,*), IXQ(NIXQ,*), IXC(NIXC,*), IXT(NIXT,*),
115 . IXP(NIXP,*), IXR(NIXR,*), IXTG(NIXTG,*),
116 . CEP(*), ITRI1(*), ITRI2(*), INDEX1(*),INDEX2(*),
117 . NUM(*), NELEM,IDDLEVEL, NELEMINT,
118 . KXX(NIXX,NUMELX),IXX(*), ADSKY(0:*),IGEO(NPROPGI,NUMGEO),
119 . ISOLNOD(*), IWCONT(5,*), IWCIN2(2,*), DSDOF(*),
120 . ISOLOFF(*), ISHEOFF(*), ITRIOFF(*), IKINE(*),
121 . ITRUOFF(*), IPOUOFF(*), IRESOFF(*), (*),
122 . IPM(NPROPMI,NUMMAT),IXS10(6,*),KXIG3D(NIXIG3D,NUMELIG3D),
123 . IQUAOFF(*),
124 . IXIG3D(*),NSNT, NMNT,TABMP_L,
125 . FVMAIN(NVOLU)
126 INTEGER :: ITAB(*)
127 INTEGER, DIMENSION(LIPART1,*), INTENT(IN) :: IPART
128 INTEGER, DIMENSION(*), INTENT(IN) :: IPARTC,,IPARTS
129 TYPE (CLUSTER_) ,DIMENSION(*) :: CLUSTERS
130 my_real geo(npropg,numgeo), pm(npropm,nummat), x(3,*), cost_r2r,bufmat(*)
131 REAL WD(*)
132 INTEGER TAILLE
133 INTEGER, DIMENSION(NUMMAT_OLD) :: POIN_UMP_OLD
134 INTEGER, DIMENSION(7,TAILLE_OLD) :: TAB_UMP_OLD
135 INTEGER, DIMENSION(NUMMAT) :: POIN_UMP
136 INTEGER, DIMENSION(7,TAILLE) :: TAB_UMP
137 my_real,
DIMENSION(TAILLE_OLD) :: cputime_mp_old
138 INTEGER, DIMENSION(2,NPART), INTENT(IN) :: POIN_PART_SHELL,POIN_PART_TRI
139 INTEGER, DIMENSION(2,NPART,7), INTENT(IN) :: POIN_PART_SOL
140 TYPE(MID_PID_TYPE), DIMENSION(NUMMAT), INTENT(IN) :: MID_PID_SHELL,MID_PID_TRI
141 TYPE(MID_PID_TYPE), DIMENSION(NUMMAT,7), INTENT(IN) :: MID_PID_SOL
142 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
143 TYPE(MONVOL_STRUCT_), DIMENSION(NVOLU), INTENT(IN) :: T_MONVOL
144 INTEGER,INTENT(IN) :: EBCS_TAG_CELL_SPMD(NUMELQ+NUMELTG+NUMELS)
145 INTEGER, DIMENSION(NNPBY,*), INTENT(in) :: NPBY
146 INTEGER, DIMENSION(*), INTENT(in) :: LPBY
147 TYPE(INTER_CAND_), INTENT(in) :: INTER_CAND
148 TYPE(MATPARAM_STRUCT_) ,DIMENSION(NUMMAT), INTENT(IN) :: MAT_PARAM
149
150
151
152 INTEGER NCRITMAX
153 parameter(ncritmax = 20)
154 INTEGER NSEG, I, J, UTIL, K, NUSE, ELEMD_OLD,
155 . LCNE,IO_ERR1,ISH1,ISH2,II, NNC, IT,
156 . NEDGES, ELK, OFF,CC1, CC2, NUMG1, NUMG2,
157 . INED,L,M,N,NEWEDGE,NEDGES_OLD,
158 . LENWORK,NOD1, NOD2, MODE, NELEM0, MM,
159 . WORK(70000), NUML, IERROR,
160 . ELEMD, IMMNUL, NEDDEL, ITYPINT, IWARN1,
161 . MAXI, MAXJ, MAX, I1, I2, I3, N1, N2, NUMG3, NUMG4,
162 . ,ADDX,MID,PID,JALE,MLN,NSHIFT,NNODE, NN,
163 . OPTIONS(40),NCOND,NFLAG,IWFLG,NODC,ICUR,IERR1,NEC,
164 . INWDCOUNT,ICCAND,ICNOD_SMS,ISOLBAR, ICKIN, NK, NKI,
165 . ICELEM, ICINTS, ICINTM, ICINT2, ICDDL, ICFSI, ICDEL, ICSOL,
166 . ICR2R,NUMEL_R2R, CEPCLUSTER,
167 . NCONNX, CURR, PREV, NEXT, I1OLD, I2OLD, INC, IDB_METIS,
168 . NELIG3D,,,
169 . OFFC,OFFTG,K0,ITYP,
170 . NN_L,IS,IAD,ITY,KAD,JALE_FROM_MAT, JALE_FROM_PROP
171 INTEGER, DIMENSION(:),ALLOCATABLE :: XADJ, ADJNCY,IWD,IWD2,
172 . IENDT,ITRI,INDEX,DOMCLUSTER,ELEMCLUST,
173 . XADJ_OLD, , COLORS, ROOTS,
174 . POINTER_NEIGH,CONNECT_WEIGHT,TAGELEM,CNE,
175 . IWD_COPY
176 INTEGER, DIMENSION(:), ALLOCATABLE :: IWKIN
177 INTEGER TAILLE_LOCAL,,C_NEIGH,POINT_DELETE,
178 . ELEMNODES(MAX_NB_NODES_PER_ELT),OFFELEM(10),WGHT
179 INTEGER, DIMENSION(:,:), ALLOCATABLE :: CONNECTIVITY
180 INTEGER, DIMENSION(:), ALLOCATABLE :: NB_NODES_MINI
181 REAL, DIMENSION(:),ALLOCATABLE :: RWD,WD_COPY
182 CHARACTER FILNAM*109, KEYA*80, CHLEVEL*1
183 REAL FAC, UBVEC(15),
184 DOUBLE PRECISION
185 . AVERAGE(NCRITMAX), DEVIATION(NCRITMAX), DMIN(NCRITMAX), DMAX(NCRITMAX),
186 . W(NSPMD), WIS(NSPMD),WIM(NSPMD),WI2(NSPMD), WDDL(NSPMD),
187 . WFSI(NSPMD), WCAND(), WSOL(NSPMD), WKIN(NSPMD),
188 . WDEL(NSPMD), WR2R(NSPMD), WNOD_SMS(NSPMD)
189 DOUBLE PRECISION :: WS, WD_MAX,WD_MAX0
190
191
192 INTEGER METIS_PartGraphKway, METIS_PartGraphRecursive,
193 . METIS_SetDefaultOptions,Wrap_METIS_PartGraphKway,
194 . WRAP_METIS_PARTGRAPHRECURSIVE
195 INTEGER NNO,NNS,NTG,NNI,NTGT,NTGI
196 INTEGER NELMIN
197 INTEGER NFVMBAG,NB_FVMBAG_TRIM,DD_FVMBAG_TRY
198 INTEGER FVM_ELEM(NVOLU),AVG,
199 INTEGER WD_MAX_FACTOR
200 INTEGER NB_ELEM_ALE,MAIN_TARGET
201 CHARACTER (LEN=255) :: STR
202 LOGICAL :: FVM_DOMDEC,DD_UNBALANCED
203 LOGICAL, DIMENSION(:), ALLOCATABLE :: TAGGED_ELEM
204 INTEGER, DIMENSION(:), ALLOCATABLE :: ISORT,INDEX_SORT
205
206 INTEGER (kind=8) :: NEDGES_8
207 INTEGER :: CLUSTER_TYP,OFFSET_CLUSTER
208 my_real,
DIMENSION(:,:),
ALLOCATABLE :: coords
209 my_real,
DIMENSION(:),
ALLOCATABLE :: min_dist
212 INTEGER :: CEP_MIN
213 INTEGER :: C1,C2
214 INTEGER :: OFFSET
215
216
217
218 INTEGER :: number_of_added_edges
219 INTEGER :: refused_cep0, refused_numg,refused_numg0
220 INTEGER :: switch_tried, switch_done
221
222 integer, pointer :: null_int(:)
223 real, pointer :: null_real(:)
224 integer :: int_bidon
225 real :: real_bidon
226
227 INTEGER :: IJK
228 INTEGER :: NSN
229 INTEGER :: NUMBER_OF_ELEMENT_RBODY,NUMEL
230 INTEGER, DIMENSION(:), ALLOCATABLE :: LIST_ELEMENT_RBODY
231 LOGICAL :: BOOL_RBODY
232
233
234
235 EXTERNAL metis_partgraphkway, metis_partgraphrecursive,
238
239
240
241 ALLOCATE(iwkin(numnod))
242 number_of_added_edges = 0
243 refused_numg = 0
244 refused_numg0 = 0
245
246 refused_cep0 = 0
247 switch_tried = 0
248 switch_done = 0
249
250 nec=0
251 nfvmbag = 0
252 fvmain(1:nvolu) = -1
253 fvm_elem(1:nvolu) = 0
254 fvm_domdec = .false.
255 wd_max = 0.0d0
256 wd_max0= 0.0d0
257 nnode = nspmd
258
259
260
261
262 DO i=1,numnod+1
263 adsky(i) = 0
264 END DO
265
266 DO 110 k=2,9
267 DO 110 i=1,numels
268 n = ixs(k,i) + 1
269 adsky(n) = adsky(n) + 1
270 110 CONTINUE
271
272
273 IF(numels10>0) THEN
274 DO j=1,numels10
275 DO k=1,6
276 n = ixs10(k,j) + 1
277 adsky(n) = adsky(n) + 1
278 ENDDO
279 ENDDO
280 ENDIF
281
282 DO 120 k=2,5
283 DO 120 i=1,numelq
284 n = ixq(k,i) + 1
285 adsky(n) = adsky(n) + 1
286 120 CONTINUE
287
288 DO 130 k=2,5
289 DO 130 i=1,numelc
290 n = ixc(k,i) + 1
291 adsky(n) = adsky(n) + 1
292 130 CONTINUE
293
294 DO 140 k=2,3
295 DO 140 i=1,numelt
296 n = ixt(k,i) + 1
297 adsky(n) = adsky(n) + 1
298 140 CONTINUE
299
300 DO 150 k=2,3
301 DO 150 i=1,numelp
302 n = ixp(k,i) + 1
303 adsky(n) = adsky(n) + 1
304 150 CONTINUE
305
306
307 DO k=2,3
308 DO i=1,numelr
309 n = ixr(k,i) + 1
310 adsky(n) = adsky(n) + 1
311 ENDDO
312 ENDDO
313 DO i=1,numelr
314 n = ixr(4,i) + 1
315 IF(nint(geo(12,ixr(1,i)))==12) THEN
316 adsky(n) = adsky(n) + 1
317 ENDIF
318 ENDDO
319
320 DO 170 k=2,4
321 DO 170 i=1,numeltg
322 n = ixtg(k,i) + 1
323 adsky(n) = adsky(n) + 1
324 170 CONTINUE
325
326
327
328 DO i=1,numelx
329 nelx=kxx(3,i)
330 DO k=1,nelx
331 addx = kxx(4,i)+k-1
332 n=ixx(addx)+1
333 adsky(n)= adsky(n)+1
334 ENDDO
335 ENDDO
336
337
338 DO i=1,numelig3d
339 nelig3d=kxig3d(3,i)
340 DO k=1,nelig3d
341 addx = kxig3d(4,i)+k-1
342 n=ixig3d(addx)+1
343 adsky(n)= adsky(n)+1
344 ENDDO
345 ENDDO
346
347 adsky(1) = 1
348 DO i=2,numnod+1
349 adsky(i) = adsky(i) + adsky(i-1)
350 END DO
351
352 lcne = adsky(numnod+1)
353 ALLOCATE(cne(lcne),stat=ierr1)
354
355 IF(ierr1/=0)THEN
356 CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,
357 . c1='DOMDEC')
358 END IF
359
360
361
362
363
364 DO i = 1, nelem
365 wd(i) = 0.
366 ENDDO
367 elemd = 0
368 filnam=rootnam(1:rootlen)//'_0001.rad'
369 OPEN(unit=71,file=filnam(1:rootlen+9),
370 . access='SEQUENTIAL',status='OLD',iostat=io_err1)
371
372 IF (io_err1/=0) THEN
373 filnam=rootnam(1:rootlen)//'d01'
374 OPEN(UNIT=71,FILE=FILNAM(1:ROOTLEN+3),
375 . ACCESS='sequential',STATUS='old',IOSTAT=IO_ERR1)
376 ENDIF
377
378 IF (IO_ERR1==0) THEN
379 OPEN(UNIT=72,FORM='formatted',STATUS='scratch')
380 ELEMD = 0
381 10 READ(71,'(a)',END=20) KEYA
382 11 CONTINUE
383 IF(KEYA(1:12)=='/del/shell/1') THEN
384 30 READ(71,'(a)',END=20) KEYA
385 IF(KEYA(1:1)=='#')GOTO 30
386 IF(keya(1:1)=='$')GOTO 30
387 IF(keya(1:1)=='/')GOTO 11
388
389 rewind(72)
390 WRITE(72,'(A)')keya
391 rewind(72)
392 READ(72,*,END=20)ISH1,ish2
393 DO i = 1, numelc
394 IF(ixc(nixc,i)>=ish1.AND.ixc(nixc,i)<=ish2) THEN
395 DO j = ish1, ish2
396 IF(ixc(nixc,i)==j) THEN
397 wd(i+numels+numelq) = 0.0001
398 elemd = elemd + 1
399 GOTO 35
400 ENDIF
401 ENDDO
402 ENDIF
403 35 CONTINUE
404 ENDDO
405 GOTO 30
406 ELSEIF(keya(1:12)=='/DEL/BRICK/1') THEN
407 60 READ(71,'(A)',END=20) keya
408 IF(keya(1:1)=='#')GOTO 60
409 IF(keya(1:1)=='$')GOTO 60
410 IF(keya(1:1)=='/')GOTO 11
411
412 rewind(72)
413 WRITE(72,'(A)')keya
414 rewind(72)
415 READ(72,*,END=20)ISH1,ish2
416 DO i = 1, numels
417 IF(ixs(nixs,i)>=ish1.AND.ixs(nixs,i)<=ish2) THEN
418 DO j = ish1, ish2
419 IF(ixs(nixs,i)==j) THEN
420 wd(i) = 0.0001
421 elemd = elemd + 1
422 GOTO 65
423 ENDIF
424 ENDDO
425 ENDIF
426 65 CONTINUE
427 ENDDO
428 GOTO 60
429
430 ELSEIF(keya(1:12)=='/DEL/SH_3N/1') THEN
431 90 READ(71,'(A)',END=20) keya
432 IF(keya(1:1)=='#')GOTO 90
433 IF(keya(1:1)=='$')GOTO 90
434 IF(keya(1:1)=='/')GOTO 11
435
436 rewind(72)
437 WRITE(72,'(A)')keya
438 rewind(72)
439 READ(72,*,END=20)ISH1,ish2
440 DO i = 1, numeltg
441 IF(ixtg(nixtg,i)>=ish1
442 . .AND.ixtg(nixtg,i)<=ish2) THEN
443 DO j = ish1, ish2
444 IF(ixtg(nixtg,i)==j) THEN
445 wd(i+numels+numelq+numelc+numelt
446 . +numelp+numelr) = 0.0001
447 elemd = elemd + 1
448 GOTO 95
449 ENDIF
450 ENDDO
451 ENDIF
452 95 CONTINUE
453 ENDDO
454 GOTO 90
455 ENDIF
456 GOTO 10
457 20 CONTINUE
458 CLOSE(71)
459 CLOSE(72)
460
461 IF(iddlevel==0) THEN
462 WRITE(iout,*)' '
463 WRITE(iout,'(A)')
464 . ' SPMD IS CHECKING FOR ELEMENT DELETION IN : ',' '//filnam
465 ENDIF
466
467 ELSE
468
469 IF(iddlevel==0) THEN
470 WRITE(iout,*)' '
471 WRITE(iout,'(A)')
472 . ' SPMD IS NOT ABLE TO CHECK FOR ELEMENT DELETION IN'//
473 . ' RADIOSS ENGINE INPUT FILE'
474 ENDIF
475 ENDIF
476
477
478
479
480 elemd_old = elemd
481 isolbar=0
482 DO ii = 1, numels
483 IF((isoloff(ii)==1.OR.isoloff(ii)==3).AND.
484 * wd(ii)/=0.0001)THEN
485 wd(ii) = 0.0001
486 elemd = elemd + 1
487 END IF
488
489 mid = abs(ixs(1,ii))
490 pid = abs(ixs(10,ii))
491 jale_from_mat = nint(pm(72,mid))
492 jale_from_prop = igeo(62,pid)
493 jale =
max(jale_from_mat, jale_from_prop)
494 mln = nint(pm(19,mid))
495 IF(jale==0.AND.(mln==28.OR.mln==68))THEN
496 isolbar=isolbar+1
497 ENDIF
498 END DO
499
500 DO ii = 1, numelq
501 IF((iquaoff(ii)==1.OR.iquaoff(ii)==3).AND.
502 * wd(ii+numels)/=0.0001)THEN
503 wd(ii+numels) = 0.0001
504 elemd = elemd + 1
505 END IF
506 END DO
507
508 DO ii = 1, numelc
509 IF((isheoff(ii)==1.OR.isheoff(ii)==3).AND.
510 * wd(ii+numels+numelq)/=0.0001)THEN
511 wd(ii+numels+numelq) = 0.0001
512 elemd = elemd + 1
513 END IF
514 END DO
515
516 DO ii = 1, numelt
517 IF((itruoff(ii)==3 ).AND.
518 * wd(ii+numels+numelq+numelc)/=0.0001 )THEN
519 wd(ii+numels+numelq+numelc) = 0.0001
520 elemd = elemd + 1
521 END IF
522 END DO
523
524 DO ii = 1, numelp
525 IF((ipouoff(ii)==3 ).AND.
526 * wd(ii+numels+numelq+numelc+numelt)/=0.0001 )THEN
527 wd(ii+numels+numelq+numelc+numelt) = 0.0001
528 elemd = elemd + 1
529 END IF
530 END DO
531
532 DO ii = 1, numelr
533 IF((iresoff(ii)==3 ).AND.
534 * wd(ii+numels+numelq+numelc+numelt+numelp)/=0.0001 )THEN
535 wd(ii+numels+numelq+numelc+numelt+numelp) = 0.0001
536 elemd = elemd + 1
537 END IF
538 END DO
539
540 DO ii = 1, numeltg
541 IF(itrioff(ii)==1.AND.wd(ii+numels+numelq+numelc+numelt
542 . +numelp+numelr)/=0.0001)THEN
543 wd(ii+numels+numelq+numelc+numelt
544 . +numelp+numelr) = 0.0001
545 elemd = elemd + 1
546 END IF
547 END DO
548
549
550
551 IF (nelem > 0) THEN
552 IF(float(nelem-elemd)/float(nelem)>zep95) elemd = 0
553 END IF
554 IF(iddlevel==0.AND.elemd>elemd_old) THEN
555 WRITE(iout,*)' '
556 WRITE(iout,'(A)')
557 . ' DOMAIN DECOMPOSITION OPTIMIZED FOR ELEMENT DEACTIVATION'//
558 . ' IN /RBODY OPTIONS'
559 ENDIF
560
561
562 IF (iddlevel==1) THEN
563 WRITE(iout,'(A)')' '
564 WRITE(iout,'(A)')
565 . ' --------------------------------------'
566 WRITE(iout,'(A)')
567 . ' NEW DOMAIN DECOMPOSITION FOR OPTIMIZATION'
568 WRITE(iout,'(A)')
569 . ' --------------------------------------'
570 ENDIF
571 WRITE(istdo,'(A)')' .. DOMAIN DECOMPOSITION'
572 WRITE(iout,'(A)')' '
573 IF(dectyp==3)THEN
574 WRITE(iout,'(A)')
575 . ' DOMAIN DECOMPOSITION USING MULTILEVEL KWAY'
576 ELSEIF(dectyp==4)THEN
577 WRITE(iout,'(A)')
578 . ' DOMAIN DECOMPOSITION USING MULTILEVEL RSB'
579 ELSEIF(dectyp==5)THEN
580 WRITE(iout,'(A)')
581 . ' DOMAIN DECOMPOSITION USING MULTILEVEL KWAY FOR IMPLICIT AND AMS'
582 ELSEIF(dectyp==4)THEN
583 WRITE(iout,'(A)')
584 . ' DOMAIN DECOMPOSITION USING MULTILEVEL RSB FOR IMPLICIT'
585 END IF
586 WRITE(iout,'(A)')
587 . ' ------------------------------------------'
588 IF (ipari0==1) THEN
589 WRITE(iout,'(A)')
590 . ' DOMAIN DECOMPOSITION OPTIMIZED FOR PARALLEL ARITHMETIC ON'
591 ELSE
592 WRITE(iout,'(A)')
593 . ' DOMAIN DECOMPOSITION OPTIMIZED FOR PARALLEL ARITHMETIC OFF'
594 ENDIF
595
596 IF(iddlevel == 1 .AND. ddnod_sms /= 0)THEN
597 WRITE(iout,'(A)')
598 . ' ADDITIONAL OPTIMIZATION OF DOMAIN DECOMPOSITION FOR AMS (DOMDEC=7)'
599 END IF
600
601
602
603
604 ALLOCATE(tagelem(nelem))
605 DO i = 1,nelem
606 tagelem(i)=0
607 END DO
608 DO i=1,numels
609 tagelem(i)=1
610 DO k=1,8
611 n = ixs(k+1,i)
612 IF(n /= 0) THEN
613 cne(adsky(n)) = i
614 adsky(n) = adsky(n) + 1
615 END IF
616 ENDDO
617 ENDDO
618
619 IF(numels10>0) THEN
620 DO j=1,numels10
621 tagelem(abs(-(numels8+j)))=2
622 DO k=1,6
623 n = ixs10(k,j)
624 IF(n /= 0) THEN
625 cne(adsky(n)) = -(numels8+j)
626 adsky(n) = adsky(n) + 1
627 ENDIF
628 ENDDO
629 ENDDO
630 ENDIF
631
632
633
634 offelem(1)=numels
635 off = numels
636
637 DO i = 1, numelq
638 tagelem(i+off)=3
639 DO k=1,4
640 n = ixq(k+1,i)
641 cne(adsky(n)) = i+off
642 adsky(n) = adsky(n) + 1
643 ENDDO
644 ENDDO
645
646 offelem(2)=numelq
647 off = off + numelq
648
649 DO i = 1, numelc
650 tagelem(i+off)=4
651 DO k=1,4
652 n = ixc(k+1,i)
653 cne(adsky(n)) = i+off
654 adsky(n) = adsky(n) + 1
655 ENDDO
656 ENDDO
657
658
659 offelem(3)=numelc
660 off = off + numelc
661
662 DO i = 1, numelt
663 tagelem(i+off)=5
664 DO k=1,2
665 n = ixt(k+1,i)
666 cne(adsky(n)) = i+off
667 adsky(n) = adsky(n) + 1
668 ENDDO
669 ENDDO
670
671 offelem(4)= numelt
672 off = off + numelt
673
674 DO i = 1, numelp
675 tagelem(i+off)=6
676 DO k=1,2
677 n = ixp(k+1,i)
678 cne(adsky(n)) = i+off
679 adsky(n) = adsky(n) + 1
680 ENDDO
681 ENDDO
682
683 offelem(5) = numelp
684 off = off + numelp
685
686 DO i = 1, numelr
687 tagelem(i+off)=7
688 DO k=1,2
689 n = ixr(k+1,i)
690 cne(adsky(n)) = i+off
691 adsky(n) = adsky(n) + 1
692 ENDDO
693 IF(nint(geo(12,ixr(1,i)))==12) THEN
694 n = ixr(4,i)
695 cne(adsky(n)) = i+off
696 adsky(n) = adsky(n) + 1
697 ENDIF
698 ENDDO
699
700 offelem(6)=numelr
701 off = off + numelr
702
703 DO i = 1, numeltg
704 tagelem(i+off)=8
705 DO k=1,3
706 n = ixtg(k+1,i)
707 cne(adsky(n)) = i+off
708 adsky(n) = adsky(n) + 1
709 ENDDO
710 ENDDO
711
712 offelem(7)=numeltg
713 off = off + numeltg
714
715
716 offelem(8) = 0
717
718 DO i=1, numelx
719 tagelem(i+off)=10
720 nelx=kxx(3,i)
721 DO k=1,nelx
722 addx = kxx(4,i)+k-1
723 n=ixx(addx)
724 cne(adsky(n)) = i+off
725 adsky(n) = adsky(n) + 1
726 ENDDO
727 ENDDO
728
729 offelem(9)=numelx
730 off = off + numelx
731
732 DO i=1, numelig3d
733 tagelem(i+off)=11
734 nelig3d=kxig3d(3,i)
735 DO k=1,nelig3d
736 addx = kxig3d(4,i)+k-1
737 n=ixig3d(addx)
738 cne(adsky(n)) = i+off
739 adsky(n) = adsky(n) + 1
740 ENDDO
741 ENDDO
742
743 offelem(10)=numelig3d
744 off = off + numelig3d
745
746
747 DO i=numnod+1,2,-1
748 adsky(i) = adsky(i-1)
749 END DO
750
751 adsky(1) = 1
752
753
754 icelem=1
755 icints=0
756 icintm=0
757 icint2=0
758 iccand=0
759 icnod_sms=0
760 icddl=0
761 icfsi=0
762 icsol=0
763 icdel=0
764 icr2r=0
765 ickin=0
766 ncond=1
767
768 DO i = 1, nelemint
769 itypint=abs(inter_cand%IXINT(6,i))
770 IF(itypint == 2)THEN
771 icint2 = icint2+1
772 ELSEIF(itypint == 7 .OR. itypint == 11)THEN
773 icints = icints+1
774 icintm = icintm+1
775 iccand = iccand+1
776 ELSEIF(itypint == 24 .OR. itypint == 25)THEN
777 icints = icints+1
778 icintm = icintm+1
779 iccand = iccand+1
780 END IF
781 END DO
782
783 IF(ddnod_sms/=0)THEN
784 ncond=ncond+1
785 icnod_sms=ncond
786 ELSE
787 icnod_sms=0
788 END IF
789
790 IF(nelem > 0) THEN
791 IF((icints+icintm>100) .AND.
792 + (nelem < icints+icintm .OR.
793 + float(nelem-icints-icintm)/float(nelem)<=zep95)) THEN
794 ncond=ncond+1
795 icints=ncond
796 ncond=ncond+1
797 icintm=ncond
798 ELSE
799 IF(nsnt+nmnt>100) THEN
800 ncond=ncond+1
801 icints=ncond
802 ncond=ncond+1
803 icintm=ncond
804 ELSE
805 icints=0
806 icintm=0
807 ENDIF
808 END IF
809 IF((icint2>100) .AND.
810 + (nelem < icint2 .OR.
811 + float(nelem-icint2)/float(nelem)<=zep98)) THEN
812 ncond=ncond+1
813 icint2=ncond
814 ELSE
815 icint2=0
816 END IF
817
818 IF((iccand>100) .AND.
819 + (nelem < iccand .OR.
820 + float(nelem-iccand)/float(nelem)<=zep95)) THEN
821 ncond=ncond+1
822 iccand=ncond
823 ELSE
824 iccand=0
825 END IF
826 ELSE
827 icints = 0
828 icintm = 0
829 icint2 = 0
830 iccand = 0
831 ENDIF
832
833 nk=0
834
835 IF(elemd == 0) THEN
836 DO i = 1, numnod
837
838
839
840
841
842 nki=iwl(ikine(i))+irb(ikine(i))+irb2(ikine(i))
843 + +irbm(ikine(i))+irlk(ikine(i))+ijo(ikine(i))
844 + +ikrbe2(ikine(i))+ikrbe3(ikine(i))
845 iwkin(i)=nki
847 END DO
848
849 IF(float(numnod-nk)/float(numnod)>zep95) nk = 0
850 IF(nk > 20000) THEN
851 ncond = ncond+1
852 ickin = ncond
853 END IF
854 END IF
855
856 IF(dectyp==5.OR.dectyp==6)THEN
857
858 ncond = ncond+1
859 icddl=1
860 icelem=ncond
861 IF(elemd>0) THEN
862 ncond = ncond+1
863 icdel = ncond
864 END IF
865
866 ELSE
867 IF(ilag==1.AND.(iale==1.OR.ieuler==1))THEN
868
869 ncond = ncond+1
870 nb_elem_ale = 0
871 DO i = 1, numels
872 mid = abs(ixs(1,i))
873 pid = abs(ixs(10,i))
874 jale_from_mat = nint(pm(72,mid))
875 jale_from_prop = igeo(62,pid)
876 jale =
max(jale_from_mat, jale_from_prop)
877 IF(jale==0.AND.mln/=18)THEN
878
879 ELSE
880 nb_elem_ale = nb_elem_ale + 1
881 END IF
882 ENDDO
883
884 IF (nelem - nb_elem_ale < 128 * nspmd) THEN
885
886 icfsi = 1
887 icelem = ncond
888 WRITE(iout,'(A)')
889 . ' DOMAIN DECOMPOSITION OPTIMIZED FOR ALE (1)'
890 ELSEIF( nb_elem_ale*2 > nelem ) THEN
891
892 icfsi = 1
893 icelem = 2
894 IF(icddl/=0) icddl = icddl + 1
895 IF(icints/=0) icints = icints + 1
896 IF(icintm/=0) icintm = icintm + 1
897 IF(icint2/=0) icint2 = icint2 + 1
898 IF(ickin/=0) ickin = ickin + 1
899 IF(icnod_sms/=0) icnod_sms = icnod_sms +1
900 IF(icdel/=0) icdel = icdel + 1
901 IF(iccand/=0) iccand = iccand + 1
902 WRITE(iout,'(A)')
903 . ' DOMAIN DECOMPOSITION OPTIMIZED FOR ALE (2)'
904 ELSEIF ( nb_elem_ale*4 > nelem) THEN
905
906 icfsi = 2
907 icelem = 1
908 IF(icddl/=0) icddl = icddl + 1
909 IF(icints/=0) icints = icints + 1
910 IF(icintm/=0) icintm = icintm + 1
911 IF(icint2/=0) icint2 = icint2 + 1
912 IF(ickin/=0) ickin = ickin + 1
913 IF(icnod_sms/=0) icnod_sms = icnod_sms +1
914 IF(icdel/=0) icdel = icdel + 1
915 IF(iccand/=0) iccand = iccand + 1
916 WRITE(iout,'(A)')
917 . ' DOMAIN DECOMPOSITION OPTIMIZED FOR FSI (3)'
918 ELSE
919 icfsi = ncond
920 END IF
921 END IF
922 IF(isolbar > 10000 .AND. icfsi == 0 .AND. numelc > numels)THEN
923
924
925 WRITE(iout,'(A)')
926 . ' DOMAIN DECOMPOSITION OPTIMIZED FOR BARRIER '
927
928 ncond = ncond+1
929 icsol=ncond
930 END IF
931 IF(elemd>0) THEN
932 ncond = ncond+1
933 icdel = ncond
934 END IF
935 END IF
936 IF(nsubdom>0)THEN
937 numel_r2r = 0
938 DO i = 1, numels
939 IF (
tag_elsf(i) /= 0) numel_r2r = numel_r2r+1
940 END DO
941 DO i = 1, numelc
942 IF (
tag_elcf(i) /= 0) numel_r2r = numel_r2r+1
943 END DO
944 IF (numel_r2r>=nspmd) THEN
945 WRITE(iout,'(A)')
946 . ' DOMAIN DECOMPOSITION OPTIMIZED FOR MULTIDOMAINS '
947 ncond = ncond+1
948 icr2r=ncond
949 ENDIF
950 END IF
951
952 ALLOCATE(rwd(nelem*ncond),stat=ierr1)
953
954 DO i = 1, ncond*nelem
955 rwd(i) = 0
956 ENDDO
957
958 CALL initwg(wd,pm,geo,ixs,ixq,
959 . ixc,ixt,ixp,ixr,ixtg,
960 . kxx,igeo,isolnod,iarch,
961 . numels,numelq,numelc,numelt,numelp,
962 . numelr,numeltg,numelx,ipm,
963 . bufmat,nummat,numgeo,taille,poin_ump,
964 . tab_ump,poin_ump_old,tab_ump_old,cputime_mp_old,
965 . tabmp_l,ipart,ipartc,ipartg,
966 . iparts,npart,poin_part_shell,poin_part_tri,poin_part_sol,
967 . mid_pid_shell,mid_pid_tri,mid_pid_sol,iddlevel,
968 . mat_param)
969
970 IF(nsubdom>0)THEN
971 cost_r2r = zero
972 DO i=1,nelem
973 scal = one
974 IF (i<=numels) THEN
975 mid = abs(ixs(1,i))
976 pid = abs(ixs(10,i))
977 jale_from_mat = nint(pm(72,mid))
978 jale_from_prop = igeo(62,pid)
979 jale =
max(jale_from_mat, jale_from_prop)
980 mln = nint(pm(19,mid))
981 IF (jale/=0) scal = 2.5
982 IF (mln==51) scal = 4.5
983 ENDIF
984 cost_r2r = cost_r2r + wd(i)
985 END DO
986 ENDIF
987
988 DO i=1,numels
989 nnc=0
990 IF ((icr2r /= 0)) THEN
992 rwd(ncond*(i-1)+icr2r) = 1
993 ENDIF
994 ENDIF
995 IF(icsol /= 0) rwd(ncond*(i-1)+icsol) = 1
996 IF(isolnod(i)==4.OR.isolnod(i)==10)THEN
997 DO k=1,8
998 n = ixs(k+1,i)
999 IF(n/=0)THEN
1000 fac=one/(adsky(n+1)-adsky(n))
1001 nnc = nnc+adsky(n+1)-adsky(n)
1002 IF(icddl/=0)rwd(ncond*(i-1)+icddl)=rwd(ncond*(i-1)+icddl)
1003 + +dsdof(n)*fac
1004 IF(icints/=0)
1005 + rwd(ncond*(i-1)+icints)=rwd(ncond*(i-1)+icints)
1006 + +iwcont(1,n)*fac
1007 IF(icintm/=0)
1008 + rwd(ncond*(i-1)+icintm) = rwd(ncond*(i-1)+icintm)
1009 + + iwcont(2,n)*fac
1010 IF(icint2/=0)
1011 + rwd(ncond*(i-1)+icint2)=rwd(ncond*(i-1)+icint2)
1012 + +(iwcin2(1,n)+iwcin2(2,n))*fac
1013 IF(ickin/=0)rwd(ncond*(i-1)+ickin)=rwd(ncond*(i-1)+ickin)
1014 + +iwkin(n)*fac
1015 IF(icnod_sms/=0)rwd(ncond*(i-1)+icnod_sms)=rwd(ncond*(i-1)+icnod_sms)
1016 + +
min(dsdof(n),1)*fac
1017 END IF
1018 END DO
1019 IF(isolnod(i)==10)THEN
1020 ii = i-numels8
1021 DO k=1,6
1022 n = ixs10(k,ii)
1023 IF(n/=0)THEN
1024
1025 fac=one/
max(adsky(n+1)-adsky(n),1)
1026 nnc = nnc+adsky(n+1)-adsky(n)
1027 IF(icddl/=0)rwd(ncond*(i-1)+icddl)=rwd(ncond*(i-1)+icddl)
1028 + +dsdof(n)*fac
1029 IF(icints/=0)
1030 + rwd(ncond*(i-1)+icints)=rwd(ncond*(i-1)+icints)
1031 + +iwcont(1,n)*fac
1032 IF(icintm/=0)
1033 + rwd(ncond*(i-1)+icintm) = rwd(ncond*(i-1)+icintm)
1034 + + iwcont(2,n)*fac
1035 IF(icint2/=0)
1036 + rwd(ncond*(i-1)+icint2)=rwd(ncond*(i-1)+icint2)
1037 + +(iwcin2(1,n)+iwcin2(2,n))*fac
1038 IF(ickin/=0)rwd(ncond*(i-1)+ickin)=rwd(ncond*(i-1)+ickin)
1039 + +iwkin(n)*fac
1040 IF(icnod_sms/=0)rwd(ncond*(i-1)+icnod_sms)=rwd(ncond*(i-1)+icnod_sms)
1041 + +
min(dsdof(n),1)*fac
1042 ENDIF
1043 ENDDO
1044
1045 ELSE
1046
1047 ENDIF
1048 ELSE
1049 DO k=1,8
1050 n = ixs(k+1,i)
1051 IF(n/=0)THEN
1052
1053 fac=one/
max(adsky(n+1)-adsky(n),1)
1054 nnc = nnc+adsky(n+1)-adsky(n)
1055 IF(icddl/=0)rwd(ncond*(i-1)+icddl)=rwd(ncond*(i-1)+icddl)
1056 + +dsdof(n)*fac
1057 IF(icints/=0)
1058 + rwd(ncond*(i-1)+icints)=rwd(ncond*(i-1)+icints)
1059 + +iwcont(1,n)*fac
1060 IF(icintm/=0)
1061 + rwd(ncond*(i-1)+icintm) = rwd(ncond*(i-1)+icintm)
1062 + + iwcont(2,n)*fac
1063 IF(icint2/=0)
1064 + rwd(ncond*(i-1)+icint2)=rwd(ncond*(i-1)+icint2)
1065 + +(iwcin2(1,n)+iwcin2(2,n))*fac
1066 IF(ickin/=0)rwd(ncond*(i-1)+ickin)=rwd(ncond*(i-1)+ickin)
1067 + +iwkin(n)*fac
1068 IF(icnod_sms/=0)rwd(ncond*(i-1)+icnod_sms)=rwd(ncond*(i-1)+icnod_sms)
1069 + +
min(dsdof(n),1)*fac
1070 END IF
1071 ENDDO
1072
1073 ENDIF
1074 ENDDO
1075
1076
1077
1078 off = numels
1079
1080
1081 off = off + numelq
1082
1083 DO i = 1, numelc
1084 nnc=0
1085 IF (icr2r /= 0) THEN
1087 rwd(ncond*(i+off-1)+icr2r) = 1
1088 ENDIF
1089 ENDIF
1090 DO k=1,4
1091 n = ixc(k+1,i)
1092 IF(n/=0)THEN
1093 fac=one/(adsky(n+1)-adsky(n))
1094 nnc = nnc+adsky(n+1)-adsky(n)
1095 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1096 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1097 IF(icints/=0)
1098 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1099 + + iwcont(1,n)*fac
1100 IF(icintm/=0)
1101 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1102 + + iwcont(2,n)*fac
1103 IF(icint2/=0)
1104 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1105 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1106 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1107 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1108 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1109 + +
min(dsdof(n),1)*fac
1110 END IF
1111 ENDDO
1112
1113 ENDDO
1114
1115 off = off + numelc
1116
1117 DO i = 1, numelt
1118 nnc=0
1119 DO k=1,2
1120 n = ixt(k+1,i)
1121 IF(n/=0)THEN
1122 fac=one/(adsky(n+1)-adsky(n))
1123 nnc = nnc+adsky(n+1)-adsky(n)
1124 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1125 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1126 IF(icints/=0)
1127 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1128 + + iwcont(1,n)*fac
1129 IF(icintm/=0)
1130 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1131 + + iwcont(2,n)*fac
1132 IF(icint2/=0)
1133 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1134 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1135 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1136 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1137 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1138 + +
min(dsdof(n),1)*fac
1139 END IF
1140 ENDDO
1141
1142 ENDDO
1143
1144 off = off + numelt
1145
1146 DO i = 1, numelp
1147 nnc=0
1148 DO k=1,2
1149 n = ixp(k+1,i)
1150 IF(n/=0)THEN
1151 fac=one/(adsky(n+1)-adsky(n))
1152 nnc = nnc+adsky(n+1)-adsky(n)
1153 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1154 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1155 IF(icints/=0)
1156 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1157 + + iwcont(1,n)*fac
1158 IF(icintm/=0)
1159 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1160 + + iwcont(2,n)*fac
1161 IF(icint2/=0)
1162 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1163 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1164 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1165 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1166 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1167 + +
min(dsdof(n),1)*fac
1168 END IF
1169 ENDDO
1170
1171 ENDDO
1172
1173 off = off + numelp
1174
1175 DO i = 1, numelr
1176 nnc=0
1177 DO k=1,2
1178 n = ixr(k+1,i)
1179 IF(n/=0)THEN
1180 fac=one/(adsky(n+1)-adsky(n))
1181 nnc = nnc+adsky(n+1)-adsky(n)
1182 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1183 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1184 IF(icints/=0)
1185 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1186 + + iwcont(1,n)*fac
1187 IF(icintm/=0)
1188 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1189 + + iwcont(2,n)*fac
1190 IF(icint2/=0)
1191 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1192 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1193 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1194 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1195 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1196 + +
min(dsdof(n),1)*fac
1197 END IF
1198 ENDDO
1199 IF(nint(geo(12,ixr(1,i)))==12) THEN
1200 n = ixr(4,i)
1201 IF(n/=0)THEN
1202 fac=one/(adsky(n+1)-adsky(n))
1203 nnc = nnc+adsky(n+1)-adsky(n)
1204 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1205 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1206 IF(icints/=0)
1207 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1208 + + iwcont(1,n)*fac
1209 IF(icintm/=0)
1210 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1211 + + iwcont(2,n)*fac
1212 IF(icint2/=0)
1213 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1214 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1215 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1216 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1217 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1218 + +
min(dsdof(n),1)*fac
1219 END IF
1220 ENDIF
1221
1222 ENDDO
1223
1224 off = off + numelr
1225
1226 DO i = 1, numeltg
1227 nnc=0
1228 DO k=1,3
1229 n = ixtg(k+1,i)
1230 IF(n/=0)THEN
1231 fac=one/(adsky(n+1)-adsky(n))
1232 nnc = nnc+adsky(n+1)-adsky(n)
1233 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1234 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1235 IF(icints/=0)
1236 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1237 + + iwcont(1,n)*fac
1238 IF(icintm/=0)
1239 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1240 + + iwcont(2,n)*fac
1241 IF(icint2/=0)
1242 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1243 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1244 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1245 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1246 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1247 + +
min(dsdof(n),1)*fac
1248 END IF
1249 ENDDO
1250
1251
1252 ENDDO
1253
1254 off = off + numeltg
1255
1256 DO i=1, numelx
1257 nelx=kxx(3,i)
1258 nnc=0
1259 DO k=1,nelx
1260 addx = kxx(4,i)+k-1
1261 n=ixx(addx)
1262 IF(n/=0)THEN
1263 fac=one/(adsky(n+1)-adsky(n))
1264 nnc = nnc+adsky(n+1)-adsky(n)
1265 IF(icddl/=0)rwd(ncond*(i+off-1)+icddl) =
1266 + rwd(ncond*(i+off-1)+icddl) + dsdof(n)*fac
1267 IF(icints/=0)
1268 + rwd(ncond*(i+off-1)+icints) = rwd(ncond*(i+off-1)+icints)
1269 + + iwcont(1,n)*fac
1270 IF(icintm/=0)
1271 + rwd(ncond*(i+off-1)+icintm) = rwd(ncond*(i+off-1)+icintm)
1272 + + iwcont(2,n)*fac
1273 IF(icint2/=0)
1274 + rwd(ncond*(i+off-1)+icint2) = rwd(ncond*(i+off-1)+icint2)
1275 + + (iwcin2(1,n)+iwcin2(2,n))*fac
1276 IF(ickin/=0)rwd(ncond*(i+off-1)+ickin)=
1277 + rwd(ncond*(i+off-1)+ickin) + iwkin(n)*fac
1278 IF(icnod_sms/=0)rwd(ncond*(i+off-1)+icnod_sms)=rwd(ncond*(i+off-1)+icnod_sms)
1279 + +
min(dsdof(n),1)*fac
1280 END IF
1281 ENDDO
1282
1283 ENDDO
1284
1285 off = off + numelx
1286
1287
1288
1289 ALLOCATE(iwd(nelem*ncond),stat=ierr1)
1290
1291 DO i = 1, ncond*nelem
1292 iwd(i) = 0
1293 ENDDO
1294 DO i = 1, nelem
1295
1296 IF(icints/=0)
1297 . iwd(ncond*(i-1)+icints) = nint(rwd(ncond*(i-1)+icints))
1298 IF(icintm/=0)
1299 . iwd(ncond*(i-1)+icintm) = nint(rwd(ncond*(i-1)+icintm))
1300 IF(iccand/=0)
1301 . iwd(ncond*(i-1)+iccand) = nint(rwd(ncond*(i-1)+iccand))
1302 IF(icint2/=0)
1303 . iwd(ncond*(i-1)+icint2) = nint(rwd(ncond*(i-1)+icint2))
1304 IF(icddl/=0)
1305 . iwd(ncond*(i-1)+icddl)= nint(rwd(ncond*(i-1)+icddl))
1306 IF(icsol/=0)
1307 . iwd(ncond*(i-1)+icsol)= nint(rwd(ncond*(i-1)+icsol))
1308 IF(ickin/=0)
1309 . iwd(ncond*(i-1)+ickin)= nint(rwd(ncond*(i-1)+ickin))
1310 IF(icr2r/=0)
1311 . iwd(ncond*(i-1)+icr2r)= nint(rwd(ncond*(i-1)+icr2r))
1312
1313
1314 IF(icnod_sms/=0)
1315 . iwd(ncond*(i-1)+icnod_sms) = nint(rwd(ncond*(i-1)+icnod_sms))
1316 END DO
1317
1318 DEALLOCATE(rwd)
1319
1320
1321
1322 nedges = 0
1323 DO n = 1, numnod
1324 DO cc1 = adsky(n), adsky(n+1)-1
1325 numg1 = cne(cc1)
1326 IF(numg1 > 0) THEN
1327 DO cc2 = cc1+1, adsky(n+1)-1
1328 numg2 = cne(cc2)
1329 IF(numg2 > 0 .AND. numg1 /= numg2) THEN
1330 nedges = nedges + 1
1331 END IF
1332 ENDDO
1333 END IF
1334 ENDDO
1335 ENDDO
1336
1337 IF (iddlevel==1) nedges = nedges+nelemint
1338
1339
1340!
siddconnect minimum
size nelem.
Value set to 10*nelem
1341 IF(nelem < 100 000 000) THEN
1343 ELSE
1344
1345
1347 edge_filtering = 1
1348 ENDIF
1349
1350
1351
1352
1353
1355 ALLOCATE(
iddconnect%IENTRYDOM(2,nelem),stat=ierr1)
1356
1358
1359 nedges_old = nedges
1360
1361 IF(edge_filtering == 1 .AND. (numels > nelem / 3 .OR. icfsi > 0 )) THEN
1362 WRITE(iout,'(A)') "** INFO: SIMPLIFIED DOMAIN DECOMPOSITION"
1363
1364
1365
1366
1368 ALLOCATE(nb_nodes_mini(nelem))
1370 nb_nodes_mini(1:nelem) = 3
1371 DO i = 1 , nelem
1372 CALL find_nodes(i ,connectivity(1,i),tagelem,ixs,ixs10,
1373 1 ixq ,ixc ,ixt ,ixp,ixr,
1374 2 ixtg ,kxx ,ixx,kxig3d,
1375 3 ixig3d,geo ,offelem,nb_nodes_mini(i))
1377 ENDDO
1378
1379 ALLOCATE(connect_weight(nelem))
1380 ALLOCATE(pointer_neigh(nelem))
1381 DO i =1,nelem
1382 connect_weight(i)=0
1383 pointer_neigh(i)=0
1384 ENDDO
1385 nelmin = 0
1386 DO i = 1 , nelem
1387 nelmin = nb_nodes_mini(i)
1389 prev_neigh = 0
1390 c_neigh = 0
1391 j = 0
1393 IF ( elemnodes(k)/=0 ) THEN
1394 DO l=adsky(elemnodes(k)), adsky(elemnodes(k)+1)-1
1395 IF( cne(l) > 0 .AND. cne(l) > i) THEN
1396 connect_weight(cne(l)) =
1397 . connect_weight(cne(l)) + 1
1398 IF( connect_weight(cne(l)) == 1 ) THEN
1399 pointer_neigh(cne(l))=prev_neigh
1400 c_neigh = c_neigh + 1
1401 prev_neigh = cne(l)
1402 ENDIF
1403 ENDIF
1404 ENDDO
1405 j=j+1
1406 ENDIF
1407 ENDDO
1408
1409
1410 IF(nelmin == 0) nelmin = 3
1411 IF (c_neigh > 0 ) THEN
1412 DO j=1,c_neigh
1413 IF(i /= prev_neigh) THEN
1414 IF(
consider_edge(connectivity,nb_nodes_mini,nelem,i,prev_neigh))
THEN
1417 ENDIF
1418 ENDIF
1419 point_delete=prev_neigh
1420 prev_neigh = pointer_neigh(prev_neigh)
1421 pointer_neigh(point_delete) = 0
1422 connect_weight(point_delete) = 0
1423 ENDDO
1424 ENDIF
1425 ENDDO
1426 DEALLOCATE(connect_weight)
1427 DEALLOCATE(pointer_neigh)
1428 DEALLOCATE(nb_nodes_mini)
1429 DEALLOCATE(connectivity)
1430
1431 ELSE
1432
1433
1434
1435 DO n = 1, numnod
1436 DO cc1 = adsky(n), adsky(n+1)-1
1437 numg1 = cne(cc1)
1438 IF(numg1 > 0) THEN
1439 DO cc2 = cc1+1, adsky(n+1)-1
1440 numg2 = cne(cc2)
1441 IF(numg2 > 0 .AND. numg1 /= numg2) THEN
1444 END IF
1445 ENDDO
1446 END IF
1447 ENDDO
1448 ENDDO
1449 ENDIF !(edge_filtering == 0 )
1450
1451 nedges = 0
1452 nedges_8 = 0
1453 DO i=1,nelem
1455 nedges = nedges + taille_local
1456 nedges_8 = nedges_8 + taille_local
1457 ENDDO
1458 nedges = nedges/2
1459
1460
1461
1462 IF (iddlevel==1) THEN
1463
1464
1465
1466 iwarn1 = 0
1467 DO i = 1, nelem
1468 IF(ielem21(i)==1)THEN
1469 IF(wd(i)>0.01)THEN
1470 iwarn1 = 1
1471 END IF
1472 END IF
1473 END DO
1474 IF(iwarn1/=0)THEN
1475 WRITE(iout,*)' '
1476 WRITE(iout,'(A)')
1477 . ' ONE OR MORE ELEMENT OF MAIN SIDE OF INTERF. TYPE21',
1478 . ' NEEDS TO BE DEACTIVATED'
1479 END IF
1480
1481
1482
1483
1484 wd_max = 0
1485 IF(nvolu > 0 .AND. iddlevel == 1 .AND. icfsi == 0) THEN
1487 . wd_max,fvm_elem,fvm_domdec,itab,igrsurf,t_monvol)
1488 ENDIF
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500 DO i = 1, nelem
1501 cep(i) = 0
1502 ENDDO
1503
1504 DO i = 1, nelemint
1505 n=inter_cand%IXINT(5,i)
1506 IF (n<=numnod) THEN
1507 numg1=abs(cne(adsky(n)))
1508 numg2=numg1
1509 itypint=abs(inter_cand%IXINT(6,i))
1510 IF(itypint==2) THEN
1511 IF(adsky(n+1)-adsky(n)>0)THEN
1512 n=inter_cand%IXINT(1,i)
1513 n1=inter_cand%IXINT(2,i)
1514 n2=inter_cand%IXINT(3,i)
1515 DO i1 = adsky(n), adsky(n+1)-1
1516 numg2=abs(cne(i1))
1517 DO i2 = adsky(n1), adsky(n1+1)-1
1518 numg3=abs(cne(i2))
1519 IF(numg3==numg2) THEN
1520 DO i3 = adsky(n2), adsky(n2+1)-1
1521 numg4=abs(cne(i3))
1522 IF(numg4==numg2) GOTO 100
1523 ENDDO
1524 ENDIF
1525 ENDDO
1526 ENDDO
1527 100 CONTINUE
1528 IF(numg1 /= numg2) THEN
1531 cep(numg1) = 1
1532 cep(numg2) = 1
1533 ENDIF
1534 ENDIF
1535 ENDIF
1536 ENDIF
1537 ENDDO
1538
1539
1540 IF(iccand > 0) THEN
1541 DO n = 1,numnod
1542 IF( iwcont(4,n) > 0) THEN
1543 DO i1 = adsky(n), adsky(n+1)-1
1544 numg2=abs(cne(i1))
1545 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+iwcont(4,n)
1546 ENDDO
1547 ENDIF
1548 ENDDO
1549 ENDIF
1550
1551
1552
1553 ALLOCATE(isort(nelemint))
1554 ALLOCATE(index_sort(2*nelemint))
1555
1556
1557 DO i=1,nelemint
1558 isort(i)=(-inter_cand%IXINT(6,i)) + 100
1559 index_sort(i)=i
1560 itypint=abs(inter_cand%IXINT(6,i))
1561 ENDDO
1562 CALL my_orders(0,work,isort,index_sort,nelemint,1)
1563
1564
1565
1566
1567 DO ii = 1, nelemint
1568 i = index_sort(ii)
1569 n=inter_cand%IXINT(5,i)
1570 IF (n<=numnod) THEN
1571 numg1=-1
1572
1573 cep_min = huge(cep_min)
1574 DO i1 = adsky(n), adsky(n+1)-1
1575 numg3=abs(cne(i1))
1576 IF(cep_min > cep(numg3)) THEN
1577 numg1 = numg3
1578 cep_min = cep(numg1)
1579 ENDIF
1580 IF(cep_min == 0) EXIT
1581 END DO
1582
1583 numg2=-1
1584 itypint=abs(inter_cand%IXINT(6,i))
1585 IF(itypint==7) THEN
1586 IF(adsky(n+1)-adsky(n)>0)THEN
1587 n=inter_cand%IXINT(1,i)
1588 n1=inter_cand%IXINT(2,i)
1589 n2=inter_cand%IXINT(3,i)
1590 IF (n<=numnod) THEN
1591 DO i1 = adsky(n), adsky(n+1)-1
1592 numg2=abs(cne(i1))
1593 IF(numg2 == numg1) THEN
1594 GOTO 107
1595
1596 ELSE
1597 DO i2 = adsky(n1), adsky(n1+1)-1
1598 numg3=abs(cne(i2))
1599 IF(numg3 == numg1) GOTO 107
1600 IF(numg3==numg2) THEN
1601 DO i3 = adsky(n2), adsky(n2+1)-1
1602 numg4=abs(cne(i3))
1603 IF(numg4 == numg1) GOTO 107
1604 IF(numg4==numg2) GOTO 107
1605 ENDDO
1606 ENDIF
1607 ENDDO
1608 END IF
1609 ENDDO
1610 ENDIF
1611 107 CONTINUE
1612
1613 IF(numg1 /= numg2 .AND. (numg1 >0 ) .AND. (numg2 > 0)) THEN
1614 IF(cep(numg1)==0.OR.cep(numg2)==0) THEN
1615 number_of_added_edges = number_of_added_edges + 1
1616
1619
1620 cep(numg1) = cep(numg1) + 1
1621 cep(numg2) = cep(numg2) + 1
1622 ELSE
1623 refused_cep0 = refused_cep0 + 1
1624 ENDIF
1625 ELSE
1626 if(numg1 == numg2) refused_numg = refused_numg + 1
1627 if(numg1<=0 .OR. numg2<=0) refused_numg0 = refused_numg0 + 1
1628
1629 ENDIF
1630 IF(iccand > 0 .AND. numg2 > 0) THEN
1631
1632
1633 IF(inter_cand%IXINT(6,i)<0)THEN
1634
1635 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+5
1636 ELSE
1637 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+1
1638 ENDIF
1639 END IF
1640
1641 ENDIF
1642 ELSEIF(itypint==11) THEN
1643 IF(adsky(n+1)-adsky(n)>0)THEN
1644 n1=inter_cand%IXINT(3,i)
1645 n2=inter_cand%IXINT(4,i)
1646 DO i1 = adsky(n1), adsky(n1+1)-1
1647 numg2=abs(cne(i1))
1648 IF(numg2 /= numg1) THEN
1649 DO i2 = adsky(n2), adsky(n2+1)-1
1650 numg3=abs(cne(i2))
1651 IF(numg3==numg2) GOTO 111
1652 ENDDO
1653 END IF
1654 ENDDO
1655 111 CONTINUE
1656 IF(numg1 /= numg2 .AND.(numg1>0 .AND. numg2 > 0)) THEN
1657 IF(cep(numg1)==0.OR.cep(numg2)==0) THEN
1658
1659 number_of_added_edges = number_of_added_edges + 1
1660
1663 cep(numg1) = cep(numg1) + 1
1664 cep(numg2) = cep(numg2) + 1
1665 ELSE
1666 refused_cep0 = refused_cep0 + 1
1667 ENDIF
1668 ELSE
1669 if(numg1 == numg2) refused_numg = refused_numg + 1
1670 if(numg1<=0 .OR. numg2<=0) refused_numg0 = refused_numg0 + 1
1671 ENDIF
1672 IF(iccand > 0 .AND. numg2 > 0) THEN
1673
1674 IF(inter_cand%IXINT(6,i)<0)THEN
1675 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+1
1676 ELSE
1677 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+1
1678 ENDIF
1679 END IF
1680
1681 ENDIF
1682 ELSEIF(itypint==24.OR.itypint==25)THEN
1683 IF(adsky(n+1)-adsky(n)>0)THEN
1684 n=inter_cand%IXINT(1,i)
1685 n1=inter_cand%IXINT(2,i)
1686 n2=inter_cand%IXINT(3,i)
1687 DO i1 = adsky(n), adsky(n+1)-1
1688 numg2=abs(cne(i1))
1689 IF(numg2 == numg1) GOTO 124
1690 IF(numg2 /= numg1) THEN
1691 DO i2 = adsky(n1), adsky(n1+1)-1
1692 numg3=abs(cne(i2))
1693 IF(numg3 == numg1) GOTO 124
1694 IF(numg3==numg2) THEN
1695 DO i3 = adsky(n2), adsky(n2+1)-1
1696 numg4=abs(cne(i3))
1697 IF(numg4 == numg1) GOTO 124
1698 IF(numg4==numg2) GOTO 124
1699 ENDDO
1700 ENDIF
1701 ENDDO
1702 END IF
1703 ENDDO
1704 124 CONTINUE
1705 IF(numg1 /= numg2 .AND. (numg1>0 .AND. numg2 > 0)) THEN
1706 IF(cep(numg1)==0.OR.cep(numg2)==0) THEN
1707 number_of_added_edges = number_of_added_edges + 1
1708
1711 cep(numg1) = cep(numg1) + 1
1712 cep(numg2) = cep(numg2) + 1
1713 ELSE
1714 refused_cep0 = refused_cep0 + 1
1715 ENDIF
1716 ELSE
1717 if(numg1 == numg2) refused_numg = refused_numg + 1
1718 if(numg1<=0 .OR. numg2<=0) refused_numg0 = refused_numg0 + 1
1719 ENDIF
1720 IF(iccand > 0 .AND. numg2 > 0) THEN
1721 IF(inter_cand%IXINT(6,i)<0)THEN
1722 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+5
1723 ELSE
1724 iwd(ncond*(numg2-1)+iccand)=iwd(ncond*(numg2-1)+iccand)+1
1725 END IF
1726 END IF
1727
1728 ENDIF
1729 ENDIF
1730 ENDIF
1731 ENDDO
1732
1733
1734
1735
1736 ALLOCATE(colors(nelem+1),stat=ierr1)
1737 ALLOCATE(roots(nelem),stat=ierr1)
1738 CALL plist_bfs(nelem,nconnx,colors,roots)
1739
1740
1741 ALLOCATE(min_dist(nconnx))
1742 ALLOCATE(coords(3,nconnx))
1743 DO i = 1,nconnx
1744
1745 CALL find_nodes(roots(i) ,elemnodes,tagelem,ixs,ixs10,
1746 1 ixq ,ixc ,ixt ,ixp,ixr,
1747 2 ixtg ,kxx ,ixx,kxig3d,
1748 3 ixig3d,geo ,offelem,nelmin)
1749
1750 IF(elemnodes(1) /= 0) THEN
1751 coords(1:3,i) = x(1:3,elemnodes(1))
1752 ELSE
1753 coords(1:3,i) = zero
1754 ENDIF
1755 ENDDO
1756
1757 DO i = 1, nconnx
1758 numg1 = roots(i)
1759 min_dist(1:nconnx) = huge(1.0)
1760 DO j = 1, nconnx
1761 numg2 = roots(j)
1762 IF(numg1 /= numg2) THEN
1763 min_dist(j) = (coords(1,i)-coords(1,j))**2
1764 . + (coords(2,i)-coords(2,j))**2
1765 . + (coords(3,i)-coords(3,j))**2
1766
1767 ENDIF
1768 ENDDO
1769 dist = minval(min_dist(1:nconnx))
1770 k = 0
1771 DO j = 1, nconnx
1772 numg2 = roots(j)
1773 IF(numg1 /= numg2 .AND. min_dist(j) < 2.0*dist) THEN
1774
1775
1778 k = k + 1
1779 ENDIF
1780 ENDDO
1781 ENDDO
1782 DEALLOCATE(min_dist)
1783 DEALLOCATE(coords)
1784 DEALLOCATE(index_sort,isort)
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795 nedges = 0
1796 nedges_8 = 0
1797 DO i=1,nelem
1799 nedges = nedges + taille_local
1800 nedges_8 = nedges_8 + taille_local
1801 ENDDO
1802 nedges = nedges/2
1803 nedges_8 = nedges_8 / 2
1804 ENDIF
1805
1806 IF(ALLOCATED(tagelem)) DEALLOCATE(tagelem)
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818 bool_rbody=.false.
1819
1820 IF(iddlevel/=0) THEN
1821 numel = numels+numelq+numelc+numelt+numelp+numelr
1822 . + numeltg+numelx+numsph+numelig3d
1823
1824
1825 k = 0
1826 DO n = 1, nrbykin
1827 nsn = npby(2,n)
1828
1829 IF(nsn<40) THEN
1830 m = npby(1,n)
1831
1832
1833 number_of_element_rbody = 0
1834
1835
1836 DO j=1,nsn
1837 i = lpby(j+k)
1838 DO ijk = adsky(i),adsky(i+1)-1
1839 number_of_element_rbody = number_of_element_rbody + 1
1840 ENDDO
1841 ENDDO
1842
1843
1844 DO ijk = adsky(m),adsky(m+1)-1
1845 number_of_element_rbody = number_of_element_rbody + 1
1846 ENDDO
1847
1848 ALLOCATE( list_element_rbody(number_of_element_rbody) )
1849
1850
1851 number_of_element_rbody = 0
1852
1853
1854 DO j=1,nsn
1855 i = lpby(j+k)
1856 DO ijk = adsky(i),adsky(i+1)-1
1857 cc2 = ijk
1858 numg2 = abs(cne(cc2))
1859 number_of_element_rbody = number_of_element_rbody + 1
1860 list_element_rbody( number_of_element_rbody
1861 bool_rbody=.true.
1862 ENDDO
1863 ENDDO
1864
1865
1866 DO ijk = adsky(m),adsky(m+1)-1
1867 cc2 = ijk
1868 numg2 = abs(cne(cc2))
1869 number_of_element_rbody = number_of_element_rbody + 1
1870 list_element_rbody( number_of_element_rbody ) = numg2
1871 ENDDO
1872
1873
1874 IF(number_of_element_rbody>0)
1876 DEALLOCATE( list_element_rbody )
1877
1878 ENDIF
1879 k = k + nsn
1880 ENDDO
1881
1882
1883 ENDIF
1884
1885
1886 IF (nedges>0 .AND. nspmd > 1) THEN
1887
1888 ALLOCATE(xadj(nelem+1),stat=ierr1)
1889
1890 xadj(1:nelem+1)=0
1891
1892 DEALLOCATE(cne)
1893
1894 nedges = 0
1895 DO i=1,nelem
1897 nedges = nedges + taille_local
1898 ENDDO
1899 nedges = nedges/2
1900
1901 ALLOCATE(adjncy(2*nedges),stat=ierr1)
1902
1903 xadj(1) = 1
1904 DO i=1,nelem
1906 xadj(i+1) = xadj(i) + taille_local
1907 IF(taille_local>0) THEN
1909 ENDIF
1910 ENDDO
1911! deallocation de
iddconnect % PDOM et % IENTRYDOM
1914
1915
1916 IF(ALLOCATED(colors)) DEALLOCATE(colors)
1917 IF(ALLOCATED(roots)) DEALLOCATE(roots)
1918 ALLOCATE(colors(nelem+1),stat=ierr1)
1919 ALLOCATE(roots(nelem),stat=ierr1)
1920 CALL dd_bfs(xadj,adjncy,nelem,nedges,nconnx,colors,roots)
1921 IF(nconnx > 1) THEN
1922 WRITE(iout,'(A,I8)')
1923 . ' NUMBER OF DISCONNECTED COMPONENTS FIXED FOR DOMAIN DECOMP:'
1924 . ,nconnx
1925
1926 ALLOCATE(xadj_old(nelem+1),stat=ierr1)
1927 ALLOCATE(adjncy_old(2*nedges),stat=ierr1)
1928 xadj_old(1:nelem+1)=xadj(1:nelem+1)
1929 adjncy_old(1:2*nedges)=adjncy(1:2*nedges)
1930 newedge = nedges+nconnx-1
1931 DEALLOCATE(adjncy)
1932 ALLOCATE(adjncy
1933
1934 inc=0
1935 DO i = 1, nconnx
1936 curr=roots(i)
1937 i1=xadj(curr)
1938 i1old=xadj_old(curr)
1939 i2old=xadj_old(curr+1)-1
1940 IF(i>1)THEN
1941
1942 prev=roots(i-1)
1943 IF(i1old <= 2*nedges) THEN
1944 DO WHILE ((i1old <= i2old) .AND.
1945 + (adjncy_old(i1old) < prev))
1946 adjncy(i1) = adjncy_old(i1old)
1947 i1 = i1+1
1948 i1old=i1old+1
1949 IF(i1old > 2*nedges) EXIT
1950 END DO
1951 ENDIF
1952 adjncy(i1) = prev
1953 i1=i1+1
1954 inc=inc+1
1955 END IF
1956 IF(i<nconnx)THEN
1957
1958 next=roots(i+1)
1959 IF(i1old <= 2*nedges) THEN
1960 DO WHILE ((i1old <= i2old) .AND.
1961 + (adjncy_old(i1old) < next))
1962 adjncy(i1) = adjncy_old(i1old)
1963 i1 = i1+1
1964 i1old=i1old+1
1965 IF(i1old > 2*nedges) EXIT
1966 END DO
1967 ENDIF
1968 adjncy(i1) = next
1969 i1=i1+1
1970 inc=inc+1
1971 ELSE
1972 next = nelem+1
1973 END IF
1974
1975 DO WHILE (i1old <= i2old)
1976 adjncy(i1) = adjncy_old(i1old)
1977 i1 = i1+1
1978 i1old=i1old+1
1979 END DO
1980
1981 n=curr+1
1982 DO WHILE (n /= next)
1983 xadj(n)=xadj(n)+inc
1984 i1=xadj(n)
1985 i1old=xadj_old(n)
1986 i2old=xadj_old(n+1)-1
1987 DO WHILE (i1old <= i2old)
1988 adjncy(i1) = adjncy_old(i1old
1989 i1 = i1+1
1990 i1old=i1old+1
1991 END DO
1992 n = n+1
1993 END DO
1994
1995 xadj(next)=xadj(next)+inc
1996 END DO
1997
1998 nedges=newedge
1999 DEALLOCATE(xadj_old,adjncy_old)
2000
2001 CALL dd_bfs(xadj,adjncy,nelem,nedges,nconnx,colors,roots)
2002 IF(nconnx > 1) THEN
2003 WRITE(iout,'(A,I8)')
2004 . '** INFO: REMAINING DISCONNECTED COMPONENTS:',nconnx
2005 END IF
2006 END IF
2007 DEALLOCATE(colors,roots)
2008
2009 WRITE(iout,*)' '
2010 WRITE(iout,fmt=fmw_a_i)
2011 . ' ELEMENT NUMBER = ',nelem
2012 WRITE(iout,fmt=fmw_a_i)' EDGES FOUND = ',nedges
2013 WRITE(iout,*)' '
2014
2015 iwflg=2
2016 nflag=1
2017
2018 options(1)=0
2019
2020 ierror = metis_setdefaultoptions(options)
2021
2022
2023
2024
2025
2026 options(18)=1
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051 IF(icfsi==0)THEN
2052 DO i = 1, nelem
2053
2054 iwd(ncond*(i-1)+icelem) = nint(wd(i)*100)
2055
2056 END DO
2057 ELSE
2058 DO i = 1, nelem
2059 IF(i<=numels)THEN
2060 mid = abs(ixs(1,i))
2061 pid = abs(ixs(10,i))
2062 jale_from_mat = nint(pm(72,mid))
2063 jale_from_prop = igeo(62,pid)
2064 jale =
max(jale_from_mat, jale_from_prop)
2065 mln = nint(pm(19,mid))
2066 IF(jale==0.AND.mln/=18)THEN
2067 iwd(ncond*(i-1)+icelem) = nint(wd(i)*100)
2068 iwd(ncond*(i-1)+icfsi) = 0
2069 ELSE
2070 iwd(ncond*(i-1)+icelem) = 0
2071 iwd(ncond*(i-1)+icfsi) = nint(wd(i)*100)
2072 END IF
2073 ELSE
2074
2075 iwd(ncond*(i-1)+icelem) = nint(wd(i)*100)
2076 END IF
2077
2078 END DO
2079 END IF
2080 IF(icdel>0)THEN
2081 DO i = 1, nelem
2082
2083 IF(wd(i)==0.0001)THEN
2084 iwd(ncond*(i-1)+icdel) = 1
2085 ELSE
2086 iwd(ncond*(i-1)+icdel) = 0
2087 END IF
2088
2089 END DO
2090 END IF
2091
2092
2093
2094 IF(ncluster > 0) THEN
2095 DO i = 1, ncluster
2096 cluster_typ = clusters(i)%TYPE
2097 offset_cluster = 0
2098 IF(cluster_typ==2.OR.cluster_typ==3) offset_cluster = numels+numelq+numelc+numelt+numelp
2099 DO j = 2, clusters(i)%NEL
2100 DO k =1, ncond
2101 iwd((clusters(i)%ELEM(1)-1) * ncond+k +offset_cluster) =
2102 . iwd((clusters(i)%ELEM(1)-1) * ncond+k +offset_cluster) +
2103 . iwd((clusters(i)%ELEM(j)-1) * ncond+k +offset_cluster)
2104 iwd((clusters(i)%ELEM(j)-1) * ncond+k +offset_cluster) = 0
2105 ENDDO
2106 END DO
2107 END DO
2108 ENDIF
2109
2110
2111
2112
2113
2114 DO i = 1, ncond
2115 1024 CONTINUE
2116 ws = zero
2117 DO j = 1, nelem
2118 ws = ws + iwd(ncond*(j-1)+i)
2119 END DO
2120 IF(ws>2*ep9)THEN
2121 WRITE(iout,'(A,I4)')
2122 . ' WEIGHT PRECISION DECREASED TO ENABLE CRITERION',i
2123 DO j = 1, nelem
2124 iwd(ncond*(j-1)+i) = iwd(ncond*(j-1)+i)/10
2125 END DO
2126 GO TO 1024
2127 END IF
2128 END DO
2129
2130
2131 ubvec(1:15) = 0
2132 ubvec(icelem) = 1.02
2133 IF(icints/=0) ubvec(icints) = 1.05
2134 IF(icintm/=0) ubvec(icintm) = 1.05
2135 IF(icint2/=0) ubvec(icint2) = 1.05
2136 IF(icddl/=0) ubvec(icddl) = 1.02
2137 IF(icsol/=0) ubvec(icsol) = 1.05
2138 IF(icfsi/=0) ubvec(icfsi) = 1.02
2139 IF(icdel/=0) ubvec(icdel) = 1.10
2140 IF(iccand/=0) ubvec(iccand) = 1.10
2141 IF(ickin/=0) ubvec(ickin) = 1.10
2142 IF(icr2r/=0) ubvec(icr2r) = 1.30
2143 IF(icnod_sms/=0) ubvec(icnod_sms) = 1.05
2144
2145
2146
2147 1999 CONTINUE
2148 IF(dectyp==3.OR.dectyp==5)THEN
2149
2150
2152 1 nelem,ncond,xadj,adjncy,
2153 2 iwd,nnode,
2154 3 ubvec,options,nec,cep)
2155 idb_metis = 0
2156
2157 IF(idb_metis == 1) THEN
2158
2159 it=0
2160 WRITE(chlevel,'(I1)')iddlevel
2161
2162 OPEN(99,file="input.graph"//chlevel,form='FORMATTED',recl=8192)
2163 write(99,*) nelem,nedges,"010",ncond
2164 do i = 1, nelem
2165 write(99,*)iwd(ncond*(i-1)+1:ncond*(i-1)+ncond),
2166 + adjncy(xadj(i):xadj(i+1)-1)
2167 it = it + xadj(i+1)-xadj(i)
2168 end do
2169 print *,'writing graph with check:',it,'/',nedges*2
2170 CLOSE(99)
2171 END IF
2172.OR. ELSEIF(DECTYP==4DECTYP==6)THEN
2173
2174 IERR1 = Wrap_METIS_PartGraphRecursive(
2175 1 NELEM,NCOND,XADJ,ADJNCY,
2176 2 IWD,NNODE,
2177 3 UBVEC,OPTIONS,NEC,CEP)
2178 END IF
2179 CALL STAT_DOMDEC(
2180 1 WIS ,WI2 ,WFSI ,WDEL ,WDDL ,
2181 2 WCAND ,WSOL ,WR2R ,WKIN ,IWD ,
2182 3 NCOND ,ICELEM ,ICINTS ,ICINT2 ,ICCAND ,
2183 4 ICDDL ,ICSOL ,ICFSI ,ICDEL ,ICR2R ,
2184 5 ICKIN ,AVERAGE ,DEVIATION ,DMAX ,DMIN ,
2185 6 CEP ,NELEM ,W ,ICINTM ,WIM ,
2186 7 NCRITMAX ,WNOD_SMS,ICNOD_SMS)
2187
2188
2189.AND. IF(ICFSI > 0 ICFSI < ICELEM) THEN
2190! the order in DMIN,DMAX is independent of the order of constraints
2191 MAIN_TARGET = 7
2192 ELSE
2193 MAIN_TARGET = 1
2194 ENDIF
2195
2196
2197
2198.OR..AND..OR. IF( ( MAIN_TARGET == 7 IDDLEVEL==1) (DECTYP==3 DECTYP==5) )THEN
2199 IF(DMIN(MAIN_TARGET) < AVERAGE(MAIN_TARGET)*0.90 )THEN
2200 WRITE(IOUT,'(a)')
2201 . '** info: decomposition unbalancing detected'
2202 WRITE(iout,'(A,I5,A,2X,I8,2X,I8,2X,I8)')
2203 . ' DOMAINS:',nspmd,' MIN/MAX/AVERAGE:',
2204 . nint(dmin(main_target)),nint(dmax(main_target)),nint(average(main_target))
2205
2206 WRITE(iout,'(A)')' REVERT TO RECURSIVE BISSECTION'
2207
2208 dectyp=dectyp+1
2209
2210 IF(fvm_domdec) THEN
2211 ubvec(icelem) = 1.01
2212 IF(icints/=0) ubvec(icints) = 1.02
2213 IF(icintm/=0) ubvec(icintm) = 1.02
2214 IF(icint2/=0) ubvec(icint2) = 1.02
2215 IF(icddl/=0) ubvec(icddl) = 1.05
2216 IF(icsol/=0) ubvec(icsol) = 1.05
2217 IF(icfsi/=0) ubvec(icfsi) = 1.05
2218 IF(icdel/=0) ubvec(icdel) = 1.05
2219 IF(iccand/=0) ubvec(iccand) = 1.05
2220 IF(ickin/=0) ubvec(ickin) = 1.05
2221 IF(icr2r/=0) ubvec(icr2r) = 1.30
2222 IF(icnod_sms/=0) ubvec(icnod_sms) = 1.0
2223 ELSE
2224 ubvec(icelem) = 1.001
2225 IF(icints/=0) ubvec(icints) = 1.02
2226 IF(icintm/=0) ubvec(icintm) = 1.02
2227 IF(icint2/=0) ubvec(icint2) = 1.02
2228 IF(icddl/=0) ubvec(icddl) = 1.01
2229 IF(icsol/=0) ubvec(icsol) = 1.03
2230 IF(icfsi/=0) ubvec(icfsi) = 1.01
2231 IF(icdel/=0) ubvec(icdel) = 1.03
2232 IF(iccand/=0) ubvec(iccand) = 1.03
2233 IF(ickin/=0) ubvec(ickin) = 1.03
2234 IF(icr2r/=0) ubvec(icr2r) = 1.30
2235 IF(icnod_sms/=0) ubvec(icnod_sms) = 1.0
2236 ENDIF
2237 GOTO 1999
2238 END IF
2239 END IF
2240
2241
2242
2243 max_try = 3
2244 wd_max_factor = 2
2245 ALLOCATE(iwd_copy(ncond*nelem))
2246 ALLOCATE(wd_copy(nelem))
2247 IF((dectyp==4 .OR. dectyp==6) .AND. iddlevel==1 .AND. nelem>10*nspmd )THEN
2248
2249 IF(icdel /= 0 ) THEN
2250 IF(elemd > 9*nelem/10 .AND. dmin(main_target) < average(main_target)*0.80 ) THEN
2251
2252
2253 DO i= 1, nelem
2254 wght=iwd(ncond*(i-1)+1)
2255 iwd(ncond*(i-1)+1) = iwd(ncond*(i-1)+icdel)
2256 iwd(ncond*(i-1)+icdel)=wght
2257 ENDDO
2258 ENDIF
2259 ENDIF
2260
2261 ncond2=ncond
2262 dd_fvmbag_try = 0
2263 wd_max0 = wd_max
2264 wd_copy(1:nelem) = wd(1:nelem)
2265 iwd_copy(1:ncond * nelem) = iwd(1:ncond*nelem)
2266
2267 dd_unbalanced = (dmin(main_target) < average(main_target)*0.80)
2268 IF(fvm_domdec) THEN
2269 dd_unbalanced = dd_unbalanced .OR. (dmax(main_target) > average(main_target)*1.1)
2270 wd_max0 = 0.0
2271 DO n = 1, nvolu
2272 IF(fvm_elem(n) /= 0) THEN
2273 wd_max0=
max(wd_max0,dble(wd(fvm_elem(n))))
2274 ENDIF
2275 ENDDO
2276 wd_max0 =
min(wd_max,wd_max0)
2277 wd_max = wd_max0
2278 ENDIF
2279
2280 DO WHILE(dd_unbalanced .AND. ncond2 > 1 )
2281
2282 WRITE(iout,'(A)')
2283 . '** INFO: DECOMPOSITION UNBALANCING DETECTED'
2284 WRITE(iout,'(A,I5,A,2X,I8,2X,I8,2X,I8)')
2285 . ' DOMAINS:',nspmd,' MIN/MAX/AVERAGE:',
2286 . nint(dmin(main_target)),nint(dmax(main_target)),nint(average(main_target))
2287
2288
2289
2290
2291
2292
2293 nb_fvmbag_trim = 0
2294 IF(fvm_domdec .AND. dd_fvmbag_try <= max_try) THEN
2295 wd_max = wd_max / (0.1d0 * wd_max_factor)
2296 DO n = 1, nvolu
2297 IF(fvm_elem(n) /= 0) THEN
2298 IF(wd(fvm_elem(n)) > wd_max) THEN
2299 wd(fvm_elem(n)) = wd_max
2300 iwd(ncond*(fvm_elem(n)-1)+icelem) = nint(wd_max*100)
2301 nb_fvmbag_trim = nb_fvmbag_trim + 1
2302 ENDIF
2303 ENDIF
2304 ENDDO
2305 ENDIF
2306 IF(nb_fvmbag_trim > 0) THEN
2307
2308
2309 dd_fvmbag_try = dd_fvmbag_try + 1
2310 ELSE
2311
2312
2313 ncond2= ncond2 - 1
2314 dd_fvmbag_try = 0
2315 max_try = max_try + 1
2316 wd_max = wd_max0
2317 wd(1:nelem) = wd_copy(1:nelem)
2318 iwd(1:ncond*nelem) = iwd_copy(1:ncond*nelem)
2319 ENDIF
2320
2321
2322
2323
2324 WRITE(iout,'(A,I5)') 'RETRY KWAY WITH NCOND =',ncond2
2325
2326 ALLOCATE(iwd2(ncond2*nelem))
2327 DO i= 1, nelem
2328 DO j = 1, ncond2
2329 iwd2( ncond2*(i-1) +j ) = iwd( ncond*(i-1) + j)
2330 ENDDO
2331 ENDDO
2332
2334 1 nelem,ncond2,xadj,adjncy,
2335 2 iwd2,nnode,
2336 3 ubvec,options,nec,cep)
2338 1 wis ,wi2 ,wfsi ,wdel ,wddl ,
2339 2 wcand ,wsol ,wr2r ,wkin ,iwd ,
2340 3 ncond ,icelem ,icints ,icint2 ,iccand ,
2341 4 icddl ,icsol ,icfsi ,icdel ,icr2r ,
2342 5 ickin ,average ,deviation ,dmax ,dmin ,
2343 6 cep ,nelem ,w ,icintm ,wim ,
2344 7 ncritmax ,wnod_sms,icnod_sms)
2345
2346
2347 dd_unbalanced = (dmin(main_target) < average(main_target)*0.80)
2348 IF(fvm_domdec) THEN
2349 dd_unbalanced = dd_unbalanced .OR. (dmax(main_target) > average(main_target)*1.1)
2350 ENDIF
2351
2352
2353 IF(dd_unbalanced)THEN
2354
2355 WRITE(iout,'(A)')
2356 . '** INFO: DECOMPOSITION UNBALANCING DETECTED'
2357 WRITE(iout,'(A,I5,A,2X,I8,2X,I8,2X,I8)')
2358 . ' DOMAINS:',nspmd,' MIN/MAX/AVERAGE:',
2359 . nint(dmin(main_target)),nint(dmax(main_target)),nint(average(main_target))
2360
2361
2362
2364 1 nelem,ncond2,xadj,adjncy,
2365 2 iwd2,nnode,
2366 3 ubvec,options,nec,cep)
2368 1 wis ,wi2 ,wfsi ,wdel ,wddl ,
2369 2 wcand ,wsol ,wr2r ,wkin ,iwd ,
2370 3 ncond ,icelem ,icints ,icint2 ,iccand ,
2371 4 icddl ,icsol ,icfsi ,icdel ,icr2r ,
2372 5 ickin ,average ,deviation ,dmax ,dmin ,
2373 6 cep ,nelem ,w ,icintm ,wim ,
2374 7 ncritmax ,wnod_sms,icnod_sms)
2375
2376 ENDIF
2377 DEALLOCATE(iwd2)
2378
2379 dd_unbalanced = (dmin(main_target) < average(main_target)*0.80)
2380 IF(fvm_domdec) THEN
2381 dd_unbalanced = dd_unbalanced .OR. (dmax(main_target) > average(main_target)*1.
2382 ENDIF
2383
2384 ENDDO
2385 ENDIF
2386 DEALLOCATE(iwd_copy)
2387 DEALLOCATE(wd_copy)
2388
2389
2390
2391
2393
2394
2396
2397
2398 IF (ncluster > 0) THEN
2399 DO i = 1, ncluster
2400 cluster_typ = clusters(i)%TYPE
2401 offset_cluster = 0
2402 IF(cluster_typ==2.OR.cluster_typ==3) offset_cluster = numels+numelq+numelc+numelt+numelp
2403 cepcluster=cep( clusters(i)%ELEM(1)+offset_cluster )
2404 DO j = 2,clusters(i)%NEL
2405 cep( clusters(i)%ELEM(j)+offset_cluster ) = cepcluster
2406 END DO
2407 END DO
2408 END IF
2409
2410
2411
2412
2413 IF(nvolu > 0 .AND. iddlevel==1 .AND. fvm_domdec) THEN
2414
2415 offc = numels+numelq
2416 offtg =numels+numelq+ numelc+numelt+numelp+numelr
2417 nn_l = 0
2418 cepcluster = 1
2419 nfvmbag = 0
2420 DO n = 1, nvolu
2421 ityp = t_monvol(n)%TYPE
2422 nn = t_monvol(n)%NNS
2423
2424
2425 IF(ityp == 6 .OR. ityp == 8) nfvmbag = nfvmbag + 1
2426
2427 IF(nn > 0 .AND. (ityp == 6 .OR. ityp == 8)) THEN
2428 cepcluster = cep(fvm_elem(n))
2429 fvmain(nfvmbag) = cepcluster
2430 ENDIF
2431 ENDDO
2432 ENDIF
2433
2434
2435 DEALLOCATE(xadj,adjncy)
2436
2437
2438 DO i = 1, nelem
2439 cep(i) = cep(i)-1
2440 END DO
2441
2442
2443
2444 DO i=1,numelq
2445 IF(ebcs_tag_cell_spmd(i)==1)THEN
2446 cep(numels+i)=0
2447 ENDIF
2448 ENDDO
2449 DO i=1,numeltg
2450 IF(ebcs_tag_cell_spmd(numelq+i)==1)THEN
2451 cep(numels+numelq+numelc+numelt+numelp+numelr+i)=0
2452 ENDIF
2453 ENDDO
2454
2455 DO i=1,numels
2456 IF(ebcs_tag_cell_spmd(numelq+numeltg+i)==1)THEN
2457 cep(i)=0
2458 ENDIF
2459 ENDDO
2460
2461
2462 IF(dectyp==5.OR.dectyp==6)THEN
2463 IF(ddnod_sms==0)THEN
2464 WRITE(iout,1000)
2465 ELSE
2466 WRITE(iout,1100)
2467 END IF
2468 ELSEIF(icfsi==0) THEN
2469 IF(icsol==0.AND.icdel==0)THEN
2470 WRITE(iout,2000)
2471 ELSEIF(icsol/=0.AND.icdel==0)THEN
2472 WRITE(iout,3000)
2473 ELSEIF(icsol/=0.AND.icdel/=0)THEN
2474 WRITE(iout,4000)
2475 ELSEIF(icsol==0.AND.icdel/=0)THEN
2476 WRITE(iout,5000)
2477 END IF
2478 ELSEIF(icfsi/=0)THEN
2479 IF(icdel==0)THEN
2480 WRITE(iout,6000)
2481 ELSE
2482 WRITE(iout,7000)
2483 END IF
2484 END IF
2485 DO i = 1, nspmd
2486 IF(dectyp==5.OR.dectyp==6)THEN
2487 IF(ddnod_sms==0)THEN
2488 WRITE(iout,'(I4,8F15.0)')
2489 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wddl(i)
2490 ELSE
2491 WRITE(iout,'(I4,8F15.0)')
2492 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wddl(i),wnod_sms(i)
2493 END IF
2494 ELSEIF(icfsi==0)THEN
2495 IF(icsol==0.AND.icdel==0)THEN
2496 WRITE(iout,'(I4,8F15.0)')
2497 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wkin(i)
2498 ELSEIF(icsol/=0.AND.icdel==0)THEN
2499 WRITE(iout,'(I4,8F15.0)')
2500 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wsol(i),wkin(i)
2501 ELSEIF(icsol/=0.AND.icdel/=0)THEN
2502 WRITE(iout,'(I4,8F15.0)')
2503 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wsol(i),wdel(i),wkin(i)
2504 ELSEIF(icsol==0.AND.icdel/=0)THEN
2505 WRITE(iout,'(I4,8F15.0)')
2506 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wdel(i),wkin(i)
2507 ENDIF
2508 ELSEIF(icfsi/=0.AND.icdel==0)THEN
2509 WRITE(iout,'(I4,8F15.0)')
2510 . i,w(i),wis(i),wim(i),wcand(i),wi2
2511 ELSEIF(icfsi/=0.AND.icdel/=0)THEN
2512 WRITE(iout,'(I4,8F15.0)')
2513 . i,w(i),wis(i),wim(i),wcand(i),wi2(i),wfsi(i),wdel(i)
2514 ENDIF
2515 ENDDO
2516 WRITE(iout,*)' '
2517 DEALLOCATE(iwd)
2518 WRITE(iout,*)'statistics on decomposition weights'
2519 WRITE(IOUT,*)'-----------------------------------'
2520 WRITE(IOUT,8000)
2521 WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2522 . ' elements ',
2523 . NINT(DMIN(1)),NINT(DMAX(1)),
2524 . NINT(AVERAGE(1)),NINT(DEVIATION(1))
2525 IF(ICINTS/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2526 . ' seco. nodes',
2527 . NINT(DMIN(2)),NINT(DMAX(2)),
2528 . NINT(AVERAGE(2)),NINT(DEVIATION(2))
2529 IF(ICINTM/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2531 . NINT(DMIN(11)),NINT(DMAX(11)),
2532 . NINT(AVERAGE(11)),NINT(DEVIATION(11))
2533 IF(ICCAND/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2534 . ' cont. cand.',
2535 . NINT(DMIN(4)),NINT(DMAX(4)),
2536 . NINT(AVERAGE(4)),NINT(DEVIATION(4))
2537 IF(ICINT2/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2538 . ' int. type2 ',
2539 . NINT(DMIN(3)),NINT(DMAX(3)),
2540 . NINT(AVERAGE(3)),NINT(DEVIATION(3))
2541 IF(ICSOL/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2542 . ' solid bar. ',
2543 . NINT(DMIN(6)),NINT(DMAX(6)),
2544 . NINT(AVERAGE(6)),NINT(DEVIATION(6))
2545 IF(ICDEL/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2546 . ' elt. del. ',
2547 . NINT(DMIN(8)),NINT(DMAX(8)),
2548 . NINT(AVERAGE(8)),NINT(DEVIATION(8))
2549 IF(ICKIN/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2550 . ' kin. cond. ',
2551 . NINT(DMIN(10)),NINT(DMAX(10)),
2552 . NINT(AVERAGE(10)),NINT(DEVIATION(10))
2553 IF(ICDDL/=0)THEN
2554 IF(ISMS==0)THEN ! Implicit
2555 WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2556 . ' dof(impl) ',
2557 . NINT(DMIN(5)),NINT(DMAX(5)),
2558 . NINT(AVERAGE(5)),NINT(DEVIATION(5))
2559 ELSE ! AMS
2560 WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2561 . ' ams matrix ',
2562 . NINT(DMIN(5)),NINT(DMAX(5)),
2563 . NINT(AVERAGE(5)),NINT(DEVIATION(5))
2564 END IF
2565 END IF
2566 IF(ICFSI/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2567 . ' ale elts. ',
2568 . NINT(DMIN(7)),NINT(DMAX(7)),
2569 . NINT(AVERAGE(7)),NINT(DEVIATION(7))
2570 IF(ICR2R/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2571 . ' r2r ',
2572 . NINT(DMIN(9)),NINT(DMAX(9)),
2573 . NINT(AVERAGE(9)),NINT(DEVIATION(9))
2574 IF(ICNOD_SMS/=0) WRITE(IOUT,'(a,i8,2x,i8,2x,i8,4x,i8)')
2575 . ' ams nodes ',
2576 . NINT(DMIN(12)),NINT(DMAX(12)),
2577 . NINT(AVERAGE(12)),NINT(DEVIATION(12))
2578 ELSE
2579
2580 DEALLOCATE(CNE)
2581 DEALLOCATE(IDDCONNECT%PDOM)
2582 DEALLOCATE(IDDCONNECT%IENTRYDOM)
2583 DO I = 1, NELEM
2584 CEP(I) = 0
2585 ENDDO
2586 ENDIF
2587 DEALLOCATE(IWKIN)
2588
2589 1000 FORMAT('#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.',
2590 . ' INT2 W. DOF W.')
2591 1100 FORMAT('#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.',
2592 . ' INT2 W. DOF W. AMS CONT ELT W')
2593 2000 FORMAT('#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.'
2594 . ' INT2 W. KIN COND W.')
2595 3000 FORMAT('#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.',
2596 . ' INT2 W. SOL W. KIN COND W.')
2597 4000 FORMAT('#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.',
2598 . ' INT2 W. SOL W. ELT DEL W.',
2599 . ' KIN COND W.')
2600 5000 FORMAT('#PROC ELEMENT W. SECND NOD W. MAST NOD W. CONT ELT W.',
2601 . ' INT2 W. ELT DEL W. KIN COND W.'
2602 6000 FORMAT('#PROC ELT LAG W. SECND NOD W. MAST NOD W. CONT ELT W.',
2603 . ' int2 w. elt ale w.')
2604 7000 FORMAT('#PROC ELT LAG W. SECND NOD W. MAST NOD W. CONT ELT W.',
2605 . ' INT2 W. ELT ALE W. ELT DEL W.')
2606 8000 FORMAT(' METRIC MINIMUM MAXIMUM AVERAGE',
2607 . ' STANDARD DEVIATION')
2608
2609 RETURN
void c_enforce_constraints(int *cep)
void c_enforce_constraints_rbody(int *cep, int *nspmd, int *nrby)
void c_prevent_decomposition_rbody(int *rbodysize, int *elements)
subroutine iddconnectplus(n, p, numel)
int wrap_metis_partgraphkway(int *NELEM, int *NCOND, int *XADJ, int *ADJNCY, int *IWD, int *NNODE, float *UBVEC, int *OPTIONS, int *NEC, int *CEP)
int wrap_metis_partgraphrecursive(int *NELEM, int *NCOND, int *XADJ, int *ADJNCY, int *IWD, int *NNODE, float *UBVEC, int *OPTIONS, int *NEC, int *CEP)
subroutine dd_bfs(xadj, adjncy, nelem, nedges, nconnx, colors, roots)
subroutine find_nodes(elemn0, elemnodes, tagelem, ixs, ixs10, ixq, ixc, ixt, ixp, ixr, ixtg, kxx, ixx, kxig3d, ixig3d, geo, offelem, nelmin)
subroutine fvbag_vertex(ixc, ixtg, nelem, wd, wd_max, fvm_elem, fvm_domdec, itab, igrsurf, t_monvol)
subroutine stat_domdec(wis, wi2, wfsi, wdel, wddl, wcand, wsol, wr2r, wkin, iwd, ncond, icelem, icints, icint2, iccand, icddl, icsol, icfsi, icdel, icr2r, ickin, average, deviation, dmax, dmin, cep, nelem, w, icintm, wim, ncritmax, wnod_sms, icnod_sms)
subroutine initwg(wd, pm, geo, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, kxx, igeo, isolnod, idarch, numels, numelq, numelc, numelt, numelp, numelr, numeltg, numelx, ipm, bufmat, nummat, numgeo, taille, poin_ump, tab_ump, poin_ump_old, tab_ump_old, cputime_mp_old, tabmp_l, ipart, ipartc, ipartg, iparts, npart, poin_part_shell, poin_part_tri, poin_part_sol, mid_pid_shell, mid_pid_tri, mid_pid_sol, iddlevel, mat_param)
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
logical function consider_edge(connectivity, nb_nodes_mini, nelem, e1, e2)
subroutine sort_descending(array)
integer, parameter max_nb_nodes_per_elt
type(my_connectdom) iddconnect
integer, dimension(:), allocatable tag_elcf
integer, dimension(:), allocatable tag_elsf
int main(int argc, char *argv[])
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)