Added ddtPhiCorr support for moving mesh

This commit is contained in:
henry
2008-05-09 11:47:33 +01:00
parent 66d672b92b
commit 793fec2521
4 changed files with 233 additions and 305 deletions

View File

@ -74,7 +74,7 @@ int main(int argc, char *argv[])
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
// Make the fluxes absolute // Make the fluxes absolute
if (mesh.changing() && correctPhi) if (mesh.changing())
{ {
fvc::makeAbsolute(phi, U); fvc::makeAbsolute(phi, U);
} }
@ -99,8 +99,11 @@ int main(int argc, char *argv[])
#include "correctPhi.H" #include "correctPhi.H"
} }
// Keep the absolute fluxes for use in ddtPhiCorr
surfaceScalarField phiAbs("phiAbs", phi);
// Make the fluxes relative to the mesh motion // Make the fluxes relative to the mesh motion
if (mesh.changing() && correctPhi) if (mesh.changing())
{ {
fvc::makeRelative(phi, U); fvc::makeRelative(phi, U);
} }

View File

@ -9,7 +9,7 @@
( (
"phiU", "phiU",
(fvc::interpolate(U) & mesh.Sf()) (fvc::interpolate(U) & mesh.Sf())
//+ fvc::ddtPhiCorr(rAU, rho, U, phiAbs) + fvc::ddtPhiCorr(rAU, rho, U, phiAbs)
); );
phi = phiU + phi = phiU +

View File

