modules/solid: Improved diffusion number calculation
The calculation of the diffusion number has been put into a form consistent with finite-volume, rather than the finite-difference form that was used previously. This difference in formulations is analogus to that of the Courant number in the fluid solvers. Whilst a textbook will typically define the courant number as equal to 'U*deltaT/deltaX', in a finite-volume context it is more appropriate to define it as 'Sum(phi)/V*deltaT' (where 'Sum' is a sum over the cell's faces). Similarly, the finite-difference Fourier number, 'kappa/rho/Cp*deltaT/deltaX^2', is more consistently expressed for finite-volume as 'Sum(Sf*kappa*deltaX)/(V*rho*Cp)*deltaT'. This makes the calculation of the diffusion number less sensitive to the presence of small, poor quality faces, and therefore makes time-step adjustment more robust on arbitrary polyhedral meshes.
This commit is contained in:
@ -24,6 +24,7 @@ License
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "solid.H"
|
||||
#include "fvcSurfaceIntegrate.H"
|
||||
#include "fvMeshMover.H"
|
||||
#include "localEulerDdtScheme.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
@ -61,19 +62,25 @@ void Foam::solvers::solid::correctDiNum()
|
||||
: mag(thermo.Kappa())()
|
||||
);
|
||||
|
||||
const surfaceScalarField kapparhoCpbyDelta
|
||||
const volScalarField::Internal DiNumvf
|
||||
(
|
||||
sqr(mesh.surfaceInterpolation::deltaCoeffs())
|
||||
*fvc::interpolate(kappa)
|
||||
/fvc::interpolate(thermo.rho()*thermo.Cp())
|
||||
fvc::surfaceSum
|
||||
(
|
||||
mesh.magSf()
|
||||
*fvc::interpolate(kappa)
|
||||
*mesh.surfaceInterpolation::deltaCoeffs()
|
||||
)()()
|
||||
/(mesh.V()*thermo.rho()()*thermo.Cp()())
|
||||
*runTime.deltaT()
|
||||
);
|
||||
|
||||
DiNum = max(kapparhoCpbyDelta).value()*runTime.deltaTValue();
|
||||
const scalar meanDiNum =
|
||||
average(kapparhoCpbyDelta).value()*runTime.deltaTValue();
|
||||
const scalar meanDiNum = gAverage(DiNumvf);
|
||||
const scalar maxDiNum = gMax(DiNumvf);
|
||||
|
||||
Info<< "Diffusion Number mean: " << meanDiNum
|
||||
<< " max: " << DiNum << endl;
|
||||
<< " max: " << maxDiNum << endl;
|
||||
|
||||
DiNum = maxDiNum;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user