Memosa-FVM  0.2
BaseGenericKineticBCS< X, Diag, OffDiag > Class Template Reference

#include <GenericKineticBCS.h>

Collaboration diagram for BaseGenericKineticBCS< X, Diag, OffDiag >:

Public Types

typedef NumTypeTraits< X >
::T_Scalar 
T_Scalar
 
typedef Array< T_ScalarTArray
 
typedef Array< int > IntArray
 
typedef Vector< T_Scalar, 3 > VectorT3
 
typedef CRMatrix< Diag,
OffDiag, X > 
CCMatrix
 
typedef CCMatrix::PairWiseAssembler CCAssembler
 
typedef FluxJacobianMatrix
< Diag, X > 
FMatrix
 
typedef DiagonalMatrix< Diag, X > BBMatrix
 
typedef Array< Diag > DiagArray
 
typedef Array< OffDiag > OffDiagArray
 
typedef Array< X > XArray
 
typedef Array< VectorT3VectorT3Array
 

Public Member Functions

 BaseGenericKineticBCS (const StorageSite &faces, const Mesh &mesh, const GeomFields &geomFields, Field &varField, MultiFieldMatrix &matrix, MultiField &xField, MultiField &rField)
 
void applyDirichletBC (int f, const X &bValue) const
 
void applyDirichletBC (const X &bValue) const
 
void applyDirichletBC (const FloatValEvaluator< X > &bValue) const
 
void applyExtrapolationBC () const
 
void applyExtrapolationBC (const int f) const
 
void applyInterfaceBC (const int f) const
 
void applyInterfaceBC () const
 
void applyFlowBC (const TArray &convFlux, const X &bValue) const
 
void applyNonzeroDiagBC () const
 
void applyNonzeroDiagBC (int f) const
 

Protected Attributes

const StorageSite_faces
 
const StorageSite_cells
 
const IntArray_ibType
 
const CRConnectivity_faceCells
 
const Field_varField
 
const MultiField::ArrayIndex _xIndex
 
CCMatrix_dRdX
 
CCAssembler_assembler
 
DiagArray_dRdXDiag
 
XArray_x
 
XArray_r
 
const Field_areaMagField
 
const TArray_faceAreaMag
 
const Field_areaField
 
const VectorT3Array_faceArea
 

Detailed Description

template<class X, class Diag, class OffDiag>
class BaseGenericKineticBCS< X, Diag, OffDiag >

Definition at line 22 of file GenericKineticBCS.h.

Member Typedef Documentation

template<class X, class Diag, class OffDiag>
typedef DiagonalMatrix<Diag,X> BaseGenericKineticBCS< X, Diag, OffDiag >::BBMatrix

Definition at line 37 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
typedef CCMatrix::PairWiseAssembler BaseGenericKineticBCS< X, Diag, OffDiag >::CCAssembler

Definition at line 34 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
typedef CRMatrix<Diag,OffDiag,X> BaseGenericKineticBCS< X, Diag, OffDiag >::CCMatrix

Definition at line 33 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
typedef Array<Diag> BaseGenericKineticBCS< X, Diag, OffDiag >::DiagArray

Definition at line 39 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
typedef FluxJacobianMatrix<Diag,X> BaseGenericKineticBCS< X, Diag, OffDiag >::FMatrix

Definition at line 36 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
typedef Array<int> BaseGenericKineticBCS< X, Diag, OffDiag >::IntArray

Definition at line 29 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
typedef Array<OffDiag> BaseGenericKineticBCS< X, Diag, OffDiag >::OffDiagArray

Definition at line 40 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
typedef NumTypeTraits<X>::T_Scalar BaseGenericKineticBCS< X, Diag, OffDiag >::T_Scalar

Definition at line 26 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
typedef Array<T_Scalar> BaseGenericKineticBCS< X, Diag, OffDiag >::TArray

Definition at line 28 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
typedef Vector<T_Scalar,3> BaseGenericKineticBCS< X, Diag, OffDiag >::VectorT3

Definition at line 31 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
typedef Array<VectorT3> BaseGenericKineticBCS< X, Diag, OffDiag >::VectorT3Array

