/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2016-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 "SprayParcel.H"
#include "IOstreams.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
template
Foam::string Foam::SprayParcel::propertyList_ =
Foam::SprayParcel::propertyList();
template
const std::size_t Foam::SprayParcel::sizeofFields
(
sizeof(SprayParcel) - sizeof(ParcelType)
);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template
Foam::SprayParcel::SprayParcel
(
const polyMesh& mesh,
Istream& is,
bool readFields,
bool newFormat
)
:
ParcelType(mesh, is, readFields, newFormat),
d0_(0.0),
position0_(Zero),
sigma_(0.0),
mu_(0.0),
liquidCore_(0.0),
KHindex_(0.0),
y_(0.0),
yDot_(0.0),
tc_(0.0),
ms_(0.0),
injector_(1.0),
tMom_(GREAT),
user_(0.0)
{
if (readFields)
{
if (is.format() == IOstreamOption::ASCII)
{
is >> d0_
>> position0_
>> sigma_
>> mu_
>> liquidCore_
>> KHindex_
>> y_
>> yDot_
>> tc_
>> ms_
>> injector_
>> tMom_
>> user_;
}
else if (!is.checkLabelSize<>() || !is.checkScalarSize<>())
{
// Non-native label or scalar size
is.beginRawRead();
readRawScalar(is, &d0_);
readRawScalar(is, position0_.data(), vector::nComponents);
readRawScalar(is, &sigma_);
readRawScalar(is, &mu_);
readRawScalar(is, &liquidCore_);
readRawScalar(is, &KHindex_);
readRawScalar(is, &y_);
readRawScalar(is, &yDot_);
readRawScalar(is, &tc_);
readRawScalar(is, &ms_);
readRawScalar(is, &injector_);
readRawScalar(is, &tMom_);
readRawScalar(is, &user_);
is.endRawRead();
}
else
{
is.read(reinterpret_cast(&d0_), sizeofFields);
}
}
is.check(FUNCTION_NAME);
}
template
template
void Foam::SprayParcel::readFields(CloudType& c)
{
ParcelType::readFields(c);
}
template
template
void Foam::SprayParcel::readFields
(
CloudType& c,
const CompositionType& compModel
)
{
const bool readOnProc = c.size();
ParcelType::readFields(c, compModel);
IOField d0(c.newIOobject("d0", IOobject::MUST_READ), readOnProc);
c.checkFieldIOobject(c, d0);
IOField position0
(
c.newIOobject("position0", IOobject::MUST_READ),
readOnProc
);
c.checkFieldIOobject(c, position0);
IOField sigma
(
c.newIOobject("sigma", IOobject::MUST_READ),
readOnProc
);
c.checkFieldIOobject(c, sigma);
IOField mu(c.newIOobject("mu", IOobject::MUST_READ), readOnProc);
c.checkFieldIOobject(c, mu);
IOField liquidCore
(
c.newIOobject("liquidCore", IOobject::MUST_READ),
readOnProc
);
c.checkFieldIOobject(c, liquidCore);
IOField KHindex
(
c.newIOobject("KHindex", IOobject::MUST_READ),
readOnProc
);
c.checkFieldIOobject(c, KHindex);
IOField y
(
c.newIOobject("y", IOobject::MUST_READ),
readOnProc
);
c.checkFieldIOobject(c, y);
IOField yDot
(
c.newIOobject("yDot", IOobject::MUST_READ),
readOnProc
);
c.checkFieldIOobject(c, yDot);
IOField tc
(
c.newIOobject("tc", IOobject::MUST_READ),
readOnProc
);
c.checkFieldIOobject(c, tc);
IOField ms
(
c.newIOobject("ms", IOobject::MUST_READ),
readOnProc
);
c.checkFieldIOobject(c, ms);
IOField injector
(
c.newIOobject("injector", IOobject::MUST_READ),
readOnProc
);
c.checkFieldIOobject(c, injector);
IOField tMom
(
c.newIOobject("tMom", IOobject::MUST_READ),
readOnProc
);
c.checkFieldIOobject(c, tMom);
IOField user
(
c.newIOobject("user", IOobject::MUST_READ),
readOnProc
);
c.checkFieldIOobject(c, user);
label i = 0;
for (SprayParcel& p : c)
{
p.d0_ = d0[i];
p.position0_ = position0[i];
p.sigma_ = sigma[i];
p.mu_ = mu[i];
p.liquidCore_ = liquidCore[i];
p.KHindex_ = KHindex[i];
p.y_ = y[i];
p.yDot_ = yDot[i];
p.tc_ = tc[i];
p.ms_ = ms[i];
p.injector_ = injector[i];
p.tMom_ = tMom[i];
p.user_ = user[i];
++i;
}
}
template
template
void Foam::SprayParcel::writeFields(const CloudType& c)
{
ParcelType::writeFields(c);
}
template
template
void Foam::SprayParcel::writeFields
(
const CloudType& c,
const CompositionType& compModel
)
{
ParcelType::writeFields(c, compModel);
const label np = c.size();
const bool writeOnProc = c.size();
IOField d0(c.newIOobject("d0", IOobject::NO_READ), np);
IOField position0
(
c.newIOobject("position0", IOobject::NO_READ),
np
);
IOField sigma(c.newIOobject("sigma", IOobject::NO_READ), np);
IOField mu(c.newIOobject("mu", IOobject::NO_READ), np);
IOField liquidCore
(
c.newIOobject("liquidCore", IOobject::NO_READ),
np
);
IOField KHindex(c.newIOobject("KHindex", IOobject::NO_READ), np);
IOField y(c.newIOobject("y", IOobject::NO_READ), np);
IOField yDot(c.newIOobject("yDot", IOobject::NO_READ), np);
IOField tc(c.newIOobject("tc", IOobject::NO_READ), np);
IOField ms(c.newIOobject("ms", IOobject::NO_READ), np);
IOField injector
(
c.newIOobject("injector", IOobject::NO_READ),
np
);
IOField tMom(c.newIOobject("tMom", IOobject::NO_READ), np);
IOField user(c.newIOobject("user", IOobject::NO_READ), np);
label i = 0;
for (const SprayParcel& p : c)
{
d0[i] = p.d0_;
position0[i] = p.position0_;
sigma[i] = p.sigma_;
mu[i] = p.mu_;
liquidCore[i] = p.liquidCore_;
KHindex[i] = p.KHindex_;
y[i] = p.y_;
yDot[i] = p.yDot_;
tc[i] = p.tc_;
ms[i] = p.ms_;
injector[i] = p.injector_;
tMom[i] = p.tMom_;
user[i] = p.user_;
++i;
}
d0.write(writeOnProc);
position0.write(writeOnProc);
sigma.write(writeOnProc);
mu.write(writeOnProc);
liquidCore.write(writeOnProc);
KHindex.write(writeOnProc);
y.write(writeOnProc);
yDot.write(writeOnProc);
tc.write(writeOnProc);
ms.write(writeOnProc);
injector.write(writeOnProc);
tMom.write(writeOnProc);
user.write(writeOnProc);
}
template
void Foam::SprayParcel::writeProperties
(
Ostream& os,
const wordRes& filters,
const word& delim,
const bool namesOnly
) const
{
ParcelType::writeProperties(os, filters, delim, namesOnly);
#undef writeProp
#define writeProp(Name, Value) \
ParcelType::writeProperty(os, Name, Value, namesOnly, delim, filters)
writeProp("d0", d0_);
writeProp("position0", position0_);
writeProp("sigma", sigma_);
writeProp("mu", mu_);
writeProp("liquidCore", liquidCore_);
writeProp("KHindex", KHindex_);
writeProp("y", y_);
writeProp("yDot", yDot_);
writeProp("tc", tc_);
writeProp("ms", ms_);
writeProp("injector", injector_);
writeProp("tMom", tMom_);
writeProp("user", user_);
#undef writeProp
}
template
template
void Foam::SprayParcel::readObjects
(
CloudType& c,
const objectRegistry& obr
)
{
ParcelType::readObjects(c, obr);
}
template
template
void Foam::SprayParcel::writeObjects
(
const CloudType& c,
objectRegistry& obr
)
{
ParcelType::writeObjects(c, obr);
}
template
template
void Foam::SprayParcel::readObjects
(
CloudType& c,
const CompositionType& compModel,
const objectRegistry& obr
)
{
ParcelType::readObjects(c, compModel, obr);
if (!c.size()) return;
const auto& d0 = cloud::lookupIOField("d0", obr);
const auto& position0 = cloud::lookupIOField("position0", obr);
const auto& sigma = cloud::lookupIOField("sigma", obr);
const auto& mu = cloud::lookupIOField("mu", obr);
const auto& liquidCore = cloud::lookupIOField("liquidCore", obr);
const auto& KHindex = cloud::lookupIOField("KHindex", obr);
const auto& y = cloud::lookupIOField("y", obr);
const auto& yDot = cloud::lookupIOField("yDot", obr);
const auto& tc = cloud::lookupIOField("tc", obr);
const auto& ms = cloud::lookupIOField("ms", obr);
const auto& injector = cloud::lookupIOField("injector", obr);
const auto& tMom = cloud::lookupIOField("tMom", obr);
const auto& user = cloud::lookupIOField("user", obr);
label i = 0;
for (SprayParcel& p : c)
{
p.d0_ = d0[i];
p.position0_ = position0[i];
p.sigma_ = sigma[i];
p.mu_ = mu[i];
p.liquidCore_ = liquidCore[i];
p.KHindex_ = KHindex[i];
p.y_ = y[i];
p.yDot_ = yDot[i];
p.tc_ = tc[i];
p.ms_ = ms[i];
p.injector_ = injector[i];
p.tMom_ = tMom[i];
p.user_ = user[i];
++i;
}
}
template
template
void Foam::SprayParcel::writeObjects
(
const CloudType& c,
const CompositionType& compModel,
objectRegistry& obr
)
{
ParcelType::writeObjects(c, compModel, obr);
const label np = c.size();
auto& d0 = cloud::createIOField("d0", np, obr);
auto& position0 = cloud::createIOField("position0", np, obr);
auto& sigma = cloud::createIOField("sigma", np, obr);
auto& mu = cloud::createIOField("mu", np, obr);
auto& liquidCore = cloud::createIOField("liquidCore", np, obr);
auto& KHindex = cloud::createIOField("KHindex", np, obr);
auto& y = cloud::createIOField("y", np, obr);
auto& yDot= cloud::createIOField("yDot", np, obr);
auto& tc = cloud::createIOField("tc", np, obr);
auto& ms = cloud::createIOField("ms", np, obr);
auto& injector = cloud::createIOField("injector", np, obr);
auto& tMom = cloud::createIOField("tMom", np, obr);
auto& user = cloud::createIOField("user", np, obr);
label i = 0;
for (const SprayParcel& p : c)
{
d0[i] = p.d0_;
position0[i] = p.position0_;
sigma[i] = p.sigma_;
mu[i] = p.mu_;
liquidCore[i] = p.liquidCore_;
KHindex[i] = p.KHindex_;
y[i] = p.y_;
yDot[i] = p.yDot_;
tc[i] = p.tc_;
ms[i] = p.ms_;
injector[i] = p.injector_;
tMom[i] = p.tMom_;
user[i] = p.user_;
++i;
}
}
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
template
Foam::Ostream& Foam::operator<<
(
Ostream& os,
const SprayParcel& p
)
{
if (os.format() == IOstreamOption::ASCII)
{
os << static_cast(p)
<< token::SPACE << p.d0()
<< token::SPACE << p.position0()
<< token::SPACE << p.sigma()
<< token::SPACE << p.mu()
<< token::SPACE << p.liquidCore()
<< token::SPACE << p.KHindex()
<< token::SPACE << p.y()
<< token::SPACE << p.yDot()
<< token::SPACE << p.tc()
<< token::SPACE << p.ms()
<< token::SPACE << p.injector()
<< token::SPACE << p.tMom()
<< token::SPACE << p.user();
}
else
{
os << static_cast(p);
os.write
(
reinterpret_cast(&p.d0_),
SprayParcel::sizeofFields
);
}
os.check(FUNCTION_NAME);
return os;
}
// ************************************************************************* //