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