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 
21 class FiniteElement;
22 class Tensor;
23 class Vec3;
24 
25 
32 {
33 public:
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 
117  class Residual
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:26
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition: ImmersedBoundaries.h:29
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