30 #include "surfaceInterpolate.H" 48 template<
class GeoField>
49 CrankNicolsonDdtScheme<Type>::DDt0Field<GeoField>::DDt0Field
61 this->
timeIndex() = mesh.time().startTimeIndex();
66 template<
class GeoField>
67 CrankNicolsonDdtScheme<Type>::DDt0Field<GeoField>::DDt0Field
71 const dimensioned<typename GeoField::value_type>& dimType
74 GeoField(
io,
mesh, dimType),
80 template<
class GeoField>
81 label CrankNicolsonDdtScheme<Type>::DDt0Field<GeoField>::startTimeIndex()
const 83 return startTimeIndex_;
88 template<
class GeoField>
89 GeoField& CrankNicolsonDdtScheme<Type>::DDt0Field<GeoField>::operator()()
96 template<
class GeoField>
97 void CrankNicolsonDdtScheme<Type>::DDt0Field<GeoField>::operator=
102 GeoField::operator=(gf);
107 template<
class GeoField>
115 if (!
mesh().objectRegistry::template foundObject<GeoField>(
name))
131 ).
template typeHeaderOk<DDt0Field<GeoField>>(
true)
136 new DDt0Field<GeoField>
154 new DDt0Field<GeoField>
175 DDt0Field<GeoField>& ddt0 =
static_cast<DDt0Field<GeoField>&
> 177 mesh().objectRegistry::template lookupObjectRef<GeoField>(
name)
185 template<
class GeoField>
186 bool CrankNicolsonDdtScheme<Type>::evaluate
188 DDt0Field<GeoField>& ddt0
191 bool evaluated = (ddt0.timeIndex() !=
mesh().time().timeIndex());
192 ddt0.timeIndex() =
mesh().time().timeIndex();
198 template<
class GeoField>
199 scalar CrankNicolsonDdtScheme<Type>::coef_
201 const DDt0Field<GeoField>& ddt0
216 template<
class GeoField>
217 scalar CrankNicolsonDdtScheme<Type>::coef0_
219 const DDt0Field<GeoField>& ddt0
234 template<
class GeoField>
237 const DDt0Field<GeoField>& ddt0
240 return coef_(ddt0)/
mesh().time().deltaT();
245 template<
class GeoField>
248 const DDt0Field<GeoField>& ddt0
251 return coef0_(ddt0)/
mesh().time().deltaT0();
256 template<
class GeoField>
257 tmp<GeoField> CrankNicolsonDdtScheme<Type>::offCentre_
274 const FieldField<fvPatchField, Type>&
ff 276 const FieldField<fvPatchField, Type>& bf
289 ocCoeff_(new Function1Types::Constant<scalar>(
"ocCoeff", 1))
301 CrankNicolsonDdtScheme<Type>::CrankNicolsonDdtScheme
307 ddtScheme<Type>(
mesh, is)
309 token firstToken(is);
314 if (ocCoeff < 0 || ocCoeff > 1)
317 <<
"Off-centreing coefficient = " <<
ocCoeff 318 <<
" should be >= 0 and <= 1" 324 new Function1Types::Constant<scalar>(
"ocCoeff",
ocCoeff)
331 ocCoeff_ = Function1<scalar>::New(
"ocCoeff",
dict, &
mesh);
352 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
353 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
355 "ddt0(" + dt.
name() +
')',
361 "ddt(" + dt.
name() +
')',
362 mesh().time().timeName(),
384 ddt0.internalFieldRef() =
386 (rDtCoef0*dt)*(
mesh().V0() -
mesh().V00())
387 -
mesh().V00()*offCentre_(ddt0.internalField())
391 tdtdt.ref().internalFieldRef() =
393 (rDtCoef*dt)*(
mesh().V() -
mesh().V0())
394 -
mesh().V0()*offCentre_(ddt0.internalField())
409 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
410 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
412 "ddt0(" + vf.
name() +
')',
418 "ddt(" + vf.
name() +
')',
419 mesh().time().timeName(),
429 const scalar rDtCoef0 = rDtCoef0_(ddt0).value();
431 ddt0.primitiveFieldRef() =
436 -
mesh().V00()*vf.
oldTime().oldTime().primitiveField()
437 ) -
mesh().V00()*offCentre_(ddt0.primitiveField())
440 ddt0.boundaryFieldRef() =
445 - vf.
oldTime().oldTime().boundaryField()
446 ) - offCentre_(
ff(ddt0.boundaryField()))
460 ) -
mesh().V0()*offCentre_(ddt0()())
465 ) - offCentre_(
ff(ddt0.boundaryField()))
474 - offCentre_(ddt0());
477 return tmp<GeometricField<Type, fvPatchField, volMesh>>
479 new GeometricField<Type, fvPatchField, volMesh>
482 rDtCoef*(vf - vf.
oldTime()) - offCentre_(ddt0())
497 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
498 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
500 "ddt0(" +
rho.name() +
',' + vf.
name() +
')',
506 "ddt(" +
rho.name() +
',' + vf.
name() +
')',
507 mesh().time().timeName(),
517 const scalar rDtCoef0 = rDtCoef0_(ddt0).value();
519 ddt0.primitiveFieldRef() =
521 rDtCoef0*
rho.value()*
524 -
mesh().V00()*vf.
oldTime().oldTime().primitiveField()
525 ) -
mesh().V00()*offCentre_(ddt0.primitiveField())
528 ddt0.boundaryFieldRef() =
530 rDtCoef0*
rho.value()*
533 - vf.
oldTime().oldTime().boundaryField()
534 ) - offCentre_(
ff(ddt0.boundaryField()))
538 return tmp<GeometricField<Type, fvPatchField, volMesh>>
540 new GeometricField<Type, fvPatchField, volMesh>
546 rDtCoef.value()*
rho.value()*
550 ) -
mesh().V0()*offCentre_(ddt0.primitiveField())
552 rDtCoef.value()*
rho.value()*
555 ) - offCentre_(
ff(ddt0.boundaryField()))
564 - offCentre_(ddt0());
567 return tmp<GeometricField<Type, fvPatchField, volMesh>>
569 new GeometricField<Type, fvPatchField, volMesh>
572 rDtCoef*
rho*(vf - vf.
oldTime()) - offCentre_(ddt0())
587 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
588 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
590 "ddt0(" +
rho.name() +
',' + vf.
name() +
')',
596 "ddt(" +
rho.name() +
',' + vf.
name() +
')',
597 mesh().time().timeName(),
607 const scalar rDtCoef0 = rDtCoef0_(ddt0).value();
609 ddt0.primitiveFieldRef() =
613 mesh().V0()*
rho.oldTime().primitiveField()
615 -
mesh().V00()*
rho.oldTime().oldTime().primitiveField()
616 *vf.
oldTime().oldTime().primitiveField()
617 ) -
mesh().V00()*offCentre_(ddt0.primitiveField())
620 ddt0.boundaryFieldRef() =
624 rho.oldTime().boundaryField()
626 -
rho.oldTime().oldTime().boundaryField()
627 *vf.
oldTime().oldTime().boundaryField()
628 ) - offCentre_(
ff(ddt0.boundaryField()))
632 return tmp<GeometricField<Type, fvPatchField, volMesh>>
634 new GeometricField<Type, fvPatchField, volMesh>
643 -
mesh().V0()*
rho.oldTime().primitiveField()
645 ) -
mesh().V00()*offCentre_(ddt0.primitiveField())
650 -
rho.oldTime().boundaryField()*vf.
oldTime().boundaryField()
651 ) - offCentre_(
ff(ddt0.boundaryField()))
659 ddt0 = rDtCoef0_(ddt0)*
662 -
rho.oldTime().oldTime()*vf.
oldTime().oldTime()
663 ) - offCentre_(ddt0());
666 return tmp<GeometricField<Type, fvPatchField, volMesh>>
668 new GeometricField<Type, fvPatchField, volMesh>
688 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
689 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
698 mesh().time().timeName(),
708 const scalar rDtCoef0 = rDtCoef0_(ddt0).value();
710 ddt0.primitiveFieldRef() =
715 *
alpha.oldTime().primitiveField()
716 *
rho.oldTime().primitiveField()
720 *
alpha.oldTime().oldTime().primitiveField()
721 *
rho.oldTime().oldTime().primitiveField()
722 *vf.
oldTime().oldTime().primitiveField()
723 ) -
mesh().V00()*offCentre_(ddt0.primitiveField())
726 ddt0.boundaryFieldRef() =
730 alpha.oldTime().boundaryField()
731 *
rho.oldTime().boundaryField()
734 -
alpha.oldTime().oldTime().boundaryField()
735 *
rho.oldTime().oldTime().boundaryField()
736 *vf.
oldTime().oldTime().boundaryField()
737 ) - offCentre_(
ff(ddt0.boundaryField()))
741 return tmp<GeometricField<Type, fvPatchField, volMesh>>
743 new GeometricField<Type, fvPatchField, volMesh>
753 *
alpha.primitiveField()
754 *
rho.primitiveField()
758 *
alpha.oldTime().primitiveField()
759 *
rho.oldTime().primitiveField()
761 ) -
mesh().V00()*offCentre_(ddt0.primitiveField())
765 alpha.boundaryField()
769 -
alpha.oldTime().boundaryField()
770 *
rho.oldTime().boundaryField()
772 ) - offCentre_(
ff(ddt0.boundaryField()))
780 ddt0 = rDtCoef0_(ddt0)*
786 -
alpha.oldTime().oldTime()
787 *
rho.oldTime().oldTime()
789 ) - offCentre_(ddt0());
792 return tmp<GeometricField<Type, fvPatchField, volMesh>>
794 new GeometricField<Type, fvPatchField, volMesh>
816 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
817 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
819 "ddt0(" + vf.
name() +
')',
834 const scalar rDtCoef = rDtCoef_(ddt0).value();
843 const scalar rDtCoef0 = rDtCoef0_(ddt0).value();
845 ddt0.primitiveFieldRef() =
850 -
mesh().V00()*vf.
oldTime().oldTime().primitiveField()
852 -
mesh().V00()*offCentre_(ddt0.primitiveField())
855 ddt0.boundaryFieldRef() =
860 - vf.
oldTime().oldTime().boundaryField()
862 - offCentre_(
ff(ddt0.boundaryField()))
868 rDtCoef*vf.
oldTime().primitiveField()
869 + offCentre_(ddt0.primitiveField())
877 - offCentre_(ddt0());
883 rDtCoef*vf.
oldTime().primitiveField()
884 + offCentre_(ddt0.primitiveField())
900 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
901 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
903 "ddt0(" +
rho.name() +
',' + vf.
name() +
')',
917 const scalar rDtCoef = rDtCoef_(ddt0).value();
926 const scalar rDtCoef0 = rDtCoef0_(ddt0).value();
928 ddt0.primitiveFieldRef() =
930 rDtCoef0*
rho.value()*
933 -
mesh().V00()*vf.
oldTime().oldTime().primitiveField()
935 -
mesh().V00()*offCentre_(ddt0.primitiveField())
938 ddt0.boundaryFieldRef() =
940 rDtCoef0*
rho.value()*
943 - vf.
oldTime().oldTime().boundaryField()
945 - offCentre_(
ff(ddt0.boundaryField()))
951 rDtCoef*
rho.value()*vf.
oldTime().primitiveField()
952 + offCentre_(ddt0.primitiveField())
960 - offCentre_(ddt0());
965 rDtCoef*
rho.value()*vf.
oldTime().primitiveField()
966 + offCentre_(ddt0.primitiveField())
982 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
983 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
985 "ddt0(" +
rho.name() +
',' + vf.
name() +
')',
999 const scalar rDtCoef = rDtCoef_(ddt0).value();
1000 fvm.
diag() = rDtCoef*
rho.primitiveField()*
mesh().V();
1003 rho.oldTime().oldTime();
1005 if (
mesh().moving())
1009 const scalar rDtCoef0 = rDtCoef0_(ddt0).value();
1011 ddt0.primitiveFieldRef() =
1015 mesh().V0()*
rho.oldTime().primitiveField()
1016 *vf.
oldTime().primitiveField()
1017 -
mesh().V00()*
rho.oldTime().oldTime().primitiveField()
1018 *vf.
oldTime().oldTime().primitiveField()
1020 -
mesh().V00()*offCentre_(ddt0.primitiveField())
1023 ddt0.boundaryFieldRef() =
1027 rho.oldTime().boundaryField()
1029 -
rho.oldTime().oldTime().boundaryField()
1030 *vf.
oldTime().oldTime().boundaryField()
1032 - offCentre_(
ff(ddt0.boundaryField()))
1038 rDtCoef*
rho.oldTime().primitiveField()*vf.
oldTime().primitiveField()
1039 + offCentre_(ddt0.primitiveField())
1046 ddt0 = rDtCoef0_(ddt0)*
1049 -
rho.oldTime().oldTime()*vf.
oldTime().oldTime()
1050 ) - offCentre_(ddt0());
1055 rDtCoef*
rho.oldTime().primitiveField()*vf.
oldTime().primitiveField()
1056 + offCentre_(ddt0.primitiveField())
1064 template<
class Type>
1073 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
1074 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
1090 const scalar rDtCoef = rDtCoef_(ddt0).value();
1091 fvm.
diag() = rDtCoef*
alpha.primitiveField()*
rho.primitiveField()*
mesh().V();
1094 alpha.oldTime().oldTime();
1095 rho.oldTime().oldTime();
1097 if (
mesh().moving())
1101 const scalar rDtCoef0 = rDtCoef0_(ddt0).value();
1103 ddt0.primitiveFieldRef() =
1108 *
alpha.oldTime().primitiveField()
1109 *
rho.oldTime().primitiveField()
1110 *vf.
oldTime().primitiveField()
1113 *
alpha.oldTime().oldTime().primitiveField()
1114 *
rho.oldTime().oldTime().primitiveField()
1115 *vf.
oldTime().oldTime().primitiveField()
1117 -
mesh().V00()*offCentre_(ddt0.primitiveField())
1120 ddt0.boundaryFieldRef() =
1124 alpha.oldTime().boundaryField()
1125 *
rho.oldTime().boundaryField()
1128 -
alpha.oldTime().oldTime().boundaryField()
1129 *
rho.oldTime().oldTime().boundaryField()
1130 *vf.
oldTime().oldTime().boundaryField()
1132 - offCentre_(
ff(ddt0.boundaryField()))
1139 *
alpha.oldTime().primitiveField()
1140 *
rho.oldTime().primitiveField()
1141 *vf.
oldTime().primitiveField()
1142 + offCentre_(ddt0.primitiveField())
1149 ddt0 = rDtCoef0_(ddt0)*
1155 -
alpha.oldTime().oldTime()
1156 *
rho.oldTime().oldTime()
1158 ) - offCentre_(ddt0());
1164 *
alpha.oldTime().primitiveField()
1165 *
rho.oldTime().primitiveField()
1166 *vf.
oldTime().primitiveField()
1167 + offCentre_(ddt0.primitiveField())
1175 template<
class Type>
1183 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
1184 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
1186 "ddtCorrDdt0(" +
U.name() +
')',
1190 DDt0Field<GeometricField<Type, fvsPatchField, surfaceMesh>>& dUfdt0 =
1191 ddt0_<GeometricField<Type, fvsPatchField, surfaceMesh>>
1193 "ddtCorrDdt0(" +
Uf.name() +
')',
1202 rDtCoef0_(ddt0)*(
U.oldTime() -
U.oldTime().oldTime())
1203 - offCentre_(ddt0());
1209 rDtCoef0_(dUfdt0)*(
Uf.oldTime() -
Uf.oldTime().oldTime())
1210 - offCentre_(dUfdt0());
1213 return tmp<fluxFieldType>
1219 "ddtCorr(" +
U.name() +
',' +
Uf.name() +
')',
1220 mesh().time().timeName(),
1223 this->fvcDdtPhiCoeff(
U.oldTime(),
mesh().Sf() &
Uf.oldTime())
1227 (rDtCoef*
Uf.oldTime() + offCentre_(dUfdt0()))
1236 template<
class Type>
1241 const fluxFieldType&
phi 1244 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
1245 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
1247 "ddtCorrDdt0(" +
U.name() +
')',
1251 DDt0Field<fluxFieldType>& dphidt0 =
1252 ddt0_<fluxFieldType>
1254 "ddtCorrDdt0(" +
phi.name() +
')',
1257 dphidt0.setOriented();
1264 rDtCoef0_(ddt0)*(
U.oldTime() -
U.oldTime().oldTime())
1265 - offCentre_(ddt0());
1271 rDtCoef0_(dphidt0)*(
phi.oldTime() -
phi.oldTime().oldTime())
1272 - offCentre_(dphidt0());
1275 return tmp<fluxFieldType>
1281 "ddtCorr(" +
U.name() +
',' +
phi.name() +
')',
1282 mesh().time().timeName(),
1285 this->fvcDdtPhiCoeff(
U.oldTime(),
phi.oldTime())
1287 (rDtCoef*
phi.oldTime() + offCentre_(dphidt0()))
1291 rDtCoef*
U.oldTime() + offCentre_(ddt0())
1299 template<
class Type>
1314 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
1315 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
1317 "ddtCorrDdt0(" +
rho.name() +
',' +
U.name() +
')',
1318 rho.dimensions()*
U.dimensions()
1321 DDt0Field<GeometricField<Type, fvsPatchField, surfaceMesh>>& dUfdt0 =
1322 ddt0_<GeometricField<Type, fvsPatchField, surfaceMesh>>
1324 "ddtCorrDdt0(" +
Uf.name() +
')',
1332 rho.oldTime()*
U.oldTime()
1339 *(rhoU0 -
rho.oldTime().oldTime()*
U.oldTime().oldTime())
1340 - offCentre_(ddt0());
1347 *(
Uf.oldTime() -
Uf.oldTime().oldTime())
1348 - offCentre_(dUfdt0());
1358 +
rho.name() +
',' +
U.name() +
',' +
Uf.name() +
')',
1359 mesh().time().timeName(),
1362 this->fvcDdtPhiCoeff
1365 mesh().Sf() &
Uf.oldTime(),
1371 (rDtCoef*
Uf.oldTime() + offCentre_(dUfdt0()))
1386 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
1387 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
1389 "ddtCorrDdt0(" +
U.name() +
')',
1393 DDt0Field<GeometricField<Type, fvsPatchField, surfaceMesh>>& dUfdt0 =
1394 ddt0_<GeometricField<Type, fvsPatchField, surfaceMesh>>
1396 "ddtCorrDdt0(" +
Uf.name() +
')',
1405 rDtCoef0_(ddt0)*(
U.oldTime() -
U.oldTime().oldTime())
1406 - offCentre_(ddt0());
1412 rDtCoef0_(dUfdt0)*(
Uf.oldTime() -
Uf.oldTime().oldTime())
1413 - offCentre_(dUfdt0());
1416 return tmp<fluxFieldType>
1422 "ddtCorr(" +
U.name() +
',' +
Uf.name() +
')',
1423 mesh().time().timeName(),
1426 this->fvcDdtPhiCoeff
1429 mesh().Sf() &
Uf.oldTime(),
1435 (rDtCoef*
Uf.oldTime() + offCentre_(dUfdt0()))
1438 rDtCoef*
U.oldTime() + offCentre_(ddt0())
1448 <<
"dimensions of Uf are not correct" 1451 return fluxFieldType::null();
1456 template<
class Type>
1462 const fluxFieldType&
phi 1471 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
1472 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
1474 "ddtCorrDdt0(" +
rho.name() +
',' +
U.name() +
')',
1475 rho.dimensions()*
U.dimensions()
1478 DDt0Field<fluxFieldType>& dphidt0 =
1479 ddt0_<fluxFieldType>
1481 "ddtCorrDdt0(" +
phi.name() +
')',
1489 rho.oldTime()*
U.oldTime()
1496 *(rhoU0 -
rho.oldTime().oldTime()*
U.oldTime().oldTime())
1497 - offCentre_(ddt0());
1504 *(
phi.oldTime() -
phi.oldTime().oldTime())
1505 - offCentre_(dphidt0());
1515 +
rho.name() +
',' +
U.name() +
',' +
phi.name() +
')',
1516 mesh().time().timeName(),
1519 this->fvcDdtPhiCoeff(rhoU0,
phi.oldTime(),
rho.oldTime())
1521 (rDtCoef*
phi.oldTime() + offCentre_(dphidt0()))
1525 rDtCoef*rhoU0 + offCentre_(ddt0())
1539 DDt0Field<GeometricField<Type, fvPatchField, volMesh>>& ddt0 =
1540 ddt0_<GeometricField<Type, fvPatchField, volMesh>>
1542 "ddtCorrDdt0(" +
U.name() +
')',
1546 DDt0Field<fluxFieldType>& dphidt0 =
1547 ddt0_<fluxFieldType>
1549 "ddtCorrDdt0(" +
phi.name() +
')',
1558 rDtCoef0_(ddt0)*(
U.oldTime() -
U.oldTime().oldTime())
1559 - offCentre_(ddt0());
1565 rDtCoef0_(dphidt0)*(
phi.oldTime() -
phi.oldTime().oldTime())
1566 - offCentre_(dphidt0());
1569 return tmp<fluxFieldType>
1575 "ddtCorr(" +
U.name() +
',' +
phi.name() +
')',
1576 mesh().time().timeName(),
1579 this->fvcDdtPhiCoeff(
U.oldTime(),
phi.oldTime(),
rho.oldTime())
1581 (rDtCoef*
phi.oldTime() + offCentre_(dphidt0()))
1585 rDtCoef*
U.oldTime() + offCentre_(ddt0())
1594 <<
"dimensions of phi are not correct" 1597 return fluxFieldType::null();
1602 template<
class Type>
1608 DDt0Field<surfaceScalarField>& meshPhi0 = ddt0_<surfaceScalarField>
1614 meshPhi0.setOriented();
1619 coef0_(meshPhi0)*
mesh().phi().oldTime() - offCentre_(meshPhi0());
1622 return tmp<surfaceScalarField>
1635 coef_(meshPhi0)*
mesh().
phi() - offCentre_(meshPhi0())
tmp< fluxFieldType > fvcDdtUfCorr(const GeometricField< Type, fvPatchField, volMesh > &U, const GeometricField< Type, fvsPatchField, surfaceMesh > &Uf)
const fvMesh & mesh() const
Return mesh reference.
Second-oder Crank-Nicolson implicit ddt using the current and previous time-step fields as well as th...
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.
errorManipArg< error, int > exit(error &err, const int errNo=1)
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.
scalar number() const
Return label, float or double value.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)...
scalar ocCoeff() const
Return the current off-centreing coefficient.
A token holds an item read from 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.
tmp< GeometricField< typename flux< Type >::type, fvsPatchField, surfaceMesh > > ddtCorr(const GeometricField< Type, fvPatchField, volMesh > &U, const GeometricField< Type, fvsPatchField, surfaceMesh > &Uf)
const dimensionSet dimVol(dimVolume)
Older spelling for dimVolume.
const DimensionedField< scalar, volMesh > & V00() const
Return old-old-time cell volumes.
bool store()
Register object with its registry and transfer ownership to the registry.
Generic GeometricField class.
Generic dimensioned Type class.
Ignore writing from objectRegistry::writeObject()
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Abstract base class for ddt schemes.
const dimensionSet dimVolume(pow3(dimLength))
Dimension set for the base types, which can be used to implement rigorous dimension checking for alge...
void putBack(const token &tok)
Put back a token. Only a single put back is permitted.
IOobject io("surfaceFilmProperties", mesh.time().constant(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, false)
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
A class for handling words, derived from Foam::string.
tmp< fluxFieldType > fvcDdtPhiCorr(const GeometricField< Type, fvPatchField, volMesh > &U, const fluxFieldType &phi)
string evaluate(label fieldWidth, const std::string &s, size_t pos=0, size_t len=std::string::npos)
String evaluation with specified (positive, non-zero) field width.
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.
errorManip< error > abort(error &err)
Calculate the divergence of the given field.
tmp< fvMatrix< Type > > fvmDdt(const GeometricField< Type, fvPatchField, volMesh > &)
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
bool moving() const noexcept
Is mesh moving.
tmp< GeometricField< Type, fvPatchField, volMesh > > fvcDdt(const dimensioned< Type > &)
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
Mesh data needed to do the Finite Volume discretisation.
Automatically write from objectRegistry::writeObject()
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
A special matrix type and solver, designed for finite volume solutions of scalar equations.
tmp< surfaceScalarField > meshPhi(const GeometricField< Type, fvPatchField, volMesh > &)
A class for managing temporary objects.
GeometricField< scalar, fvsPatchField, surfaceMesh > surfaceScalarField
const dimensionedScalar alpha
Fine-structure constant: default SI units: [].
bool isNumber() const noexcept
Token is LABEL, FLOAT or DOUBLE.
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 FieldField< fvPatchField, Type > & ff(const FieldField< fvPatchField, Type > &bf)
const dimensionSet dimArea(sqr(dimLength))
const dimensionSet & dimensions() const noexcept
Return dimensions.
IOerror FatalIOError
Error stream (stdout output on all processes), with additional 'FOAM FATAL IO ERROR' header text and ...
static constexpr const zero Zero
Global zero (0)
const dimensionSet dimVelocity