skeletal ion transport model
This commit is contained in:
parent
a92de83589
commit
60c1104fea
5 changed files with 177 additions and 88 deletions
|
|
@ -47,31 +47,14 @@ License
|
|||
Foam::Ion::Ion(const dictionary& dict)
|
||||
:
|
||||
Particle(dict),
|
||||
wellDepth_(dict.lookupOrDefault("wellDepth", 0.0)),
|
||||
diameter_(dict.lookupOrDefault("diameter", 0.0)),
|
||||
dipoleMoment_(dict.lookupOrDefault("dipoleMoment", 0.0)),
|
||||
alpha_(dict.lookupOrDefault("dipolePolarizability", 0.0)),
|
||||
alphaQ_(dict.lookupOrDefault("quadpolePolarizability", 0.0)),
|
||||
C6_(dict.lookupOrDefault("dispersionCoef", 0.0)),
|
||||
Zrot_(dict.lookupOrDefault("rotationalRelaxation", 0.0))
|
||||
{
|
||||
|
||||
const entry* entryPtr = dict.lookupEntryPtr("tranlib", false, true);
|
||||
|
||||
if (entryPtr)
|
||||
{
|
||||
scalarList tranlib(entryPtr->stream());
|
||||
|
||||
wellDepth_ = tranlib[1];
|
||||
diameter_ = tranlib[2];
|
||||
dipoleMoment_ = tranlib[3];
|
||||
alpha_ = tranlib[4];
|
||||
// alphaQ_ = tranlib[0];
|
||||
// C6_ = tranlib[0];
|
||||
Zrot_ = tranlib[5];
|
||||
}
|
||||
|
||||
}
|
||||
Zrot_(dict.lookupOrDefault("rotationalRelaxation", 0.0)),
|
||||
n_(dict.lookupOrDefault("nStockmayer", 12)),
|
||||
rctTarget_(dict.lookupOrDefault("rctTargets", hashedWordList())),
|
||||
Arct_(dict.lookupOrDefault("Arct", scalarList())),
|
||||
Brct_(dict.lookupOrDefault("Brct", scalarList()))
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
|
@ -104,13 +87,13 @@ void Foam::Ion::operator=(const Ion& rhs)
|
|||
Foam::Ostream& Foam::operator<<(Ostream& os, const Ion& st)
|
||||
{
|
||||
os << static_cast<const Particle&>(st) << tab
|
||||
<< st.wellDepth_ << tab
|
||||
<< st.diameter_ << tab
|
||||
<< st.dipoleMoment_ << tab
|
||||
<< st.alpha_ << tab
|
||||
<< st.alphaQ_ << tab
|
||||
<< st.C6_ << tab
|
||||
<< st.Zrot_;
|
||||
<< st.Zrot_ << tab
|
||||
<< st.n_ << tab
|
||||
<< st.rctTarget_ << tab
|
||||
<< st.Arct_ << tab
|
||||
<< st.Brct_;
|
||||
|
||||
os.check("Ostream& operator<<(Ostream& os, const specie& st)");
|
||||
return os;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@ SourceFiles
|
|||
#define Ion_H
|
||||
|
||||
#include "Particle.H"
|
||||
#include "hashedWordList.H"
|
||||
#include "scalarList.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
|
|
@ -63,28 +65,27 @@ class Ion
|
|||
{
|
||||
// Private data
|
||||
|
||||
//- Lenard-Jones parameter - potential well depth
|
||||
//- epsilon / kB [K]
|
||||
scalar wellDepth_;
|
||||
|
||||
//- Lenard-Jones parameter - collision diameter [Angstrom]
|
||||
scalar diameter_;
|
||||
|
||||
//- Dipole moment [Debye]
|
||||
scalar dipoleMoment_;
|
||||
|
||||
//- Dipole polarizability [Angstrom^3]
|
||||
scalar alpha_;
|
||||
|
||||
//- Quadrupole polarizability []
|
||||
scalar alphaQ_;
|
||||
|
||||
//- Dispersion coefficient []
|
||||
scalar C6_;
|
||||
|
||||
//- Rotational relaxation collision number [-]
|
||||
scalar Zrot_;
|
||||
|
||||
//- Stockmayer parameter n of (n,6,4)
|
||||
scalar n_;
|
||||
|
||||
//- Resonant charge transfer targets
|
||||
hashedWordList rctTarget_;
|
||||
|
||||
//- Resonant charge transfer parameter A
|
||||
scalarList Arct_;
|
||||
|
||||
//- Resonant charge transfer parameter B
|
||||
scalarList Brct_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
|
|
@ -122,22 +123,19 @@ public:
|
|||
// Member Functions
|
||||
|
||||
// Access
|
||||
inline scalar wellDepth() const;
|
||||
|
||||
inline scalar diameter() const;
|
||||
|
||||
inline scalar dipoleMoment() const;
|
||||
|
||||
inline scalar alpha() const;
|
||||
|
||||
inline scalar alphaQ() const;
|
||||
|
||||
inline scalar C6() const;
|
||||
|
||||
inline scalar Zrot() const;
|
||||
|
||||
inline scalar Zrot(scalar T) const;
|
||||
|
||||
inline scalar Arct(const word &target) const;
|
||||
|
||||
inline scalar Brct(const word &target) const;
|
||||
|
||||
|
||||
// Check
|
||||
|
||||
// Edit
|
||||
|
|
|
|||
|
|
@ -36,27 +36,6 @@ License
|
|||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
inline Foam::scalar Foam::Ion::wellDepth()
|
||||
const
|
||||
{
|
||||
return wellDepth_;
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::Ion::diameter()
|
||||
const
|
||||
{
|
||||
return diameter_ * Angstrom;
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::Ion::dipoleMoment()
|
||||
const
|
||||
{
|
||||
return dipoleMoment_ * Debye;
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::Ion::alpha()
|
||||
const
|
||||
{
|
||||
|
|
@ -64,13 +43,6 @@ inline Foam::scalar Foam::Ion::alpha()
|
|||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::Ion::alphaQ()
|
||||
const
|
||||
{
|
||||
return alphaQ_;
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::Ion::C6()
|
||||
const
|
||||
{
|
||||
|
|
@ -84,9 +56,11 @@ inline Foam::scalar Foam::Ion::Zrot()
|
|||
return Zrot_;
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::Ion::Zrot(const scalar T)
|
||||
const
|
||||
{
|
||||
scalar wellDepth_ = 0.0;
|
||||
scalar a3 = sqrt(pow3(pi));
|
||||
scalar a1 = a3/2.0;
|
||||
scalar a2 = sqr(pi) / 4.0 + 2.0;
|
||||
|
|
@ -99,6 +73,20 @@ inline Foam::scalar Foam::Ion::Zrot(const scalar T)
|
|||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::Ion::Arct(const word &target)
|
||||
const
|
||||
{
|
||||
return Arct_[rctTarget_[target]];
|
||||
}
|
||||
|
||||
|
||||
inline Foam::scalar Foam::Ion::Brct(const word &target)
|
||||
const
|
||||
{
|
||||
return Brct_[rctTarget_[target]];
|
||||
}
|
||||
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ License
|
|||
#include "scalarMatrices.H"
|
||||
#include "Particle.H"
|
||||
#include "Neutral.H"
|
||||
#include "Ion.H"
|
||||
#include "Stockmayer.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
|
@ -110,6 +111,7 @@ Foam::diffusivityModel::diffusivityModel(const psiReactionThermo& thermo)
|
|||
thermo_(thermo),
|
||||
D_(thermo_.composition().species().size()),
|
||||
neutrals_(thermo_.composition().species().size()),
|
||||
ions_(thermo_.composition().species().size()),
|
||||
nns_(thermo_.composition().species().size()*thermo_.composition().species().size())
|
||||
{
|
||||
|
||||
|
|
@ -144,9 +146,9 @@ Foam::diffusivityModel::diffusivityModel(const psiReactionThermo& thermo)
|
|||
|
||||
Particle p(tranDict);
|
||||
|
||||
Info << tranDict << endl;
|
||||
Info << p << endl;
|
||||
Info << scalarList(tranDict["tranlib"]) << endl;
|
||||
// Info << tranDict << endl;
|
||||
// Info << p << endl;
|
||||
// Info << scalarList(tranDict["tranlib"]) << endl;
|
||||
|
||||
// Electron
|
||||
if (species_[i] == "E-")
|
||||
|
|
@ -170,6 +172,9 @@ Foam::diffusivityModel::diffusivityModel(const psiReactionThermo& thermo)
|
|||
}
|
||||
|
||||
readIons = true;
|
||||
|
||||
ions_.set(nIon, new Ion(tranDict));
|
||||
|
||||
nIon++;
|
||||
|
||||
// new Ion (tranDict);
|
||||
|
|
@ -185,9 +190,16 @@ Foam::diffusivityModel::diffusivityModel(const psiReactionThermo& thermo)
|
|||
}
|
||||
}
|
||||
|
||||
ions_.resize(nIon);
|
||||
|
||||
neutrals_.resize(nNeutral);
|
||||
nns_.resize(nNeutral*(nNeutral+1)/2);
|
||||
|
||||
// cns_.resize(nNeutral*nIon);
|
||||
// ccs_.resize((nIon+1)*(nIon+2)/2 - 1);
|
||||
// ens_.resize(nNeutral);
|
||||
// ee_;
|
||||
|
||||
forAll(species_, i)
|
||||
{
|
||||
const label zi = thermo_.composition().z(i);
|
||||
|
|
@ -331,6 +343,7 @@ void Foam::diffusivityModel::correct()
|
|||
const volScalarField &T = thermo_.T();
|
||||
const volScalarField &p = thermo_.p();
|
||||
const volScalarField rho(thermo_.rho());
|
||||
const volScalarField Cp(thermo_.Cp());
|
||||
|
||||
const speciesTable &species_(thermo_.composition().species());
|
||||
|
||||
|
|
@ -356,9 +369,29 @@ void Foam::diffusivityModel::correct()
|
|||
scalarField muI(species_.size());
|
||||
scalarField kI(species_.size());
|
||||
|
||||
scalarField dof(species_.size());
|
||||
scalarField::subField dofI(dof, ions_.size(), 1);
|
||||
scalarField::subField dofN(dof, neutrals_.size(), ions_.size()+1);
|
||||
|
||||
dof[0] = 0;
|
||||
forAll (ions_, i)
|
||||
{
|
||||
// dofI[i] = ions_[i].F();
|
||||
dofI[i] = 0.0;
|
||||
}
|
||||
forAll (neutrals_, i)
|
||||
{
|
||||
dofN[i] = neutrals_[i].F();
|
||||
}
|
||||
|
||||
scalarField Zrot(species_.size());
|
||||
scalarField::subField ZrotI(Zrot, ions_.size(), 1);
|
||||
scalarField::subField ZrotN(Zrot, neutrals_.size(), ions_.size()+1);
|
||||
|
||||
forAll (p, celli)
|
||||
{
|
||||
const scalar rhoi = rho[celli];
|
||||
const scalar Cpi = Cp[celli];
|
||||
const scalar pi = p[celli];
|
||||
const scalar Ti = T[celli];
|
||||
const scalar WbarI = Wbar[celli];
|
||||
|
|
@ -374,16 +407,100 @@ void Foam::diffusivityModel::correct()
|
|||
localX[i] = Y[i][celli] * WbarI / Wpure[i];
|
||||
}
|
||||
|
||||
label idx = 0;
|
||||
|
||||
forAll (species_, i)
|
||||
Zrot[0] = 0;
|
||||
forAll (ions_, i)
|
||||
{
|
||||
// ZrotI[i] = ions_[i].Zrot(Ti);
|
||||
ZrotI[i] = 0.0;
|
||||
}
|
||||
forAll (neutrals_, i)
|
||||
{
|
||||
ZrotN[i] = neutrals_[i].Zrot(Ti);
|
||||
}
|
||||
|
||||
// Electron - Electron
|
||||
|
||||
// muI[0] = nns_[idx].mu(pi,Ti);
|
||||
muI[0] = SMALL;
|
||||
|
||||
// Dii[0] = nns_[idx].D(pi,Ti);
|
||||
Dii[0] = SMALL;
|
||||
Dij(0,0) = Dii[0];
|
||||
|
||||
label idx = 0;
|
||||
// Electron - Ions
|
||||
for (label J = 0; J < ions_.size(); J++)
|
||||
{
|
||||
label j = J + 1;
|
||||
// Calculate Dij
|
||||
// Dij(0,j) = nns_[idx].D(pi,Ti);
|
||||
Dij(0,j) = SMALL;
|
||||
Dij(j,0) = Dij(0,j);
|
||||
idx++;
|
||||
}
|
||||
|
||||
idx = 0;
|
||||
// Electron - Neutrals
|
||||
for (label J = 0; J < neutrals_.size(); J++)
|
||||
{
|
||||
label j = J + ions_.size() + 1;
|
||||
// Calculate Dij
|
||||
// Dij(0,j) = nns_[idx].D(pi,Ti);
|
||||
Dij(0,j) = SMALL;
|
||||
Dij(j,0) = Dij(0,j);
|
||||
idx++;
|
||||
}
|
||||
|
||||
// Ions
|
||||
label idx1 = 0;
|
||||
label idx2 = 0;
|
||||
forAll (ions_, I)
|
||||
{
|
||||
label i = I + 1;
|
||||
|
||||
// muI[i] = nns_[idx1].mu(pi,Ti);
|
||||
muI[i] = SMALL;
|
||||
|
||||
// Dii[i] = nns_[idx1].D(pi,Ti);
|
||||
Dii[i] = SMALL;
|
||||
Dij(i,i) = Dii[i];
|
||||
idx1++;
|
||||
|
||||
// Ion - Ions
|
||||
for (label J = I+1; J < ions_.size(); J++)
|
||||
{
|
||||
label j = J + 1;
|
||||
// Calculate Dij
|
||||
// Dij(i,j) = nns_[idx1].D(pi,Ti);
|
||||
Dij(i,j) = SMALL;
|
||||
Dij(j,i) = Dij(i,j);
|
||||
idx1++;
|
||||
}
|
||||
|
||||
// Ion - Neutrals
|
||||
for (label j = ions_.size()+1; j < species_.size(); j++)
|
||||
{
|
||||
// Calculate Dij
|
||||
// Dij(i,j) = nns_[idx2].D(pi,Ti);
|
||||
Dij(i,j) = SMALL;
|
||||
Dij(j,i) = Dij(i,j);
|
||||
idx2++;
|
||||
}
|
||||
}
|
||||
|
||||
// Neutrals
|
||||
idx = 0;
|
||||
forAll (neutrals_, I)
|
||||
{
|
||||
label i = I + 1 + ions_.size();
|
||||
|
||||
muI[i] = nns_[idx].mu(pi,Ti);
|
||||
|
||||
Dii[i] = nns_[idx].D(pi,Ti);
|
||||
Dij(i,i) = Dii[i];
|
||||
idx++;
|
||||
|
||||
// Neutral - Neutrals
|
||||
for (label j = i+1; j < species_.size(); j++)
|
||||
{
|
||||
// Calculate Dij
|
||||
|
|
@ -393,18 +510,19 @@ void Foam::diffusivityModel::correct()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// Pure Thermal conductivity
|
||||
forAll (species_, i)
|
||||
{
|
||||
const scalar R = Neutral::RR / Wpure[i];
|
||||
const scalar CvTrans = (3./2.)*R;
|
||||
const scalar CvRot = (neutrals_[i].F()/2.)*R;
|
||||
const scalar CvRot = (dof[i]/2.)*R;
|
||||
const scalar CvVib = localCv[i] - CvTrans - CvRot;
|
||||
|
||||
const scalar rSc = rhoi * Dii[i] / muI[i];
|
||||
|
||||
const scalar A = 5./2. - rSc;
|
||||
const scalar Zrot = neutrals_[i].Zrot(Ti);
|
||||
const scalar B = Zrot + (2./Neutral::pi) * ((5./3.)*CvRot + rSc);
|
||||
const scalar B = Zrot[i] + (2./Neutral::pi) * ((5./3.)*CvRot + rSc);
|
||||
const scalar AB = (2./Neutral::pi)*(A/B);
|
||||
|
||||
const scalar fTrans = (5./2.) * (1.0 - AB * CvRot / CvTrans);
|
||||
|
|
@ -415,6 +533,7 @@ void Foam::diffusivityModel::correct()
|
|||
|
||||
}
|
||||
|
||||
// Pure Condition Test ( Xi = 1 )
|
||||
Switch pure = false;
|
||||
label pureSpecieI = -1;
|
||||
forAll (species_, i)
|
||||
|
|
@ -446,7 +565,7 @@ void Foam::diffusivityModel::correct()
|
|||
}
|
||||
|
||||
mu_()[celli] = mixAvgMu(muI, localX, Wpure);
|
||||
k_()[celli] = mixAvgK(kI, localX);
|
||||
k_()[celli] = mixAvgK(kI, localX) / rhoi / Cpi;
|
||||
}
|
||||
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ namespace Foam
|
|||
|
||||
// Forward declaration of classes
|
||||
class Neutral;
|
||||
class Ion;
|
||||
class Stockmayer;
|
||||
|
||||
// Forward declaration of friend functions and operators
|
||||
|
|
@ -77,7 +78,7 @@ class diffusivityModel
|
|||
// autoPtr<Electron> electron_;
|
||||
|
||||
//- Ion object list
|
||||
// PtrList<Ion> ions_;
|
||||
PtrList<Ion> ions_;
|
||||
|
||||
//- Neutral object list
|
||||
PtrList<Neutral> neutrals_;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue