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

#include <COMETBoundaryConditions.h>

Collaboration diagram for COMETBoundaryConditions< X, Diag, OffDiag >:

Public Types

typedef NumTypeTraits< X >
::T_Scalar 
T_Scalar
 
typedef Array< int > IntArray
 
typedef Array< T_ScalarTArray
 
typedef Vector< T_Scalar, 3 > VectorT3
 
typedef Array< VectorT3VectorT3Array
 
typedef Array< X > XArray
 
typedef Vector< X, 3 > VectorX3
 
typedef Array< VectorX3VectorX3Array
 
typedef StressTensor< X > StressTensorX6
 
typedef Array< StressTensorX6StressTensorArray
 
typedef Gradient< T_ScalarGradType
 
typedef Array< GradTypeGradArray
 
typedef GradientModel< T_ScalarGradModelType
 
typedef
GradModelType::GradMatrixType 
GradMatrix
 

Public Member Functions

 COMETBoundaryConditions (const StorageSite &faces, const Mesh &mesh, const GeomFields &geomFields, const Quadrature< X > &quadrature, MacroFields &macroFields, DistFunctFields< X > &dsfPtr)
 
COMETModelOptions< X > & getOptions ()
 
void applyPressureInletBC (int f, const X &inletTemperature, const X &inletPressure, GradMatrix &gMat) const
 
void applyPressureInletBC (const FloatValEvaluator< X > &bTemperature, const FloatValEvaluator< X > &bPresssure) const
 
void applyPressureOutletBC (int f, const X &outletTemperature, const X &outletPressure) const
 
void applyPressureOutletBC (const X &bTemperature, const X &bPressure) const
 
void applyPressureOutletBC (const FloatValEvaluator< X > &bTemperature, const FloatValEvaluator< X > &bPresssure) const
 
void applyRealWallBC (int f, const VectorX3 &WallVelocity, const X &WallTemperature, const X &accommodationCoefficient, const vector< int > &vecReflection, GradMatrix &gMat) const
 
void applyRealWallBC (const VectorX3 &bVelocity, const X &bTemperature, const X &accomCoeff, const vector< int > &vecReflection) const
 
void applyRealWallBC (const FloatValEvaluator< VectorX3 > &bVelocity, const FloatValEvaluator< X > &bTemperature, const FloatValEvaluator< X > &accomCoeff, const vector< int > &vecReflection) const
 
void applyZeroGradientBC (int f, GradMatrix &gMat) const
 
void applyZeroGradientBC () const
 
void applyNSInterfaceBC () const
 
void applyNSInterfaceBC (int f) const
 

Protected Attributes

const StorageSite_faces
 
const StorageSite_allFaces
 
const Mesh_mesh
 
const GeomFields_geomFields
 
const StorageSite_cells
 
const CRConnectivity_cellFaces
 
const Array< int > & _ibType
 
const Quadrature< X > & _quadrature
 
MacroFields_macroFields
 
const DistFunctFields< X > & _dsfPtr
 
const CRConnectivity_faceCells
 
const CRConnectivity_allFaceCells
 
const CRConnectivity_cellCells
 
const Field_areaMagField
 
const TArray_faceAreaMag
 
const Field_areaField
 
const VectorT3Array_faceArea
 
COMETModelOptions< X > _options
 

Detailed Description

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

Definition at line 27 of file COMETBoundaryConditions.h.

Member Typedef Documentation

template<class X, class Diag, class OffDiag>
typedef Array<GradType> COMETBoundaryConditions< X, Diag, OffDiag >::GradArray

Definition at line 45 of file COMETBoundaryConditions.h.

template<class X, class Diag, class OffDiag>
typedef GradModelType::GradMatrixType COMETBoundaryConditions< X, Diag, OffDiag >::GradMatrix

Definition at line 47 of file COMETBoundaryConditions.h.

template<class X, class Diag, class OffDiag>
typedef GradientModel<T_Scalar> COMETBoundaryConditions< X, Diag, OffDiag >::GradModelType

Definition at line 46 of file COMETBoundaryConditions.h.

template<class X, class Diag, class OffDiag>
typedef Gradient<T_Scalar> COMETBoundaryConditions< X, Diag, OffDiag >::GradType

Definition at line 44 of file COMETBoundaryConditions.h.

template<class X, class Diag, class OffDiag>
typedef Array<int> COMETBoundaryConditions< X, Diag, OffDiag >::IntArray

Definition at line 33 of file COMETBoundaryConditions.h.

template<class X, class Diag, class OffDiag>
typedef Array<StressTensorX6> COMETBoundaryConditions< X, Diag, OffDiag >::StressTensorArray

Definition at line 43 of file COMETBoundaryConditions.h.

template<class X, class Diag, class OffDiag>
typedef StressTensor<X> COMETBoundaryConditions< X, Diag, OffDiag >::StressTensorX6

Definition at line 42 of file COMETBoundaryConditions.h.

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

Definition at line 31 of file COMETBoundaryConditions.h.

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

Definition at line 35 of file COMETBoundaryConditions.h.

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

Definition at line 36 of file COMETBoundaryConditions.h.

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

Definition at line 37 of file COMETBoundaryConditions.h.

template<class X, class Diag, class OffDiag>
typedef Vector<X,3> COMETBoundaryConditions< X, Diag, OffDiag >::VectorX3

Definition at line 40 of file COMETBoundaryConditions.h.

template<class X, class Diag, class OffDiag>
typedef Array<VectorX3> COMETBoundaryConditions< X, Diag, OffDiag >::VectorX3Array

Definition at line 41 of file COMETBoundaryConditions.h.

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

Definition at line 39 of file COMETBoundaryConditions.h.

Constructor & Destructor Documentation

template<class X, class Diag, class OffDiag>
COMETBoundaryConditions< X, Diag, OffDiag >::COMETBoundaryConditions ( const StorageSite faces,
const Mesh mesh,
const GeomFields geomFields,
const Quadrature< X > &  quadrature,
MacroFields macroFields,
DistFunctFields< X > &  dsfPtr 
)
inline

Definition at line 49 of file COMETBoundaryConditions.h.

