Memosa-FVM  0.2
DistFunctFields< T > Class Template Reference

#include <DistFunctFields.h>

Inheritance diagram for DistFunctFields< T >:

Public Types

typedef Array< T > TArray
 
typedef Vector< T, 3 > VectorT3
 
typedef Array< VectorT3VectorT3Array
 

Public Member Functions

 DistFunctFields (const MeshList &meshes, const MacroFields &macroPr, const Quadrature< T > &quad, const string dsfname)
 
 DistFunctFields (const MeshList &meshes, const Quadrature< T > &quad, const string dsfname)
 
void initializeMaxwellian (const MacroFields &macroPr, DistFunctFields< T > &dsfPtr)
 
void weightedMaxwellian (DistFunctFields< T > &dsfPtr)
 
void OutputDistributionFunction (DistFunctFields< T > &dsfPtr)
 
const FieldgetField (int indx) const
 

Public Attributes

std::vector< Field * > dsf
 

Private Attributes

const MeshList _meshes
 
const Quadrature< T > _quadrature
 

Detailed Description

template<class T>
class DistFunctFields< T >

Class DistFunctFields for Distribution function in ESBGK simulations A collection of distribution function fields in all N123 directions velocity quadrature points defined in quadrature.h

Definition at line 28 of file DistFunctFields.h.

Member Typedef Documentation

template<class T>
typedef Array<T> DistFunctFields< T >::TArray

Definition at line 31 of file DistFunctFields.h.

template<class T>
typedef Vector<T,3> DistFunctFields< T >::VectorT3

Definition at line 32 of file DistFunctFields.h.

template<class T>
typedef Array<VectorT3> DistFunctFields< T >::VectorT3Array

Definition at line 33 of file DistFunctFields.h.

Constructor & Destructor Documentation

template<class T>
DistFunctFields< T >::DistFunctFields ( const MeshList meshes,
const MacroFields macroPr,
const Quadrature< T > &  quad,
const string  dsfname 
)
inline

Maxwellian Distribution - sets one direction as one field ix, iy - spatial location j - discrete velocity ordinate f[ix][iy][j]=Rho[ix][iy]/pow((pi*Temp[ix][iy]),1.5)* exp(-((pow(cx[j]-xVel[ix][iy]),2.0) +pow((cy[j]-yVel[ix][iy]),2.0)+pow(cz[j],2.0))/Temp[ix][iy])

Parameters
mesh- spatial mesh with cells,faces
macroPr- Fields of macroparameters such as density, temperature, velocity, pressure, viscosity
quad- velocity quadrature with abscissa and weights

integer N123 total number of velocity directions.

Definition at line 52 of file DistFunctFields.h.

