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

#include <DriftDiscretization.h>

Inheritance diagram for DriftDiscretization< X, Diag, OffDiag >:
Collaboration diagram for DriftDiscretization< X, Diag, OffDiag >:

Public Types

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

Public Member Functions

 DriftDiscretization (const MeshList &meshes, const GeomFields &geomFields, Field &varField, const Field &convectingFluxField, const int nTrap, const bool useCentralDifference=false)
 
void discretize (const Mesh &mesh, MultiFieldMatrix &mfmatrix, MultiField &xField, MultiField &rField)
 
- Public Member Functions inherited from Discretization
 Discretization (const MeshList &meshes)
 
virtual ~Discretization ()
 
 DEFINE_TYPENAME ("Discretization")
 

Private Attributes

const GeomFields_geomFields
 
const Field_varField
 
const Field_convectingFluxField
 
const int _nTrap
 
const bool _useCentralDifference
 

Additional Inherited Members

- Protected Attributes inherited from Discretization
const MeshList_meshes
 

Detailed Description

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

Definition at line 18 of file DriftDiscretization.h.

Member Typedef Documentation

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

Definition at line 24 of file DriftDiscretization.h.

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

Definition at line 22 of file DriftDiscretization.h.

template<class X , class Diag , class OffDiag >
typedef CCMatrix::DiagArray DriftDiscretization< X, Diag, OffDiag >::DiagArray

Definition at line 23 of file DriftDiscretization.h.

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

Definition at line 25 of file DriftDiscretization.h.

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

Definition at line 21 of file DriftDiscretization.h.

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

Definition at line 28 of file DriftDiscretization.h.

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

Definition at line 29 of file DriftDiscretization.h.

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

Definition at line 30 of file DriftDiscretization.h.

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

Definition at line 26 of file DriftDiscretization.h.

Constructor & Destructor Documentation

template<class X , class Diag , class OffDiag >
DriftDiscretization< X, Diag, OffDiag >::DriftDiscretization ( const MeshList meshes,
const GeomFields geomFields,
Field varField,
const Field convectingFluxField,
const int  nTrap,
const bool  useCentralDifference = false 
)
inline

Definition at line 33 of file DriftDiscretization.h.

38  :
39  Discretization(meshes),
40  _geomFields(geomFields),
41  _varField(varField),
42  _convectingFluxField(convectingFluxField),
43  _nTrap(nTrap),
44  _useCentralDifference(useCentralDifference)
45  {}
Discretization(const MeshList &meshes)
const GeomFields & _geomFields
const Field & _convectingFluxField

Member Function Documentation

template<class X , class Diag , class OffDiag >
void DriftDiscretization< X, Diag, OffDiag >::discretize ( const Mesh mesh,
MultiFieldMatrix mfmatrix,
MultiField xField,
MultiField rField 
)
inlinevirtual

Implements Discretization.

Definition at line 47 of file DriftDiscretization.h.

References DriftDiscretization< X, Diag, OffDiag >::_convectingFluxField, DriftDiscretization< X, Diag, OffDiag >::_nTrap, DriftDiscretization< X, Diag, OffDiag >::_varField, Mesh::getAllFaceCells(), Mesh::getCells(), CRMatrix< T_Diag, T_OffDiag, X >::PairWiseAssembler::getCoeff01(), CRMatrix< T_Diag, T_OffDiag, X >::PairWiseAssembler::getCoeff10(), StorageSite::getCount(), CRMatrix< T_Diag, T_OffDiag, X >::getDiag(), Mesh::getFaces(), MultiFieldMatrix::getMatrix(), CRMatrix< T_Diag, T_OffDiag, X >::getPairWiseAssembler(), and Field::hasArray().

