5 #ifndef _WALLDISCRETIZATION_H_
6 #define _WALLDISCRETIZATION_H_
31 template<
class X,
class Diag,
class OffDiag>
57 Field& wallstressField,
58 Field& parallelvelocityField,
60 Field& diffusivityField,
62 const Field& varGradientField,
124 const XArray& xCell =
dynamic_cast<const XArray&
>(xField[cVarIndex]);
125 XArray& rCell =
dynamic_cast<XArray&
>(rField[cVarIndex]);
135 const TArray& faceAreaMag =
160 const int nFaces = faces.
getCount();
168 for(
int f=0; f<nFaces; f++)
172 const int c0 = faceCells(f,0);
173 const int c1 = faceCells(f,1);
174 VectorT3 n = faceArea[f]/faceAreaMag[f];
180 VectorT3 ds = cellCentroid[c1]-cellCentroid[c0];
191 ds = faceCentroid[f]-cellCentroid[c0];
196 ds = cellCentroid[c1]-faceCentroid[f];
203 faceDiffusivity = diffCell[c1];
205 faceDiffusivity = diffCell[c0];
207 faceDiffusivity =
harmonicAvg(diffCell[c0],diffCell[c1]);
208 const T_Scalar diffMetric = faceAreaMag[f]*faceAreaMag[f]/
dot(faceArea[f],ds);
209 const T_Scalar diffCoeff = faceDiffusivity*diffMetric;
210 const VectorT3 secondaryCoeff = faceDiffusivity*(faceArea[f]-ds*diffMetric);
212 const XGrad gradF = (xGradCell[c0]*vol0+xGradCell[c1]*vol1)/(vol0+vol1);
214 const X dFluxSecondary = gradF*secondaryCoeff;
216 const X dFlux = diffCoeff*(xCell[c1]-xCell[c0]) + dFluxSecondary;
218 const T_Scalar yp = ds[0]*n[0] + ds[1]*n[1] + ds[2]*n[2];
220 ystar = (rhoCell[c0]*
sqrt(kCell[c0])*pow(Cmu,onefourth)*yp)/muCell[c0];
222 T_Scalar v_dot_n = U[c0][0]*n[0] + U[c0][1]*n[1] + U[c0][2]*n[2];
224 for (
int i=0; i<3; i++)
226 Up[c0][i] = U[c0][i] - v_dot_n*n[i];
231 wallMetric = (vonk*rhoCell[c0]*pow(Cmu,onefourth)*
sqrt(kCell[c0]))/log(Emp*ystar);
238 wallMetric = muCell[c0]/yp;
242 tauCell[f][i] = Up[c0][i]*wallMetric;
244 T_Scalar tau_dot_n = tauCell[f][0]*n[0]+ tauCell[f][1]*n[1]+ tauCell[f][2]*n[2];
246 TauWallCell[f][i] = tauCell[f][i] - tau_dot_n*n[i];
254 X flux = TauWallCell[f]-dFlux ;
266 T_Scalar wallCoeff = wallMetric- diffCoeff;
268 diag[c1] -=wallCoeff;
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
shared_ptr< FaceGroup > FaceGroupPtr
Vector< T_Scalar, 3 > VectorT3
const T_Scalar _thickness
const FaceGroupList & getAllFaceGroups() const
T harmonicAvg(const T &x0, const T &x1)
FlowModelOptions< double > & getOptions()
OffDiag & getCoeff10(const int np)
Array< Diag > & getDiag()
NumTypeTraits< X >::T_Scalar T_Scalar
CCMatrix::PairWiseAssembler CCAssembler
Field & _parallelvelocityField
Tangent sqrt(const Tangent &a)
void discretize(const Mesh &mesh, MultiFieldMatrix &mfmatrix, MultiField &xField, MultiField &rField)
Array< VectorT3 > VectorT3Array
pair< const Field *, const StorageSite * > ArrayIndex
const Field & _varGradientField
FlowModelOptions< double > _options
const StorageSite & getCells() const
WallDiscretization(const MeshList &meshes, const GeomFields &geomFields, Field &varField, Field &energyField, Field &densityField, Field &wallstressField, Field ¶llelvelocityField, Field &tauwallField, Field &diffusivityField, Field &muField, const Field &varGradientField, const T_Scalar thickness=0.0)
Field & _diffusivityField
const CRConnectivity & getFaceCells(const StorageSite &site) const
CCMatrix::DiagArray DiagArray
PairWiseAssembler & getPairWiseAssembler(const CRConnectivity &pairs)
T dot(const Vector< T, 3 > &a, const Vector< T, 3 > &b)
CRMatrix< Diag, OffDiag, X > CCMatrix
const GeomFields & _geomFields
vector< Mesh * > MeshList