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

#include <TimeDerivativePlateDiscretization.h>

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

Public Member Functions

 TimeDerivativePlateDiscretization (const MeshList &meshes, const GeomFields &geomFields, Field &varField, Field &varN1Field, Field &varN2Field, Field &varN3Field, const Field &densityField, const Field &thicknessField, Field &accelerationField, const Field &volume0Field, const bool &variableTimeStep, const T_Scalar dT, const T_Scalar dTN1, const T_Scalar dTN2)
 
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_varN3Field
 
const Field_densityField
 
const Field_thicknessField
 
Field_accelerationField
 
const Field_volume0Field
 
const bool _variableTimeStep
 
const T_Scalar _dT
 
const T_Scalar _dTN1
 
const T_Scalar _dTN2
 

Additional Inherited Members

- Protected Attributes inherited from Discretization
const MeshList_meshes
 

Detailed Description

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

Definition at line 18 of file TimeDerivativePlateDiscretization.h.

Member Typedef Documentation

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

Definition at line 25 of file TimeDerivativePlateDiscretization.h.

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

Definition at line 23 of file TimeDerivativePlateDiscretization.h.

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

Definition at line 24 of file TimeDerivativePlateDiscretization.h.

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

Definition at line 21 of file TimeDerivativePlateDiscretization.h.

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

Definition at line 28 of file TimeDerivativePlateDiscretization.h.

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

Definition at line 27 of file TimeDerivativePlateDiscretization.h.

Constructor & Destructor Documentation

template<class X , class Diag , class OffDiag >
TimeDerivativePlateDiscretization< X, Diag, OffDiag >::TimeDerivativePlateDiscretization ( const MeshList meshes,
const GeomFields geomFields,
Field varField,
Field varN1Field,
Field varN2Field,
Field varN3Field,
const Field densityField,
const Field thicknessField,
Field accelerationField,
const Field volume0Field,
const bool &  variableTimeStep,
const T_Scalar  dT,
const T_Scalar  dTN1,
const T_Scalar  dTN2 
)
inline

Definition at line 31 of file TimeDerivativePlateDiscretization.h.

44  :
45  Discretization(meshes),
46  _geomFields(geomFields),
47  _varField(varField),
48  _varN1Field(varN1Field),
49  _varN2Field(varN2Field),
50  _varN3Field(varN3Field),
51  _densityField(densityField),
52  _thicknessField(thicknessField),
53  _accelerationField(accelerationField),
54  _volume0Field(volume0Field),
55  _variableTimeStep(variableTimeStep),
56  _dT(dT),
57  _dTN1(dTN1),
58  _dTN2(dTN2)
59  {}
Discretization(const MeshList &meshes)

Member Function Documentation

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

Implements Discretization.

Definition at line 61 of file TimeDerivativePlateDiscretization.h.

References TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_accelerationField, TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_densityField, TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_dT, TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_dTN1, TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_dTN2, TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_thicknessField, TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_varField, TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_variableTimeStep, TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_varN1Field, TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_varN2Field, TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_varN3Field, TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_volume0Field, Mesh::getCells(), CRMatrix< T_Diag, T_OffDiag, X >::getDiag(), MultiFieldMatrix::getMatrix(), StorageSite::getSelfCount(), and Field::hasArray().

