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 "SchaefferFrictionalStress.H"
00027 #include <OpenFOAM/addToRunTimeSelectionTable.H>
00028
00029
00030
00031 namespace Foam
00032 {
00033 defineTypeNameAndDebug(SchaefferFrictionalStress, 0);
00034
00035 addToRunTimeSelectionTable
00036 (
00037 frictionalStressModel,
00038 SchaefferFrictionalStress,
00039 dictionary
00040 );
00041 }
00042
00043
00044
00045
00046 Foam::SchaefferFrictionalStress::SchaefferFrictionalStress
00047 (
00048 const dictionary& dict
00049 )
00050 :
00051 frictionalStressModel(dict)
00052 {}
00053
00054
00055
00056
00057 Foam::SchaefferFrictionalStress::~SchaefferFrictionalStress()
00058 {}
00059
00060
00061
00062
00063 Foam::tmp<Foam::volScalarField> Foam::SchaefferFrictionalStress::
00064 frictionalPressure
00065 (
00066 const volScalarField& alpha,
00067 const dimensionedScalar& alphaMinFriction,
00068 const dimensionedScalar& alphaMax,
00069 const dimensionedScalar& Fr,
00070 const dimensionedScalar& eta,
00071 const dimensionedScalar& p
00072 ) const
00073 {
00074 return
00075 dimensionedScalar("1e24", dimensionSet(1, -1, -2, 0, 0), 1e24)
00076 *pow(Foam::max(alpha - alphaMinFriction, scalar(0)), 10.0);
00077 }
00078
00079
00080 Foam::tmp<Foam::volScalarField> Foam::SchaefferFrictionalStress::
00081 frictionalPressurePrime
00082 (
00083 const volScalarField& alpha,
00084 const dimensionedScalar& alphaMinFriction,
00085 const dimensionedScalar& alphaMax,
00086 const dimensionedScalar& Fr,
00087 const dimensionedScalar& eta,
00088 const dimensionedScalar& p
00089 ) const
00090 {
00091 return
00092 dimensionedScalar("1e25", dimensionSet(1, -1, -2, 0, 0), 1e25)
00093 *pow(Foam::max(alpha - alphaMinFriction, scalar(0)), 9.0);
00094 }
00095
00096
00097 Foam::tmp<Foam::volScalarField> Foam::SchaefferFrictionalStress::muf
00098 (
00099 const volScalarField& alpha,
00100 const dimensionedScalar& alphaMax,
00101 const volScalarField& pf,
00102 const volSymmTensorField& D,
00103 const dimensionedScalar& phi
00104 ) const
00105 {
00106 const scalar I2Dsmall = 1.0e-15;
00107
00108
00109
00110 tmp<volScalarField> tmuf
00111 (
00112 new volScalarField
00113 (
00114 IOobject
00115 (
00116 "muf",
00117 alpha.mesh().time().timeName(),
00118 alpha.mesh()
00119 ),
00120 alpha.mesh(),
00121 dimensionedScalar("muf", dimensionSet(1, -1, -1, 0, 0), 0.0)
00122 )
00123 );
00124
00125 volScalarField& muff = tmuf();
00126
00127 forAll (D, celli)
00128 {
00129 if (alpha[celli] > alphaMax.value() - 5e-2)
00130 {
00131 muff[celli] =
00132 0.5*pf[celli]*sin(phi.value())
00133 /(
00134 sqrt(1.0/6.0*(sqr(D[celli].xx() - D[celli].yy())
00135 + sqr(D[celli].yy() - D[celli].zz())
00136 + sqr(D[celli].zz() - D[celli].xx()))
00137 + sqr(D[celli].xy()) + sqr(D[celli].xz())
00138 + sqr(D[celli].yz())) + I2Dsmall
00139 );
00140 }
00141 }
00142
00143 muff.correctBoundaryConditions();
00144
00145 return tmuf;
00146 }
00147
00148
00149