5 #ifndef _FLOWMODELPRESSUREBCS_H_
6 #define _FLOWMODELPRESSUREBCS_H_
24 const TArray& faceAreaMag =
25 dynamic_cast<const TArray&
>(_geomFields.areaMag[faces]);
28 dynamic_cast<VVMatrix&
>(matrix.
getMatrix(vIndex,vIndex));
30 VVDiagArray& vvDiag = vvMatrix.getDiag();
34 const TArray& rho =
dynamic_cast<TArray&
>(_flowFields.density[cells]);
37 TArray& massFlux =
dynamic_cast<TArray&
>(_flowFields.massFlux[faces]);
39 const T momURF(_options[
"momentumURF"]);
43 for(
int f=0; f<nFaces; f++)
47 const int c0 = faceCells(f,0);
48 const int c1 = faceCells(f,1);
50 const T dpdV = -rho[c0]*
mag2(V[c1])/momURF;
51 vvDiag[c0][0] += dpdV*Af[0]*Af[0]/faceAreaMag[f];
52 vvDiag[c0][1] += dpdV*Af[1]*Af[1]/faceAreaMag[f];
53 vvDiag[c0][2] += dpdV*Af[2]*Af[2]/faceAreaMag[f];
71 const TArray& cellVolume =
72 dynamic_cast<const TArray&
>(_geomFields.volume[cells]);
75 dynamic_cast<const VectorT3Array&
>(_geomFields.coordinate[cells]);
80 dynamic_cast<PPMatrix&
>(matrix.
getMatrix(pIndex,pIndex));
82 const VVDiagArray& momAp =
dynamic_cast<const VVDiagArray&
>((*_momApField)[cells]);
87 const TArray& p =
dynamic_cast<const TArray&
>(_flowFields.pressure[cells]);
88 const PGradArray& pGrad =
dynamic_cast<const PGradArray&
>(_flowFields.pressureGradient[cells]);
90 const TArray& rho =
dynamic_cast<TArray&
>(_flowFields.density[cells]);
92 PPAssembler& ppAssembler = ppMatrix.getPairWiseAssembler(faceCells);
93 PPDiagArray& ppDiag = ppMatrix.getDiag();
95 TArray& rCell =
dynamic_cast<TArray&
>(rField[pIndex]);
96 TArray& massFlux =
dynamic_cast<TArray&
>(_flowFields.massFlux[faces]);
98 FMatrix& dFluxdP =
dynamic_cast<FMatrix&
>(matrix.
getMatrix(mfIndex,pIndex));
100 const T momURF(_options[
"momentumURF"]);
101 const T OneMinusmomURF(T(1.0)-momURF);
103 const int nFaces = faces.
getCount();
107 for(
int f=0; f<nFaces; f++)
109 const int c0 = faceCells(f,0);
110 const int c1 = faceCells(f,1);
111 const VectorT3 ds=cellCentroid[c1]-cellCentroid[c0];
114 const T dpf = pGrad[c0]*ds - p[c1] + p[c0] ;
115 const T rhoF = rho[c0];
118 const T Q = rhoF*(Af[0]*Af[0] / momAp[c0][0] +
119 Af[1]*Af[1] / momAp[c0][1] +
120 Af[2]*Af[2] / momAp[c0][2])*cellVolume[c0]/(
dot(Af,ds));
122 const T massFluxI = rhoF*(
dot(V[c0],Af) - OneMinusmomURF*
dot(Vprev[c0],Af)) - Q*dpf +
123 OneMinusmomURF*massFlux[f];
126 const T massFluxB = rhoF*
dot(Vb,Af);
128 netFlux += massFluxI;
130 massFlux[f] = massFluxI;
134 Vb_dpdVb = -
mag2(Vb)*rhoF;
137 const T denom = massFluxI-Q*Vb_dpdVb;
141 const T dMassFluxdp0 = -Q*massFluxI/denom;
142 dFluxdP.setCoeffL(f,dMassFluxdp0);
143 dFluxdP.setCoeffR(f,T(0.));
145 const T dpbdp0 = -Q*Vb_dpdVb/denom;
147 rCell[c0] -= massFlux[f];
148 ppDiag[c0] -= dMassFluxdp0;
150 ppAssembler.getCoeff01(f) = 0.;
151 ppAssembler.getCoeff10(f) = dpbdp0;
156 dFluxdP.setCoeffL(f,-Q);
157 dFluxdP.setCoeffR(f,T(0.));
160 rCell[c0] -= massFlux[f];
162 ppAssembler.getCoeff10(f) = 0.;
163 ppAssembler.getCoeff01(f) = 0.;
165 ppMatrix.setBoundary(c1);
179 const TArray& faceAreaMag =
180 dynamic_cast<const TArray&
>(_geomFields.areaMag[faces]);
185 TArray& p =
dynamic_cast<TArray&
>(_flowFields.pressure[cells]);
186 const TArray& rho =
dynamic_cast<TArray&
>(_flowFields.density[cells]);
187 TArray& massFlux =
dynamic_cast<TArray&
>(_flowFields.massFlux[faces]);
189 const int nFaces = faces.
getCount();
190 for(
int f=0; f<nFaces; f++)
192 const int c0 = faceCells(f,0);
193 const int c1 = faceCells(f,1);
194 const T rhoF = rho[c0];
207 const T Vn = -massFlux[f]/(rhoF*faceAreaMag[f]);
209 V[c1] = -Vn*faceArea[f]/faceAreaMag[f];
210 p[c1] = bp - 0.5*rhoF*
mag2(V[c1]);
225 const TArray& pCell =
dynamic_cast<const TArray&
>(_flowFields.pressure[cells]);
226 TArray& pFace =
dynamic_cast<TArray&
>(_flowFields.pressure[faces]);
228 const int nFaces = faces.
getCount();
229 for(
int f=0; f<nFaces; f++)
232 const int c1 = faceCells(f,1);
234 pFace[f] = pCell[c1];
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
void fixedPressureMomentumBC(const StorageSite &faces, const Mesh &mesh, MultiFieldMatrix &matrix, const MultiField &xField, MultiField &rField)
pair< const Field *, const StorageSite * > ArrayIndex
const StorageSite & getCells() const
const CRConnectivity & getFaceCells(const StorageSite &site) const
void pressureBoundaryPostContinuitySolve(const StorageSite &faces, const Mesh &mesh, const T bp)
void updateFacePressureBoundary(const Mesh &mesh, const StorageSite &faces)
T dot(const Vector< T, 3 > &a, const Vector< T, 3 > &b)
T fixedPressureContinuityBC(const StorageSite &faces, const Mesh &mesh, MultiFieldMatrix &matrix, const MultiField &xField, MultiField &rField)
T mag2(const Vector< T, 3 > &a)