44 template<
class GeoField>
45 CrankNicholsonDdtScheme<Type>::DDt0Field<GeoField>::DDt0Field
57 this->
timeIndex() = mesh.time().startTimeIndex();
62 template<
class GeoField>
63 CrankNicholsonDdtScheme<Type>::DDt0Field<GeoField>::DDt0Field
67 const dimensioned<typename GeoField::value_type>& dimType
70 GeoField(io, mesh, dimType),
76 template<
class GeoField>
77 label CrankNicholsonDdtScheme<Type>::DDt0Field<GeoField>::
78 startTimeIndex()
const
80 return startTimeIndex_;
85 template<
class GeoField>
86 GeoField& CrankNicholsonDdtScheme<Type>::DDt0Field<GeoField>::
94 template<
class GeoField>
95 void CrankNicholsonDdtScheme<Type>::DDt0Field<GeoField>::
96 operator=(
const GeoField& gf)
98 GeoField::operator=(gf);
103 template<
class GeoField>
104 CrankNicholsonDdtScheme<Type>::DDt0Field<GeoField>&
105 CrankNicholsonDdtScheme<Type>::ddt0_
108 const dimensionSet& dims
111 if (!
mesh().objectRegistry::foundObject<GeoField>(name))
113 const Time& runTime =
mesh().time();
114 word startTimeName = runTime.timeName(runTime.startTime().value());
119 runTime.timeIndex() == runTime.startTimeIndex()
120 || runTime.timeIndex() == runTime.startTimeIndex() + 1
132 new DDt0Field<GeoField>
150 new DDt0Field<GeoField>
161 dimensioned<typename GeoField::value_type>
165 pTraits<typename GeoField::value_type>::zero
172 DDt0Field<GeoField>& ddt0 =
static_cast<DDt0Field<GeoField>&
>
174 const_cast<GeoField&
>
176 mesh().objectRegistry::lookupObject<GeoField>(
name)
185 template<
class GeoField>
186 bool CrankNicholsonDdtScheme<Type>::evaluate
188 const DDt0Field<GeoField>& ddt0
191 return ddt0.timeIndex() !=
mesh().time().timeIndex();
195 template<
class GeoField>
196 scalar CrankNicholsonDdtScheme<Type>::coef_
198 const DDt0Field<GeoField>& ddt0
203 return 1.0 + ocCoeff_;
213 template<
class GeoField>
214 scalar CrankNicholsonDdtScheme<Type>::coef0_
216 const DDt0Field<GeoField>& ddt0
221 return 1.0 + ocCoeff_;
231 template<
class GeoField>
234 const DDt0Field<GeoField>& ddt0
237 return coef_(ddt0)/
mesh().time().deltaT();
242 template<
class GeoField>
245 const DDt0Field<GeoField>& ddt0
248 return coef0_(ddt0)/
mesh().time().deltaT0();
253 template<
class GeoField>
254 tmp<GeoField> CrankNicholsonDdtScheme<Type>::offCentre_
261 return ocCoeff_*ddt0;
271 const FieldField<fvPatchField, Type>&
ff
289 DDt0Field<GeometricField<Type, fvPatchField, volMesh> >& ddt0 =
290 ddt0_<GeometricField<Type, fvPatchField, volMesh> >
292 "ddt0(" + dt.
name() +
')',
298 "ddt(" + dt.
name() +
')',
299 mesh().time().timeName(),
326 ddt0.dimensionedInternalField() =
328 (rDtCoef0*dt)*(
mesh().V0() -
mesh().V00())
329 -
mesh().V00()*offCentre_(ddt0.dimensionedInternalField())
333 tdtdt().dimensionedInternalField() =
335 (rDtCoef*dt)*(
mesh().V() -
mesh().V0())
336 -
mesh().V0()*offCentre_(ddt0.dimensionedInternalField())
351 DDt0Field<GeometricField<Type, fvPatchField, volMesh> >& ddt0 =
352 ddt0_<GeometricField<Type, fvPatchField, volMesh> >
354 "ddt0(" + vf.
name() +
')',
360 "ddt(" + vf.
name() +
')',
361 mesh().time().timeName(),
371 scalar rDtCoef0 = rDtCoef0_(ddt0).value();
373 ddt0.internalField() =
379 ) -
mesh().V00()*offCentre_(ddt0.internalField())
382 ddt0.boundaryField() =
388 ) - offCentre_(
ff(ddt0.boundaryField()))
404 ) -
mesh().V0()*offCentre_(ddt0.internalField())
409 ) - offCentre_(
ff(ddt0.boundaryField()))
418 - offCentre_(ddt0());
426 rDtCoef*(vf - vf.
oldTime()) - offCentre_(ddt0())
441 DDt0Field<GeometricField<Type, fvPatchField, volMesh> >& ddt0 =
442 ddt0_<GeometricField<Type, fvPatchField, volMesh> >
444 "ddt0(" + rho.
name() +
',' + vf.
name() +
')',
450 "ddt(" + rho.
name() +
',' + vf.
name() +
')',
451 mesh().time().timeName(),
461 scalar rDtCoef0 = rDtCoef0_(ddt0).value();
463 ddt0.internalField() =
465 rDtCoef0*rho.
value()*
469 ) -
mesh().V00()*offCentre_(ddt0.internalField())
472 ddt0.boundaryField() =
474 rDtCoef0*rho.
value()*
478 ) - offCentre_(
ff(ddt0.boundaryField()))
490 rDtCoef.value()*rho.
value()*
494 ) -
mesh().V0()*offCentre_(ddt0.internalField())
496 rDtCoef.value()*rho.
value()*
499 ) - offCentre_(
ff(ddt0.boundaryField()))
508 - offCentre_(ddt0());
516 rDtCoef*rho*(vf - vf.
oldTime()) - offCentre_(ddt0())
531 DDt0Field<GeometricField<Type, fvPatchField, volMesh> >& ddt0 =
532 ddt0_<GeometricField<Type, fvPatchField, volMesh> >
534 "ddt0(" + rho.
name() +
',' + vf.
name() +
')',
540 "ddt(" + rho.
name() +
',' + vf.
name() +
')',
541 mesh().time().timeName(),
551 scalar rDtCoef0 = rDtCoef0_(ddt0).value();
553 ddt0.internalField() =
561 ) -
mesh().V00()*offCentre_(ddt0.internalField())
564 ddt0.boundaryField() =
572 ) - offCentre_(
ff(ddt0.boundaryField()))
589 ) -
mesh().V00()*offCentre_(ddt0.internalField())
595 ) - offCentre_(
ff(ddt0.boundaryField()))
603 ddt0 = rDtCoef0_(ddt0)*
607 ) - offCentre_(ddt0());
630 DDt0Field<GeometricField<Type, fvPatchField, volMesh> >& ddt0 =
631 ddt0_<GeometricField<Type, fvPatchField, volMesh> >
633 "ddt0(" + vf.
name() +
')',
648 scalar rDtCoef = rDtCoef_(ddt0).value();
658 scalar rDtCoef0 = rDtCoef0_(ddt0).value();
660 ddt0.internalField() =
667 -
mesh().V00()*offCentre_(ddt0.internalField())
670 ddt0.boundaryField() =
677 - offCentre_(
ff(ddt0.boundaryField()))
684 + offCentre_(ddt0.internalField())
692 - offCentre_(ddt0());
698 + offCentre_(ddt0.internalField())
714 DDt0Field<GeometricField<Type, fvPatchField, volMesh> >& ddt0 =
715 ddt0_<GeometricField<Type, fvPatchField, volMesh> >
717 "ddt0(" + rho.
name() +
',' + vf.
name() +
')',
731 scalar rDtCoef = rDtCoef_(ddt0).value();
740 scalar rDtCoef0 = rDtCoef0_(ddt0).value();
742 ddt0.internalField() =
744 rDtCoef0*rho.
value()*
749 -
mesh().V00()*offCentre_(ddt0.internalField())
752 ddt0.boundaryField() =
754 rDtCoef0*rho.
value()*
759 - offCentre_(
ff(ddt0.boundaryField()))
766 + offCentre_(ddt0.internalField())
774 - offCentre_(ddt0());
780 + offCentre_(ddt0.internalField())
796 DDt0Field<GeometricField<Type, fvPatchField, volMesh> >& ddt0 =
797 ddt0_<GeometricField<Type, fvPatchField, volMesh> >
799 "ddt0(" + rho.
name() +
',' + vf.
name() +
')',
813 scalar rDtCoef = rDtCoef_(ddt0).value();
823 scalar rDtCoef0 = rDtCoef0_(ddt0).value();
825 ddt0.internalField() =
834 -
mesh().V00()*offCentre_(ddt0.internalField())
837 ddt0.boundaryField() =
846 - offCentre_(
ff(ddt0.boundaryField()))
853 + offCentre_(ddt0.internalField())
860 ddt0 = rDtCoef0_(ddt0)*
864 ) - offCentre_(ddt0());
870 + offCentre_(ddt0.internalField())
888 DDt0Field<GeometricField<Type, fvPatchField, volMesh> >& dUdt0 =
889 ddt0_<GeometricField<Type, fvPatchField, volMesh> >
891 "ddt0(" + U.
name() +
')',
895 DDt0Field<fluxFieldType>& dphidt0 =
898 "ddt0(" + phi.
name() +
')',
904 "ddtPhiCorr(" + rA.
name() +
',' + U.
name() +
',' + phi.
name() +
')',
905 mesh().time().timeName(),
934 - offCentre_(dUdt0());
937 if (evaluate(dphidt0))
941 - offCentre_(dphidt0());
952 (rDtCoef*phi.
oldTime() + offCentre_(dphidt0()))
956 (rDtCoef*U.
oldTime() + offCentre_(dUdt0()))
976 DDt0Field<GeometricField<Type, fvPatchField, volMesh> >& dUdt0 =
977 ddt0_<GeometricField<Type, fvPatchField, volMesh> >
979 "ddt0(" + U.
name() +
')',
983 DDt0Field<fluxFieldType>& dphidt0 =
986 "ddt0(" + phi.
name() +
')',
994 mesh().time().timeName(),
1000 if (
mesh().moving())
1025 if (evaluate(dUdt0))
1027 dUdt0 = rDtCoef0_(dUdt0)*
1030 ) - offCentre_(dUdt0());
1033 if (evaluate(dphidt0))
1035 dphidt0 = rDtCoef0_(dphidt0)*
1040 ) - offCentre_(dphidt0());
1051 *(rDtCoef*phi.
oldTime() + offCentre_(dphidt0()))
1056 *(rDtCoef*U.
oldTime() + offCentre_(dUdt0()))
1069 if (evaluate(dUdt0))
1071 dUdt0 = rDtCoef0_(dUdt0)*
1074 ) - offCentre_(dUdt0());
1077 if (evaluate(dphidt0))
1079 dphidt0 = rDtCoef0_(dphidt0)*
1085 ) - offCentre_(dphidt0());
1102 + offCentre_(dphidt0())
1108 *(rDtCoef*U.
oldTime() + offCentre_(dUdt0()))
1121 if (evaluate(dUdt0))
1123 dUdt0 = rDtCoef0_(dUdt0)*
1126 ) - offCentre_(dUdt0());
1129 if (evaluate(dphidt0))
1131 dphidt0 = rDtCoef0_(dphidt0)*
1134 ) - offCentre_(dphidt0());
1145 *(rDtCoef*phi.
oldTime() + offCentre_(dphidt0()))
1149 rA*(rDtCoef*U.
oldTime() + offCentre_(dUdt0()))
1160 "CrankNicholsonDdtScheme<Type>::fvcDdtPhiCorr"
1161 ) <<
"dimensions of phi are not correct"
1164 return fluxFieldType::null();
1170 template<
class Type>
1176 DDt0Field<surfaceScalarField>& meshPhi0 = ddt0_<surfaceScalarField>
1182 if (evaluate(meshPhi0))
1185 coef0_(meshPhi0)*
mesh().phi().oldTime() - offCentre_(meshPhi0());
1188 return coef_(meshPhi0)*
mesh().phi() - offCentre_(meshPhi0());