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

#include <CaptureDiscretization.h>

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

Public Types

typedef NumTypeTraits< X >
::T_Scalar 
T_Scalar
 
typedef Array< T_ScalarTArray
 
typedef CRMatrix< Diag,
OffDiag, X > 
CCMatrix
 
typedef CCMatrix::DiagArray DiagArray
 
typedef CCMatrix::OffDiagArray OffDiagArray
 
typedef Array< X > XArray
 
typedef Array< Vector
< T_Scalar, 3 > > 
VectorTNArray
 

Public Member Functions

 CaptureDiscretization (const MeshList &meshes, const GeomFields &geomFields, const Field &varField, const Field &capturecrossField, const ElectricModelConstants< T_Scalar > &constants)
 
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_capturecrossField
 
const ElectricModelConstants
< T_Scalar > & 
_constants
 

Additional Inherited Members

- Protected Attributes inherited from Discretization
const MeshList_meshes
 

Detailed Description

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

Definition at line 41 of file CaptureDiscretization.h.

Member Typedef Documentation

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

Definition at line 47 of file CaptureDiscretization.h.

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

Definition at line 48 of file CaptureDiscretization.h.

template<class X , class Diag , class OffDiag >
typedef CCMatrix::OffDiagArray CaptureDiscretization< X, Diag, OffDiag >::OffDiagArray

Definition at line 49 of file CaptureDiscretization.h.

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

Definition at line 45 of file CaptureDiscretization.h.

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

Definition at line 46 of file CaptureDiscretization.h.

template<class X , class Diag , class OffDiag >
typedef Array<Vector<T_Scalar, 3> > CaptureDiscretization< X, Diag, OffDiag >::VectorTNArray

Definition at line 51 of file CaptureDiscretization.h.

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

Definition at line 50 of file CaptureDiscretization.h.

Constructor & Destructor Documentation

template<class X , class Diag , class OffDiag >
CaptureDiscretization< X, Diag, OffDiag >::CaptureDiscretization ( const MeshList meshes,
const GeomFields geomFields,
const Field varField,
const Field capturecrossField,
const ElectricModelConstants< T_Scalar > &  constants 
)
inline

Definition at line 53 of file CaptureDiscretization.h.

57  :
58  Discretization(meshes),
59  _geomFields(geomFields),
60  _varField(varField),
61  _capturecrossField(capturecrossField),
62  _constants(constants)
63  {}
Discretization(const MeshList &meshes)
const ElectricModelConstants< T_Scalar > & _constants
const GeomFields & _geomFields

Member Function Documentation

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

Implements Discretization.

Definition at line 65 of file CaptureDiscretization.h.

References CaptureDiscretization< X, Diag, OffDiag >::_capturecrossField, CaptureDiscretization< X, Diag, OffDiag >::_constants, CaptureDiscretization< X, Diag, OffDiag >::_geomFields, CaptureDiscretization< X, Diag, OffDiag >::_varField, ElectricModelConstants< T >::electron_trapdensity, Mesh::getCells(), CRMatrix< T_Diag, T_OffDiag, X >::getDiag(), MultiFieldMatrix::getMatrix(), StorageSite::getSelfCount(), K_SI, ME, PI, sqrt(), and GeomFields::volume.

67  {
68  const StorageSite& cells = mesh.getCells();
69 
70  const int nCells = cells.getSelfCount();
71 
72  const TArray& cellVolume = dynamic_cast<const TArray&>(_geomFields.volume[cells]);
73 
74  const VectorTNArray& free_electron_capture_cross = dynamic_cast<const VectorTNArray&> (_capturecrossField[cells]);
75 
76  const MultiField::ArrayIndex cVarIndex(&_varField,&cells);
77 
78  CCMatrix& matrix = dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(cVarIndex,cVarIndex));
79 
80  const XArray& xCell = dynamic_cast<const XArray&>(xField[cVarIndex]);
81 
82  XArray& rCell = dynamic_cast<XArray&>(rField[cVarIndex]);
83 
84  DiagArray& diag = matrix.getDiag();
85 
86  //OffDiagArray& offdiag = matrix.getOffDiag();
87 
88  const T_Scalar electron_effmass = _constants["electron_effmass"];
89 
90  const T_Scalar temperature = _constants["OP_temperature"];
91 
92  const int nTrap = _constants["nTrap"];
93 
94  vector<T_Scalar> electron_trapdensity = _constants.electron_trapdensity;
95 
96  const T_Scalar velocity = sqrt(8.0 * K_SI * temperature / (PI * ME * electron_effmass));
97 
98  for(int c=0; c<nCells; c++){
99 
100  for (int i=0; i<nTrap; i++){
101 
102  T_Scalar fluxCoeff = cellVolume[c] * velocity * free_electron_capture_cross[c][i];
103 
104  rCell[c][i] += fluxCoeff * xCell[c][nTrap] * (electron_trapdensity[i] - xCell[c][i]);
105  diag[c](i,i) -= fluxCoeff * xCell[c][nTrap];
106  //diag[c][i] -= fluxCoeff * xCell[c][nTrap];
107  diag[c](i,nTrap) += fluxCoeff * (electron_trapdensity[i]-xCell[c][i]);
108  //diag[c][i+nTrap] += fluxCoeff * (electron_trapdensity[i]-xCell[c][i]);
109 
110  rCell[c][nTrap] -= fluxCoeff * xCell[c][nTrap] * (electron_trapdensity[i] - xCell[c][i]);
111  diag[c](nTrap,nTrap) -= fluxCoeff * (electron_trapdensity[i]-xCell[c][i]);
112  //diag[c][3*nTrap] -= fluxCoeff * (electron_trapdensity[i]-xCell[c][i]);
113  diag[c](nTrap,i) += fluxCoeff * xCell[c][nTrap];
114  //diag[c][2*nTrap+i] += fluxCoeff * xCell[c][nTrap];
115  }
116  }
117  }
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
#define PI
int getSelfCount() const
Definition: StorageSite.h:40
CRMatrix< Diag, OffDiag, X > CCMatrix
#define K_SI
CCMatrix::DiagArray DiagArray
#define ME
Tangent sqrt(const Tangent &a)
Definition: Tangent.h:317
Array< Vector< T_Scalar, 3 > > VectorTNArray
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
vector< T > electron_trapdensity
Definition: ElectricBC.h:76
const ElectricModelConstants< T_Scalar > & _constants
const StorageSite & getCells() const
Definition: Mesh.h:109
Field volume
Definition: GeomFields.h:26
const GeomFields & _geomFields
NumTypeTraits< X >::T_Scalar T_Scalar

Member Data Documentation

template<class X , class Diag , class OffDiag >
const Field& CaptureDiscretization< X, Diag, OffDiag >::_capturecrossField
private
template<class X , class Diag , class OffDiag >
const ElectricModelConstants<T_Scalar>& CaptureDiscretization< X, Diag, OffDiag >::_constants
private
template<class X , class Diag , class OffDiag >
const GeomFields& CaptureDiscretization< X, Diag, OffDiag >::_geomFields
private
template<class X , class Diag , class OffDiag >
const Field& CaptureDiscretization< X, Diag, OffDiag >::_varField
private

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