Merged volume continuity check files
This commit is contained in:
parent
850f11a9fc
commit
6b09536c33
4 changed files with 49 additions and 75 deletions
|
@ -68,7 +68,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
mesh.update();
|
mesh.update();
|
||||||
|
|
||||||
# include "checkVolContinuity.H"
|
# include "volContinuity.H"
|
||||||
# include "meshCourantNo.H"
|
# include "meshCourantNo.H"
|
||||||
|
|
||||||
if
|
if
|
||||||
|
|
|
@ -61,7 +61,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
mesh.update();
|
mesh.update();
|
||||||
|
|
||||||
# include "checkVolContinuity.H"
|
# include "volContinuity.H"
|
||||||
# include "meshCourantNo.H"
|
# include "meshCourantNo.H"
|
||||||
|
|
||||||
if (runTime.timeIndex() % checkFrequency == 0)
|
if (runTime.timeIndex() % checkFrequency == 0)
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
if (mesh.moving())
|
|
||||||
{
|
|
||||||
// The ddt term constructed by hand because it must be Euler
|
|
||||||
const scalar dt = runTime.deltaT().value();
|
|
||||||
|
|
||||||
const scalarField& V = mesh.V().field();
|
|
||||||
const scalarField& V0 = mesh.V0().field();
|
|
||||||
scalar sumV = gSum(V);
|
|
||||||
scalar sumV0 = gSum(V0);
|
|
||||||
|
|
||||||
// Rewrite of mesh motion check based on round-off error problems
|
|
||||||
// Note precision around V and avoiding division with dt
|
|
||||||
// HJ, 4/Oct/2011
|
|
||||||
scalarField volChange = (V - V0)/V;
|
|
||||||
|
|
||||||
scalarField divFlux =
|
|
||||||
- fvc::div(mesh.phi())().internalField()*dt;
|
|
||||||
|
|
||||||
scalarField conserve = volChange + divFlux;
|
|
||||||
|
|
||||||
scalar sumLocalContErr = dt*gSum(mag(conserve*mesh.V()))/sumV;
|
|
||||||
scalar globalContErr = dt*gSum(conserve*mesh.V())/sumV;
|
|
||||||
|
|
||||||
label nMotionErrors = 0;
|
|
||||||
scalar maxMotionError = 0;
|
|
||||||
|
|
||||||
forAll (conserve, cellI)
|
|
||||||
{
|
|
||||||
maxMotionError = Foam::max(maxMotionError, mag(conserve[cellI]));
|
|
||||||
|
|
||||||
if (mag(conserve[cellI]) > 1e-8)
|
|
||||||
{
|
|
||||||
Info<< "Motion conservation error in cell " << cellI << ": "
|
|
||||||
<< conserve[cellI]
|
|
||||||
<< " V: " << V[cellI] << " V0: " << V0[cellI]
|
|
||||||
<< " volume change: " << volChange[cellI]
|
|
||||||
<< " div flux: " << divFlux[cellI] << endl;
|
|
||||||
|
|
||||||
nMotionErrors++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nMotionErrors > 0)
|
|
||||||
{
|
|
||||||
Info<< "Number of motion errors: " << nMotionErrors
|
|
||||||
<< " out of nCells = " << mesh.nCells() << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< "volume continuity errors : "
|
|
||||||
<< "volume = " << sumV
|
|
||||||
<< ", old volume = " << sumV0
|
|
||||||
<< ", max error = " << maxMotionError
|
|
||||||
<< ", sum local = " << sumLocalContErr
|
|
||||||
<< ", global = " << globalContErr << endl;
|
|
||||||
}
|
|
|
@ -1,26 +1,55 @@
|
||||||
if (mesh.moving())
|
if (mesh.moving())
|
||||||
{
|
{
|
||||||
dimensionedScalar one("one", dimless, 1.0);
|
|
||||||
|
|
||||||
volScalarField volConservation
|
|
||||||
(
|
|
||||||
"volConservation",
|
|
||||||
-fvc::div(mesh.phi())
|
|
||||||
);
|
|
||||||
|
|
||||||
// The ddt term constructed by hand because it must be Euler
|
// The ddt term constructed by hand because it must be Euler
|
||||||
volConservation.internalField() +=
|
const scalar dt = runTime.deltaT().value();
|
||||||
(1.0 - mesh.V0()/mesh.V())/runTime.deltaT().value();
|
|
||||||
|
|
||||||
scalar sumLocalVolContErr = runTime.deltaT().value()*
|
const scalarField& V = mesh.V().field();
|
||||||
mag(volConservation)().weightedAverage(mesh.V()).value();
|
const scalarField& V0 = mesh.V0().field();
|
||||||
|
scalar sumV = gSum(V);
|
||||||
|
scalar sumV0 = gSum(V0);
|
||||||
|
|
||||||
scalar globalVolContErr = runTime.deltaT().value()*
|
// Rewrite of mesh motion check based on round-off error problems
|
||||||
volConservation.weightedAverage(mesh.V()).value();
|
// Note precision around V and avoiding division with dt
|
||||||
|
// HJ, 4/Oct/2011
|
||||||
|
scalarField volChange = (V - V0)/V;
|
||||||
|
|
||||||
|
scalarField divFlux =
|
||||||
|
- fvc::div(mesh.phi())().internalField()*dt;
|
||||||
|
|
||||||
|
scalarField conserve = volChange + divFlux;
|
||||||
|
|
||||||
|
scalar sumLocalContErr = dt*gSum(mag(conserve*mesh.V()))/sumV;
|
||||||
|
scalar globalContErr = dt*gSum(conserve*mesh.V())/sumV;
|
||||||
|
|
||||||
|
label nMotionErrors = 0;
|
||||||
|
scalar maxMotionError = 0;
|
||||||
|
|
||||||
|
forAll (conserve, cellI)
|
||||||
|
{
|
||||||
|
maxMotionError = Foam::max(maxMotionError, mag(conserve[cellI]));
|
||||||
|
|
||||||
|
if (mag(conserve[cellI]) > 1e-8)
|
||||||
|
{
|
||||||
|
Info<< "Motion conservation error in cell " << cellI << ": "
|
||||||
|
<< conserve[cellI]
|
||||||
|
<< " V: " << V[cellI] << " V0: " << V0[cellI]
|
||||||
|
<< " volume change: " << volChange[cellI]
|
||||||
|
<< " div flux: " << divFlux[cellI] << endl;
|
||||||
|
|
||||||
|
nMotionErrors++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nMotionErrors > 0)
|
||||||
|
{
|
||||||
|
Info<< "Number of motion errors: " << nMotionErrors
|
||||||
|
<< " out of nCells = " << mesh.nCells() << endl;
|
||||||
|
}
|
||||||
|
|
||||||
Info<< "volume continuity errors : "
|
Info<< "volume continuity errors : "
|
||||||
<< "volume = " << sum(mesh.V()).value()
|
<< "volume = " << sumV
|
||||||
<< ", max error = " << max(volConservation.internalField())
|
<< ", old volume = " << sumV0
|
||||||
<< ", sum local = " << sumLocalVolContErr
|
<< ", max error = " << maxMotionError
|
||||||
<< ", global = " << globalVolContErr << endl;
|
<< ", sum local = " << sumLocalContErr
|
||||||
|
<< ", global = " << globalContErr << endl;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue