void implicitExtrapolationFvPatchField<Type>::setExtraData(const fvPatch& p){ const fvMesh& m = p.boundaryMesh().mesh(); const faceList& meshFaces = m.faces(); const cellList cells = m.cells(); const labelList& faceCells = p.faceCells(); const volVectorField& centers = m.C(); forAll(faceCells,i){ const label curCellLabel = faceCells[i]; const label curPatchFaceLabel = p.patch().start() + i; const label secondFace = cells[curCellLabel].opposingFaceLabel(curPatchFaceLabel,meshFaces); secondFacesIDs[i] = secondFace; const label ownerSecondFace = m.owner()[secondFace]; const label neighbourSecondFace = m.neighbour()[secondFace]; if (curCellLabel == ownerSecondFace){ secondNormalCellIsOwner[i] = 0; } else{ secondNormalCellIsOwner[i] = 1; } secondDeltas[i] = mag(centers[ownerSecondFace] - centers[neighbourSecondFace]); } }
void epsilonLowReWallFunctionFvPatchScalarField::calculate ( const turbulenceModel& turbulence, const List<scalar>& cornerWeights, const fvPatch& patch, scalarField& G, scalarField& epsilon ) { const label patchi = patch.index(); const scalarField& y = turbulence.y()[patchi]; const scalar Cmu25 = pow025(Cmu_); const scalar Cmu75 = pow(Cmu_, 0.75); const tmp<volScalarField> tk = turbulence.k(); const volScalarField& k = tk(); const tmp<scalarField> tnuw = turbulence.nu(patchi); const scalarField& nuw = tnuw(); const tmp<scalarField> tnutw = turbulence.nut(patchi); const scalarField& nutw = tnutw(); const fvPatchVectorField& Uw = turbulence.U().boundaryField()[patchi]; const scalarField magGradUw(mag(Uw.snGrad())); // Set epsilon and G forAll(nutw, faceI) { label cellI = patch.faceCells()[faceI]; scalar yPlus = Cmu25*sqrt(k[cellI])*y[faceI]/nuw[faceI]; scalar w = cornerWeights[faceI]; if (yPlus > yPlusLam_) { epsilon[cellI] += w*Cmu75*pow(k[cellI], 1.5)/(kappa_*y[faceI]); } else { epsilon[cellI] += w*2.0*k[cellI]*nuw[faceI]/sqr(y[faceI]); } G[cellI] += w *(nutw[faceI] + nuw[faceI]) *magGradUw[faceI] *Cmu25*sqrt(k[cellI]) /(kappa_*y[faceI]); }
scalarField Foam::OFinterpolate(const fvPatch& patch, const objectRegistry& db, scalarField boundaryTheta){ const volScalarField& Theta = db.lookupObject<volScalarField>("Theta"); const vectorField ThetaGradient = fvc::grad(Theta,"leastSquares"); const vectorField& patchDeltas = patch.delta(); // cell-centre to face-centre vector for(int i=0; i<patch.size(); i++){ boundaryTheta[i] = Theta[patch.faceCells()[i]] + ( ThetaGradient[i] & patchDeltas[i] ); } return boundaryTheta; }
//template<class type> secondNormalBoundaryCells::secondNormalBoundaryCells(const fvPatch& p): secondNormalFaceIsOwner(p.size()), secondDeltas(p.size()), secondFaces(p.size()), secondInternalCoeffs(p.size()){ const fvMesh& m = p.boundaryMesh().mesh(); const faceList& meshFaces = m.faces(); const cellList cells = m.cells(); const labelList& faceCells = p.faceCells(); const volVectorField& centers = m.C(); const labelList& neighbours = m.neighbour(); const labelList& owners = m.owner(); forAll(faceCells,i){ const label curCellLabel = faceCells[i]; const label curPatchFaceLabel = p.patch().start() + i; const label secondFace = cells[curCellLabel].opposingFaceLabel(curPatchFaceLabel,meshFaces); secondFaces[i] = secondFace; if (curCellLabel == m.owner()[secondFace]){ secondNormalFaceIsOwner[i] = false; secondDeltas[i] = mag(centers[curCellLabel] - centers[neighbours[secondFace]]); } else{ secondNormalFaceIsOwner[i] = true; secondDeltas[i] = mag(centers[curCellLabel] - centers[owners[secondFace]]); } } }
void Foam::epsilonLowReWallFunctionFvPatchScalarField::calculate ( const turbulenceModel& turbModel, const List<scalar>& cornerWeights, const fvPatch& patch, scalarField& G0, scalarField& epsilon0 ) { const label patchi = patch.index(); const scalarField& y = turbModel.y()[patchi]; const scalar Cmu25 = pow025(Cmu_); const scalar Cmu75 = pow(Cmu_, 0.75); const tmp<volScalarField> tk = turbModel.k(); const volScalarField& k = tk(); const tmp<scalarField> tnuw = turbModel.nu(patchi); const scalarField& nuw = tnuw(); const tmp<scalarField> tnutw = turbModel.nut(patchi); const scalarField& nutw = tnutw(); const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; const scalarField magGradUw(mag(Uw.snGrad())); const DimensionedField<scalar, volMesh>& G = db().lookupObject<DimensionedField<scalar, volMesh> > ( turbModel.GName() ); // Set epsilon and G forAll(nutw, facei) { label celli = patch.faceCells()[facei]; scalar yPlus = Cmu25*sqrt(k[celli])*y[facei]/nuw[facei]; scalar w = cornerWeights[facei]; if (yPlus > yPlusLam_) { epsilon0[celli] += w*Cmu75*pow(k[celli], 1.5)/(kappa_*y[facei]); G0[celli] += w *(nutw[facei] + nuw[facei]) *magGradUw[facei] *Cmu25*sqrt(k[celli]) /(kappa_*y[facei]); } else { epsilon0[celli] += w*2.0*k[celli]*nuw[facei]/sqr(y[facei]); G0[celli] += G[celli]; } }