52  :
53  _meshes(meshes),
54  _quadrature(quad)
55  {
60  const int numFields = _quadrature.getDirCount();
61  for(int n=0; n<numFields; n++)
62  {
63  stringstream ss;
64  ss << n;
65  string fieldName = dsfname + ss.str();
66  dsf.push_back(new Field(fieldName));
67  }
68  const int numMeshes = _meshes.size();
69  for (int n=0; n<numMeshes; n++)
70  {
71  const Mesh& mesh = *_meshes[n];
72  const StorageSite& cells = mesh.getCells();
73  const int nCells = cells.getCountLevel1();
74  double pi(3.14159);
75 
76  const TArray& density = dynamic_cast<const TArray&>(macroPr.density[cells]);
77  const TArray& temperature = dynamic_cast<const TArray&>(macroPr.temperature[cells]);
78  const VectorT3Array& v = dynamic_cast<const VectorT3Array&>(macroPr.velocity[cells]);
79 
80 
81  const TArray& cx = dynamic_cast<const TArray&>(*_quadrature.cxPtr);
82  const TArray& cy = dynamic_cast<const TArray&>(*_quadrature.cyPtr);
83  const TArray& cz = dynamic_cast<const TArray&>(*_quadrature.czPtr);
84 
85  /*
86  TArray* distfunAPtr;
87  distfunAPtr=new TArray(nCells);
88  TArray & distfunA= *distfunAPtr;
89  */
90 
91  for(int j=0;j<numFields;j++){
92  Field& fnd= *dsf[j];
93 
94  shared_ptr<TArray> fcPtr(new TArray(cells.getCountLevel1()));
95 
96  fnd.addArray(cells,fcPtr);
97 
98  //TArray& fc = dynamic_cast<TArray&>(fnd[cells]);
99  TArray& fc = *fcPtr;
100  for(int c=0; c<nCells;c++) {
101  fc[c]=density[c]/pow((pi*temperature[c]),1.5)*
102  exp(-(pow((cx[j]-v[c][0]),2.0)+pow((cy[j]-v[c][1]),2.0)+
103  pow((cz[j]-v[c][2]),2.0))/temperature[c]);
104  }
105 
106  }
107  }
108  }
const Quadrature< T > _quadrature
Definition: Field.h:14
Definition: Mesh.h:49
Field temperature
Definition: MacroFields.h:22
const StorageSite & getCells() const
Definition: Mesh.h:109
const MeshList _meshes
int getCountLevel1() const
Definition: StorageSite.h:72
void addArray(const StorageSite &, shared_ptr< ArrayBase > a)
Definition: Field.cpp:72
Array< T > TArray
Field velocity
Definition: MacroFields.h:15
std::vector< Field * > dsf
Field density
Definition: MacroFields.h:21
template<class T>
DistFunctFields< T >::DistFunctFields ( const MeshList meshes,
const Quadrature< T > &  quad,
const string  dsfname 
)
inline

integer N123 total number of velocity directions.

Definition at line 110 of file DistFunctFields.h.

110  :
111  _meshes(meshes),
112  _quadrature(quad)
113  {
114  //FILE * pFile;
115  //pFile=fopen("distfun.txt","w");
120  const int numFields = _quadrature.getDirCount();
121  for(int j=0; j<numFields; j++)
122  {
123  stringstream ss;
124  ss << j;
125  string fieldName = dsfname + ss.str();
126  dsf.push_back(new Field(fieldName));
127  }
128  const int numMeshes = _meshes.size();
129  for (int n=0; n<numMeshes; n++)
130  {
131  const Mesh& mesh = *_meshes[n];
132  const StorageSite& cells = mesh.getCells();
133  const int nCells = cells.getCountLevel1();
134 
135  double pi(3.14159);
136 
137  const TArray& cx = dynamic_cast<const TArray&>(*_quadrature.cxPtr);
138  const TArray& cy = dynamic_cast<const TArray&>(*_quadrature.cyPtr);
139  const TArray& cz = dynamic_cast<const TArray&>(*_quadrature.czPtr);
140  //const TArray& dcxyz = dynamic_cast<const TArray&>(*_quadrature.dcxyzPtr);
141  for(int j=0;j<numFields;j++){
142  Field& fnd= *dsf[j];
143  shared_ptr<TArray> fcPtr(new TArray(cells.getCountLevel1()));
144 
145  fnd.addArray(cells,fcPtr);
146 
147  TArray& fc = dynamic_cast<TArray&>(fnd[cells]);
148  //TArray& fc = *fcPtr;
149 
150  for(int c=0; c<nCells;c++){
151  fc[c]=1./pow(pi*1.0,1.5)*exp(-(pow((cx[j]-1.0),2.0)+pow((cy[j]-0.0),2.0)+ pow((cz[j]-0.0),2.0))/1.0);
152 
153  }
154  //fprintf(pFile,"%12.6f %12.6f %12.6f %12.6f %E \n",cx[j],cy[j],cz[j],dcxyz[j],fc[0]);
155  }
156 
157  }
158  //fclose(pFile);
159  }
const Quadrature< T > _quadrature
Definition: Field.h:14
Definition: Mesh.h:49
const StorageSite & getCells() const
Definition: Mesh.h:109
const MeshList _meshes
int getCountLevel1() const
Definition: StorageSite.h:72
void addArray(const StorageSite &, shared_ptr< ArrayBase > a)
Definition: Field.cpp:72
Array< T > TArray
std::vector< Field * > dsf

Member Function Documentation

template<class T>
const Field& DistFunctFields< T >::getField ( int  indx) const
inline

