Implements Discretization.
Definition at line 82 of file WallDiscretization.h.
References WallDiscretization< X, Diag, OffDiag >::_densityField, WallDiscretization< X, Diag, OffDiag >::_diffusivityField, WallDiscretization< X, Diag, OffDiag >::_energyField, WallDiscretization< X, Diag, OffDiag >::_geomFields, WallDiscretization< X, Diag, OffDiag >::_muField, WallDiscretization< X, Diag, OffDiag >::_options, WallDiscretization< X, Diag, OffDiag >::_parallelvelocityField, WallDiscretization< X, Diag, OffDiag >::_tauwallField, WallDiscretization< X, Diag, OffDiag >::_varField, WallDiscretization< X, Diag, OffDiag >::_varGradientField, WallDiscretization< X, Diag, OffDiag >::_wallstressField, GeomFields::area, GeomFields::areaMag, FlowModelOptions< T >::cmu, GeomFields::coordinate, dot(), FlowModelOptions< T >::emp, Mesh::getAllFaceGroups(), Mesh::getCells(), CRMatrix< T_Diag, T_OffDiag, X >::PairWiseAssembler::getCoeff10(), StorageSite::getCount(), CRMatrix< T_Diag, T_OffDiag, X >::getDiag(), Mesh::getFaceCells(), MultiFieldMatrix::getMatrix(), CRMatrix< T_Diag, T_OffDiag, X >::getPairWiseAssembler(), FaceGroup::groupType, harmonicAvg(), GeomFields::ibType, Mesh::IBTYPE_BOUNDARY, Mesh::IBTYPE_FLUID, FaceGroup::site, sqrt(), FlowModelOptions< T >::vk, and GeomFields::volume.
124 const XArray& xCell =
dynamic_cast<const XArray&
>(xField[cVarIndex]);
125 XArray& rCell =
dynamic_cast<XArray&
>(rField[cVarIndex]);
135 const TArray& faceAreaMag =
156 CCAssembler& assembler = matrix.getPairWiseAssembler(faceCells);
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;
269 assembler.getCoeff10(f) +=wallCoeff;
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
shared_ptr< FaceGroup > FaceGroupPtr
const FaceGroupList & getAllFaceGroups() const
T harmonicAvg(const T &x0, const T &x1)
NumTypeTraits< X >::T_Scalar T_Scalar
CCMatrix::PairWiseAssembler CCAssembler
Field & _parallelvelocityField
Tangent sqrt(const Tangent &a)
pair< const Field *, const StorageSite * > ArrayIndex
const Field & _varGradientField
FlowModelOptions< double > _options
const StorageSite & getCells() const
Field & _diffusivityField
const CRConnectivity & getFaceCells(const StorageSite &site) const
CCMatrix::DiagArray DiagArray
T dot(const Vector< T, 3 > &a, const Vector< T, 3 > &b)
CRMatrix< Diag, OffDiag, X > CCMatrix
const GeomFields & _geomFields