IFEM  90A354
EqualOrderOperators.h
Go to the documentation of this file.
1 //==============================================================================
11 //==============================================================================
12 
13 #ifndef EQUAL_ORDER_OPERATORS_H
14 #define EQUAL_ORDER_OPERATORS_H
15 
16 class Vec3;
17 
18 #include "FiniteElement.h"
19 #include "MatVec.h"
20 
21 
22 namespace WeakOperators
23 {
26  {
27  CONVECTIVE = 0,
29  SKEWSYMMETRIC = 2
30  };
31 }
32 
33 
38 {
39 public:
41  class Weak {
42  public:
50  static void Advection(Matrix& EM, const FiniteElement& fe,
51  const Vec3& AC, double scale=1.0,
52  WeakOperators::ConvectionForm form = WeakOperators::CONVECTIVE,
53  int basis=1);
54 
63  static void Convection(Matrix& EM, const FiniteElement& fe,
64  const Vec3& U, const Tensor& dUdX, double scale,
65  WeakOperators::ConvectionForm form=WeakOperators::CONVECTIVE,
66  int basis=1);
67 
74  static void Divergence(Matrix& EM, const FiniteElement& fe,
75  double scale=1.0, int basis=1, int tbasis=1);
76 
83  static void Divergence(Vector& EV, const FiniteElement& fe,
84  const Vec3& D, double scale=1.0, int basis=1);
85 
92  static void Gradient(Matrix& EM, const FiniteElement& fe,
93  double scale=1.0, int basis=1, int tbasis=1);
94 
101  static void Laplacian(Matrix& EM, const FiniteElement& fe,
102  double scale=1.0, bool stress=false, int basis=1);
103 
109  static void Stress(Matrix& EM, const FiniteElement& fe,
110  double scale=1.0, int basis=1);
111 
118  static void LaplacianCoeff(Matrix& EM, const Matrix& K, const FiniteElement& fe,
119  double scale=1.0, int basis=1);
120 
126  static void ItgConstraint(Matrix& EM, const FiniteElement& fe,
127  double scale = 1.0, int basis = 1);
128 
134  static void Mass(Matrix& EM, const FiniteElement& fe,
135  double scale=1.0, int basis=1);
136 
143  static void Source(Vector& EV, const FiniteElement& fe,
144  double scale=1.0, int cmp=1, int basis=1);
145 
152  static void Source(Vector& EV, const FiniteElement& fe,
153  const Vec3& f, double scale=1.0, int basis=1);
154  };
155 
157  class Residual {
158  public:
166  static void Advection(Vector& EV, const FiniteElement& fe,
167  const Vec3& AC, const Tensor& g,
168  double scale = 1.0, int basis=1);
169 
179  static void Convection(Vector& EV, const FiniteElement& fe,
180  const Vec3& U, const Tensor& dUdX, const Vec3& UC,
181  double scale,
182  WeakOperators::ConvectionForm form=WeakOperators::CONVECTIVE,
183  int basis=1);
184 
191  static void Divergence(Vector& EV, const FiniteElement& fe,
192  const Tensor& dUdX, double scale=1.0,
193  size_t basis=1);
194 
200  static void Gradient(Vector& EV, const FiniteElement& fe,
201  double scale=1.0, int basis=1);
202 
209  static void Laplacian(Vector& EV, const FiniteElement& fe,
210  const Vec3& dUdX, double scale = 1.0,
211  int basis = 1);
212 
220  static void Laplacian(Vector& EV, const FiniteElement& fe,
221  const Tensor& dUdX, double scale = 1.0,
222  bool stress = false, int basis = 1);
223  };
224 };
225 
226 #endif
static SystemMatrix * K
Pointer to coefficient matrix A.
Definition: EigSolver.C:91
ConvectionForm
Enum for the form of the convection term.
Definition: EqualOrderOperators.h:26
@ CONSERVATIVE
-u_i u_j v_i,j
Definition: EqualOrderOperators.h:28
@ SKEWSYMMETRIC
(u_i u_j,i v_j - u_i u_j v_i,j)/2
Definition: EqualOrderOperators.h:29
@ CONVECTIVE
u_i u_j,i v_j
Definition: EqualOrderOperators.h:27
Finite element quantities at an integration point.
Global algebraic operations on index 1-based matrices and vectors.
Common weak residual operators using equal-ordered discretizations.
Definition: EqualOrderOperators.h:157
static void Laplacian(Vector &EV, const FiniteElement &fe, const Vec3 &dUdX, double scale=1.0, int basis=1)
Compute a laplacian term in a residual vector.
Definition: EqualOrderOperators.C:327
static void Advection(Vector &EV, const FiniteElement &fe, const Vec3 &AC, const Tensor &g, double scale=1.0, int basis=1)
Compute an advection term.
Definition: EqualOrderOperators.C:260
static void Convection(Vector &EV, const FiniteElement &fe, const Vec3 &U, const Tensor &dUdX, const Vec3 &UC, double scale, WeakOperators::ConvectionForm form=WeakOperators::CONVECTIVE, int basis=1)
Compute a convection term in a residual vector.
Definition: EqualOrderOperators.C:271
static void Gradient(Vector &EV, const FiniteElement &fe, double scale=1.0, int basis=1)
Compute a gradient term.
Definition: EqualOrderOperators.C:315
static void Divergence(Vector &EV, const FiniteElement &fe, const Tensor &dUdX, double scale=1.0, size_t basis=1)
Compute a divergence term in a residual vector.
Definition: EqualOrderOperators.C:306
Common weak operators using equal-ordered discretizations.
Definition: EqualOrderOperators.h:41
static void ItgConstraint(Matrix &EM, const FiniteElement &fe, double scale=1.0, int basis=1)
Compute an integration constraint.
Definition: EqualOrderOperators.C:225
static void Advection(Matrix &EM, const FiniteElement &fe, const Vec3 &AC, double scale=1.0, WeakOperators::ConvectionForm form=WeakOperators::CONVECTIVE, int basis=1)
Compute an advection term.
Definition: EqualOrderOperators.C:72
static void Convection(Matrix &EM, const FiniteElement &fe, const Vec3 &U, const Tensor &dUdX, double scale, WeakOperators::ConvectionForm form=WeakOperators::CONVECTIVE, int basis=1)
Compute a (nonlinear) convection term.
Definition: EqualOrderOperators.C:104
static void LaplacianCoeff(Matrix &EM, const Matrix &K, const FiniteElement &fe, double scale=1.0, int basis=1)
Compute a heteregenous coefficient laplacian.
Definition: EqualOrderOperators.C:204
static void Stress(Matrix &EM, const FiniteElement &fe, double scale=1.0, int basis=1)
Compute a stress operator.
Definition: EqualOrderOperators.C:188
static void Divergence(Matrix &EM, const FiniteElement &fe, double scale=1.0, int basis=1, int tbasis=1)
Compute a divergence term.
Definition: EqualOrderOperators.C:152
static void Laplacian(Matrix &EM, const FiniteElement &fe, double scale=1.0, bool stress=false, int basis=1)
Compute a laplacian.
Definition: EqualOrderOperators.C:176
static void Source(Vector &EV, const FiniteElement &fe, double scale=1.0, int cmp=1, int basis=1)
Compute a source term.
Definition: EqualOrderOperators.C:236
static void Gradient(Matrix &EM, const FiniteElement &fe, double scale=1.0, int basis=1, int tbasis=1)
Compute a gradient term for a (potentially mixed) vector/scalar field.
Definition: EqualOrderOperators.C:159
static void Mass(Matrix &EM, const FiniteElement &fe, double scale=1.0, int basis=1)
Compute a mass term.
Definition: EqualOrderOperators.C:214
Common discrete operators using equal-ordered discretizations.
Definition: EqualOrderOperators.h:38
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
A vector class with some added algebraic operations.
Definition: matrix.h:64