5 #ifndef _GENERICKINETICIBDISCRETIZATION_H_
6 #define _GENERICKINETICIBDISCRETIZATION_H_
23 template <
class X,
class Diag,
class OffDiag>
75 dynamic_cast<XArray&
> (xField[xIndex]);
88 const XArray& faceAreaMag =
dynamic_cast<const XArray&
>(areaMagField[faces]);
108 const int nFaces = faces.
getCount();
109 for(
int f=0; f<nFaces; f++)
111 const int c0 = faceCells(f,0);
112 const int c1 = faceCells(f,1);
119 const int ibFace = ibFaceIndex[f];
122 const X& xface = xib[ibFace];
123 const X uwall = v[ibFace][0];
124 const X vwall = v[ibFace][1];
125 const X wwall = v[ibFace][2];
128 const VectorT3 en = faceArea[f]/faceAreaMag[f];
129 const X c_dot_en =
_cx*en[0]+
_cy*en[1]+
_cz*en[2];
130 const X wallv_dot_en = uwall*en[0]+vwall*en[1]+wwall*en[2];
131 if(c_dot_en - wallv_dot_en <0 ){
132 rCell[c0] += assembler.
getCoeff01(f)*(xface-varcell[c1]);
143 const VectorT3 en = faceArea[f]/faceAreaMag[f];
144 const X c_dot_en =
_cx*en[0]+
_cy*en[1]+
_cz*en[2];
145 const X wallv_dot_en = uwall*en[0]+vwall*en[1]+wwall*en[2];
146 if(c_dot_en - wallv_dot_en> 0){
147 rCell[c1] += assembler.
getCoeff10(f)*(xface-varcell[c0]);
175 for(
int c=0; c<nCells; c++)
178 varcell[c] = xB[c] /
T_Scalar(wB[c]);
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
const StorageSite & getIBFaces() const
void discretize(const Mesh &mesh, MultiFieldMatrix &matrix, MultiField &xField, MultiField &rField)
NumTypeTraits< X >::T_Scalar T_Scalar
CCMatrix::OffDiagArray OffDiagArray
GenericKineticIBDiscretization(const MeshList &meshes, const GeomFields &geomFields, Field &varField, const double cx, const double cy, const double cz, MacroFields ¯oFields)
OffDiag & getCoeff10(const int np)
Array< Diag > & getDiag()
Vector< T_Scalar, 3 > VectorT3
CCMatrix::PairWiseAssembler CCAssembler
const CRConnectivity & getAllFaceCells() const
pair< const Field *, const StorageSite * > ArrayIndex
CCMatrix::DiagArray DiagArray
const StorageSite & getFaces() const
const GeomFields & _geomFields
const StorageSite & getCells() const
int getCountLevel1() const
OffDiag & getCoeff01(const int np)
Array< VectorT3 > VectorT3Array
void setDirichlet(const int nr)
PairWiseAssembler & getPairWiseAssembler(const CRConnectivity &pairs)
vector< Mesh * > MeshList
CRMatrix< Diag, OffDiag, X > CCMatrix
MacroFields & _macroFields