ENH: use objectRegistry/IOobjectList sorted instead of lookupClass

- in most cases a parallel-consistent order is required.
  Even when the order is not important, it will generally require
  fewer allocations to create a UPtrList of entries instead of a
  HashTable or even a wordList.
This commit is contained in:
Mark Olesen
2023-07-17 18:27:55 +02:00
parent d65e2d89b5
commit db16d80840
70 changed files with 1300 additions and 1758 deletions

View File

@ -6,6 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -105,8 +106,9 @@ int main(int argc, char *argv[])
"foamDataToFluentDict",
runTime.system(),
mesh,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
IOobjectOption::MUST_READ,
IOobjectOption::NO_WRITE,
IOobjectOption::NO_REGISTER
)
);
@ -115,44 +117,21 @@ int main(int argc, char *argv[])
IOobjectList objects(mesh, runTime.timeName());
// volScalarField
for (const word& fieldName : objects.sortedNames<volScalarField>())
{
// Lookup field from dictionary and convert field
label unitNumber;
if
(
foamDataToFluentDict.readIfPresent(fieldName, unitNumber)
&& unitNumber > 0
)
{
// Read field
volScalarField field(*(objects[fieldName]), mesh);
readFieldsAndWriteFluent<volScalarField>
(
foamDataToFluentDict,
objects,
mesh,
fluentDataFile
);
Info<< " Converting field " << fieldName << nl;
writeFluentField(field, unitNumber, fluentDataFile);
}
}
// volVectorField
for (const word& fieldName : objects.sortedNames<volVectorField>())
{
// Lookup field from dictionary and convert field
label unitNumber;
if
(
foamDataToFluentDict.readIfPresent(fieldName, unitNumber)
&& unitNumber > 0
)
{
// Read field
volVectorField field(*(objects[fieldName]), mesh);
Info<< " Converting field " << fieldName << nl;
writeFluentField(field, unitNumber, fluentDataFile);
}
}
readFieldsAndWriteFluent<volVectorField>
(
foamDataToFluentDict,
objects,
mesh,
fluentDataFile
);
Info<< endl;
}

View File

@ -28,10 +28,12 @@ InClass
\*---------------------------------------------------------------------------*/
#ifndef writeFluentFields_H
#define writeFluentFields_H
#ifndef Foam_writeFluentFields_H
#define Foam_writeFluentFields_H
#include "volFields.H"
#include "dictionary.H"
#include "IOobjectList.H"
#include "Ostream.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -43,16 +45,48 @@ void writeFluentField
(
const volScalarField& phi,
const label fluentFieldIdentifier,
Ostream& stream
Ostream& os
);
void writeFluentField
(
const volVectorField& phi,
const label fluentFieldIdentifier,
Ostream& stream
Ostream& os
);
template<class GeoField>
void readFieldsAndWriteFluent
(
const dictionary& dict,
const IOobjectList& objects,
const fvMesh& mesh,
Ostream& os
)
{
for (const IOobject& io : objects.csorted<GeoField>())
{
// Lookup field from dictionary and convert field
const word& fieldName = io.name();
label unitNumber;
if
(
dict.readIfPresent(fieldName, unitNumber)
&& unitNumber > 0
)
{
// Read field
GeoField field(io, mesh);
Info<< " Converting field " << fieldName << nl;
writeFluentField(field, unitNumber, os);
}
}
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam

View File

@ -6,6 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -35,12 +36,7 @@ Description
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
void writeFluentField
void Foam::writeFluentField
(
const volScalarField& phi,
const label fluentFieldIdentifier,
@ -58,15 +54,15 @@ void writeFluentField
<< "1 " // Number of components (scalar=1, vector=3)
<< "0 0 " // Unused
<< "1 " << phiInternal.size() // Start and end of list
<< ")(" << endl;
<< ")(" << nl;
forAll(phiInternal, celli)
for (const scalar val : phiInternal)
{
stream << phiInternal[celli] << endl;
stream << val << nl;
}
stream
<< "))" << endl;
<< "))" << nl;
label nWrittenFaces = phiInternal.size();
@ -92,13 +88,13 @@ void writeFluentField
<< "0 0 " // Unused
<< nWrittenFaces + 1 << " "
<< nWrittenFaces + emptyFaceCells.size()// Start and end of list
<< ")(" << endl;
<< ")(" << nl;
nWrittenFaces += emptyFaceCells.size();
forAll(emptyFaceCells, facei)
{
stream << phiInternal[emptyFaceCells[facei]] << endl;
stream << phiInternal[emptyFaceCells[facei]] << nl;
}
stream
@ -120,13 +116,13 @@ void writeFluentField
<< "0 0 " // Unused
<< nWrittenFaces + 1 << " " << nWrittenFaces + patchPhi.size()
// Start and end of list
<< ")(" << endl;
<< ")(" << nl;
nWrittenFaces += patchPhi.size();
forAll(patchPhi, facei)
for (const scalar val : patchPhi)
{
stream << patchPhi[facei] << endl;
stream << val << nl;
}
stream
@ -136,8 +132,4 @@ void writeFluentField
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //

View File

@ -6,6 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -34,12 +35,7 @@ Description
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
void writeFluentField
void Foam::writeFluentField
(
const volVectorField& phi,
const label fluentFieldIdentifier,
@ -57,19 +53,16 @@ void writeFluentField
<< "3 " // Number of components (scalar=1, vector=3)
<< "0 0 " // Unused
<< "1 " << phiInternal.size() // Start and end of list
<< ")(" << endl;
<< ")(" << nl;
forAll(phiInternal, celli)
for (const vector& val : phiInternal)
{
stream
<< phiInternal[celli].x() << " "
<< phiInternal[celli].y() << " "
<< phiInternal[celli].z() << " "
<< endl;
<< val.x() << ' ' << val.y() << ' ' << val.z() << nl;
}
stream
<< "))" << endl;
<< "))" << nl;
label nWrittenFaces = phiInternal.size();
@ -87,17 +80,14 @@ void writeFluentField
<< "0 0 " // Unused
<< nWrittenFaces + 1 << " " << nWrittenFaces + patchPhi.size()
// Start and end of list
<< ")(" << endl;
<< ")(" << nl;
nWrittenFaces += patchPhi.size();
forAll(patchPhi, facei)
for (const vector& val : patchPhi)
{
stream
<< patchPhi[facei].x() << " "
<< patchPhi[facei].y() << " "
<< patchPhi[facei].z() << " "
<< endl;
<< val.x() << ' ' << val.y() << ' ' << val.z() << nl;
}
stream
@ -106,6 +96,4 @@ void writeFluentField
}
} // End namespace Foam
// ************************************************************************* //