33 if (tensorCoeff_.valid())
return;
35 if (!scalarCoeff_.valid())
return;
37 tensorCoeff_ +=
tensor::I*scalarCoeff_.S();
54 const LagrangianSp<vector>& coeff
57 tmp<LagrangianSp<
vector>>::refCount(),
58 scalarCoeff_(coeff.scalarCoeff_),
59 tensorCoeff_(coeff.tensorCoeff_)
65 LagrangianSp<vector>& coeff,
69 scalarCoeff_(coeff.scalarCoeff_, reuse),
70 tensorCoeff_(coeff.tensorCoeff_, reuse)
76 tmp<LagrangianSp<
vector>>::refCount(),
77 scalarCoeff_(move(coeff.scalarCoeff_)),
78 tensorCoeff_(move(coeff.tensorCoeff_))
86 return scalarCoeff_.eqn();
94 || tensorCoeff_.valid();
100 scalarCoeff_.negate();
101 tensorCoeff_.negate();
110 ? tmp<LagrangianCoeff<scalar, true>>
112 new LagrangianCoeff<scalar, true>
115 (1.0/3.0)*
tr(tensorCoeff_.S())
118 : tmp<LagrangianCoeff<scalar, true>>(scalarCoeff_);
125 const LagrangianEqn<vector>& eqn =
126 static_cast<const LagrangianEqn<vector>&
>(this->eqn());
129 tmp<LagrangianCoeff<vector, false>>
132 ?
new LagrangianCoeff<vector, false>
135 dev2(tensorCoeff_.S()) & eqn.psi()
137 : new LagrangianCoeff<
vector, false>(eqn)
145 return Su(
static_cast<const LagrangianEqn<vector>&
>(this->eqn()));
153 tmp<LagrangianCoeff<vector, false>>
156 ?
new LagrangianCoeff<vector, false>
160 ? tensorCoeff_.S() & eqn.psi()
161 : scalarCoeff_.S()*eqn.psi()
163 : new LagrangianCoeff<
vector, false>(eqn)
172 const LagrangianCoeff<scalar, true>& coeff
175 if (!coeff.valid())
return;
182 const LagrangianCoeff<tensor, true>& coeff
185 if (!coeff.valid())
return;
192 const LagrangianSp<vector>&
Sp
195 if (
Sp.tensorCoeff_.valid())
199 if (
Sp.scalarCoeff_.valid())
208 if (tensorCoeff_.valid())
232 const LagrangianCoeff<scalar, true>& coeff
235 if (!coeff.valid())
return;
242 const LagrangianCoeff<tensor, true>& coeff
245 if (!coeff.valid())
return;
252 const LagrangianSp<vector>&
Sp
255 if (
Sp.tensorCoeff_.valid())
259 if (
Sp.scalarCoeff_.valid())
268 if (tensorCoeff_.valid())
312 if (
Sp.tensorCoeff_.valid())
314 return inv(
Sp.tensorCoeff_.S()) &
Su.S();
318 return Su.S()/
Sp.scalarCoeff_.S();
Class to store a coefficient of a Lagrangian equation.
bool valid() const
Determine whether this coefficient has values or not.
const LagrangianEqnBase & eqn() const
Access the equation.
void operator/=(const LagrangianSubField< scalar, PrimitiveField > &)
Division assignment.
void operator*=(const LagrangianSubField< scalar, PrimitiveField > &)
Multiply assignment.
void negate()
In-place negation.
Wrapper around LagrangianCoeff to specialise for the implicit coefficient. Trivial at present....
tmp< LagrangianCoeff< Type, false > > H() const
Return the scalar off-diagonal coefficients.
LagrangianSp(const LagrangianSp< Type > &Sp)
Construct as copy.
void operator-=(const LagrangianSp< Type > &Sp)
Subtraction assignment.
tmp< LagrangianCoeff< Type, false > > Su() const
Return the equivalent explicit coefficient.
tmp< LagrangianCoeff< scalar, true > > A() const
Return the scalar diagonal coefficient.
void operator+=(const LagrangianSp< Type > &Sp)
Addition assignment.
A class for managing temporary objects.
bool valid(const PtrList< ModelType > &l)
tmp< VolField< Type > > Su(const VolField< Type > &su, const VolField< Type > &vf)
tmp< VolField< Type > > Sp(const volScalarField &sp, const VolField< Type > &vf)
void dev2(LagrangianPatchField< tensor > &f, const LagrangianPatchField< tensor > &f1)
static const Identity< scalar > I
Vector< scalar > vector
A scalar version of the templated Vector.
void tr(LagrangianPatchField< scalar > &f, const LagrangianPatchField< tensor > &f1)
void inv(LagrangianPatchField< tensor > &f, const LagrangianPatchField< tensor > &f1)
void operator+=(fvMatrix< Type > &fvEqn, const CarrierEqn< Type > &cEqn)
Add to a finite-volume equation.
void operator-=(fvMatrix< Type > &fvEqn, const CarrierEqn< Type > &cEqn)
Subtract from a finite-volume equation.