Skip to content
Snippets Groups Projects
Commit e73ad882 authored by Elias Pipping's avatar Elias Pipping Committed by Elias Pipping
Browse files

Use assembleBoundaryFunctional()

parent f8c8ae82
No related branches found
No related tags found
No related merge requests found
...@@ -5,15 +5,15 @@ ...@@ -5,15 +5,15 @@
#include <dune/fufem/boundarypatch.hh> #include <dune/fufem/boundarypatch.hh>
#include <dune/fufem/functions/constantfunction.hh> #include <dune/fufem/functions/constantfunction.hh>
#include <dune/fufem/assemblers/localassemblers/neumannboundaryassembler.hh> #include <dune/fufem/assemblers/localassemblers/neumannboundaryassembler.hh>
#include <dune/fufem/assemblers/boundaryfunctionalassembler.hh>
#include <dune/tectonic/globalruinanonlinearity.hh> #include <dune/tectonic/globalruinanonlinearity.hh>
#include "assemblers.hh" #include "assemblers.hh"
// Assembles Neumann boundary term in f // Assembles Neumann boundary term in f
template <class GridType, class GridView, class LocalVectorType, class FEBasis> template <class GridType, class GridView, class LocalVectorType,
void assemble_neumann(GridView const &gridView, FEBasis const &feBasis, class AssemblerType>
void assemble_neumann(GridView const &gridView, AssemblerType const &assembler,
Dune::BitSetVector<1> const &neumannNodes, Dune::BitSetVector<1> const &neumannNodes,
Dune::BlockVector<LocalVectorType> &f, Dune::BlockVector<LocalVectorType> &f,
Dune::VirtualFunction<double, double> const &neumann, Dune::VirtualFunction<double, double> const &neumann,
...@@ -27,14 +27,15 @@ void assemble_neumann(GridView const &gridView, FEBasis const &feBasis, ...@@ -27,14 +27,15 @@ void assemble_neumann(GridView const &gridView, FEBasis const &feBasis,
SampleVector); SampleVector);
NeumannBoundaryAssembler<GridType, LocalVectorType> neumannBoundaryAssembler( NeumannBoundaryAssembler<GridType, LocalVectorType> neumannBoundaryAssembler(
fNeumann); fNeumann);
BoundaryFunctionalAssembler<FEBasis>(feBasis, neumannBoundary) assembler.assembleBoundaryFunctional(neumannBoundaryAssembler, f,
.assemble(neumannBoundaryAssembler, f, true); neumannBoundary);
} }
// Assembles constant 1-function on frictional boundary in nodalIntegrals // 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>>> 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) { Dune::BitSetVector<1> const &frictionalNodes) {
typedef Dune::FieldVector<double, 1> Singleton; typedef Dune::FieldVector<double, 1> Singleton;
BoundaryPatch<GridView> const frictionalBoundary(gridView, frictionalNodes); BoundaryPatch<GridView> const frictionalBoundary(gridView, frictionalNodes);
...@@ -43,8 +44,8 @@ assemble_frictional(GridView const &gridView, FEBasis const &feBasis, ...@@ -43,8 +44,8 @@ assemble_frictional(GridView const &gridView, FEBasis const &feBasis,
constantOneFunction); constantOneFunction);
auto const nodalIntegrals = Dune::make_shared<Dune::BlockVector<Singleton>>(); auto const nodalIntegrals = Dune::make_shared<Dune::BlockVector<Singleton>>();
BoundaryFunctionalAssembler<FEBasis>(feBasis, frictionalBoundary) assembler.assembleBoundaryFunctional(frictionalBoundaryAssembler,
.assemble(frictionalBoundaryAssembler, *nodalIntegrals, true); *nodalIntegrals, frictionalBoundary);
return nodalIntegrals; return nodalIntegrals;
} }
......
...@@ -8,18 +8,22 @@ ...@@ -8,18 +8,22 @@
#include <dune/common/shared_ptr.hh> #include <dune/common/shared_ptr.hh>
#include <dune/istl/bvector.hh> #include <dune/istl/bvector.hh>
#include <dune/fufem/assemblers/assembler.hh>
#include <dune/tectonic/globalnonlinearity.hh> #include <dune/tectonic/globalnonlinearity.hh>
template <class GridType, class GridView, class LocalVectorType, class FEBasis> template <class GridType, class GridView, class LocalVectorType,
void assemble_neumann(GridView const &gridView, FEBasis const &feBasis, class AssemblerType>
void assemble_neumann(GridView const &gridView, AssemblerType const &assembler,
Dune::BitSetVector<1> const &neumannNodes, Dune::BitSetVector<1> const &neumannNodes,
Dune::BlockVector<LocalVectorType> &f, Dune::BlockVector<LocalVectorType> &f,
Dune::VirtualFunction<double, double> const &neumann, Dune::VirtualFunction<double, double> const &neumann,
double time); 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>>> 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); Dune::BitSetVector<1> const &frictionalNodes);
template <class MatrixType, class VectorType> template <class MatrixType, class VectorType>
......
...@@ -18,15 +18,17 @@ typedef Dune::BlockVector<SmallVector> VectorType; ...@@ -18,15 +18,17 @@ typedef Dune::BlockVector<SmallVector> VectorType;
typedef Dune::ALUGrid<DIM, DIM, Dune::simplex, Dune::nonconforming> GridType; typedef Dune::ALUGrid<DIM, DIM, Dune::simplex, Dune::nonconforming> GridType;
typedef GridType::LeafGridView GridView; typedef GridType::LeafGridView GridView;
typedef P1NodalBasis<GridView, double> P1Basis; typedef P1NodalBasis<GridView, double> P1Basis;
typedef Assembler<P1Basis, P1Basis> AssemblerType;
template void assemble_neumann<GridType, GridView, SmallVector, P1Basis>( template void assemble_neumann<GridType, GridView, SmallVector, AssemblerType>(
GridView const &gridView, P1Basis const &feBasis, GridView const &gridView, AssemblerType const &assembler,
Dune::BitSetVector<1> const &neumannNodes, Dune::BitSetVector<1> const &neumannNodes,
Dune::BlockVector<SmallVector> &f, Dune::BlockVector<SmallVector> &f,
Dune::VirtualFunction<double, double> const &neumann, double time); Dune::VirtualFunction<double, double> const &neumann, double time);
template Dune::shared_ptr<Dune::BlockVector<Dune::FieldVector<double, 1>>> template Dune::shared_ptr<Dune::BlockVector<Dune::FieldVector<double, 1>>>
assemble_frictional<GridType, GridView, SmallVector, P1Basis>( assemble_frictional<GridType, GridView, SmallVector, AssemblerType>(
GridView const &gridView, P1Basis const &feBasis, GridView const &gridView, AssemblerType const &assembler,
Dune::BitSetVector<1> const &frictionalNodes); Dune::BitSetVector<1> const &frictionalNodes);
template Dune::shared_ptr< template Dune::shared_ptr<
......
...@@ -321,8 +321,8 @@ int main(int argc, char *argv[]) { ...@@ -321,8 +321,8 @@ int main(int argc, char *argv[]) {
massMatrixNorm); massMatrixNorm);
auto const nodalIntegrals = auto const nodalIntegrals =
assemble_frictional<GridType, GridView, SmallVector, P1Basis>( assemble_frictional<GridType, GridView, SmallVector>(
leafView, p1Basis, frictionalNodes); leafView, p1Assembler, frictionalNodes);
// {{{ Initial conditions // {{{ Initial conditions
VectorType u_initial(finestSize); VectorType u_initial(finestSize);
...@@ -376,8 +376,8 @@ int main(int argc, char *argv[]) { ...@@ -376,8 +376,8 @@ int main(int argc, char *argv[]) {
auto const timesteps = parset.get<size_t>("timeSteps"); auto const timesteps = parset.get<size_t>("timeSteps");
auto const tau = parset.get<double>("endOfTime") / timesteps; auto const tau = parset.get<double>("endOfTime") / timesteps;
auto const createRHS = [&](double _time, VectorType &_ell) { auto const createRHS = [&](double _time, VectorType &_ell) {
assemble_neumann<GridType, GridView, SmallVector, P1Basis>( assemble_neumann<GridType, GridView, SmallVector>(
leafView, p1Basis, neumannNodes, _ell, neumannFunction, _time); leafView, p1Assembler, neumannNodes, _ell, neumannFunction, _time);
_ell += gravityFunctional; _ell += gravityFunctional;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment