From a16f40112c24148e801493ddd422ddc33fcdc49f Mon Sep 17 00:00:00 2001 From: Boris Sedji <sedji.boris@hotmail.com> Date: Mon, 14 Jun 2010 15:03:24 +0000 Subject: [PATCH] --- Solver/groupOfElements.h | 150 +++++++++++++++++++++++++++------------ 1 file changed, 103 insertions(+), 47 deletions(-) diff --git a/Solver/groupOfElements.h b/Solver/groupOfElements.h index 6a24ef7764..8255fa8418 100644 --- a/Solver/groupOfElements.h +++ b/Solver/groupOfElements.h @@ -16,64 +16,120 @@ public: }; class groupOfElements { -public: - typedef std::set<MElement*> elementContainer; - typedef std::set<MVertex*> vertexContainer; -private: - vertexContainer _vertices; - elementContainer _elements; - elementContainer _parents; -public: - groupOfElements (int dim, int physical) { - addPhysical (dim, physical); - } - groupOfElements (GFace*); + public: - virtual void addPhysical(int dim, int physical) { - elementFilterTrivial filter; - addPhysical (dim, physical, filter); - } + typedef std::set<MElement*> elementContainer; + typedef std::set<MVertex*> vertexContainer; - virtual void addElementary(GEntity *ge, const elementFilter &f); + protected: - virtual void addPhysical(int dim, int physical, const elementFilter &); + vertexContainer _vertices; + elementContainer _elements; + elementContainer _parents; - vertexContainer::const_iterator vbegin() const { - return _vertices.begin(); - } - vertexContainer::const_iterator vend() const { - return _vertices.end(); - } + public: - elementContainer::const_iterator begin() const { - return _elements.begin(); - } - elementContainer::const_iterator end() const { - return _elements.end(); - } - size_t size() const { - return _elements.size(); - } - // FIXME : NOT VERY ELEGANT !!! - bool find (MElement *e) const { - if (e->getParent() && _parents.find(e->getParent()) != _parents.end()) return true; - return (_elements.find(e) != _elements.end()); - } - inline void insert (MElement *e) { - _elements.insert(e); - if (e->getParent()){ - _parents.insert(e->getParent()); - for (int i = 0; i < e->getParent()->getNumVertices(); i++){ - _vertices.insert(e->getParent()->getVertex(i)); + groupOfElements(){} + + groupOfElements (int dim, int physical) { + addPhysical (dim, physical); + } + + groupOfElements (GFace*); + + virtual void addPhysical(int dim, int physical) { + elementFilterTrivial filter; + addPhysical (dim, physical, filter); + } + + virtual void addElementary(GEntity *ge, const elementFilter &f); + + virtual void addPhysical(int dim, int physical, const elementFilter &); + + vertexContainer::const_iterator vbegin() const { + return _vertices.begin(); + } + vertexContainer::const_iterator vend() const { + return _vertices.end(); + } + + elementContainer::const_iterator begin() const { + return _elements.begin(); + } + elementContainer::const_iterator end() const { + return _elements.end(); + } + + size_t size() const { + return _elements.size(); + } + + // FIXME : NOT VERY ELEGANT !!! + bool find (MElement *e) const // if same parent but different physicals return true ?! + { + if (e->getParent() && _parents.find(e->getParent()) != _parents.end()) return true; + return (_elements.find(e) != _elements.end()); + } + + inline void insert (MElement *e) + { + + _elements.insert(e); + + if (e->getParent()){ + _parents.insert(e->getParent()); + for (int i = 0; i < e->getParent()->getNumVertices(); i++){ + _vertices.insert(e->getParent()->getVertex(i)); + } + } + else{ + for (int i = 0; i < e->getNumVertices(); i++){ + _vertices.insert(e->getVertex(i)); + } } } - else{ - for (int i = 0; i < e->getNumVertices(); i++){ - _vertices.insert(e->getVertex(i)); +}; + +// child elements in pElem restricted to elements who have parent in sElem +class groupOfLagMultElements : public groupOfElements +{ + + private : + + + void fillElementContainer(groupOfElements &pElem, groupOfElements &sElem) + { + groupOfElements::elementContainer::iterator itp = pElem.begin(); + for (;itp!=pElem.end(); itp++) + { + MElement *ep; + if ((*itp)->getParent()) + { + if (sElem.find(*itp)) insert((*itp)) ; // warning : find method used to check if parent is in sElem } + else std::cout << "groupOfLagMultElements : Warning, level set element has no parent ?! " << std::endl; } } + + public : + + groupOfLagMultElements(int dim, int physical, groupOfElements &sElem) : groupOfElements() + { + groupOfElements pElem(dim , physical); + fillElementContainer(pElem,sElem); + } + + groupOfLagMultElements(int dim, int physical, std::vector < groupOfElements *> sElem) : groupOfElements() + { + groupOfElements pElem(dim , physical); + for (int i;i < sElem.size() ; i ++) + { + fillElementContainer(pElem,(*sElem[i])); + } + } + }; + #endif -- GitLab