@ -1,4 +1,4 @@
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------* \
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
@ -375,50 +375,30 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
( (
const volScalarField& rA, const volScalarField& rA,
const GeometricField<Type, fvPatchField, volMesh>& U, const GeometricField<Type, fvPatchField, volMesh>& U,
const fluxFieldType& phi const fluxFieldType& phiAbs
) )
{ {
dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT(); dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
IOobject ddtIOobject IOobject ddtIOobject
( (
"ddtPhiCorr(" + rA.name() + ',' + U.name() + ',' + phi.name() + ')', "ddtPhiCorr(" + rA.name() + ',' + U.name() + ',' + phiAbs.name() + ')',
mesh().time().timeName(), mesh().time().timeName(),
mesh() mesh()
); );
if (mesh().moving())
{
return tmp<fluxFieldType>
(
new fluxFieldType
(
ddtIOobject,
mesh(),
dimensioned<typename flux<Type>::type>
(
"0",
rDeltaT.dimensions()*rA.dimensions()*phi.dimensions(),
pTraits<typename flux<Type>::type>::zero
)
)
);
}
else
{
tmp<fluxFieldType> phiCorr = tmp<fluxFieldType> phiCorr =
phi.oldTime() - (fvc::interpolate(U.oldTime()) & mesh().Sf()); phiAbs.oldTime() - (fvc::interpolate(U.oldTime()) & mesh().Sf());
return tmp<fluxFieldType> return tmp<fluxFieldType>
( (
new fluxFieldType new fluxFieldType
( (
ddtIOobject, ddtIOobject,
fvcDdtPhiCoeff(U.oldTime(), phi.oldTime(), phiCorr()) fvcDdtPhiCoeff(U.oldTime(), phiAbs.oldTime(), phiCorr())
*fvc::interpolate(rDeltaT*rA)*phiCorr *fvc::interpolate(rDeltaT*rA)*phiCorr
) )
); );
}
} }
@ -429,7 +409,7 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
const volScalarField& rA, const volScalarField& rA,
const volScalarField& rho, const volScalarField& rho,
const GeometricField<Type, fvPatchField, volMesh>& U, const GeometricField<Type, fvPatchField, volMesh>& U,
const fluxFieldType& phi const fluxFieldType& phiAbs
) )
{ {
dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT(); dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
@ -437,35 +417,18 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
IOobject ddtIOobject IOobject ddtIOobject
( (
"ddtPhiCorr(" "ddtPhiCorr("
+ rA.name() + ',' + rho.name() + ',' + U.name() + ',' + phi.name() + ')', + rA.name() + ','
+ rho.name() + ','
+ U.name() + ','
+ phiAbs.name() + ')',
mesh().time().timeName(), mesh().time().timeName(),
mesh() mesh()
); );
if (mesh().moving())
{
return tmp<fluxFieldType>
(
new fluxFieldType
(
ddtIOobject,
mesh(),
dimensioned<typename flux<Type>::type>
(
"0",
rDeltaT.dimensions()*rA.dimensions()
*rho.dimensions()*phi.dimensions(),
pTraits<typename flux<Type>::type>::zero
)
)
);
}
else
{
if if
( (
U.dimensions() == dimVelocity U.dimensions() == dimVelocity
&& phi.dimensions() == dimVelocity*dimArea && phiAbs.dimensions() == dimVelocity*dimArea
) )
{ {
return tmp<fluxFieldType> return tmp<fluxFieldType>
@ -473,9 +436,10 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
new fluxFieldType new fluxFieldType
( (
ddtIOobject, ddtIOobject,
rDeltaT*fvcDdtPhiCoeff(U.oldTime(), phi.oldTime()) rDeltaT
*fvcDdtPhiCoeff(U.oldTime(), phiAbs.oldTime())
*( *(
fvc::interpolate(rA*rho.oldTime())*phi.oldTime() fvc::interpolate(rA*rho.oldTime())*phiAbs.oldTime()
- (fvc::interpolate(rA*rho.oldTime()*U.oldTime()) - (fvc::interpolate(rA*rho.oldTime()*U.oldTime())
& mesh().Sf()) & mesh().Sf())
) )
@ -485,7 +449,7 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
else if else if
( (
U.dimensions() == dimVelocity U.dimensions() == dimVelocity
&& phi.dimensions() == rho.dimensions()*dimVelocity*dimArea && phiAbs.dimensions() == rho.dimensions()*dimVelocity*dimArea
) )
{ {
return tmp<fluxFieldType> return tmp<fluxFieldType>
@ -497,11 +461,11 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
*fvcDdtPhiCoeff *fvcDdtPhiCoeff
( (
U.oldTime(), U.oldTime(),
phi.oldTime()/fvc::interpolate(rho.oldTime()) phiAbs.oldTime()/fvc::interpolate(rho.oldTime())
) )
*( *(
fvc::interpolate(rA*rho.oldTime()) fvc::interpolate(rA*rho.oldTime())
*phi.oldTime()/fvc::interpolate(rho.oldTime()) *phiAbs.oldTime()/fvc::interpolate(rho.oldTime())
- ( - (
fvc::interpolate fvc::interpolate
( (
@ -515,7 +479,7 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
else if else if
( (
U.dimensions() == rho.dimensions()*dimVelocity U.dimensions() == rho.dimensions()*dimVelocity
&& phi.dimensions() == rho.dimensions()*dimVelocity*dimArea && phiAbs.dimensions() == rho.dimensions()*dimVelocity*dimArea
) )
{ {
return tmp<fluxFieldType> return tmp<fluxFieldType>
@ -524,9 +488,9 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
( (
ddtIOobject, ddtIOobject,
rDeltaT rDeltaT
*fvcDdtPhiCoeff(rho.oldTime(), U.oldTime(), phi.oldTime()) *fvcDdtPhiCoeff(rho.oldTime(), U.oldTime(), phiAbs.oldTime())
*( *(
fvc::interpolate(rA)*phi.oldTime() fvc::interpolate(rA)*phiAbs.oldTime()
- (fvc::interpolate(rA*U.oldTime()) & mesh().Sf()) - (fvc::interpolate(rA*U.oldTime()) & mesh().Sf())
) )
) )
@ -537,12 +501,11 @@ EulerDdtScheme<Type>::fvcDdtPhiCorr
FatalErrorIn FatalErrorIn
( (
"EulerDdtScheme<Type>::fvcDdtPhiCorr" "EulerDdtScheme<Type>::fvcDdtPhiCorr"
) << "dimensions of phi are not correct" ) << "dimensions of phiAbs are not correct"
<< abort(FatalError); << abort(FatalError);
return fluxFieldType::null(); return fluxFieldType::null();
} }
}
} }

View File

@ -531,25 +531,6 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
mesh() mesh()
); );
if (mesh().moving())
{
return tmp<fluxFieldType>
(
new fluxFieldType
(
ddtIOobject,
mesh(),
dimensioned<typename flux<Type>::type>
(
"0",
rDeltaT.dimensions()*rA.dimensions()*phi.dimensions(),
pTraits<typename flux<Type>::type>::zero
)
)
);
}
else
{
scalar deltaT = deltaT_(); scalar deltaT = deltaT_();
scalar deltaT0 = deltaT0_(U); scalar deltaT0 = deltaT0_(U);
@ -582,7 +563,6 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
) )
) )
); );
}
} }
@ -593,7 +573,7 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
const volScalarField& rA, const volScalarField& rA,
const volScalarField& rho, const volScalarField& rho,
const GeometricField<Type, fvPatchField, volMesh>& U, const GeometricField<Type, fvPatchField, volMesh>& U,
const fluxFieldType& phi const fluxFieldType& phiAbs
) )
{ {
dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT(); dimensionedScalar rDeltaT = 1.0/mesh().time().deltaT();
@ -601,31 +581,14 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
IOobject ddtIOobject IOobject ddtIOobject
( (
"ddtPhiCorr(" "ddtPhiCorr("
+ rA.name() + ',' + rho.name() + ',' + U.name() + ',' + phi.name() + ')', + rA.name() + ','
+ rho.name() + ','
+ U.name() + ','
+ phiAbs.name() + ')',
mesh().time().timeName(), mesh().time().timeName(),
mesh() mesh()
); );
if (mesh().moving())
{
return tmp<fluxFieldType>
(
new fluxFieldType
(
ddtIOobject,
mesh(),
dimensioned<typename flux<Type>::type>
(
"0",
rDeltaT.dimensions()*rA.dimensions()
*rho.dimensions()*phi.dimensions(),
pTraits<typename flux<Type>::type>::zero
)
)
);
}
else
{
scalar deltaT = deltaT_(); scalar deltaT = deltaT_();
scalar deltaT0 = deltaT0_(U); scalar deltaT0 = deltaT0_(U);
@ -636,7 +599,7 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
if if
( (
U.dimensions() == dimVelocity U.dimensions() == dimVelocity
&& phi.dimensions() == dimVelocity*dimArea && phiAbs.dimensions() == dimVelocity*dimArea
) )
{ {
return tmp<fluxFieldType> return tmp<fluxFieldType>
@ -644,12 +607,12 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
new fluxFieldType new fluxFieldType
( (
ddtIOobject, ddtIOobject,
rDeltaT*fvcDdtPhiCoeff(U.oldTime(), phi.oldTime()) rDeltaT*fvcDdtPhiCoeff(U.oldTime(), phiAbs.oldTime())
*( *(
coefft0*fvc::interpolate(rA*rho.oldTime()) coefft0*fvc::interpolate(rA*rho.oldTime())
*phi.oldTime() *phiAbs.oldTime()
- coefft00*fvc::interpolate(rA*rho.oldTime().oldTime()) - coefft00*fvc::interpolate(rA*rho.oldTime().oldTime())
*phi.oldTime().oldTime() *phiAbs.oldTime().oldTime()
- ( - (
fvc::interpolate fvc::interpolate
( (
@ -668,7 +631,7 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
else if else if
( (
U.dimensions() == dimVelocity U.dimensions() == dimVelocity
&& phi.dimensions() == rho.dimensions()*dimVelocity*dimArea && phiAbs.dimensions() == rho.dimensions()*dimVelocity*dimArea
) )
{ {
return tmp<fluxFieldType> return tmp<fluxFieldType>
@ -680,14 +643,14 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
*fvcDdtPhiCoeff *fvcDdtPhiCoeff
( (
U.oldTime(), U.oldTime(),
phi.oldTime()/fvc::interpolate(rho.oldTime()) phiAbs.oldTime()/fvc::interpolate(rho.oldTime())
) )
*( *(
fvc::interpolate(rA*rho.oldTime()) fvc::interpolate(rA*rho.oldTime())
*( *(
coefft0*phi.oldTime() coefft0*phiAbs.oldTime()
/fvc::interpolate(rho.oldTime()) /fvc::interpolate(rho.oldTime())
- coefft00*phi.oldTime().oldTime() - coefft00*phiAbs.oldTime().oldTime()
/fvc::interpolate(rho.oldTime().oldTime()) /fvc::interpolate(rho.oldTime().oldTime())
) )
- ( - (
@ -707,7 +670,7 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
else if else if
( (
U.dimensions() == rho.dimensions()*dimVelocity U.dimensions() == rho.dimensions()*dimVelocity
&& phi.dimensions() == rho.dimensions()*dimVelocity*dimArea && phiAbs.dimensions() == rho.dimensions()*dimVelocity*dimArea
) )
{ {
return tmp<fluxFieldType> return tmp<fluxFieldType>
@ -716,12 +679,12 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
( (
ddtIOobject, ddtIOobject,
rDeltaT rDeltaT
*fvcDdtPhiCoeff(rho.oldTime(), U.oldTime(), phi.oldTime()) *fvcDdtPhiCoeff(rho.oldTime(), U.oldTime(), phiAbs.oldTime())
*( *(
fvc::interpolate(rA) fvc::interpolate(rA)
*( *(
coefft0*phi.oldTime() coefft0*phiAbs.oldTime()
- coefft00*phi.oldTime().oldTime() - coefft00*phiAbs.oldTime().oldTime()
) )
- ( - (
fvc::interpolate fvc::interpolate
@ -742,12 +705,11 @@ backwardDdtScheme<Type>::fvcDdtPhiCorr
FatalErrorIn FatalErrorIn
( (
"backwardDdtScheme<Type>::fvcDdtPhiCorr" "backwardDdtScheme<Type>::fvcDdtPhiCorr"
) << "dimensions of phi are not correct" ) << "dimensions of phiAbs are not correct"
<< abort(FatalError); << abort(FatalError);
return fluxFieldType::null(); return fluxFieldType::null();
} }
}
} }