1 #ifndef _BATTERYPCBINARYELECTROLYTEDISCRETIZATION_H_
2 #define _BATTERYPCBINARYELECTROLYTEDISCRETIZATION_H_
25 template<
class X,
class Diag,
class OffDiag>
49 const Field& diffusivityField,
50 const Field& concField,
51 const Field& concGradientField,
52 const bool thermalModel,
53 const int ElectrolyteMeshID) :
83 const XArray& xCell =
dynamic_cast<const XArray&
>(xField[cVarIndex]);
84 XArray& rCell =
dynamic_cast<XArray&
>(rField[cVarIndex]);
103 const int nFaces = faces.
getCount();
107 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];
142 faceDiffusivity = (diffCell[c1])[0];
144 faceDiffusivity = (diffCell[c0])[0];
146 faceDiffusivity =
harmonicAverage((diffCell[c0])[0],(diffCell[c1])[0]);
152 faceTemp = (xCell[c1])[2];
154 faceTemp = (xCell[c0])[2];
161 const T_Scalar transportNumber = 0.4;
164 faceDiffusivity = faceDiffusivity*(-2.0)*R*faceTemp/F*(1.0-transportNumber);
166 const T_Scalar diffMetric = faceAreaMag[f]*faceAreaMag[f]/
dot(faceArea[f],ds);
167 const T_Scalar diffCoeff = faceDiffusivity*diffMetric;
168 const VectorT3 secondaryCoeff = faceDiffusivity*(faceArea[f]-ds*diffMetric);
170 const TGrad gradF = (lnSpecConcGradCell[c0]*vol0+lnSpecConcGradCell[c1]*vol1)/(vol0+vol1);
172 const T_Scalar dFluxSecondary = gradF*secondaryCoeff;
174 const T_Scalar dFlux = diffCoeff*(lnSpecConcCell[c1]-lnSpecConcCell[c0]) + dFluxSecondary;
176 (rCell[c0])[0] += dFlux;
177 (rCell[c1])[0] -= dFlux;
shared_ptr< FaceGroup > FaceGroupPtr
T harmonicAverage(const T &x0, const T &x1)
Array< TGrad > TGradArray
const FaceGroupList & getAllFaceGroups() const
CRMatrix< Diag, OffDiag, X > CCMatrix
const int _ElectrolyteMeshID
pair< const Field *, const StorageSite * > ArrayIndex
BatteryPCBinaryElectrolyteDiscretization(const MeshList &meshes, const GeomFields &geomFields, Field &varField, const Field &diffusivityField, const Field &concField, const Field &concGradientField, const bool thermalModel, const int ElectrolyteMeshID)
void discretize(const Mesh &mesh, MultiFieldMatrix &mfmatrix, MultiField &xField, MultiField &rField)
const StorageSite & getCells() const
const Field & _concGradientField
CCMatrix::DiagArray DiagArray
const CRConnectivity & getFaceCells(const StorageSite &site) const
Array< VectorT3 > VectorT3Array
const GeomFields & _geomFields
Vector< T_Scalar, 3 > VectorT3
const Field & _diffusivityField
T dot(const Vector< T, 3 > &a, const Vector< T, 3 > &b)
NumTypeTraits< X >::T_Scalar T_Scalar
CCMatrix::PairWiseAssembler CCAssembler
vector< Mesh * > MeshList
Gradient< T_Scalar > TGrad