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