/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021,2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM 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.
OpenFOAM 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 OpenFOAM. If not, see .
\*---------------------------------------------------------------------------*/
#include "pureZoneMixture.H"
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
template
const ThermoType& Foam::pureZoneMixture::constructSpeciesData
(
const dictionary& thermoDict
)
{
const auto& czs = mesh_.cellZones();
const auto* dictPtr = thermoDict.findDict("none");
speciesData_.setSize(dictPtr ? czs.size()+1 : czs.size());
forAll(czs, i)
{
speciesData_.set
(
i,
new ThermoType(thermoDict.subDict(czs[i].name()))
);
}
if (dictPtr)
{
speciesData_.set(czs.size(), new ThermoType(*dictPtr));
}
return speciesData_[0];
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template
Foam::pureZoneMixture::pureZoneMixture
(
const dictionary& thermoDict,
const fvMesh& mesh,
const word& phaseName
)
:
basicMixture(thermoDict, mesh, phaseName),
mesh_(mesh),
mixture_("mixture", constructSpeciesData(thermoDict.subDict("mixture")))
{
// Cache index per cell. This is the cellZone except for unzoned cells
// which are last
const auto& czs = mesh_.cellZones();
zoneID_.setSize(mesh_.nCells(), czs.size());
for (const auto& cz : czs)
{
UIndirectList