Definition at line 246 of file DistFunctFields.h.

246  {
247  return *dsf[indx];
248  }
std::vector< Field * > dsf
template<class T>
void DistFunctFields< T >::initializeMaxwellian ( const MacroFields macroPr,
DistFunctFields< T > &  dsfPtr 
)
inline

Definition at line 162 of file DistFunctFields.h.

163  {
164  const int numMeshes = _meshes.size();
165  for (int n=0; n<numMeshes; n++)
166  {
167  const Mesh& mesh = *_meshes[n];
168  const StorageSite& cells = mesh.getCells();
169  const int nCells = cells.getCountLevel1();
170  double pi(3.14159);
171 
172  const TArray& density = dynamic_cast<const TArray&>(macroPr.density[cells]);
173  const TArray& temperature = dynamic_cast<const TArray&>(macroPr.temperature[cells]);
174  const VectorT3Array& v = dynamic_cast<const VectorT3Array&>(macroPr.velocity[cells]);
175 
176  const TArray& cx = dynamic_cast<const TArray&>(*_quadrature.cxPtr);
177  const TArray& cy = dynamic_cast<const TArray&>(*_quadrature.cyPtr);
178  const TArray& cz = dynamic_cast<const TArray&>(*_quadrature.czPtr);
179  const int numFields= _quadrature.getDirCount();
180 
181  for(int j=0;j< numFields;j++){
182  Field& fnd = *dsfPtr.dsf[j];
183  TArray& f = dynamic_cast< TArray&>(fnd[cells]);
184  for(int c=0; c<nCells;c++){
185  f[c]=density[c]/pow((pi*temperature[c]),1.5)*
186  exp(-(pow((cx[j]-v[c][0]),2.0)+pow((cy[j]-v[c][1]),2.0)+
187  pow((cz[j]-v[c][2]),2.0))/temperature[c]);
188  }
189 
190  }
191  }
192  }
const Quadrature< T > _quadrature
Definition: Field.h:14
Definition: Mesh.h:49
Field temperature
Definition: MacroFields.h:22
const StorageSite & getCells() const
Definition: Mesh.h:109
const MeshList _meshes
int getCountLevel1() const
Definition: StorageSite.h:72
Array< T > TArray
Field velocity
Definition: MacroFields.h:15
std::vector< Field * > dsf
Field density
Definition: MacroFields.h:21
template<class T>
void DistFunctFields< T >::OutputDistributionFunction ( DistFunctFields< T > &  dsfPtr)
inline

Definition at line 219 of file DistFunctFields.h.

220  {
221  FILE * pFile;
222  pFile = fopen("outputf0.plt","w");
223  int N1=_quadrature.getNVCount();
224  int N2=_quadrature.getNthetaCount();
225  int N3=_quadrature.getNphiCount();
226  fprintf(pFile,"%s \n", "VARIABLES= 'cx', 'cy', 'cz', 'f',");
227  fprintf(pFile, "%s %i %s %i %s %i \n","ZONE I=", N3,",J=",N2,"K=",N1);
228  fprintf(pFile,"%s\n","F=POINT");
229  const int numMeshes = _meshes.size();
230  for (int n=0; n<numMeshes; n++){
231  const TArray& cx = dynamic_cast<const TArray&>(*_quadrature.cxPtr);
232  const TArray& cy = dynamic_cast<const TArray&>(*_quadrature.cyPtr);
233  const TArray& cz = dynamic_cast<const TArray&>(*_quadrature.czPtr);
234  const int numFields= _quadrature.getDirCount();
235 
236  const Mesh& mesh = *_meshes[n];
237  const StorageSite& cells = mesh.getCells();
238  for(int j=0;j< numFields;j++){
239  Field& fnd = *dsfPtr.dsf[j];
240  TArray& f = dynamic_cast< TArray&>(fnd[cells]);
241  fprintf(pFile,"%E %E %E %E\n",cx[j],cy[j],cz[j],f[0]);
242  }
243  }
244  }
const Quadrature< T > _quadrature
Definition: Field.h:14
Definition: Mesh.h:49
const StorageSite & getCells() const
Definition: Mesh.h:109
const MeshList _meshes
Array< T > TArray
std::vector< Field * > dsf
template<class T>
void DistFunctFields< T >::weightedMaxwellian ( DistFunctFields< T > &  dsfPtr)
inline

