5 #ifndef _CONVECTIONDISCRETIZATION_KMODEL_H_
6 #define _CONVECTIONDISCRETIZATION_KMODEL_H_
17 template<
class X,
class Diag,
class OffDiag>
47 bool useCentralDifference) :
80 const XArray& xCell =
dynamic_cast<const XArray&
>(xField[cVarIndex]);
81 XArray& rCell =
dynamic_cast<XArray&
>(rField[cVarIndex]);
97 shared_ptr<TArray> gridFluxPtr(
new TArray(nFaces));
98 TArray& gridFlux = *gridFluxPtr;
101 for(
int f=0; f<nFaces; f++)
103 const int c0 = faceCells(f,0);
104 const int c1 = faceCells(f,1);
106 const T_Scalar faceCFlux = faceArea[f][0]*
_cx+faceArea[f][1]*
_cy+faceArea[f][2]*
_cz - gridFlux[f];
112 varFlux = faceCFlux*xCell[c0];
113 diag[c0] -= faceCFlux;
118 varFlux = faceCFlux*xCell[c1];
119 diag[c1] += faceCFlux;
123 rCell[c0] -= varFlux;
124 rCell[c1] += varFlux;
130 for(
int f=0; f<nFaces; f++)
132 const int c0 = faceCells(f,0);
133 const int c1 = faceCells(f,1);
134 const T_Scalar faceCFlux = faceArea[f][0]*
_cx+faceArea[f][1]*
_cy+faceArea[f][2]*
_cz;
142 X varFlux =0.5*faceCFlux*(xCell[c0] + xCell[c1]);
144 rCell[c0] -= varFlux;
145 rCell[c1] += varFlux;
154 diag[c0] -= 0.5*faceCFlux;
156 diag[c1] += 0.5*faceCFlux;
165 diag[c0] -= faceCFlux;
170 diag[c1] += faceCFlux;
177 for(
int f=0; f<nFaces; f++)
179 const int c0 = faceCells(f,0);
180 const int c1 = faceCells(f,1);
181 const T_Scalar faceCFlux = faceArea[f][0]*
_cx+faceArea[f][1]*
_cy+faceArea[f][2]*
_cz;
189 varFlux = faceCFlux*xCell[c0];
190 diag[c0] -= faceCFlux;
195 varFlux = faceCFlux*xCell[c1];
196 diag[c1] += faceCFlux;
200 rCell[c0] -= varFlux;
201 rCell[c1] += varFlux;
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
bool hasArray(const StorageSite &s) const
Array< VectorT3 > VectorT3Array
NumTypeTraits< X >::T_Scalar T_Scalar
OffDiag & getCoeff10(const int np)
Array< Diag > & getDiag()
void discretize(const Mesh &mesh, MultiFieldMatrix &mfmatrix, MultiField &xField, MultiField &rField)
CCMatrix::PairWiseAssembler CCAssembler
const CRConnectivity & getAllFaceCells() const
KineticModelOptions< X > _options
pair< const Field *, const StorageSite * > ArrayIndex
Vector< T_Scalar, 3 > VectorT3
const StorageSite & getFaces() const
const StorageSite & getCells() const
ConvectionDiscretization_Kmodel(const MeshList &meshes, const GeomFields &geomFields, Field &varField, const double cx, const double cy, const double cz, bool useCentralDifference)
OffDiag & getCoeff01(const int np)
const GeomFields & _geomFields
CCMatrix::DiagArray DiagArray
PairWiseAssembler & getPairWiseAssembler(const CRConnectivity &pairs)
vector< Mesh * > MeshList
const bool _useCentralDifference
CRMatrix< Diag, OffDiag, X > CCMatrix