Memosa-FVM  0.2
SourceDiscretizationforFracture.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 _SOURCEDISCRETIZATIONFORFRACTURE_H_
6 #define _SOURCEDISCRETIZATIONFORFRACTURE_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 "Vector.h"
17 
18 template<class T, class Diag, class OffDiag>
20 {
21 public:
22 
23  //typedef typename NumTypeTraits<X>::T_Scalar T_Scalar;
24 
25  //typedef Array<X> XArray;
26 
27  typedef Array<T> TArray;
28 
30 
32 
33  typedef typename CCMatrix::DiagArray DiagArray;
34 
36  const GeomFields& geomFields,
37  const Field& varField,
38  const Field& sourceField,
39  const Field& sourcecoefField) :
40  Discretization(meshes),
41  _geomFields(geomFields),
42  _varField(varField),
43  _sourceField(sourceField),
44  _sourcecoefField(sourcecoefField)
45  {}
46 
47 
48  void discretize(const Mesh& mesh, MultiFieldMatrix& mfmatrix,
49  MultiField&, MultiField& rField)
50  {
51  const StorageSite& cells = mesh.getCells();
52 
53  const TArray& cellVolume = dynamic_cast<const TArray&>(_geomFields.volume[cells]);
54 
55  const TArray& source = dynamic_cast<const TArray&>(_sourceField[cells]);
56 
57  const TArray& sourcecoef = dynamic_cast<const TArray&>(_sourcecoefField[cells]);
58 
59  const MultiField::ArrayIndex cVarIndex(&_varField, &cells);
60 
61  TArray& rCell = dynamic_cast<TArray&>(rField[cVarIndex]);
62 
63  const int nCells = cells.getSelfCount();
64 
65  CCMatrix& matrix = dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(cVarIndex,cVarIndex));
66 
67  DiagArray& diag = matrix.getDiag();
68 
69  for(int c=0; c<nCells; c++)
70  {
71  rCell[c] += cellVolume[c]*(1.0+source[c]);
72  diag[c] += cellVolume[c]*sourcecoef[c];
73 
74  //if (c >= 400){
75  //cout << c << ": " << cellVolume[c] << " " << diag[c] << "\n" << endl;}
76  }
77  }
78 
79 
80 private:
82  const Field& _varField;
85 };
86 
87 #endif
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
int getSelfCount() const
Definition: StorageSite.h:40
Definition: Field.h:14
Definition: Mesh.h:49
Array< Diag > & getDiag()
Definition: CRMatrix.h:856
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
void discretize(const Mesh &mesh, MultiFieldMatrix &mfmatrix, MultiField &, MultiField &rField)
const StorageSite & getCells() const
Definition: Mesh.h:109
Field volume
Definition: GeomFields.h:26
SourceDiscretizationforFracture(const MeshList &meshes, const GeomFields &geomFields, const Field &varField, const Field &sourceField, const Field &sourcecoefField)
Definition: Array.h:14
vector< Mesh * > MeshList
Definition: Mesh.h:439