From e73ad88202f218b503c5ba652b8cc335c2891530 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Tue, 26 Mar 2013 11:01:28 +0100 Subject: [PATCH] Use assembleBoundaryFunctional() --- src/assemblers.cc | 19 ++++++++++--------- src/assemblers.hh | 12 ++++++++---- src/assemblers_tmpl.cc | 10 ++++++---- src/one-body-sample.cc | 8 ++++---- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/assemblers.cc b/src/assemblers.cc index 3b5d298b..005ec2ed 100644 --- a/src/assemblers.cc +++ b/src/assemblers.cc @@ -5,15 +5,15 @@ #include <dune/fufem/boundarypatch.hh> #include <dune/fufem/functions/constantfunction.hh> #include <dune/fufem/assemblers/localassemblers/neumannboundaryassembler.hh> -#include <dune/fufem/assemblers/boundaryfunctionalassembler.hh> #include <dune/tectonic/globalruinanonlinearity.hh> #include "assemblers.hh" // Assembles Neumann boundary term in f -template <class GridType, class GridView, class LocalVectorType, class FEBasis> -void assemble_neumann(GridView const &gridView, FEBasis const &feBasis, +template <class GridType, class GridView, class LocalVectorType, + class AssemblerType> +void assemble_neumann(GridView const &gridView, AssemblerType const &assembler, Dune::BitSetVector<1> const &neumannNodes, Dune::BlockVector<LocalVectorType> &f, Dune::VirtualFunction<double, double> const &neumann, @@ -27,14 +27,15 @@ void assemble_neumann(GridView const &gridView, FEBasis const &feBasis, SampleVector); NeumannBoundaryAssembler<GridType, LocalVectorType> neumannBoundaryAssembler( fNeumann); - BoundaryFunctionalAssembler<FEBasis>(feBasis, neumannBoundary) - .assemble(neumannBoundaryAssembler, f, true); + assembler.assembleBoundaryFunctional(neumannBoundaryAssembler, f, + neumannBoundary); } // Assembles constant 1-function on frictional boundary in nodalIntegrals -template <class GridType, class GridView, class LocalVectorType, class FEBasis> +template <class GridType, class GridView, class LocalVectorType, + class AssemblerType> Dune::shared_ptr<Dune::BlockVector<Dune::FieldVector<double, 1>>> -assemble_frictional(GridView const &gridView, FEBasis const &feBasis, +assemble_frictional(GridView const &gridView, AssemblerType const &assembler, Dune::BitSetVector<1> const &frictionalNodes) { typedef Dune::FieldVector<double, 1> Singleton; BoundaryPatch<GridView> const frictionalBoundary(gridView, frictionalNodes); @@ -43,8 +44,8 @@ assemble_frictional(GridView const &gridView, FEBasis const &feBasis, constantOneFunction); auto const nodalIntegrals = Dune::make_shared<Dune::BlockVector<Singleton>>(); - BoundaryFunctionalAssembler<FEBasis>(feBasis, frictionalBoundary) - .assemble(frictionalBoundaryAssembler, *nodalIntegrals, true); + assembler.assembleBoundaryFunctional(frictionalBoundaryAssembler, + *nodalIntegrals, frictionalBoundary); return nodalIntegrals; } diff --git a/src/assemblers.hh b/src/assemblers.hh index dd2a1cf2..d37caf16 100644 --- a/src/assemblers.hh +++ b/src/assemblers.hh @@ -8,18 +8,22 @@ #include <dune/common/shared_ptr.hh> #include <dune/istl/bvector.hh> +#include <dune/fufem/assemblers/assembler.hh> + #include <dune/tectonic/globalnonlinearity.hh> -template <class GridType, class GridView, class LocalVectorType, class FEBasis> -void assemble_neumann(GridView const &gridView, FEBasis const &feBasis, +template <class GridType, class GridView, class LocalVectorType, + class AssemblerType> +void assemble_neumann(GridView const &gridView, AssemblerType const &assembler, Dune::BitSetVector<1> const &neumannNodes, Dune::BlockVector<LocalVectorType> &f, Dune::VirtualFunction<double, double> const &neumann, double time); -template <class GridType, class GridView, class LocalVectorType, class FEBasis> +template <class GridType, class GridView, class LocalVectorType, + class AssemblerType> Dune::shared_ptr<Dune::BlockVector<Dune::FieldVector<double, 1>>> -assemble_frictional(GridView const &gridView, FEBasis const &feBasis, +assemble_frictional(GridView const &gridView, AssemblerType const &assembler, Dune::BitSetVector<1> const &frictionalNodes); template <class MatrixType, class VectorType> diff --git a/src/assemblers_tmpl.cc b/src/assemblers_tmpl.cc index 9418d1ba..e7f06cdd 100644 --- a/src/assemblers_tmpl.cc +++ b/src/assemblers_tmpl.cc @@ -18,15 +18,17 @@ typedef Dune::BlockVector<SmallVector> VectorType; typedef Dune::ALUGrid<DIM, DIM, Dune::simplex, Dune::nonconforming> GridType; typedef GridType::LeafGridView GridView; typedef P1NodalBasis<GridView, double> P1Basis; +typedef Assembler<P1Basis, P1Basis> AssemblerType; -template void assemble_neumann<GridType, GridView, SmallVector, P1Basis>( - GridView const &gridView, P1Basis const &feBasis, +template void assemble_neumann<GridType, GridView, SmallVector, AssemblerType>( + GridView const &gridView, AssemblerType const &assembler, Dune::BitSetVector<1> const &neumannNodes, Dune::BlockVector<SmallVector> &f, Dune::VirtualFunction<double, double> const &neumann, double time); + template Dune::shared_ptr<Dune::BlockVector<Dune::FieldVector<double, 1>>> -assemble_frictional<GridType, GridView, SmallVector, P1Basis>( - GridView const &gridView, P1Basis const &feBasis, +assemble_frictional<GridType, GridView, SmallVector, AssemblerType>( + GridView const &gridView, AssemblerType const &assembler, Dune::BitSetVector<1> const &frictionalNodes); template Dune::shared_ptr< diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc index b7e2a0fa..76b6424b 100644 --- a/src/one-body-sample.cc +++ b/src/one-body-sample.cc @@ -321,8 +321,8 @@ int main(int argc, char *argv[]) { massMatrixNorm); auto const nodalIntegrals = - assemble_frictional<GridType, GridView, SmallVector, P1Basis>( - leafView, p1Basis, frictionalNodes); + assemble_frictional<GridType, GridView, SmallVector>( + leafView, p1Assembler, frictionalNodes); // {{{ Initial conditions VectorType u_initial(finestSize); @@ -376,8 +376,8 @@ int main(int argc, char *argv[]) { auto const timesteps = parset.get<size_t>("timeSteps"); auto const tau = parset.get<double>("endOfTime") / timesteps; auto const createRHS = [&](double _time, VectorType &_ell) { - assemble_neumann<GridType, GridView, SmallVector, P1Basis>( - leafView, p1Basis, neumannNodes, _ell, neumannFunction, _time); + assemble_neumann<GridType, GridView, SmallVector>( + leafView, p1Assembler, neumannNodes, _ell, neumannFunction, _time); _ell += gravityFunctional; }; -- GitLab