30#include "surfaceInterpolate.H"
47scalar backwardDdtScheme<Type>::deltaT_()
const
49 return mesh().time().deltaTValue();
54scalar backwardDdtScheme<Type>::deltaT0_()
const
56 return mesh().time().deltaT0Value();
61template<
class GeoField>
62scalar backwardDdtScheme<Type>::deltaT0_(
const GeoField& vf)
const
93 scalar deltaT = deltaT_();
94 scalar deltaT0 = deltaT0_();
96 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
97 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
98 scalar coefft0 = coefft + coefft00;
112 tdtdt.
ref().primitiveFieldRef() = rDeltaT.
value()*dt.
value()*
114 coefft - (coefft0*
mesh().V0() - coefft00*
mesh().V00())/
mesh().V()
141 "ddt("+vf.
name()+
')',
146 scalar deltaT = deltaT_();
147 scalar deltaT0 = deltaT0_(vf);
149 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
150 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
151 scalar coefft0 = coefft + coefft00;
167 - coefft00*vf.
oldTime().oldTime().primitiveField()
175 coefft0*vf.
oldTime().boundaryField()
176 - coefft00*vf.
oldTime().oldTime().boundaryField()
184 tdtdt.ref().boundaryFieldRef().
185 template evaluateCoupled<coupledFvPatch>();
200 + coefft00*vf.
oldTime().oldTime()
220 "ddt("+
rho.name()+
','+vf.
name()+
')',
225 scalar deltaT = deltaT_();
226 scalar deltaT0 = deltaT0_(vf);
228 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
229 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
230 scalar coefft0 = coefft + coefft00;
246 - coefft00*vf.
oldTime().oldTime().primitiveField()
254 coefft0*vf.
oldTime().boundaryField()
255 - coefft00*vf.
oldTime().oldTime().boundaryField()
263 tdtdt.
ref().boundaryFieldRef().
264 template evaluateCoupled<coupledFvPatch>();
270 return tmp<GeometricField<Type, fvPatchField, volMesh>>
272 new GeometricField<Type, fvPatchField, volMesh>
279 + coefft00*vf.
oldTime().oldTime()
299 "ddt("+
rho.name()+
','+vf.
name()+
')',
304 scalar deltaT = deltaT_();
305 scalar deltaT0 = deltaT0_(vf);
307 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
308 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
309 scalar coefft0 = coefft + coefft00;
324 coefft0*
rho.oldTime().primitiveField()
326 - coefft00*
rho.oldTime().oldTime().primitiveField()
327 *vf.
oldTime().oldTime().primitiveField()*
mesh().V00()
334 coefft0*
rho.oldTime().boundaryField()
336 - coefft00*
rho.oldTime().oldTime().boundaryField()
337 *vf.
oldTime().oldTime().boundaryField()
345 tdtdt.
ref().boundaryFieldRef().
346 template evaluateCoupled<coupledFvPatch>();
352 return tmp<GeometricField<Type, fvPatchField, volMesh>>
354 new GeometricField<Type, fvPatchField, volMesh>
361 + coefft00*
rho.oldTime().oldTime()*vf.
oldTime().oldTime()
387 scalar deltaT = deltaT_();
388 scalar deltaT0 = deltaT0_(vf);
390 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
391 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
392 scalar coefft0 = coefft + coefft00;
407 *
alpha.primitiveField()
408 *
rho.primitiveField()
412 *
alpha.oldTime().primitiveField()
413 *
rho.oldTime().primitiveField()
417 *
alpha.oldTime().oldTime().primitiveField()
418 *
rho.oldTime().oldTime().primitiveField()
419 *vf.
oldTime().oldTime().primitiveField()*
mesh().V00()
425 *
alpha.boundaryField()
430 *
alpha.oldTime().boundaryField()
431 *
rho.oldTime().boundaryField()
435 *
alpha.oldTime().oldTime().boundaryField()
436 *
rho.oldTime().oldTime().boundaryField()
437 *vf.
oldTime().oldTime().boundaryField()
445 tdtdt.
ref().boundaryFieldRef().
446 template evaluateCoupled<coupledFvPatch>();
452 return tmp<GeometricField<Type, fvPatchField, volMesh>>
454 new GeometricField<Type, fvPatchField, volMesh>
461 + coefft00*
alpha.oldTime().oldTime()
462 *
rho.oldTime().oldTime()*vf.
oldTime().oldTime()
488 scalar rDeltaT = 1.0/deltaT_();
490 scalar deltaT = deltaT_();
491 scalar deltaT0 = deltaT0_(vf);
493 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
494 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
495 scalar coefft0 = coefft + coefft00;
497 fvm.diag() = (coefft*rDeltaT)*
mesh().V();
501 fvm.source() = rDeltaT*
504 - coefft00*vf.
oldTime().oldTime().primitiveField()
512 coefft0*vf.
oldTime().primitiveField()
513 - coefft00*vf.
oldTime().oldTime().primitiveField()
539 scalar rDeltaT = 1.0/deltaT_();
541 scalar deltaT = deltaT_();
542 scalar deltaT0 = deltaT0_(vf);
544 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
545 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
546 scalar coefft0 = coefft + coefft00;
548 fvm.diag() = (coefft*rDeltaT*
rho.value())*
mesh().V();
552 fvm.source() = rDeltaT*
rho.value()*
555 - coefft00*vf.
oldTime().oldTime().primitiveField()
561 fvm.source() = rDeltaT*
mesh().V()*
rho.value()*
563 coefft0*vf.
oldTime().primitiveField()
564 - coefft00*vf.
oldTime().oldTime().primitiveField()
590 scalar rDeltaT = 1.0/deltaT_();
592 scalar deltaT = deltaT_();
593 scalar deltaT0 = deltaT0_(vf);
595 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
596 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
597 scalar coefft0 = coefft + coefft00;
599 fvm.diag() = (coefft*rDeltaT)*
rho.primitiveField()*
mesh().V();
603 fvm.source() = rDeltaT*
605 coefft0*
rho.oldTime().primitiveField()
607 - coefft00*
rho.oldTime().oldTime().primitiveField()
608 *vf.
oldTime().oldTime().primitiveField()*
mesh().V00()
613 fvm.source() = rDeltaT*
mesh().V()*
615 coefft0*
rho.oldTime().primitiveField()
617 - coefft00*
rho.oldTime().oldTime().primitiveField()
618 *vf.
oldTime().oldTime().primitiveField()
645 scalar rDeltaT = 1.0/deltaT_();
647 scalar deltaT = deltaT_();
648 scalar deltaT0 = deltaT0_(vf);
650 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
651 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
652 scalar coefft0 = coefft + coefft00;
655 (coefft*rDeltaT)*
alpha.primitiveField()*
rho.primitiveField()*
mesh().V();
659 fvm.source() = rDeltaT*
662 *
alpha.oldTime().primitiveField()
663 *
rho.oldTime().primitiveField()
667 *
alpha.oldTime().oldTime().primitiveField()
668 *
rho.oldTime().oldTime().primitiveField()
669 *vf.
oldTime().oldTime().primitiveField()*
mesh().V00()
674 fvm.source() = rDeltaT*
mesh().V()*
677 *
alpha.oldTime().primitiveField()
678 *
rho.oldTime().primitiveField()
682 *
alpha.oldTime().oldTime().primitiveField()
683 *
rho.oldTime().oldTime().primitiveField()
684 *vf.
oldTime().oldTime().primitiveField()
702 scalar deltaT = deltaT_();
703 scalar deltaT0 = deltaT0_(
U);
705 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
706 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
707 scalar coefft0 = coefft + coefft00;
715 "ddtCorr(" +
U.name() +
',' +
Uf.name() +
')',
719 this->fvcDdtPhiCoeff(
U.oldTime(), (
mesh().Sf() &
Uf.oldTime()))
724 (coefft0*
Uf.oldTime() - coefft00*
Uf.oldTime().oldTime())
727 coefft0*
U.oldTime() - coefft00*
U.oldTime().oldTime()
746 scalar deltaT = deltaT_();
747 scalar deltaT0 = deltaT0_(
U);
749 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
750 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
751 scalar coefft0 = coefft + coefft00;
759 "ddtCorr(" +
U.name() +
',' +
phi.name() +
')',
763 this->fvcDdtPhiCoeff(
U.oldTime(),
phi.oldTime())
766 (coefft0*
phi.oldTime() - coefft00*
phi.oldTime().oldTime())
770 coefft0*
U.oldTime() - coefft00*
U.oldTime().oldTime()
789 scalar deltaT = deltaT_();
790 scalar deltaT0 = deltaT0_(
U);
792 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
793 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
794 scalar coefft0 = coefft + coefft00;
804 rho.oldTime()*
U.oldTime()
809 rho.oldTime().oldTime()*
U.oldTime().oldTime()
819 +
rho.name() +
',' +
U.name() +
',' +
Uf.name() +
')',
826 mesh().Sf() &
Uf.oldTime(),
833 (coefft0*
Uf.oldTime() - coefft00*
Uf.oldTime().oldTime())
853 +
rho.name() +
',' +
U.name() +
',' +
Uf.name() +
')',
860 mesh().Sf() &
Uf.oldTime(),
867 (coefft0*
Uf.oldTime() - coefft00*
Uf.oldTime().oldTime())
871 - coefft00*
U.oldTime().oldTime()
881 <<
"dimensions of phi are not correct"
895 const fluxFieldType&
phi
900 scalar deltaT = deltaT_();
901 scalar deltaT0 = deltaT0_(
U);
903 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
904 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
905 scalar coefft0 = coefft + coefft00;
915 rho.oldTime()*
U.oldTime()
920 rho.oldTime().oldTime()*
U.oldTime().oldTime()
930 +
rho.name() +
',' +
U.name() +
',' +
phi.name() +
')',
934 this->fvcDdtPhiCoeff(rhoU0,
phi.oldTime(),
rho.oldTime())
937 (coefft0*
phi.oldTime() - coefft00*
phi.oldTime().oldTime())
941 coefft0*rhoU0 - coefft00*rhoU00
953 return tmp<fluxFieldType>
960 +
rho.name() +
',' +
U.name() +
',' +
phi.name() +
')',
964 this->fvcDdtPhiCoeff(
U.oldTime(),
phi.oldTime(),
rho.oldTime())
967 (coefft0*
phi.oldTime() - coefft00*
phi.oldTime().oldTime())
971 coefft0*
U.oldTime() - coefft00*
U.oldTime().oldTime()
980 <<
"dimensions of phi are not correct"
994 scalar deltaT = deltaT_();
995 scalar deltaT0 = deltaT0_(vf);
998 scalar coefft0_00 = deltaT/(deltaT + deltaT0);
1001 scalar coefftn_0 = 1 + coefft0_00;
const dimensionSet & dimensions() const noexcept
Return dimensions.
Generic GeometricField class.
static const this_type & null() noexcept
Return a null GeometricField (reference to a nullObject).
const GeometricField< Type, PatchField, GeoMesh > & oldTime() const
Return old time field.
const Internal::FieldType & primitiveField() const noexcept
Return a const-reference to the internal field values.
const Boundary & boundaryField() const noexcept
Return const-reference to the boundary field.
@ NO_REGISTER
Do not request registration (bool: false).
@ NO_READ
Nothing to be read.
@ NO_WRITE
Ignore writing from objectRegistry::writeObject().
Defines the attributes of an object for which implicit objectRegistry management is supported,...
const word & name() const noexcept
Return the object name.
Generic dimensioned Type class.
const dimensionSet & dimensions() const noexcept
Return const reference to dimensions.
const word & name() const noexcept
Return const reference to name.
const Type & value() const noexcept
Return const reference to value.
A special matrix type and solver, designed for finite volume solutions of scalar equations....
Field< Type > & source() noexcept
static const word & calculatedType() noexcept
The type name for calculated patch fields.
tmp< fluxFieldType > fvcDdtUfCorr(const GeometricField< Type, fvPatchField, volMesh > &U, const GeometricField< Type, fvsPatchField, surfaceMesh > &Uf)
tmp< GeometricField< Type, fvPatchField, volMesh > > fvcDdt(const dimensioned< Type > &)
tmp< fluxFieldType > fvcDdtPhiCorr(const GeometricField< Type, fvPatchField, volMesh > &U, const fluxFieldType &phi)
tmp< fvMatrix< Type > > fvmDdt(const GeometricField< Type, fvPatchField, volMesh > &)
ddtScheme< Type >::fluxFieldType fluxFieldType
const fvMesh & mesh() const
Return mesh reference.
tmp< surfaceScalarField > meshPhi(const GeometricField< Type, fvPatchField, volMesh > &)
tmp< surfaceScalarField > fvcDdtPhiCoeff(const GeometricField< Type, fvPatchField, volMesh > &U, const fluxFieldType &phi, const fluxFieldType &phiCorr)
A class for managing temporary objects.
T & ref() const
Return non-const reference to the contents of a non-null managed pointer.
Info<< "Creating field kinetic energy K\n"<< endl;volScalarField K("K", 0.5 *magSqr(U));if(U.nOldTimes()){ volVectorField *Uold=&U.oldTime();volScalarField *Kold=&K.oldTime(); *Kold==0.5 *magSqr(*Uold);while(Uold->nOldTimes()) { Uold=&Uold-> oldTime()
autoPtr< surfaceVectorField > Uf
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
A special matrix type and solver, designed for finite volume solutions of scalar equations.
Calculate the divergence of the given field.
Namespace for finite-volume.
static tmp< GeometricField< Type, fvsPatchField, surfaceMesh > > interpolate(const GeometricField< Type, fvPatchField, volMesh > &tvf, const surfaceScalarField &faceFlux, Istream &schemeData)
Interpolate field onto faces using scheme given by Istream.
static tmp< GeometricField< typename innerProduct< vector, Type >::type, fvsPatchField, surfaceMesh > > dotInterpolate(const surfaceVectorField &Sf, const GeometricField< Type, fvPatchField, volMesh > &tvf)
Interpolate field onto faces.
Namespace of functions to calculate implicit derivatives returning a matrix.
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh > > &tf1, const word &name, const dimensionSet &dimensions, const bool initCopy=false)
Global function forwards to reuseTmpDimensionedField::New.
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
GeometricField< scalar, fvPatchField, volMesh > volScalarField
const dimensionSet dimArea(sqr(dimLength))
const dimensionSet dimVelocity
GeometricField< scalar, fvsPatchField, surfaceMesh > surfaceScalarField
errorManip< error > abort(error &err)
static constexpr const zero Zero
Global zero (0).
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
const dimensionSet dimVol(dimVolume)
Older spelling for dimVolume.