37 #ifndef LagrangianEqn_H
38 #define LagrangianEqn_H
86 template<
template<
class>
class PrimitiveField>
110 template<
template<
class>
class PrimitiveField>
123 template<
template<
class>
class PrimitiveField>
136 template<
template<
class>
class PrimitiveField>
148 template<
template<
class>
class PrimitiveField>
160 template<
template<
class>
class PrimitiveField>
172 template<
template<
class>
class PrimitiveField>
246 template<
template<
class>
class PrimitiveField>
272 void solve(
const bool final);
299 #define LAGRANGIAN_EQN_EQN_OPERATOR(Op) \
301 template<class Type> \
302 tmp<LagrangianEqn<Type>> operator Op \
304 const LagrangianEqn<Type>& a, \
305 const LagrangianEqn<Type>& b \
308 template<class Type> \
309 tmp<LagrangianEqn<Type>> operator Op \
311 const tmp<LagrangianEqn<Type>>& tA, \
312 const LagrangianEqn<Type>& b \
315 template<class Type> \
316 tmp<LagrangianEqn<Type>> operator Op \
318 const tmp<LagrangianEqn<Type>>& tA, \
319 const tmp<LagrangianEqn<Type>>& tB \
322 template<class Type> \
323 tmp<LagrangianEqn<Type>> operator Op \
325 const LagrangianEqn<Type>& a, \
326 const tmp<LagrangianEqn<Type>>& tB \
338 #undef LAGRANGIAN_EQN_EQN_OPERATOR
340 #define LAGRANGIAN_EQN_FIELD_OPERATOR(Op, LagrangianSubField) \
342 template<class Type> \
343 tmp<LagrangianEqn<Type>> operator Op \
345 const LagrangianEqn<Type>& eqn, \
346 const LagrangianSubField<Type>& field \
349 template<class Type> \
350 tmp<LagrangianEqn<Type>> operator Op \
352 const tmp<LagrangianEqn<Type>>& tEqn, \
353 const LagrangianSubField<Type>& field \
356 template<class Type> \
357 tmp<LagrangianEqn<Type>> operator Op \
359 const tmp<LagrangianEqn<Type>>& tEqn, \
360 const tmp<LagrangianSubField<Type>>& tField \
363 template<class Type> \
364 tmp<LagrangianEqn<Type>> operator Op \
366 const LagrangianEqn<Type>& eqn, \
367 const tmp<LagrangianSubField<Type>>& tField \
370 #define LAGRANGIAN_FIELD_EQN_OPERATOR(Op, LagrangianSubField) \
372 template<class Type> \
373 tmp<LagrangianEqn<Type>> operator Op \
375 const LagrangianSubField<Type>& field, \
376 const LagrangianEqn<Type>& eqn \
379 template<class Type> \
380 tmp<LagrangianEqn<Type>> operator Op \
382 const LagrangianSubField<Type>& field, \
383 const tmp<LagrangianEqn<Type>>& tEqn \
386 template<class Type> \
387 tmp<LagrangianEqn<Type>> operator Op \
389 const tmp<LagrangianSubField<Type>>& tField, \
390 const tmp<LagrangianEqn<Type>>& tEqn \
393 template<class Type> \
394 tmp<LagrangianEqn<Type>> operator Op \
396 const tmp<LagrangianSubField<Type>>& tField, \
397 const LagrangianEqn<Type>& eqn \
418 #undef LAGRANGIAN_EQN_FIELD_OPERATOR
419 #undef LAGRANGIAN_FIELD_EQN_OPERATOR
421 #define LAGRANGIAN_EQN_SCALAR_FIELD_OPERATOR(Op, LagrangianSubField) \
423 template<class Type> \
424 tmp<LagrangianEqn<Type>> operator Op \
426 const LagrangianEqn<Type>& eqn, \
427 const LagrangianSubField<scalar>& field \
430 template<class Type> \
431 tmp<LagrangianEqn<Type>> operator Op \
433 const tmp<LagrangianEqn<Type>>& tEqn, \
434 const LagrangianSubField<scalar>& field \
437 template<class Type> \
438 tmp<LagrangianEqn<Type>> operator Op \
440 const tmp<LagrangianEqn<Type>>& tEqn, \
441 const tmp<LagrangianSubField<scalar>>& tField \
444 template<class Type> \
445 tmp<LagrangianEqn<Type>> operator Op \
447 const LagrangianEqn<Type>& eqn, \
448 const tmp<LagrangianSubField<scalar>>& tField \
451 #define LAGRANGIAN_SCALAR_FIELD_EQN_OPERATOR(Op, LagrangianSubField) \
453 template<class Type> \
454 tmp<LagrangianEqn<Type>> operator Op \
456 const LagrangianSubField<scalar>& field, \
457 const LagrangianEqn<Type>& eqn \
460 template<class Type> \
461 tmp<LagrangianEqn<Type>> operator Op \
463 const LagrangianSubField<scalar>& field, \
464 const tmp<LagrangianEqn<Type>>& tEqn \
467 template<class Type> \
468 tmp<LagrangianEqn<Type>> operator Op \
470 const tmp<LagrangianSubField<scalar>>& tField, \
471 const tmp<LagrangianEqn<Type>>& tEqn \
474 template<class Type> \
475 tmp<LagrangianEqn<Type>> operator Op \
477 const tmp<LagrangianSubField<scalar>>& tField, \
478 const LagrangianEqn<Type>& eqn \
491 #undef LAGRANGIAN_EQN_SCALAR_FIELD_OPERATOR
492 #undef LAGRANGIAN_SCALAR_FIELD_EQN_OPERATOR
499 template<
template<
class>
class PrimitiveField>
512 template<
template<
class>
class OtherPrimitiveField>
518 return NullObjectRef<LagrangianSubField<Type, PrimitiveField>>();
#define LAGRANGIAN_SCALAR_FIELD_EQN_OPERATOR(Op, LagrangianSubField)
#define LAGRANGIAN_EQN_SCALAR_FIELD_OPERATOR(Op, LagrangianSubField)
#define LAGRANGIAN_FIELD_EQN_OPERATOR(Op, LagrangianSubField)
#define LAGRANGIAN_EQN_EQN_OPERATOR(Op)
#define LAGRANGIAN_EQN_FIELD_OPERATOR(Op, LagrangianSubField)
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Generic GeometricField class.
const word & name() const
Return the equation name.
This class stores the coefficients of a Lagrangian equation, and facilitates solving that equation an...
LagrangianCoeff< scalar, true > deltaTSp
Implicit time-coefficient.
LagrangianSp< Type > Sp
Implicit coefficient.
void op(const LagrangianEqn< Type > &other)
Check the operation with another equation.
LagrangianCoeff< Type, false > Su
Explicit coefficient.
void solve(const bool final)
Solve.
tmp< LagrangianSp< Type > > allSp() const
Return the combined time and non-time implicit coefficient.
tmp< LagrangianCoeff< scalar, true > > allDiagonalSp() const
Return the combined time and non-time implicit diagonal.
const regIOobject & psiIo() const
Return the field IO.
~LagrangianEqn()
Destructor.
void operator+=(const LagrangianEqn< Type > &other)
Addition assignment.
tmp< LagrangianCoeff< Type, false > > allDiagonalSu() const
Return the combined time and non-time explicit diagonal.
tmp< LagrangianSubSubField< Type > > psi() const
Return the field.
static tmp< LagrangianEqn< Type > > NewEmpty(const LagrangianEqn< Type > &)
Construct from another equation, with empty coefficients.
LagrangianEqn(const word &name, const tmp< LagrangianSubScalarField > &tDeltaT, const LagrangianSubField< Type, PrimitiveField > &psi, LagrangianDynamicField< scalar > &deltaTSp0=NullObjectNonConstRef< LagrangianDynamicField< scalar >>(), LagrangianDynamicField< Type > &S0=NullObjectNonConstRef< LagrangianDynamicField< Type >>())
Construct for a const field and a tmp time-step with a name.
void setPrevious(const tmp< LagrangianEqn< Type >> &tOther)
Set the previous field to that stored by another tmp equation.
LagrangianCoeff< Type, false > deltaTSu
Explicit time-coefficient.
const word & psiName() const
Return the field name.
void operator-=(const LagrangianEqn< Type > &other)
Subtraction assignment.
bool isPsi(const LagrangianSubField< Type, PrimitiveField > &psi) const
Return whether the given field is that of the equation.
tmp< LagrangianCoeff< Type, false > > allSu() const
Return the combined time and non-time explicit coefficient.
Wrapper around LagrangianCoeff to specialise for the implicit coefficient. Trivial at present....
Reference counter for various OpenFOAM components.
regIOobject is an abstract class derived from IOobject to handle automatic object registration with t...
A class for managing temporary objects.
A class for handling words, derived from string.
T & NullObjectNonConstRef()
Return non-const reference to the nullObject of type T.
tmp< fvMatrix< Type > > operator-(const fvMatrix< Type > &)