22#if defined(metis) || defined(parmetis) || defined(metis4) || defined(parmetis3)
23#if defined(metis4) || defined(parmetis3)
24 SUBROUTINE mumps_metis_nodewnd_mixedto32( NCMP, IPE8, IW, FRERE,
26 & OPTIONS_METIS, LOPTIONS_METIS, IKEEP2, IKEEP1, INFO,
29 INTEGER :: INFO(2), LOPTIONS_METIS
30 INTEGER :: NCMP, NUMFLAG, IKEEP1(:), IKEEP2(:), FRERE(:)
31 INTEGER :: OPTIONS_METIS(LOPTIONS_METIS), IW(:)
32 INTEGER,
INTENT(IN) :: LP
33 LOGICAL,
INTENT(IN) :: LPOK
35 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: IPE
37 IF (ipe8(ncmp+1) .GE. int(huge(iw),8))
THEN
40 & ipe8(ncmp+1), info(2))
43 ALLOCATE(ipe(ncmp+1), stat=allocok)
47 IF (lpok)
WRITE(lp,
'(A)')
48 &
"ERROR memory allocation in METIS_NODEWND_MIXEDto32"
52 CALL metis_nodewnd(ncmp, ipe, iw(1),frere(1),
53 & numflag, options_metis,
54 & ikeep2(1), ikeep1(1) )
56 END SUBROUTINE mumps_metis_nodewnd_mixedto32
57 SUBROUTINE mumps_metis_nodend_mixedto32( NCMP, IPE8, IW, NUMFLAG,
58 & OPTIONS_METIS, LOPTIONS_METIS, IKEEP2, IKEEP1, INFO,
61 INTEGER :: INFO(2), LOPTIONS_METIS
62 INTEGER :: NCMP, NUMFLAG, IKEEP1(:), IKEEP2(:), IW(:)
63 INTEGER :: OPTIONS_METIS(LOPTIONS_METIS)
65 INTEGER,
INTENT(IN) :: LP
66 LOGICAL,
INTENT(IN) :: LPOK
67 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: IPE
69 IF (ipe8(ncmp+1) .GE. int(huge(iw),8))
THEN
72 & ipe8(ncmp+1), info(2))
75 ALLOCATE(ipe(ncmp+1), stat=allocok)
79 IF (lpok)
WRITE(lp,
'(A)')
80 &
"ERROR memory allocation in METIS_NODEND_MIXEDto32"
84 CALL metis_nodend(ncmp, ipe, iw(1),
85 & numflag, options_metis,
86 & ikeep2(1), ikeep1(1) )
89 END SUBROUTINE mumps_metis_nodend_mixedto32
91 SUBROUTINE mumps_metis_nodend_mixedto32( NCMP, IPE8, IW, FRERE,
92 & OPTIONS_METIS, LOPTIONS_METIS, IKEEP2, IKEEP1, INFO,
95 INTEGER :: INFO(2), LOPTIONS_METIS
96 INTEGER :: NCMP, IKEEP1(:), IKEEP2(:), (:), IW(:)
97 INTEGER :: OPTIONS_METIS(LOPTIONS_METIS)
99 INTEGER,
INTENT(IN) :: LP
100 LOGICAL,
INTENT(IN) :: LPOK
101 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: IPE
103 IF (ipe8(ncmp+1) .GE. int(huge(iw),8))
THEN
106 & ipe8(ncmp+1), info(2))
109 ALLOCATE(ipe(ncmp+1), stat=allocok)
110 IF (allocok > 0)
THEN
113 IF (lpok)
WRITE(lp,
'(A)')
114 &
"ERROR memory allocation in METIS_NODEND_MIXEDto32"
118 CALL metis_nodend( ncmp, ipe, iw(1), frere(1),
119 & options_metis, ikeep2(1), ikeep1(1))
122 END SUBROUTINE mumps_metis_nodend_mixedto32
125#if defined(metis) || defined(parmetis) || defined(metis4) || defined(parmetis3)
126#if defined(metis4) || defined(parmetis3)
127 SUBROUTINE mumps_metis_nodewnd_mixedto64( NCMP, IPE8, IW, FRERE,
129 & OPTIONS_METIS, LOPTIONS_METIS, IKEEP2, IKEEP1, INFO,
130 & LP, LPOK, KEEP10, INPLACE64_GRAPH_COPY )
132 INTEGER :: INFO(2), LOPTIONS_METIS
133 INTEGER :: NCMP, NUMFLAG, IKEEP1(:), IKEEP2(:), FRERE(:)
134 INTEGER :: OPTIONS_METIS(LOPTIONS_METIS), IW(:)
135 INTEGER(8) :: IPE8(:)
136 INTEGER,
INTENT(IN) :: LP, KEEP10
137 LOGICAL,
INTENT(IN) :: LPOK
138 LOGICAL,
INTENT(IN) :: INPLACE64_GRAPH_COPY
139 INTEGER(8),
ALLOCATABLE,
DIMENSION(:) :: IW8, FRERE8,
142 IF (keep10.EQ.1)
THEN
143 CALL metis_nodewnd(ncmp, ipe8(1), iw(1),frere,
144 & numflag, options_metis,
145 & ikeep2(1), ikeep1(1) )
147 IF (inplace64_graph_copy)
THEN
150 ALLOCATE(iw8(ipe8(ncmp+1)-1_8),
152 IF (allocok > 0)
THEN
155 & int(keep10,8)* ( ipe8(ncmp+1)-1_8 )
158 IF (lpok)
WRITE(lp,
'(A)')
159 &
"ERROR memory allocation in METIS_NODEWND_MIXEDto64"
164 ALLOCATE(frere8(ncmp),
165 & ikeep18(ncmp), ikeep28(ncmp), stat=allocok)
166 IF (allocok > 0)
THEN
169 & int(keep10,8)* ( 3_8*int(ncmp,8) )
172 IF (lpok)
WRITE(lp,
'(A)')
173 &
"ERROR memory allocation in METIS_NODEWND_MIXEDto64"
177 IF (inplace64_graph_copy)
THEN
178 CALL metis_nodewnd(ncmp, ipe8(1), iw(1),frere8,
179 & numflag, options_metis,
180 & ikeep2(1), ikeep1(1) )
182 CALL metis_nodewnd(ncmp, ipe8(1), iw8,frere8,
183 & numflag, options_metis,
184 & ikeep2(1), ikeep1(1) )
188 IF (inplace64_graph_copy)
THEN
189 DEALLOCATE(frere8, ikeep18, ikeep28)
191 DEALLOCATE(iw8, frere8, ikeep18, ikeep28)
195 END SUBROUTINE mumps_metis_nodewnd_mixedto64
196 SUBROUTINE mumps_metis_nodend_mixedto64( NCMP, IPE8, IW, NUMFLAG,
197 & OPTIONS_METIS, LOPTIONS_METIS, IKEEP2, IKEEP1, INFO,
199 & LIW8, INPLACE64_GRAPH_COPY, INPLACE64_RESTORE_GRAPH
202 INTEGER :: INFO(2), LOPTIONS_METIS
203 INTEGER :: NCMP, NUMFLAG, IKEEP1(:), (:), IW(:)
204 INTEGER :: OPTIONS_METIS(LOPTIONS_METIS)
205 INTEGER(8) :: IPE8(:)
206 INTEGER,
INTENT(IN) :: LP, KEEP10
207 LOGICAL,
INTENT(IN) :: LPOK
209 LOGICAL,
INTENT(IN) :: INPLACE64_GRAPH_COPY,
210 & inplace64_restore_graph
211 INTEGER(8),
ALLOCATABLE,
DIMENSION(:) :: IW8,
214 IF (KEEP10.EQ.1) THEN
215 CALL metis_nodend(ncmp, ipe8(1), iw(1),
216 & numflag, options_metis,
217 & ikeep2(1), ikeep1(1) )
219 IF (inplace64_graph_copy)
THEN
222 ALLOCATE(iw8(ipe8(ncmp+1)-1_8), stat=allocok)
223 IF (allocok > 0)
THEN
226 & ( ipe8(ncmp+1)-1_8+2_8*int(ncmp,8) )
228 IF (lpok)
WRITE(lp,
'(A)')
229 &
"ERROR 1 memory allocation in METIS_METIS_NODEND_MIXEDto64"
234 ALLOCATE(ikeep18(ncmp), ikeep28(ncmp), stat=allocok)
235 IF (allocok > 0)
THEN
238 & 2_8*int(ncmp,8), info(2) )
239 IF (lpok)
WRITE(lp,
'(A)')
240 &
"ERROR 2 memory allocation in METIS_METIS_NODEND_MIXEDto64"
243 IF (inplace64_graph_copy)
THEN
244 CALL metis_nodend(ncmp, ipe8(1), iw(1),
245 & numflag, options_metis,
248 CALL metis_nodend(ncmp, ipe8(1), iw8,
249 & numflag, options_metis,
254 IF (inplace64_graph_copy)
THEN
255 IF (inplace64_restore_graph)
THEN
258 DEALLOCATE(ikeep18, ikeep28)
260 DEALLOCATE(iw8, ikeep18, ikeep28)
264 END SUBROUTINE mumps_metis_nodend_mixedto64
266 SUBROUTINE mumps_metis_nodend_mixedto64( NCMP, IPE8, IW, FRERE,
267 & OPTIONS_METIS, LOPTIONS_METIS, IKEEP2, IKEEP1, INFO,
269 & LIW8, INPLACE64_GRAPH_COPY, INPLACE64_RESTORE_GRAPH
273 INTEGER :: LOPTIONS_METIS
274 INTEGER :: NCMP, IKEEP1(:), (:), FRERE(:), IW(:)
275 INTEGER :: OPTIONS_METIS(LOPTIONS_METIS)
276 INTEGER(8) :: IPE8(:)
277 INTEGER,
INTENT(IN) :: LP, KEEP10
278 LOGICAL,
INTENT(IN) :: LPOK
280 LOGICAL,
INTENT(IN) :: INPLACE64_GRAPH_COPY,
281 & inplace64_restore_graph
282 INTEGER(8),
ALLOCATABLE,
DIMENSION(:) :: IW8, FRERE8,
286 IF (KEEP10.EQ.1) THEN
287 CALL METIS_NODEND( NCMP, IPE8(1), IW(1), FRERE(1),
288 & OPTIONS_METIS, IKEEP2(1), IKEEP1(1) )
290 IF (inplace64_graph_copy)
THEN
293 ALLOCATE(iw8(ipe8(ncmp+1)-1_8), stat=allocok)
294 IF (allocok > 0)
THEN
298 IF (lpok)
WRITE(lp,
'(A)')
299 &
"ERROR 1 memory allocation in METIS_METIS_NODEND_MIXEDto64"
304 ALLOCATE(frere8(ncmp),
305 & ikeep18(ncmp), ikeep28(ncmp),
306 & options_metis8(loptions_metis), stat=allocok)
307 IF (allocok > 0)
THEN
311 & (3_8*int(ncmp,8)+int(loptions_metis,8))
313 IF (lpok)
WRITE(lp,
'(A)')
314 &
"ERROR 2 memory allocation in METIS_NODEND_MIXEDto64"
320 IF (inplace64_graph_copy)
THEN
321 CALL metis_nodend( int(ncmp,8), ipe8(1), iw(1), frere8,
322 & options_metis8, ikeep28, ikeep18 )
324 CALL metis_nodend( int(ncmp,8), ipe8(1), iw8, frere8,
325 & options_metis8, ikeep28, ikeep18 )
329 IF (inplace64_graph_copy)
THEN
330 IF (inplace64_restore_graph)
THEN
333 DEALLOCATE(frere8, ikeep18, ikeep28, options_metis8)
335 DEALLOCATE(iw8, frere8, ikeep18, ikeep28, options_metis8)
339 END SUBROUTINE mumps_metis_nodend_mixedto64
342#if defined(scotch) || defined(ptscotch)
343 SUBROUTINE mumps_scotch_mixedto32(NCMP, LIW8, IPE8, PARENT, IWFR8,
344 & PTRAR, IW, IWL1, IKEEP1,
345 & IKEEP2, NCMPA, INFO, LP, LPOK,
346 & WEIGHTUSED, WEIGHTREQUESTED, SCOTCH_SYMBOLIC)
349 INTEGER,
INTENT(IN) :: NCMP
350 INTEGER(8),
INTENT(IN) :: LIW8
351 INTEGER,
INTENT(OUT) :: NCMPA
352 INTEGER(8),
INTENT(INOUT) :: IPE8(:)
353 INTEGER,
INTENT(OUT) :: PARENT(NCMP)
354 INTEGER(8),
INTENT(IN) :: IWFR8
355 INTEGER :: PTRAR(NCMP)
357 INTEGER :: IWL1(NCMP)
358 INTEGER,
INTENT(OUT) :: IKEEP1(:)
359 INTEGER,
INTENT(OUT) :: IKEEP2(:)
360 INTEGER,
INTENT(INOUT) :: INFO(2)
361 INTEGER,
INTENT(IN) :: LP
362 LOGICAL,
INTENT(IN) :: LPOK
363 INTEGER,
INTENT(OUT) :: WEIGHTUSED
364 INTEGER,
INTENT(IN) :: WEIGHTREQUESTED
365 LOGICAL,
INTENT(IN) :: SCOTCH_SYMBOLIC
366 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IPE
368 INTEGER :: PTHREAD_NUMBER, NOMP
369 IF (iwfr8 .GE. int(huge(iw),8))
THEN
374 ALLOCATE(ipe(ncmp+1), stat=allocok)
375 IF (allocok > 0)
THEN
376 IF (lpok)
WRITE(lp,
'(A)')
377 &
"ERROR memory allocation in MUMPS_SCOTCH_MIXEDto32"
385 IF (nomp .GT. 0)
THEN
386 CALL mumps_scotch_get_pthread_number (pthread_number)
387 CALL mumps_scotch_set_pthread_number (nomp)
389 IF (scotch_symbolic)
THEN
390 CALL mumps_scotch( ncmp, int(liw8), ipe, int(iwfr8),
391 & ptrar, iw(1), iwl1, ikeep1(1),
393 & weightused, weightrequested )
395 CALL mumps_scotch_ord ( ncmp, int(liw8), ipe, int(iwfr8),
396 & ptrar, iw(1), iwl1, ikeep1(1),
398 & weightused, weightrequested )
400 IF (nomp .GT. 0)
THEN
401 CALL mumps_scotch_set_pthread_number (pthread_number)
403 IF (scotch_symbolic)
THEN
404 parent(1:ncmp)=ipe(1:ncmp)
408 END SUBROUTINE mumps_scotch_mixedto32
409 SUBROUTINE mumps_scotch_mixedto64(
410 & NCMP, LIW8, IPE8, PARENT, IWFR8,
411 & PTRAR, IW, IWL1, IKEEP1,
412 & IKEEP2, NCMPA, INFO, LP, LPOK, KEEP10,
413 & INPLACE64_GRAPH_COPY,
414 & WEIGHTUSED, WEIGHTREQUESTED, SCOTCH_SYMBOLIC)
417 INTEGER,
INTENT(IN) :: NCMP
418 INTEGER(8),
INTENT(IN) :: LIW8
419 INTEGER,
INTENT(OUT) :: NCMPA
420 INTEGER(8),
INTENT(INOUT) :: IPE8(:)
421 INTEGER,
INTENT(OUT) :: PARENT(NCMP)
422 INTEGER(8),
INTENT(IN) :: IWFR8
423 INTEGER :: PTRAR(NCMP)
425 INTEGER :: IWL1(NCMP)
426 INTEGER,
INTENT(OUT) :: IKEEP1(:)
427 INTEGER,
INTENT(OUT) :: IKEEP2(:)
428 INTEGER,
INTENT(INOUT) :: INFO(2)
429 INTEGER,
INTENT(IN) :: LP
430 LOGICAL,
INTENT(IN) :: LPOK
431 INTEGER,
INTENT(IN) :: KEEP10
432 LOGICAL,
INTENT(IN) :: INPLACE64_GRAPH_COPY
433 INTEGER,
INTENT(OUT) :: WEIGHTUSED
434 INTEGER,
INTENT(IN) :: WEIGHTREQUESTED
435 LOGICAL,
INTENT(IN) :: SCOTCH_SYMBOLIC
436 INTEGER(8),
DIMENSION(:),
ALLOCATABLE ::
437 & PTRAR8, IW8, IWL18, IKEEP18,
440 INTEGER :: PTHREAD_NUMBER, NOMP
441 ALLOCATE( IPE8_TEMP(NCMP+1), stat=allocok )
442 IF (allocok > 0)
THEN
443 IF (lpok)
WRITE(lp,*)
444 &
"ERROR memory allocation in MUMPS_SCOTCH_MIXEDto64"
449 ipe8_temp(1:ncmp+1) = ipe8(1:ncmp+1)
452 IF (keep10.EQ.1)
THEN
453 IF (nomp .GT. 0)
THEN
454 CALL mumps_scotch_get_pthread_number (pthread_number)
455 CALL mumps_scotch_set_pthread_number (nomp)
457 IF (scotch_symbolic)
THEN
458 CALL mumps_scotch_64( ncmp, liw8,
461 & ptrar, iw(1), iwl1, ikeep1(1),
463 & weightused, weightrequested)
464 parent(1:ncmp) = int(ipe8_temp(1:ncmp))
466 CALL mumps_scotch_ord_64( ncmp, liw8,
469 & ptrar, iw(1), iwl1, ikeep1(1),
471 & weightused, weightrequested)
473 IF (nomp .GT. 0)
THEN
474 CALL mumps_scotch_set_pthread_number (pthread_number)
477 IF (inplace64_graph_copy)
THEN
480 ALLOCATE( iw8(liw8), stat=allocok )
481 IF (allocok > 0)
THEN
482 IF (lpok)
WRITE(lp,*)
483 &
"ERROR memory allocation in MUMPS_SCOTCH_MIXEDto64"
492 & ptrar8(ncmp), iwl18(ncmp), ikeep18(ncmp), ikeep28(ncmp),
494 IF (allocok > 0)
THEN
495 IF (lpok)
WRITE(lp,*)
496 &
"ERROR memory allocation in MUMPS_SCOTCH_MIXEDto64"
499 & ( int(ncmp,8)*4_8 )
504 IF (weightrequested.EQ.1)
THEN
507 IF (nomp .GT. 0)
THEN
508 CALL mumps_scotch_get_pthread_number (pthread_number)
509 CALL mumps_scotch_set_pthread_number (nomp)
511 IF (inplace64_graph_copy)
THEN
512 IF (scotch_symbolic)
THEN
513 CALL mumps_scotch_64(
517 & ptrar8, iw(1), iwl18,
518 & ikeep1(1), ikeep2(1), ncmpa,
522 CALL mumps_scotch_ord_64 (
526 & ptrar8, iw(1), iwl18,
533 IF (scotch_symbolic)
THEN
534 CALL mumps_scotch_64(
538 & ptrar8, iw8, iwl18,
539 & ikeep1(1), ikeep2(1), ncmpa,
543 CALL mumps_scotch_ord_64(
547 & ptrar8, iw8, iwl18,
554 IF (nomp .GT. 0)
THEN
555 CALL mumps_scotch_set_pthread_number (pthread_number)
557 IF (ncmpa .LT. 0)
THEN
558 IF (lpok)
WRITE(lp,*)
559 &
' Error on output from SCOTCH, NCMPA=', ncmpa
567 IF (scotch_symbolic)
THEN
571 IF (.NOT.inplace64_graph_copy)
THEN
572 IF (
ALLOCATED(iw8))
DEALLOCATE(iw8)
574 IF (
ALLOCATED(ptrar8))
DEALLOCATE(ptrar8)
575 IF (
ALLOCATED(iwl18))
DEALLOCATE(iwl18)
576 IF (
ALLOCATED(ikeep18))
DEALLOCATE(ikeep18)
577 IF (
ALLOCATED(ikeep28))
DEALLOCATE(ikeep28)
579 IF (
ALLOCATED(ipe8_temp))
DEALLOCATE(ipe8_temp)
581 END SUBROUTINE mumps_scotch_mixedto64
583#if defined (scotch) || defined (ptscotch)
584 SUBROUTINE mumps_scotch_kway_mixedto32(NHALO, HALOEDGENBR,
586 & NBGROUPS, PARTS, LP, LPOK, KEEP10,
590 INTEGER(8) :: HALOEDGENBR
591 INTEGER :: NHALO, NBGROUPS
592 INTEGER :: JCNHALO(HALOEDGENBR), PARTS(NHALO)
593 INTEGER(8) :: IPTRHALO(NHALO+1)
594 INTEGER,
INTENT(IN) :: LP, KEEP10
595 LOGICAL,
INTENT(IN) :: LPOK
596 INTEGER,
INTENT(INOUT) :: IFLAG, IERROR
597 DOUBLE PRECISION :: GRAFDAT(SCOTCH_GRAPHDIM)
598 DOUBLE PRECISION :: STRADAT(SCOTCH_STRATDIM)
599 INTEGER :: BASEVAL, IERR, EDGENBR
600 INTEGER,
ALLOCATABLE :: IPTRHALO_I4(:)
602 IF (iptrhalo(
size(iptrhalo)) .GE. int(huge(lp),8))
THEN
608 ALLOCATE(iptrhalo_i4(
size(iptrhalo)), stat=allocok)
609 IF (allocok > 0)
THEN
611 ierror =
size(iptrhalo)
612 IF (lpok)
WRITE(lp,
'(A)')
613 &
"ERROR memory allocation in MUMPS_SCOTCH_KWAY_MIXEDto32"
617 &
size(iptrhalo), iptrhalo_i4)
619 edgenbr = iptrhalo_i4(nhalo+1)
620 CALL scotchfgraphbuild(grafdat(1), baseval, nhalo,
621 & iptrhalo_i4(1), iptrhalo_i4(2), iptrhalo_i4(1),
622 & iptrhalo_i4(1), edgenbr, jcnhalo(1), jcnhalo(1), ierr)
623 CALL scotchfstratinit(stradat, ierr)
624 CALL scotchfgraphpart(grafdat(1), nbgroups, stradat(1),
626 CALL scotchfstratexit(stradat)
627 CALL scotchfgraphexit(grafdat)
628 parts(1:nhalo) = parts(1:nhalo)+1
629 DEALLOCATE(iptrhalo_i4)
631 END SUBROUTINE mumps_scotch_kway_mixedto32
632 SUBROUTINE mumps_scotch_kway_mixedto64(NHALO, HALOEDGENBR,
634 & NBGROUPS, PARTS, LP, LPOK, KEEP10,
639 INTEGER :: NHALO, NBGROUPS
640 INTEGER :: JCNHALO(HALOEDGENBR), (NHALO)
641 INTEGER(8) :: IPTRHALO(+1)
642 INTEGER,
INTENT(IN) :: LP, KEEP10
643 LOGICAL,
INTENT(IN) :: LPOK
644 INTEGER,
INTENT(INOUT) :: IFLAG, IERROR
645 DOUBLE PRECISION :: GRAFDAT(SCOTCH_GRAPHDIM)
646 DOUBLE PRECISION :: STRADAT(SCOTCH_STRATDIM)
648 INTEGER(8),
ALLOCATABLE :: JCNHALO_I8(:), PARTS_I8(:)
649 INTEGER(8) :: NHALO_I8, NBGROUPS_I8, EDGENBR_I8,
652 ALLOCATE(jcnhalo_i8(iptrhalo(nhalo+1)-1_8),
653 & parts_i8(
size(parts)), stat=allocok)
654 IF (allocok > 0)
THEN
657 & int(keep10,8)* (iptrhalo(nhalo+1)-1_8
658 & +int(
size(parts),8)),
660 IF (lpok)
WRITE(lp,
'(A)')
661 &
"ERROR memory allocation in MUMPS_SCOTCH_KWAY_MIXEDto64 "
664 & iptrhalo(nhalo+1)-1, jcnhalo_i8)
665 nhalo_i8 = int(nhalo,8)
666 nbgroups_i8 = int(nbgroups,8)
668 edgenbr_i8 = iptrhalo(nhalo+1)
669 CALL scotchfgraphbuild(grafdat(1), baseval_i8, nhalo_i8,
670 & iptrhalo(1), iptrhalo(2), iptrhalo(1),
671 & iptrhalo(1), edgenbr_i8, jcnhalo_i8(1), jcnhalo_i8(1), ierr)
672 CALL scotchfstratinit(stradat, ierr)
673 CALL scotchfgraphpart(grafdat(1), nbgroups_i8, stradat(1),
675 CALL scotchfstratexit(stradat)
676 CALL scotchfgraphexit(grafdat)
678 &
size(parts), parts)
679 DEALLOCATE(jcnhalo_i8, parts_i8)
680 parts(1:nhalo) = parts(1:nhalo)+1
682 END SUBROUTINE mumps_scotch_kway_mixedto64
684#if defined (metis) || defined (parmetis) || defined (metis4) || defined (parmetis3)
685 SUBROUTINE mumps_metis_kway_mixedto32(NHALO, HALOEDGENBR,
687 & JCNHALO, NBGROUPS, PARTS, LP, LPOK, KEEP10,
690 INTEGER(8) :: HALOEDGENBR
691 INTEGER :: NHALO, NBGROUPS
692 INTEGER :: JCNHALO(HALOEDGENBR), PARTS()
693 INTEGER(8) :: IPTRHALO(NHALO+1)
694 INTEGER,
INTENT(IN) :: LP,
695 LOGICAL,
INTENT(IN) :: LPOK
696 INTEGER,
INTENT(INOUT) :: IFLAG, IERROR
697 INTEGER,
ALLOCATABLE :: IPTRHALO_I4(:)
699 IF (IPTRHALO(size(IPTRHALO)) .GE. int(huge(LP),8)) THEN
705 ALLOCATE(iptrhalo_i4(
size(iptrhalo)), stat=allocok)
706 IF (allocok > 0)
THEN
708 ierror =
size(iptrhalo)
709 IF (lpok)
WRITE(lp,
'(A)')
710 &
"ERROR memory allocation in MUMPS_METIS_KWAY_MIXEDto32"
714 &
size(iptrhalo), iptrhalo_i4)
715 CALL mumps_metis_kway(nhalo, iptrhalo_i4(1),
716 & jcnhalo(1), nbgroups, parts(1))
717 DEALLOCATE(iptrhalo_i4)
719 END SUBROUTINE mumps_metis_kway_mixedto32
720 SUBROUTINE mumps_metis_kway_mixedto64(NHALO, HALOEDGENBR,
722 & JCNHALO, NBGROUPS, PARTS, LP, LPOK, KEEP10,
725 INTEGER(8) :: HALOEDGENBR
726 INTEGER :: NHALO, NBGROUPS
727 INTEGER :: JCNHALO(HALOEDGENBR), PARTS(NHALO)
728 INTEGER(8) :: IPTRHALO(NHALO+1)
729 INTEGER,
INTENT(IN) :: LP, KEEP10
730 LOGICAL,
INTENT(IN) :: LPOK
731 INTEGER,
INTENT(INOUT) :: IFLAG, IERROR
732 INTEGER(8),
ALLOCATABLE,
DIMENSION(:) :: JCNHALO_I8, PARTS_I8
733 INTEGER(8) :: NHALO_I8, NBGROUPS_I8
735 ALLOCATE(jcnhalo_i8(iptrhalo(nhalo+1)-1_8),
736 & parts_i8(
size(parts
737 IF (allocok > 0)
THEN
740 & int(keep10,8)* (iptrhalo(nhalo+1)-1_8+int(
size(parts),8)),
742 IF (lpok)
WRITE(lp,
'(A)')
743 &
"ERROR memory allocation in MUMPS_METIS_KWAY_MIXEDto64 "
745 nhalo_i8 = int(nhalo,8)
746 nbgroups_i8 = int(nbgroups,8)
748 & iptrhalo(nhalo+1)-1, jcnhalo_i8)
749 CALL mumps_metis_kway_64(nhalo_i8, iptrhalo(1),
750 & jcnhalo_i8(1), nbgroups_i8, parts_i8(1))
752 &
size(parts), parts)
753 DEALLOCATE(jcnhalo_i8, parts_i8)
755 END SUBROUTINE mumps_metis_kway_mixedto64
756 SUBROUTINE mumps_metis_kway_ab_mixedto32(NHALO, HALOEDGENBR,
758 & JCNHALO, NBGROUPS, PARTS, VWGT, LP, LPOK, KEEP10,
761 INTEGER(8) :: HALOEDGENBR
762 INTEGER :: NHALO, NBGROUPS
763 INTEGER :: JCNHALO(HALOEDGENBR), PARTS(NHALO), VWGT(NHALO)
764 INTEGER(8) :: IPTRHALO(NHALO+1)
765 INTEGER,
INTENT(IN) :: LP, KEEP10
766 LOGICAL,
INTENT(IN) :: LPOK
767 INTEGER,
INTENT(INOUT) :: IFLAG, IERROR
768 INTEGER,
ALLOCATABLE :: IPTRHALO_I4(:)
770 IF (iptrhalo(
size(iptrhalo)) .GE. int(huge(lp),8))
THEN
776 ALLOCATE(iptrhalo_i4(
size(iptrhalo)), stat=allocok)
777 IF (allocok > 0)
THEN
779 ierror =
size(iptrhalo)
780 IF (lpok)
WRITE(lp,
'(A)')
781 &
"ERROR memory allocation in MUMPS_METIS_KWAY_AB_MIXEDto32"
785 &
size(iptrhalo), iptrhalo_i4)
786 CALL mumps_metis_kway_ab(nhalo, iptrhalo_i4(1),
787 & jcnhalo(1), nbgroups, parts(1), vwgt(1))
788 DEALLOCATE(iptrhalo_i4)
790 END SUBROUTINE mumps_metis_kway_ab_mixedto32
791 SUBROUTINE mumps_metis_kway_ab_mixedto64(NHALO, HALOEDGENBR,
793 & JCNHALO, NBGROUPS, PARTS, VWGT, LP, LPOK, KEEP10,
796 INTEGER(8) :: HALOEDGENBR
797 INTEGER :: NHALO, NBGROUPS
798 INTEGER :: JCNHALO(HALOEDGENBR), PARTS(NHALO), VWGT(NHALO)
799 INTEGER(8) :: (NHALO+1)
800 INTEGER,
INTENT(IN) :: LP, KEEP10
801 LOGICAL,
INTENT(IN) :: LPOK
802 INTEGER,
INTENT(INOUT) :: IFLAG, IERROR
803 INTEGER(8),
ALLOCATABLE,
DIMENSION(:) :: JCNHALO_I8, PARTS_I8
804 INTEGER(8),
ALLOCATABLE,
DIMENSION(:) :: VWGT_I8
805 INTEGER(8) :: NHALO_I8, NBGROUPS_I8
807 ALLOCATE(jcnhalo_i8(iptrhalo(nhalo+1)-1_8),
808 & parts_i8(
size(parts)), vwgt_i8(nhalo), stat=allocok)
809 IF (allocok > 0)
THEN
812 & int(keep10,8)* (iptrhalo(nhalo+1)-1_8+int(
size(parts),8))
813 & +int(nhalo,8), ierror)
814 IF (lpok)
WRITE(lp,
'(A)')
815 &
"ERROR memory allocation in MUMPS_METIS_KWAY_AB_MIXEDto64 "
817 nhalo_i8 = int(nhalo,8)
818 nbgroups_i8 = int(nbgroups,8)
820 & iptrhalo(nhalo+1)-1, jcnhalo_i8)
823 CALL mumps_metis_kway_ab_64(nhalo_i8, iptrhalo(1),
824 & jcnhalo_i8(1), nbgroups_i8, parts_i8(1),
827 &
size(parts), parts)
828 DEALLOCATE(jcnhalo_i8, parts_i8, vwgt_i8)
830 END SUBROUTINE mumps_metis_kway_ab_mixedto64
833 SUBROUTINE mumps_pordf_mixedto32( NVTX, NEDGES8, XADJ8, IW,
835 & INFO, LP, LPOK, KEEP10 )
837 INTEGER,
INTENT(IN) :: LP
838 LOGICAL,
INTENT(IN) :: LPOK
839 INTEGER,
INTENT(INOUT) :: INFO(2)
840 INTEGER,
INTENT(IN) :: NVTX
841 INTEGER,
INTENT(OUT) :: NCMPA
842 INTEGER(8),
INTENT(IN) :: NEDGES8
843 INTEGER(8) :: XADJ8(:)
844 INTEGER,
INTENT(OUT) :: NV(NVTX)
846 INTEGER,
INTENT(OUT) :: PARENT(NVTX)
847 INTEGER,
INTENT(IN) :: KEEP10
848 INTEGER,
DIMENSION(:),
ALLOCATABLE :: XADJ
849 INTEGER :: I, allocok
850 IF (nedges8.GT. int(huge(iw),8))
THEN
855 ALLOCATE(xadj(nvtx+1), stat=allocok)
856 IF (allocok > 0)
THEN
859 IF (lpok)
WRITE(lp,
'(A)')
860 &
"ERROR memory allocation in MUMPS_PORD_MIXEDto32"
864 CALL mumps_pordf( nvtx, int(nedges8), xadj, iw(1),
871 END SUBROUTINE mumps_pordf_mixedto32
872 SUBROUTINE mumps_pordf_mixedto64( NVTX, NEDGES8, XADJ8, IW,
874 & INFO, LP, LPOK, KEEP10,
875 & INPLACE64_GRAPH_COPY )
877 INTEGER,
INTENT(IN) :: LP
878 LOGICAL,
INTENT(IN) :: LPOK
879 INTEGER,
INTENT(INOUT) :: INFO(2)
880 INTEGER,
INTENT(IN) :: NVTX
881 INTEGER,
INTENT(OUT) :: NCMPA
882 INTEGER(8),
INTENT(IN) :: NEDGES8
883 INTEGER(8) :: XADJ8(:)
884 INTEGER,
INTENT(OUT) :: NV(NVTX)
885 INTEGER,
INTENT(IN) :: IW(:)
886 INTEGER,
INTENT(OUT) :: PARENT(NVTX)
887 INTEGER,
INTENT(IN) :: KEEP10
888 LOGICAL,
INTENT(IN) :: INPLACE64_GRAPH_COPY
889 INTEGER(8),
DIMENSION(:),
ALLOCATABLE :: IW8, NV8
890 INTEGER :: I, allocok
891 IF (keep10.EQ.1)
THEN
892 CALL mumps_pordf( int(nvtx,8), nedges8, xadj8(1), iw(1),
895 parent(i)=int(xadj8(i))
898 IF (inplace64_graph_copy)
THEN
901 ALLOCATE(iw8(nedges8), stat=allocok)
902 IF (allocok > 0)
THEN
905 IF (lpok)
WRITE(lp,
'(A)')
906 &
"ERROR memory allocation in MUMPS_PORD_MIXEDto64"
911 ALLOCATE(nv8(nvtx), stat=allocok)
912 IF (allocok > 0)
THEN
915 IF (lpok)
WRITE(lp,
'(A)')
916 &
"ERROR memory allocation in MUMPS_PORD_MIXEDto64"
919 IF (inplace64_graph_copy)
THEN
920 CALL mumps_pordf( int(nvtx,8), nedges8, xadj8(1), iw(1),
923 CALL mumps_pordf( int(nvtx,8), nedges8, xadj8(1), iw8,
932 END SUBROUTINE mumps_pordf_mixedto64
933 SUBROUTINE mumps_pordf_wnd_mixedto32( NVTX, NEDGES8,
935 & NV, NCMPA, N, PARENT,
936 & INFO, LP, LPOK, KEEP10 )
938 INTEGER,
INTENT(IN) :: LP
939 LOGICAL,
INTENT(IN) :: LPOK
940 INTEGER,
INTENT(INOUT) :: INFO(2)
941 INTEGER,
INTENT(IN) :: NVTX, N
942 INTEGER,
INTENT(OUT) :: NCMPA
943 INTEGER,
INTENT(INOUT) :: NV(NVTX)
944 INTEGER(8) :: XADJ8(:)
945 INTEGER(8),
INTENT(IN) :: NEDGES8
947 INTEGER,
INTENT(OUT) :: PARENT(NVTX)
948 INTEGER,
INTENT(IN) :: KEEP10
949 INTEGER,
DIMENSION(:),
ALLOCATABLE :: XADJ
950 INTEGER :: I, allocok
951 IF (nedges8.GT. int(huge(iw),8))
THEN
956 ALLOCATE(xadj(nvtx+1), stat=allocok)
957 IF (allocok > 0)
THEN
960 IF (lpok)
WRITE(lp,
'(A)')
961 &
"ERROR memory allocation in MUMPS_PORDF_WND_MIXEDto32"
965 CALL mumps_pordf_wnd( nvtx, int(nedges8),
973 END SUBROUTINE mumps_pordf_wnd_mixedto32
974 SUBROUTINE mumps_pordf_wnd_mixedto64( NVTX, NEDGES8,
976 & NV, NCMPA, N, PARENT,
977 & INFO, LP, LPOK, KEEP10,
978 & INPLACE64_GRAPH_COPY )
980 INTEGER,
INTENT(IN) :: LP
981 LOGICAL,
INTENT(IN) :: LPOK
982 INTEGER,
INTENT(INOUT) :: INFO(2)
983 INTEGER,
INTENT(IN) :: NVTX,
984 INTEGER,
INTENT(OUT) :: NCMPA
985 INTEGER,
INTENT(INOUT) :: NV(NVTX)
986 INTEGER(8) :: XADJ8(:)
987 INTEGER(8),
INTENT(IN) :: NEDGES8
989 INTEGER,
INTENT(OUT) :: PARENT(NVTX)
990 INTEGER,
INTENT(IN) :: KEEP10
991 LOGICAL,
INTENT(IN) :: INPLACE64_GRAPH_COPY
992 INTEGER(8),
DIMENSION(:),
ALLOCATABLE :: , NV8
994 IF (keep10.EQ.1)
THEN
995 CALL mumps_pordf_wnd( int(nvtx,8), nedges8,
997 & nv, ncmpa, int(n,8) )
1000 IF (inplace64_graph_copy)
THEN
1003 ALLOCATE(iw8(nedges8), stat=allocok)
1004 IF (allocok > 0)
THEN
1007 IF (lpok)
WRITE(lp,
'(A)')
1008 &
"ERROR memory allocation in MUMPS_PORDF_WND_MIXEDto64"
1013 ALLOCATE(nv8(nvtx), stat=allocok)
1014 IF (allocok > 0)
THEN
1017 IF (lpok)
WRITE(lp,
'(A)')
1018 &
"ERROR memory allocation in MUMPS_PORDF_WND_MIXEDto64"
1022 IF (inplace64_graph_copy)
THEN
1023 CALL mumps_pordf_wnd( int(nvtx,8), nedges8,
1025 & nv8, ncmpa, int(n,8) )
1027 CALL mumps_pordf_wnd( int(nvtx,8), nedges8,
1029 & nv8, ncmpa, int(n,8) )
1037 END SUBROUTINE mumps_pordf_wnd_mixedto64
subroutine mumps_ana_wrap_return()