30 #include "surfaceInterpolate.H" 47 scalar backwardDdtScheme<Type>::deltaT_()
const 49 return mesh().time().deltaTValue();
54 scalar backwardDdtScheme<Type>::deltaT0_()
const 56 return mesh().time().deltaT0Value();
61 template<
class GeoField>
62 scalar backwardDdtScheme<Type>::deltaT0_(
const GeoField& vf)
const 89 mesh().time().timeName(),
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()+
')',
142 mesh().time().timeName(),
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()+
')',
221 mesh().time().timeName(),
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()+
')',
300 mesh().time().timeName(),
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()
383 mesh().time().timeName(),
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();
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();
555 - coefft00*vf.
oldTime().oldTime().primitiveField()
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();
605 coefft0*
rho.oldTime().primitiveField()
607 - coefft00*
rho.oldTime().oldTime().primitiveField()
608 *vf.
oldTime().oldTime().primitiveField()*
mesh().V00()
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();
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()
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() +
')',
716 mesh().time().timeName(),
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()
741 const fluxFieldType&
phi 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() +
')',
760 mesh().time().timeName(),
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() +
')',
820 mesh().time().timeName(),
826 mesh().Sf() &
Uf.oldTime(),
833 (coefft0*
Uf.oldTime() - coefft00*
Uf.oldTime().oldTime())
853 +
rho.name() +
',' +
U.name() +
',' +
Uf.name() +
')',
854 mesh().time().timeName(),
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" 884 return fluxFieldType::null();
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() +
')',
931 mesh().time().timeName(),
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() +
')',
961 mesh().time().timeName(),
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" 983 return fluxFieldType::null();
994 scalar deltaT = deltaT_();
995 scalar deltaT0 = deltaT0_(vf);
998 scalar coefft0_00 = deltaT/(deltaT + deltaT0);
1001 scalar coefftn_0 = 1 + coefft0_00;
const scalarField & diag() const
const Type & value() const noexcept
Return const reference to value.
const GeometricField< Type, PatchField, GeoMesh > & oldTime() const
Return old time field.
Info<< "Creating field kinetic energy K\"<< 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()
tmp< fvMatrix< Type > > fvmDdt(const GeometricField< Type, fvPatchField, volMesh > &)
const Internal::FieldType & primitiveField() const noexcept
Return a const-reference to the internal field values.
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
const word & name() const noexcept
Return the object name.
T & ref() const
Return non-const reference to the contents of a non-null managed pointer.
static tmp< GeometricField< typename innerProduct< vector, Type >::type, fvsPatchField, surfaceMesh > > dotInterpolate(const surfaceVectorField &Sf, const GeometricField< Type, fvPatchField, volMesh > &tvf)
Interpolate field onto faces.
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.
tmp< GeometricField< Type, fvPatchField, volMesh > > fvcDdt(const dimensioned< Type > &)
const dimensionSet dimVol(dimVolume)
Older spelling for dimVolume.
Generic GeometricField class.
Generic dimensioned Type class.
Ignore writing from objectRegistry::writeObject()
tmp< surfaceScalarField > meshPhi(const GeometricField< Type, fvPatchField, volMesh > &)
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
tmp< fluxFieldType > fvcDdtPhiCorr(const GeometricField< Type, fvPatchField, volMesh > &U, const fluxFieldType &phi)
A special matrix type and solver, designed for finite volume solutions of scalar equations. Face addressing is used to make all matrix assembly and solution loops vectorise.
autoPtr< surfaceVectorField > Uf
const dimensionSet & dimensions() const noexcept
Return const reference to dimensions.
tmp< fluxFieldType > fvcDdtUfCorr(const GeometricField< Type, fvPatchField, volMesh > &U, const GeometricField< Type, fvsPatchField, surfaceMesh > &Uf)
errorManip< error > abort(error &err)
Calculate the divergence of the given field.
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.
const word & name() const noexcept
Return const reference to name.
Field< Type > & source() noexcept
static const word & calculatedType() noexcept
The type name for calculated patch fields.
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
A special matrix type and solver, designed for finite volume solutions of scalar equations.
A class for managing temporary objects.
GeometricField< scalar, fvsPatchField, surfaceMesh > surfaceScalarField
const dimensionedScalar alpha
Fine-structure constant: default SI units: [].
Defines the attributes of an object for which implicit objectRegistry management is supported...
const Boundary & boundaryField() const noexcept
Return const-reference to the boundary field.
Do not request registration (bool: false)
const dimensionSet dimArea(sqr(dimLength))
const dimensionSet & dimensions() const noexcept
Return dimensions.
static constexpr const zero Zero
Global zero (0)
const dimensionSet dimVelocity