Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "motionDirectionalDiffusivity.H"
00027 #include <finiteVolume/surfaceInterpolate.H>
00028 #include <finiteVolume/zeroGradientFvPatchFields.H>
00029 #include <OpenFOAM/addToRunTimeSelectionTable.H>
00030
00031
00032
00033 namespace Foam
00034 {
00035 defineTypeNameAndDebug(motionDirectionalDiffusivity, 0);
00036
00037 addToRunTimeSelectionTable
00038 (
00039 motionDiffusivity,
00040 motionDirectionalDiffusivity,
00041 Istream
00042 );
00043 }
00044
00045
00046
00047
00048 Foam::motionDirectionalDiffusivity::motionDirectionalDiffusivity
00049 (
00050 const fvMotionSolver& mSolver,
00051 Istream& mdData
00052 )
00053 :
00054 uniformDiffusivity(mSolver, mdData),
00055 diffusivityVector_(mdData)
00056 {}
00057
00058
00059
00060
00061 Foam::motionDirectionalDiffusivity::~motionDirectionalDiffusivity()
00062 {}
00063
00064
00065
00066
00067 void Foam::motionDirectionalDiffusivity::correct()
00068 {
00069 const fvMesh& mesh = mSolver().mesh();
00070
00071 static bool first = true;
00072
00073 if (!first)
00074 {
00075 const volVectorField& cellMotionU =
00076 mesh.lookupObject<volVectorField>("cellMotionU");
00077
00078 volVectorField D
00079 (
00080 IOobject
00081 (
00082 "D",
00083 mesh.time().timeName(),
00084 mesh
00085 ),
00086 diffusivityVector_.y()*vector::one
00087 + (diffusivityVector_.x() - diffusivityVector_.y())*cellMotionU
00088 /(mag(cellMotionU) + dimensionedScalar("small", dimVelocity, SMALL)),
00089 zeroGradientFvPatchVectorField::typeName
00090 );
00091 D.correctBoundaryConditions();
00092
00093 surfaceVectorField n = mesh.Sf()/mesh.magSf();
00094 faceDiffusivity_ == (n & cmptMultiply(fvc::interpolate(D), n));
00095 }
00096 else
00097 {
00098 first = false;
00099 const_cast<fvMotionSolver&>(mSolver()).solve();
00100 correct();
00101 }
00102 }
00103
00104
00105