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

#include <IbmDiscretization.h>

Inheritance diagram for IbmDiscretization< X, Diag, OffDiag >:
Collaboration diagram for IbmDiscretization< X, Diag, OffDiag >:

Public Types

typedef NumTypeTraits< X >
::T_Scalar 
T_Scalar
 
typedef CRMatrix< Diag,
OffDiag, X > 
CCMatrix
 
typedef CCMatrix::DiagArray DiagArray
 
typedef CCMatrix::OffDiagArray OffDiagArray
 
typedef Array< X > XArray
 
typedef Array< T_ScalarTArray
 
typedef Vector< T_Scalar, 3 > VectorT3
 
typedef Array< VectorT3VectorT3Array
 

Public Member Functions

 IbmDiscretization (const MeshList &meshes, const GeomFields &geomFields, FlowFields &flowFields)
 
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

FlowFields_flowFields
 
const GeomFields_geomFields
 

Additional Inherited Members

- Protected Attributes inherited from Discretization
const MeshList_meshes
 

Detailed Description

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

Definition at line 28 of file IbmDiscretization.h.

Member Typedef Documentation

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

Definition at line 34 of file IbmDiscretization.h.

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

Definition at line 35 of file IbmDiscretization.h.

template<class X , class Diag , class OffDiag >
typedef CCMatrix::OffDiagArray IbmDiscretization< X, Diag, OffDiag >::OffDiagArray

Definition at line 36 of file IbmDiscretization.h.

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

Definition at line 32 of file IbmDiscretization.h.

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

Definition at line 39 of file IbmDiscretization.h.

template<class X , class Diag , class OffDiag >
typedef Vector<T_Scalar,3> IbmDiscretization< X, Diag, OffDiag >::VectorT3

Definition at line 40 of file IbmDiscretization.h.

template<class X , class Diag , class OffDiag >
typedef Array<VectorT3> IbmDiscretization< X, Diag, OffDiag >::VectorT3Array

Definition at line 41 of file IbmDiscretization.h.

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

Definition at line 38 of file IbmDiscretization.h.

Constructor & Destructor Documentation

template<class X , class Diag , class OffDiag >
IbmDiscretization< X, Diag, OffDiag >::IbmDiscretization ( const MeshList meshes,
const GeomFields geomFields,
FlowFields flowFields 
)
inline

Definition at line 43 of file IbmDiscretization.h.

45  :
46  Discretization(meshes),
47  _geomFields(geomFields),
48  _flowFields(flowFields)
49 {}
Discretization(const MeshList &meshes)
const GeomFields & _geomFields
FlowFields & _flowFields

Member Function Documentation

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

Implements Discretization.

Definition at line 51 of file IbmDiscretization.h.

References IbmDiscretization< X, Diag, OffDiag >::_flowFields, IbmDiscretization< X, Diag, OffDiag >::_geomFields, GeomFields::coordinate, Mesh::getCells(), CRConnectivity::getCol(), CRMatrix< T_Diag, T_OffDiag, X >::getConnectivity(), CRMatrix< T_Diag, T_OffDiag, X >::getDiag(), MultiFieldMatrix::getMatrix(), CRMatrix< T_Diag, T_OffDiag, X >::getOffDiag(), CRConnectivity::getRow(), StorageSite::getSelfCount(), and FlowFields::velocity.