Definition at line 43 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
typedef Array<X> BaseGenericKineticBCS< X, Diag, OffDiag >::XArray

Definition at line 42 of file GenericKineticBCS.h.

Constructor & Destructor Documentation

template<class X, class Diag, class OffDiag>
BaseGenericKineticBCS< X, Diag, OffDiag >::BaseGenericKineticBCS ( const StorageSite faces,
const Mesh mesh,
const GeomFields geomFields,
Field varField,
MultiFieldMatrix matrix,
MultiField xField,
MultiField rField 
)
inline

Definition at line 46 of file GenericKineticBCS.h.

52  :
53  _faces(faces),
54  _cells(mesh.getCells()),
55  _ibType(dynamic_cast<const IntArray&>(geomFields.ibType[_cells])),
57  _varField(varField),
58  //_fluxField(fluxField),
60  // _fluxIndex(&_fluxField,&_faces),
61  _dRdX(dynamic_cast<CCMatrix&>(matrix.getMatrix(_xIndex,_xIndex))),
62  //_dFluxdX(dynamic_cast<FMatrix&>(matrix.getMatrix(_fluxIndex,_xIndex))),
63  //_dFluxdFlux(dynamic_cast<BBMatrix&>(matrix.getMatrix(_fluxIndex,_fluxIndex))),
66  _x(dynamic_cast<XArray&>(xField[_xIndex])),
67  _r(dynamic_cast<XArray&>(rField[_xIndex])),
68  // _flux(dynamic_cast<XArray&>(xField[_fluxIndex])),
69  // _rFlux(dynamic_cast<XArray&>(rField[_fluxIndex])),
70  _areaMagField(geomFields.areaMag),
71  _faceAreaMag(dynamic_cast<const TArray&>(_areaMagField[_faces])),
72  _areaField(geomFields.area),
73  _faceArea(dynamic_cast<const VectorT3Array&>(_areaField[_faces]))
74  {}
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
Array< Diag > & getDiag()
Definition: CRMatrix.h:856
const VectorT3Array & _faceArea
Field ibType
Definition: GeomFields.h:38
const IntArray & _ibType
const StorageSite & _faces
const MultiField::ArrayIndex _xIndex
const StorageSite & getCells() const
Definition: Mesh.h:109
const StorageSite & _cells
const CRConnectivity & getFaceCells(const StorageSite &site) const
Definition: Mesh.cpp:388
Field area
Definition: GeomFields.h:23
const CRConnectivity & _faceCells
PairWiseAssembler & getPairWiseAssembler(const CRConnectivity &pairs)
Definition: CRMatrix.h:867
Field areaMag
Definition: GeomFields.h:25
const TArray & _faceAreaMag

Member Function Documentation

template<class X, class Diag, class OffDiag>
void BaseGenericKineticBCS< X, Diag, OffDiag >::applyDirichletBC ( int  f,
const X &  bValue 
) const
inline

Definition at line 76 of file GenericKineticBCS.h.

References BaseGenericKineticBCS< X, Diag, OffDiag >::_assembler, BaseGenericKineticBCS< X, Diag, OffDiag >::_dRdXDiag, BaseGenericKineticBCS< X, Diag, OffDiag >::_faceCells, BaseGenericKineticBCS< X, Diag, OffDiag >::_ibType, BaseGenericKineticBCS< X, Diag, OffDiag >::_r, BaseGenericKineticBCS< X, Diag, OffDiag >::_x, CRMatrix< T_Diag, T_OffDiag, X >::PairWiseAssembler::getCoeff01(), CRMatrix< T_Diag, T_OffDiag, X >::PairWiseAssembler::getCoeff10(), and Mesh::IBTYPE_FLUID.

Referenced by BaseGenericKineticBCS< X, Diag, OffDiag >::applyDirichletBC(), and BaseGenericKineticBCS< X, Diag, OffDiag >::applyFlowBC().

