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

#include <LinearizeDielectric.h>

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

Public Types

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

Public Member Functions

 LinearizeDielectric (const GeomFields &geomFields, const Field &dielectric_constant, const T_Scalar dielectric_thickness, Field &varField, const T_Scalar source=0.0)
 
void discretize (const Mesh &mesh, MultiFieldMatrix &mfmatrix, MultiField &xField, MultiField &rField)
 

Private Attributes

const GeomFields_geomFields
 
Field_varField
 
const Field_dielectric_constant
 
const T_Scalar _dielectric_thickness
 
const T_Scalar _source
 

Detailed Description

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

Definition at line 24 of file LinearizeDielectric.h.

Member Typedef Documentation

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

Definition at line 28 of file LinearizeDielectric.h.

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

Definition at line 29 of file LinearizeDielectric.h.

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

Definition at line 27 of file LinearizeDielectric.h.

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

Definition at line 30 of file LinearizeDielectric.h.

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

Definition at line 32 of file LinearizeDielectric.h.

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

Definition at line 33 of file LinearizeDielectric.h.

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

Definition at line 31 of file LinearizeDielectric.h.

Constructor & Destructor Documentation

template<class X , class Diag , class OffDiag >
LinearizeDielectric< X, Diag, OffDiag >::LinearizeDielectric ( const GeomFields geomFields,
const Field dielectric_constant,
const T_Scalar  dielectric_thickness,
Field varField,
const T_Scalar  source = 0.0 
)
inline

Definition at line 36 of file LinearizeDielectric.h.

40  :
41  _geomFields(geomFields),
42  _varField(varField),
43  _dielectric_constant(dielectric_constant),
44  _dielectric_thickness(dielectric_thickness),
45  _source(source)
46  {}
const GeomFields & _geomFields
const Field & _dielectric_constant
const T_Scalar _dielectric_thickness

Member Function Documentation

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

Definition at line 49 of file LinearizeDielectric.h.

References LinearizeDielectric< X, Diag, OffDiag >::_dielectric_constant, LinearizeDielectric< X, Diag, OffDiag >::_dielectric_thickness, LinearizeDielectric< X, Diag, OffDiag >::_geomFields, LinearizeDielectric< X, Diag, OffDiag >::_varField, GeomFields::areaMag, GeomFields::coordinate, Mesh::getCellCells(), Mesh::getCells(), CRMatrix< T_Diag, T_OffDiag, X >::getCoeff(), CRConnectivity::getCount(), CRMatrix< T_Diag, T_OffDiag, X >::getDiag(), MultiFieldMatrix::getMatrix(), Mesh::getParentFaceGroupSite(), StorageSite::getSelfCount(), harmonicAverage(), and mag().

51  {
52  const StorageSite& cells = mesh.getCells();
53  const StorageSite& faces = mesh.getParentFaceGroupSite();
54  const MultiField::ArrayIndex cVarIndex(&_varField,&cells);
55 
56  CCMatrix& matrix = dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(cVarIndex,cVarIndex));
57  const TArray& faceAreaMag =
58  dynamic_cast<const TArray&>(_geomFields.areaMag[faces]);
59 
60  const XArray& xCell = dynamic_cast<const XArray&>(xField[cVarIndex]);
61 
62  const VectorT3Array& cellCentroid =
63  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[cells]);
64 
65  const CRConnectivity& cellCells = mesh.getCellCells();
66 
67  const TArray& dcCell =
68  dynamic_cast<const TArray&>(_dielectric_constant[cells]);
69 
70  XArray& rCell = dynamic_cast<XArray&>(rField[cVarIndex]);
71 
72  DiagArray& diag = matrix.getDiag();
73 
74  const int nCells = cells.getSelfCount();
75 
76  for (int c=0; c<nCells; c++)
77  {
78  const int c0 = c;
79  const int nb = cellCells.getCount(c);
80  if (nb!=2)
81  throw CException("invalid connectivity in shellMesh");
82 
83  //source term
84  const T_Scalar volume = faceAreaMag[c0] * _dielectric_thickness;
85 
86  const T_Scalar src = 0.0;
87 
88  rCell[c0] += src*volume;
89 
90  //diffusion term
91  for (int i=0; i<nb; i++){
92 
93  const int c1 = cellCells(c,i);
94 
95  OffDiag& offdiag = matrix.getCoeff(c0, c1);
96 
97  VectorT3 ds=cellCentroid[c1]-cellCentroid[c0];
98  T_Scalar dsMag = mag(ds);
99 
100  const T_Scalar dc = harmonicAverage(dcCell[c0], dcCell[c1]);
101 
102  const T_Scalar diffCoeff = dc*faceAreaMag[c0]/(dsMag + 0.5*_dielectric_thickness);
103 
104  const X dFlux = diffCoeff*(xCell[c1]-xCell[c0]);
105 
106  rCell[c0] += dFlux;
107 
108  offdiag = diffCoeff;
109 
110  diag[c0] -= diffCoeff;
111 
112  }
113  }
114  }
int getCount(const int i) const
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
int getSelfCount() const
Definition: StorageSite.h:40
Field coordinate
Definition: GeomFields.h:19
T harmonicAverage(const T &x0, const T &x1)
const GeomFields & _geomFields
const StorageSite & getParentFaceGroupSite() const
Definition: Mesh.h:329
CCMatrix::DiagArray DiagArray
NumTypeTraits< X >::T_Scalar T_Scalar
T mag(const Vector< T, 3 > &a)
Definition: Vector.h:260
const Field & _dielectric_constant
const T_Scalar _dielectric_thickness
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
Array< T_Scalar > TArray
CRMatrix< Diag, OffDiag, X > CCMatrix
const CRConnectivity & getCellCells() const
Definition: Mesh.cpp:480
const StorageSite & getCells() const
Definition: Mesh.h:109
Field areaMag
Definition: GeomFields.h:25

Member Data Documentation

template<class X , class Diag , class OffDiag >
const Field& LinearizeDielectric< X, Diag, OffDiag >::_dielectric_constant
private
template<class X , class Diag , class OffDiag >
const T_Scalar LinearizeDielectric< X, Diag, OffDiag >::_dielectric_thickness
private
template<class X , class Diag , class OffDiag >
const GeomFields& LinearizeDielectric< X, Diag, OffDiag >::_geomFields
private
template<class X , class Diag , class OffDiag >
const T_Scalar LinearizeDielectric< X, Diag, OffDiag >::_source
private

Definition at line 121 of file LinearizeDielectric.h.

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

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