1 #ifndef _BATTERYBINARYELECTROLYTEDISCRETIZATION_H_
2 #define _BATTERYBINARYELECTROLYTEDISCRETIZATION_H_
26 template<
class X,
class Diag,
class OffDiag>
50 const Field& diffusivityField,
51 const Field& concField,
52 const Field& concGradientField,
53 const Field& tempField,
54 const int ElectrolyteMeshID) :
85 XArray& rCell =
dynamic_cast<XArray&
>(rField[cVarIndex]);
107 const int nFaces = faces.
getCount();
111 const TArray& faceAreaMag =
116 for(
int f=0; f<nFaces; f++)
118 const int c0 = faceCells(f,0);
119 const int c1 = faceCells(f,1);
124 VectorT3 ds=cellCentroid[c1]-cellCentroid[c0];
135 ds = faceCentroid[f]-cellCentroid[c0];
140 ds = cellCentroid[c1]-faceCentroid[f];
146 faceDiffusivity = diffCell[c1];
148 faceDiffusivity = diffCell[c0];
154 faceTemp = tempCell[c1];
156 faceTemp = tempCell[c0];
162 const T_Scalar transportNumber = 0.4;
166 faceDiffusivity = faceDiffusivity*(-2.0)*R*faceTemp/F*(1.0-transportNumber);
168 const T_Scalar diffMetric = faceAreaMag[f]*faceAreaMag[f]/
dot(faceArea[f],ds);
169 const T_Scalar diffCoeff = faceDiffusivity*diffMetric;
170 const VectorT3 secondaryCoeff = faceDiffusivity*(faceArea[f]-ds*diffMetric);
172 const XGrad gradF = (lnSpecConcGradCell[c0]*vol0+lnSpecConcGradCell[c1]*vol1)/(vol0+vol1);
174 const X dFluxSecondary = gradF*secondaryCoeff;
176 const X dFlux = diffCoeff*(lnSpecConcCell[c1]-lnSpecConcCell[c0]) + dFluxSecondary;
shared_ptr< FaceGroup > FaceGroupPtr
CRMatrix< Diag, OffDiag, X > CCMatrix
T harmonicAverage(const T &x0, const T &x1)
const GeomFields & _geomFields
const FaceGroupList & getAllFaceGroups() const
const Field & _diffusivityField
void discretize(const Mesh &mesh, MultiFieldMatrix &mfmatrix, MultiField &xField, MultiField &rField)
const int _ElectrolyteMeshID
Vector< T_Scalar, 3 > VectorT3
BatteryBinaryElectrolyteDiscretization(const MeshList &meshes, const GeomFields &geomFields, Field &varField, const Field &diffusivityField, const Field &concField, const Field &concGradientField, const Field &tempField, const int ElectrolyteMeshID)
pair< const Field *, const StorageSite * > ArrayIndex
CCMatrix::PairWiseAssembler CCAssembler
const StorageSite & getCells() const
const CRConnectivity & getFaceCells(const StorageSite &site) const
const Field & _concGradientField
CCMatrix::DiagArray DiagArray
Array< VectorT3 > VectorT3Array
T dot(const Vector< T, 3 > &a, const Vector< T, 3 > &b)
vector< Mesh * > MeshList
NumTypeTraits< X >::T_Scalar T_Scalar