v0.14.0
LinearFormsIntegrators.hpp
Go to the documentation of this file.
1 /** \file LinearFormsIntegrators.hpp
2  * \brief Linear forms integrators
3  * \ingroup mofem_form
4 
5 */
6 
7 #ifndef __LINEAR_FORMS_INTEGRATORS_HPP__
8 #define __LINEAR_FORMS_INTEGRATORS_HPP__
9 
11 
12 namespace MoFEM {
13 
14 /**
15  * @brief Linear integrator form
16  * @ingroup mofem_forms
17  *
18  * @tparam EleOp
19  * @tparam A
20  * @tparam I
21  */
22 template <typename EleOp>
23 template <AssemblyType A>
24 template <IntegrationType I>
25 struct FormsIntegrators<EleOp>::Assembly<A>::LinearForm {
26 
27  /**
28  * @brief Integrate \f$(v,f(\mathbf{x}))_\Omega\f$, f is a scalar
29  * @ingroup mofem_forms
30  *
31  * @note \f$f(\mathbf{x})\$ is scalar function of coordinates
32  *
33  * @tparam BASE_DIM
34  * @tparam FIELD_DIM
35  */
36  template <int BASE_DIM, int FIELD_DIM,
37  typename S = SourceFunctionSpecialization>
38  using OpSource =
39  OpSourceImpl<BASE_DIM, FIELD_DIM, I, typename S::template S<OpBase>>;
40 
41  /**
42  * @brief Vector field integrator \f$(v_i,f)_\Omega\f$, f is a vector
43  * @ingroup mofem_forms
44  *
45  * @tparam BASE_DIM
46  */
47  template <int BASE_DIM, int S = 1>
48  using OpBaseTimesScalar = OpBaseTimesScalarImpl<BASE_DIM, S, I, OpBase>;
49 
50  /** @deprecated use instead OpBaseTimesScalar
51  */
52  template <int BASE_DIM, int S = 1>
53  using OpBaseTimesScalarField = OpBaseTimesScalar<BASE_DIM, S>;
54 
55  /**
56  * @brief Vector field integrator \f$(v,f_i)_\Omega\f$, f is a vector
57  * @ingroup mofem_forms
58  *
59  * @tparam BASE_DIM
60  * @tparam FIELD_DIM
61  * @tparam 0
62  */
63  template <int BASE_DIM, int FIELD_DIM, int S>
64  using OpBaseTimesVector =
65  OpBaseTimesVectorImpl<BASE_DIM, FIELD_DIM, S, I, OpBase>;
66  //! [Source operator]
67 
68  //! [Grad times tensor]
69 
70  /**
71  * @brief Integrate \f$(v_{,i},f_{ij})_\Omega\f$, f is a vector
72  * @ingroup mofem_forms
73  *
74  * @note \f$f_{ij}\$ is tensor at integration points
75  *
76  * @tparam BASE_DIM
77  * @tparam FIELD_DIM
78  * @tparam SPACE_DIM
79  */
80  template <int BASE_DIM, int FIELD_DIM, int SPACE_DIM, int S = 1>
81  using OpGradTimesTensor =
83 
84  /**
85  * @brief Integrate \f$(v_{,i},f_{ij})_\Omega\f$, f is symmetric tensor
86  * @ingroup mofem_forms
87  *
88  * @note \f$f_{ij}\$ is tensor at integration points
89  *
90  * @tparam BASE_DIM
91  * @tparam FIELD_DIM
92  * @tparam SPACE_DIM
93  */
94  template <int BASE_DIM, int FIELD_DIM, int SPACE_DIM, int S = 1>
95  using OpGradTimesSymTensor =
97 
98  /**
99  * @brief Integrate \f$(\lambda_{ij,j},u_{i})_\Omega\f$
100  *
101  * @tparam BASE_DIM
102  * @tparam FIELD_DIM
103  * @tparam SPACE_DIM
104  */
105  template <int BASE_DIM, int FIELD_DIM, int SPACE_DIM,
106  CoordinateTypes CoordSys = CARTESIAN>
107  using OpMixDivTimesU =
109 
110  /**
111  * @brief Integrate \f$(\lambda_{ij},u_{i,j})_\Omega\f$
112  *
113  * @tparam SPACE_DIM
114  */
115  template <int SPACE_DIM>
116  using OpMixTensorTimesGradU = OpMixTensorTimesGradUImpl<SPACE_DIM, I, OpBase>;
117 
118  /**
119  * @brief Integrate \f$(u_{i},\lambda_{ij,j})_\Omega\f$
120  *
121  * @tparam SPACE_DIM
122  */
123  template <int SPACE_DIM>
124  using OpMixVecTimesDivLambda =
126 
127  /**
128  * @brief Multiply vector times normal on the face times scalar function
129  *
130  * This operator typically will be used to evaluate natural boundary
131  * conditions for mixed formulation.
132  *
133  * @tparam BASE_DIM
134  * @tparam SPACE_DIM
135  * @tparam OpBase
136  */
137  template <int SPACE_DIM>
138  using OpNormalMixVecTimesScalar =
140 
141  /**
142  * @brief Multiply vector times normal on the face times vector field
143  *
144  * This operator typically will be used to evaluate natural boundary
145  * conditions for mixed formulation.
146  *
147  * @tparam BASE_DIM
148  * @tparam SPACE_DIM
149  * @tparam OpBase
150  */
151  template <int SPACE_DIM>
152  using OpNormalMixVecTimesVectorField =
154 
155  /**
156  * @brief Convective term
157  *
158  * \f[
159  * (v, u_i \mathbf{y}_{,i})
160  * \f]
161  * where \f$\mathbf{y}\$ can be scalar or vector.
162  *
163  * @tparam BASE_DIM
164  * @tparam FIELD_DIM
165  * @tparam SPACE_DIM
166  */
167  template <int BASE_DIM, int FIELD_DIM, int SPACE_DIM>
168  using OpConvectiveTermRhs =
170 };
171 
172 } // namespace MoFEM
173 
174 #endif // __LINEAR_FORMS_INTEGRATORS_HPP__
MoFEM::OpNormalMixVecTimesScalarImpl
Multiply vector times normal on the face times scalar function.
Definition: LinearFormsIntegratorsImpl.hpp:378
CARTESIAN
@ CARTESIAN
Definition: definitions.h:115
OpConvectiveTermRhs
FormsIntegrators< DomainEleOp >::Assembly< A >::LinearForm< I >::OpConvectiveTermRhs< 1, FIELD_DIM, SPACE_DIM > OpConvectiveTermRhs
Definition: operators_tests.cpp:52
LinearFormsIntegratorsImpl.hpp
Linear forms integrators (implementation)
MoFEM::OpGradTimesTensorImpl
Definition: LinearFormsIntegratorsImpl.hpp:178
BASE_DIM
constexpr int BASE_DIM
Definition: dg_projection.cpp:15
CoordinateTypes
CoordinateTypes
Coodinate system.
Definition: definitions.h:114
FIELD_DIM
constexpr int FIELD_DIM
Definition: child_and_parent.cpp:15
EleOp
MoFEM::OpGradTimesSymTensorImpl
Definition: LinearFormsIntegratorsImpl.hpp:221
MoFEM
implementation of Data Operators for Forces and Sources
Definition: Common.hpp:10
SPACE_DIM
constexpr int SPACE_DIM
Definition: child_and_parent.cpp:16
MoFEM::OpConvectiveTermRhsImpl
Definition: LinearFormsIntegratorsImpl.hpp:455
MoFEM::OpMixDivTimesUImpl
Definition: LinearFormsIntegratorsImpl.hpp:243
OpGradTimesTensor
FormsIntegrators< DomainEleOp >::Assembly< A >::LinearForm< I >::OpGradTimesTensor< 1, FIELD_DIM, SPACE_DIM > OpGradTimesTensor
Definition: operators_tests.cpp:48
MoFEM::OpMixTensorTimesGradUImpl
Tensor field time gradient of vector field.
Definition: LinearFormsIntegratorsImpl.hpp:344
MoFEM::OpMixVecTimesDivLambdaImpl
Vector filed time divergence of tensor.
Definition: LinearFormsIntegratorsImpl.hpp:310
MoFEM::OpNormalMixVecTimesVectorFieldImpl
Multiply vector times normal on the face times vector field.
Definition: LinearFormsIntegratorsImpl.hpp:435