54  :
55 
56  _faces(faces),
57  _allFaces(mesh.getFaces()),
58  _mesh(mesh),
59  _geomFields(geomFields),
60  _cells(mesh.getCells()),
61  _cellFaces(mesh.getCellFaces()),
62  _ibType(dynamic_cast<const IntArray&>(geomFields.ibType[_cells])),
63  _quadrature(quadrature),
64  _macroFields(macroFields),
65  _dsfPtr(dsfPtr),
68  _cellCells(mesh.getCellCells()),
69  _areaMagField(geomFields.areaMag),
70  _faceAreaMag(dynamic_cast<const TArray&>(_areaMagField[_faces])),
71  _areaField(geomFields.area),
72  _faceArea(dynamic_cast<const VectorT3Array&>(_areaField[_faces]))
73 
74  {}
const VectorT3Array & _faceArea
const CRConnectivity & _faceCells
const DistFunctFields< X > & _dsfPtr
Field ibType
Definition: GeomFields.h:38
const CRConnectivity & getAllFaceCells() const
Definition: Mesh.cpp:378
const CRConnectivity & getCellFaces() const
Definition: Mesh.cpp:454
const CRConnectivity & _cellFaces
const CRConnectivity & _cellCells
const CRConnectivity & _allFaceCells
const StorageSite & getFaces() const
Definition: Mesh.h:108
const CRConnectivity & getCellCells() const
Definition: Mesh.cpp:480
const StorageSite & getCells() const
Definition: Mesh.h:109
const CRConnectivity & getFaceCells(const StorageSite &site) const
Definition: Mesh.cpp:388
const Quadrature< X > & _quadrature
Field area
Definition: GeomFields.h:23
Field areaMag
Definition: GeomFields.h:25

Member Function Documentation

template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyNSInterfaceBC ( ) const
inline

Definition at line 598 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_faces, and StorageSite::getCount().

Referenced by COMETModel< T >::callCOMETBoundaryConditions().

600  {
601 
602  for (int i=0; i<_faces.getCount();i++)
603  applyNSInterfaceBC(i); //,bTemperature[i],bPressure[i],bVelocity[i],bStress[i]);
604 
605 
606 
607  }
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyNSInterfaceBC ( int  f) const
inline

Definition at line 611 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_cells, COMETBoundaryConditions< X, Diag, OffDiag >::_dsfPtr, COMETBoundaryConditions< X, Diag, OffDiag >::_faceArea, COMETBoundaryConditions< X, Diag, OffDiag >::_faceAreaMag, COMETBoundaryConditions< X, Diag, OffDiag >::_faceCells, COMETBoundaryConditions< X, Diag, OffDiag >::_faces, COMETBoundaryConditions< X, Diag, OffDiag >::_ibType, COMETBoundaryConditions< X, Diag, OffDiag >::_macroFields, COMETBoundaryConditions< X, Diag, OffDiag >::_options, COMETBoundaryConditions< X, Diag, OffDiag >::_quadrature, Quadrature< T >::cxPtr, Quadrature< T >::cyPtr, Quadrature< T >::czPtr, DistFunctFields< T >::dsf, Quadrature< T >::getDirCount(), Mesh::IBTYPE_FLUID, MacroFields::InterfacePressure, MacroFields::InterfaceStress, MacroFields::InterfaceVelocity, COMETModelOptions< T >::pi, MacroFields::temperature, and MacroFields::viscosity.

613  {
614 
615  const double pi=_options.pi;
616  const int c0 = _faceCells(f,0);
617  const int c1 = _faceCells(f,1);
618 
619  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
620  return;
621 
622 
623  const int numDirections = _quadrature.getDirCount();
624  const XArray& cx = dynamic_cast<const XArray&>(*_quadrature.cxPtr);
625  const XArray& cy = dynamic_cast<const XArray&>(*_quadrature.cyPtr);
626  const XArray& cz = dynamic_cast<const XArray&>(*_quadrature.czPtr);
627 
628  //XArray& density = dynamic_cast<XArray&>(_macroFields.density[_cells]);
629  //XArray& pressure = dynamic_cast<XArray&>(_macroFields.pressure[_cells]);
630  XArray& temperature = dynamic_cast<XArray&>(_macroFields.temperature[_cells]);
631  //VectorX3Array& v = dynamic_cast<VectorX3Array&>(_macroFields.velocity[_cells]);
632 
633  XArray& viscosity = dynamic_cast<XArray&>(_macroFields.viscosity[_cells]);
634 
635 
637  XArray& IntPress = dynamic_cast<XArray&>(_macroFields.InterfacePressure[_faces]);
638  //XArray& IntDens = dynamic_cast<XArray&>(_macroFields.InterfaceDensity[_faces]);
640 
641  const X Tin = temperature[c0];
642  const X Pin = IntPress[f];
643  const X nin = Pin/Tin; // wall number density for initializing Maxwellian
644 
645 
646  const X u_in=IntVel[f][0];
647  const X v_in=IntVel[f][1];
648  const X w_in=IntVel[f][2];
649 
650  const VectorT3 en = _faceArea[f]/_faceAreaMag[f];
651 
652  // Extra for CE expression
653  const X rho_init=_options["rho_init"];
654  const X T_init= _options["T_init"];
655  const X R=8314.0/_options["molecularWeight"];
656  const X nondim_length=_options["nonDimLt"];
657  const X mu0=rho_init*R* T_init*nondim_length/pow(2*R* T_init,0.5);
658 
659  //update f to Maxwellian
660  for (int j=0; j<numDirections; j++)
661  {
662  Field& fnd = *_dsfPtr.dsf[j];
663  XArray& dsf = dynamic_cast< XArray&>(fnd[_cells]);
664  //const VectorT3 en = _faceArea[f]/_faceAreaMag[f];
665  //const X c_dot_en = cx[j]*en[0]+cy[j]*en[1]+cz[j]*en[2];
666  //if (c_dot_en< T_Scalar(0.0))
667  {
668  //cout << "nin " <<nin <<endl;
669  dsf[c1] = nin/pow(pi*Tin,1.5)*exp(-(pow(cx[j]-u_in,2.0)+pow(cy[j]-v_in,2.0)+pow(cz[j]-w_in,2.0))/Tin)
670  *(1-viscosity[c0]/mu0/(nin*pow(Tin,2.0))*(pow(cx[j]-u_in,2.0)*tau[f][0]+pow(cy[j]-v_in,2.0)*tau[f][1]+pow(cz[j]-w_in,2.0)*tau[f][2])
671  +2.0*(cx[j]-u_in)*(cy[j]-v_in)*tau[f][3]+2.0*(cy[j]-v_in)*(cz[j]-w_in)*tau[f][4]+2.0*(cz[j]-w_in)*(cx[j]-u_in)*tau[f][5]); //update f to ChapmannEnskog
672  }
673  //else{dsf[c1]=dsf[c0];}//outgoing
674 
675  }
676  //update f to ChapmannEnskog
677 
678 
679 //dsf[c1]=dsf[c1]*(1-2*cx[j]*cy[j]*slopeL*viscosity[c]/mu0) //velocity tangential only
680 //C2=pow(cx[j]-u_in,2.0)+pow(cy[j]-v_in,2.0)+pow(cz[j]-w_in,2.0)
681 //dsf[c1]=dsf[c1]*(1+viscosity[c1]/(mu0*Pr*nin*pow(Tin,2.0))*((cx[j]-u_in)*dtbdx+(cy[j]-v_in)*dtbdy+(cz[j]-w_in)*dtbdz)*(C2-2.5))
682 //temperature difference too
683  }
const VectorT3Array & _faceArea
Array< StressTensorX6 > StressTensorArray
Definition: Field.h:14
const CRConnectivity & _faceCells
COMETModelOptions< X > _options
const DistFunctFields< X > & _dsfPtr
TArray * cyPtr
Definition: Quadrature.h:42
int getDirCount() const
Definition: Quadrature.h:56
Field InterfaceVelocity
Definition: MacroFields.h:39
Field InterfacePressure
Definition: MacroFields.h:40
TArray * czPtr
Definition: Quadrature.h:47
Field viscosity
Definition: MacroFields.h:20
Field temperature
Definition: MacroFields.h:22
TArray * cxPtr
Definition: Quadrature.h:37
const Quadrature< X > & _quadrature
Field InterfaceStress
Definition: MacroFields.h:41
std::vector< Field * > dsf
template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyPressureInletBC ( int  f,
const X &  inletTemperature,
const X &  inletPressure,
GradMatrix gMat 
) const
inline