77  {
78  const int c0 = _faceCells(f,0);
79  const int c1 = _faceCells(f,1);
80 
81  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
82  return;
83 
84  // the current value of flux and its Jacobians
85  // const X fluxB = -_r[c1];
86  //const OffDiag dFluxdXC0 = -_assembler.getCoeff10(f);
87  // const Diag dFluxdXC1 = -_dRdXDiag[c1];
88  const OffDiag dRC0dXC1 = _assembler.getCoeff01(f);
89 
90  // since we know the boundary value, compute the boundary
91  // x correction and it's contribution to the residual for c0; we
92  // can then eliminate the coefficient to the boundary cell
93 
94  const X dXC1 = bValue - _x[c1];
95  // const X dFlux = dFluxdXC1*dXC1;
96  const X dRC0 = dRC0dXC1*dXC1;
97  _r[c0] += dRC0;
98 
100 
101  // set the boundary value and make its correction equation an
102  // identity
103  _x[c1] = bValue;
107 
108  /*
109  //setup the equation for the boundary flux correction
110  _dFluxdX.setCoeffL(f,dFluxdXC0);
111  _dFluxdX.setCoeffR(f,NumTypeTraits<OffDiag>::getZero());
112  _flux[f] = fluxB;
113  _rFlux[f] = dFlux;
114  _dFluxdFlux[f] = NumTypeTraits<Diag>::getNegativeUnity();
115  */
116  }
OffDiag & getCoeff10(const int np)
Definition: CRMatrix.h:131
const IntArray & _ibType
OffDiag & getCoeff01(const int np)
Definition: CRMatrix.h:126
const CRConnectivity & _faceCells
template<class X, class Diag, class OffDiag>
void BaseGenericKineticBCS< X, Diag, OffDiag >::applyDirichletBC ( const X &  bValue) const
inline

Definition at line 118 of file GenericKineticBCS.h.

References BaseGenericKineticBCS< X, Diag, OffDiag >::_faces, BaseGenericKineticBCS< X, Diag, OffDiag >::applyDirichletBC(), and StorageSite::getCount().

119  {
120  for(int i=0; i<_faces.getCount(); i++)
121  applyDirichletBC(i,bValue);
122  }
void applyDirichletBC(int f, const X &bValue) const
const StorageSite & _faces
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericKineticBCS< X, Diag, OffDiag >::applyDirichletBC ( const FloatValEvaluator< X > &  bValue) const
inline

Definition at line 124 of file GenericKineticBCS.h.

References BaseGenericKineticBCS< X, Diag, OffDiag >::_faces, BaseGenericKineticBCS< X, Diag, OffDiag >::applyDirichletBC(), and StorageSite::getCount().

125  {
126  for(int i=0; i<_faces.getCount(); i++)
127  applyDirichletBC(i,bValue[i]);
128  }
void applyDirichletBC(int f, const X &bValue) const
const StorageSite & _faces
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericKineticBCS< X, Diag, OffDiag >::applyExtrapolationBC ( ) const
inline

Definition at line 131 of file GenericKineticBCS.h.

References BaseGenericKineticBCS< X, Diag, OffDiag >::_faces, and StorageSite::getCount().

Referenced by BaseGenericKineticBCS< X, Diag, OffDiag >::applyFlowBC().

132  {
133  for(int i=0; i<_faces.getCount(); i++)
135  }
void applyExtrapolationBC() const
const StorageSite & _faces
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericKineticBCS< X, Diag, OffDiag >::applyExtrapolationBC ( const int  f) const
inline

Definition at line 139 of file GenericKineticBCS.h.

References BaseGenericKineticBCS< X, Diag, OffDiag >::_assembler, BaseGenericKineticBCS< X, Diag, OffDiag >::_dRdX, BaseGenericKineticBCS< X, Diag, OffDiag >::_dRdXDiag, BaseGenericKineticBCS< X, Diag, OffDiag >::_faceCells, BaseGenericKineticBCS< X, Diag, OffDiag >::_ibType, BaseGenericKineticBCS< X, Diag, OffDiag >::_r, BaseGenericKineticBCS< X, Diag, OffDiag >::_x, CRMatrix< T_Diag, T_OffDiag, X >::PairWiseAssembler::getCoeff01(), CRMatrix< T_Diag, T_OffDiag, X >::PairWiseAssembler::getCoeff10(), Mesh::IBTYPE_FLUID, and CRMatrix< T_Diag, T_OffDiag, X >::setBoundary().

