IFEM  90A354
CompatibleOperators.h
Go to the documentation of this file.
1 //==============================================================================
11 //==============================================================================
12 
13 #ifndef COMPATIBLE_OPERATORS_H_
14 #define COMPATIBLE_OPERATORS_H_
15 
16 class FiniteElement;
17 class Tensor;
18 class Vec3;
19 
20 #include "MatVec.h"
21 #include "EqualOrderOperators.h"
22 
23 #include <array>
24 
30 {
31 public:
33  class Weak {
34  public:
42  static void Advection(std::vector<Matrix>& EM, const FiniteElement& fe,
43  const Vec3& AC,
44  const std::array<std::array<int,3>,3>& idx,
45  double scale = 1.0,
46  WeakOperators::ConvectionForm cnvForm = WeakOperators::CONVECTIVE);
47 
56  static void Convection(std::vector<Matrix>& EM, const FiniteElement& fe,
57  const Vec3& U, const Tensor& dUdX,
58  const std::array<std::array<int,3>,3>& idx,
59  double scale,
60  WeakOperators::ConvectionForm form = WeakOperators::CONVECTIVE);
61 
67  static void Gradient(std::vector<Matrix>& EM,
68  const FiniteElement& fe,
69  const std::array<int,3>& idx,
70  double scale = 1.0);
71 
76  static void ItgConstraint(std::vector<Matrix>& EM,
77  const FiniteElement& fe,
78  const std::array<int,3>& idx);
79 
87  static void Laplacian(std::vector<Matrix>& EM, const FiniteElement& fe,
88  const std::array<std::array<int,3>,3>& idx,
89  double scale = 1.0, bool stress = false);
90 
96  static void Mass(std::vector<Matrix>& EM,
97  const FiniteElement& fe,
98  const std::array<std::array<int,3>,3>& idx,
99  double scale = 1.0);
100 
106  static void Source(Vectors& EV, const FiniteElement& fe,
107  const std::array<int,3>& idx, double scale = 1.0);
108 
115  static void Source(Vectors& EV, const FiniteElement& fe,
116  const Vec3& f, const std::array<int,3>& idx,
117  double scale = 1.0);
118  };
119 
121  class Residual
122  {
123  public:
133  static void Convection(Vectors& EV, const FiniteElement& fe,
134  const Vec3& U, const Tensor& dUdX,
135  const Vec3& UC,
136  const std::array<int,3>& idx,
137  double scale,
138  WeakOperators::ConvectionForm form = WeakOperators::CONVECTIVE);
139 
145  static void Gradient(Vectors& EV, const FiniteElement& fe,
146  const std::array<int,3>& idx, double scale = 1.0);
147 
155  static void Laplacian(Vectors& EV, const FiniteElement& fe,
156  const Tensor& dUdX,
157  const std::array<int,3>& idx,
158  double scale = 1.0,
159  bool stress = false);
160  };
161 };
162 
163 #endif
Various equal-ordered discrete operators.
ConvectionForm
Enum for the form of the convection term.
Definition: EqualOrderOperators.h:26
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
Common weak residual operators using div-compatible discretizations.
Definition: CompatibleOperators.h:122
static void Gradient(Vectors &EV, const FiniteElement &fe, const std::array< int, 3 > &idx, double scale=1.0)
Compute a gradient term.
Definition: CompatibleOperators.C:190
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: CompatibleOperators.C:199
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: CompatibleOperators.C:152
Common weak operators using div-compatible discretizations.
Definition: CompatibleOperators.h:33
static void Mass(std::vector< Matrix > &EM, const FiniteElement &fe, const std::array< std::array< int, 3 >, 3 > &idx, double scale=1.0)
Compute a mass term.
Definition: CompatibleOperators.C:122
static void Source(Vectors &EV, const FiniteElement &fe, const std::array< int, 3 > &idx, double scale=1.0)
Compute a scalar source term.
Definition: CompatibleOperators.C:142
static void ItgConstraint(std::vector< Matrix > &EM, const FiniteElement &fe, const std::array< int, 3 > &idx)
Compute an integration constraint.
Definition: CompatibleOperators.C:92
static void Laplacian(std::vector< Matrix > &EM, const FiniteElement &fe, const std::array< std::array< int, 3 >, 3 > &idx, double scale=1.0, bool stress=false)
Compute a laplacian.
Definition: CompatibleOperators.C:102
static void Convection(std::vector< Matrix > &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: CompatibleOperators.C:44
static void Advection(std::vector< Matrix > &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: CompatibleOperators.C:19
static void Gradient(std::vector< Matrix > &EM, const FiniteElement &fe, const std::array< int, 3 > &idx, double scale=1.0)
Compute a gradient term.
Definition: CompatibleOperators.C:81
Common operators using div-compatible discretizations.
Definition: CompatibleOperators.h:30
Class representing a finite element.
Definition: FiniteElement.h:29
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