Skip to content

Commit d99ac3c

Browse files
committed
fixed some bugs in parmetis code
1 parent 36e2d87 commit d99ac3c

File tree

5 files changed

+84
-119
lines changed

5 files changed

+84
-119
lines changed

CMakeLists.txt

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 3.0)
22

33
project (ParallelFortran)
44

5-
enable_language(Fortran)
5+
enable_language(CXX Fortran)
66

77

88

@@ -29,44 +29,47 @@ set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${dialect}")
2929
##################################
3030
#include_directories(/usr/include/petsc)
3131
include_directories(
32-
/usr/include/vtk-6.2 /usr/include/openmpi /usr/include/petsc /usr/include/superlu /usr/include/boost)
32+
/usr/include/vtk-6.3 /usr/include/openmpi /usr/include/petsc /usr/include/superlu /usr/include/boost)
3333

3434

3535
##################################
3636
# lib directories
3737
##################################
3838
#link_directories(/usr/lib/gcc/x86_64-linux-gnu /usr/lib /opt/petsc-3.6.4/arch-linux2-c-debug/lib)
3939
link_directories(
40-
/usr/lib/gcc/x86_64-linux-gnu/5.4.0
41-
/usr/lib/x86_64-linux-gnu
40+
/usr/lib/gcc/x86_64-linux-gnu/7.5.0
4241
/usr/lib/libblas
4342
/usr/lib/lapack
44-
/opt/petsc-3.6.4/arch-linux2-c-debug/lib
45-
/usr/lib
43+
/opt/petsc-3.6.4/arch-linux2-c-debug/lib
4644
/home/chenna/Documents/myCode/igampap/lib
47-
/usr/lib/x86_64-linux-gnu
4845
/usr/x86_64-linux-gnu/lib
46+
/usr/lib/openmpi/lib
47+
/usr/lib/x86_64-linux-gnu
4948
)
5049

5150

5251

5352
#src/elemutilitiesquadrature.F
54-
#file(GLOB_RECURSE sources src/elemutilitiesquadrature.F src/elementutilitiesbasisfuncs.F src/elementutilitiespoisson.F src/elementutilitieselasticity2D.F elementutilitieselasticity3D.F src/writervtk.F src/solverpetsc.F)
53+
file(GLOB_RECURSE sources src/elemutilitiesquadrature.F src/elementutilitiesbasisfuncs.F src/elementutilitiespoisson.F src/elementutilitieselasticity2D.F elementutilitieselasticity3D.F src/writervtk.F src/solverpetsc.F)
5554

5655
##################################
5756

58-
add_executable(partmeshfort src/meshpartitionfort.F)
59-
#add_executable(partmeshfortparmetis src/meshpartitionfortparmetis.f90)
60-
add_executable(parmetisdualtest src/parmetisdualtest.F)
57+
#add_executable(partmeshfort src/meshpartitionfort.F)
58+
#add_executable(partmeshparmetisfort src/meshpartitionfortparmetis.f90)
59+
add_executable(partmeshparmetiscpp src/meshpartitionfortparmetis.cpp)
60+
#add_executable(parmetisdualtest src/parmetisdualtest.F)
6161

6262

63-
target_link_libraries(partmeshfort metis)
63+
#target_link_libraries(partmeshfort metis)
6464
#target_link_libraries(partmeshfortparmetis mpi_mpifh parmetis)
65-
target_link_libraries(parmetisdualtest mpi_mpifh parmetis)
65+
target_link_libraries(partmeshparmetiscpp mpi mpi_cxx metis parmetis petsc)
66+
#target_link_libraries(parmetisdualtest mpi_mpifh parmetis)
67+
68+
#install(TARGETS partmeshfort RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/PFEMFort/bin)
69+
#install(TARGETS partmeshfortparmetis RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/PFEMFort/bin)
70+
#install(TARGETS parmetisdualtest RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/PFEMFort/bin)
71+
install(TARGETS partmeshparmetiscpp RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/PFEMFort/bin)
6672

67-
install(TARGETS partmeshfort RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/standardfem/bin)
68-
#install(TARGETS partmeshfortparmetis RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/standardfem/bin)
69-
install(TARGETS parmetisdualtest RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/standardfem/bin)
7073

