/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2023 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 "lagrangianFieldDecomposer.H"
#include "IOobjectList.H"
#include "CompactIOField.H"
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
template class IOContainer>
Foam::PtrList>
Foam::lagrangianFieldDecomposer::decomposeField
(
const IOobject& fieldIoObject
) const
{
// Read the complete field
const IOContainer field(fieldIoObject);
// Construct the processor fields
PtrList> procFields(procMeshes_.size());
forAll(procMeshes_, proci)
{
procFields.set
(
proci,
new IOContainer
(
IOobject
(
field.name(),
procMeshes_[proci].time().name(),
cloud::prefix/cloudName_,
procMeshes_[proci],
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
Field(field, particleProcAddressing_[proci])
)
);
}
return procFields;
}
template
<
class Type,
template class IOContainer,
template class IOContainerType
>
void Foam::lagrangianFieldDecomposer::decomposeFields
(
const IOobjectList& objects
)
{
const word& fieldClassName = IOContainerType::typeName;
IOobjectList fields = objects.lookupClass(fieldClassName);
if (fields.size())
{
Info<< nl << " Decomposing " << fieldClassName << "s" << nl << endl;
forAllConstIter(IOobjectList, fields, fieldIter)
{
Info<< " " << fieldIter()->name() << endl;
PtrList> procFields =
decomposeField(*fieldIter());
forAll(procFields, proci)
{
procFields[proci].write();
}
}
}
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template
void Foam::lagrangianFieldDecomposer::decomposeFields
(
const IOobjectList& objects
)
{
decomposeFields(objects);
decomposeFields, CompactIOField, IOField>(objects);
decomposeFields, CompactIOField, CompactIOField>(objects);
}
// ************************************************************************* //