63  {
64 
65  const StorageSite& cells = mesh.getCells();
66 
67  const TArray& density =
68  dynamic_cast<const TArray&>(_densityField[cells]);
69 
70  const TArray& thickness =
71  dynamic_cast<const TArray&>(_thicknessField[cells]);
72 
73  //const TArray& cellVolume =
74  // dynamic_cast<const TArray&>(_geomFields.volume[cells]);
75 
76  const TArray& cellVolume0 =
77  dynamic_cast<const TArray&>(_volume0Field[cells]);
78 
79  const MultiField::ArrayIndex cVarIndex(&_varField,&cells);
80  CCMatrix& matrix =
81  dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(cVarIndex,cVarIndex));
82 
83  DiagArray& diag = matrix.getDiag();
84 
85  const XArray& x = dynamic_cast<const XArray&>(_varField[cells]);
86  const XArray& xN1 = dynamic_cast<const XArray&>(_varN1Field[cells]);
87 
88  XArray& rCell = dynamic_cast<XArray&>(rField[cVarIndex]);
89 
90  TArray& acceleration =
91  dynamic_cast<TArray&>(_accelerationField[cells]);
92 
93  const int nCells = cells.getSelfCount();
94 
95 
96  // second order
97  const XArray& xN2 = dynamic_cast<const XArray&>(_varN2Field[cells]);
98 
99  T_Scalar two(2.0);
100  T_Scalar three(3.0);
101  T_Scalar twelve(12.0);
102  const T_Scalar _dT2 = _dT*_dT;
103 
104  if(!_variableTimeStep)
105  {
106  if (_varN3Field.hasArray(cells))
107  {
108  const XArray& xN3 = dynamic_cast<const XArray&>(_varN3Field[cells]);
109  T_Scalar five(5.0);
110  T_Scalar four(4.0);
111  for(int c=0; c<nCells; c++)
112  {
113  const T_Scalar rhoVHbydT2 = density[c]*cellVolume0[c]*thickness[c]/_dT2;
114  const T_Scalar rhobydT2 = density[c]/_dT2;
115  const T_Scalar rhoVH3by12dT2 = density[c]*cellVolume0[c]*
116  pow(thickness[c],three)/(twelve*_dT2);
117  rCell[c][0] += rhoVH3by12dT2*(two*x[c][0] - five*xN1[c][0] + four*xN2[c][0]
118  - xN3[c][0]);
119  (diag[c])(0,0) += two*rhoVH3by12dT2;
120  rCell[c][1] += rhoVH3by12dT2*(two*x[c][1] - five*xN1[c][1] + four*xN2[c][1]
121  - xN3[c][1]);
122  (diag[c])(1,1) += two*rhoVH3by12dT2;
123  rCell[c][2] += rhoVHbydT2*(two*x[c][2] - five*xN1[c][2] + four*xN2[c][2]
124  - xN3[c][2]);
125  (diag[c])(2,2) += two*rhoVHbydT2;
126  //acceleration[c] = rhobydT2*(two*x[c][2] - five*xN1[c][2] + four*xN2[c][2]
127  // - xN3[c][2]);
128  }
129  }
130  else
131  {
132  for(int c=0; c<nCells; c++)
133  {
134  const T_Scalar rhoVHbydT2 = density[c]*cellVolume0[c]*thickness[c]/_dT2;
135  const T_Scalar rhobydT2 = density[c]/_dT2;
136  const T_Scalar rhoVH3by12dT2 = density[c]*cellVolume0[c]*
137  pow(thickness[c],three)/(twelve*_dT2);
138 
139  rCell[c][0] += rhoVH3by12dT2*(x[c][0]- two*xN1[c][0]
140  + xN2[c][0]);
141  (diag[c])(0,0) += rhoVH3by12dT2;
142  rCell[c][1] += rhoVH3by12dT2*(x[c][1]- two*xN1[c][1]
143  + xN2[c][1]);
144  (diag[c])(1,1) += rhoVH3by12dT2;
145 
146  rCell[c][2] += rhoVHbydT2*(x[c][2]- two*xN1[c][2]
147  + xN2[c][2]);
148  (diag[c])(2,2) += rhoVHbydT2;
149  //acceleration[c] = rhobydT2*(x[c][2]- two*xN1[c][2]
150  // + xN2[c][2]);
151  }
152  }
153  }
154  else
155  {
156  T_Scalar a = (_dT + _dTN1)/_dT;
157  T_Scalar b = (_dT + _dTN1 + _dTN2)/_dT;
158  T_Scalar one(1.0);
159  if (_varN3Field.hasArray(cells))
160  {
161  T_Scalar c1 = (two*a*b*(pow(a,two)-pow(b,two))+two*b*(pow(b,two)-one)-two*a*(pow(a,two)-one))/
162  (a*b*(a-one)*(b-one)*(a-b));
163  T_Scalar c2 = -two*(a+b)/((a-1)*(b-1));
164  T_Scalar c3 = -two*(b+one)/(a*(a-b)*(a-one));
165  T_Scalar c4 = two*(a+one)/(b*(a-b)*(b-one));
166  const XArray& xN3 = dynamic_cast<const XArray&>(_varN3Field[cells]);
167  for(int c=0; c<nCells; c++)
168  {
169  const T_Scalar rhoVHbydT2 = density[c]*cellVolume0[c]*thickness[c]/_dT2;
170  const T_Scalar rhobydT2 = density[c]/_dT2;
171  const T_Scalar rhoVH3by12dT2 = density[c]*cellVolume0[c]*
172  pow(thickness[c],three)/(twelve*_dT2);
173  rCell[c][0] += rhoVH3by12dT2*(c1*x[c][0] + c2*xN1[c][0] + c3*xN2[c][0]
174  + c4*xN3[c][0]);
175  (diag[c])(0,0) += c1*rhoVH3by12dT2;
176  rCell[c][1] += rhoVH3by12dT2*(c1*x[c][1] + c2*xN1[c][1] + c3*xN2[c][1]
177  + c4*xN3[c][1]);
178  (diag[c])(1,1) += c1*rhoVH3by12dT2;
179  rCell[c][2] += rhoVHbydT2*(c1*x[c][2] + c2*xN1[c][2] + c3*xN2[c][2]
180  + c4*xN3[c][2]);
181  (diag[c])(2,2) += c1*rhoVHbydT2;
182  //acceleration[c] = rhobydT2*(c1*x[c][2] + c2*xN1[c][2] + c3*xN2[c][2]
183  // + c4*xN3[c][2]);
184  }
185  }
186  else
187  {
188  T_Scalar c1 = two/a;
189  T_Scalar c2 = -two/(a-one);
190  T_Scalar c3 = two/(a*(a-one));
191  for(int c=0; c<nCells; c++)
192  {
193  const T_Scalar rhoVHbydT2 = density[c]*cellVolume0[c]*thickness[c]/_dT2;
194  const T_Scalar rhobydT2 = density[c]/_dT2;
195  const T_Scalar rhoVH3by12dT2 = density[c]*cellVolume0[c]*
196  pow(thickness[c],three)/(twelve*_dT2);
197 
198  rCell[c][0] += rhoVH3by12dT2*(c1*x[c][0] + c2*xN1[c][0]
199  + c3*xN2[c][0]);
200  (diag[c])(0,0) += c1*rhoVH3by12dT2;
201  rCell[c][1] += rhoVH3by12dT2*(c1*x[c][1] + c2*xN1[c][1]
202  + c3*xN2[c][1]);
203  (diag[c])(1,1) += c1*rhoVH3by12dT2;
204 
205  rCell[c][2] += rhoVHbydT2*(c1*x[c][2] + c2*xN1[c][2]
206  + c3*xN2[c][2]);
207  (diag[c])(2,2) += c1*rhoVHbydT2;
208  //acceleration[c] = rhobydT2*(c1*x[c][2] + c2*xN1[c][2]
209  // + c3*xN2[c][2]);
210  }
211  }
212  }
213  }
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
const StorageSite & getCells() const
Definition: Mesh.h:109

Member Data Documentation

template<class X , class Diag , class OffDiag >
Field& TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_accelerationField
private
template<class X , class Diag , class OffDiag >
const Field& TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_densityField
private
template<class X , class Diag , class OffDiag >
const T_Scalar TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_dT
private
template<class X , class Diag , class OffDiag >
const T_Scalar TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_dTN1
private
template<class X , class Diag , class OffDiag >
const T_Scalar TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_dTN2
private
template<class X , class Diag , class OffDiag >
const GeomFields& TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_geomFields
private

Definition at line 215 of file TimeDerivativePlateDiscretization.h.

template<class X , class Diag , class OffDiag >
const Field& TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_thicknessField
private
template<class X , class Diag , class OffDiag >
const Field& TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_varField
private
template<class X , class Diag , class OffDiag >
const bool TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_variableTimeStep
private
template<class X , class Diag , class OffDiag >
const Field& TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_varN1Field
private
template<class X , class Diag , class OffDiag >
const Field& TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_varN2Field
private
template<class X , class Diag , class OffDiag >
const Field& TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_varN3Field
private
template<class X , class Diag , class OffDiag >
const Field& TimeDerivativePlateDiscretization< X, Diag, OffDiag >::_volume0Field
private

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