21 template<
class X,
class Diag,
class OffDiag>
74 _is2D(mesh.getDimension()==2)
86 const X fluxB = -
_r[c1];
95 const X dXC1 = bValue -
_x[c1];
96 const X dFlux = dFluxdXC1*dXC1;
97 const X dRC0 = dRC0dXC1*dXC1;
130 const X& specifiedFlux)
const
138 const X fluxB = -
_r[c1];
189 const X fluxB = -
_r[c1];
193 const X xc0mxc1 =
_x[c0]-
_x[c1];
197 _r[c0] += dFluxdXC1*xc0mxc1;
215 const X& hCoeff,
const X& Xinf)
const
224 const X fluxInterior = -
_r[c1];
229 const X dFlux = fluxBoundary-fluxInterior;
240 _flux[f] = fluxBoundary;
254 const X& emissivity,
const X& Xinf)
const
262 double s_b_const = 5.670373E-8;
265 const X fluxInterior = -
_r[c1];
268 const X fluxBoundary = -emissivity*s_b_const*\
271 const X dFlux = fluxBoundary-fluxInterior;
283 _flux[f] = fluxBoundary;
291 const X& emissivity,
const X& Xinf)
const
299 double s_b_const = 5.670373E-8;
302 const X fluxInterior = -
_r[c1];
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];
307 const X dFlux = fluxBoundary-fluxInterior;
318 _flux[f] = fluxBoundary;
338 const X fluxInterior = -
_r[cb];
353 _flux[f] = fluxInterior;
368 const X& Xinf,
const X& source)
const
380 const X fluxInterior = -
_r[c1];
389 const X fluxBoundary = -hCoeff*(
_x[c1]-Xinf)*_faceAreaMag[f] + fluxSource;
390 const X dFlux = fluxBoundary-fluxInterior;
401 _flux[f] = fluxBoundary;
410 const X& Xinf,
const X& source)
const
472 template<
class X,
class Diag,
class OffDiag>
486 T_Parent(faces,mesh,geomFields,varField,fluxField,matrix,xField,rField)
501 const Diag dFluxdXC1 = -this->
_dRdXDiag[c1];
503 const X xB = this->
_x[c0];
506 const X xc1mxB = this->
_x[c1]-xB;
511 this->
_r[c0] -= dFluxdXC1*xc1mxB;
522 this->
_flux[f] = X(0);
530 template<
class T,
int N>
565 T_Parent(faces,mesh,geomFields,varField,fluxField,matrix,xField,rField)
577 const X fluxB = -this->
_r[c1];
583 const T xC0_dotn =
dot(this->
_x[c0],en);
584 const X xB = this->
_x[c0] - 2*xC0_dotn * en;
587 dxBdxC0[0] = 1.0 - 2.0*en[0]*en[0];
588 dxBdxC0[1] = 1.0 - 2.0*en[1]*en[1];
589 dxBdxC0[2] = 1.0 - 2.0*en[2]*en[2];
592 const X dXC1 = xB-this->
_x[c1];
593 const X dFlux = dFluxdXC1*dXC1;
597 this->
_r[c0] += dRC0dXC1*dXC1;
610 this->
_flux[f] = fluxB;
619 template<
class T,
int N>
621 :
public BaseGenericBCS<Vector<T,N>, DiagonalTensor<T,N>, DiagonalTensor<T,N> >
654 T_Parent(faces,mesh,geomFields,varField,fluxField,matrix,xField,rField)
666 const X fluxB = -this->
_r[c1];
672 const T xC0_dotn =
dot(this->
_x[c0],en);
673 const X xB = this->
_x[c0] - 2.0*xC0_dotn * en;
675 const X dXC1 = xB-this->
_x[c1];
676 const X dFlux = dFluxdXC1*dXC1;
680 this->
_r[c0] += dRC0dXC1*dXC1;
700 template<
class T,
int N>
702 :
public BaseGenericBCS<Vector<T,N>, SquareTensor<T,N>, SquareTensor<T,N> >
735 T_Parent(faces,mesh,geomFields,varField,fluxField,matrix,xField,rField)
747 const X fluxB = -this->
_r[c1];
752 const T xC0_dotn =
dot(this->
_x[c0],en);
753 const X xB = this->
_x[c0] - xC0_dotn * en;
755 Diag dxBdxC0(Diag::getZero());
756 dxBdxC0(0,0) = 1.0 - en[0]*en[0];
757 dxBdxC0(0,1) = - en[0]*en[1];
758 dxBdxC0(0,2) = - en[0]*en[2];
760 dxBdxC0(1,0) = - en[1]*en[0];
761 dxBdxC0(1,1) = 1.0 - en[1]*en[1];
762 dxBdxC0(1,2) = - en[1]*en[2];
764 dxBdxC0(2,0) = - en[2]*en[0];
765 dxBdxC0(2,1) = - en[2]*en[1];
766 dxBdxC0(2,2) = 1.0 - en[2]*en[2];
769 const X xc1mxB = this->
_x[c1]-xB;
773 this->
_dRdXDiag[c0] += dFluxdXC1*dxBdxC0;
774 this->
_r[c0] += dFluxdXC1*xc1mxB;
786 this->
_flux[f] = fluxB - dFluxdXC1*xc1mxB;
void applySymmetryBC() const
SquareTensor< T, N > OffDiag
GenericBCS(const StorageSite &faces, const Mesh &mesh, const GeomFields &geomFields, Field &varField, Field &fluxField, MultiFieldMatrix &matrix, MultiField &xField, MultiField &rField)
DiagonalTensor< T, N > OffDiag
Array< VectorT3 > VectorT3Array
const VectorT3Array & _faceArea
void applyMixedBC(const int f, const X &hCoeff, const X &emissivity, const X &Xinf) const
const TArray & _faceAreaMag
Array< VectorT3 > VectorT3Array
void applyConvectionBC(const int f, const X &hCoeff, const X &Xinf) const
CRMatrix< Diag, OffDiag, X > CCMatrix
CRMatrix< Diag, OffDiag, X > CCMatrix
GenericBCS(const StorageSite &faces, const Mesh &mesh, const GeomFields &geomFields, Field &varField, Field &fluxField, MultiFieldMatrix &matrix, MultiField &xField, MultiField &rField)
GenericBCS(const StorageSite &faces, const Mesh &mesh, const GeomFields &geomFields, Field &varField, Field &fluxField, MultiFieldMatrix &matrix, MultiField &xField, MultiField &rField)
Vector< T_Scalar, 3 > VectorT3
void applyExtrapolationBC(const int f) const
void applyDirichletBC(const X &bValue) const
CRMatrix< Diag, OffDiag, X > CCMatrix
DiagonalMatrix< Diag, X > BBMatrix
void applySymmetryBC() const
void applySymmetryBC() const
void applyNonzeroDiagBC() const
void applyDirichletBC(const FloatValEvaluator< X > &bValue) const
void setCoeffR(const int f, const OffDiag &c)
OffDiag & getCoeff10(const int np)
BaseGenericBCS< Vector< T, N >, DiagonalTensor< T, N >, DiagonalTensor< T, N > > T_Parent
void applyInterfaceBC() const
const CRConnectivity & _faceCells
FluxJacobianMatrix< OffDiag, X > FMatrix
FluxJacobianMatrix< Diag, X > FMatrix
CRMatrix< Diag, OffDiag, X > CCMatrix
FluxJacobianMatrix< OffDiag, X > FMatrix
BaseGenericBCS< X, Diag, OffDiag > T_Parent
DiagonalMatrix< Diag, X > BBMatrix
void applyNeumannBC(const X &bFlux) const
Array< VectorT3 > VectorT3Array
Vector< T_Scalar, 3 > VectorT3
const StorageSite & _faces
void setCoeffL(const int f, const OffDiag &c)
void applyNeumannBC(const FloatValEvaluator< X > &bFlux) const
Vector< T_Scalar, 3 > VectorT3
CCMatrix::PairWiseAssembler CCAssembler
pair< const Field *, const StorageSite * > ArrayIndex
BaseGenericBCS(const StorageSite &faces, const Mesh &mesh, const GeomFields &geomFields, Field &varField, Field &fluxField, MultiFieldMatrix &matrix, MultiField &xField, MultiField &rField)
Array< OffDiag > OffDiagArray
DiagonalMatrix< Diag, X > BBMatrix
DiagonalTensor< T, N > Diag
NumTypeTraits< X >::T_Scalar T_Scalar
const MultiField::ArrayIndex _xIndex
void applyDirichletBC(int f, const X &bValue) const
FluxJacobianMatrix< OffDiag, X > FMatrix
void applyInterfaceBC(const int f) const
void applyRadiationBC(const int f, const X &emissivity, const X &Xinf) const
void applyNonzeroDiagBC(int f) const
OffDiag & getCoeff01(const int np)
NumTypeTraits< X >::T_Scalar T_Scalar
Array< OffDiag > OffDiagArray
void applyNeumannBC(const int f, const X &specifiedFlux) const
const StorageSite & _cells
void setBoundary(const int nr)
void applyConvectionBC(const X &hCoeff, const X &Xinf) const
NumTypeTraits< X >::T_Scalar T_Scalar
CCMatrix::PairWiseAssembler CCAssembler
const MultiField::ArrayIndex _fluxIndex
void applyDielectricInterfaceBC(const X &hCoeff, const X &Xinf, const X &source) const
SquareTensor< T, N > Diag
void applyFlowBC(const TArray &convFlux, const X &bValue) const
void applyDielectricInterfaceBC(const int f, const X &hCoeff, const X &Xinf, const X &source) const
CCMatrix::PairWiseAssembler CCAssembler
DiagonalTensor< T, N > Diag
DiagonalMatrix< Diag, X > BBMatrix
const Field & _areaMagField
GenericBCS(const StorageSite &faces, const Mesh &mesh, const GeomFields &geomFields, Field &varField, Field &fluxField, MultiFieldMatrix &matrix, MultiField &xField, MultiField &rField)
Array< OffDiag > OffDiagArray
Vector< T_Scalar, 3 > VectorT3
Array< OffDiag > OffDiagArray
T dot(const Vector< T, 3 > &a, const Vector< T, 3 > &b)
void applySymmetryBC() const
NumTypeTraits< X >::T_Scalar T_Scalar
BaseGenericBCS< Vector< T, N >, DiagonalTensor< T, N >, T > T_Parent
CCMatrix::PairWiseAssembler CCAssembler
Array< VectorT3 > VectorT3Array
BaseGenericBCS< Vector< T, N >, SquareTensor< T, N >, SquareTensor< T, N > > T_Parent
void applyExtrapolationBC() const