From 2cc7045ee388e3254f1b688fbcf5a79726a2c229 Mon Sep 17 00:00:00 2001 From: Van Dung Nguyen <vandung.nguyen@ulg.ac.be> Date: Wed, 18 Jan 2017 12:45:47 +0000 Subject: [PATCH] elemente erosion --- Solver/solverAlgorithms.h | 58 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/Solver/solverAlgorithms.h b/Solver/solverAlgorithms.h index 78d5a8472b..0e74adc5a3 100644 --- a/Solver/solverAlgorithms.h +++ b/Solver/solverAlgorithms.h @@ -36,6 +36,27 @@ template<class Iterator, class Assembler> void Assemble(BilinearTermBase &term, } } +template<class Iterator, class Assembler> void Assemble(BilinearTermBase &term, FunctionSpaceBase &space, + Iterator itbegin, Iterator itend, + QuadratureBase &integrator, Assembler &assembler, + elementFilter& efilter) + // symmetric +{ + fullMatrix<typename Assembler::dataMat> localMatrix; + std::vector<Dof> R; + for (Iterator it = itbegin; it != itend; ++it){ + MElement *e = *it; + if (efilter(e)){ + R.clear(); + IntPt *GP; + int npts = integrator.getIntPoints(e, &GP); + term.get(e, npts, GP, localMatrix); //localMatrix.print(); + space.getKeys(e, R); + assembler.assemble(R, localMatrix); + } + } +} + template<class Assembler> void Assemble(BilinearTermBase &term, FunctionSpaceBase &space, MElement *e, QuadratureBase &integrator, Assembler &assembler) // symmetric { @@ -110,6 +131,26 @@ template<class Iterator, class Assembler> void Assemble(LinearTermBase<double> & } } +template<class Iterator, class Assembler> void Assemble(LinearTermBase<double> &term, FunctionSpaceBase &space, + Iterator itbegin, Iterator itend, + QuadratureBase &integrator, Assembler &assembler, + elementFilter& efilter) +{ + fullVector<typename Assembler::dataMat> localVector; + std::vector<Dof> R; + for (Iterator it = itbegin; it != itend; ++it){ + MElement *e = *it; + if (efilter(e)){ + R.clear(); + IntPt *GP; + int npts = integrator.getIntPoints(e, &GP); + term.get(e, npts, GP, localVector); //localVector.print(); + space.getKeys(e, R); + assembler.assemble(R, localVector); + } + } +} + template<class Assembler> void Assemble(LinearTermBase<double> &term, FunctionSpaceBase &space, MElement *e, QuadratureBase &integrator, Assembler &assembler) { @@ -136,6 +177,23 @@ template<class Iterator, class dataMat> void Assemble(ScalarTermBase<double> &te } } +template<class Iterator, class dataMat> void Assemble(ScalarTermBase<double> &term, + Iterator itbegin, Iterator itend, + QuadratureBase &integrator, dataMat & val, + elementFilter& efilter) +{ + dataMat localval; + for (Iterator it = itbegin; it != itend; ++it){ + MElement *e = *it; + if (efilter(e)){ + IntPt *GP; + int npts = integrator.getIntPoints(e, &GP); + term.get(e, npts, GP, localval); + val += localval; + } + } +} + template<class Iterator, class dataMat> void Assemble(ScalarTermBase<double> &term, MElement *e, QuadratureBase &integrator, dataMat & val) { -- GitLab