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

#include <BatteryPCTimeDerivativeDiscretization.h>

Inheritance diagram for BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >:
Collaboration diagram for BatteryPCTimeDerivativeDiscretization< 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< X > XArray
 
typedef Array< T_ScalarTArray
 
typedef Array< int > IntArray
 

Public Member Functions

 BatteryPCTimeDerivativeDiscretization (const MeshList &meshes, const GeomFields &geomFields, Field &varField, Field &varN1Field, Field &varN2Field, Field &rhoCpField, const bool thermalModel, const T_Scalar dT)
 
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_varN1Field
 
const Field_varN2Field
 
const Field_rhoCpField
 
const bool _thermalModel
 
const T_Scalar _dT
 

Additional Inherited Members

- Protected Attributes inherited from Discretization
const MeshList_meshes
 

Detailed Description

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

Definition at line 18 of file BatteryPCTimeDerivativeDiscretization.h.

Member Typedef Documentation

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

Definition at line 25 of file BatteryPCTimeDerivativeDiscretization.h.

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

Definition at line 23 of file BatteryPCTimeDerivativeDiscretization.h.

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

Definition at line 24 of file BatteryPCTimeDerivativeDiscretization.h.

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

Definition at line 29 of file BatteryPCTimeDerivativeDiscretization.h.

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

Definition at line 21 of file BatteryPCTimeDerivativeDiscretization.h.

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

Definition at line 28 of file BatteryPCTimeDerivativeDiscretization.h.

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

Definition at line 27 of file BatteryPCTimeDerivativeDiscretization.h.

Constructor & Destructor Documentation

template<class X , class Diag , class OffDiag >
BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::BatteryPCTimeDerivativeDiscretization ( const MeshList meshes,
const GeomFields geomFields,
Field varField,
Field varN1Field,
Field varN2Field,
Field rhoCpField,
const bool  thermalModel,
const T_Scalar  dT 
)
inline

Member Function Documentation

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

Implements Discretization.

Definition at line 49 of file BatteryPCTimeDerivativeDiscretization.h.

References BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_dT, BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_geomFields, BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_rhoCpField, BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_thermalModel, BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_varField, BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_varN1Field, BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_varN2Field, Mesh::getCells(), CRMatrix< T_Diag, T_OffDiag, X >::getDiag(), MultiFieldMatrix::getMatrix(), StorageSite::getSelfCount(), Field::hasArray(), GeomFields::ibTypeN1, GeomFields::volume, and GeomFields::volumeN1.

