Skip to content
Snippets Groups Projects
Commit 7f063fce authored by Nicolas Marsic's avatar Nicolas Marsic
Browse files

DDM Tests: Rewritting SystemAbstract::getSolution +...

DDM Tests: Rewritting SystemAbstract::getSolution + FunctionSpace::getUnorderedKeys() + FunctionSpace::getAllDofs with set + FunctionSpace::getKeys(set)
parent 24c39856
No related branches found
No related tags found
No related merge requests found
...@@ -144,43 +144,28 @@ void FunctionSpace::insertDof(Dof& d, ...@@ -144,43 +144,28 @@ void FunctionSpace::insertDof(Dof& d,
} }
} }
*/ */
vector<Dof> FunctionSpace::getKeys(const MElement& elem) const{
vector<Dof> FunctionSpace::getUnorderedKeys(const MElement& elem) const{
// Const_Cast // // Const_Cast //
MElement& element = const_cast<MElement&>(elem); MElement& element = const_cast<MElement&>(elem);
// Create New Element With Permuted Vertices // // Vertex, Edge & Face //
// Permutation
const vector<size_t>& vPerm =
(*this->basis)[0]->getReferenceSpace().getNodeIndexFromABCtoUVW(elem);
// Permuted Vertices
const size_t nVertex = element.getNumPrimaryVertices(); const size_t nVertex = element.getNumPrimaryVertices();
const size_t nEdge = element.getNumEdges();
const size_t nFace = element.getNumFaces();
vector<MVertex*> vertex(nVertex); vector<MVertex*> vertex(nVertex);
vector<MEdge> edge(nEdge);
vector<MFace> face(nFace);
for(size_t i = 0; i < nVertex; i++) for(size_t i = 0; i < nVertex; i++)
vertex[i] = element.getVertex(vPerm[i]); vertex[i] = element.getVertex(i);
// New Element
MElementFactory factory;
int parentTag = ElementType::ParentTypeFromTag(elem.getTypeForMSH());
int lowOrderTag = ElementType::getTag(parentTag, 1, false);
MElement* permElement = factory.create(lowOrderTag, vertex);
// Edge & Face from Permuted Element //
const size_t nEdge = permElement->getNumEdges();
const size_t nFace = permElement->getNumFaces();
vector<MEdge> edge(nEdge);
vector<MFace> face(nFace);
for(size_t i = 0; i < nEdge; i++) for(size_t i = 0; i < nEdge; i++)
edge[i] = permElement->getEdge(i); edge[i] = element.getEdge(i);
for(size_t i = 0; i < nFace; i++) for(size_t i = 0; i < nFace; i++)
face[i] = permElement->getFace(i); face[i] = element.getFace(i);
delete permElement;
// Create Dof // // Create Dof //
size_t nDof = size_t nDof =
...@@ -226,6 +211,56 @@ vector<Dof> FunctionSpace::getKeys(const MElement& elem) const{ ...@@ -226,6 +211,56 @@ vector<Dof> FunctionSpace::getKeys(const MElement& elem) const{
return myDof; return myDof;
} }
vector<Dof> FunctionSpace::getKeys(const MElement& elem) const{
// Const_Cast //
MElement& element = const_cast<MElement&>(elem);
// Create New Element With Permuted Vertices //
// Permutation
const vector<size_t>& vPerm =
(*this->basis)[0]->getReferenceSpace().getNodeIndexFromABCtoUVW(elem);
// Permuted Vertices
const size_t nVertex = element.getNumPrimaryVertices();
vector<MVertex*> vertex(nVertex);
for(size_t i = 0; i < nVertex; i++)
vertex[i] = element.getVertex(vPerm[i]);
// New Element
MElementFactory factory;
int parentTag = ElementType::ParentTypeFromTag(elem.getTypeForMSH());
int lowOrderTag = ElementType::getTag(parentTag, 1, false);
MElement* permElement = factory.create(lowOrderTag, vertex);
// Get Dofs from permuted Element //
vector<Dof> myDofs = getUnorderedKeys(*permElement);
// Free and Return //
delete permElement;
return myDofs;
}
void FunctionSpace::getKeys(const GroupOfElement& goe,
std::set<Dof>& dof) const{
// Get Elements //
const vector<const MElement*>& element = goe.getAll();
const size_t nElement = element.size();
// Loop on Elements //
for(size_t e = 0; e < nElement; e++){
// Get my Dofs
vector<Dof> myDof = getUnorderedKeys(*element[e]);
const size_t nDof = myDof.size();
// Add my Dofs
for(size_t d = 0; d < nDof; d++)
dof.insert(myDof[d]);
}
}
const GroupOfDof& FunctionSpace:: const GroupOfDof& FunctionSpace::
getGoDFromElement(const MElement& element) const{ getGoDFromElement(const MElement& element) const{
......
...@@ -75,12 +75,15 @@ class FunctionSpace{ ...@@ -75,12 +75,15 @@ class FunctionSpace{
GroupOfElement& getSupport(void) const; GroupOfElement& getSupport(void) const;
bool isScalar(void) const; bool isScalar(void) const;
std::vector<Dof> getUnorderedKeys(const MElement& element) const;
std::vector<Dof> getKeys(const MElement& element) const; std::vector<Dof> getKeys(const MElement& element) const;
std::vector<Dof> getKeys(const MVertex& vertex) const; std::vector<Dof> getKeys(const MVertex& vertex) const;
std::vector<Dof> getKeys(const MEdge& edge) const; std::vector<Dof> getKeys(const MEdge& edge) const;
std::vector<Dof> getKeys(const MFace& face) const; std::vector<Dof> getKeys(const MFace& face) const;
const std::vector<Dof> getAllDofs(void) const; void getKeys(const GroupOfElement& goe, std::set<Dof>& dof) const;
const std::set<Dof>& getAllDofs(void) const;
const std::vector<GroupOfDof*>& getAllGroups(void) const; const std::vector<GroupOfDof*>& getAllGroups(void) const;
const GroupOfDof& getGoDFromElement(const MElement& element) const; const GroupOfDof& getGoDFromElement(const MElement& element) const;
...@@ -209,8 +212,8 @@ inline size_t FunctionSpace::groupNumber(void) const{ ...@@ -209,8 +212,8 @@ inline size_t FunctionSpace::groupNumber(void) const{
return group->size(); return group->size();
} }
inline const std::vector<Dof> FunctionSpace::getAllDofs(void) const{ inline const std::set<Dof>& FunctionSpace::getAllDofs(void) const{
return std::vector<Dof>(dof->begin(), dof->end()); return *dof;
} }
inline const std::vector<GroupOfDof*>& FunctionSpace::getAllGroups(void) const{ inline const std::vector<GroupOfDof*>& FunctionSpace::getAllGroups(void) const{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment