IFEM 90A354
PiolaOperators.h
Go to the documentation of this file.
1//==============================================================================
11//==============================================================================
12
13#ifndef PIOLA_OPERATORS_H_
14#define PIOLA_OPERATORS_H_
15
16#include "MatVec.h"
17#include "EqualOrderOperators.h"
18
19#include <array>
20
21class FiniteElement;
22class Tensor;
23class Vec3;
24
25
32{
33public:
35 class Weak
36 {
37 public:
45 static void Advection(Matrices& EM, const FiniteElement& fe,
46 const Vec3& AC,
47 const std::array<std::array<int, 3>, 3>& idx,
48 double scale = 1.0,
49 WeakOperators::ConvectionForm cnvForm = WeakOperators::CONVECTIVE);
50
59 static void Convection(Matrices& EM, const FiniteElement& fe,
60 const Vec3& U, const Tensor& dUdX,
61 const std::array<std::array<int, 3>, 3>& idx,
62 double scale,
63 WeakOperators::ConvectionForm form = WeakOperators::CONVECTIVE);
64
70 static void Gradient(Matrices& EM,
71 const FiniteElement& fe,
72 std::array<int,3>& idx,
73 double scale = 1.0);
74
79 static void ItgConstraint(std::vector<Matrix>& EM,
80 const FiniteElement& fe,
81 const std::array<int,3>& idx);
82
90 static void Laplacian(Matrices& EM,
91 const FiniteElement& fe,
92 const std::array<std::array<int,3>,3>& idx,
93 double scale, bool stress);
94
100 static void Mass(Matrices& EM,
101 const FiniteElement& fe,
102 const std::array<std::array<int,3>,3>& idx,
103 double scale);
104
111 static void Source(Vectors& EV, const FiniteElement& fe,
112 const Vec3& f, const std::array<int,3>& idx,
113 double scale);
114 };
115
118 {
119 public:
129 static void Convection(Vectors& EV, const FiniteElement& fe,
130 const Vec3& U, const Tensor& dUdX,
131 const Vec3& UC,
132 const std::array<int,3>& idx, double scale,
133 WeakOperators::ConvectionForm form = WeakOperators::CONVECTIVE);
134
140 static void Gradient(Vectors& EV, const FiniteElement& fe,
141 const std::array<int,3>& idx, double scale = 1.0);
142
150 static void Laplacian(Vectors& EV, const FiniteElement& fe,
151 const Tensor& dUdX,
152 const std::array<int, 3>& idx, double scale = 1.0,
153 bool stress = false);
154 };
155
161 static void Copy(Matrices& EM,
162 const FiniteElement& fe,
163 const std::array<std::array<int,3>,3>& idx,
164 const Matrix& A);
165
171 static void Copy(Vectors& EV,
172 const FiniteElement& fe,
173 const std::array<int,3>& idx,
174 const RealArray& V);
175};
176
177#endif
Various equal-ordered discrete operators.
ConvectionForm
Enum for the form of the convection term.
Definition EqualOrderOperators.h:27
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition ImmersedBoundaries.h:32
Global algebraic operations on index 1-based matrices and vectors.
std::vector< Vector > Vectors
An array of real-valued vectors with algebraic operations.
Definition MatVec.h:37
std::vector< Matrix > Matrices
An array of real-valued matrices with algebraic operations.
Definition MatVec.h:39
Class representing a finite element.
Definition FiniteElement.h:29
Common weak residual operators using div-compatible discretizations.
Definition PiolaOperators.h:118
static void Gradient(Vectors &EV, const FiniteElement &fe, const std::array< int, 3 > &idx, double scale=1.0)
Compute a gradient term.
Definition PiolaOperators.C:169
static void Convection(Vectors &EV, const FiniteElement &fe, const Vec3 &U, const Tensor &dUdX, const Vec3 &UC, const std::array< int, 3 > &idx, double scale, WeakOperators::ConvectionForm form=WeakOperators::CONVECTIVE)
Compute a convection term in a residual vector.
Definition PiolaOperators.C:149
static void Laplacian(Vectors &EV, const FiniteElement &fe, const Tensor &dUdX, const std::array< int, 3 > &idx, double scale=1.0, bool stress=false)
Compute a laplacian term in a residual vector.
Definition PiolaOperators.C:183
Common weak operators using Piola mapped discretizations.
Definition PiolaOperators.h:36
static void Gradient(Matrices &EM, const FiniteElement &fe, std::array< int, 3 > &idx, double scale=1.0)
Compute a gradient term.
Definition PiolaOperators.C:79
static void Convection(Matrices &EM, const FiniteElement &fe, const Vec3 &U, const Tensor &dUdX, const std::array< std::array< int, 3 >, 3 > &idx, double scale, WeakOperators::ConvectionForm form=WeakOperators::CONVECTIVE)
Compute a (nonlinear) convection term.
Definition PiolaOperators.C:54
static void Mass(Matrices &EM, const FiniteElement &fe, const std::array< std::array< int, 3 >, 3 > &idx, double scale)
Compute a mass term.
Definition PiolaOperators.C:126
static void Source(Vectors &EV, const FiniteElement &fe, const Vec3 &f, const std::array< int, 3 > &idx, double scale)
Compute a vector-source term.
Definition PiolaOperators.C:137
static void Laplacian(Matrices &EM, const FiniteElement &fe, const std::array< std::array< int, 3 >, 3 > &idx, double scale, bool stress)
Compute a laplacian.
Definition PiolaOperators.C:111
static void ItgConstraint(std::vector< Matrix > &EM, const FiniteElement &fe, const std::array< int, 3 > &idx)
Compute an integration constraint.
Definition PiolaOperators.C:102
static void Advection(Matrices &EM, const FiniteElement &fe, const Vec3 &AC, const std::array< std::array< int, 3 >, 3 > &idx, double scale=1.0, WeakOperators::ConvectionForm cnvForm=WeakOperators::CONVECTIVE)
Compute an advection term.
Definition PiolaOperators.C:36
Common operators using Piola mapped discretizations.
Definition PiolaOperators.h:32
static void Copy(Matrices &EM, const FiniteElement &fe, const std::array< std::array< int, 3 >, 3 > &idx, const Matrix &A)
Add the full Piola operator to the blocks.
Definition PiolaOperators.C:200
Simple class for representing a non-symmetric second-order tensor.
Definition Tensor.h:28
Simple class for representing a point in 3D space.
Definition Vec3.h:27