BUG: foamReport mesh quantities are not parallel (fixes #3338)

This commit is contained in:
Mark Olesen
2025-03-12 18:17:32 +01:00
parent 47f2ff618d
commit 0a53013499

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2024 OpenCFD Ltd. Copyright (C) 2024-2025 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -32,6 +32,7 @@ License
#include "cloud.H" #include "cloud.H"
#include "foamVersion.H" #include "foamVersion.H"
#include "fvMesh.H" #include "fvMesh.H"
#include "globalMeshData.H"
#include "IFstream.H" #include "IFstream.H"
#include "stringOps.H" #include "stringOps.H"
#include "substitutionModel.H" #include "substitutionModel.H"
@ -56,7 +57,7 @@ void Foam::functionObjects::foamReport::setStaticBuiltins()
substitutionModel::addBuiltinStr substitutionModel::addBuiltinStr
( (
"OF_PROC_ZERO_DIR", "OF_PROC_ZERO_DIR",
Pstream::parRun() ? "processor0" : "" UPstream::parRun() ? "processor0" : ""
); );
substitutionModel::addBuiltin("OF_API", foamVersion::api); substitutionModel::addBuiltin("OF_API", foamVersion::api);
@ -72,26 +73,45 @@ void Foam::functionObjects::foamReport::setStaticBuiltins()
substitutionModel::addBuiltinStr("OF_CASE_PATH", argList::envGlobalPath()); substitutionModel::addBuiltinStr("OF_CASE_PATH", argList::envGlobalPath());
substitutionModel::addBuiltinStr("OF_CASE_NAME", time().globalCaseName()); substitutionModel::addBuiltinStr("OF_CASE_NAME", time().globalCaseName());
substitutionModel::addBuiltin("OF_NPROCS", Pstream::nProcs()); substitutionModel::addBuiltin("OF_NPROCS", UPstream::nProcs());
// Set mesh builtins when there is only 1 mesh // Set mesh builtins when there is only 1 mesh
const auto meshes = time_.lookupClass<fvMesh>(); const auto meshes = time_.csorted<fvMesh>();
if (meshes.size() == 1) if (meshes.size() == 1)
{ {
const auto& mesh = *(meshes.begin().val()); const auto& mesh = meshes[0];
substitutionModel::addBuiltin("OF_MESH_NCELLS", mesh.nCells());
substitutionModel::addBuiltin("OF_MESH_NFACES", mesh.nFaces()); substitutionModel::addBuiltin
substitutionModel::addBuiltin("OF_MESH_NEDGES", mesh.nEdges()); (
substitutionModel::addBuiltin("OF_MESH_NPOINTS", mesh.nPoints()); "OF_MESH_NCELLS",
mesh.globalData().nTotalCells()
);
substitutionModel::addBuiltin
(
"OF_MESH_NFACES",
mesh.globalData().nTotalFaces()
);
substitutionModel::addBuiltin
(
"OF_MESH_NEDGES",
returnReduce(mesh.nEdges(), sumOp<label>())
);
substitutionModel::addBuiltin
(
"OF_MESH_NPOINTS",
mesh.globalData().nTotalPoints()
);
substitutionModel::addBuiltin substitutionModel::addBuiltin
( (
"OF_MESH_NINTERNALFACES", "OF_MESH_NINTERNALFACES",
mesh.nInternalFaces() returnReduce(mesh.nInternalFaces(), sumOp<label>())
); );
substitutionModel::addBuiltin substitutionModel::addBuiltin
( (
"OF_MESH_NBOUNDARYFACES", "OF_MESH_NBOUNDARYFACES",
mesh.nBoundaryFaces() // TBD: use mesh.boundaryMesh().nNonProcessorFaces() ?
returnReduce(mesh.nBoundaryFaces(), sumOp<label>())
); );
substitutionModel::addBuiltin substitutionModel::addBuiltin
( (
@ -123,8 +143,8 @@ void Foam::functionObjects::foamReport::setDynamicBuiltins()
substitutionModel::setBuiltinStr("OF_DATE_NOW", clock::date()); substitutionModel::setBuiltinStr("OF_DATE_NOW", clock::date());
substitutionModel::setBuiltinStr("OF_CLOCK_NOW", clock::clockTime()); substitutionModel::setBuiltinStr("OF_CLOCK_NOW", clock::clockTime());
substitutionModel::setBuiltin("OF_NREGIONS", time().names<fvMesh>().size()); substitutionModel::setBuiltin("OF_NREGIONS", time().count<fvMesh>());
substitutionModel::setBuiltin("OF_NCLOUDS", time().names<cloud>().size()); substitutionModel::setBuiltin("OF_NCLOUDS", time().count<cloud>());
} }