140  {
141  const int c0 = _faceCells(f,0);
142  const int c1 = _faceCells(f,1);
143 
144  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
145  return;
146 
147  // the current value of flux and its Jacobians
148  //const X fluxB = -_r[c1];
149  // const OffDiag dFluxdXC0 = -_assembler.getCoeff10(f);
150  const Diag dFluxdXC1 = -_dRdXDiag[c1];
151 
152  const X xc0mxc1 = _x[c0]-_x[c1];
153 
154  // eliminate boundary dependency from cell equation
155  _dRdXDiag[c0] += dFluxdXC1;
156  _r[c0] += dFluxdXC1*xc0mxc1;
157  _assembler.getCoeff01(f) = 0;
158 
159  // boundary value equation
162  _r[c1] = xc0mxc1;
163  _dRdX.setBoundary(c1);
164 
165  /*
166  //setup the equation for the boundary flux correction
167  _dFluxdX.setCoeffL(f,dFluxdXC0);
168  _dFluxdX.setCoeffR(f,dFluxdXC0); // should really be dFluxdXC1
169  _flux[f] = fluxB;
170  _rFlux[f] = T_Scalar(0);
171  _dFluxdFlux[f] = NumTypeTraits<Diag>::getNegativeUnity();
172  */
173  }
OffDiag & getCoeff10(const int np)
Definition: CRMatrix.h:131
const IntArray & _ibType
OffDiag & getCoeff01(const int np)
Definition: CRMatrix.h:126
void setBoundary(const int nr)
Definition: CRMatrix.h:1056
const CRConnectivity & _faceCells
template<class X, class Diag, class OffDiag>
void BaseGenericKineticBCS< X, Diag, OffDiag >::applyFlowBC ( const TArray convFlux,
const X &  bValue 
) const
inline

Definition at line 215 of file GenericKineticBCS.h.

References BaseGenericKineticBCS< X, Diag, OffDiag >::_faces, BaseGenericKineticBCS< X, Diag, OffDiag >::applyDirichletBC(), BaseGenericKineticBCS< X, Diag, OffDiag >::applyExtrapolationBC(), and StorageSite::getCount().

216  {
217  for(int f=0; f<_faces.getCount(); f++)
218  if (convFlux[f] < 0)
219  applyDirichletBC(f,bValue);
220  else
222  }
void applyDirichletBC(int f, const X &bValue) const
void applyExtrapolationBC() const
const StorageSite & _faces
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericKineticBCS< X, Diag, OffDiag >::applyInterfaceBC ( const int  f) const
inline

Definition at line 175 of file GenericKineticBCS.h.

References BaseGenericKineticBCS< X, Diag, OffDiag >::_assembler, BaseGenericKineticBCS< X, Diag, OffDiag >::_cells, BaseGenericKineticBCS< X, Diag, OffDiag >::_faceCells, BaseGenericKineticBCS< X, Diag, OffDiag >::_r, CRMatrix< T_Diag, T_OffDiag, X >::PairWiseAssembler::getCoeff01(), CRMatrix< T_Diag, T_OffDiag, X >::PairWiseAssembler::getCoeff10(), and StorageSite::getSelfCount().

Referenced by KineticModel< T >::linearizeKineticModel().

