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

#include <TimeDerivativeDiscretization.h>

Inheritance diagram for TimeDerivativeDiscretization< X, Diag, OffDiag >:
Collaboration diagram for TimeDerivativeDiscretization< 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

 TimeDerivativeDiscretization (const MeshList &meshes, const GeomFields &geomFields, Field &varField, Field &varN1Field, Field &varN2Field, const Field &densityField, 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_densityField
 
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 TimeDerivativeDiscretization< X, Diag, OffDiag >

Definition at line 18 of file TimeDerivativeDiscretization.h.

Member Typedef Documentation

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

Definition at line 25 of file TimeDerivativeDiscretization.h.

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

Definition at line 23 of file TimeDerivativeDiscretization.h.

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

Definition at line 24 of file TimeDerivativeDiscretization.h.

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

Definition at line 29 of file TimeDerivativeDiscretization.h.

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

Definition at line 21 of file TimeDerivativeDiscretization.h.

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

Definition at line 28 of file TimeDerivativeDiscretization.h.

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

Definition at line 27 of file TimeDerivativeDiscretization.h.

Constructor & Destructor Documentation

template<class X , class Diag , class OffDiag >
TimeDerivativeDiscretization< X, Diag, OffDiag >::TimeDerivativeDiscretization ( const MeshList meshes,
const GeomFields geomFields,
Field varField,
Field varN1Field,
Field varN2Field,
const Field densityField,
const T_Scalar  dT 
)
inline

Definition at line 31 of file TimeDerivativeDiscretization.h.

37  :
38  Discretization(meshes),
39  _geomFields(geomFields),
40  _varField(varField),
41  _varN1Field(varN1Field),
42  _varN2Field(varN2Field),
43  _densityField(densityField),
44  _dT(dT)
45  {}
Discretization(const MeshList &meshes)

Member Function Documentation

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

Implements Discretization.

Definition at line 47 of file TimeDerivativeDiscretization.h.

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

49  {
50 
51  const StorageSite& cells = mesh.getCells();
52 
53  const TArray& density =
54  dynamic_cast<const TArray&>(_densityField[cells]);
55 
56  const TArray& cellVolume =
57  dynamic_cast<const TArray&>(_geomFields.volume[cells]);
58 
59  const MultiField::ArrayIndex cVarIndex(&_varField,&cells);
60  CCMatrix& matrix =
61  dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(cVarIndex,cVarIndex));
62 
63  DiagArray& diag = matrix.getDiag();
64 
65  const XArray& x = dynamic_cast<const XArray&>(_varField[cells]);
66  const XArray& xN1 = dynamic_cast<const XArray&>(_varN1Field[cells]);
67 
68  XArray& rCell = dynamic_cast<XArray&>(rField[cVarIndex]);
69 
70 
71  const int nCells = cells.getSelfCount();
72 
73 
74  if (_varN2Field.hasArray(cells))
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  if (_geomFields.volumeN1.hasArray(cells))
83  {
84  const TArray& cellVolumeN1 =
85  dynamic_cast<const TArray&>(_geomFields.volumeN1[cells]);
86  const TArray& cellVolumeN2 =
87  dynamic_cast<const TArray&>(_geomFields.volumeN2[cells]);
88  for(int c=0; c<nCells; c++)
89  {
90  const T_Scalar rhoVbydT = density[c]*cellVolume[c]/_dT;
91  const T_Scalar rhobydT = density[c]/_dT;
92  const T_Scalar term1 = onePointFive*cellVolume[c];
93  const T_Scalar term2 = two*cellVolumeN1[c];
94  const T_Scalar term3 = pointFive*cellVolumeN2[c];
95  rCell[c] -= rhobydT*(term1*x[c]- term2*xN1[c]
96  + term3*xN2[c]);
97  diag[c] -= rhoVbydT*onePointFive;
98  }
99  }
100  else
101  {
102  for(int c=0; c<nCells; c++)
103  {
104  const T_Scalar rhoVbydT = density[c]*cellVolume[c]/_dT;
105  rCell[c] -= rhoVbydT*(onePointFive*x[c]- two*xN1[c]
106  + pointFive*xN2[c]);
107  diag[c] -= rhoVbydT*onePointFive;
108  }
109  }
110  }
111  else
112  {
113  if (_geomFields.volumeN1.hasArray(cells))
114  {
115  const TArray& cellVolumeN1 =
116  dynamic_cast<const TArray&>(_geomFields.volumeN1[cells]);
117  for(int c=0; c<nCells; c++)
118  {
119  const T_Scalar rhoVbydT = density[c]*cellVolume[c]/_dT;
120  const T_Scalar rhobydT = density[c]/_dT;
121  rCell[c] -= rhobydT*(cellVolume[c]*x[c]
122  - cellVolumeN1[c]*xN1[c]);
123 
124  diag[c] -= rhoVbydT;
125 
126  }
127  }
128  else if (_geomFields.ibTypeN1.hasArray(cells))
129  {
130 
131  const IntArray& ibTypeN1 =
132  dynamic_cast<const IntArray&>(_geomFields.ibTypeN1[cells]);
133  const IntArray& ibType =
134  dynamic_cast<const IntArray&>(_geomFields.ibType[cells]);
135  for(int c=0; c<nCells; c++)
136  {
137  const T_Scalar rhoVbydT = density[c]*cellVolume[c]/_dT;
138 
139  if (ibTypeN1[c] == Mesh::IBTYPE_FLUID &&
140  (ibType[c] == Mesh::IBTYPE_FLUID))
141  rCell[c] -= rhoVbydT*(x[c] - xN1[c]);
142  else if (ibType[c] == Mesh::IBTYPE_FLUID)
143  rCell[c] -= rhoVbydT*(x[c] );
144  diag[c] -= rhoVbydT;
145  }
146  }
147  else
148  {
149  for(int c=0; c<nCells; c++)
150  {
151  const T_Scalar rhoVbydT = density[c]*cellVolume[c]/_dT;
152  rCell[c] -= rhoVbydT*(x[c]- xN1[c]);
153  diag[c] -= rhoVbydT;
154 
155  }
156  }
157  }
158 
159  }
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
Field volumeN2
Definition: GeomFields.h:28
Field ibType
Definition: GeomFields.h:38
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
NumTypeTraits< X >::T_Scalar T_Scalar
CRMatrix< Diag, OffDiag, X > CCMatrix

Member Data Documentation

template<class X , class Diag , class OffDiag >
const Field& TimeDerivativeDiscretization< X, Diag, OffDiag >::_densityField
private
template<class X , class Diag , class OffDiag >
const T_Scalar TimeDerivativeDiscretization< X, Diag, OffDiag >::_dT
private
template<class X , class Diag , class OffDiag >
const GeomFields& TimeDerivativeDiscretization< X, Diag, OffDiag >::_geomFields
private
template<class X , class Diag , class OffDiag >
const Field& TimeDerivativeDiscretization< X, Diag, OffDiag >::_varField
private
template<class X , class Diag , class OffDiag >
const Field& TimeDerivativeDiscretization< X, Diag, OffDiag >::_varN1Field
private
template<class X , class Diag , class OffDiag >
const Field& TimeDerivativeDiscretization< X, Diag, OffDiag >::_varN2Field
private

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