Memosa-FVM  0.2
CollisionTermDiscretization.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 _COLLISIONTERMDISCRETIZATION_H_
6 #define _COLLISIONTERMDISCRETIZATION_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 "CRMatrixRect.h"
16 #include "CRMatrix.h"
17 
18 template<class X,class Diag, class OffDiag>
20 {
21 public:
22 
24 
26  typedef typename CCMatrix::DiagArray DiagArray;
28 
29  typedef Array<X> XArray;
31 
33  const GeomFields& geomFields,
34  const Field& varField,
35  const Field& sourceField,
36  const Field& collisionFrequency) :
37  Discretization(meshes),
38  _geomFields(geomFields),
39  _varField(varField),
40  _sourceField(sourceField),
41  _collisionFrequency(collisionFrequency)
42  {}
43 
44 
45  void discretize(const Mesh& mesh, MultiFieldMatrix& mfmatrix,
46  MultiField&, MultiField& rField)
47  {
48  const StorageSite& cells = mesh.getCells();
49 
50  const TArray& cellVolume = dynamic_cast<const TArray&>(_geomFields.volume[cells]);
51 
52  const XArray& source = dynamic_cast<const XArray&>(_sourceField[cells]);
53 
54  const MultiField::ArrayIndex cVarIndex(&_varField, &cells);
55  CCMatrix& matrix = dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(cVarIndex,cVarIndex));
56  DiagArray& diag = matrix.getDiag();
57 
58  const XArray& x = dynamic_cast<const XArray&>(_varField[cells]);
59  TArray& rCell = dynamic_cast<TArray&>(rField[cVarIndex]);
60 
61  const XArray& nue = dynamic_cast<const XArray&>(_collisionFrequency[cells]);
62  const int nCells = cells.getSelfCount(); //getSelfCount()
63 
64  //cout << nue[0] << " " << nue[100] << " " << nue[50] << endl ;
65  for(int c=0; c<nCells; c++)
66  {
67  rCell[c] -= cellVolume[c]*nue[c]*(x[c]-source[c]);
68  diag[c]-=cellVolume[c]*nue[c];
69  }
70 
71  }
72 
73 
74 private:
76  const Field& _varField;
79 };
80 
81 #endif
82 
83 
84 
85 
86 
87 
88 
89 
90 
CRMatrix< Diag, OffDiag, X > CCMatrix
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
int getSelfCount() const
Definition: StorageSite.h:40
void discretize(const Mesh &mesh, MultiFieldMatrix &mfmatrix, MultiField &, MultiField &rField)
Definition: Field.h:14
NumTypeTraits< X >::T_Scalar T_Scalar
Definition: Mesh.h:49
CCMatrix::PairWiseAssembler CCAssembler
Array< Diag > & getDiag()
Definition: CRMatrix.h:856
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
CollisionTermDiscretization(const MeshList &meshes, const GeomFields &geomFields, const Field &varField, const Field &sourceField, const Field &collisionFrequency)
const StorageSite & getCells() const
Definition: Mesh.h:109
Field volume
Definition: GeomFields.h:26
vector< Mesh * > MeshList
Definition: Mesh.h:439