53  {
54  const StorageSite& cells = mesh.getCells();
55 
56  const MultiField::ArrayIndex vIndex(&_flowFields.velocity,&cells);
57  CCMatrix& matrix = dynamic_cast<CCMatrix&>(mfmatrix.getMatrix(vIndex,vIndex));
58  DiagArray& diag = matrix.getDiag();
59  OffDiagArray& offdiag = matrix.getOffDiag();
60 
61  const CRConnectivity& conn=matrix.getConnectivity();
62  const Array<int>& row=conn.getRow();
63  const Array<int>& col=conn.getCol();
64  const VectorT3Array& cellCentroid = dynamic_cast<const VectorT3Array&> (_geomFields.coordinate[cells]);
65  VectorT3Array& cellVelocity = dynamic_cast<VectorT3Array&> (_flowFields.velocity[cells]);
66  const XArray& xCell = dynamic_cast<const XArray&>(xField[vIndex]);
67  XArray& rCell = dynamic_cast<XArray&>(rField[vIndex]);
68 
69  const int nCells = cells.getSelfCount();
70  const VectorT3 zeroVelocity(NumTypeTraits<VectorT3>::getZero());
71  VectorT3 dR; //local variable dR=r[c]-r[j]
72  //set up solid cell veloicty to be solidVelocity
73  //ofstream fp1, fp2;
74  //fp1.open ("/home/linsun/Work/prism/app-memosa/src/fvm/test/ibm_velocity");
75  //fp2.open ("/home/linsun/Work/prism/app-memosa/src/fvm/test/solid_velocity");
76 
77  // fp=fopen("/home/linsun/Work/prism/app-memosa/src/fvm/test/ibm_velocity","w");
78  for (int c=0; c<nCells; c++)
79  {
81  int cellIBType = mesh.getIBTypeForCell(c);
82  if (cellIBType == 2) //solid cells
83  {
84  //cout << "cellID" << c << "velocity" << _flowFields.velocity << endl;
85  //printf("cellID = %i and velocity is %f\t%f\t%f\n", c,cellVelocity[c][0],cellVelocity[c][1],cellVelocity[c][2]);
86  diag[c] = (-1); //ap=(-1)
87  //diag[c] = NumTypeTraits<Diag>::getNegativeUnity;
88  cellVelocity[c]=zeroVelocity; //Cell velocity is set as prescribed
89  for (int nbpos=row[c]; nbpos<row[c+1]; nbpos++){
90  //const int j=col[nbpos];
91  offdiag[nbpos]=0; //anb=0
92  //offdiag[nbpos] = NumTypeTraits<offDiag>::getZero;
93  }
94  rCell[c]=0; //residual is zero
95  //rCell[c]= NumTypeTraits<VectorT3>::getZero;
96  //fprintf(fp, "%i\t%f\t%f\t%f\n", c,cellVelocity[c][0],cellVelocity[c][1],cellVelocity[c][2]);
97  //fp2 << c << cellVelocity[c] << endl;
98 
99  }
100  //fclose(fp);
101 
102 
103  #if 1
104  else if (cellIBType == 1) //immersed boundary cells
105  {
106  //cout << "cellID" << c << "velocity" << _flowFields.velocity\n;
107  diag[c] = (-1); //aP=-1
108  //diag[c] = NumTypeTraits<Diag>::getNegativeUnity;
109  double sumCellDist=0;
110  //offdiag[nb]=alfa[nb] (distance weight function)
111  //r=-v[c]+sum(alfa[nb]*v[nb])
112  /*
113  for (int nbpos=row[c]; nbpos<row[c+1]; nbpos++){
114  const int j=col[nbpos];
115  dR=cellCentroid[c]-cellCentroid[j];
116  offdiag[nbpos]=1./mag(dR);
117  sumCellDist+=offdiag[nbpos];
118  }
119  */
120 
121  for (int nbpos=row[c]; nbpos<row[c+1]; nbpos++){
122  //offdiag[nbpos]/=sumCellDist;
123  const int j=col[nbpos];
124  offdiag[nbpos]=1.0/(row[c+1]-row[c]);
125  rCell[c]-=offdiag[nbpos]*cellVelocity[j];
126  }
127  rCell[c]+=cellVelocity[c];
128  //fp1 << c << cellVelocity[c] << endl;
129 
130  }
131  #endif
132  }
133  //fp1.close();
134  //fp2.close();
135  }
const Array< int > & getCol() const
const Array< int > & getRow() const
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
int getSelfCount() const
Definition: StorageSite.h:40
Field coordinate
Definition: GeomFields.h:19
CRMatrix< Diag, OffDiag, X > CCMatrix
CCMatrix::OffDiagArray OffDiagArray
const GeomFields & _geomFields
FlowFields & _flowFields
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
const StorageSite & getCells() const
Definition: Mesh.h:109
Field velocity
Definition: FlowFields.h:15
CCMatrix::DiagArray DiagArray

Member Data Documentation

template<class X , class Diag , class OffDiag >
FlowFields& IbmDiscretization< X, Diag, OffDiag >::_flowFields
private
template<class X , class Diag , class OffDiag >
const GeomFields& IbmDiscretization< X, Diag, OffDiag >::_geomFields
private

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