7174
#add_library(writer writervtk.F)
7275
#add_executable(writer writervtk.F)
@@ -90,16 +93,18 @@ install(TARGETS parmetisdualtest RUNTIME DESTINATION /home/chenna/Documents/myCo
9093
#target_link_libraries(elasticityexplicitquad metis petsc mpi mpi_mpifh)
9194
#target_link_libraries(elasticityexplicitprism metis petsc mpi mpi_mpifh)
9295
#target_link_libraries(elasticityexplicittria6 metis petsc mpi mpi_mpifh)
93-
9496
#target_link_libraries(elasticityexplicit3d metis petsc mpi mpi_mpifh)
9597

98+
#target_link_libraries(tetraelasticity metis petsc mpi mpi_mpifh)
99+
96100

97-
#install(TARGETS triapoisson RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/standardfem/bin)
98-
#install(TARGETS elasticityexplicittria RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/standardfem/bin)
99-
#install(TARGETS elasticityexplicitquad RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/standardfem/bin)
100-
#install(TARGETS elasticityexplicitprism RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/standardfem/bin)
101-
#install(TARGETS elasticityexplicittria6 RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/standardfem/bin)
101+
#install(TARGETS triapoisson RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/PFEMFort/bin)
102+
#install(TARGETS elasticityexplicittria RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/PFEMFort/bin)
103+
#install(TARGETS elasticityexplicitquad RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/PFEMFort/bin)
104+
#install(TARGETS elasticityexplicitprism RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/PFEMFort/bin)
105+
#install(TARGETS elasticityexplicittria6 RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/PFEMFort/bin)
102106

107+
#install(TARGETS tetraelasticity RUNTIME DESTINATION /home/chenna/Documents/myCode/Fortran/PFEMFort/bin)
103108

104109

105110

makefile

Lines changed: 8 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -70,63 +70,22 @@ OBJECTS = writervtk.o solverpetsc.o elementutilitiesbasisfuncs.o elementutilitie
7070
%.o ../obj/%.o: %.f
7171
$(CF) -c $(FOPT) $(FINCL) $< -o $@
7272

73-
#%.o %.mod: %.F
74-
%.o: %.F
73+
%.o ../obj/%.o: %.F
7574
$(CF) -c $(FOPT) $(FINCL) $< -o $@
76-
# mv $@ ../obj
77-
# mv *.mod ../obj
7875

76+
%.o %.mod: %.F
77+
#%.o: %.F
78+
$(CF) -c $(FOPT) $(FINCL) $< -o $@
79+
mv $@ ../obj
80+
mv *.mod ../obj
7981

80-
vtktovtu: vtktovtu.o
81-
${CC} -o vtktovtu vtktovtu.o ${CLIB}
82-
rm vtktovtu.o
83-
84-
meshpartitioncpp: writervtk.o meshpartitioncpp.o
85-
${CC} -o meshpartitioncpp meshpartitioncpp.o writervtk.o ${CLIB}
86-
rm meshpartitioncpp.o
87-
88-
meshpartitionfort: writervtk.o meshpartitionfort.o
89-
${CF} -o meshpartitionfort meshpartitionfort.o writervtk.o ${FLIB}
90-
rm meshpartitionfort.o
91-
92-
meshpartitionfortparmetis: writervtk.o meshpartitionfortparmetis.o
93-
${CF} -o meshpartitionfortparmetis meshpartitionfortparmetis.o writervtk.o ${FLIB}
94-
rm meshpartitionfortparmetis.o
95-
96-
triapoissonserialimpl1: writervtk.o triapoissonserialimpl1.o ${OBJECTS}
97-
${CF} -o triapoissonserialimpl1 triapoissonserialimpl1.o writervtk.o ${FLIB}
98-
rm triapoissonserialimpl1.o
99-
100-
triapoissonserialimpl2: writervtk.o triapoissonserialimpl2.o
101-
${CF} -o triapoissonserialimpl2 triapoissonserialimpl2.o writervtk.o ${FLIB}
102-
rm triapoissonserialimpl2.o
103-
104-
triapoissonserialimpl3: writervtk.o solverpetsc.o triapoissonserialimpl3.o
105-
${CF} -o triapoissonserialimpl3 triapoissonserialimpl3.o ${OBJECTS} ${FLIB}
106-
rm triapoissonserialimpl3.o
107-
108-
triapoissonparallelimpl1: ${OBJECTS} triapoissonparallelimpl1.o
109-
${CF} -o triapoissonparallelimpl1 triapoissonparallelimpl1.o ${OBJECTS} ${FLIB}
110-
rm triapoissonparallelimpl1.o
111-
112-
triapoissonparallelimpl2: ${OBJECTS} triapoissonparallelimpl2.o
113-
${CF} -o triapoissonparallelimpl2 triapoissonparallelimpl2.o ${OBJECTS} ${FLIB}
114-
rm triapoissonparallelimpl2.o
115-
116-
tetrapoissonparallelimpl1: ${OBJECTS} tetrapoissonparallelimpl1.o
117-
${CF} -o tetrapoissonparallelimpl1 tetrapoissonparallelimpl1.o ${OBJECTS} ${FLIB}
118-
rm tetrapoissonparallelimpl1.o
119-
120-
triaelasticityparallelimpl1: ${OBJECTS} triaelasticityparallelimpl1.o
121-
${CF} -o triaelasticityparallelimpl1 triaelasticityparallelimpl1.o ${OBJECTS} ${FLIB}
122-
rm triaelasticityparallelimpl1.o
12382

12483
tetraelasticityparallelimpl1: ${OBJECTS} tetraelasticityparallelimpl1.o
12584
${CF} -o tetraelasticityparallelimpl1 tetraelasticityparallelimpl1.o ${OBJECTS} ${FLIB}
12685
rm tetraelasticityparallelimpl1.o
12786

128-
meshpartitioncpp: writervtk.o meshpartitioncpp.o
129-
${CC} -o meshpartitioncpp meshpartitioncpp.o writervtk.o ${CLIB}
87+
meshpartitioncpp: meshpartitioncpp.o
88+
${CC} -o meshpartitioncpp meshpartitioncpp.o ${CLIB}
13089
rm meshpartitioncpp.o
13190

13291
clean:

src/meshpartitioncpp.cpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ using namespace std;
4444

4545
int main(int argc, char* argv[])
4646
{
47-
PetscErrorCode ierr;
47+
PetscErrorCode errpetsc;
4848

4949
// initialise PETSc. This will internally initialises MPI environment
50-
ierr = PetscInitialize(&argc, &argv, (char *)0, NULL); CHKERRQ(ierr);
51-
//ierr = PetscInitialize(NULL, NULL, "petsc_options.dat", NULL); CHKERRQ(ierr);
50+
errpetsc = PetscInitialize(&argc, &argv, (char *)0, NULL); CHKERRQ(errpetsc);
51+
//errpetsc = PetscInitialize(NULL, NULL, "petsc_options.dat", NULL); CHKERRQ(errpetsc);
5252

5353
//////////////////////////////////////////////
5454
//
@@ -84,7 +84,7 @@ int main(int argc, char* argv[])
8484
procIdVTK->Reset();
8585
nodeInOutVTK->Reset();
8686

87-
int ndim, eType, metisType, node_proc_ids, ncommon_nodes;
87+
int ndim, eType, metisType, nparts, ncommon_nodes;
8888
int nNode, nElem, npElem, count, ind;
8989
int ee, ii, jj, kk, e1, e2, ind1, ind2;
9090
string nodeFileName, elemFileName;
@@ -97,7 +97,7 @@ int main(int argc, char* argv[])
9797
ndim = atoi(argv[1]);
9898
eType = atoi(argv[2]);
9999
metisType = atoi(argv[3]);
100-
node_proc_ids = atoi(argv[4]);
100+
nparts = atoi(argv[4]);
101101

102102
nodeFileName = argv[5];
103103
elemFileName = argv[6];
@@ -283,16 +283,16 @@ int main(int argc, char* argv[])
283283

284284
PetscInt *eptr, *eind, *elem_proc_id, *node_proc_id;
285285

286-
ierr = PetscMalloc1(nElem+1, &eptr); CHKERRQ(ierr);
287-
ierr = PetscMalloc1(nElem, &elem_proc_id); CHKERRQ(ierr);
288-
ierr = PetscMalloc1(nNode, &node_proc_id); CHKERRQ(ierr);
286+
errpetsc = PetscMalloc1(nElem+1, &eptr); CHKERRQ(errpetsc);
287+
errpetsc = PetscMalloc1(nElem, &elem_proc_id); CHKERRQ(errpetsc);
288+
errpetsc = PetscMalloc1(nNode, &node_proc_id); CHKERRQ(errpetsc);
289289

290290

291291
idx_t npElem_total = nElem*npElem;
292292

293293
cout << " npElem_total = " << npElem_total << endl;
294294

295-
ierr = PetscMalloc1(npElem_total, &eind); CHKERRQ(ierr);
295+
errpetsc = PetscMalloc1(npElem_total, &eind); CHKERRQ(errpetsc);
296296

297297
vector<int> vecTemp2(npElem);
298298

@@ -336,28 +336,28 @@ int main(int argc, char* argv[])
336336
// METIS partition routine
337337
int ret;
338338
if(metisType == 1)
339-
ret = METIS_PartMeshNodal(&nElem, &nNode, eptr, eind, NULL, NULL, &node_proc_ids, NULL, options, &objval, elem_proc_id, node_proc_id);
339+
ret = METIS_PartMeshNodal(&nElem, &nNode, eptr, eind, NULL, NULL, &nparts, NULL, options, &objval, elem_proc_id, node_proc_id);
340340
else
341-
ret = METIS_PartMeshDual(&nElem, &nNode, eptr, eind, NULL, NULL, &ncommon_nodes, &node_proc_ids, NULL, options, &objval, elem_proc_id, node_proc_id);
341+
ret = METIS_PartMeshDual(&nElem, &nNode, eptr, eind, NULL, NULL, &ncommon_nodes, &nparts, NULL, options, &objval, elem_proc_id, node_proc_id);
342342

343343
if(ret == METIS_OK)
344344
cout << " METIS partition routine successful " << endl;
345345
else
346346
cout << " METIS partition routine FAILED " << endl;
347347

348-
//for(ee=0; ee<nNode; ee++)
349-
//cout << ee << '\t' << node_proc_id[ee] << endl;
348+
for(ee=0; ee<nNode; ee++)
349+
cout << ee << '\t' << node_proc_id[ee] << endl;
350350

351351
for(ee=0; ee<nElem; ee++)
352352
{
353-
// cout << ee << '\t' << elem_proc_id[ee] << endl;
353+
cout << ee << '\t' << elem_proc_id[ee] << endl;
354354
procIdVTK->InsertTuple1(ee, elem_proc_id[ee]);
355355
}
356356

357-
ierr = PetscFree(eptr); CHKERRQ(ierr);
358-
ierr = PetscFree(eind); CHKERRQ(ierr);
359-
ierr = PetscFree(elem_proc_id); CHKERRQ(ierr);
360-
ierr = PetscFree(node_proc_id); CHKERRQ(ierr);
357+
errpetsc = PetscFree(eptr); CHKERRQ(errpetsc);
358+
errpetsc = PetscFree(eind); CHKERRQ(errpetsc);
359+
errpetsc = PetscFree(elem_proc_id); CHKERRQ(errpetsc);
360+
errpetsc = PetscFree(node_proc_id); CHKERRQ(errpetsc);
361361

362362
/////////////////////////////////////////////////////////////////////////////
363363
/////////////////////////////////////////////////////////////////////////////
@@ -441,7 +441,7 @@ int main(int argc, char* argv[])
441441
writerUGridVTK->Write();
442442

443443
// finalise PETSc. This will internally finalises MPI environment //MPI_Finalize();
444-
ierr = PetscFinalize();CHKERRQ(ierr);
444+
errpetsc = PetscFinalize();CHKERRQ(errpetsc);
445445

446446
return 0;
447447
}

src/meshpartitionfortparmetis.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ PROGRAM MeshPartition
267267

268268
WRITE(*,*) " Partitioning the mesh "
269269

270+
270271
ALLOCATE(elemdist(n_mpi_procs+1))
271272
elemdist = 0
272273
ALLOCATE(elem_proc_id(nElem_global))

0 commit comments

Comments
 (0)