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()
193 + coefft00*vf.
oldTime().oldTime()
213 "ddt("+
rho.name()+
','+vf.
name()+
')',
214 mesh().time().timeName(),
218 scalar deltaT = deltaT_();
219 scalar deltaT0 = deltaT0_(vf);
221 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
222 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
223 scalar coefft0 = coefft + coefft00;
239 - coefft00*vf.
oldTime().oldTime().primitiveField()
247 coefft0*vf.
oldTime().boundaryField()
248 - coefft00*vf.
oldTime().oldTime().boundaryField()
256 return tmp<GeometricField<Type, fvPatchField, volMesh>>
258 new GeometricField<Type, fvPatchField, volMesh>
265 + coefft00*vf.
oldTime().oldTime()
285 "ddt("+
rho.name()+
','+vf.
name()+
')',
286 mesh().time().timeName(),
290 scalar deltaT = deltaT_();
291 scalar deltaT0 = deltaT0_(vf);
293 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
294 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
295 scalar coefft0 = coefft + coefft00;
310 coefft0*
rho.oldTime().primitiveField()
312 - coefft00*
rho.oldTime().oldTime().primitiveField()
313 *vf.
oldTime().oldTime().primitiveField()*
mesh().V00()
320 coefft0*
rho.oldTime().boundaryField()
322 - coefft00*
rho.oldTime().oldTime().boundaryField()
323 *vf.
oldTime().oldTime().boundaryField()
331 return tmp<GeometricField<Type, fvPatchField, volMesh>>
333 new GeometricField<Type, fvPatchField, volMesh>
340 + coefft00*
rho.oldTime().oldTime()*vf.
oldTime().oldTime()
362 mesh().time().timeName(),
366 scalar deltaT = deltaT_();
367 scalar deltaT0 = deltaT0_(vf);
369 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
370 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
371 scalar coefft0 = coefft + coefft00;
386 *
alpha.primitiveField()
387 *
rho.primitiveField()
391 *
alpha.oldTime().primitiveField()
392 *
rho.oldTime().primitiveField()
396 *
alpha.oldTime().oldTime().primitiveField()
397 *
rho.oldTime().oldTime().primitiveField()
398 *vf.
oldTime().oldTime().primitiveField()*
mesh().V00()
404 *
alpha.boundaryField()
409 *
alpha.oldTime().boundaryField()
410 *
rho.oldTime().boundaryField()
414 *
alpha.oldTime().oldTime().boundaryField()
415 *
rho.oldTime().oldTime().boundaryField()
416 *vf.
oldTime().oldTime().boundaryField()
424 return tmp<GeometricField<Type, fvPatchField, volMesh>>
426 new GeometricField<Type, fvPatchField, volMesh>
433 + coefft00*
alpha.oldTime().oldTime()
434 *
rho.oldTime().oldTime()*vf.
oldTime().oldTime()
460 scalar rDeltaT = 1.0/deltaT_();
462 scalar deltaT = deltaT_();
463 scalar deltaT0 = deltaT0_(vf);
465 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
466 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
467 scalar coefft0 = coefft + coefft00;
469 fvm.
diag() = (coefft*rDeltaT)*
mesh().V();
476 - coefft00*vf.
oldTime().oldTime().primitiveField()
484 coefft0*vf.
oldTime().primitiveField()
485 - coefft00*vf.
oldTime().oldTime().primitiveField()
511 scalar rDeltaT = 1.0/deltaT_();
513 scalar deltaT = deltaT_();
514 scalar deltaT0 = deltaT0_(vf);
516 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
517 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
518 scalar coefft0 = coefft + coefft00;
520 fvm.
diag() = (coefft*rDeltaT*
rho.value())*
mesh().V();
527 - coefft00*vf.
oldTime().oldTime().primitiveField()
535 coefft0*vf.
oldTime().primitiveField()
536 - coefft00*vf.
oldTime().oldTime().primitiveField()
562 scalar rDeltaT = 1.0/deltaT_();
564 scalar deltaT = deltaT_();
565 scalar deltaT0 = deltaT0_(vf);
567 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
568 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
569 scalar coefft0 = coefft + coefft00;
571 fvm.
diag() = (coefft*rDeltaT)*
rho.primitiveField()*
mesh().V();
577 coefft0*
rho.oldTime().primitiveField()
579 - coefft00*
rho.oldTime().oldTime().primitiveField()
580 *vf.
oldTime().oldTime().primitiveField()*
mesh().V00()
587 coefft0*
rho.oldTime().primitiveField()
589 - coefft00*
rho.oldTime().oldTime().primitiveField()
590 *vf.
oldTime().oldTime().primitiveField()
617 scalar rDeltaT = 1.0/deltaT_();
619 scalar deltaT = deltaT_();
620 scalar deltaT0 = deltaT0_(vf);
622 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
623 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
624 scalar coefft0 = coefft + coefft00;
627 (coefft*rDeltaT)*
alpha.primitiveField()*
rho.primitiveField()*
mesh().V();
634 *
alpha.oldTime().primitiveField()
635 *
rho.oldTime().primitiveField()
639 *
alpha.oldTime().oldTime().primitiveField()
640 *
rho.oldTime().oldTime().primitiveField()
641 *vf.
oldTime().oldTime().primitiveField()*
mesh().V00()
649 *
alpha.oldTime().primitiveField()
650 *
rho.oldTime().primitiveField()
654 *
alpha.oldTime().oldTime().primitiveField()
655 *
rho.oldTime().oldTime().primitiveField()
656 *vf.
oldTime().oldTime().primitiveField()
674 scalar deltaT = deltaT_();
675 scalar deltaT0 = deltaT0_(
U);
677 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
678 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
679 scalar coefft0 = coefft + coefft00;
687 "ddtCorr(" +
U.name() +
',' +
Uf.name() +
')',
688 mesh().time().timeName(),
691 this->fvcDdtPhiCoeff(
U.oldTime(), (
mesh().Sf() &
Uf.oldTime()))
696 (coefft0*
Uf.oldTime() - coefft00*
Uf.oldTime().oldTime())
699 coefft0*
U.oldTime() - coefft00*
U.oldTime().oldTime()
713 const fluxFieldType&
phi 718 scalar deltaT = deltaT_();
719 scalar deltaT0 = deltaT0_(
U);
721 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
722 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
723 scalar coefft0 = coefft + coefft00;
731 "ddtCorr(" +
U.name() +
',' +
phi.name() +
')',
732 mesh().time().timeName(),
735 this->fvcDdtPhiCoeff(
U.oldTime(),
phi.oldTime())
738 (coefft0*
phi.oldTime() - coefft00*
phi.oldTime().oldTime())
742 coefft0*
U.oldTime() - coefft00*
U.oldTime().oldTime()
761 scalar deltaT = deltaT_();
762 scalar deltaT0 = deltaT0_(
U);
764 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
765 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
766 scalar coefft0 = coefft + coefft00;
776 rho.oldTime()*
U.oldTime()
781 rho.oldTime().oldTime()*
U.oldTime().oldTime()
791 +
rho.name() +
',' +
U.name() +
',' +
Uf.name() +
')',
792 mesh().time().timeName(),
798 mesh().Sf() &
Uf.oldTime(),
805 (coefft0*
Uf.oldTime() - coefft00*
Uf.oldTime().oldTime())
825 +
rho.name() +
',' +
U.name() +
',' +
Uf.name() +
')',
826 mesh().time().timeName(),
832 mesh().Sf() &
Uf.oldTime(),
839 (coefft0*
Uf.oldTime() - coefft00*
Uf.oldTime().oldTime())
843 - coefft00*
U.oldTime().oldTime()
853 <<
"dimensions of phi are not correct" 856 return fluxFieldType::null();
867 const fluxFieldType&
phi 872 scalar deltaT = deltaT_();
873 scalar deltaT0 = deltaT0_(
U);
875 scalar coefft = 1 + deltaT/(deltaT + deltaT0);
876 scalar coefft00 = deltaT*deltaT/(deltaT0*(deltaT + deltaT0));
877 scalar coefft0 = coefft + coefft00;
887 rho.oldTime()*
U.oldTime()
892 rho.oldTime().oldTime()*
U.oldTime().oldTime()
902 +
rho.name() +
',' +
U.name() +
',' +
phi.name() +
')',
903 mesh().time().timeName(),
906 this->fvcDdtPhiCoeff(rhoU0,
phi.oldTime(),
rho.oldTime())
909 (coefft0*
phi.oldTime() - coefft00*
phi.oldTime().oldTime())
913 coefft0*rhoU0 - coefft00*rhoU00
925 return tmp<fluxFieldType>
932 +
rho.name() +
',' +
U.name() +
',' +
phi.name() +
')',
933 mesh().time().timeName(),
936 this->fvcDdtPhiCoeff(
U.oldTime(),
phi.oldTime(),
rho.oldTime())
939 (coefft0*
phi.oldTime() - coefft00*
phi.oldTime().oldTime())
943 coefft0*
U.oldTime() - coefft00*
U.oldTime().oldTime()
952 <<
"dimensions of phi are not correct" 955 return fluxFieldType::null();
966 scalar deltaT = deltaT_();
967 scalar deltaT0 = deltaT0_(vf);
970 scalar coefft0_00 = deltaT/(deltaT + deltaT0);
973 scalar coefftn_0 = 1 + coefft0_00;
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< 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< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tdf1, const word &name, const dimensionSet &dimensions, const bool initCopy=false)
Global function forwards to reuseTmpDimensionedField::New.
tmp< surfaceScalarField > meshPhi(const GeometricField< Type, fvPatchField, volMesh > &)
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
This boundary condition is not designed to be evaluated; it is assmued that the value is assigned via...
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
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.
const dimensionSet dimArea(sqr(dimLength))
const dimensionSet & dimensions() const noexcept
Return dimensions.
static constexpr const zero Zero
Global zero (0)
const dimensionSet dimVelocity