added functions to get outer edges

This commit is contained in:
jakob.schratter 2026-01-24 13:41:56 +01:00
commit facc8fc890
2 changed files with 66 additions and 2 deletions

View file

@ -129,6 +129,8 @@ void Mesh::DebugEdgeBased() const
}
cout << "\n ............... edges ...................\n";
cout << "_edges.size(): " << _edges.size() << endl;
cout << "_nedge: " << _nedge << endl;
for (int k = 0; k < _nedge; ++k)
{
cout << k << " : ";
@ -147,6 +149,7 @@ void Mesh::DebugEdgeBased() const
cout << endl;
}
cout << "\n ............... Boundary (edges) .................\n";
cout << "_ebedges.size(): " << _ebedges.size() << endl;
cout << " _ebedges : " << _ebedges << endl;
return;
@ -751,6 +754,33 @@ void Mesh::DeriveEdgeFromVertexBased_fast()
}
// HG
const std::vector<int> Mesh::BoundaryEdges() const
{
return _ebedges;
}
// Only the outer edges for Robin BC
const std::vector<int> Mesh::OuterEdges() const
{
vector<int> outerEdges;
for (int k = 0; k < _ebedges.size()/2; ++k)
{
if (EdgeSubdomains[k] == 0 || EdgeSubdomains[k + 1] == 0)
outerEdges.push_back(_ebedges[k]);
}
cout << "All boundary edges: " << _ebedges.size() << endl;
cout << "Outer boundary edges: " << outerEdges.size() << endl;
cout << _ebedges;
cout << endl;
cout << outerEdges << endl;
return outerEdges;
}
#include <utility> // pair
@ -982,16 +1012,33 @@ Mesh::Mesh(std::string const &fname)
//cout << " P E R M U T E D !" << endl;
}
// Constructor with subdomain support
Mesh::Mesh(std::string const &filename, std::string const &subdomain_filename) : Mesh(filename)
{
ElementSubdomains = ReadElementSubdomains(subdomain_filename);
//EdgeSubdomains = ReadEdgeSubdomains(filename);
}
// const vector<int> Mesh::ReadEdgeSubdomains(std::string const &filename) const
// {
// vector<int> edgeSubdomains(_nedge);
// ifstream ifs(filename);
// if (!(ifs.is_open() && ifs.good())) {
// cerr << "Mesh::ReadEdgeSubdomains: Error cannot open file " << filename << endl;
// assert(ifs.is_open());
// }
// return edgeSubdomains;
// }
const vector<int> Mesh::ReadElementSubdomains(string const &dname) const
{
ifstream ifs(dname);
if (!(ifs.is_open() && ifs.good())) {
cerr << "ParMesh::ReadElementSubdomain: Error cannot open file " << dname << endl;
cerr << "Mesh::ReadElementSubdomain: Error cannot open file " << dname << endl;
assert(ifs.is_open());
}
@ -1073,12 +1120,20 @@ void Mesh::ReadVertexBasedMesh(std::string const &fname)
ifs >> _bedges[k];
_bedges[k] -= OFFSET; // Matlab to C indexing
}
// Store edge adjacent subdomains
EdgeSubdomains.resize(nbedges * 2);
for (int k = 0; k < nbedges * 2; ++k)
{
ifs >> EdgeSubdomains[k];
}
}
else
{
// ToDo: add boundary information to 3D mesh
cout << std::endl << "NO boundary information available for 3D mesh" << endl;
}
return;
}