4 & (pmethod, nelem, npoin, ndp, nparts, ikles, epart, npart)
34 #if defined HAVE_SCOTCH 38 INTEGER,
INTENT(IN) :: pmethod
39 INTEGER,
INTENT(IN) :: nelem
40 INTEGER,
INTENT(IN) :: npoin
41 INTEGER,
INTENT(IN) :: ndp
42 INTEGER,
INTENT(IN) :: ikles(nelem*ndp)
43 INTEGER,
INTENT(IN) :: nparts
44 INTEGER,
INTENT(OUT) :: epart(nelem)
45 INTEGER,
INTENT(OUT) :: npart(npoin)
51 INTEGER i,j,k,err,numflag,edgecut,ncommonnodes
52 INTEGER,
ALLOCATABLE :: eptr(:), eind(:)
56 #if defined HAVE_SCOTCH 57 REAL*8,
DIMENSION(SCOTCH_GRAPHDIM) :: scotchgraph
58 REAL*8,
DIMENSION(SCOTCH_STRATDIM) :: scotchstrat
59 TYPE(c_ptr),
POINTER :: ptxadj(:), ptadjncy(:)
60 INTEGER,
ALLOCATABLE :: recvbuf(:)
61 INTEGER,
POINTER :: xadj2(:), adjncy2(:)
65 WRITE(
lu,*)
'BEGIN PARTITIONING WITH METIS' 72 ALLOCATE(eptr(nelem+1),stat=err)
73 CALL check_allocate(err,
'EPTR')
74 ALLOCATE(eind(nelem*ndp),stat=err)
75 CALL check_allocate(err,
'EIND')
79 eptr(i) = (i-1)*ndp + 1
85 eind(k) = ikles((i-1)*ndp+j)
102 IF (ndp==3.OR.ndp==6)
THEN 107 WRITE(
lu,*)
'METIS: IMPLEMENTED FOR TRIANGLES OR PRISMS ONLY' 121 & (nelem, npoin, eptr, eind,
122 & ncommonnodes, nparts,
123 & edgecut, epart, npart)
125 WRITE(
lu,*)
'ERROR: TRY TO RUN PARTEL WITH A '//
126 &
'SERIAL CONFIGURATION' 136 ELSE IF(pmethod.EQ.2)
THEN 137 #if defined HAVE_SCOTCH 141 WRITE(
lu,*)
'BEGIN PARTITIONING WITH SCOTCH' 142 ALLOCATE (eptr(nelem+1),stat=err)
143 CALL check_allocate(err,
"EPTR")
144 ALLOCATE (eind(nelem*ndp),stat=err)
145 CALL check_allocate(err,
"EIND")
150 eptr(i) = (i-1)*ndp + 1
156 eind(k) = ikles((i-1)*ndp+j)
165 IF (ndp==3.OR.ndp==6)
THEN 168 WRITE(
lu,*)
'SCOTCH: IMPLEMENTED FOR TRIANGLES OR PRISMS ONLY' 177 ALLOCATE(ptadjncy(1))
182 CALL metis_meshtodual
183 & (nelem, npoin, eptr, eind, ncommonnodes, numflag,
191 CALL c_f_pointer(ptxadj(1),xadj2,recvbuf)
193 recvbuf(1) = xadj2(nelem+1)-1
194 CALL c_f_pointer(ptadjncy(1),adjncy2,recvbuf)
200 CALL scotchfstratinit(scotchstrat, err)
202 WRITE(
lu,*)
'SCOTCH ERROR: CANNOT INITIALIZE STRAT' 206 CALL scotchfgraphinit(scotchgraph, err)
208 WRITE(
lu,*)
'SCOTCH ERROR: CANNOT INITIALIZE GRAPH' 212 CALL scotchfgraphbuild ( scotchgraph,
225 WRITE(
lu,*)
'SCOTCH ERROR: CANNOT BUILD GRAPH' 229 CALL scotchfgraphcheck(scotchgraph,err)
231 WRITE(
lu,*)
'SCOTCH ERROR: GRAPH NOT CONSISTANT' 236 CALL scotchfgraphpart ( scotchgraph,
243 WRITE(
lu,*)
'SCOTCH ERROR: CANNOT PARTITION GRAPH' 249 CALL scotchfgraphexit (scotchgraph)
250 CALL scotchfstratexit (scotchstrat)
261 WRITE(
lu,*)
"TRYING TO USE SCOTCH TO PARTIONNE WHEN SCOTCH",
262 &
" IS NOT INSTALLED" 266 END SUBROUTINE partitioner
subroutine mymetis_partmeshdual(NELEM, NPOIN, EPTR, EIND, NCOMMONNODES, NPARTS, EDGECUT, EPART, NPART)