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

#include <EmissionDiscretization.h>

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

Public Types

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

Public Member Functions

 EmissionDiscretization (const MeshList &meshes, const GeomFields &geomFields, const Field &varField, const Field &electricField, 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_electricField
 
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 EmissionDiscretization< X, Diag, OffDiag >

Definition at line 41 of file EmissionDiscretization.h.

Member Typedef Documentation

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

Definition at line 48 of file EmissionDiscretization.h.

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

Definition at line 49 of file EmissionDiscretization.h.

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

Definition at line 50 of file EmissionDiscretization.h.

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

Definition at line 45 of file EmissionDiscretization.h.

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

Definition at line 46 of file EmissionDiscretization.h.

template<class X , class Diag , class OffDiag >
typedef Array<Vector<T_Scalar,3> > EmissionDiscretization< X, Diag, OffDiag >::VectorT3Array

Definition at line 47 of file EmissionDiscretization.h.

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

Definition at line 51 of file EmissionDiscretization.h.

Constructor & Destructor Documentation

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

Definition at line 53 of file EmissionDiscretization.h.

57  :
58  Discretization(meshes),
59  _geomFields(geomFields),
60  _varField(varField),
61  _electricField(electricField),
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 EmissionDiscretization< X, Diag, OffDiag >::discretize ( const Mesh mesh,
MultiFieldMatrix mfmatrix,
MultiField xField,
MultiField rField 
)
inlinevirtual

Implements Discretization.

Definition at line 66 of file EmissionDiscretization.h.

References EmissionDiscretization< X, Diag, OffDiag >::_constants, EmissionDiscretization< X, Diag, OffDiag >::_electricField, EmissionDiscretization< X, Diag, OffDiag >::_geomFields, EmissionDiscretization< X, Diag, OffDiag >::_varField, E0_SI, ElectricModelConstants< T >::electron_trapdepth, Mesh::getCells(), CRMatrix< T_Diag, T_OffDiag, X >::getDiag(), MultiFieldMatrix::getMatrix(), StorageSite::getSelfCount(), K_SI, mag(), PI, QE, sqrt(), and GeomFields::volume.

68  {
69  const StorageSite& cells = mesh.getCells();
70 
71  const int nCells = cells.getSelfCount();
72 
73  const VectorT3Array& electric_field = dynamic_cast<const VectorT3Array&> (_electricField[cells]);
74 
75  const MultiField::ArrayIndex cVarIndex(&_varField,&cells);
76 
77  CCMatrix& matrix = dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(cVarIndex,cVarIndex));
78 
79  const XArray& xCell = dynamic_cast<const XArray&>(_varField[cells]);
80 
81  const TArray& cellVolume =
82  dynamic_cast<const TArray&>(_geomFields.volume[cells]);
83 
84  XArray& rCell = dynamic_cast<XArray&>(rField[cVarIndex]);
85 
86  DiagArray& diag = matrix.getDiag();
87 
88  //OffDiagArray& offdiag = matrix.getOffDiag();
89 
90  const T_Scalar optical_dielectric_constant = _constants["optical_dielectric_constant"];
91  const T_Scalar temperature = _constants["OP_temperature"];
92  const T_Scalar poole_frenkel_emission_frequency = _constants["poole_frenkel_emission_frequency"];
93  const int nTrap = _constants["nTrap"];
94  vector<T_Scalar> electron_trapdepth = _constants.electron_trapdepth;
95  const T_Scalar beta = sqrt( QE / (PI * E0_SI * optical_dielectric_constant) );
96 
97  for(int c=0; c<nCells; c++){
98 
99  for (int i=0; i<nTrap; i++){
100 
101  T_Scalar expt = (electron_trapdepth[i] - beta * sqrt(mag(electric_field[c]))) * QE / (K_SI * temperature);
102 
103  //if (expt < 0.0)
104  //throw CException("exponential error in Emission model");
105  if (expt > 0.0)
106  {
107 
108  T_Scalar fluxCoeff = cellVolume[c] * poole_frenkel_emission_frequency * exp(-expt);
109 
110  rCell[c][i] -= (fluxCoeff * xCell[c][i]);
111 
112  diag[c](i,i) -= fluxCoeff;
113  //diag[c][i] -= fluxCoeff;
114 
115  rCell[c][nTrap] += fluxCoeff * xCell[c][i];
116  }
117  }
118  }
119  }
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
#define PI
int getSelfCount() const
Definition: StorageSite.h:40
NumTypeTraits< X >::T_Scalar T_Scalar
#define K_SI
T mag(const Vector< T, 3 > &a)
Definition: Vector.h:260
CRMatrix< Diag, OffDiag, X > CCMatrix
const ElectricModelConstants< T_Scalar > & _constants
Tangent sqrt(const Tangent &a)
Definition: Tangent.h:317
CCMatrix::DiagArray DiagArray
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
#define QE
const StorageSite & getCells() const
Definition: Mesh.h:109
Field volume
Definition: GeomFields.h:26
const GeomFields & _geomFields
#define E0_SI
vector< T > electron_trapdepth
Definition: ElectricBC.h:77

Member Data Documentation

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

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