Bugfix: Moved case insensitive directory name clash
This commit is contained in:
parent
70910a96e4
commit
8e33f6f9b3
9 changed files with 1639 additions and 0 deletions
|
@ -0,0 +1,106 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 3.2
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "IrreversibleReaction.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
// Construct from components
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
IrreversibleReaction<ReactionThermo, ReactionRate>::IrreversibleReaction
|
||||
(
|
||||
const Reaction<ReactionThermo>& reaction,
|
||||
const ReactionRate& k
|
||||
)
|
||||
:
|
||||
Reaction<ReactionThermo>(reaction),
|
||||
k_(k)
|
||||
{}
|
||||
|
||||
|
||||
// Construct from components
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
IrreversibleReaction<ReactionThermo, ReactionRate>::IrreversibleReaction
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase,
|
||||
Istream& is
|
||||
)
|
||||
:
|
||||
Reaction<ReactionThermo>(species, thermoDatabase, is),
|
||||
k_(species, is)
|
||||
{}
|
||||
|
||||
|
||||
// Construct as copy given new speciesTable
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
IrreversibleReaction<ReactionThermo, ReactionRate>::IrreversibleReaction
|
||||
(
|
||||
const IrreversibleReaction<ReactionThermo, ReactionRate>& irr,
|
||||
const speciesTable& species
|
||||
)
|
||||
:
|
||||
Reaction<ReactionThermo>(irr, species),
|
||||
k_(irr.k_)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
scalar IrreversibleReaction<ReactionThermo, ReactionRate>::kf
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const
|
||||
{
|
||||
return k_(T, p, c);
|
||||
}
|
||||
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
void IrreversibleReaction<ReactionThermo, ReactionRate>::write
|
||||
(
|
||||
Ostream& os
|
||||
) const
|
||||
{
|
||||
Reaction<ReactionThermo>::write(os);
|
||||
os << token::SPACE << k_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
|
@ -0,0 +1,163 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 3.2
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::IrreversibleReaction
|
||||
|
||||
Description
|
||||
Simple extension of Reaction to handle reversible reactions using
|
||||
equilibrium thermodynamics.
|
||||
|
||||
SourceFiles
|
||||
IrreversibleReaction.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef IrreversibleReaction_H
|
||||
#define IrreversibleReaction_H
|
||||
|
||||
#include "Reaction.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class IrreversibleReaction Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
class IrreversibleReaction
|
||||
:
|
||||
public Reaction<ReactionThermo>
|
||||
{
|
||||
// Private data
|
||||
|
||||
ReactionRate k_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=
|
||||
(
|
||||
const IrreversibleReaction<ReactionThermo, ReactionRate>&
|
||||
);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("irreversible");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
IrreversibleReaction
|
||||
(
|
||||
const Reaction<ReactionThermo>& reaction,
|
||||
const ReactionRate& reactionRate
|
||||
);
|
||||
|
||||
//- Construct as copy given new speciesTable
|
||||
IrreversibleReaction
|
||||
(
|
||||
const IrreversibleReaction<ReactionThermo, ReactionRate>&,
|
||||
const speciesTable& species
|
||||
);
|
||||
|
||||
//- Construct from Istream
|
||||
IrreversibleReaction
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase,
|
||||
Istream& is
|
||||
);
|
||||
|
||||
//- Construct and return a clone
|
||||
virtual autoPtr<Reaction<ReactionThermo> > clone() const
|
||||
{
|
||||
return autoPtr<Reaction<ReactionThermo> >
|
||||
(
|
||||
new IrreversibleReaction<ReactionThermo, ReactionRate>(*this)
|
||||
);
|
||||
}
|
||||
|
||||
//- Construct and return a clone with new speciesTable
|
||||
virtual autoPtr<Reaction<ReactionThermo> > clone
|
||||
(
|
||||
const speciesTable& species
|
||||
) const
|
||||
{
|
||||
return autoPtr<Reaction<ReactionThermo> >
|
||||
(
|
||||
new IrreversibleReaction<ReactionThermo, ReactionRate>
|
||||
(
|
||||
*this,
|
||||
species
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
virtual ~IrreversibleReaction()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
// IrreversibleReaction rate coefficients
|
||||
|
||||
//- Forward rate constant
|
||||
virtual scalar kf
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const;
|
||||
|
||||
|
||||
//- Write
|
||||
virtual void write(Ostream&) const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "IrreversibleReaction.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -0,0 +1,137 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 3.2
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "NonEquilibriumReversibleReaction.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
// Construct from components
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
NonEquilibriumReversibleReaction<ReactionThermo, ReactionRate>::
|
||||
NonEquilibriumReversibleReaction
|
||||
(
|
||||
const Reaction<ReactionThermo>& reaction,
|
||||
const ReactionRate& forwardReactionRate,
|
||||
const ReactionRate& reverseReactionRate
|
||||
)
|
||||
:
|
||||
Reaction<ReactionThermo>(reaction),
|
||||
fk_(forwardReactionRate),
|
||||
rk_(reverseReactionRate)
|
||||
{}
|
||||
|
||||
|
||||
// Construct from components
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
NonEquilibriumReversibleReaction<ReactionThermo, ReactionRate>::
|
||||
NonEquilibriumReversibleReaction
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase,
|
||||
Istream& is
|
||||
)
|
||||
:
|
||||
Reaction<ReactionThermo>(species, thermoDatabase, is),
|
||||
fk_(species, is),
|
||||
rk_(species, is)
|
||||
{}
|
||||
|
||||
// Construct as copy given new speciesTable
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
NonEquilibriumReversibleReaction<ReactionThermo, ReactionRate>::
|
||||
NonEquilibriumReversibleReaction
|
||||
(
|
||||
const NonEquilibriumReversibleReaction<ReactionThermo, ReactionRate>& nerr,
|
||||
const speciesTable& species
|
||||
)
|
||||
:
|
||||
Reaction<ReactionThermo>(nerr, species),
|
||||
fk_(nerr.fk_),
|
||||
rk_(nerr.rk_)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
scalar NonEquilibriumReversibleReaction<ReactionThermo, ReactionRate>::kf
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const
|
||||
{
|
||||
return fk_(T, p, c);
|
||||
}
|
||||
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
scalar NonEquilibriumReversibleReaction<ReactionThermo, ReactionRate>::kr
|
||||
(
|
||||
const scalar,
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const
|
||||
{
|
||||
return rk_(T, p, c);
|
||||
}
|
||||
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
scalar NonEquilibriumReversibleReaction<ReactionThermo, ReactionRate>::kr
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const
|
||||
{
|
||||
return rk_(T, p, c);
|
||||
}
|
||||
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
void NonEquilibriumReversibleReaction<ReactionThermo, ReactionRate>::write
|
||||
(
|
||||
Ostream& os
|
||||
) const
|
||||
{
|
||||
Reaction<ReactionThermo>::write(os);
|
||||
os << token::SPACE << fk_ << token::SPACE << rk_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
|
@ -0,0 +1,185 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 3.2
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::NonEquilibriumReversibleReaction
|
||||
|
||||
Description
|
||||
Simple extension of Reaction to handle reversible reactions using
|
||||
equilibrium thermodynamics.
|
||||
|
||||
SourceFiles
|
||||
NonEquilibriumReversibleReaction.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef NonEquilibriumReversibleReaction_H
|
||||
#define NonEquilibriumReversibleReaction_H
|
||||
|
||||
#include "Reaction.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class NonEquilibriumReversibleReaction Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
class NonEquilibriumReversibleReaction
|
||||
:
|
||||
public Reaction<ReactionThermo>
|
||||
{
|
||||
// Private data
|
||||
|
||||
ReactionRate fk_;
|
||||
ReactionRate rk_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=
|
||||
(
|
||||
const NonEquilibriumReversibleReaction
|
||||
<ReactionThermo, ReactionRate>&
|
||||
);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("nonEquilibriumReversible");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
NonEquilibriumReversibleReaction
|
||||
(
|
||||
const Reaction<ReactionThermo>& reaction,
|
||||
const ReactionRate& forwardReactionRate,
|
||||
const ReactionRate& reverseReactionRate
|
||||
);
|
||||
|
||||
//- Construct as copy given new speciesTable
|
||||
NonEquilibriumReversibleReaction
|
||||
(
|
||||
const NonEquilibriumReversibleReaction
|
||||
<ReactionThermo, ReactionRate>&,
|
||||
const speciesTable& species
|
||||
);
|
||||
|
||||
//- Construct from Istream
|
||||
NonEquilibriumReversibleReaction
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase,
|
||||
Istream& is
|
||||
);
|
||||
|
||||
//- Construct and return a clone
|
||||
virtual autoPtr<Reaction<ReactionThermo> > clone() const
|
||||
{
|
||||
return autoPtr<Reaction<ReactionThermo> >
|
||||
(
|
||||
new NonEquilibriumReversibleReaction
|
||||
<ReactionThermo, ReactionRate>(*this)
|
||||
);
|
||||
}
|
||||
|
||||
//- Construct and return a clone with new speciesTable
|
||||
virtual autoPtr<Reaction<ReactionThermo> > clone
|
||||
(
|
||||
const speciesTable& species
|
||||
) const
|
||||
{
|
||||
return autoPtr<Reaction<ReactionThermo> >
|
||||
(
|
||||
new NonEquilibriumReversibleReaction
|
||||
<ReactionThermo, ReactionRate>
|
||||
(*this, species)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
virtual ~NonEquilibriumReversibleReaction()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
// NonEquilibriumReversibleReaction rate coefficients
|
||||
|
||||
//- Forward rate constant
|
||||
virtual scalar kf
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const;
|
||||
|
||||
//- Reverse rate constant from the given formard rate constant
|
||||
virtual scalar kr
|
||||
(
|
||||
const scalar kfwd,
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const;
|
||||
|
||||
//- Reverse rate constant.
|
||||
// Note this evaluates the forward rate constant and divides by the
|
||||
// equilibrium constant
|
||||
virtual scalar kr
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const;
|
||||
|
||||
|
||||
//- Write
|
||||
virtual void write(Ostream&) const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "NonEquilibriumReversibleReaction.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -0,0 +1,356 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 3.2
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
Simple extension of ReactionThermo to handle Reaction kinetics in addition
|
||||
to the equilibrium thermodynamics already handled.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "Reaction.H"
|
||||
#include "DynamicList.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class ReactionThermo>
|
||||
void Reaction<ReactionThermo>::setThermo
|
||||
(
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase
|
||||
)
|
||||
{
|
||||
ReactionThermo::operator=
|
||||
(
|
||||
rhs_[0].stoichCoeff*(*thermoDatabase[species_[rhs_[0].index]])
|
||||
);
|
||||
|
||||
for (label i=1; i<rhs_.size(); i++)
|
||||
{
|
||||
this->operator+=
|
||||
(
|
||||
rhs_[i].stoichCoeff*(*thermoDatabase[species_[rhs_[i].index]])
|
||||
);
|
||||
}
|
||||
|
||||
for (label i=0; i<lhs_.size(); i++)
|
||||
{
|
||||
this->operator-=
|
||||
(
|
||||
lhs_[i].stoichCoeff*(*thermoDatabase[species_[lhs_[i].index]])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Construct from components
|
||||
template<class ReactionThermo>
|
||||
Reaction<ReactionThermo>::Reaction
|
||||
(
|
||||
const speciesTable& species,
|
||||
const List<specieCoeffs>& lhs,
|
||||
const List<specieCoeffs>& rhs,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase
|
||||
)
|
||||
:
|
||||
ReactionThermo(*thermoDatabase[species[0]]),
|
||||
species_(species),
|
||||
lhs_(lhs),
|
||||
rhs_(rhs)
|
||||
{
|
||||
setThermo(thermoDatabase);
|
||||
}
|
||||
|
||||
|
||||
// Construct as copy given new speciesTable
|
||||
template<class ReactionThermo>
|
||||
Reaction<ReactionThermo>::Reaction
|
||||
(
|
||||
const Reaction<ReactionThermo>& r,
|
||||
const speciesTable& species
|
||||
)
|
||||
:
|
||||
ReactionThermo(r),
|
||||
species_(species),
|
||||
lhs_(r.lhs_),
|
||||
rhs_(r.rhs_)
|
||||
{}
|
||||
|
||||
|
||||
template<class ReactionThermo>
|
||||
Reaction<ReactionThermo>::specieCoeffs::specieCoeffs
|
||||
(
|
||||
const speciesTable& species,
|
||||
Istream& is
|
||||
)
|
||||
{
|
||||
token t(is);
|
||||
|
||||
if (t.isNumber())
|
||||
{
|
||||
stoichCoeff = t.number();
|
||||
is >> t;
|
||||
}
|
||||
else
|
||||
{
|
||||
stoichCoeff = 1.0;
|
||||
}
|
||||
|
||||
exponent = stoichCoeff;
|
||||
|
||||
if (t.isWord())
|
||||
{
|
||||
word specieName = t.wordToken();
|
||||
|
||||
size_t i = specieName.find('^');
|
||||
|
||||
if (i != word::npos)
|
||||
{
|
||||
string exponentStr = specieName
|
||||
(
|
||||
i + 1,
|
||||
specieName.size() - i - 1
|
||||
);
|
||||
exponent = atof(exponentStr.c_str());
|
||||
specieName = specieName(0, i);
|
||||
}
|
||||
|
||||
index = species[specieName];
|
||||
}
|
||||
else
|
||||
{
|
||||
FatalIOErrorIn("Reaction<ReactionThermo>::lrhs(Istream& is)", is)
|
||||
<< "Expected a word but found " << t.info()
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class ReactionThermo>
|
||||
void Reaction<ReactionThermo>::setLRhs(Istream& is)
|
||||
{
|
||||
DynamicList<specieCoeffs> dlrhs;
|
||||
|
||||
while (is)
|
||||
{
|
||||
dlrhs.append(specieCoeffs(species_, is));
|
||||
|
||||
token t(is);
|
||||
|
||||
if (t.isPunctuation())
|
||||
{
|
||||
if (t == token::ADD)
|
||||
{
|
||||
}
|
||||
else if (t == token::ASSIGN)
|
||||
{
|
||||
lhs_ = dlrhs.shrink();
|
||||
dlrhs.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
rhs_ = dlrhs.shrink();
|
||||
is.putBack(t);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rhs_ = dlrhs.shrink();
|
||||
is.putBack(t);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
FatalIOErrorIn("Reaction<ReactionThermo>::lrhs(Istream& is)", is)
|
||||
<< "Cannot continue reading reaction data from stream"
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
|
||||
|
||||
//- Construct from Istream
|
||||
template<class ReactionThermo>
|
||||
Reaction<ReactionThermo>::Reaction
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase,
|
||||
Istream& is
|
||||
)
|
||||
:
|
||||
ReactionThermo(*thermoDatabase[species[0]]),
|
||||
species_(species)
|
||||
{
|
||||
setLRhs(is);
|
||||
setThermo(thermoDatabase);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class ReactionThermo>
|
||||
autoPtr<Reaction<ReactionThermo> > Reaction<ReactionThermo>::New
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase,
|
||||
Istream& is
|
||||
)
|
||||
{
|
||||
if (is.eof())
|
||||
{
|
||||
FatalIOErrorIn
|
||||
(
|
||||
"Reaction<ReactionThermo>::New(const speciesTable& species,"
|
||||
" const HashPtrTable<ReactionThermo>& thermoDatabase, Istream&)",
|
||||
is
|
||||
) << "Reaction type not specified" << endl << endl
|
||||
<< "Valid Reaction types are :" << endl
|
||||
<< IstreamConstructorTablePtr_->sortedToc()
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
|
||||
word reactionTypeName(is);
|
||||
|
||||
typename IstreamConstructorTable::iterator cstrIter
|
||||
= IstreamConstructorTablePtr_->find(reactionTypeName);
|
||||
|
||||
if (cstrIter == IstreamConstructorTablePtr_->end())
|
||||
{
|
||||
FatalIOErrorIn
|
||||
(
|
||||
"Reaction<ReactionThermo>::New(const speciesTable& species,"
|
||||
" const HashPtrTable<ReactionThermo>& thermoDatabase, Istream&)",
|
||||
is
|
||||
) << "Unknown reaction type " << reactionTypeName << endl << endl
|
||||
<< "Valid reaction types are :" << endl
|
||||
<< IstreamConstructorTablePtr_->sortedToc()
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
|
||||
return autoPtr<Reaction<ReactionThermo> >
|
||||
(
|
||||
cstrIter()(species, thermoDatabase, is)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class ReactionThermo>
|
||||
void Reaction<ReactionThermo>::write(Ostream& os) const
|
||||
{
|
||||
os << type() << nl << " ";
|
||||
|
||||
forAll(lhs_, i)
|
||||
{
|
||||
const typename Reaction<ReactionThermo>::specieCoeffs& sc = lhs_[i];
|
||||
|
||||
if (sc.stoichCoeff != 1)
|
||||
{
|
||||
os << sc.stoichCoeff;
|
||||
}
|
||||
|
||||
os << species_[sc.index];
|
||||
|
||||
if (sc.exponent != sc.stoichCoeff)
|
||||
{
|
||||
os << '^' << sc.exponent;
|
||||
}
|
||||
|
||||
if (i < lhs_.size() - 1)
|
||||
{
|
||||
os << " + ";
|
||||
}
|
||||
}
|
||||
|
||||
os << " = ";
|
||||
|
||||
forAll(rhs_, i)
|
||||
{
|
||||
const typename Reaction<ReactionThermo>::specieCoeffs& sc = rhs_[i];
|
||||
|
||||
if (sc.stoichCoeff != 1)
|
||||
{
|
||||
os << sc.stoichCoeff;
|
||||
}
|
||||
|
||||
os << species_[sc.index];
|
||||
|
||||
if (sc.exponent != sc.stoichCoeff)
|
||||
{
|
||||
os << '^' << sc.exponent;
|
||||
}
|
||||
|
||||
if (i < rhs_.size() - 1)
|
||||
{
|
||||
os << " + ";
|
||||
}
|
||||
}
|
||||
|
||||
os << endl << " ";
|
||||
}
|
||||
|
||||
|
||||
template<class ReactionThermo>
|
||||
scalar Reaction<ReactionThermo>::kf
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const
|
||||
{
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
|
||||
template<class ReactionThermo>
|
||||
scalar Reaction<ReactionThermo>::kr
|
||||
(
|
||||
const scalar kfwd,
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const
|
||||
{
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
template<class ReactionThermo>
|
||||
scalar Reaction<ReactionThermo>::kr
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const
|
||||
{
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
|
@ -0,0 +1,317 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 3.2
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::Reaction
|
||||
|
||||
Description
|
||||
Simple extension of ReactionThermo to handle reaction kinetics in addition
|
||||
to the equilibrium thermodynamics already handled.
|
||||
|
||||
SourceFiles
|
||||
ReactionI.H
|
||||
Reaction.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef Reaction_H
|
||||
#define Reaction_H
|
||||
|
||||
#include "speciesTable.H"
|
||||
#include "HashPtrTable.H"
|
||||
#include "scalarField.H"
|
||||
#include "typeInfo.H"
|
||||
#include "runTimeSelectionTables.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// Forward declaration of friend functions and operators
|
||||
|
||||
template<class ReactionThermo>
|
||||
class Reaction;
|
||||
|
||||
template<class ReactionThermo>
|
||||
inline Ostream& operator<<(Ostream&, const Reaction<ReactionThermo>&);
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class Reaction Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class ReactionThermo>
|
||||
class Reaction
|
||||
:
|
||||
public ReactionThermo
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
// Public data types
|
||||
|
||||
//- Class to hold the specie index and its coefficients in the
|
||||
// reaction rate expression
|
||||
struct specieCoeffs
|
||||
{
|
||||
label index;
|
||||
scalar stoichCoeff;
|
||||
scalar exponent;
|
||||
|
||||
specieCoeffs()
|
||||
:
|
||||
index(-1),
|
||||
stoichCoeff(0),
|
||||
exponent(1)
|
||||
{}
|
||||
|
||||
specieCoeffs(const speciesTable& species, Istream& is);
|
||||
|
||||
bool operator==(const specieCoeffs& sc) const
|
||||
{
|
||||
return index == sc.index;
|
||||
}
|
||||
|
||||
bool operator!=(const specieCoeffs& sc) const
|
||||
{
|
||||
return index != sc.index;
|
||||
}
|
||||
|
||||
friend Ostream& operator<<(Ostream& os, const specieCoeffs& sc)
|
||||
{
|
||||
os << sc.index << token::SPACE
|
||||
<< sc.stoichCoeff << token::SPACE
|
||||
<< sc.exponent;
|
||||
return os;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
private:
|
||||
|
||||
// Private data
|
||||
|
||||
//- List of specie names present in reaction system
|
||||
const speciesTable& species_;
|
||||
|
||||
//- Specie info for the left-hand-side of the reaction
|
||||
List<specieCoeffs> lhs_;
|
||||
|
||||
//- Specie info for the right-hand-side of the reaction
|
||||
List<specieCoeffs> rhs_;
|
||||
|
||||
|
||||
// Private member functions
|
||||
|
||||
void setLRhs(Istream&);
|
||||
void setThermo(const HashPtrTable<ReactionThermo>& thermoDatabase);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const Reaction<ReactionThermo>&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("Reaction");
|
||||
|
||||
|
||||
// Declare run-time constructor selection tables
|
||||
|
||||
declareRunTimeSelectionTable
|
||||
(
|
||||
autoPtr,
|
||||
Reaction,
|
||||
Istream,
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase,
|
||||
Istream& is
|
||||
),
|
||||
(species, thermoDatabase, is)
|
||||
);
|
||||
|
||||
|
||||
// Public classes
|
||||
|
||||
//- Class used for the read-construction of PtrLists of reaction
|
||||
class iNew
|
||||
{
|
||||
const speciesTable& species_;
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase_;
|
||||
|
||||
public:
|
||||
|
||||
iNew
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase
|
||||
)
|
||||
:
|
||||
species_(species),
|
||||
thermoDatabase_(thermoDatabase)
|
||||
{}
|
||||
|
||||
autoPtr<Reaction> operator()(Istream& is) const
|
||||
{
|
||||
return autoPtr<Reaction>
|
||||
(
|
||||
Reaction::New(species_, thermoDatabase_, is)
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
Reaction
|
||||
(
|
||||
const speciesTable& species,
|
||||
const List<specieCoeffs>& lhs,
|
||||
const List<specieCoeffs>& rhs,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase
|
||||
);
|
||||
|
||||
//- Construct as copy given new speciesTable
|
||||
Reaction(const Reaction<ReactionThermo>&, const speciesTable& species);
|
||||
|
||||
//- Construct from Istream
|
||||
Reaction
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase,
|
||||
Istream& is
|
||||
);
|
||||
|
||||
//- Construct and return a clone
|
||||
virtual autoPtr<Reaction<ReactionThermo> > clone() const
|
||||
{
|
||||
return autoPtr<Reaction<ReactionThermo> >
|
||||
(
|
||||
new Reaction<ReactionThermo>(*this)
|
||||
);
|
||||
}
|
||||
|
||||
//- Construct and return a clone with new speciesTable
|
||||
virtual autoPtr<Reaction<ReactionThermo> > clone
|
||||
(
|
||||
const speciesTable& species
|
||||
) const
|
||||
{
|
||||
return autoPtr<Reaction<ReactionThermo> >
|
||||
(
|
||||
new Reaction<ReactionThermo>(*this, species)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Selectors
|
||||
|
||||
//- Return a pointer to a new patchField created on freestore from input
|
||||
static autoPtr<Reaction<ReactionThermo> > New
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase,
|
||||
Istream&
|
||||
);
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
virtual ~Reaction()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
// Access
|
||||
|
||||
inline const List<specieCoeffs>& lhs() const;
|
||||
inline const List<specieCoeffs>& rhs() const;
|
||||
|
||||
|
||||
// Reaction rate coefficients
|
||||
|
||||
//- Forward rate constant
|
||||
virtual scalar kf
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const;
|
||||
|
||||
//- Reverse rate constant from the given forward rate constant
|
||||
virtual scalar kr
|
||||
(
|
||||
const scalar kfwd,
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const;
|
||||
|
||||
//- Reverse rate constant.
|
||||
// Note this evaluates the forward rate constant and divides by the
|
||||
// equilibrium constant
|
||||
virtual scalar kr
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const;
|
||||
|
||||
|
||||
//- Write
|
||||
virtual void write(Ostream&) const;
|
||||
|
||||
|
||||
// Ostream Operator
|
||||
|
||||
friend Ostream& operator<< <ReactionThermo>
|
||||
(
|
||||
Ostream&,
|
||||
const Reaction<ReactionThermo>&
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "ReactionI.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "Reaction.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
|
@ -0,0 +1,65 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 3.2
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "Reaction.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class ReactionThermo>
|
||||
inline const List<typename Reaction<ReactionThermo>::specieCoeffs>&
|
||||
Reaction<ReactionThermo>::lhs() const
|
||||
{
|
||||
return lhs_;
|
||||
}
|
||||
|
||||
|
||||
template<class ReactionThermo>
|
||||
inline const List<typename Reaction<ReactionThermo>::specieCoeffs>&
|
||||
Reaction<ReactionThermo>::rhs() const
|
||||
{
|
||||
return rhs_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
|
||||
|
||||
template<class ReactionThermo>
|
||||
inline Ostream& operator<<(Ostream& os, const Reaction<ReactionThermo>& r)
|
||||
{
|
||||
r.write(os);
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
|
@ -0,0 +1,131 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 3.2
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "ReversibleReaction.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
// Construct from components
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
ReversibleReaction<ReactionThermo, ReactionRate>::ReversibleReaction
|
||||
(
|
||||
const Reaction<ReactionThermo>& reaction,
|
||||
const ReactionRate& k
|
||||
)
|
||||
:
|
||||
Reaction<ReactionThermo>(reaction),
|
||||
k_(k)
|
||||
{}
|
||||
|
||||
|
||||
// Construct from components
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
ReversibleReaction<ReactionThermo, ReactionRate>::ReversibleReaction
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase,
|
||||
Istream& is
|
||||
)
|
||||
:
|
||||
Reaction<ReactionThermo>(species, thermoDatabase, is),
|
||||
k_(species, is)
|
||||
{}
|
||||
|
||||
|
||||
// Construct as copy given new speciesTable
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
ReversibleReaction<ReactionThermo, ReactionRate>::ReversibleReaction
|
||||
(
|
||||
const ReversibleReaction<ReactionThermo, ReactionRate>& rr,
|
||||
const speciesTable& species
|
||||
)
|
||||
:
|
||||
Reaction<ReactionThermo>(rr, species),
|
||||
k_(rr.k_)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
scalar ReversibleReaction<ReactionThermo, ReactionRate>::kf
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const
|
||||
{
|
||||
return k_(T, p, c);
|
||||
}
|
||||
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
scalar ReversibleReaction<ReactionThermo, ReactionRate>::kr
|
||||
(
|
||||
const scalar kfwd,
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const
|
||||
{
|
||||
return kfwd/this->Kc(T);
|
||||
}
|
||||
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
scalar ReversibleReaction<ReactionThermo, ReactionRate>::kr
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const
|
||||
{
|
||||
return kr(kf(T, p, c), T, p, c);
|
||||
}
|
||||
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
void ReversibleReaction<ReactionThermo, ReactionRate>::write
|
||||
(
|
||||
Ostream& os
|
||||
) const
|
||||
{
|
||||
Reaction<ReactionThermo>::write(os);
|
||||
os << token::SPACE << k_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
|
@ -0,0 +1,179 @@
|
|||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | foam-extend: Open Source CFD
|
||||
\\ / O peration | Version: 3.2
|
||||
\\ / A nd | Web: http://www.foam-extend.org
|
||||
\\/ M anipulation | For copyright notice see file Copyright
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of foam-extend.
|
||||
|
||||
foam-extend is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation, either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
foam-extend is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::ReversibleReaction
|
||||
|
||||
Description
|
||||
Simple extension of Reaction to handle reversible reactions using
|
||||
equilibrium thermodynamics.
|
||||
|
||||
SourceFiles
|
||||
ReversibleReaction.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef ReversibleReaction_H
|
||||
#define ReversibleReaction_H
|
||||
|
||||
#include "Reaction.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class ReversibleReaction Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class ReactionThermo, class ReactionRate>
|
||||
class ReversibleReaction
|
||||
:
|
||||
public Reaction<ReactionThermo>
|
||||
{
|
||||
// Private data
|
||||
|
||||
ReactionRate k_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const ReversibleReaction<ReactionThermo, ReactionRate>&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("reversible");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
ReversibleReaction
|
||||
(
|
||||
const Reaction<ReactionThermo>& reaction,
|
||||
const ReactionRate& k
|
||||
);
|
||||
|
||||
//- Construct as copy given new speciesTable
|
||||
ReversibleReaction
|
||||
(
|
||||
const ReversibleReaction<ReactionThermo, ReactionRate>&,
|
||||
const speciesTable& species
|
||||
);
|
||||
|
||||
//- Construct from Istream
|
||||
ReversibleReaction
|
||||
(
|
||||
const speciesTable& species,
|
||||
const HashPtrTable<ReactionThermo>& thermoDatabase,
|
||||
Istream& is
|
||||
);
|
||||
|
||||
//- Construct and return a clone
|
||||
virtual autoPtr<Reaction<ReactionThermo> > clone() const
|
||||
{
|
||||
return autoPtr<Reaction<ReactionThermo> >
|
||||
(
|
||||
new ReversibleReaction<ReactionThermo, ReactionRate>(*this)
|
||||
);
|
||||
}
|
||||
|
||||
//- Construct and return a clone with new speciesTable
|
||||
virtual autoPtr<Reaction<ReactionThermo> > clone
|
||||
(
|
||||
const speciesTable& species
|
||||
) const
|
||||
{
|
||||
return autoPtr<Reaction<ReactionThermo> >
|
||||
(
|
||||
new ReversibleReaction<ReactionThermo, ReactionRate>
|
||||
(
|
||||
*this,
|
||||
species
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
virtual ~ReversibleReaction()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
// ReversibleReaction rate coefficients
|
||||
|
||||
//- Forward rate constant
|
||||
virtual scalar kf
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const;
|
||||
|
||||
//- Reverse rate constant from the given formard rate constant
|
||||
virtual scalar kr
|
||||
(
|
||||
const scalar kfwd,
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const;
|
||||
|
||||
//- Reverse rate constant.
|
||||
// Note this evaluates the forward rate constant and divides by the
|
||||
// equilibrium constant
|
||||
virtual scalar kr
|
||||
(
|
||||
const scalar T,
|
||||
const scalar p,
|
||||
const scalarField& c
|
||||
) const;
|
||||
|
||||
|
||||
//- Write
|
||||
virtual void write(Ostream&) const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "ReversibleReaction.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
Reference in a new issue