FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
mean_filter_assembler.hpp
1// FEAT3: Finite Element Analysis Toolbox, Version 3
2// Copyright (C) 2010 by Stefan Turek & the FEAT group
3// FEAT3 is released under the GNU General Public License version 3,
4// see the file 'copyright.txt' in the top level directory for details.
5
6#pragma once
7
9#include <kernel/lafem/mean_filter.hpp>
10#include <kernel/assembly/linear_functional_assembler.hpp>
11#include <kernel/assembly/interpolator.hpp>
12#include <kernel/assembly/common_functionals.hpp>
13#include <kernel/analytic/common.hpp>
14
15namespace FEAT
16{
17 namespace Assembly
18 {
27 {
28 public:
41 template<typename DataType_, typename IndexType_, typename Space_>
42 static void assemble(
45 const Space_& space, const String& cubature_name)
46 {
47 Cubature::DynamicFactory cubature_factory(cubature_name);
48
49 assemble(vec_prim, vec_dual, space, cubature_factory);
50 }
51
64 template<typename DataType_, typename IndexType_, typename Space_>
65 static void assemble(
68 const Space_& space, const Cubature::DynamicFactory& cubature_factory)
69 {
70 // allocate primal and dual vectors
71 vec_prim = LAFEM::DenseVector<DataType_, IndexType_>(space.get_num_dofs(), DataType_(0));
72 vec_dual = LAFEM::DenseVector<DataType_, IndexType_>(space.get_num_dofs(), DataType_(0));
73
74 // create a constant 1-function and its corresponding force functional
76 Assembly::Common::ForceFunctional<decltype(one_func)> one_force(one_func);
77
78 // interpolate 1-function into vector v
79 Assembly::Interpolator::project(vec_prim, one_func, space);
80
81 // assemble 1-function force into vector w
82 Assembly::LinearFunctionalAssembler::assemble_vector(vec_dual, one_force, space, cubature_factory);
83 }
84
103 template<typename DataType_, typename IndexType_, typename Space_>
104 static void assemble(
106 const Space_& space, const String& cubature_name,
107 const DataType_ sol_mean = DataType_(0))
108 {
109 Cubature::DynamicFactory cubature_factory(cubature_name);
110 assemble(filter, space, cubature_factory, sol_mean);
111 }
112
131 template<typename DataType_, typename IndexType_, typename Space_>
132 static void assemble(
134 const Space_& space, const Cubature::DynamicFactory& cubature_factory,
135 const DataType_ sol_mean = DataType_(0))
136 {
137 // allocate primal and dual vectors
139
140 // assemble vectors
141 assemble(vec_prim, vec_dual, space, cubature_factory);
142
143 // create the filter
144 filter = LAFEM::MeanFilter<DataType_, IndexType_>(std::move(vec_prim), std::move(vec_dual), sol_mean);
145 }
146 }; // class MeanFilterAssembler
147 } // namespace Assembly
148} // namespace FEAT
FEAT Kernel base header.
Constant Analytic function.
Definition: common.hpp:691
Force functional implementation.
static void project(LAFEM::DenseVector< DT_, IT_ > &vector, const Function_ &function, const Space_ &space)
Interpolates a scalar function.
static void assemble_vector(Vector_ &vector, const Functional_ &functional, const Space_ &space, const CubatureFactory_ &cubature_factory, typename Vector_::DataType alpha=typename Vector_::DataType(1))
Assembles a linear functional into a vector.
static void assemble(LAFEM::MeanFilter< DataType_, IndexType_ > &filter, const Space_ &space, const Cubature::DynamicFactory &cubature_factory, const DataType_ sol_mean=DataType_(0))
Assembles an integral mean filter.
static void assemble(LAFEM::DenseVector< DataType_, IndexType_ > &vec_prim, LAFEM::DenseVector< DataType_, IndexType_ > &vec_dual, const Space_ &space, const String &cubature_name)
Assembles an integral mean filter.
static void assemble(LAFEM::DenseVector< DataType_, IndexType_ > &vec_prim, LAFEM::DenseVector< DataType_, IndexType_ > &vec_dual, const Space_ &space, const Cubature::DynamicFactory &cubature_factory)
Assembles an integral mean filter.
static void assemble(LAFEM::MeanFilter< DataType_, IndexType_ > &filter, const Space_ &space, const String &cubature_name, const DataType_ sol_mean=DataType_(0))
Assembles an integral mean filter.
Dense data vector class template.
Mean Filter class template.
Definition: mean_filter.hpp:22
String class implementation.
Definition: string.hpp:46
FEAT namespace.
Definition: adjactor.hpp:12