51  {
52 
53  const StorageSite& cells = mesh.getCells();
54 
55  const TArray& cellVolume =
56  dynamic_cast<const TArray&>(_geomFields.volume[cells]);
57 
58  const TArray& rhoCp = dynamic_cast<const TArray&>(_rhoCpField[cells]);
59 
60  const MultiField::ArrayIndex cVarIndex(&_varField,&cells);
61  CCMatrix& matrix =
62  dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(cVarIndex,cVarIndex));
63 
64  DiagArray& diag = matrix.getDiag();
65 
66  const XArray& x = dynamic_cast<const XArray&>(_varField[cells]);
67  const XArray& xN1 = dynamic_cast<const XArray&>(_varN1Field[cells]);
68 
69  XArray& rCell = dynamic_cast<XArray&>(rField[cVarIndex]);
70 
71  const int nCells = cells.getSelfCount();
72 
73  if (_varN2Field.hasArray(cells))
74  {
75 
76  // second order
77  const XArray& xN2 = dynamic_cast<const XArray&>(_varN2Field[cells]);
78 
79  T_Scalar onePointFive(1.5);
80  T_Scalar two(2.0);
81  T_Scalar pointFive(0.5);
82 
83  if (_geomFields.volumeN1.hasArray(cells))
84  {
85  //Moving Mesh
86  /*const TArray& cellVolumeN1 =
87  dynamic_cast<const TArray&>(_geomFields.volumeN1[cells]);
88  const TArray& cellVolumeN2 =
89  dynamic_cast<const TArray&>(_geomFields.volumeN2[cells]);
90  for(int c=0; c<nCells; c++)
91  {
92  const T_Scalar rhoVbydT = density[c]*cellVolume[c]/_dT;
93  const T_Scalar rhobydT = density[c]/_dT;
94  const T_Scalar term1 = onePointFive*cellVolume[c];
95  const T_Scalar term2 = two*cellVolumeN1[c];
96  const T_Scalar term3 = pointFive*cellVolumeN2[c];
97  rCell[c] -= rhobydT*(term1*x[c]- term2*xN1[c]
98  + term3*xN2[c]);
99  diag[c] -= rhoVbydT*onePointFive;
100  }*/
101  }
102  else
103  {
104 
105  for(int c=0; c<nCells; c++)
106  {
107  const T_Scalar rhoVbydT_species = cellVolume[c]/_dT;
108  (rCell[c])[1] -= rhoVbydT_species*(onePointFive*(x[c])[1] - two*(xN1[c])[1] + pointFive*(xN2[c])[1]);
109  (diag[c])[1] -= rhoVbydT_species*onePointFive;
110 
111  if (_thermalModel)
112  {
113  const T_Scalar rhoVbydT_temp = rhoCp[c]*cellVolume[c]/_dT;
114  (rCell[c])[2] -= rhoVbydT_temp*(onePointFive*(x[c])[2] - two*(xN1[c])[2] + pointFive*(xN2[c])[2]);
115  (diag[c])[2] -= rhoVbydT_temp*onePointFive;
116  }
117  }
118  }
119  }
120  else
121  {
122  if (_geomFields.volumeN1.hasArray(cells))
123  {
124  //Moving Mesh
125  /*
126  const TArray& cellVolumeN1 =
127  dynamic_cast<const TArray&>(_geomFields.volumeN1[cells]);
128  for(int c=0; c<nCells; c++)
129  {
130  const T_Scalar rhoVbydT = density[c]*cellVolume[c]/_dT;
131  const T_Scalar rhobydT = density[c]/_dT;
132  rCell[c] -= rhobydT*(cellVolume[c]*x[c]
133  - cellVolumeN1[c]*xN1[c]);
134 
135  diag[c] -= rhoVbydT;
136 
137  }*/
138  }
139  else if (_geomFields.ibTypeN1.hasArray(cells))
140  {
141  //IBM
142  /*
143 
144  const IntArray& ibTypeN1 =
145  dynamic_cast<const IntArray&>(_geomFields.ibTypeN1[cells]);
146  const IntArray& ibType =
147  dynamic_cast<const IntArray&>(_geomFields.ibType[cells]);
148  for(int c=0; c<nCells; c++)
149  {
150  const T_Scalar rhoVbydT = density[c]*cellVolume[c]/_dT;
151 
152  if (ibTypeN1[c] == Mesh::IBTYPE_FLUID &&
153  (ibType[c] == Mesh::IBTYPE_FLUID))
154  rCell[c] -= rhoVbydT*(x[c] - xN1[c]);
155  else if (ibType[c] == Mesh::IBTYPE_FLUID)
156  rCell[c] -= rhoVbydT*(x[c] );
157  diag[c] -= rhoVbydT;
158  }*/
159  }
160  else
161  {
162  // only apply unsteady terms for species equation and temp, not potential
163  // first order
164  for(int c=0; c<nCells; c++)
165  {
166  const T_Scalar rhoVbydT_species = cellVolume[c]/_dT;
167  (rCell[c])[1] -= rhoVbydT_species*((x[c])[1]- (xN1[c])[1]);
168  (diag[c])[1] -= rhoVbydT_species;
169 
170  if (_thermalModel)
171  {
172  const T_Scalar rhoVbydT_temp = rhoCp[c]*cellVolume[c]/_dT;
173  (rCell[c])[2] -= rhoVbydT_temp*((x[c])[2]- (xN1[c])[2]);
174  (diag[c])[2] -= rhoVbydT_temp;
175  }
176  }
177 
178  }
179  }
180 
181  }
Field ibTypeN1
Definition: GeomFields.h:39
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
int getSelfCount() const
Definition: StorageSite.h:40
bool hasArray(const StorageSite &s) const
Definition: Field.cpp:37
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
Field volumeN1
Definition: GeomFields.h:27
const StorageSite & getCells() const
Definition: Mesh.h:109
Field volume
Definition: GeomFields.h:26

Member Data Documentation

template<class X , class Diag , class OffDiag >
const T_Scalar BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_dT
private
template<class X , class Diag , class OffDiag >
const GeomFields& BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_geomFields
private
template<class X , class Diag , class OffDiag >
const Field& BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_rhoCpField
private
template<class X , class Diag , class OffDiag >
const bool BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_thermalModel
private
template<class X , class Diag , class OffDiag >
const Field& BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_varField
private
template<class X , class Diag , class OffDiag >
const Field& BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_varN1Field
private
template<class X , class Diag , class OffDiag >
const Field& BatteryPCTimeDerivativeDiscretization< X, Diag, OffDiag >::_varN2Field
private

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