Definition at line 77 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_allFaceCells, COMETBoundaryConditions< X, Diag, OffDiag >::_allFaces, COMETBoundaryConditions< X, Diag, OffDiag >::_cellFaces, COMETBoundaryConditions< X, Diag, OffDiag >::_cells, COMETBoundaryConditions< X, Diag, OffDiag >::_dsfPtr, COMETBoundaryConditions< X, Diag, OffDiag >::_faceArea, COMETBoundaryConditions< X, Diag, OffDiag >::_faceAreaMag, COMETBoundaryConditions< X, Diag, OffDiag >::_faceCells, COMETBoundaryConditions< X, Diag, OffDiag >::_geomFields, COMETBoundaryConditions< X, Diag, OffDiag >::_ibType, COMETBoundaryConditions< X, Diag, OffDiag >::_macroFields, COMETBoundaryConditions< X, Diag, OffDiag >::_options, COMETBoundaryConditions< X, Diag, OffDiag >::_quadrature, computeLimitCoeff(), GradientMatrix< T_Scalar >::computeR(), GeomFields::coordinate, Quadrature< T >::cxPtr, Quadrature< T >::cyPtr, Quadrature< T >::czPtr, Quadrature< T >::dcxyzPtr, MacroFields::density, DistFunctFields< T >::dsf, GradientMatrix< T_Scalar >::getCoeff(), CRConnectivity::getCount(), Quadrature< T >::getDirCount(), Mesh::IBTYPE_FLUID, COMETModelOptions< T >::pi, MacroFields::pressure, MacroFields::temperature, MacroFields::velocity, and Array< T >::zero().

Referenced by COMETBoundaryConditions< X, Diag, OffDiag >::applyPressureInletBC(), and COMETModel< T >::callCOMETBoundaryConditions().

78  {
79 
80  int surface(-1);
81  const double pi=_options.pi;
82  const int c0 = _faceCells(f,0);
83  const int c1 = _faceCells(f,1);
84 
85  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
86  return;
87 
89  Grads.zero();
90 
91  VectorT3 Gcoeff;
92  TArray limitCoeff1(_quadrature.getDirCount());
95 
96  for(int dir=0;dir<_quadrature.getDirCount();dir++)
97  {
98  limitCoeff1[dir]=T_Scalar(1.e20);
99  Field& fnd = *_dsfPtr.dsf[dir];
100  TArray& dsf = dynamic_cast< TArray&>(fnd[_cells]);
101  min1[dir]=dsf[c0];
102  max1[dir]=dsf[c0];
103  }
104 
105  const VectorT3Array& faceCoords=
106  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[_allFaces]);
107  const VectorT3Array& cellCoords=
108  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[_cells]);
109 
110 
111  const int neibcount=_cellFaces.getCount(c0);
112  for(int j=0;j<neibcount;j++)
113  {
114 
115  const int face=_cellFaces(c0,j);
116 
117  int cell2=_allFaceCells(face,1);
118  if(cell2==c0)
119  cell2=_allFaceCells(face,0);
120 
121  if(cell2==c1)surface=face;
122  Gcoeff=gMat.getCoeff(c0, cell2);
123  for(int dir=0;dir<_quadrature.getDirCount();dir++)
124  {
125  Field& fnd = *_dsfPtr.dsf[dir];
126  TArray& dsf = dynamic_cast< TArray&>(fnd[_cells]);
127  Grads[dir].accumulate(Gcoeff,dsf[cell2]-dsf[c0]);
128  if(min1[dir]>dsf[cell2])min1[dir]=dsf[cell2];
129  if(max1[dir]<dsf[cell2])max1[dir]=dsf[cell2];
130  }
131  }
132 
133  for(int j=0;j<neibcount;j++)
134  {
135  const int face=_cellFaces(c0,j);
136 
137  SuperbeeLimiter lf;
138  for(int dir=0;dir<_quadrature.getDirCount();dir++)
139  {
140  Field& fnd = *_dsfPtr.dsf[dir];
141  TArray& dsf = dynamic_cast< TArray&>(fnd[_cells]);
142  GradType& grad=Grads[dir];
143  VectorT3 fVec=faceCoords[face]-cellCoords[c0];
144  T_Scalar SOU=(grad[0]*fVec[0]+grad[1]*fVec[1]+grad[2]*fVec[2]);
145  computeLimitCoeff(limitCoeff1[dir], dsf[c0], SOU, min1[dir], max1[dir], lf);
146  }
147  }
148 
149  const int numDirections = _quadrature.getDirCount();
150  const XArray& cx = dynamic_cast<const XArray&>(*_quadrature.cxPtr);
151  const XArray& cy = dynamic_cast<const XArray&>(*_quadrature.cyPtr);
152  const XArray& cz = dynamic_cast<const XArray&>(*_quadrature.czPtr);
153  const XArray& wts = dynamic_cast<const XArray&>(*_quadrature.dcxyzPtr);
154  XArray& density = dynamic_cast<XArray&>(_macroFields.density[_cells]);
155  XArray& pressure = dynamic_cast<XArray&>(_macroFields.pressure[_cells]);
156  XArray& temperature = dynamic_cast<XArray&>(_macroFields.temperature[_cells]);
157  //XArray& heatFlux = dynamic_cast<XArray&>(_macroFields.heatFlux[_cells]);
159 
160 
161  X uwallnew = 0.0;
162 
163  const X Tin = inletTemperature;
164  const X Pin = inletPressure;
165  const X nin = Pin/Tin; // wall number density for initializing Maxwellian
166 
167  //store boundary values
168  temperature[c1]=inletTemperature;
169  pressure[c1]=inletPressure;
170  density[c1]=nin;
171  v[c1][0]=0.0;
172  v[c1][1]=0.0;
173  v[c1][2]=0.0;
174 
175  const VectorT3 en = _faceArea[f]/_faceAreaMag[f];
176 
177 
178  //update velocity
179  for (int j=0; j<numDirections; j++)
180  {
181  Field& fnd = *_dsfPtr.dsf[j];
182  XArray& dsf = dynamic_cast< XArray&>(fnd[_cells]);
183  dsf[c1] = nin/pow(pi*Tin,1.5)*exp(-(pow(cx[j]-v[c1][0],2.0)+pow(cy[j]-v[c1][1],2.0)+pow(cz[j]-v[c1][2],2.0))/Tin);
184 
185  const X c_dot_en = cx[j]*en[0]+cy[j]*en[1]+cz[j]*en[2];
186 
187  if (abs(en[0]) == T_Scalar(1.0))
188  {
189  if( c_dot_en > T_Scalar(0.0))
190  {
191  uwallnew=uwallnew+cx[j]*dsf[c0]*wts[j];
192  }
193  else {uwallnew=uwallnew+cx[j]*dsf[c1]*wts[j];}
194  }
195  else if (abs(en[1]) == T_Scalar(1.0))
196  {
197  if( c_dot_en > T_Scalar(0.0))
198  {
199  uwallnew=uwallnew+cy[j]*dsf[c0]*wts[j];
200  }
201  else {uwallnew=uwallnew+cy[j]*dsf[c1]*wts[j];}
202  }
203  else if (abs(en[2]) == T_Scalar(1.0))
204  {
205  if( c_dot_en > T_Scalar(0.0))
206  {
207  uwallnew=uwallnew+cz[j]*dsf[c0]*wts[j];
208  }
209  else {uwallnew=uwallnew+cz[j]*dsf[c1]*wts[j];}
210  }
211  }
212  /*
213  if (abs(en[0]) == T_Scalar(1.0))
214  v[c1][0]=uwallnew/nin;
215  else if (abs(en[1]) == T_Scalar(1.0)) //incoming {vwallnew=vwallnew+cy[j]*dsf[c1]*wts[j];}
216  v[c1][1]=uwallnew/nin;
217  else if(abs(en[2]) == T_Scalar(1.0))
218  v[c1][2]=uwallnew/nin;//uwall=uwall+relax*(uwallnew-uwall);
219  */
220 
221 
222  //update f
223  for (int j=0; j<numDirections; j++)
224  {
225  Field& fnd = *_dsfPtr.dsf[j];
226  XArray& dsf = dynamic_cast< XArray&>(fnd[_cells]);
227  const VectorT3 en = _faceArea[f]/_faceAreaMag[f];
228  const X c_dot_en = cx[j]*en[0]+cy[j]*en[1]+cz[j]*en[2];
229  if (c_dot_en< T_Scalar(0.0))
230  {
231  dsf[c1] = nin/pow(pi*Tin,1.5)*exp(-(pow(cx[j]-v[c1][0],2.0)+pow(cy[j]-v[c1][1],2.0)+pow(cz[j]-v[c1][2],2.0))/Tin);
232  // dsf[c0]=dsf[c1];// change value of fluid boundary-cell
233  }
234  else
235  {
236  GradType& grad=Grads[j];
237  VectorT3 fVec=faceCoords[surface]-cellCoords[c0];
238  VectorT3 rVec=cellCoords[c1]-cellCoords[c0];
239  T_Scalar r=gMat.computeR(grad,dsf,rVec,c0,c1);
240  T_Scalar SOU=(grad[0]*fVec[0]+grad[1]*fVec[1]+grad[2]*fVec[2]);
241  //dsf[c1]=dsf[c0];
242  //dsf[c1]=dsf[c0]+superbee(r)*SOU;
243  dsf[c1]=dsf[c0]+limitCoeff1[j]*SOU;
244  }
245  }
246 
247  }
int getCount(const int i) const
const VectorT3Array & _faceArea
Field coordinate
Definition: GeomFields.h:19
Definition: Field.h:14
const CRConnectivity & _faceCells
COMETModelOptions< X > _options
const DistFunctFields< X > & _dsfPtr
TArray * cyPtr
Definition: Quadrature.h:42
int getDirCount() const
Definition: Quadrature.h:56
TArray * dcxyzPtr
Definition: Quadrature.h:52
void computeLimitCoeff(T &lc, const T x, const T &dx, const T &min, const T &max, const LimitFunc &f)
Definition: FluxLimiters.h:72
TArray * czPtr
Definition: Quadrature.h:47
Gradient< T_Scalar > GradType
Field temperature
Definition: MacroFields.h:22
const CRConnectivity & _cellFaces
TArray * cxPtr
Definition: Quadrature.h:37
const CRConnectivity & _allFaceCells
NumTypeTraits< X >::T_Scalar T_Scalar
Field velocity
Definition: MacroFields.h:15
const Quadrature< X > & _quadrature
Field pressure
Definition: MacroFields.h:19
std::vector< Field * > dsf
Field density
Definition: MacroFields.h:21
template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyPressureInletBC ( const FloatValEvaluator< X > &  bTemperature,
const FloatValEvaluator< X > &  bPresssure 
) const
inline

Definition at line 249 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_faces, COMETBoundaryConditions< X, Diag, OffDiag >::_geomFields, COMETBoundaryConditions< X, Diag, OffDiag >::_mesh, COMETBoundaryConditions< X, Diag, OffDiag >::applyPressureInletBC(), StorageSite::getCount(), and GradientModel< X >::getGradientMatrix().

250  {
252  for (int i=0; i<_faces.getCount();i++)
253  applyPressureInletBC(i,bTemperature[i],bPresssure[i],gradMatrix);
254 
255  }
static GradMatrixType & getGradientMatrix(const Mesh &mesh, const GeomFields &geomFields)
void applyPressureInletBC(int f, const X &inletTemperature, const X &inletPressure, GradMatrix &gMat) const
int getCount() const
Definition: StorageSite.h:39
GradModelType::GradMatrixType GradMatrix
template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyPressureOutletBC ( int  f,
const X &  outletTemperature,
const X &  outletPressure 
) const
inline

Definition at line 258 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_cells, COMETBoundaryConditions< X, Diag, OffDiag >::_dsfPtr, COMETBoundaryConditions< X, Diag, OffDiag >::_faceArea, COMETBoundaryConditions< X, Diag, OffDiag >::_faceAreaMag, COMETBoundaryConditions< X, Diag, OffDiag >::_faceCells, COMETBoundaryConditions< X, Diag, OffDiag >::_ibType, COMETBoundaryConditions< X, Diag, OffDiag >::_macroFields, COMETBoundaryConditions< X, Diag, OffDiag >::_options, COMETBoundaryConditions< X, Diag, OffDiag >::_quadrature, Quadrature< T >::cxPtr, Quadrature< T >::cyPtr, Quadrature< T >::czPtr, MacroFields::density, DistFunctFields< T >::dsf, Quadrature< T >::getDirCount(), Mesh::IBTYPE_FLUID, COMETModelOptions< T >::pi, MacroFields::pressure, COMETModelOptions< T >::SpHeatRatio, MacroFields::temperature, and MacroFields::velocity.

Referenced by COMETBoundaryConditions< X, Diag, OffDiag >::applyPressureOutletBC(), and COMETModel< T >::callCOMETBoundaryConditions().

259  {
260 
261  const double pi=_options.pi;
262  const int c0 = _faceCells(f,0);
263  const int c1 = _faceCells(f,1);
264 
265  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
266  return;
267 
268  const int numDirections = _quadrature.getDirCount();
269  const XArray& cx = dynamic_cast<const XArray&>(*_quadrature.cxPtr);
270  const XArray& cy = dynamic_cast<const XArray&>(*_quadrature.cyPtr);
271  const XArray& cz = dynamic_cast<const XArray&>(*_quadrature.czPtr);
272  XArray& density = dynamic_cast<XArray&>(_macroFields.density[_cells]);
274  XArray& pressure = dynamic_cast<XArray&>(_macroFields.pressure[_cells]);
275  XArray& temperature = dynamic_cast<XArray&>(_macroFields.temperature[_cells]);
276 
277  // X Tout = outletTemperature;
278  const X Pout = outletPressure;
279  X Pcell= pressure[c0];
280  X gamma =_options.SpHeatRatio;
281  const VectorT3 en = _faceArea[f]/_faceAreaMag[f];
282  X nout =density[c0];
283 
284  if (Pcell > Pout){
285  const X avel2 =gamma*Pcell/density[c0]; //velcotiy of sound square
286  nout =density[c0]-(Pcell-Pout)/avel2;
287  X ubulk=pow(pow(v[c0][0],2.0)+pow(v[c0][1],2.0)+pow(v[c0][2],2.0),0.5);
288  X ucoeff=1.0/ubulk*(ubulk+(Pcell-Pout)/(pow(2.0*avel2,0.5)*density[c0]));
289  if(abs(en[0])==T_Scalar(1.0))
290  v[c1][0] = v[c0][0]*ucoeff;
291  //v[c1][0]=v[c0][0]+(pressure[c0]-Pout)/(pow(2.0*avel2,0.5)*density[c0]); //exit velocity
292  else if(abs(en[1])==T_Scalar(1.0))
293  v[c1][1] = v[c0][1]*ucoeff;
294  else if(abs(en[2])==T_Scalar(1.0))
295  v[c1][2] = v[c0][2]*ucoeff;
296 
297  density[c1]=nout; pressure[c1]=Pout; //update macroPr
298  temperature[c1]=Pout/nout;
299  }
300  else{
301 
302  density[c1]=density[c0];
303  pressure[c1]=pressure[c0];
304  temperature[c1]=temperature[c0];
305 
306  }
307  for (int j=0; j<numDirections; j++)
308  {
309  Field& fnd = *_dsfPtr.dsf[j];
310  XArray& dsf = dynamic_cast< XArray&>(fnd[_cells]);
311 
312  const X c_dot_en = cx[j]*en[0]+cy[j]*en[1]+cz[j]*en[2];
313  if (c_dot_en < T_Scalar(0.0))
314  {
315  dsf[c1] = nout/pow(pi*temperature[c1],1.5)*exp(-(pow(cx[j]-v[c1][0],2.0)+pow(cy[j]-v[c1][1],2.0)+pow(cz[j]-v[c1][2],2.0))/temperature[c1]);
316  // dsf[c0]=dsf[c1];// change value of fluid boundary-cell
317  }
318  else{dsf[c1]=dsf[c0];}
319 
320  }
321 
322 
323 }
const VectorT3Array & _faceArea
Definition: Field.h:14
const CRConnectivity & _faceCells
COMETModelOptions< X > _options
const DistFunctFields< X > & _dsfPtr
TArray * cyPtr
Definition: Quadrature.h:42
int getDirCount() const
Definition: Quadrature.h:56
TArray * czPtr
Definition: Quadrature.h:47
Field temperature
Definition: MacroFields.h:22
TArray * cxPtr
Definition: Quadrature.h:37
NumTypeTraits< X >::T_Scalar T_Scalar
Field velocity
Definition: MacroFields.h:15
const Quadrature< X > & _quadrature
Field pressure
Definition: MacroFields.h:19
std::vector< Field * > dsf
Field density
Definition: MacroFields.h:21
template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyPressureOutletBC ( const X &  bTemperature,
const X &  bPressure 
) const
inline

Definition at line 325 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_faces, and StorageSite::getCount().

326  {
327  for (int i=0; i<_faces.getCount();i++)
328  applyPressureOutletWallBC(i,bTemperature,bPressure);
329  }
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyPressureOutletBC ( const FloatValEvaluator< X > &  bTemperature,
const FloatValEvaluator< X > &  bPresssure 
) const
inline

Definition at line 332 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_faces, COMETBoundaryConditions< X, Diag, OffDiag >::applyPressureOutletBC(), and StorageSite::getCount().

333  {
334  for (int i=0; i<_faces.getCount();i++)
335  applyPressureOutletBC(i,bTemperature[i],bPresssure[i]);
336 
337  }
void applyPressureOutletBC(int f, const X &outletTemperature, const X &outletPressure) const
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyRealWallBC ( int  f,
const VectorX3 WallVelocity,
const X &  WallTemperature,
const X &  accommodationCoefficient,
const vector< int > &  vecReflection,
GradMatrix gMat 
) const
inline

Definition at line 340 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_allFaceCells, COMETBoundaryConditions< X, Diag, OffDiag >::_allFaces, COMETBoundaryConditions< X, Diag, OffDiag >::_cellFaces, COMETBoundaryConditions< X, Diag, OffDiag >::_cells, COMETBoundaryConditions< X, Diag, OffDiag >::_dsfPtr, COMETBoundaryConditions< X, Diag, OffDiag >::_faceArea, COMETBoundaryConditions< X, Diag, OffDiag >::_faceAreaMag, COMETBoundaryConditions< X, Diag, OffDiag >::_faceCells, COMETBoundaryConditions< X, Diag, OffDiag >::_geomFields, COMETBoundaryConditions< X, Diag, OffDiag >::_ibType, COMETBoundaryConditions< X, Diag, OffDiag >::_macroFields, COMETBoundaryConditions< X, Diag, OffDiag >::_options, COMETBoundaryConditions< X, Diag, OffDiag >::_quadrature, computeLimitCoeff(), GradientMatrix< T_Scalar >::computeR(), GeomFields::coordinate, Quadrature< T >::cxPtr, Quadrature< T >::cyPtr, Quadrature< T >::czPtr, Quadrature< T >::dcxyzPtr, MacroFields::density, DistFunctFields< T >::dsf, GradientMatrix< T_Scalar >::getCoeff(), CRConnectivity::getCount(), Quadrature< T >::getDirCount(), Mesh::IBTYPE_FLUID, COMETModelOptions< T >::pi, MacroFields::temperature, MacroFields::velocity, and Array< T >::zero().

Referenced by COMETBoundaryConditions< X, Diag, OffDiag >::applyRealWallBC(), and COMETModel< T >::callCOMETBoundaryConditions().

341  {
342  int surface(-1);
343  const double pi=_options.pi;
344  //const double epsilon=_options.epsilon_ES;
345 
346  const int c0 = _faceCells(f,0);
347  const int c1 = _faceCells(f,1);
348 
349  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
350  return;
351 
353  Grads.zero();
354 
355  VectorT3 Gcoeff;
356  TArray limitCoeff1(_quadrature.getDirCount());
359 
360  for(int dir=0;dir<_quadrature.getDirCount();dir++)
361  {
362  limitCoeff1[dir]=T_Scalar(1.e20);
363  Field& fnd = *_dsfPtr.dsf[dir];
364  TArray& dsf = dynamic_cast< TArray&>(fnd[_cells]);
365  min1[dir]=dsf[c0];
366  max1[dir]=dsf[c0];
367  }
368 
369  const VectorT3Array& faceCoords=
370  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[_allFaces]);
371  const VectorT3Array& cellCoords=
372  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[_cells]);
373 
374  const int neibcount=_cellFaces.getCount(c0);
375  for(int j=0;j<neibcount;j++)
376  {
377 
378  const int face=_cellFaces(c0,j);
379 
380  int cell2=_allFaceCells(face,1);
381  if(cell2==c0)
382  cell2=_allFaceCells(face,0);
383 
384  if(cell2==c1)surface=face;
385  Gcoeff=gMat.getCoeff(c0, cell2);
386  for(int dir=0;dir<_quadrature.getDirCount();dir++)
387  {
388  Field& fnd = *_dsfPtr.dsf[dir];
389  TArray& dsf = dynamic_cast< TArray&>(fnd[_cells]);
390  Grads[dir].accumulate(Gcoeff,dsf[cell2]-dsf[c0]);
391  if(min1[dir]>dsf[cell2])min1[dir]=dsf[cell2];
392  if(max1[dir]<dsf[cell2])max1[dir]=dsf[cell2];
393  }
394  }
395 
396  for(int j=0;j<neibcount;j++)
397  {
398  const int face=_cellFaces(c0,j);
399 
400  SuperbeeLimiter lf;
401  for(int dir=0;dir<_quadrature.getDirCount();dir++)
402  {
403  Field& fnd = *_dsfPtr.dsf[dir];
404  TArray& dsf = dynamic_cast< TArray&>(fnd[_cells]);
405  GradType& grad=Grads[dir];
406  VectorT3 fVec=faceCoords[face]-cellCoords[c0];
407  T_Scalar SOU=(grad[0]*fVec[0]+grad[1]*fVec[1]+grad[2]*fVec[2]);
408  computeLimitCoeff(limitCoeff1[dir], dsf[c0], SOU, min1[dir], max1[dir], lf);
409  }
410  }
411 
412  const int numDirections = _quadrature.getDirCount();
413  const XArray& cx = dynamic_cast<const XArray&>(*_quadrature.cxPtr);
414  const XArray& cy = dynamic_cast<const XArray&>(*_quadrature.cyPtr);
415  const XArray& cz = dynamic_cast<const XArray&>(*_quadrature.czPtr);
416  const XArray& wts= dynamic_cast<const XArray&>(*_quadrature.dcxyzPtr);
418  XArray& density = dynamic_cast<XArray&>(_macroFields.density[_cells]);
419  XArray& temperature = dynamic_cast<XArray&>(_macroFields.temperature[_cells]);
420  const X uwall = WallVelocity[0];
421  const X vwall = WallVelocity[1];
422  const X wwall = WallVelocity[2];
423  const X Twall = WallTemperature;
424  const X alpha = accommodationCoefficient;
425  X m1alpha=1.0-alpha;
426  v[c1][0]=uwall;
427  v[c1][1]=vwall;
428  v[c1][2]=wwall;
429 
430  temperature[c1]=Twall;
431  X Nmr(0.0) ;
432  X Dmr(0.0) ;
433  X incomFlux(0.0);
434  for (int j=0; j<numDirections; j++)
435  {
436  Field& fnd = *_dsfPtr.dsf[j];
437  XArray& dsf = dynamic_cast< XArray&>(fnd[_cells]);
438  const VectorT3 en = _faceArea[f]/_faceAreaMag[f];
439  const X c_dot_en = cx[j]*en[0]+cy[j]*en[1]+cz[j]*en[2];
440  const X wallV_dot_en = uwall*en[0]+vwall*en[1]+wwall*en[2];
441  const X fwall = 1.0/pow(pi*Twall,1.5)*exp(-(pow(cx[j]-uwall,2.0)+pow(cy[j]-vwall,2.0)+pow(cz[j]-wwall,2.0))/Twall);
442  if (c_dot_en -wallV_dot_en < T_Scalar(0.0)) //incoming
443  {
444  Dmr = Dmr - fwall*wts[j]*(c_dot_en-wallV_dot_en);
445  }
446  else
447  {
448  GradType& grad=Grads[j];
449  VectorT3 fVec=faceCoords[surface]-cellCoords[c0];
450  VectorT3 rVec=cellCoords[c1]-cellCoords[c0];
451  T_Scalar r=gMat.computeR(grad,dsf,rVec,c0,c1);
452  T_Scalar SOU=(grad[0]*fVec[0]+grad[1]*fVec[1]+grad[2]*fVec[2]);
453  Nmr = Nmr + (dsf[c0]+limitCoeff1[j]*SOU)*wts[j]*(c_dot_en-wallV_dot_en);
454  }
455  }
456 
457  const X nwall = Nmr/Dmr; // wall number density for initializing Maxwellian
458  density[c1]=nwall;
459 
460  for (int j=0; j<numDirections; j++)
461  {
462  Field& fnd = *_dsfPtr.dsf[j];
463  XArray& dsf = dynamic_cast< XArray&>(fnd[_cells]);
464  const VectorT3 en = _faceArea[f]/_faceAreaMag[f];
465  const X c_dot_en = cx[j]*en[0]+cy[j]*en[1]+cz[j]*en[2];
466  const X wallV_dot_en = uwall*en[0]+vwall*en[1]+wwall*en[2];
467 
468  if (c_dot_en-wallV_dot_en < T_Scalar(0.0))
469  {
470  const int direction_incident = vecReflection[j];
471  Field& fndi = *_dsfPtr.dsf[direction_incident];
472  const XArray& dsfi = dynamic_cast<const XArray&>(fndi[_cells]);
473 
474  dsf[c1] = alpha*nwall/pow(pi*Twall,1.5)*exp(-(pow(cx[j]-uwall,2.0)+pow(cy[j]-vwall,2.0)+pow(cz[j]-wwall,2.0))/Twall)+m1alpha*dsfi[c0];
475  }
476  else
477  {
478  GradType& grad=Grads[j];
479  VectorT3 fVec=faceCoords[surface]-cellCoords[c0];
480  VectorT3 rVec=cellCoords[c1]-cellCoords[c0];
481  T_Scalar r=gMat.computeR(grad,dsf,rVec,c0,c1);
482  T_Scalar SOU=(grad[0]*fVec[0]+grad[1]*fVec[1]+grad[2]*fVec[2]);
483  dsf[c1]=dsf[c0]+limitCoeff1[j]*SOU;
484  }
485  }
486  }
int getCount(const int i) const
const VectorT3Array & _faceArea
Field coordinate
Definition: GeomFields.h:19
Definition: Field.h:14
const CRConnectivity & _faceCells
COMETModelOptions< X > _options
const DistFunctFields< X > & _dsfPtr
TArray * cyPtr
Definition: Quadrature.h:42
int getDirCount() const
Definition: Quadrature.h:56
TArray * dcxyzPtr
Definition: Quadrature.h:52
void computeLimitCoeff(T &lc, const T x, const T &dx, const T &min, const T &max, const LimitFunc &f)
Definition: FluxLimiters.h:72
TArray * czPtr
Definition: Quadrature.h:47
Gradient< T_Scalar > GradType
Field temperature
Definition: MacroFields.h:22
const CRConnectivity & _cellFaces
TArray * cxPtr
Definition: Quadrature.h:37
const CRConnectivity & _allFaceCells
NumTypeTraits< X >::T_Scalar T_Scalar
Field velocity
Definition: MacroFields.h:15
const Quadrature< X > & _quadrature
std::vector< Field * > dsf
Field density
Definition: MacroFields.h:21
template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyRealWallBC ( const VectorX3 bVelocity,
const X &  bTemperature,
const X &  accomCoeff,
const vector< int > &  vecReflection 
) const
inline

Definition at line 488 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_faces, COMETBoundaryConditions< X, Diag, OffDiag >::_geomFields, COMETBoundaryConditions< X, Diag, OffDiag >::_mesh, COMETBoundaryConditions< X, Diag, OffDiag >::applyRealWallBC(), StorageSite::getCount(), and GradientModel< X >::getGradientMatrix().

489  {
491  for (int i=0; i<_faces.getCount();i++)
492  applyRealWallBC(i,bVelocity,bTemperature,accomCoeff,vecReflection,gradMatrix);
493  }
void applyRealWallBC(int f, const VectorX3 &WallVelocity, const X &WallTemperature, const X &accommodationCoefficient, const vector< int > &vecReflection, GradMatrix &gMat) const
static GradMatrixType & getGradientMatrix(const Mesh &mesh, const GeomFields &geomFields)
int getCount() const
Definition: StorageSite.h:39
GradModelType::GradMatrixType GradMatrix
template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyRealWallBC ( const FloatValEvaluator< VectorX3 > &  bVelocity,
const FloatValEvaluator< X > &  bTemperature,
const FloatValEvaluator< X > &  accomCoeff,
const vector< int > &  vecReflection 
) const
inline

Definition at line 496 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_faces, COMETBoundaryConditions< X, Diag, OffDiag >::_geomFields, COMETBoundaryConditions< X, Diag, OffDiag >::_mesh, COMETBoundaryConditions< X, Diag, OffDiag >::applyRealWallBC(), StorageSite::getCount(), and GradientModel< X >::getGradientMatrix().

497  {
499  for (int i=0; i<_faces.getCount();i++)
500  applyRealWallBC(i,bVelocity[i],bTemperature[i],accomCoeff[i],vecReflection,gradMatrix);
501 
502  }
void applyRealWallBC(int f, const VectorX3 &WallVelocity, const X &WallTemperature, const X &accommodationCoefficient, const vector< int > &vecReflection, GradMatrix &gMat) const
static GradMatrixType & getGradientMatrix(const Mesh &mesh, const GeomFields &geomFields)
int getCount() const
Definition: StorageSite.h:39
GradModelType::GradMatrixType GradMatrix
template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyZeroGradientBC ( int  f,
GradMatrix gMat 
) const
inline

Definition at line 504 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_allFaceCells, COMETBoundaryConditions< X, Diag, OffDiag >::_allFaces, COMETBoundaryConditions< X, Diag, OffDiag >::_cellFaces, COMETBoundaryConditions< X, Diag, OffDiag >::_cells, COMETBoundaryConditions< X, Diag, OffDiag >::_dsfPtr, COMETBoundaryConditions< X, Diag, OffDiag >::_faceCells, COMETBoundaryConditions< X, Diag, OffDiag >::_geomFields, COMETBoundaryConditions< X, Diag, OffDiag >::_ibType, COMETBoundaryConditions< X, Diag, OffDiag >::_quadrature, computeLimitCoeff(), GradientMatrix< T_Scalar >::computeR(), GeomFields::coordinate, DistFunctFields< T >::dsf, GradientMatrix< T_Scalar >::getCoeff(), CRConnectivity::getCount(), Quadrature< T >::getDirCount(), Mesh::IBTYPE_FLUID, and Array< T >::zero().

Referenced by COMETModel< T >::callCOMETBoundaryConditions().

505  {
506  const int c0 = _faceCells(f,0);
507  const int c1 = _faceCells(f,1);
508 
509  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
510  return;
511 
512  int surface(-1);
513 
515  Grads.zero();
516 
517  VectorT3 Gcoeff;
518  TArray limitCoeff1(_quadrature.getDirCount());
521 
522  for(int dir=0;dir<_quadrature.getDirCount();dir++)
523  {
524  limitCoeff1[dir]=T_Scalar(1.e20);
525  Field& fnd = *_dsfPtr.dsf[dir];
526  TArray& dsf = dynamic_cast< TArray&>(fnd[_cells]);
527  min1[dir]=dsf[c0];
528  max1[dir]=dsf[c0];
529  }
530 
531  const VectorT3Array& faceCoords=
532  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[_allFaces]);
533  const VectorT3Array& cellCoords=
534  dynamic_cast<const VectorT3Array&>(_geomFields.coordinate[_cells]);
535 
536  const int neibcount=_cellFaces.getCount(c0);
537  for(int j=0;j<neibcount;j++)
538  {
539 
540  const int face=_cellFaces(c0,j);
541 
542  int cell2=_allFaceCells(face,1);
543  if(cell2==c0)
544  cell2=_allFaceCells(face,0);
545 
546  //const int cell2=_cellCells(c0,j);
547  if(cell2==c1)surface=face;
548  Gcoeff=gMat.getCoeff(c0, cell2);
549  for(int dir=0;dir<_quadrature.getDirCount();dir++)
550  {
551  Field& fnd = *_dsfPtr.dsf[dir];
552  TArray& dsf = dynamic_cast< TArray&>(fnd[_cells]);
553  Grads[dir].accumulate(Gcoeff,dsf[cell2]-dsf[c0]);
554  if(min1[dir]>dsf[cell2])min1[dir]=dsf[cell2];
555  if(max1[dir]<dsf[cell2])max1[dir]=dsf[cell2];
556  }
557  }
558 
559  for(int j=0;j<neibcount;j++)
560  {
561  const int face=_cellFaces(c0,j);
562 
563  SuperbeeLimiter lf;
564  for(int dir=0;dir<_quadrature.getDirCount();dir++)
565  {
566  Field& fnd = *_dsfPtr.dsf[dir];
567  TArray& dsf = dynamic_cast< TArray&>(fnd[_cells]);
568  GradType& grad=Grads[dir];
569 
570  VectorT3 fVec=faceCoords[face]-cellCoords[c0];
571  T_Scalar SOU=(grad[0]*fVec[0]+grad[1]*fVec[1]+grad[2]*fVec[2]);
572 
573  computeLimitCoeff(limitCoeff1[dir], dsf[c0], SOU, min1[dir], max1[dir], lf);
574  }
575  }
576 
577  const int numDirections = _quadrature.getDirCount();
578 
579  for (int j=0; j<numDirections; j++)
580  {
581  Field& fnd = *_dsfPtr.dsf[j];
582  XArray& dsf = dynamic_cast< XArray&>(fnd[_cells]);
583  GradType& grad=Grads[j];
584  VectorT3 fVec=faceCoords[surface]-cellCoords[c0];
585  VectorT3 rVec=cellCoords[c1]-cellCoords[c0];
586  T_Scalar r=gMat.computeR(grad,dsf,rVec,c0,c1);
587  T_Scalar SOU=(grad[0]*fVec[0]+grad[1]*fVec[1]+grad[2]*fVec[2]);
588  dsf[c1]=dsf[c0]+limitCoeff1[j]*SOU;
589  }
590  }
int getCount(const int i) const
Field coordinate
Definition: GeomFields.h:19
Definition: Field.h:14
const CRConnectivity & _faceCells
const DistFunctFields< X > & _dsfPtr
int getDirCount() const
Definition: Quadrature.h:56
void computeLimitCoeff(T &lc, const T x, const T &dx, const T &min, const T &max, const LimitFunc &f)
Definition: FluxLimiters.h:72
Gradient< T_Scalar > GradType
const CRConnectivity & _cellFaces
const CRConnectivity & _allFaceCells
NumTypeTraits< X >::T_Scalar T_Scalar
const Quadrature< X > & _quadrature
std::vector< Field * > dsf
template<class X, class Diag, class OffDiag>
void COMETBoundaryConditions< X, Diag, OffDiag >::applyZeroGradientBC ( ) const
inline
template<class X, class Diag, class OffDiag>
COMETModelOptions<X>& COMETBoundaryConditions< X, Diag, OffDiag >::getOptions ( )
inline

Definition at line 75 of file COMETBoundaryConditions.h.

References COMETBoundaryConditions< X, Diag, OffDiag >::_options.

75 {return _options;}
COMETModelOptions< X > _options

Member Data Documentation

template<class X, class Diag, class OffDiag>
const Field& COMETBoundaryConditions< X, Diag, OffDiag >::_areaField
protected

Definition at line 705 of file COMETBoundaryConditions.h.

template<class X, class Diag, class OffDiag>
const Field& COMETBoundaryConditions< X, Diag, OffDiag >::_areaMagField
protected

Definition at line 703 of file COMETBoundaryConditions.h.

template<class X, class Diag, class OffDiag>
const CRConnectivity& COMETBoundaryConditions< X, Diag, OffDiag >::_cellCells
protected

Definition at line 702 of file COMETBoundaryConditions.h.


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