diff --git a/Solver/solverAlgorithms.h b/Solver/solverAlgorithms.h index 2126746254711822d93536f31cc7ce80e22edaac..0aacf467bc37f86bd3b1c575265de0e73968c550 100644 --- a/Solver/solverAlgorithms.h +++ b/Solver/solverAlgorithms.h @@ -187,6 +187,32 @@ class FilterDofComponent : public FilterDof } }; +// return true if the Dof is in a filled set +class FilterDofSet : public FilterDof +{ + protected: + std::set<Dof> _dofset; + public: + FilterDofSet() : FilterDof(){} + virtual ~FilterDofSet(){} + virtual bool operator()(Dof key) + { + std::set<Dof>::iterator itR = _dofset.find(key); + if(itR == _dofset.end()){ + return false; + } + return true; + } + virtual void addDof(Dof key) + { + _dofset.insert(key); + } + virtual void addDof(std::vector<Dof> &R) + { + for(int i=0;i<R.size();i++) + this->addDof(R[i]); + } +}; template<class Assembler> void FixNodalDofs(FunctionSpaceBase &space, MElement *e, Assembler &assembler, simpleFunction<typename Assembler::dataVec> &fct, @@ -214,7 +240,7 @@ template<class Assembler> void FixNodalDofs(FunctionSpaceBase &space, MElement * } template<class Iterator, class Assembler> void FixNodalDofs(FunctionSpaceBase &space, Iterator itbegin, - Iterator itend, Assembler &assembler, + Iterator itend, Assembler &assembler, simpleFunction<typename Assembler::dataVec> &fct, FilterDof &filter) {