49  {
50 
51  const StorageSite& cells = mesh.getCells();
52  const StorageSite& faces = mesh.getFaces();
53 
54 
55  // should there be some other checks ?
56  if (!_convectingFluxField.hasArray(faces))
57  return;
58 
59  const TArray& convectingFlux =
60  dynamic_cast<const TArray&>(_convectingFluxField[faces]);
61 
62  const MultiField::ArrayIndex cVarIndex(&_varField,&cells);
63  CCMatrix& matrix =
64  dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(cVarIndex,cVarIndex));
65 
66  const CRConnectivity& faceCells = mesh.getAllFaceCells();
67 
68  CCAssembler& assembler = matrix.getPairWiseAssembler(faceCells);
69 
70  DiagArray& diag = matrix.getDiag();
71 
72  const XArray& xCell = dynamic_cast<const XArray&>(xField[cVarIndex]);
73 
74  XArray& rCell = dynamic_cast<XArray&>(rField[cVarIndex]);
75 
76  //const IntArray& ibType = dynamic_cast<const IntArray&>(_geomFields.ibType[cells]);
77 
78  const int nTrap = _nTrap;
79 
80  const int nFaces = faces.getCount();
81 
82  //drift only applies to conductance charge.
83  for(int f=0; f<nFaces; f++)
84  {
85  const int c0 = faceCells(f,0);
86  const int c1 = faceCells(f,1);
87  const T_Scalar faceCFlux = convectingFlux[f];
88 
89  T_Scalar varFlux;
90 
91  if (faceCFlux > T_Scalar(0))
92  {
93  varFlux = faceCFlux*xCell[c0][nTrap];
94  diag[c0](nTrap,nTrap) -= faceCFlux;
95  assembler.getCoeff10(f)(nTrap,nTrap) += faceCFlux;
96  //diag[c0][3*nTrap] -= faceCFlux;
97  //assembler.getCoeff10(f)[3*nTrap] += faceCFlux;
98  //assembler.getCoeff10(f) += faceCFlux;
99  }
100  else
101  {
102  varFlux = faceCFlux*xCell[c1][nTrap];
103  diag[c1](nTrap,nTrap) += faceCFlux;
104  assembler.getCoeff01(f)(nTrap,nTrap) -= faceCFlux;
105  //diag[c1][3*nTrap] += faceCFlux;
106  //assembler.getCoeff01(f)[3*nTrap] -= faceCFlux;
107  //assembler.getCoeff01(f) -= faceCFlux;
108  }
109 
110  rCell[c0][nTrap] -= varFlux;
111  rCell[c1][nTrap] += varFlux;
112  }
113 
114 
115  }
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
bool hasArray(const StorageSite &s) const
Definition: Field.cpp:37
Array< T_Scalar > TArray
const CRConnectivity & getAllFaceCells() const
Definition: Mesh.cpp:378
NumTypeTraits< X >::T_Scalar T_Scalar
const Field & _convectingFluxField
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
CCMatrix::PairWiseAssembler CCAssembler
CCMatrix::DiagArray DiagArray
const StorageSite & getFaces() const
Definition: Mesh.h:108
const StorageSite & getCells() const
Definition: Mesh.h:109
CRMatrix< Diag, OffDiag, X > CCMatrix
int getCount() const
Definition: StorageSite.h:39

Member Data Documentation

template<class X , class Diag , class OffDiag >
const Field& DriftDiscretization< X, Diag, OffDiag >::_convectingFluxField
private
template<class X , class Diag , class OffDiag >
const GeomFields& DriftDiscretization< X, Diag, OffDiag >::_geomFields
private

Definition at line 117 of file DriftDiscretization.h.

template<class X , class Diag , class OffDiag >
const int DriftDiscretization< X, Diag, OffDiag >::_nTrap
private
template<class X , class Diag , class OffDiag >
const bool DriftDiscretization< X, Diag, OffDiag >::_useCentralDifference
private

Definition at line 121 of file DriftDiscretization.h.

template<class X , class Diag , class OffDiag >
const Field& DriftDiscretization< X, Diag, OffDiag >::_varField
private

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