176  {
177  // the boundary cell could be either c0 or c1 at an interface
178  int cb = _faceCells(f,1);
180  if (cb < _cells.getSelfCount())
181  {
182  cb = _faceCells(f,0);
183  sign *= -1.0;
184  }
185 
186 
187  // the current value of flux and its Jacobians
188  // const X fluxInterior = -_r[cb];
189  //const OffDiag dFluxdXC0 = -sign*_assembler.getCoeff10(f);
190  //const OffDiag dFluxdXC1 = sign*_assembler.getCoeff01(f);
191 
192 
193  _r[cb] = T_Scalar(0);
194 
195  if (sign>0)
197  else
199 
200  //setup the equation for the boundary flux correction
201  /*
202  _dFluxdX.setCoeffL(f,dFluxdXC0);
203  _dFluxdX.setCoeffR(f,dFluxdXC1);
204  _flux[f] = fluxInterior;
205  _rFlux[f] = T_Scalar(0);
206  _dFluxdFlux[f] = NumTypeTraits<Diag>::getNegativeUnity();
207  */
208  }
int getSelfCount() const
Definition: StorageSite.h:40
OffDiag & getCoeff10(const int np)
Definition: CRMatrix.h:131
NumTypeTraits< X >::T_Scalar T_Scalar
OffDiag & getCoeff01(const int np)
Definition: CRMatrix.h:126
const StorageSite & _cells
const CRConnectivity & _faceCells
template<class X, class Diag, class OffDiag>
void BaseGenericKineticBCS< X, Diag, OffDiag >::applyInterfaceBC ( ) const
inline

Definition at line 209 of file GenericKineticBCS.h.

References BaseGenericKineticBCS< X, Diag, OffDiag >::_faces, and StorageSite::getCount().

210  {
211  for(int i=0; i<_faces.getCount(); i++)
212  applyInterfaceBC(i);
213  }
const StorageSite & _faces
int getCount() const
Definition: StorageSite.h:39
void applyInterfaceBC() const
template<class X, class Diag, class OffDiag>
void BaseGenericKineticBCS< X, Diag, OffDiag >::applyNonzeroDiagBC ( ) const
inline

Definition at line 224 of file GenericKineticBCS.h.

References BaseGenericKineticBCS< X, Diag, OffDiag >::_faces, and StorageSite::getCount().

225  {
226  for(int i=0; i<_faces.getCount(); i++)
228  }
const StorageSite & _faces
void applyNonzeroDiagBC() const
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericKineticBCS< X, Diag, OffDiag >::applyNonzeroDiagBC ( int  f) const
inline

Definition at line 230 of file GenericKineticBCS.h.

References BaseGenericKineticBCS< X, Diag, OffDiag >::_dRdXDiag, BaseGenericKineticBCS< X, Diag, OffDiag >::_faceCells, BaseGenericKineticBCS< X, Diag, OffDiag >::_ibType, and Mesh::IBTYPE_FLUID.

231  {
232  const int c0 = _faceCells(f,0);
233  const int c1 = _faceCells(f,1);
234 
235  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
236  return;
237 
238  _dRdXDiag[c1][0] = T_Scalar(-1.0);
239  }
NumTypeTraits< X >::T_Scalar T_Scalar
const IntArray & _ibType
const CRConnectivity & _faceCells

Member Data Documentation

template<class X, class Diag, class OffDiag>
const Field& BaseGenericKineticBCS< X, Diag, OffDiag >::_areaField
protected

Definition at line 262 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
const Field& BaseGenericKineticBCS< X, Diag, OffDiag >::_areaMagField
protected

Definition at line 260 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
const StorageSite& BaseGenericKineticBCS< X, Diag, OffDiag >::_cells
protected
template<class X, class Diag, class OffDiag>
CCMatrix& BaseGenericKineticBCS< X, Diag, OffDiag >::_dRdX
protected
template<class X, class Diag, class OffDiag>
const VectorT3Array& BaseGenericKineticBCS< X, Diag, OffDiag >::_faceArea
protected

Definition at line 263 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
const TArray& BaseGenericKineticBCS< X, Diag, OffDiag >::_faceAreaMag
protected

Definition at line 261 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
const Field& BaseGenericKineticBCS< X, Diag, OffDiag >::_varField
protected

Definition at line 247 of file GenericKineticBCS.h.

template<class X, class Diag, class OffDiag>
XArray& BaseGenericKineticBCS< X, Diag, OffDiag >::_x
protected
template<class X, class Diag, class OffDiag>
const MultiField::ArrayIndex BaseGenericKineticBCS< X, Diag, OffDiag >::_xIndex
protected

Definition at line 249 of file GenericKineticBCS.h.


The documentation for this class was generated from the following file: