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

#include <GenericBCS.h>

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

Public Types

typedef NumTypeTraits< X >
::T_Scalar 
T_Scalar
 
typedef Array< T_ScalarTArray
 
typedef Array< int > IntArray
 
typedef Vector< T_Scalar, 3 > VectorT3
 
typedef CRMatrix< Diag,
OffDiag, X > 
CCMatrix
 
typedef CCMatrix::PairWiseAssembler CCAssembler
 
typedef FluxJacobianMatrix
< Diag, X > 
FMatrix
 
typedef DiagonalMatrix< Diag, X > BBMatrix
 
typedef Array< Diag > DiagArray
 
typedef Array< OffDiag > OffDiagArray
 
typedef Array< X > XArray
 
typedef Array< VectorT3VectorT3Array
 

Public Member Functions

 BaseGenericBCS (const StorageSite &faces, const Mesh &mesh, const GeomFields &geomFields, Field &varField, Field &fluxField, MultiFieldMatrix &matrix, MultiField &xField, MultiField &rField)
 
void applyDirichletBC (int f, const X &bValue) const
 
void applyDirichletBC (const X &bValue) const
 
void applyDirichletBC (const FloatValEvaluator< X > &bValue) const
 
void applyNeumannBC (const int f, const X &specifiedFlux) const
 
void applyNeumannBC (const X &bFlux) const
 
void applyNeumannBC (const FloatValEvaluator< X > &bFlux) const
 
void applyExtrapolationBC () const
 
void applyExtrapolationBC (const int f) const
 
void applyConvectionBC (const int f, const X &hCoeff, const X &Xinf) const
 
void applyConvectionBC (const X &hCoeff, const X &Xinf) const
 
void applyRadiationBC (const int f, const X &emissivity, const X &Xinf) const
 
void applyMixedBC (const int f, const X &hCoeff, const X &emissivity, const X &Xinf) const
 
void applyInterfaceBC (const int f) const
 
void applyInterfaceBC () const
 
void applyDielectricInterfaceBC (const int f, const X &hCoeff, const X &Xinf, const X &source) const
 
void applyDielectricInterfaceBC (const X &hCoeff, const X &Xinf, const X &source) const
 
void applyFlowBC (const TArray &convFlux, const X &bValue) const
 
void applyNonzeroDiagBC () const
 
void applyNonzeroDiagBC (int f) const
 

Protected Attributes

const StorageSite_faces
 
const StorageSite_cells
 
const IntArray_ibType
 
const CRConnectivity_faceCells
 
const Field_varField
 
const Field_fluxField
 
const MultiField::ArrayIndex _xIndex
 
const MultiField::ArrayIndex _fluxIndex
 
CCMatrix_dRdX
 
FMatrix_dFluxdX
 
BBMatrix_dFluxdFlux
 
CCAssembler_assembler
 
DiagArray_dRdXDiag
 
XArray_x
 
XArray_r
 
XArray_flux
 
XArray_rFlux
 
const Field_areaMagField
 
const TArray_faceAreaMag
 
const Field_areaField
 
const VectorT3Array_faceArea
 
const bool _is2D
 

Detailed Description

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

Definition at line 22 of file GenericBCS.h.

Member Typedef Documentation

template<class X, class Diag, class OffDiag>
typedef DiagonalMatrix<Diag,X> BaseGenericBCS< X, Diag, OffDiag >::BBMatrix

Definition at line 37 of file GenericBCS.h.

template<class X, class Diag, class OffDiag>
typedef CCMatrix::PairWiseAssembler BaseGenericBCS< X, Diag, OffDiag >::CCAssembler

Definition at line 34 of file GenericBCS.h.

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

Definition at line 33 of file GenericBCS.h.

template<class X, class Diag, class OffDiag>
typedef Array<Diag> BaseGenericBCS< X, Diag, OffDiag >::DiagArray

Definition at line 39 of file GenericBCS.h.

template<class X, class Diag, class OffDiag>
typedef FluxJacobianMatrix<Diag,X> BaseGenericBCS< X, Diag, OffDiag >::FMatrix

Definition at line 36 of file GenericBCS.h.

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

Definition at line 29 of file GenericBCS.h.

template<class X, class Diag, class OffDiag>
typedef Array<OffDiag> BaseGenericBCS< X, Diag, OffDiag >::OffDiagArray

Definition at line 40 of file GenericBCS.h.

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

Definition at line 26 of file GenericBCS.h.

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

Definition at line 28 of file GenericBCS.h.

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

Definition at line 31 of file GenericBCS.h.

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

Definition at line 43 of file GenericBCS.h.

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

Definition at line 42 of file GenericBCS.h.

Constructor & Destructor Documentation

template<class X, class Diag, class OffDiag>
BaseGenericBCS< X, Diag, OffDiag >::BaseGenericBCS ( const StorageSite faces,
const Mesh mesh,
const GeomFields geomFields,
Field varField,
Field fluxField,
MultiFieldMatrix matrix,
MultiField xField,
MultiField rField 
)
inline

Definition at line 46 of file GenericBCS.h.

52  :
53  _faces(faces),
54  _cells(mesh.getCells()),
55  _ibType(dynamic_cast<const IntArray&>(geomFields.ibType[_cells])),
57  _varField(varField),
58  _fluxField(fluxField),
61  _dRdX(dynamic_cast<CCMatrix&>(matrix.getMatrix(_xIndex,_xIndex))),
62  _dFluxdX(dynamic_cast<FMatrix&>(matrix.getMatrix(_fluxIndex,_xIndex))),
63  _dFluxdFlux(dynamic_cast<BBMatrix&>(matrix.getMatrix(_fluxIndex,_fluxIndex))),
66  _x(dynamic_cast<XArray&>(xField[_xIndex])),
67  _r(dynamic_cast<XArray&>(rField[_xIndex])),
68  _flux(dynamic_cast<XArray&>(xField[_fluxIndex])),
69  _rFlux(dynamic_cast<XArray&>(rField[_fluxIndex])),
70  _areaMagField(geomFields.areaMag),
71  _faceAreaMag(dynamic_cast<const TArray&>(_areaMagField[_faces])),
72  _areaField(geomFields.area),
73  _faceArea(dynamic_cast<const VectorT3Array&>(_areaField[_faces])),
74  _is2D(mesh.getDimension()==2)
75  {}
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
const VectorT3Array & _faceArea
Definition: GenericBCS.h:466
BBMatrix & _dFluxdFlux
Definition: GenericBCS.h:456
const TArray & _faceAreaMag
Definition: GenericBCS.h:464
const Field & _areaField
Definition: GenericBCS.h:465
const IntArray & _ibType
Definition: GenericBCS.h:448
CCAssembler & _assembler
Definition: GenericBCS.h:457
Array< Diag > & getDiag()
Definition: CRMatrix.h:856
const CRConnectivity & _faceCells
Definition: GenericBCS.h:449
XArray & _rFlux
Definition: GenericBCS.h:462
Field ibType
Definition: GeomFields.h:38
const StorageSite & _faces
Definition: GenericBCS.h:446
const bool _is2D
Definition: GenericBCS.h:467
XArray & _x
Definition: GenericBCS.h:459
const MultiField::ArrayIndex _xIndex
Definition: GenericBCS.h:452
XArray & _r
Definition: GenericBCS.h:460
const StorageSite & getCells() const
Definition: Mesh.h:109
const CRConnectivity & getFaceCells(const StorageSite &site) const
Definition: Mesh.cpp:388
const StorageSite & _cells
Definition: GenericBCS.h:447
XArray & _flux
Definition: GenericBCS.h:461
FMatrix & _dFluxdX
Definition: GenericBCS.h:455
const Field & _varField
Definition: GenericBCS.h:450
const MultiField::ArrayIndex _fluxIndex
Definition: GenericBCS.h:453
const Field & _fluxField
Definition: GenericBCS.h:451
const Field & _areaMagField
Definition: GenericBCS.h:463
Field area
Definition: GeomFields.h:23
PairWiseAssembler & getPairWiseAssembler(const CRConnectivity &pairs)
Definition: CRMatrix.h:867
int getDimension() const
Definition: Mesh.h:105
Field areaMag
Definition: GeomFields.h:25
DiagArray & _dRdXDiag
Definition: GenericBCS.h:458
CCMatrix & _dRdX
Definition: GenericBCS.h:454

Member Function Documentation

template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyConvectionBC ( const int  f,
const X &  hCoeff,
const X &  Xinf 
) const
inline

Definition at line 214 of file GenericBCS.h.

Referenced by BaseGenericBCS< Vector< T, N >, DiagonalTensor< T, N >, T >::applyConvectionBC().

216  {
217  const int c0 = _faceCells(f,0);
218  const int c1 = _faceCells(f,1);
219 
220  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
221  return;
222 
223  // the current value of flux and its Jacobians
224  const X fluxInterior = -_r[c1];
225 
226  // flux based on current boundary value
227  const X fluxBoundary = -hCoeff*(_x[c1]-Xinf)*_faceAreaMag[f];
228 
229  const X dFlux = fluxBoundary-fluxInterior;
230 
231  _r[c1] = dFlux;
232 
233  // add this to complete the Jacobian wrt boundar value
234  _dRdXDiag[c1] -= hCoeff*_faceAreaMag[f];
235 
236  // mark this row as a "boundary" row so that we will update it
237  // after the overall system is solved
238  _dRdX.setBoundary(c1);
239 
240  _flux[f] = fluxBoundary;
241  _rFlux[f] = 0;
243  _dFluxdX.setCoeffR(f,-hCoeff*_faceAreaMag[f]);
245  }
BBMatrix & _dFluxdFlux
Definition: GenericBCS.h:456
const TArray & _faceAreaMag
Definition: GenericBCS.h:464
const IntArray & _ibType
Definition: GenericBCS.h:448
void setCoeffR(const int f, const OffDiag &c)
const CRConnectivity & _faceCells
Definition: GenericBCS.h:449
XArray & _rFlux
Definition: GenericBCS.h:462
void setCoeffL(const int f, const OffDiag &c)
XArray & _x
Definition: GenericBCS.h:459
XArray & _r
Definition: GenericBCS.h:460
void setBoundary(const int nr)
Definition: CRMatrix.h:1056
XArray & _flux
Definition: GenericBCS.h:461
FMatrix & _dFluxdX
Definition: GenericBCS.h:455
DiagArray & _dRdXDiag
Definition: GenericBCS.h:458
CCMatrix & _dRdX
Definition: GenericBCS.h:454
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyConvectionBC ( const X &  hCoeff,
const X &  Xinf 
) const
inline

Definition at line 247 of file GenericBCS.h.

248  {
249  for(int i=0; i<_faces.getCount(); i++)
250  applyConvectionBC(i,hCoeff,Xinf);
251  }
void applyConvectionBC(const int f, const X &hCoeff, const X &Xinf) const
Definition: GenericBCS.h:214
const StorageSite & _faces
Definition: GenericBCS.h:446
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyDielectricInterfaceBC ( const int  f,
const X &  hCoeff,
const X &  Xinf,
const X &  source 
) const
inline

Definition at line 367 of file GenericBCS.h.

Referenced by BaseGenericBCS< Vector< T, N >, DiagonalTensor< T, N >, T >::applyDielectricInterfaceBC().

369  {
370  // here the hCoeff = dielectric_constant / dielectric_thickness
371  // source = totalcharge * dielectric_thickness / 4. for 2D
372  // source = totalcharge * dielectric_thickness / 6. for 3D
373  const int c0 = _faceCells(f,0);
374  const int c1 = _faceCells(f,1);
375 
376  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
377  return;
378 
379  // the current value of flux and its Jacobians
380  const X fluxInterior = -_r[c1];
381 
382  // flux based on current boundary value
383 
384  X fluxSource = source * _faceAreaMag[f];
385  if (_is2D)
386  fluxSource /= 2.0;
387  else
388  fluxSource /= 2.0;
389  const X fluxBoundary = -hCoeff*(_x[c1]-Xinf)*_faceAreaMag[f] + fluxSource;
390  const X dFlux = fluxBoundary-fluxInterior;
391 
392  _r[c1] = dFlux;
393 
394  // add this to complete the Jacobian wrt boundar value
395  _dRdXDiag[c1] -= hCoeff*_faceAreaMag[f];
396 
397  // mark this row as a "boundary" row so that we will update it
398  // after the overall system is solved
399  _dRdX.setBoundary(c1);
400 
401  _flux[f] = fluxBoundary;
402  _rFlux[f] = 0;
404  _dFluxdX.setCoeffR(f,-hCoeff*_faceAreaMag[f]);
406 
407  }
BBMatrix & _dFluxdFlux
Definition: GenericBCS.h:456
const TArray & _faceAreaMag
Definition: GenericBCS.h:464
const IntArray & _ibType
Definition: GenericBCS.h:448
void setCoeffR(const int f, const OffDiag &c)
const CRConnectivity & _faceCells
Definition: GenericBCS.h:449
XArray & _rFlux
Definition: GenericBCS.h:462
void setCoeffL(const int f, const OffDiag &c)
const bool _is2D
Definition: GenericBCS.h:467
XArray & _x
Definition: GenericBCS.h:459
XArray & _r
Definition: GenericBCS.h:460
void setBoundary(const int nr)
Definition: CRMatrix.h:1056
XArray & _flux
Definition: GenericBCS.h:461
FMatrix & _dFluxdX
Definition: GenericBCS.h:455
DiagArray & _dRdXDiag
Definition: GenericBCS.h:458
CCMatrix & _dRdX
Definition: GenericBCS.h:454
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyDielectricInterfaceBC ( const X &  hCoeff,
const X &  Xinf,
const X &  source 
) const
inline

Definition at line 409 of file GenericBCS.h.

411  {
412  for(int i=0; i<_faces.getCount(); i++)
413  applyDielectricInterfaceBC(i,hCoeff, Xinf, source );
414  }
const StorageSite & _faces
Definition: GenericBCS.h:446
int getCount() const
Definition: StorageSite.h:39
void applyDielectricInterfaceBC(const int f, const X &hCoeff, const X &Xinf, const X &source) const
Definition: GenericBCS.h:367
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyDirichletBC ( int  f,
const X &  bValue 
) const
inline

Definition at line 77 of file GenericBCS.h.

Referenced by BaseGenericBCS< Vector< T, N >, DiagonalTensor< T, N >, T >::applyDirichletBC(), BaseGenericBCS< Vector< T, N >, DiagonalTensor< T, N >, T >::applyFlowBC(), and slipJumpMomentumBC().

78  {
79  const int c0 = _faceCells(f,0);
80  const int c1 = _faceCells(f,1);
81 
82  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
83  return;
84 
85  // the current value of flux and its Jacobians
86  const X fluxB = -_r[c1];
87  const OffDiag dFluxdXC0 = -_assembler.getCoeff10(f);
88  const Diag dFluxdXC1 = -_dRdXDiag[c1];
89  const OffDiag dRC0dXC1 = _assembler.getCoeff01(f);
90 
91  // since we know the boundary value, compute the boundary
92  // x correction and it's contribution to the residual for c0; we
93  // can then eliminate the coefficient to the boundary cell
94 
95  const X dXC1 = bValue - _x[c1];
96  const X dFlux = dFluxdXC1*dXC1;
97  const X dRC0 = dRC0dXC1*dXC1;
98  _r[c0] += dRC0;
99 
101 
102  // set the boundary value and make its correction equation an
103  // identity
104  _x[c1] = bValue;
108 
109  //setup the equation for the boundary flux correction
110  _dFluxdX.setCoeffL(f,dFluxdXC0);
112  _flux[f] = fluxB;
113  _rFlux[f] = dFlux;
115  }
BBMatrix & _dFluxdFlux
Definition: GenericBCS.h:456
const IntArray & _ibType
Definition: GenericBCS.h:448
CCAssembler & _assembler
Definition: GenericBCS.h:457
void setCoeffR(const int f, const OffDiag &c)
OffDiag & getCoeff10(const int np)
Definition: CRMatrix.h:131
const CRConnectivity & _faceCells
Definition: GenericBCS.h:449
XArray & _rFlux
Definition: GenericBCS.h:462
void setCoeffL(const int f, const OffDiag &c)
XArray & _x
Definition: GenericBCS.h:459
XArray & _r
Definition: GenericBCS.h:460
OffDiag & getCoeff01(const int np)
Definition: CRMatrix.h:126
XArray & _flux
Definition: GenericBCS.h:461
FMatrix & _dFluxdX
Definition: GenericBCS.h:455
DiagArray & _dRdXDiag
Definition: GenericBCS.h:458
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyDirichletBC ( const X &  bValue) const
inline

Definition at line 117 of file GenericBCS.h.

118  {
119  for(int i=0; i<_faces.getCount(); i++)
120  applyDirichletBC(i,bValue);
121  }
const StorageSite & _faces
Definition: GenericBCS.h:446
void applyDirichletBC(int f, const X &bValue) const
Definition: GenericBCS.h:77
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyDirichletBC ( const FloatValEvaluator< X > &  bValue) const
inline

Definition at line 123 of file GenericBCS.h.

124  {
125  for(int i=0; i<_faces.getCount(); i++)
126  applyDirichletBC(i,bValue[i]);
127  }
const StorageSite & _faces
Definition: GenericBCS.h:446
void applyDirichletBC(int f, const X &bValue) const
Definition: GenericBCS.h:77
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyExtrapolationBC ( ) const
inline

Definition at line 172 of file GenericBCS.h.

Referenced by BaseGenericBCS< Vector< T, N >, DiagonalTensor< T, N >, T >::applyExtrapolationBC(), and BaseGenericBCS< Vector< T, N >, DiagonalTensor< T, N >, T >::applyFlowBC().

173  {
174  for(int i=0; i<_faces.getCount(); i++)
176  }
const StorageSite & _faces
Definition: GenericBCS.h:446
int getCount() const
Definition: StorageSite.h:39
void applyExtrapolationBC() const
Definition: GenericBCS.h:172
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyExtrapolationBC ( const int  f) const
inline

Definition at line 180 of file GenericBCS.h.

181  {
182  const int c0 = _faceCells(f,0);
183  const int c1 = _faceCells(f,1);
184 
185  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
186  return;
187 
188  // the current value of flux and its Jacobians
189  const X fluxB = -_r[c1];
190  const OffDiag dFluxdXC0 = -_assembler.getCoeff10(f);
191  const Diag dFluxdXC1 = -_dRdXDiag[c1];
192 
193  const X xc0mxc1 = _x[c0]-_x[c1];
194 
195  // eliminate boundary dependency from cell equation
196  _dRdXDiag[c0] += dFluxdXC1;
197  _r[c0] += dFluxdXC1*xc0mxc1;
198  _assembler.getCoeff01(f) = 0;
199 
200  // boundary value equation
203  _r[c1] = xc0mxc1;
204  _dRdX.setBoundary(c1);
205 
206  //setup the equation for the boundary flux correction
207  _dFluxdX.setCoeffL(f,dFluxdXC0);
208  _dFluxdX.setCoeffR(f,dFluxdXC0); // should really be dFluxdXC1
209  _flux[f] = fluxB;
210  _rFlux[f] = T_Scalar(0);
212  }
BBMatrix & _dFluxdFlux
Definition: GenericBCS.h:456
const IntArray & _ibType
Definition: GenericBCS.h:448
CCAssembler & _assembler
Definition: GenericBCS.h:457
void setCoeffR(const int f, const OffDiag &c)
OffDiag & getCoeff10(const int np)
Definition: CRMatrix.h:131
const CRConnectivity & _faceCells
Definition: GenericBCS.h:449
XArray & _rFlux
Definition: GenericBCS.h:462
void setCoeffL(const int f, const OffDiag &c)
XArray & _x
Definition: GenericBCS.h:459
NumTypeTraits< X >::T_Scalar T_Scalar
Definition: GenericBCS.h:26
XArray & _r
Definition: GenericBCS.h:460
OffDiag & getCoeff01(const int np)
Definition: CRMatrix.h:126
void setBoundary(const int nr)
Definition: CRMatrix.h:1056
XArray & _flux
Definition: GenericBCS.h:461
FMatrix & _dFluxdX
Definition: GenericBCS.h:455
DiagArray & _dRdXDiag
Definition: GenericBCS.h:458
CCMatrix & _dRdX
Definition: GenericBCS.h:454
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyFlowBC ( const TArray convFlux,
const X &  bValue 
) const
inline

Definition at line 418 of file GenericBCS.h.

419  {
420  for(int f=0; f<_faces.getCount(); f++)
421  if (convFlux[f] < 0)
422  applyDirichletBC(f,bValue);
423  else
425  }
const StorageSite & _faces
Definition: GenericBCS.h:446
void applyDirichletBC(int f, const X &bValue) const
Definition: GenericBCS.h:77
int getCount() const
Definition: StorageSite.h:39
void applyExtrapolationBC() const
Definition: GenericBCS.h:172
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyInterfaceBC ( const int  f) const
inline

Definition at line 325 of file GenericBCS.h.

Referenced by ThermalModel< T >::Impl::linearize(), FractureModel< T >::Impl::linearize(), VacancyModel< T >::Impl::linearize(), SpeciesModel< T >::Impl::linearize(), ElectricModel< T >::Impl::linearizeChargeTransport(), KeModel< T >::Impl::linearizedissipation(), ElectricModel< T >::Impl::linearizeElectroStatics(), KeModel< T >::Impl::linearizeenergy(), FlowModel< T >::Impl::linearizeMomentum(), BatteryModel< T >::Impl::linearizePC(), BatteryModel< T >::Impl::linearizePC_Thermal(), BatteryModel< T >::Impl::linearizePotential(), BatteryModel< T >::Impl::linearizeSpecies(), and BatteryModel< T >::Impl::linearizeThermal().

326  {
327  // the boundary cell could be either c0 or c1 at an interface
328  int cb = _faceCells(f,1);
330  if (cb < _cells.getSelfCount())
331  {
332  cb = _faceCells(f,0);
333  sign *= -1.0;
334  }
335 
336 
337  // the current value of flux and its Jacobians
338  const X fluxInterior = -_r[cb];
339  const OffDiag dFluxdXC0 = -sign*_assembler.getCoeff10(f);
340  const OffDiag dFluxdXC1 = sign*_assembler.getCoeff01(f);
341 
342 
343  _r[cb] = T_Scalar(0);
344 
345  if (sign>0)
347  else
349 
350  //setup the equation for the boundary flux correction
351  _dFluxdX.setCoeffL(f,dFluxdXC0);
352  _dFluxdX.setCoeffR(f,dFluxdXC1);
353  _flux[f] = fluxInterior;
354  _rFlux[f] = T_Scalar(0);
356  }
int getSelfCount() const
Definition: StorageSite.h:40
BBMatrix & _dFluxdFlux
Definition: GenericBCS.h:456
CCAssembler & _assembler
Definition: GenericBCS.h:457
void setCoeffR(const int f, const OffDiag &c)
OffDiag & getCoeff10(const int np)
Definition: CRMatrix.h:131
const CRConnectivity & _faceCells
Definition: GenericBCS.h:449
XArray & _rFlux
Definition: GenericBCS.h:462
void setCoeffL(const int f, const OffDiag &c)
NumTypeTraits< X >::T_Scalar T_Scalar
Definition: GenericBCS.h:26
XArray & _r
Definition: GenericBCS.h:460
OffDiag & getCoeff01(const int np)
Definition: CRMatrix.h:126
const StorageSite & _cells
Definition: GenericBCS.h:447
XArray & _flux
Definition: GenericBCS.h:461
FMatrix & _dFluxdX
Definition: GenericBCS.h:455
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyInterfaceBC ( ) const
inline

Definition at line 358 of file GenericBCS.h.

Referenced by BaseGenericBCS< Vector< T, N >, DiagonalTensor< T, N >, T >::applyInterfaceBC().

359  {
360  for(int i=0; i<_faces.getCount(); i++)
361  applyInterfaceBC(i);
362  }
void applyInterfaceBC() const
Definition: GenericBCS.h:358
const StorageSite & _faces
Definition: GenericBCS.h:446
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyMixedBC ( const int  f,
const X &  hCoeff,
const X &  emissivity,
const X &  Xinf 
) const
inline

Definition at line 290 of file GenericBCS.h.

292  {
293  const int c0 = _faceCells(f,0);
294  const int c1 = _faceCells(f,1);
295 
296  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
297  return;
298  //The value of the Stefan-Boltzman constant
299  double s_b_const = 5.670373E-8;
300 
301  // the current value of flux and its Jacobians
302  const X fluxInterior = -_r[c1];
303 
304  // flux based on current boundary value
305  const X fluxBoundary = (-emissivity*s_b_const*(_x[c1]*_x[c1]*_x[c1]*_x[c1]-Xinf*Xinf*Xinf*Xinf)-hCoeff*(_x[c1]-Xinf))*_faceAreaMag[f];
306 
307  const X dFlux = fluxBoundary-fluxInterior;
308 
309  _r[c1] = dFlux;
310 
311  // add this to complete the Jacobian wrt boundary value
312  _dRdXDiag[c1] -= (4*emissivity*s_b_const*_x[c1]*_x[c1]*_x[c1]+hCoeff)*_faceAreaMag[f];
313 
314  // mark this row as a "boundary" row so that we will update it
315  // after the overall system is solved
316  _dRdX.setBoundary(c1);
317 
318  _flux[f] = fluxBoundary;
319  _rFlux[f] = 0;
321  _dFluxdX.setCoeffR(f,-4*emissivity*s_b_const*_x[c1]*_x[c1]*_x[c1]*_faceAreaMag[f]);
323  }
BBMatrix & _dFluxdFlux
Definition: GenericBCS.h:456
const TArray & _faceAreaMag
Definition: GenericBCS.h:464
const IntArray & _ibType
Definition: GenericBCS.h:448
void setCoeffR(const int f, const OffDiag &c)
const CRConnectivity & _faceCells
Definition: GenericBCS.h:449
XArray & _rFlux
Definition: GenericBCS.h:462
void setCoeffL(const int f, const OffDiag &c)
XArray & _x
Definition: GenericBCS.h:459
XArray & _r
Definition: GenericBCS.h:460
void setBoundary(const int nr)
Definition: CRMatrix.h:1056
XArray & _flux
Definition: GenericBCS.h:461
FMatrix & _dFluxdX
Definition: GenericBCS.h:455
DiagArray & _dRdXDiag
Definition: GenericBCS.h:458
CCMatrix & _dRdX
Definition: GenericBCS.h:454
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyNeumannBC ( const int  f,
const X &  specifiedFlux 
) const
inline

Definition at line 129 of file GenericBCS.h.

Referenced by BaseGenericBCS< Vector< T, N >, DiagonalTensor< T, N >, T >::applyNeumannBC().

131  {
132  const int c0 = _faceCells(f,0);
133  const int c1 = _faceCells(f,1);
134 
135  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
136  return;
137  // the current value of flux and its Jacobians
138  const X fluxB = -_r[c1];
139 
140 
141  // since we know the boundary flux, compute the boundary flux
142  // correction and add it to the c0 residual; also eliminate
143  // coeff to the boundary cell and remove it from the ap coeff
144 
145  const X dFlux = specifiedFlux*_faceAreaMag[f] - fluxB;
146  // setup the equation for the boundary value; the coefficients
147  // are already computed so just need to set the rhs
148  _r[c1] = dFlux;
149 
150  // mark this row as a "boundary" row so that we will update it
151  // after the overall system is solved
152  _dRdX.setBoundary(c1);
153 
154  // fix the boundary flux to the specified value
155  _flux[f] = specifiedFlux*_faceAreaMag[f];
157  }
BBMatrix & _dFluxdFlux
Definition: GenericBCS.h:456
const TArray & _faceAreaMag
Definition: GenericBCS.h:464
const IntArray & _ibType
Definition: GenericBCS.h:448
const CRConnectivity & _faceCells
Definition: GenericBCS.h:449
XArray & _r
Definition: GenericBCS.h:460
void setBoundary(const int nr)
Definition: CRMatrix.h:1056
XArray & _flux
Definition: GenericBCS.h:461
CCMatrix & _dRdX
Definition: GenericBCS.h:454
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyNeumannBC ( const X &  bFlux) const
inline

Definition at line 160 of file GenericBCS.h.

161  {
162  for(int i=0; i<_faces.getCount(); i++)
163  applyNeumannBC(i,bFlux);
164  }
const StorageSite & _faces
Definition: GenericBCS.h:446
void applyNeumannBC(const int f, const X &specifiedFlux) const
Definition: GenericBCS.h:129
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyNeumannBC ( const FloatValEvaluator< X > &  bFlux) const
inline

Definition at line 166 of file GenericBCS.h.

167  {
168  for(int i=0; i<_faces.getCount(); i++)
169  applyNeumannBC(i,bFlux[i]);
170  }
const StorageSite & _faces
Definition: GenericBCS.h:446
void applyNeumannBC(const int f, const X &specifiedFlux) const
Definition: GenericBCS.h:129
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyNonzeroDiagBC ( ) const
inline

Definition at line 427 of file GenericBCS.h.

Referenced by BaseGenericBCS< Vector< T, N >, DiagonalTensor< T, N >, T >::applyNonzeroDiagBC().

428  {
429  for(int i=0; i<_faces.getCount(); i++)
431  }
void applyNonzeroDiagBC() const
Definition: GenericBCS.h:427
const StorageSite & _faces
Definition: GenericBCS.h:446
int getCount() const
Definition: StorageSite.h:39
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyNonzeroDiagBC ( int  f) const
inline

Definition at line 433 of file GenericBCS.h.

434  {
435  const int c0 = _faceCells(f,0);
436  const int c1 = _faceCells(f,1);
437 
438  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
439  return;
440 
441  _dRdXDiag[c1][0] = T_Scalar(-1.0);
442  }
const IntArray & _ibType
Definition: GenericBCS.h:448
const CRConnectivity & _faceCells
Definition: GenericBCS.h:449
NumTypeTraits< X >::T_Scalar T_Scalar
Definition: GenericBCS.h:26
DiagArray & _dRdXDiag
Definition: GenericBCS.h:458
template<class X, class Diag, class OffDiag>
void BaseGenericBCS< X, Diag, OffDiag >::applyRadiationBC ( const int  f,
const X &  emissivity,
const X &  Xinf 
) const
inline

Definition at line 253 of file GenericBCS.h.

255  {
256  const int c0 = _faceCells(f,0);
257  const int c1 = _faceCells(f,1);
258 
259  if (_ibType[c0] != Mesh::IBTYPE_FLUID)
260  return;
261  //The value of the Stefan-Boltzman constant
262  double s_b_const = 5.670373E-8;
263 
264  // the current value of flux and its Jacobians
265  const X fluxInterior = -_r[c1];
266 
267  // flux based on current boundary value
268  const X fluxBoundary = -emissivity*s_b_const*\
269  (_x[c1]*_x[c1]*_x[c1]*_x[c1]-Xinf*Xinf*Xinf*Xinf)*_faceAreaMag[f];
270 
271  const X dFlux = fluxBoundary-fluxInterior;
272 
273  _r[c1] = dFlux;
274 
275  // add this to complete the Jacobian wrt boundary value
276  _dRdXDiag[c1] -= \
277  4*emissivity*s_b_const*_x[c1]*_x[c1]*_x[c1]*_faceAreaMag[f];
278 
279  // mark this row as a "boundary" row so that we will update it
280  // after the overall system is solved
281  _dRdX.setBoundary(c1);
282 
283  _flux[f] = fluxBoundary;
284  _rFlux[f] = 0;
286  _dFluxdX.setCoeffR(f,-4*emissivity*s_b_const*_x[c1]*_x[c1]*_x[c1]*_faceAreaMag[f]);
288  }
BBMatrix & _dFluxdFlux
Definition: GenericBCS.h:456
const TArray & _faceAreaMag
Definition: GenericBCS.h:464
const IntArray & _ibType
Definition: GenericBCS.h:448
void setCoeffR(const int f, const OffDiag &c)
const CRConnectivity & _faceCells
Definition: GenericBCS.h:449
XArray & _rFlux
Definition: GenericBCS.h:462
void setCoeffL(const int f, const OffDiag &c)
XArray & _x
Definition: GenericBCS.h:459
XArray & _r
Definition: GenericBCS.h:460
void setBoundary(const int nr)
Definition: CRMatrix.h:1056
XArray & _flux
Definition: GenericBCS.h:461
FMatrix & _dFluxdX
Definition: GenericBCS.h:455
DiagArray & _dRdXDiag
Definition: GenericBCS.h:458
CCMatrix & _dRdX
Definition: GenericBCS.h:454

Member Data Documentation

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

Definition at line 465 of file GenericBCS.h.

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

Definition at line 463 of file GenericBCS.h.

template<class X, class Diag, class OffDiag>
const StorageSite& BaseGenericBCS< X, Diag, OffDiag >::_cells
protected
template<class X, class Diag, class OffDiag>
const Field& BaseGenericBCS< X, Diag, OffDiag >::_fluxField
protected

Definition at line 451 of file GenericBCS.h.

template<class X, class Diag, class OffDiag>
const MultiField::ArrayIndex BaseGenericBCS< X, Diag, OffDiag >::_fluxIndex
protected

Definition at line 453 of file GenericBCS.h.

template<class X, class Diag, class OffDiag>
const bool BaseGenericBCS< X, Diag, OffDiag >::_is2D
protected
template<class X, class Diag, class OffDiag>
const Field& BaseGenericBCS< X, Diag, OffDiag >::_varField
protected

Definition at line 450 of file GenericBCS.h.

template<class X, class Diag, class OffDiag>
const MultiField::ArrayIndex BaseGenericBCS< X, Diag, OffDiag >::_xIndex
protected

Definition at line 452 of file GenericBCS.h.


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