1 #ifndef _BATTERYELECTRICDIFFUSIONDISCRETIZATION_H_
2 #define _BATTERYELECTRICDIFFUSIONDISCRETIZATION_H_
26 template<
class X,
class Diag,
class OffDiag>
50 const Field& diffusivityField,
51 const Field& concField,
52 const Field& concGradientField,
53 const int ElectrolyteMeshID) :
83 XArray& rCell =
dynamic_cast<XArray&
>(rField[cVarIndex]);
102 const int nFaces = faces.
getCount();
106 const TArray& faceAreaMag =
111 for(
int f=0; f<nFaces; f++)
113 const int c0 = faceCells(f,0);
114 const int c1 = faceCells(f,1);
119 VectorT3 ds=cellCentroid[c1]-cellCentroid[c0];
130 ds = faceCentroid[f]-cellCentroid[c0];
135 ds = cellCentroid[c1]-faceCentroid[f];
141 faceDiffusivity = diffCell[c1];
143 faceDiffusivity = diffCell[c0];
148 const T_Scalar transportNumber = 0.4;
152 faceDiffusivity = faceDiffusivity*(-2.0)*R*Temp/F*(1.0-transportNumber);
154 const T_Scalar diffMetric = faceAreaMag[f]*faceAreaMag[f]/
dot(faceArea[f],ds);
155 const T_Scalar diffCoeff = faceDiffusivity*diffMetric;
156 const VectorT3 secondaryCoeff = faceDiffusivity*(faceArea[f]-ds*diffMetric);
158 const XGrad gradF = (lnSpecConcGradCell[c0]*vol0+lnSpecConcGradCell[c1]*vol1)/(vol0+vol1);
160 const X dFluxSecondary = gradF*secondaryCoeff;
162 const X dFlux = diffCoeff*(lnSpecConcCell[c1]-lnSpecConcCell[c0]) + dFluxSecondary;
shared_ptr< FaceGroup > FaceGroupPtr
T harmonicAverage(const T &x0, const T &x1)
const Field & _diffusivityField
const FaceGroupList & getAllFaceGroups() const
BatteryElectricDiffusionDiscretization(const MeshList &meshes, const GeomFields &geomFields, Field &varField, const Field &diffusivityField, const Field &concField, const Field &concGradientField, const int ElectrolyteMeshID)
pair< const Field *, const StorageSite * > ArrayIndex
Vector< T_Scalar, 3 > VectorT3
const StorageSite & getCells() const
const int _ElectrolyteMeshID
const CRConnectivity & getFaceCells(const StorageSite &site) const
Array< VectorT3 > VectorT3Array
CRMatrix< Diag, OffDiag, X > CCMatrix
CCMatrix::PairWiseAssembler CCAssembler
T dot(const Vector< T, 3 > &a, const Vector< T, 3 > &b)
void discretize(const Mesh &mesh, MultiFieldMatrix &mfmatrix, MultiField &xField, MultiField &rField)
CCMatrix::DiagArray DiagArray
vector< Mesh * > MeshList
NumTypeTraits< X >::T_Scalar T_Scalar
const Field & _concGradientField
const GeomFields & _geomFields