43 character*70 :: mpi_file,u_name
44 integer*4 :: ie,i,ic,u_mpi, w_yn, trash
45 integer*4 :: ncommon, objval, edgecut
47 integer*4,
intent(inout) :: nelem, nnode, nparts
48 integer*4,
dimension(nelem,9),
intent(in) :: conn
50 integer*4,
dimension(nnode) :: npart
51 integer*4,
dimension(nelem) :: epart
52 integer*4,
dimension(nelem) :: vwgt
54 integer*4,
pointer :: vsize(:) => null()
56 integer*4,
dimension(nelem+1) :: eptr
57 integer*4,
dimension(nelem*8) :: eind
59 integer*4 :: options(40)
60 integer*4,
parameter :: METIS_OPTION_PTYPE = 1, metis_option_objtype
61 metis_option_iptype = 4, metis_option_rtype
62 metis_option_niter = 7, metis_option_ncuts
63 metis_option_no2hop = 10, &
64 metis_option_minconn = 11, metis_option_contig
65 metis_option_ccorder = 14, metis_option_pfactor
66 metis_option_ufactor = 17, metis_option_numbering
68 real*8,
pointer :: tpwgts(:) => null()
73 eptr(ie+1) = eptr(ie) + 8
85 call metis_partmeshdual(nelem,nnode,eind,3,1,nparts,edgecut,&
96 ! u_name =
'element.wgt'
98 !
open(u_mpi,file=u_name)
102 !
read(u_mpi,*) trash, vwgt(i)
108 !
call metis_setdefaultoptions(options)
109 !options(metis_option_numbering) = 1
111 !
call metis_partmeshdual(nelem, nnode, eptr, eind, vwgt, vsize, &
112 ! ncommon, nparts, tpwgts, options, objval,
120 if(len_trim(mpi_file) .ne. 70)
then
121 u_name = mpi_file(1:len_trim(mpi_file)) //
'/elemdomain.mpi'
123 u_name =
'elemdomain.mpi'
127 open(u_mpi,file=u_name)
130 write(u_mpi,*) i, epart(i)
subroutine mesh_partitioning(mpi_file, nelem, nnode, nparts, conn, w_yn
Makes mesh partitioning using METIS.