Definition at line 193 of file DistFunctFields.h.

194  {
195  const int numMeshes = _meshes.size();
196  for (int n=0; n<numMeshes; n++)
197  {
198  const Mesh& mesh = *_meshes[n];
199  const StorageSite& cells = mesh.getCells();
200  const int nCells = cells.getCountLevel1();
201  double pi(3.14159);
202 
203  const TArray& cx = dynamic_cast<const TArray&>(*_quadrature.cxPtr);
204  const TArray& cy = dynamic_cast<const TArray&>(*_quadrature.cyPtr);
205  const TArray& cz = dynamic_cast<const TArray&>(*_quadrature.czPtr);
206  const int numFields= _quadrature.getDirCount();
207 
208  for(int j=0;j< numFields;j++){
209  Field& fnd = *dsfPtr.dsf[j];
210  TArray& f = dynamic_cast< TArray&>(fnd[cells]);
211  for(int c=0; c<nCells;c++){
212  f[c]=0.5*1.0/pow((pi*1.0),1.5)*exp(-(pow((cx[j]-4.0),2.0)+pow((cy[j]-0.0),2.0)+pow((cz[j]-0.0),2.0))/1.0)
213  +0.5*1.0/pow((pi*1.0),1.5)*exp(-(pow((cx[j]-4.0),2.0)+pow((cy[j]-0.0),2.0)+pow((cz[j]-0.0),2.0))/1.0);
214  }
215  }
216  }
217  }
const Quadrature< T > _quadrature
Definition: Field.h:14
Definition: Mesh.h:49
const StorageSite & getCells() const
Definition: Mesh.h:109
const MeshList _meshes
int getCountLevel1() const
Definition: StorageSite.h:72
Array< T > TArray
std::vector< Field * > dsf

Member Data Documentation

template<class T>
std::vector<Field*> DistFunctFields< T >::dsf

Definition at line 36 of file DistFunctFields.h.

Referenced by KineticBoundaryConditions< X, Diag, OffDiag >::applyDiffuseWallBC(), KineticBoundaryConditions< X, Diag, OffDiag >::applyInletBC(), COMETBoundaryConditions< X, Diag, OffDiag >::applyNSInterfaceBC(), KineticBoundaryConditions< X, Diag, OffDiag >::applyNSInterfaceBC(), COMETBoundaryConditions< X, Diag, OffDiag >::applyPressureInletBC(), KineticBoundaryConditions< X, Diag, OffDiag >::applyPressureInletBC(), COMETBoundaryConditions< X, Diag, OffDiag >::applyPressureOutletBC(), KineticBoundaryConditions< X, Diag, OffDiag >::applyPressureOutletBC(), KineticBoundaryConditions< X, Diag, OffDiag >::applyRealWallBC(), COMETBoundaryConditions< X, Diag, OffDiag >::applyRealWallBC(), KineticBoundaryConditions< X, Diag, OffDiag >::applySpecularWallBC(), KineticBoundaryConditions< X, Diag, OffDiag >::applySpecularWallBC_Cartesian(), KineticBoundaryConditions< X, Diag, OffDiag >::applyZeroGradientBC(), COMETBoundaryConditions< X, Diag, OffDiag >::applyZeroGradientBC(), COMETESBGKDiscretizer< T >::COMETConvection(), COMETESBGKDiscretizer< T >::COMETConvectionFine(), COMETESBGKDiscretizer< T >::COMETESBGKDiscretizer(), COMETESBGKDiscretizer< T >::COMETUnsteady(), COMETModel< T >::correctSolution(), DistFunctFields< X >::DistFunctFields(), DistFunctFields< X >::getField(), DistFunctFields< X >::initializeMaxwellian(), COMETModel< T >::injectResid(), COMETModel< T >::MakeIBCoarseModel(), DistFunctFields< X >::OutputDistributionFunction(), and DistFunctFields< X >::weightedMaxwellian().


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