Memosa-FVM  0.2
SourceDiscretizationdissi.h
Go to the documentation of this file.
1 // This file os part of FVM
2 // Copyright (c) 2012 FVM Authors
3 // See LICENSE file for terms.
4 
5 #ifndef _SOURCEDISCRETIZATIONDISSI_H_
6 #define _SOURCEDISCRETIZATIONDISSI_H_
7 
8 #include "Field.h"
9 #include "MultiField.h"
10 #include "MultiFieldMatrix.h"
11 #include "Mesh.h"
12 #include "Discretization.h"
13 #include "StorageSite.h"
14 #include "GeomFields.h"
15 #include "CRConnectivity.h"
16 #include "CRMatrixRect.h"
17 #include "Vector.h"
18 #include "GradientModel.h"
19 #include <math.h>
20 
21 template<class X,class Diag, class OffDiag>
23 {
24 public:
26 
32  typedef Array<X> XArray;
34  typedef typename CCMatrix::DiagArray DiagArray;
36 
37 
39  const GeomFields& geomFields,
40  Field& varField,
41  const Field& velocityField,
42  Field& muField,
43  Field& energyField,
44  Field& densityField,
45  Field& sourcedField,
46  Field& sourcecField,
47  Field& sourcepField,
48  const Field& gradientField) :
49 
50  Discretization(meshes),
51  _geomFields(geomFields),
52  _varField(varField),
53  _velocityField(velocityField),
54  _muField(muField),
55  _energyField(energyField),
56  _densityField(densityField),
57  _sourcedField(sourcedField),
58  _sourcecField(sourcecField),
59  _sourcepField(sourcepField),
60 
61  _gradientField(gradientField)
62 
63  {}
65 
66 
67  void discretize(const Mesh& mesh, MultiFieldMatrix& mfmatrix,
68  MultiField& xField, MultiField& rField)
69  {
70 
71 
72  const StorageSite& cells = mesh.getCells();
73  const MultiField::ArrayIndex cVarIndex(&_varField,&cells);
74 
75  const VGradArray& vGrad =
76  dynamic_cast<const VGradArray&>(_gradientField[cells]);
77 
78  const TArray& muCell =
79  dynamic_cast<const TArray&>(_muField[cells]);
80 
81  const TArray& eCell =
82  dynamic_cast<const TArray&>(_varField[cells]);
83 
84  const TArray& kCell =
85  dynamic_cast<const TArray&>(_energyField[cells]);
86 
87  const TArray & rhoCell =
88  dynamic_cast<const TArray&>(_densityField[cells]);
89 
90  TArray& sourceCell =
91  dynamic_cast<TArray&>(_sourcedField[cells]);
92 
93  TArray& sourcecCell =
94  dynamic_cast<TArray&>(_sourcecField[cells]);
95 
96  TArray& sourcepCell =
97  dynamic_cast<TArray&>(_sourcepField[cells]);
98 
99 
100 
101 
102  TArray& rCell =
103  dynamic_cast<XArray&>(rField[cVarIndex]);
104 
105 
106  const int nCells = cells.getCount();
107  const TArray& cellVolume = dynamic_cast<const TArray&>(_geomFields.volume[cells]);
108 
109  CCMatrix& matrix = dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(cVarIndex,cVarIndex));
110 
111  DiagArray& diag = matrix.getDiag();
112  T_Scalar two(2.0);
113  T_Scalar C1mu = _options.c1mu;
114  T_Scalar C2mu = _options.c2mu;
115  for(int n=0; n<nCells; n++)
116  {
117  const VGradType& vg = vGrad[n];
118  VGradType vgSquare = vGrad[n];
119  T_Scalar sourcecoeff1 = (muCell[n]*eCell[n]*C1mu)/kCell[n];
120  T_Scalar sourcecoeff2 = (C2mu*pow(eCell[n],two)*rhoCell[n])/kCell[n];
121  T_Scalar dsc1 = (muCell[n]*C1mu)/kCell[n];
122  T_Scalar dsc2 = (C2mu*2*eCell[n]*rhoCell[n])/kCell[n];
123 
124  T_Scalar sum = 0;
125 
126  for(int i=0;i<3;i++)
127  {
128  for(int j=0;j<3;j++)
129  {
130  T_Scalar x = vg[i][j]*vg[i][j]+vg[i][j]*vg[j][i] ;
131  sum += x;
132  //vgSquare[i][j] = vg[i][j]*vg[i][j]+vg[i][j]*vg[j][i] ;
133  // sum += vgSquare[i][j];
134 
135  }
136  }
137 
138  sourceCell[n] = sum*sourcecoeff1-sourcecoeff2;
139  T_Scalar ds = sum*dsc1-dsc2;
140 
141  sourcecCell[n] = sourceCell[n]- ds*eCell[n];
142  sourcepCell[n] = ds;
143  rCell[n] +=sourcecCell[n]*cellVolume[n];
144  diag[n] -=cellVolume[n]*sourcepCell[n];
145 
146  }
147 
148 }
149 
150 private:
163 };
164 
165 #endif
166 
KeModelOptions< T_Scalar > _options
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
KeModelOptions< T_Scalar > & getOptions()
Definition: Field.h:14
CCMatrix::PairWiseAssembler CCAssembler
Definition: Mesh.h:49
void discretize(const Mesh &mesh, MultiFieldMatrix &mfmatrix, MultiField &xField, MultiField &rField)
Array< Diag > & getDiag()
Definition: CRMatrix.h:856
NumTypeTraits< X >::T_Scalar T_Scalar
CRMatrix< Diag, OffDiag, X > CCMatrix
SourceDiscretizationdissi(const MeshList &meshes, const GeomFields &geomFields, Field &varField, const Field &velocityField, Field &muField, Field &energyField, Field &densityField, Field &sourcedField, Field &sourcecField, Field &sourcepField, const Field &gradientField)
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
const StorageSite & getCells() const
Definition: Mesh.h:109
Field volume
Definition: GeomFields.h:26
double c2mu
Definition: KeBC.h:66
double c1mu
Definition: KeBC.h:67
Definition: Array.h:14
Array< Gradient< VectorT3 > > VGradArray
int getCount() const
Definition: StorageSite.h:39
vector< Mesh * > MeshList
Definition: Mesh.h:439