/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2014-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
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 "SidedInterfacialModel.H"
#include "phaseSystem.H"
#include "sidedPhaseInterface.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template
Foam::SidedInterfacialModel::SidedInterfacialModel
(
const dictionary& dict,
const phaseInterface& interface
)
:
regIOobject
(
IOobject
(
IOobject::groupName(typeName, interface.name()),
interface.mesh().time().name(),
interface.mesh()
)
),
interface_(interface)
{
// Construct the models
PtrList interfaces;
PtrList models;
interface.fluid().generateInterfacialModels
(
dict,
interface,
interfaces,
models
);
// Unpack the interface and model lists to populate the models used for
// either side of the interface
forAll(interfaces, i)
{
const sidedPhaseInterface& interface =
refCast(interfaces[i]);
if (interface_.index(interface.phase()) == 0)
{
modelInPhase1_.set(models.set(i, nullptr).ptr());
}
else
{
modelInPhase2_.set(models.set(i, nullptr).ptr());
}
}
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
template
Foam::SidedInterfacialModel::~SidedInterfacialModel()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
template
const Foam::phaseInterface&
Foam::SidedInterfacialModel::interface() const
{
return interface_;
}
template
bool Foam::SidedInterfacialModel::haveModelInThe
(
const phaseModel& phase
) const
{
return
interface_.index(phase) == 0
? modelInPhase1_.valid()
: modelInPhase2_.valid();
}
template
const ModelType& Foam::SidedInterfacialModel::modelInThe
(
const phaseModel& phase
) const
{
if (!haveModelInThe(phase))
{
FatalErrorInFunction
<< "There is no " << type() << " active for the "
<< phase.name() << " side of the "
<< interface_.name() << " interface"
<< exit(FatalError);
}
return
interface_.index(phase) == 0
? modelInPhase1_()
: modelInPhase2_();
}
template
ModelType& Foam::SidedInterfacialModel::modelInThe
(
const phaseModel& phase
)
{
if (!haveModelInThe(phase))
{
FatalErrorInFunction
<< "There is no " << type() << " active for the "
<< phase.name() << " side of the "
<< interface_.name() << " interface"
<< exit(FatalError);
}
return
interface_.index(phase) == 0
? modelInPhase1_()
: modelInPhase2_();
}
template
bool Foam::SidedInterfacialModel::writeData(Ostream& os) const
{
return os.good();
}
// ************************************************************************* //