Memosa-FVM  0.2
Underrelaxer.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 _UNDERRELAXER_H_
6 #define _UNDERRELAXER_H_
7 
8 #include "CRMatrix.h"
9 #include "Field.h"
10 #include "MultiField.h"
11 #include "MultiFieldMatrix.h"
12 #include "Mesh.h"
13 #include "Discretization.h"
14 #include "StorageSite.h"
15 
16 
17 template<class X, class Diag, class OffDiag>
19 {
20 public:
21 
23 
25  typedef typename CCMatrix::DiagArray DiagArray;
26 
27 
28  typedef Array<X> XArray;
30 
31  Underrelaxer(const MeshList& meshes,
32  Field& varField,
33  const T_Scalar urf) :
34  Discretization(meshes),
35  _varField(varField),
36  _urf(urf)
37  {}
38 
39  void discretize(const Mesh& mesh, MultiFieldMatrix& mfmatrix,
41  {
42  const StorageSite& cells = mesh.getCells();
43 
44  const MultiField::ArrayIndex cIndex(&_varField,&cells);
45  CCMatrix& matrix = dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(cIndex,cIndex));
46  DiagArray& diag = matrix.getDiag();
47  const int nCells = cells.getSelfCount();
48 
49  for(int c=0; c<nCells; c++)
50  {
51  diag[c] /= _urf;
52  }
53  }
54 private:
55  const Field& _varField;
56  const T_Scalar _urf;
57 };
58 
59 #endif
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
int getSelfCount() const
Definition: StorageSite.h:40
Underrelaxer(const MeshList &meshes, Field &varField, const T_Scalar urf)
Definition: Underrelaxer.h:31
Definition: Field.h:14
CRMatrix< Diag, OffDiag, X > CCMatrix
Definition: Underrelaxer.h:24
Definition: Mesh.h:49
Array< Diag > & getDiag()
Definition: CRMatrix.h:856
void discretize(const Mesh &mesh, MultiFieldMatrix &mfmatrix, MultiField &, MultiField &)
Definition: Underrelaxer.h:39
Array< X > XArray
Definition: Underrelaxer.h:28
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
NumTypeTraits< X >::T_Scalar T_Scalar
Definition: Underrelaxer.h:22
CCMatrix::DiagArray DiagArray
Definition: Underrelaxer.h:25
const StorageSite & getCells() const
Definition: Mesh.h:109
Array< T_Scalar > TArray
Definition: Underrelaxer.h:29
const Field & _varField
Definition: Underrelaxer.h:55
vector< Mesh * > MeshList
Definition: Mesh.h:439
const T_Scalar _urf
Definition: Underrelaxer.h:56