erdc / proteus

A computational methods and simulation toolkit
http://proteustoolkit.org
MIT License
88 stars 56 forks source link

Partition Meshes 2D #1239

Closed zhang-alvin closed 3 years ago

zhang-alvin commented 3 years ago

Mandatory Checklist

Please ensure that the following criteria are met:

As a general rule of thumb, try to follow PEP8 guidelines.

Description

Try to get the partition logic for 2D triangle meshes working

codecov[bot] commented 3 years ago

Codecov Report

Merging #1239 (4bcdf11) into master (78b6d07) will decrease coverage by 0.01%. The diff coverage is 23.33%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master    #1239      +/-   ##
==========================================
- Coverage   52.82%   52.81%   -0.02%     
==========================================
  Files         531      531              
  Lines      109745   109772      +27     
==========================================
+ Hits        57971    57974       +3     
- Misses      51774    51798      +24     
Impacted Files Coverage Δ
proteus/MeshTools.py 55.13% <23.33%> (-0.24%) :arrow_down:
proteus/tests/test_boundaryconditions.py 97.46% <0.00%> (-0.13%) :arrow_down:

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update 78b6d07...8d3e1a8. Read the comment docs.

zhang-alvin commented 3 years ago

When running a serial case with the -F option on a mesh that has already been generated, the analysis proceeds with identical results (top is serial case w/o -F and bottom is with -F):

serial_vs_loadSerial

zhang-alvin commented 3 years ago

Running the same case with two cores yields the following assertion error:

python: proteus/partitioning.cpp:3961: int proteus::partitionNodesFromTriangleFiles(const MPI_Comm&, const char*, int, Mesh&, int): Assertion `edges_overlap.size() + nEdges_subdomain_new[rank] == edgeNodesMap.size()' failed.

A print statement for edges_overlap.size(), nEdges_subdomain_new, and edgeNodesMap.size shows the following:

rank 0 
edges_overlap=6 
nEdges_subdomain_new[0]=235 
edgeNodesMap.size()=241

rank 1
edges_overlap=18
nEdges_subdomain_new[1]=227
edgeNodesMap.size()=244

The assertion fails for rank 1 because the sum of the number of overlapping edges and number of owned edges is off by one.