Compare commits

..

7 Commits

1841 changed files with 28377 additions and 44343 deletions

View File

@ -49,10 +49,10 @@
<!-- <!--
Providing details of your set-up can help us identify any issues, e.g. Providing details of your set-up can help us identify any issues, e.g.
OpenFOAM version : v2406|v2312|v2306|v2212|v2206 etc OpenFOAM version : v2312|v2306|v2212|v2206|v2112 etc
Operating system : ubuntu|openSUSE|RedHat etc Operating system : ubuntu|openSUSE|centos etc
Hardware info : any info that may help? Hardware info : any info that may help?
Compiler : gcc|clang etc Compiler : gcc|intel|clang etc
--> -->
- OpenFOAM version : - OpenFOAM version :

9
.gitmodules vendored
View File

@ -1,8 +1,8 @@
[submodule "cfmesh"] [submodule "cfmesh"]
path = plugins/cfmesh path = modules/cfmesh
url = https://develop.openfoam.com/Community/integration-cfmesh.git url = https://develop.openfoam.com/Community/integration-cfmesh.git
[submodule "avalanche"] [submodule "avalanche"]
path = plugins/avalanche path = modules/avalanche
url = https://develop.openfoam.com/Community/avalanche.git url = https://develop.openfoam.com/Community/avalanche.git
[submodule "adios"] [submodule "adios"]
path = modules/adios path = modules/adios
@ -18,8 +18,5 @@
path = modules/external-solver path = modules/external-solver
url = https://develop.openfoam.com/Modules/external-solver.git url = https://develop.openfoam.com/Modules/external-solver.git
[submodule "turbulence-community"] [submodule "turbulence-community"]
path = plugins/turbulence-community path = modules/turbulence-community
url = https://gitlab.com/openfoam/community/tc-turbulence/turbulence-community.git url = https://gitlab.com/openfoam/community/tc-turbulence/turbulence-community.git
[submodule "plugins/data-community"]
path = plugins/data-community
url = https://gitlab.com/openfoam/community/sig-data-modelling/data-community.git

View File

@ -1,2 +1,2 @@
api=2406 api=2312
patch=0 patch=0

View File

@ -40,9 +40,9 @@ Violations of the Trademark are monitored, and will be duly prosecuted.
If OpenFOAM has already been compiled on your system, simply source If OpenFOAM has already been compiled on your system, simply source
the appropriate `etc/bashrc` or `etc/cshrc` file and get started. the appropriate `etc/bashrc` or `etc/cshrc` file and get started.
For example, for the OpenFOAM-v2406 version: For example, for the OpenFOAM-v2312 version:
``` ```
source /installation/path/OpenFOAM-v2406/etc/bashrc source /installation/path/OpenFOAM-v2312/etc/bashrc
``` ```
## Compiling OpenFOAM ## Compiling OpenFOAM
@ -127,8 +127,8 @@ These 3rd-party sources are normally located in a directory parallel
to the OpenFOAM directory. For example, to the OpenFOAM directory. For example,
``` ```
/path/parent /path/parent
|-- OpenFOAM-v2406 |-- OpenFOAM-v2312
\-- ThirdParty-v2406 \-- ThirdParty-v2312
``` ```
There are, however, many cases where this simple convention is inadequate: There are, however, many cases where this simple convention is inadequate:
@ -136,7 +136,7 @@ There are, however, many cases where this simple convention is inadequate:
operating system or cluster installation provides it) operating system or cluster installation provides it)
* When we have changed the OpenFOAM directory name to some arbitrary * When we have changed the OpenFOAM directory name to some arbitrary
directory name, e.g. openfoam-sandbox2406, etc.. directory name, e.g. openfoam-sandbox2312, etc..
* When we would like any additional 3rd party software to be located * When we would like any additional 3rd party software to be located
inside of the OpenFOAM directory to ensure that the installation is inside of the OpenFOAM directory to ensure that the installation is
@ -156,9 +156,9 @@ when locating the ThirdParty directory with the following precedence:
2. PREFIX/ThirdParty-VERSION 2. PREFIX/ThirdParty-VERSION
* this corresponds to the traditional approach * this corresponds to the traditional approach
3. PREFIX/ThirdParty-vAPI 3. PREFIX/ThirdParty-vAPI
* allows for an updated value of VERSION, *eg*, `v2406-myCustom`, * allows for an updated value of VERSION, *eg*, `v2312-myCustom`,
without requiring a renamed ThirdParty. The API value would still without requiring a renamed ThirdParty. The API value would still
be `2406` and the original `ThirdParty-v2406/` would be found. be `2312` and the original `ThirdParty-v2312/` would be found.
4. PREFIX/ThirdParty-API 4. PREFIX/ThirdParty-API
* same as the previous example, but using an unadorned API value. * same as the previous example, but using an unadorned API value.
5. PREFIX/ThirdParty-common 5. PREFIX/ThirdParty-common
@ -213,4 +213,4 @@ ThirdParty directory will contain either an `Allwmake` file or a
- [Governance](http://www.openfoam.com/governance/), [Governance Projects](https://www.openfoam.com/governance/projects) - [Governance](http://www.openfoam.com/governance/), [Governance Projects](https://www.openfoam.com/governance/projects)
- [Contacting OpenCFD](http://www.openfoam.com/contact/) - [Contacting OpenCFD](http://www.openfoam.com/contact/)
Copyright 2016-2024 OpenCFD Ltd Copyright 2016-2023 OpenCFD Ltd

View File

@ -6,7 +6,6 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -94,14 +93,24 @@ Foam::PDRDragModels::basic::~basic()
Foam::tmp<Foam::volSymmTensorField> Foam::PDRDragModels::basic::Dcu() const Foam::tmp<Foam::volSymmTensorField> Foam::PDRDragModels::basic::Dcu() const
{ {
auto tDragDcu = volSymmTensorField::New tmp<volSymmTensorField> tDragDcu
( (
"tDragDcu", new volSymmTensorField
IOobject::NO_REGISTER, (
U_.mesh(), IOobject
dimensionedSymmTensor(dimMass/dimTime/dimVolume, Zero) (
"tDragDcu",
U_.mesh().time().constant(),
U_.mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
U_.mesh(),
dimensionedSymmTensor(dimMass/dimTime/dimVolume, Zero)
)
); );
auto& DragDcu = tDragDcu.ref();
volSymmTensorField& DragDcu = tDragDcu.ref();
if (on_) if (on_)
{ {
@ -118,14 +127,24 @@ Foam::tmp<Foam::volSymmTensorField> Foam::PDRDragModels::basic::Dcu() const
Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basic::Gk() const Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basic::Gk() const
{ {
auto tGk = volScalarField::New tmp<volScalarField> tGk
( (
"tGk", new volScalarField
IOobject::NO_REGISTER, (
U_.mesh(), IOobject
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero) (
"tGk",
U_.mesh().time().constant(),
U_.mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
U_.mesh(),
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
)
); );
auto& Gk = tGk.ref();
volScalarField& Gk = tGk.ref();
if (on_) if (on_)
{ {

View File

@ -6,7 +6,6 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -94,14 +93,23 @@ Foam::tmp<Foam::volScalarField> Foam::XiEqModels::SCOPEXiEq::XiEq() const
volScalarField K(0.157*upBySu/sqrt(Rl)); volScalarField K(0.157*upBySu/sqrt(Rl));
volScalarField Ma(MaModel.Ma()); volScalarField Ma(MaModel.Ma());
auto tXiEq = volScalarField::New tmp<volScalarField> tXiEq
( (
"XiEq", new volScalarField
IOobject::NO_REGISTER, (
epsilon.mesh(), IOobject
dimensionedScalar(dimless, Zero) (
"XiEq",
epsilon.time().timeName(),
epsilon.db(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
epsilon.mesh(),
dimensionedScalar(dimless, Zero)
)
); );
auto& xieq = tXiEq.ref(); volScalarField& xieq = tXiEq.ref();
forAll(xieq, celli) forAll(xieq, celli)
{ {

View File

@ -78,10 +78,11 @@ bool Foam::XiEqModel::read(const dictionary& XiEqProperties)
void Foam::XiEqModel::writeFields() const void Foam::XiEqModel::writeFields() const
{ {
//***HGW It is not clear why B is written here //***HGW It is not clear why B is written here
const auto* B = Su_.mesh().cfindObject<volSymmTensorField>("B"); if (Su_.mesh().foundObject<volSymmTensorField>("B"))
if (B)
{ {
B->write(); const volSymmTensorField& B =
Su_.mesh().lookupObject<volSymmTensorField>("B");
B.write();
} }
} }
@ -97,26 +98,39 @@ Foam::XiEqModel::calculateSchelkinEffect(const scalar uPrimeCoef) const
const volSymmTensorField& nsv = const volSymmTensorField& nsv =
mesh.lookupObject<volSymmTensorField>("nsv"); mesh.lookupObject<volSymmTensorField>("nsv");
auto tN = volScalarField::New tmp<volScalarField> tN
( (
"tN", new volScalarField
IOobject::NO_REGISTER, (
mesh, IOobject
dimensionedScalar(Nv.dimensions(), Zero) (
"tN",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE,
IOobject::NO_REGISTER
),
mesh,
dimensionedScalar(Nv.dimensions(), Zero)
)
); );
auto& N = tN.ref(); volScalarField& N = tN.ref();
N.primitiveFieldRef() = Nv.primitiveField()*pow(mesh.V(), 2.0/3.0); N.primitiveFieldRef() = Nv.primitiveField()*pow(mesh.V(), 2.0/3.0);
auto tns = volSymmTensorField::New volSymmTensorField ns
( (
"tns", IOobject
IOobject::NO_REGISTER, (
"tns",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh, mesh,
dimensionedSymmTensor(nsv.dimensions(), Zero) dimensionedSymmTensor(nsv.dimensions(), Zero)
); );
auto& ns = tns.ref();
ns.primitiveFieldRef() = nsv.primitiveField()*pow(mesh.V(), 2.0/3.0); ns.primitiveFieldRef() = nsv.primitiveField()*pow(mesh.V(), 2.0/3.0);
const volVectorField Uhat const volVectorField Uhat

View File

@ -6,7 +6,6 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -256,14 +255,24 @@ Foam::tmp<Foam::volScalarField> Foam::laminarFlameSpeedModels::SCOPE::Su0pTphi
scalar phi scalar phi
) const ) const
{ {
auto tSu0 = volScalarField::New tmp<volScalarField> tSu0
( (
"Su0", new volScalarField
IOobject::NO_REGISTER, (
p.mesh(), IOobject
dimensionedScalar(dimVelocity, Zero) (
"Su0",
p.time().timeName(),
p.db(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
p.mesh(),
dimensionedScalar(dimVelocity, Zero)
)
); );
auto& Su0 = tSu0.ref();
volScalarField& Su0 = tSu0.ref();
forAll(Su0, celli) forAll(Su0, celli)
{ {
@ -295,14 +304,24 @@ Foam::tmp<Foam::volScalarField> Foam::laminarFlameSpeedModels::SCOPE::Su0pTphi
const volScalarField& phi const volScalarField& phi
) const ) const
{ {
auto tSu0 = volScalarField::New tmp<volScalarField> tSu0
( (
"Su0", new volScalarField
IOobject::NO_REGISTER, (
p.mesh(), IOobject
dimensionedScalar(dimVelocity, Zero) (
"Su0",
p.time().timeName(),
p.db(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
p.mesh(),
dimensionedScalar(dimVelocity, Zero)
)
); );
auto& Su0 = tSu0.ref();
volScalarField& Su0 = tSu0.ref();
forAll(Su0, celli) forAll(Su0, celli)
{ {
@ -339,14 +358,24 @@ Foam::tmp<Foam::volScalarField> Foam::laminarFlameSpeedModels::SCOPE::Ma
const volScalarField& phi const volScalarField& phi
) const ) const
{ {
auto tMa = volScalarField::New tmp<volScalarField> tMa
( (
"Ma", new volScalarField
IOobject::NO_REGISTER, (
phi.mesh(), IOobject
dimensionedScalar(dimless, Zero) (
"Ma",
phi.time().timeName(),
phi.db(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
phi.mesh(),
dimensionedScalar(dimless, Zero)
)
); );
auto& ma = tMa.ref();
volScalarField& ma = tMa.ref();
forAll(ma, celli) forAll(ma, celli)
{ {
@ -389,12 +418,21 @@ Foam::laminarFlameSpeedModels::SCOPE::Ma() const
{ {
const fvMesh& mesh = psiuReactionThermo_.p().mesh(); const fvMesh& mesh = psiuReactionThermo_.p().mesh();
return volScalarField::New return tmp<volScalarField>
( (
"Ma", new volScalarField
IOobject::NO_REGISTER, (
mesh, IOobject
dimensionedScalar("Ma", dimless, Ma(equivalenceRatio_)) (
"Ma",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedScalar("Ma", dimless, Ma(equivalenceRatio_))
)
); );
} }
} }

View File

@ -10,8 +10,7 @@ if (pimple.dict().getOrDefault("hydrostaticInitialization", false))
"0", "0",
mesh, mesh,
IOobject::MUST_READ, IOobject::MUST_READ,
IOobject::NO_WRITE, IOobject::NO_WRITE
IOobject::REGISTER
), ),
mesh mesh
) )

View File

@ -21,11 +21,6 @@
+ fvOptions(rho, he) + fvOptions(rho, he)
); );
if (MRF.active())
{
EEqn += fvc::div(MRF.phi(), p);
}
EEqn.relax(); EEqn.relax();
fvOptions.constrain(EEqn); fvOptions.constrain(EEqn);

View File

@ -20,11 +20,6 @@
fvOptions(rho, he) fvOptions(rho, he)
); );
if (MRF.active())
{
EEqn += fvc::div(MRF.phi(), p);
}
EEqn.relax(); EEqn.relax();
fvOptions.constrain(EEqn); fvOptions.constrain(EEqn);

View File

@ -14,11 +14,6 @@
fvOptions(rho, he) fvOptions(rho, he)
); );
if (MRF.active())
{
EEqn += fvc::div(MRF.phi(), p);
}
EEqn.relax(); EEqn.relax();
fvOptions.constrain(EEqn); fvOptions.constrain(EEqn);

View File

@ -9,11 +9,6 @@
fvOptions(rho, e) fvOptions(rho, e)
); );
if (MRF.active())
{
EEqn += fvc::div(MRF.phi(), p);
}
EEqn.relax(); EEqn.relax();
fvOptions.constrain(EEqn); fvOptions.constrain(EEqn);

View File

@ -3,7 +3,12 @@ if (nAlphaSubCycles > 1)
dimensionedScalar totalDeltaT = runTime.deltaT(); dimensionedScalar totalDeltaT = runTime.deltaT();
surfaceScalarField rhoPhiSum surfaceScalarField rhoPhiSum
( (
mesh.newIOobject("rhoPhiSum"), IOobject
(
"rhoPhiSum",
runTime.timeName(),
mesh
),
mesh, mesh,
dimensionedScalar(rhoPhi.dimensions(), Zero) dimensionedScalar(rhoPhi.dimensions(), Zero)
); );

View File

@ -3,7 +3,12 @@ if (nAlphaSubCycles > 1)
dimensionedScalar totalDeltaT = runTime.deltaT(); dimensionedScalar totalDeltaT = runTime.deltaT();
surfaceScalarField rhoPhiSum surfaceScalarField rhoPhiSum
( (
mesh.newIOobject("rhoPhiSum"), IOobject
(
"rhoPhiSum",
runTime.timeName(),
mesh
),
mesh, mesh,
dimensionedScalar(rhoPhi.dimensions(), Zero) dimensionedScalar(rhoPhi.dimensions(), Zero)
); );

View File

@ -4,19 +4,26 @@ if (nAlphaSubCycles > 1)
{ {
dimensionedScalar totalDeltaT = runTime.deltaT(); dimensionedScalar totalDeltaT = runTime.deltaT();
talphaPhi1.reset talphaPhi1 = new surfaceScalarField
( (
new surfaceScalarField IOobject
( (
mesh.newIOobject("alphaPhi1"), "alphaPhi1",
mesh, runTime.timeName(),
dimensionedScalar(alphaPhi10.dimensions(), Zero) mesh
) ),
mesh,
dimensionedScalar(alphaPhi10.dimensions(), Zero)
); );
surfaceScalarField rhoPhiSum surfaceScalarField rhoPhiSum
( (
mesh.newIOobject("rhoPhiSum"), IOobject
(
"rhoPhiSum",
runTime.timeName(),
mesh
),
mesh, mesh,
dimensionedScalar(rhoPhi.dimensions(), Zero) dimensionedScalar(rhoPhi.dimensions(), Zero)
); );

View File

@ -13,19 +13,26 @@ if (nAlphaSubCycles > 1)
{ {
dimensionedScalar totalDeltaT = runTime.deltaT(); dimensionedScalar totalDeltaT = runTime.deltaT();
talphaPhi1.reset talphaPhi1 = new surfaceScalarField
( (
new surfaceScalarField IOobject
( (
mesh.newIOobject("alphaPhi1"), "alphaPhi1",
mesh, runTime.timeName(),
dimensionedScalar(alphaPhi10.dimensions(), Zero) mesh
) ),
mesh,
dimensionedScalar(alphaPhi10.dimensions(), Zero)
); );
surfaceScalarField rhoPhiSum surfaceScalarField rhoPhiSum
( (
mesh.newIOobject("rhoPhiSum"), IOobject
(
"rhoPhiSum",
runTime.timeName(),
mesh
),
mesh, mesh,
dimensionedScalar(rhoPhi.dimensions(), Zero) dimensionedScalar(rhoPhi.dimensions(), Zero)
); );

View File

@ -99,8 +99,7 @@ Foam::multiphaseMixtureThermo::multiphaseMixtureThermo
mesh_.time().timeName(), mesh_.time().timeName(),
mesh_, mesh_,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE, IOobject::AUTO_WRITE
IOobject::REGISTER
), ),
mesh_, mesh_,
dimensionedScalar(dimless, Zero) dimensionedScalar(dimless, Zero)
@ -999,12 +998,19 @@ Foam::tmp<Foam::volScalarField> Foam::multiphaseMixtureThermo::K
Foam::tmp<Foam::volScalarField> Foam::tmp<Foam::volScalarField>
Foam::multiphaseMixtureThermo::nearInterface() const Foam::multiphaseMixtureThermo::nearInterface() const
{ {
auto tnearInt = volScalarField::New tmp<volScalarField> tnearInt
( (
"nearInterface", new volScalarField
IOobject::NO_REGISTER, (
mesh_, IOobject
dimensionedScalar(dimless, Zero) (
"nearInterface",
mesh_.time().timeName(),
mesh_
),
mesh_,
dimensionedScalar(dimless, Zero)
)
); );
for (const phaseModel& phase : phases_) for (const phaseModel& phase : phases_)

View File

@ -18,7 +18,12 @@
dimensionedScalar totalDeltaT = runTime.deltaT(); dimensionedScalar totalDeltaT = runTime.deltaT();
surfaceScalarField alphaPhiSum surfaceScalarField alphaPhiSum
( (
mesh.newIOobject("alphaPhiSum"), IOobject
(
"alphaPhiSum",
runTime.timeName(),
mesh
),
mesh, mesh,
dimensionedScalar(phi.dimensions(), Zero) dimensionedScalar(phi.dimensions(), Zero)
); );

View File

@ -158,11 +158,13 @@ Foam::tmp<Foam::volSymmTensorField> Foam::relativeVelocityModel::tauDm() const
// Calculate the relative velocity of the continuous phase w.r.t the mean // Calculate the relative velocity of the continuous phase w.r.t the mean
volVectorField Ucm(betad*Udm_/betac); volVectorField Ucm(betad*Udm_/betac);
return volSymmTensorField::New return tmp<volSymmTensorField>
( (
"tauDm", new volSymmTensorField
IOobject::NO_REGISTER, (
betad*sqr(Udm_) + betac*sqr(Ucm) "tauDm",
betad*sqr(Udm_) + betac*sqr(Ucm)
)
); );
} }

View File

@ -130,17 +130,10 @@ int main(int argc, char *argv[])
} }
} }
} }
#include "UEqn.H"
#include "YEqns.H" #include "YEqns.H"
#include "TEqn.H" #include "TEqn.H"
if (pimple.frozenFlow())
{
continue;
}
#include "UEqn.H"
// --- Pressure corrector loop // --- Pressure corrector loop
while (pimple.correct()) while (pimple.correct())
{ {

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2017-2023 OpenCFD Ltd. Copyright (C) 2017-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -407,8 +407,7 @@ Foam::radiation::laserDTRM::laserDTRM(const volScalarField& T)
mesh_.time().timeName(), mesh_.time().timeName(),
mesh_, mesh_,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE, IOobject::AUTO_WRITE
IOobject::REGISTER
), ),
mesh_, mesh_,
dimensionedScalar(dimPower/dimVolume, Zero) dimensionedScalar(dimPower/dimVolume, Zero)
@ -505,8 +504,7 @@ Foam::radiation::laserDTRM::laserDTRM
mesh_.time().timeName(), mesh_.time().timeName(),
mesh_, mesh_,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE, IOobject::AUTO_WRITE
IOobject::REGISTER
), ),
mesh_, mesh_,
dimensionedScalar(dimPower/pow3(dimLength), Zero) dimensionedScalar(dimPower/pow3(dimLength), Zero)
@ -537,23 +535,42 @@ Foam::label Foam::radiation::laserDTRM::nBands() const
void Foam::radiation::laserDTRM::calculate() void Foam::radiation::laserDTRM::calculate()
{ {
auto treflectingCells = volScalarField::New tmp<volScalarField> treflectingCells
( (
"reflectingCellsVol", new volScalarField
IOobject::NO_REGISTER, (
mesh_, IOobject
dimensionedScalar("zero", dimless, -1) (
"reflectingCellsVol",
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh_,
dimensionedScalar("zero", dimless, -1)
)
); );
auto& reflectingCellsVol = treflectingCells.ref(); volScalarField& reflectingCellsVol = treflectingCells.ref();
auto tnHat = volVectorField::New
tmp<volVectorField> tnHat
( (
"nHat", new volVectorField
IOobject::NO_REGISTER, (
mesh_, IOobject
dimensionedVector(dimless, Zero) (
"nHat",
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh_,
dimensionedVector(dimless, Zero)
)
); );
auto& nHat = tnHat.ref(); volVectorField& nHat = tnHat.ref();
// Reset the field // Reset the field
@ -669,9 +686,9 @@ void Foam::radiation::laserDTRM::calculate()
globalIndex::gatherInplaceOp(lines); globalIndex::gatherInplaceOp(lines);
if (UPstream::master()) if (Pstream::master())
{ {
OBJstream os(type() + "-particlePath.obj"); OBJstream os(type() + ":particlePath.obj");
for (label pointi = 0; pointi < lines.size(); pointi += 2) for (label pointi = 0; pointi < lines.size(); pointi += 2)
{ {

View File

@ -88,14 +88,25 @@ Foam::radiation::localDensityAbsorptionEmission::localDensityAbsorptionEmission
Foam::tmp<Foam::volScalarField> Foam::tmp<Foam::volScalarField>
Foam::radiation::localDensityAbsorptionEmission::aCont(const label bandI) const Foam::radiation::localDensityAbsorptionEmission::aCont(const label bandI) const
{ {
auto ta = volScalarField::New tmp<volScalarField> ta
( (
"a", new volScalarField
IOobject::NO_REGISTER, (
mesh_, IOobject
dimensionedScalar(inv(dimLength), Zero) (
"a",
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE,
IOobject::NO_REGISTER
),
mesh_,
dimensionedScalar(inv(dimLength), Zero)
)
); );
auto& a = ta.ref();
volScalarField& a = ta.ref();
forAll(alphaNames_, i) forAll(alphaNames_, i)
{ {
@ -110,14 +121,25 @@ Foam::radiation::localDensityAbsorptionEmission::aCont(const label bandI) const
Foam::tmp<Foam::volScalarField> Foam::tmp<Foam::volScalarField>
Foam::radiation::localDensityAbsorptionEmission::eCont(const label bandI) const Foam::radiation::localDensityAbsorptionEmission::eCont(const label bandI) const
{ {
auto te = volScalarField::New tmp<volScalarField> te
( (
"e", new volScalarField
IOobject::NO_REGISTER, (
mesh_, IOobject
dimensionedScalar(inv(dimLength), Zero) (
"e",
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE,
IOobject::NO_REGISTER
),
mesh_,
dimensionedScalar(inv(dimLength), Zero)
)
); );
auto& e = te.ref();
volScalarField& e = te.ref();
forAll(alphaNames_, i) forAll(alphaNames_, i)
{ {
@ -132,12 +154,22 @@ Foam::radiation::localDensityAbsorptionEmission::eCont(const label bandI) const
Foam::tmp<Foam::volScalarField> Foam::tmp<Foam::volScalarField>
Foam::radiation::localDensityAbsorptionEmission::ECont(const label bandI) const Foam::radiation::localDensityAbsorptionEmission::ECont(const label bandI) const
{ {
auto tE = volScalarField::New tmp<volScalarField> tE
( (
"E", new volScalarField
IOobject::NO_REGISTER, (
mesh_, IOobject
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero) (
"E",
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE,
IOobject::NO_REGISTER
),
mesh_,
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
)
); );
scalarField& E = tE.ref().primitiveFieldRef(); scalarField& E = tE.ref().primitiveFieldRef();

View File

@ -171,8 +171,16 @@ Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::TSource() const
const volScalarField& T = mesh_.lookupObject<volScalarField>("T"); const volScalarField& T = mesh_.lookupObject<volScalarField>("T");
auto tTSource = tmp<fvScalarMatrix>::New(T, dimEnergy/dimTime); tmp<fvScalarMatrix> tTSource
auto& TSource = tTSource.ref(); (
new fvScalarMatrix
(
T,
dimEnergy/dimTime
)
);
fvScalarMatrix& TSource = tTSource.ref();
const twoPhaseMixtureEThermo& thermo = const twoPhaseMixtureEThermo& thermo =
refCast<const twoPhaseMixtureEThermo> refCast<const twoPhaseMixtureEThermo>

View File

@ -382,7 +382,7 @@ Foam::tmp<Foam::volScalarField> Foam::twoPhaseMixtureEThermo::kappaEff
const volScalarField& kappat const volScalarField& kappat
) const ) const
{ {
tmp<volScalarField> kappaEff(kappa() + kappat); tmp<Foam::volScalarField> kappaEff(kappa() + kappat);
kappaEff.ref().rename("kappaEff"); kappaEff.ref().rename("kappaEff");
return kappaEff; return kappaEff;
} }

View File

@ -3,7 +3,12 @@ if (nAlphaSubCycles > 1)
dimensionedScalar totalDeltaT = runTime.deltaT(); dimensionedScalar totalDeltaT = runTime.deltaT();
surfaceScalarField rhoPhiSum surfaceScalarField rhoPhiSum
( (
mesh.newIOobject("rhoPhiSum"), IOobject
(
"rhoPhiSum",
runTime.timeName(),
mesh
),
mesh, mesh,
dimensionedScalar(rhoPhi.dimensions(), Zero) dimensionedScalar(rhoPhi.dimensions(), Zero)
); );

View File

@ -32,7 +32,12 @@ if (nAlphaSubCycles > 1)
dimensionedScalar totalDeltaT = runTime.deltaT(); dimensionedScalar totalDeltaT = runTime.deltaT();
surfaceScalarField rhoPhiSum surfaceScalarField rhoPhiSum
( (
mesh.newIOobject("rhoPhiSum"), IOobject
(
"rhoPhiSum",
runTime.timeName(),
mesh
),
mesh, mesh,
dimensionedScalar(rhoPhi.dimensions(), Zero) dimensionedScalar(rhoPhi.dimensions(), Zero)
); );

View File

@ -21,7 +21,12 @@
dimensionedScalar totalDeltaT = runTime.deltaT(); dimensionedScalar totalDeltaT = runTime.deltaT();
surfaceScalarField rhoPhiSum surfaceScalarField rhoPhiSum
( (
mesh.newIOobject("rhoPhiSum"), IOobject
(
"rhoPhiSum",
runTime.timeName(),
mesh
),
mesh, mesh,
dimensionedScalar(rhoPhi.dimensions(), Zero) dimensionedScalar(rhoPhi.dimensions(), Zero)
); );

View File

@ -50,8 +50,7 @@
runTime.timeName(), runTime.timeName(),
mesh, mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE, IOobject::AUTO_WRITE
IOobject::REGISTER
), ),
mesh, mesh,
dimensionedScalar(dimVelocity*dimArea, Zero) dimensionedScalar(dimVelocity*dimArea, Zero)

View File

@ -68,9 +68,8 @@ Foam::multiphaseMixture::multiphaseMixture
"transportProperties", "transportProperties",
U.time().constant(), U.time().constant(),
U.db(), U.db(),
IOobject::READ_MODIFIED, IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE, IOobject::NO_WRITE
IOobject::REGISTER
) )
), ),
@ -86,7 +85,9 @@ Foam::multiphaseMixture::multiphaseMixture
( (
"rhoPhi", "rhoPhi",
mesh_.time().timeName(), mesh_.time().timeName(),
mesh_ mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
), ),
mesh_, mesh_,
dimensionedScalar(dimMass/dimTime, Zero) dimensionedScalar(dimMass/dimTime, Zero)
@ -100,8 +101,7 @@ Foam::multiphaseMixture::multiphaseMixture
mesh_.time().timeName(), mesh_.time().timeName(),
mesh_, mesh_,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE, IOobject::AUTO_WRITE
IOobject::REGISTER
), ),
mesh_, mesh_,
dimensionedScalar(dimless, Zero) dimensionedScalar(dimless, Zero)
@ -257,12 +257,19 @@ Foam::multiphaseMixture::nuf() const
Foam::tmp<Foam::surfaceScalarField> Foam::tmp<Foam::surfaceScalarField>
Foam::multiphaseMixture::surfaceTensionForce() const Foam::multiphaseMixture::surfaceTensionForce() const
{ {
auto tstf = surfaceScalarField::New tmp<surfaceScalarField> tstf
( (
"surfaceTensionForce", new surfaceScalarField
IOobject::NO_REGISTER, (
mesh_, IOobject
dimensionedScalar(dimensionSet(1, -2, -2, 0, 0), Zero) (
"surfaceTensionForce",
mesh_.time().timeName(),
mesh_
),
mesh_,
dimensionedScalar(dimensionSet(1, -2, -2, 0, 0), Zero)
)
); );
surfaceScalarField& stf = tstf.ref(); surfaceScalarField& stf = tstf.ref();
@ -317,7 +324,12 @@ void Foam::multiphaseMixture::solve()
{ {
surfaceScalarField rhoPhiSum surfaceScalarField rhoPhiSum
( (
mesh_.newIOobject("rhoPhiSum"), IOobject
(
"rhoPhiSum",
runTime.timeName(),
mesh_
),
mesh_, mesh_,
dimensionedScalar(rhoPhi_.dimensions(), Zero) dimensionedScalar(rhoPhi_.dimensions(), Zero)
); );
@ -540,12 +552,19 @@ Foam::tmp<Foam::volScalarField> Foam::multiphaseMixture::K
Foam::tmp<Foam::volScalarField> Foam::tmp<Foam::volScalarField>
Foam::multiphaseMixture::nearInterface() const Foam::multiphaseMixture::nearInterface() const
{ {
auto tnearInt = volScalarField::New tmp<volScalarField> tnearInt
( (
"nearInterface", new volScalarField
IOobject::NO_REGISTER, (
mesh_, IOobject
dimensionedScalar(dimless, Zero) (
"nearInterface",
mesh_.time().timeName(),
mesh_
),
mesh_,
dimensionedScalar(dimless, Zero)
)
); );
for (const phase& ph : phases_) for (const phase& ph : phases_)
@ -630,7 +649,12 @@ void Foam::multiphaseMixture::solveAlphas
volScalarField sumAlpha volScalarField sumAlpha
( (
mesh_.newIOobject("sumAlpha"), IOobject
(
"sumAlpha",
mesh_.time().timeName(),
mesh_
),
mesh_, mesh_,
dimensionedScalar(dimless, Zero) dimensionedScalar(dimless, Zero)
); );

View File

@ -272,7 +272,10 @@ while (pimple.correct())
).ptr() ).ptr()
); );
pEqnComps[phasei].faceFluxCorrectionPtr(nullptr); deleteDemandDrivenData
(
pEqnComps[phasei].faceFluxCorrectionPtr()
);
pEqnComps[phasei].relax(); pEqnComps[phasei].relax();
} }

View File

@ -5,7 +5,12 @@ if (nAlphaSubCycles > 1)
dimensionedScalar totalDeltaT = runTime.deltaT(); dimensionedScalar totalDeltaT = runTime.deltaT();
surfaceScalarField rhoPhiSum surfaceScalarField rhoPhiSum
( (
mesh.newIOobject("rhoPhiSum"), IOobject
(
"rhoPhiSum",
runTime.timeName(),
mesh
),
mesh, mesh,
dimensionedScalar(rhoPhi.dimensions(), Zero) dimensionedScalar(rhoPhi.dimensions(), Zero)
); );

View File

@ -70,10 +70,7 @@ int main(int argc, char *argv[])
); );
labelList cellToCoarse(identity(mesh.nCells())); labelList cellToCoarse(identity(mesh.nCells()));
CompactListList<label> coarseToCell labelListList coarseToCell(invertOneToMany(mesh.nCells(), cellToCoarse));
(
invertOneToManyCompact(mesh.nCells(), cellToCoarse)
);
++runTime; ++runTime;
@ -81,11 +78,16 @@ int main(int argc, char *argv[])
{ {
volScalarField scalarAgglomeration volScalarField scalarAgglomeration
( (
mesh.thisDb().newIOobject("agglomeration"), IOobject
(
"agglomeration",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh, mesh,
Foam::zero{}, dimensionedScalar(dimless, Zero)
dimless,
fvPatchFieldBase::zeroGradientType()
); );
scalarField& fld = scalarAgglomeration.primitiveFieldRef(); scalarField& fld = scalarAgglomeration.primitiveFieldRef();
forAll(fld, celli) forAll(fld, celli)
@ -140,23 +142,31 @@ int main(int argc, char *argv[])
} }
forAll(addr, finei) forAll(addr, fineI)
{ {
labelUIndList(cellToCoarse, coarseToCell[finei]) = addr[finei]; const labelList& cellLabels = coarseToCell[fineI];
forAll(cellLabels, i)
{
cellToCoarse[cellLabels[i]] = addr[fineI];
}
} }
coarseToCell = invertOneToManyCompact(coarseSize, cellToCoarse); coarseToCell = invertOneToMany(coarseSize, cellToCoarse);
// Write agglomeration // Write agglomeration
{ {
volScalarField scalarAgglomeration volScalarField scalarAgglomeration
( (
mesh.thisDb().newIOobject("agglomeration"), IOobject
(
"agglomeration",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh, mesh,
Foam::zero{}, dimensionedScalar(dimless, Zero)
dimless,
fvPatchFieldBase::zeroGradientType()
); );
scalarField& fld = scalarAgglomeration.primitiveFieldRef(); scalarField& fld = scalarAgglomeration.primitiveFieldRef();
forAll(fld, celli) forAll(fld, celli)
{ {
@ -183,9 +193,9 @@ int main(int argc, char *argv[])
} }
// Determine coarse cc // Determine coarse cc
forAll(coarseToCell, coarsei) forAll(coarseToCell, coarseI)
{ {
const auto& cellLabels = coarseToCell[coarsei]; const labelList& cellLabels = coarseToCell[coarseI];
point coarseCc = average point coarseCc = average
( (
@ -194,8 +204,10 @@ int main(int argc, char *argv[])
meshTools::writeOBJ(str, coarseCc); meshTools::writeOBJ(str, coarseCc);
vertI++; vertI++;
for (label celli : cellLabels) forAll(cellLabels, i)
{ {
label celli = cellLabels[i];
str << "l " << celli+1 << ' ' << vertI << nl; str << "l " << celli+1 << ' ' << vertI << nl;
} }
} }

View File

@ -124,11 +124,11 @@ int main(int argc, char *argv[])
<< "toc: " << flatOutput(table0.toc()) << nl; << "toc: " << flatOutput(table0.toc()) << nl;
HashTable<label, label, Hash<label>> table2 HashTable<label, label, Hash<label>> table2
( ({
// From key/value pairs {3, 10},
labelList({3, 5, 7}), {5, 12},
labelList({10, 12, 16}) {7, 16}
); });
Info<< "table2: " << table2 << nl Info<< "table2: " << table2 << nl
<< "toc: " << flatOutput(table2.toc()) << nl; << "toc: " << flatOutput(table2.toc()) << nl;

View File

@ -206,7 +206,7 @@ int main(int argc, char *argv[])
#endif #endif
loopInsert(map, nElem); loopInsert(map, nElem);
timer.resetCpuTimeIncrement(); (void)timer.cpuTimeIncrement();
unsigned long sum = 0; unsigned long sum = 0;
for (label loopi = 0; loopi < nFind*nLoops; ++loopi) for (label loopi = 0; loopi < nFind*nLoops; ++loopi)
@ -268,7 +268,7 @@ int main(int argc, char *argv[])
HashSet<label, Hash<label>> map(32); HashSet<label, Hash<label>> map(32);
loopInsert(map, nElem); loopInsert(map, nElem);
timer.resetCpuTimeIncrement(); (void)timer.cpuTimeIncrement();
unsigned long sum = 0; unsigned long sum = 0;
for (label loopi = 0; loopi < nFind*nLoops; ++loopi) for (label loopi = 0; loopi < nFind*nLoops; ++loopi)

View File

@ -188,6 +188,8 @@ int main(int argc, char *argv[])
argList::addBoolOption("label", "Use label for tests (default)"); argList::addBoolOption("label", "Use label for tests (default)");
argList::addBoolOption("ref", "Test writing by ref"); argList::addBoolOption("ref", "Test writing by ref");
#include "addTimeOptions.H"
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
#include "createPolyMesh.H" #include "createPolyMesh.H"
@ -278,6 +280,7 @@ int main(int argc, char *argv[])
{ {
IOFieldRef<vector>(ioOutput, mesh.points()).write(); IOFieldRef<vector>(ioOutput, mesh.points()).write();
} }
} }

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation Copyright (C) 2011 OpenFOAM Foundation
Copyright (C) 2017-2024 OpenCFD Ltd. Copyright (C) 2017-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -156,24 +156,29 @@ int main(int argc, char *argv[])
os.writeEntry("idl3", idl3); os.writeEntry("idl3", idl3);
} }
if (UPstream::parRun()) if (Pstream::parRun())
{ {
if (UPstream::master()) if (Pstream::master())
{ {
Pout<< "full: " << flatOutput(idl3.values()) << nl Pout<< "full: " << flatOutput(idl3.values()) << nl
<< "send: " << flatOutput(idl3) << endl; << "send: " << flatOutput(idl3) << endl;
for (const int proci : UPstream::subProcs()) for (const int proci : Pstream::subProcs())
{ {
OPstream::send(idl3, proci); OPstream toSlave(Pstream::commsTypes::scheduled, proci);
toSlave << idl3;
} }
} }
else else
{ {
// From master // From master
List<label> recv; IPstream fromMaster
(
Pstream::commsTypes::scheduled,
Pstream::masterNo()
);
IPstream::recv(recv, UPstream::masterNo()); List<label> recv(fromMaster);
Pout<<"recv: " << flatOutput(recv) << endl; Pout<<"recv: " << flatOutput(recv) << endl;
} }

View File

@ -1,3 +1,3 @@
Test-OCountStream.cxx Test-OCountStream.C
EXE = $(FOAM_USER_APPBIN)/Test-OCountStream EXE = $(FOAM_USER_APPBIN)/Test-OCountStream

View File

@ -65,11 +65,11 @@ int main(int argc, char *argv[])
OCountStream cnt; OCountStream cnt;
OCharStream cstr; OCharStream cstr;
OStringStream sstr; OStringStream str;
ocountstream plain; ocountstream plain;
generateOutput(cstr); generateOutput(cstr);
generateOutput(sstr); generateOutput(str);
generateOutput(cnt); generateOutput(cnt);
generateOutput(plain); generateOutput(plain);
@ -77,7 +77,7 @@ int main(int argc, char *argv[])
Info<< "counter state: " << (cnt.stdStream().rdstate()) << nl Info<< "counter state: " << (cnt.stdStream().rdstate()) << nl
<< "via char-stream: " << label(cstr.view().size()) << " chars" << nl << "via char-stream: " << label(cstr.view().size()) << " chars" << nl
<< "via string-stream: " << label(sstr.count()) << " chars" << nl << "via string-stream: " << str.str().size() << " chars" << nl
<< "via ocountstream: " << plain.count() << " chars" << endl; << "via ocountstream: " << plain.count() << " chars" << endl;
fileName outputName; fileName outputName;

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2022-2024 OpenCFD Ltd. Copyright (C) 2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -32,14 +32,10 @@ Description
#include "IOstreams.H" #include "IOstreams.H"
#include "OSspecific.H" #include "OSspecific.H"
#include "argList.H" #include "argList.H"
#include "clock.H"
#include "Switch.H"
#include "ListOps.H" #include "ListOps.H"
using namespace Foam; using namespace Foam;
std::string time_stamp;
void listFiles(const fileName& dir) void listFiles(const fileName& dir)
{ {
wordList files = ListOps::create<word> wordList files = ListOps::create<word>
@ -59,150 +55,25 @@ void listFiles(const fileName& dir)
} }
OSstream& printInfo(OFstream& os)
{
InfoErr
<< "open: " << os.name() << nl
<< "appending: " << Switch::name(os.is_appending())
<< " tellp: "<< os.stdStream().tellp()
<< " gz: " << Switch::name(os.compression()) << nl;
return InfoErr.stream();
}
void withHeader(OFstream& os)
{
const auto tellp = os.stdStream().tellp();
if (tellp <= 0)
{
InfoErr
<< "Add header" << nl;
os << "HEADER: " << time_stamp.c_str() << nl;
}
}
template<class OSstreamType>
void generateLines(OSstreamType& os, label count = 1)
{
for (label line = 1; line <= count; ++line)
{
os << "[" << line
<< "] =============================================" << nl;
}
}
template<class OSstreamType>
void generateContent
(
OSstreamType& os,
const bool with_seekend,
const bool test_overwrite = false,
const int64_t seek_out = -1
)
{
if (with_seekend)
{
os.stdStream().seekp(0, std::ios_base::end);
// OR? os.seek_end();
}
printInfo(os);
withHeader(os);
if (test_overwrite && seek_out >= 0)
{
InfoErr<< "... seekp(" << seek_out << ")" << nl;
auto& oss = os.stdStream();
// Actually std::streampos, but cannot increment that
int64_t pos(seek_out);
const int64_t tellp_end = oss.tellp();
if (pos >= 0 && pos < tellp_end)
{
InfoErr
<< "... fill from " << label(pos)
<< " to " << label(tellp_end) << nl;
oss.seekp(pos);
while (pos < tellp_end)
{
// Fill with char 'X', rely on streambuf buffering
oss << 'X';
++pos;
}
oss.seekp(seek_out);
os << "More content [at " << seek_out << ']' << endl;
}
}
generateLines(os, 4);
printInfo(os)
<< "... sleep" << endl;
listFiles(os.name().path());
sleep(2);
os << "[new content] +++++++++++++++++++++++++++++++++++" << endl;
}
template<class OSstreamType>
void generateOverwriteContent
(
OSstreamType& os,
const bool with_seekend,
const int64_t seek_out = -1
)
{
generateContent(os, with_seekend, true, seek_out);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program: // Main program:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addBoolOption("gz", "Use compression"); argList::addBoolOption("gz", "Use compression");
argList::addBoolOption("append-app", "Use append app mode"); argList::addBoolOption("append", "Use append mode");
argList::addBoolOption("append-ate", "Use append ate mode");
argList::addBoolOption("seekend", "Seek to end after non-append open");
argList::addOption("seek", "value", "Seek from start (default: 100)");
argList::addBoolOption("atomic", "Use atomic"); argList::addBoolOption("atomic", "Use atomic");
argList::addBoolOption("keep", "Do not remove test directory"); argList::addBoolOption("keep", "Do not remove test directory");
argList::addOption("write", "file", "test writing to file"); argList::addOption("write", "file", "test writing to file");
#include "setRootCase.H" #include "setRootCase.H"
// Same time-stamp for all generated files
time_stamp = clock::dateTime();
const fileName baseDir("Test-OFstream-directory"); const fileName baseDir("Test-OFstream-directory");
Foam::mkDir(baseDir); Foam::mkDir(baseDir);
InfoErr<< "mkdir: " << baseDir << endl; InfoErr<< "mkdir: " << baseDir << endl;
Info<< "start:" << nl;
listFiles(baseDir);
const bool with_seekend = args.found("seekend");
const int seek_out = args.getOrDefault<int>("seek", 100);
IOstreamOption streamOpt; IOstreamOption streamOpt;
if (args.found("gz")) if (args.found("gz"))
@ -212,11 +83,10 @@ int main(int argc, char *argv[])
IOstreamOption::appendType append = IOstreamOption::appendType append =
( (
args.found("append-app") ? IOstreamOption::APPEND_APP args.found("append")
: args.found("append-ate") ? IOstreamOption::APPEND_ATE ? IOstreamOption::APPEND
: IOstreamOption::NO_APPEND : IOstreamOption::NON_APPEND
); );
IOstreamOption::atomicType atomic = IOstreamOption::atomicType atomic =
( (
args.found("atomic") args.found("atomic")
@ -227,6 +97,7 @@ int main(int argc, char *argv[])
{ {
OFstream(baseDir/"dummy")() << "Some file content" << endl; OFstream(baseDir/"dummy")() << "Some file content" << endl;
Foam::ln("dummy", baseDir/"Test2.txt");
Foam::ln("dummy", baseDir/"Test3.txt"); Foam::ln("dummy", baseDir/"Test3.txt");
Foam::ln("dummy", baseDir/"Test4.txt"); Foam::ln("dummy", baseDir/"Test4.txt");
Foam::ln("dummy", baseDir/"Test4.txt.gz"); Foam::ln("dummy", baseDir/"Test4.txt.gz");
@ -243,31 +114,16 @@ int main(int argc, char *argv[])
append append
); );
generateOverwriteContent(os, with_seekend, seek_out); os << "=========================" << endl;
}
{ InfoErr<< "open: " << os.name() << endl;
OFstream os InfoErr<< "... sleep" << endl;
(
atomic,
baseDir/"Test1-app.txt",
streamOpt,
IOstreamOption::APPEND_APP
);
generateOverwriteContent(os, with_seekend, seek_out); listFiles(baseDir);
}
{ sleep(2);
OFstream os
(
atomic,
baseDir/"Test1-ate.txt",
streamOpt,
IOstreamOption::APPEND_ATE
);
generateOverwriteContent(os, with_seekend, seek_out); os << "+++++++++++++++++++++++++++++++++++" << endl;
} }
{ {
@ -276,21 +132,39 @@ int main(int argc, char *argv[])
atomic, atomic,
baseDir/"Test2.txt", baseDir/"Test2.txt",
streamOpt streamOpt
// NON_APPEND
); );
generateContent(os, with_seekend); os << "=========================" << endl;
}
InfoErr<< "open: " << os.name() << endl;
InfoErr<< "... sleep" << endl;
listFiles(baseDir);
sleep(2);
os << "+++++++++++++++++++++++++++++++++++" << endl;
}
{ {
OFstream os OFstream os
( (
atomic, atomic,
baseDir/"Test3.txt", baseDir/"Test3.txt",
streamOpt, streamOpt,
IOstreamOption::APPEND_APP IOstreamOption::APPEND
); );
generateContent(os, with_seekend, with_seekend); os << "=========================" << endl;
InfoErr<< "open: " << os.name() << endl;
InfoErr<< "... sleep" << endl;
listFiles(baseDir);
sleep(2);
os << "+++++++++++++++++++++++++++++++++++" << endl;
} }
{ {
OFstream os OFstream os
@ -300,17 +174,35 @@ int main(int argc, char *argv[])
IOstreamOption::COMPRESSED IOstreamOption::COMPRESSED
); );
// No seekend with COMPRESSED os << "=========================" << endl;
generateContent(os, false);
InfoErr<< "open: " << os.name() << endl;
InfoErr<< "... sleep" << endl;
listFiles(baseDir);
sleep(2);
os << "+++++++++++++++++++++++++++++++++++" << endl;
} }
{ {
OFstream os OFstream os
( (
IOstreamOption::ATOMIC, IOstreamOption::ATOMIC,
baseDir/"Test5.txt" baseDir/"Test5.txt"
// ASCII UNCOMPRESSED NON_APPEND
); );
generateContent(os, with_seekend); os << "=========================" << endl;
InfoErr<< "open: " << os.name() << endl;
InfoErr<< "... sleep" << endl;
listFiles(baseDir);
sleep(2);
os << "+++++++++++++++++++++++++++++++++++" << endl;
} }
Info<< nl << "done:" << endl; Info<< nl << "done:" << endl;

View File

@ -67,8 +67,8 @@ using namespace Foam;
// // (note:without calculating pointNormals // // (note:without calculating pointNormals
// // to avoid them being stored) // // to avoid them being stored)
// //
// auto textrudeN = tmp<pointField>::New(p.nPoints(), Zero); // tmp<pointField> textrudeN(new pointField(p.nPoints(), Zero));
// auto& extrudeN = textrudeN.ref(); // pointField& extrudeN = textrudeN();
// { // {
// const faceList& localFaces = p.localFaces(); // const faceList& localFaces = p.localFaces();
// const vectorField& faceAreas = mesh.faceAreas(); // const vectorField& faceAreas = mesh.faceAreas();
@ -201,6 +201,7 @@ using namespace Foam;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
#include "addTimeOptions.H"
argList::addArgument("patch"); argList::addArgument("patch");
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"

View File

@ -53,37 +53,46 @@ int main(int argc, char *argv[])
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
word coherentInst; fileName coherentInst;
coherentInst = coherentInst =
( (
runTime.findInstance runTime.findInstance
( (
polyMesh::meshSubDir, polyMesh::meshSubDir,
"coherent", "coherent",
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT
word::null, // No stop instance
false // No "constant" fallback (word::null instead)
) )
); );
Info<< "Found coherent \"" << coherentInst << '"' << nl; // Unfortunately with READ_IF_PRESENT, cannot tell if the file
// was actually found or not
Info<< "check: " << (coherentInst/polyMesh::meshSubDir/"coherent") << nl;
if (!Foam::isFile(coherentInst/polyMesh::meshSubDir/"coherent"))
{
coherentInst.clear();
}
Info<< "found coherent: " << coherentInst << nl;
PtrList<entry> entries; PtrList<entry> entries;
if (!coherentInst.empty()) if (!coherentInst.empty())
{ {
dictionary coherent = IOdictionary coherent
IOdictionary::readContents (
IOobject
( (
IOobject "coherent",
( coherentInst,
"coherent", polyMesh::meshSubDir,
coherentInst, runTime,
polyMesh::meshSubDir, IOobject::MUST_READ,
runTime, IOobject::NO_WRITE,
IOobject::MUST_READ IOobject::NO_REGISTER
) )
); );
ITstream& is = coherent.lookup("boundary"); ITstream& is = coherent.lookup("boundary");
is >> entries; is >> entries;
@ -96,7 +105,7 @@ int main(int argc, char *argv[])
Info<< "size: " << polyBoundaryMeshEntries::patchSizes(entries) << nl; Info<< "size: " << polyBoundaryMeshEntries::patchSizes(entries) << nl;
Info<< nl; Info<< nl;
word boundaryInst; fileName boundaryInst;
boundaryInst = boundaryInst =
( (
runTime.findInstance runTime.findInstance
@ -107,7 +116,7 @@ int main(int argc, char *argv[])
) )
); );
Info<< "Found boundary: \"" << boundaryInst << '"' << nl; Info<< "found boundary: " << boundaryInst << nl;
polyBoundaryMeshEntries pbm polyBoundaryMeshEntries pbm
( (

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2017-2024 OpenCFD Ltd. Copyright (C) 2017-2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -24,7 +24,7 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application Application
Test-checkDecomposePar checkDecomposePar
Group Group
grpParallelUtilities grpParallelUtilities
@ -35,9 +35,8 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "argList.H" #include "OSspecific.H"
#include "timeSelector.H" #include "fvCFD.H"
#include "polyMesh.H"
#include "cpuTime.H" #include "cpuTime.H"
#include "IFstream.H" #include "IFstream.H"
#include "regionProperties.H" #include "regionProperties.H"
@ -45,14 +44,10 @@ Description
#include "decompositionInformation.H" #include "decompositionInformation.H"
#include "decompositionModel.H" #include "decompositionModel.H"
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
timeSelector::addOptions_singleTime(); // Single-time options
argList::addNote argList::addNote
( (
"Check decomposition from kaffpa (KaHIP) output" "Check decomposition from kaffpa (KaHIP) output"
@ -70,6 +65,9 @@ int main(int argc, char *argv[])
argList::addArgument("kaffpa-output-file"); argList::addArgument("kaffpa-output-file");
// Include explicit constant options, have zero from time range
timeSelector::addOptions(true, false);
#include "setRootCase.H" #include "setRootCase.H"
const auto decompFile = args.get<fileName>(1); const auto decompFile = args.get<fileName>(1);
@ -77,8 +75,8 @@ int main(int argc, char *argv[])
// Set time from database // Set time from database
#include "createTime.H" #include "createTime.H"
// Allow override of time from specified time options, or no-op // Allow override of time
timeSelector::setTimeIfPresent(runTime, args); instantList times = timeSelector::selectIfPresent(runTime, args);
// Allow override of decomposeParDict location // Allow override of decomposeParDict location
const fileName decompDictFile = const fileName decompDictFile =
@ -97,7 +95,7 @@ int main(int argc, char *argv[])
Info<< "\n\nDecomposing mesh " << regionName << nl << endl; Info<< "\n\nDecomposing mesh " << regionName << nl << endl;
Info<< "Create mesh..." << flush; Info<< "Create mesh..." << flush;
polyMesh mesh fvMesh mesh
( (
IOobject IOobject
( (
@ -113,7 +111,7 @@ int main(int argc, char *argv[])
Info<< " nCells = " << mesh.nCells() << endl; Info<< " nCells = " << mesh.nCells() << endl;
// Expected format is a simple ASCII list // Expected format is a simple ASCII list
cellToProc.resize(mesh.nCells()); cellToProc.setSize(mesh.nCells());
{ {
IFstream is(decompFile); IFstream is(decompFile);
@ -125,9 +123,15 @@ int main(int argc, char *argv[])
const label nDomains = max(cellToProc) + 1; const label nDomains = max(cellToProc) + 1;
// Local mesh connectivity
CompactListList<label> cellCells; CompactListList<label> cellCells;
globalMeshData::calcCellCells(mesh, cellCells); globalMeshData::calcCellCells
(
mesh,
identity(mesh.nCells()),
mesh.nCells(),
false,
cellCells
);
decompositionInformation info decompositionInformation info
( (

View File

@ -1,3 +1,3 @@
Test-cstring.cxx Test-cstring.C
EXE = $(FOAM_USER_APPBIN)/Test-cstring EXE = $(FOAM_USER_APPBIN)/Test-cstring

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2016-2024 OpenCFD Ltd. Copyright (C) 2016-2017 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -81,7 +81,8 @@ int print(char *argv[])
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
DynamicList<string> dynlst(16); DynamicList<string> dynlst;
dynlst.reserve(16);
dynlst.push_back("string1 with content"); dynlst.push_back("string1 with content");
dynlst.push_back("string2 other content"); dynlst.push_back("string2 other content");
@ -103,18 +104,6 @@ int main(int argc, char *argv[])
Info<< nl; Info<< nl;
} }
{
CStringList inC({ "string1", "string2", "string3", "end" });
Info<< "null-terminated string list from " << nl;
print(inC.strings());
Info<< "sublist: starting at " << inC.size()/2 << nl;
print(inC.strings(inC.size()/2));
Info<< nl;
}
{ {
string testInput string testInput
( (
@ -123,7 +112,7 @@ int main(int argc, char *argv[])
); );
Info<< testInput << nl; Info<< testInput << nl;
auto args = stringOps::splitSpace(testInput); SubStrings<string> args = stringOps::splitSpace(testInput);
Info<< "split into " << args.size() << " args" << nl; Info<< "split into " << args.size() << " args" << nl;
CStringList inC(args); CStringList inC(args);
@ -135,7 +124,7 @@ int main(int argc, char *argv[])
Info<< nl; Info<< nl;
} }
Info<< "command-line with " << CStringList::count(argv) << " items" << nl; Info<<"command-line with " << CStringList::count(argv) << " items"<< endl;
print(argc, argv); print(argc, argv);

View File

@ -0,0 +1,3 @@
Test-dimField.C
EXE = $(FOAM_USER_APPBIN)/Test-dimField

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2020-2024 OpenCFD Ltd. Copyright (C) 2020-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -24,7 +24,7 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application Application
Test-dimField1 Test-dimField
Description Description
Simple tests for DimensionedField Simple tests for DimensionedField
@ -52,12 +52,7 @@ namespace Foam
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addBoolOption("write", "write some test fields");
#include "setRootCase.H" #include "setRootCase.H"
const bool doWrite = args.found("write");
#include "createTime.H" #include "createTime.H"
#include "createMesh.H" #include "createMesh.H"
@ -65,23 +60,19 @@ int main(int argc, char *argv[])
Info<< "Tensor field\n" << endl; Info<< "Tensor field\n" << endl;
DimensionedField<tensor, volMesh> tensorfld DimensionedField<tensor, volMesh> tensorfld
( (
mesh.newIOobject IOobject
( (
"tensor", "tensor",
{ IOobject::READ_IF_PRESENT, IOobject::NO_WRITE } runTime.timeName(),
mesh,
{ IOobject::READ_IF_PRESENT, IOobject::NO_REGISTER }
), ),
mesh, mesh,
dimensioned<tensor>(dimless, tensor(1,2,3,4,5,6,7,8,9)) dimensioned<tensor>(dimless, tensor(1,2,3,4,5,6,7,8,9))
); );
if (doWrite) Info().beginBlock("transformed")
{ << tensorfld.T() << nl;
tensorfld.write();
}
Info<< nl;
Info().beginBlock("transformed") << tensorfld.T();
Info().endBlock(); Info().endBlock();
{ {
@ -93,8 +84,8 @@ int main(int argc, char *argv[])
dimensioned<scalar>(14) dimensioned<scalar>(14)
); );
Info<< nl; Info().beginBlock(tfld().type())
Info().beginBlock(tfld().type()) << tfld; << tfld << nl;
Info().endBlock(); Info().endBlock();
} }
@ -107,8 +98,8 @@ int main(int argc, char *argv[])
dimensioned<scalar>(5) dimensioned<scalar>(5)
); );
Info<< nl; Info().beginBlock(tfld().type())
Info().beginBlock(tfld().type()) << tfld(); << tfld() << nl;
Info().endBlock(); Info().endBlock();
// From dissimilar types // From dissimilar types
@ -120,8 +111,8 @@ int main(int argc, char *argv[])
dimensioned<vector>(Zero) dimensioned<vector>(Zero)
); );
Info<< nl; Info().beginBlock(tfld2().type())
Info().beginBlock(tfld2().type()) << tfld2(); << tfld2() << nl;
Info().endBlock(); Info().endBlock();
} }
} }
@ -131,13 +122,20 @@ int main(int argc, char *argv[])
Info<< "uint8 field\n" << endl; Info<< "uint8 field\n" << endl;
DimensionedField<uint8_t, volMesh> statefld DimensionedField<uint8_t, volMesh> statefld
( (
mesh.newIOobject("state") IOobject
(
"state",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh, mesh,
dimensioned<uint8_t>(dimless, uint8_t{100}) dimensioned<uint8_t>(dimless, uint8_t{100})
); );
Info<< nl; Info().beginBlock("stateField")
Info().beginBlock("stateField") << statefld; << statefld << nl;
Info().endBlock(); Info().endBlock();
} }
#endif #endif

View File

@ -1,3 +0,0 @@
Test-dimField1.cxx
EXE = $(FOAM_USER_APPBIN)/Test-dimField1

View File

@ -0,0 +1,3 @@
Test-ensightFile.C
EXE = $(FOAM_USER_APPBIN)/Test-ensightFile

View File

@ -0,0 +1,8 @@
EXE_INC = \
-I$(LIB_SRC)/fileFormats/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/conversion/lnInclude
EXE_LIBS = \
-lmeshTools \
-lconversion

View File

@ -24,10 +24,10 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application Application
Test-ensightFileName Test-ensightFile
Description Description
Check cleanup of ensight file and variable names check cleanup of ensight file and variable names
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/

View File

@ -1,3 +0,0 @@
Test-ensightFile1.cxx
EXE = $(FOAM_USER_APPBIN)/Test-ensightFile1

View File

@ -1,5 +0,0 @@
EXE_INC = \
-I$(LIB_SRC)/fileFormats/lnInclude
EXE_LIBS = \
-lfileFormats

View File

@ -1,137 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
Application
Test-ensightFile
Description
check cleanup of ensight file and variable names
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "ensightFile.H"
#include "ensightGeoFile.H"
#include "Switch.H"
#include "IOstreams.H"
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
int main(int argc, char *argv[])
{
argList::noBanner();
argList::noParallel();
argList::addBoolOption("ascii", "open as ascii instead of binary");
argList::addBoolOption("binary", "(default)");
argList::addBoolOption("clear", "force clear of time-steps");
argList::addBoolOption("no-end", "skip use of endTimeStep");
argList::addBoolOption("append", "open in append mode");
argList::addOption("geom", "geometry file");
argList::addOption("field", "field file");
#include "setRootCase.H"
const bool with_ascii = args.found("ascii") && !args.found("binary");
// const bool with_binary = args.found("binary");
const bool with_append = args.found("append");
const bool with_clear = args.found("clear");
const bool without_end = args.found("no-end");
const IOstreamOption::streamFormat fmt =
(
with_ascii
? IOstreamOption::ASCII
: IOstreamOption::BINARY
);
const IOstreamOption::appendType append =
(
with_append
? IOstreamOption::APPEND_ATE
: IOstreamOption::NO_APPEND
);
fileName file;
if (args.readIfPresent("geom", file))
{
Info<< "Open " << file << " as geometry "
<< " format:" << (with_ascii ? "ASCII" : "BINARY")
<< " append:" << Switch::name(with_append) << nl;
ensightGeoFile ensFile(append, file, fmt);
if (append)
{
ensFile.beginTimeStep();
// At the moment need to pair begin/end time-step calls
if (!without_end)
{
ensFile.endTimeStep();
}
}
if (with_clear)
{
ensFile.clearTimeSteps();
}
}
if (args.readIfPresent("field", file))
{
Info<< "Open " << file << " as field"
<< " format:" << (with_ascii ? "ASCII" : "BINARY")
<< " append:" << Switch::name(with_append) << nl;
ensightFile ensFile(append, file, fmt);
if (append)
{
ensFile.beginTimeStep();
// At the moment need to pair begin/end time-step calls
if (!without_end)
{
ensFile.endTimeStep();
}
}
if (with_clear)
{
ensFile.clearTimeSteps();
}
}
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -1,3 +0,0 @@
Test-ensightFileName.cxx
EXE = $(FOAM_USER_APPBIN)/Test-ensightFileName

View File

@ -1,5 +0,0 @@
EXE_INC = \
-I$(LIB_SRC)/fileFormats/lnInclude
EXE_LIBS = \
-lfileFormats

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2021-2024 OpenCFD Ltd. Copyright (C) 2021-2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM, distributed under GPL-3.0-or-later. This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
@ -21,8 +21,6 @@ Description
#include "argList.H" #include "argList.H"
#include "IOstreams.H" #include "IOstreams.H"
#include "ITstream.H" #include "ITstream.H"
#include "OTstream.H"
#include "SpanStream.H"
#include "exprValue.H" #include "exprValue.H"
#include "Pstream.H" #include "Pstream.H"
@ -36,41 +34,6 @@ void printInfo(const expressions::exprValue& val)
} }
void write_read(const expressions::exprValue& val)
{
OCharStream os;
os << val;
ISpanStream is(os.view());
expressions::exprValue val2;
is >> val2;
Pout<< "wrote " << os.count() << " chars: " << os.str() << nl;
printInfo(val);
printInfo(val2);
Pout<< "====" << nl;
}
tokenList tokens_of(const expressions::exprValue& val)
{
OTstream toks;
toks << val;
Pout<< "val with tokens: ";
toks.writeList(Pout, 0) << nl;
for (const auto& t : toks)
{
Pout<< " " << t.info() << nl;
}
Pout<< nl;
return toks;
}
expressions::exprValue tryParse(const std::string& str) expressions::exprValue tryParse(const std::string& str)
{ {
expressions::exprValue val, val2; expressions::exprValue val, val2;
@ -127,7 +90,6 @@ int main(int argc, char *argv[])
{ {
expressions::exprValue value; expressions::exprValue value;
tokenList toks;
Info<< "exprValue" Info<< "exprValue"
<< " sizeof:" << value.size_bytes() << " sizeof:" << value.size_bytes()
@ -137,31 +99,21 @@ int main(int argc, char *argv[])
// Nothing // Nothing
printInfo(value); printInfo(value);
toks = tokens_of(value);
write_read(value);
value.set(scalar(100)); value.set(scalar(100));
printInfo(value); write_read(value); toks = tokens_of(value); printInfo(value);
value.set(scalar(100.01));
printInfo(value); write_read(value); toks = tokens_of(value);
value.set(vector(1,2,3)); value.set(vector(1,2,3));
printInfo(value); write_read(value); toks = tokens_of(value); printInfo(value);
value = vector(4,5,6); value = vector(4,5,6);
printInfo(value); write_read(value); toks = tokens_of(value); printInfo(value);
value = Zero; value = Zero;
printInfo(value); write_read(value); toks = tokens_of(value); printInfo(value);
value.clear(); value.clear();
printInfo(value); write_read(value); toks = tokens_of(value);
value.set<bool>(true);
printInfo(value); printInfo(value);
printInfo(value); write_read(value); toks = tokens_of(value);
if (UPstream::parRun()) if (UPstream::parRun())
{ {

View File

@ -1,3 +1,5 @@
exprValueFieldTag.cxx
Test-exprValue2.cxx Test-exprValue2.cxx
EXE = $(FOAM_USER_APPBIN)/Test-exprValue2 EXE = $(FOAM_USER_APPBIN)/Test-exprValue2

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2023-2024 OpenCFD Ltd. Copyright (C) 2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -36,6 +36,7 @@ Description
#include "vectorField.H" #include "vectorField.H"
#include "DynamicList.H" #include "DynamicList.H"
#include "Random.H" #include "Random.H"
#include "exprValue.H"
#include "exprValueFieldTag.H" #include "exprValueFieldTag.H"
using namespace Foam; using namespace Foam;
@ -60,81 +61,27 @@ int main(int argc, char *argv[])
#include "setRootCase.H" #include "setRootCase.H"
DynamicList<fieldTag> allTags;
{ {
scalarField fld1(20); scalarField fld1(20);
scalarField fld2a(20, Zero); scalarField fld2a(20, Zero);
scalarField fld2b(10, 3.10); scalarField fld2b(10, 3.10);
scalarField fld3; scalarField fld3;
for (auto& val : fld1) forAll(fld1, i)
{ {
val = rnd.position<scalar>(0, 20); fld1[i] = rnd.position<scalar>(0, 20);
}
if (!UPstream::master())
{
fld2b.resize(5);
fld2b *= 2;
} }
fieldTag tag1(fld1.begin(), fld1.end()); fieldTag tag1(fld1.begin(), fld1.end());
fieldTag tag2a(fld2a.begin(), fld2a.end()); fieldTag tag2a(fld2a.begin(), fld2a.end());
fieldTag tag2b(fld2b.begin(), fld2b.end()); fieldTag tag2b(fld2b.begin(), fld2b.end());
fieldTag tag3(fld3.begin(), fld3.end()); fieldTag tag3(fld3.begin(), fld3.end());
fieldTag tag4(fld3.begin(), fld3.end());
printInfo(tag1) << nl; printInfo(tag1) << nl;
printInfo(tag2a) << nl; printInfo(tag2a) << nl;
printInfo(tag2b) << nl; printInfo(tag2b) << nl;
printInfo(tag3) << nl; printInfo(tag3) << nl;
{
Pout<< "Test reduce" << nl;
fieldTag work(fld2b.begin(), fld2b.end());
Pout<< "Before" << nl;
printInfo(work) << nl;
work.reduce();
Pout<< "After" << nl;
printInfo(work) << nl;
Pout<< "====" << nl;
}
allTags.clear();
allTags.push_back(tag1);
allTags.push_back(tag2a);
allTags.push_back(tag2b);
allTags.push_back(tag3);
allTags.push_back(tag4);
allTags.push_back(fieldTag::make_empty<tensor>());
// Add some other types
{
vectorField vfld2a(20, vector::uniform(1.23));
allTags.emplace_back
(
vfld2a.begin(),
vfld2a.end()
);
allTags.emplace_back(vector(1.01, 2.02, 3.03));
allTags.emplace_back(12.4);
allTags.emplace_back().set_value(vector::uniform(2.0));
allTags.back().set_empty();
}
Info<< "all tags: " << allTags << nl;
Foam::sort(allTags);
Info<< "sorted: " << allTags << nl;
fieldTag result; fieldTag result;
result = fieldTag::combineOp{}(tag1, tag2a); result = fieldTag::combineOp{}(tag1, tag2a);

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2023-2024 OpenCFD Ltd. Copyright (C) 2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -27,11 +27,11 @@ Class
Foam::expressions::exprValueFieldTag Foam::expressions::exprValueFieldTag
Description Description
An expressions::exprValue (polymorphic typed union) with an additional A polymorphic single-value container for tracking Field content
flag for tracking Field content as uniform etc. as uniform etc.
SourceFiles SourceFiles
exprValueFieldTag.C exprValueFieldTag.cxx
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -39,7 +39,7 @@ SourceFiles
#define Foam_expressions_exprValueFieldTag_H #define Foam_expressions_exprValueFieldTag_H
#include "exprValue.H" #include "exprValue.H"
#include "UList.H" // For ListPolicy #include "List.H" // For ListPolicy
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -54,38 +54,20 @@ namespace expressions
class exprValueFieldTag class exprValueFieldTag
{ {
// Private Data // Private data
//- Uniformity of field (0: empty, 1: uniform, 2: non-uniform, ...) //- Uniformity of field
// Values as per internal enum Foam::Detail::ListPolicy::uniformity
int uniformity_{}; int uniformity_{};
//- Representative (uniform) type/value for the field //- Representative (uniform) value for the field
expressions::exprValue value_{}; expressions::exprValue value_{};
public: public:
// Generated Methods
//- Default construct. Uniformity = empty, type = none
exprValueFieldTag() = default;
//- Copy construct
exprValueFieldTag(const exprValueFieldTag&) = default;
//- Copy assignment
exprValueFieldTag& operator=(const exprValueFieldTag&) = default;
// Constructors // Constructors
//- Construct as uniform with the specified type/value //- Default construct
template<class Type> exprValueFieldTag() = default;
explicit exprValueFieldTag(const Type& val)
{
set_value(val);
}
//- Construct from a range of values //- Construct from a range of values
template<class Type> template<class Type>
@ -95,18 +77,6 @@ public:
} }
// Factory Methods
//- Make an empty field tag with the specified type (zero-value)
template<class Type>
static exprValueFieldTag make_empty()
{
exprValueFieldTag tag; // construct empty, no type
tag.set_zero<Type>(); // set type and zero value
return tag;
}
// Member Functions // Member Functions
//- True if the uniformity is "empty" //- True if the uniformity is "empty"
@ -118,18 +88,9 @@ public:
//- True if the uniformity is "non-uniform" //- True if the uniformity is "non-uniform"
bool is_nonuniform() const noexcept; bool is_nonuniform() const noexcept;
//- Representative (uniform) value for the field
const expressions::exprValue& value() const noexcept;
//- Compare (uniformity, type, value)
int compare(const exprValueFieldTag& rhs) const;
//- Test for equality of the values //- Test for equality of the values
bool equal(const exprValueFieldTag& rhs) const; bool equal(const exprValueFieldTag& rhs) const;
// Setters
//- Set value and uniformity from range of data //- Set value and uniformity from range of data
template<class Type> template<class Type>
void set(const Type* first, const Type* last) void set(const Type* first, const Type* last)
@ -143,48 +104,29 @@ public:
} }
else else
{ {
// Is empty, set zero value
value_.set<Type>(Foam::zero{}); value_.set<Type>(Foam::zero{});
} }
} }
//- Set as uniform, with specified value //- Set uniform type and value
template<class Type> template<class Type>
void set_value(const Type& val) void set_uniform(const Type& val)
{ {
uniformity_ = Foam::Detail::ListPolicy::uniformity::UNIFORM; uniformity_ = Foam::Detail::ListPolicy::uniformity::UNIFORM;
value_.set<Type>(val); value_.set<Type>(val);
} }
//- Set type and zero value (does not affect uniformity) //- Set as non-uniform
template<class Type> void set_nouniform() noexcept;
void set_zero()
{
value_.set<Type>(Foam::zero{});
}
//- Set as empty with zero value, leave type unchanged
void set_empty();
//- Set as non-uniform with zero value, leave type unchanged
void set_nouniform();
// Parallel
//- Inplace parallel reduction, uses worldComm
void reduce();
//- Perform a reduction on a copy and return the result
static exprValueFieldTag returnReduce(const exprValueFieldTag& tag);
// Reduction operations // Reduction operations
//- Inplace combine - eg, for global uniformity //- Combine - eg, for global uniformity
void combine(const exprValueFieldTag& b); void combine(const exprValueFieldTag& b);
//- Binary combine operator, e.g. for global reduction //- Binary operator to be used by reduce function for detecting
//- global uniformity
struct combineOp struct combineOp
{ {
exprValueFieldTag operator() exprValueFieldTag operator()
@ -202,32 +144,11 @@ public:
// IO Operations // IO Operations
//- Read uniformity label and the value as pair
void read(Istream& is); void read(Istream& is);
//- Write uniformity label and the value as pair
void write(Ostream& os) const; void write(Ostream& os) const;
//- Print description to Ostream //- Print description to Ostream
void print(Ostream& os) const; void print(Ostream& os) const;
// Member Operators
//- Assign from zero. Changes value but not type
void operator=(const Foam::zero) { value_ = Foam::zero{}; }
//- Compare (uniformity,value) for equality
bool operator==(const exprValueFieldTag&) const;
//- Compare (uniformity,value) for inequality
bool operator!=(const exprValueFieldTag& rhs) const
{
return !(*this == rhs);
}
//- Compare (uniformity,value)
bool operator<(const exprValueFieldTag&) const;
}; };
} // End namespace expressions } // End namespace expressions

View File

@ -0,0 +1,160 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2023 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 <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "exprValueFieldTag.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
bool Foam::expressions::exprValueFieldTag::empty() const noexcept
{
return
(
uniformity_ == Foam::Detail::ListPolicy::uniformity::EMPTY
);
}
bool Foam::expressions::exprValueFieldTag::is_uniform() const noexcept
{
return
(
uniformity_ == Foam::Detail::ListPolicy::uniformity::UNIFORM
);
}
bool Foam::expressions::exprValueFieldTag::is_nonuniform() const noexcept
{
return
(
uniformity_ == Foam::Detail::ListPolicy::uniformity::NONUNIFORM
);
}
bool Foam::expressions::exprValueFieldTag::equal
(
const exprValueFieldTag& rhs
) const
{
return (value_ == rhs.value_);
}
void Foam::expressions::exprValueFieldTag::set_nouniform() noexcept
{
uniformity_ = Foam::Detail::ListPolicy::uniformity::NONUNIFORM;
value_ = Foam::zero{};
}
void Foam::expressions::exprValueFieldTag::combine
(
const exprValueFieldTag& b
)
{
if (b.empty())
{
// no-op
return;
}
exprValueFieldTag& a = *this;
if (a.empty())
{
a = b;
}
else if (a.is_nonuniform())
{
// Already non-uniform/mixed
// a.uniformity_ |= b.uniformity_;
a.value_ = Foam::zero{};
}
else if (a.is_uniform() && b.is_uniform())
{
// Both are uniform, but are they the same value?
if (!a.equal(b))
{
a.set_nouniform();
}
}
}
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
void Foam::expressions::exprValueFieldTag::read(Istream& is)
{
label uniformTag;
is >> uniformTag;
uniformity_ = int(uniformTag);
value_.read(is);
}
void Foam::expressions::exprValueFieldTag::write(Ostream& os) const
{
os << label(uniformity_);
value_.write(os, false); // No pruning
}
void Foam::expressions::exprValueFieldTag::print(Ostream& os) const
{
os << "{ uniform:"
<< label(uniformity_)
<< " type:" << label(value_.typeCode())
<< " value: " << value_ << " }";
}
Foam::Istream& Foam::operator>>
(
Istream& is,
expressions::exprValueFieldTag& tag
)
{
tag.read(is);
return is;
}
Foam::Ostream& Foam::operator<<
(
Ostream& os,
const expressions::exprValueFieldTag& tag
)
{
tag.write(os);
return os;
}
// ************************************************************************* //

View File

@ -32,7 +32,6 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "argList.H" #include "argList.H"
#include "timeSelector.H"
#include "fvMesh.H" #include "fvMesh.H"
#include "volFields.H" #include "volFields.H"
#include "Time.H" #include "Time.H"
@ -127,14 +126,14 @@ void writeStencilStats(const labelListList& stencil)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
timeSelector::addOptions_singleTime(); // Single-time options #include "addTimeOptions.H"
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
// Set time from specified time options, or force start from Time=0 // Get times list
timeSelector::setTimeIfPresent(runTime, args, true); instantList Times = runTime.times();
#include "checkTimeOptions.H"
runTime.setTime(Times[startTime], startTime);
#include "createMesh.H" #include "createMesh.H"
// Force calculation of extended edge addressing // Force calculation of extended edge addressing

View File

@ -32,7 +32,6 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "argList.H" #include "argList.H"
#include "timeSelector.H"
#include "fvMesh.H" #include "fvMesh.H"
#include "volFields.H" #include "volFields.H"
#include "surfaceFields.H" #include "surfaceFields.H"
@ -108,16 +107,14 @@ void writeStencilStats(const labelListList& stencil)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::noFunctionObjects(); // Never use function objects #include "addTimeOptions.H"
timeSelector::addOptions_singleTime(); // Single-time options
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
// Set time from specified time options, or force start from Time=0 // Get times list
timeSelector::setTimeIfPresent(runTime, args, true); instantList Times = runTime.times();
#include "checkTimeOptions.H"
runTime.setTime(Times[startTime], startTime);
#include "createMesh.H" #include "createMesh.H"

View File

@ -1,3 +0,0 @@
Test-faMesh-try.cxx
EXE = $(FOAM_USER_APPBIN)/Test-faMesh-try

View File

@ -1,7 +0,0 @@
EXE_INC = \
-I$(LIB_SRC)/finiteArea/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
-lfiniteArea \
-lmeshTools

View File

@ -1,3 +0,0 @@
Test-faMeshesRegistry.cxx
EXE = $(FOAM_USER_APPBIN)/Test-faMeshesRegistry

View File

@ -1,7 +0,0 @@
EXE_INC = \
-I$(LIB_SRC)/finiteArea/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
-lfiniteArea \
-lmeshTools

View File

@ -1,68 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2023 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 <http://www.gnu.org/licenses/>.
Application
Test-faMeshesRegistry
Description
Basic tests for faMeshesRegistry
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "faMesh.H"
#include "faMeshesRegistry.H"
#include "polyMesh.H"
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
#include "setRootCase.H"
#include "createTime.H"
#include "createPolyMesh.H"
Info<< "mesh 0: " << mesh.sortedNames() << nl;
faMeshesRegistry& reg =
const_cast<faMeshesRegistry&>(faMeshesRegistry::New(mesh));
// faMeshesRegistry faReg = faMeshesRegistry(mesh);
faMesh mesh1(mesh, Foam::zero{});
faMesh mesh2("mesh2", mesh, Foam::zero{});
reg.write();
Info<< "\nEnd\n" << nl;
return 0;
}
// ************************************************************************* //

View File

@ -5,5 +5,4 @@ EXE_INC = \
EXE_LIBS = \ EXE_LIBS = \
-lfiniteVolume \ -lfiniteVolume \
-lmeshTools \
-ldynamicMesh -ldynamicMesh

View File

@ -32,7 +32,6 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "argList.H" #include "argList.H"
#include "timeSelector.H"
#include "fvMesh.H" #include "fvMesh.H"
#include "volFields.H" #include "volFields.H"
#include "Time.H" #include "Time.H"
@ -52,33 +51,22 @@ using namespace Foam;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
timeSelector::addOptions_singleTime(); // Single-time options #include "addTimeOptions.H"
argList::addArgument("inflate (true|false)");
argList::addBoolOption
(
"inflate",
"Use inflation/deflation for deleting cells"
);
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
// Allow override of time from specified time options, or no-op
timeSelector::setTimeIfPresent(runTime, args);
#include "createMesh.H" #include "createMesh.H"
const bool inflate = args.found("inflate"); const Switch inflate(args[1]);
if (inflate) if (inflate)
{ {
Info<< "Deleting cells using inflation/deflation" Info<< "Deleting cells using inflation/deflation" << nl << endl;
<< nl << endl;
} }
else else
{ {
Info<< "Deleting cells, introducing points at new position" Info<< "Deleting cells, introducing points at new position" << nl
<< nl << endl; << endl;
} }

View File

@ -47,7 +47,7 @@ using namespace Foam;
template<class PrimitiveType> template<class PrimitiveType>
static List<PrimitiveType> splitStringToList(const std::string& str) static List<PrimitiveType> splitStringToList(const std::string& str)
{ {
const auto items = stringOps::splitAny(str, " ,;"); const SubStrings<std::string> items = stringOps::splitAny(str, " ,;");
DynamicList<PrimitiveType> values(items.size()); DynamicList<PrimitiveType> values(items.size());

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2023-2024 OpenCFD Ltd. Copyright (C) 2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -50,9 +50,6 @@ void printInfo(const meshObjects::gravity& g)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addBoolOption("checkout", "Test checkout with release");
argList::addBoolOption("release", "Test release instead of delete");
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
@ -73,81 +70,14 @@ int main(int argc, char *argv[])
printInfo(g); printInfo(g);
} }
Pout<< "registered:" Pout<< "registered:" << flatOutput(runTime.sortedToc()) << nl << endl;
<< flatOutput(runTime.sortedToc()) << nl << endl;
} }
std::unique_ptr<meshObjects::gravity> release1; meshObjects::gravity::Delete("g", runTime);
std::unique_ptr<meshObjects::gravity> release2; meshObjects::gravity::Delete("something-not-in-registry", runTime);
if (args.found("release")) Info<< "after Delete" << nl;
{ Pout<< "registered:" << flatOutput(runTime.sortedToc()) << endl;
// Ugly!
typedef
MeshObject<Time, TopologicalMeshObject, meshObjects::gravity>
parent_type;
release1 = meshObjects::gravity::Release("g", runTime);
release2 = meshObjects::gravity::Release("#none#", runTime);
Info<< "release: " << Switch::name(bool(release1))
<< ", " << Switch::name(bool(release2)) << nl;
Info<< "after Release: "
<< flatOutput(runTime.sortedToc()) << endl;
// Do checkout by hand (ugly)
if (args.found("checkout"))
{
if (release1)
{
release1->parent_type::checkOut();
}
if (release2)
{
release2->parent_type::checkOut();
}
Info<< "after checkout: "
<< flatOutput(runTime.sortedToc()) << endl;
}
}
else if (args.found("checkout"))
{
// Do checkout as part of release
release1 = meshObjects::gravity::Release("g", runTime, true);
release2 = meshObjects::gravity::Release("#none#", runTime, true);
Info<< "release: " << Switch::name(bool(release1))
<< ", " << Switch::name(bool(release2)) << nl;
Info<< "after Release/Checkout(true) : "
<< flatOutput(runTime.sortedToc()) << endl;
}
else
{
meshObjects::gravity::Delete("g", runTime);
meshObjects::gravity::Delete("#none#", runTime);
Info<< "after Delete: "
<< flatOutput(runTime.sortedToc()) << endl;
}
if (meshObjects::gravity::Store(std::move(release1)))
{
Info<< "Store pointer" << endl;
}
if (release2)
{
release2.reset();
Info<< "Clear pointer" << endl;
}
Info<< "Before exit: "
<< flatOutput(runTime.sortedToc()) << endl;
Info<< "\nEnd\n" << endl; Info<< "\nEnd\n" << endl;

View File

@ -5,5 +5,4 @@ EXE_INC = \
EXE_LIBS = \ EXE_LIBS = \
-lfiniteVolume \ -lfiniteVolume \
-lmeshTools \
-ldynamicMesh -ldynamicMesh

View File

@ -33,7 +33,6 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "argList.H" #include "argList.H"
#include "timeSelector.H"
#include "Time.H" #include "Time.H"
#include "volFields.H" #include "volFields.H"
#include "surfaceFields.H" #include "surfaceFields.H"
@ -53,28 +52,21 @@ using namespace Foam;
// Main program: // Main program:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
timeSelector::addOptions_singleTime(); // Single-time options #include "addTimeOptions.H"
argList::addArgument("inflate (true|false)");
argList::addBoolOption
(
"inflate",
"Use inflation/deflation for splitting/deleting cells"
);
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
// Allow override of time from specified time options, or no-op
timeSelector::setTimeIfPresent(runTime, args);
#include "createMesh.H" #include "createMesh.H"
const bool inflate = args.found("inflate");
const pointConstraints& pc = pointConstraints::New(pointMesh::New(mesh));
const Switch inflate(args[1]);
if (inflate) if (inflate)
{ {
Info<< "Splitting/deleting cells using inflation/deflation" Info<< "Splitting/deleting cells using inflation/deflation" << nl
<< nl << endl; << endl;
} }
else else
{ {
@ -83,8 +75,6 @@ int main(int argc, char *argv[])
} }
const pointConstraints& pc = pointConstraints::New(pointMesh::New(mesh));
Random rndGen(0); Random rndGen(0);

View File

@ -0,0 +1,112 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2312 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
note "mesh renumbering dictionary";
object renumberMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Write maps from renumbered back to original mesh
writeMaps true;
// Optional entry: sort cells on coupled boundaries to last for use with
// e.g. nonBlockingGaussSeidel.
sortCoupledFaceCells false;
// Optional entry: renumber on a block-by-block basis. It uses a
// blockCoeffs dictionary to construct a decompositionMethod to do
// a block subdivision) and then applies the renumberMethod to each
// block in turn. This can be used in large cases to keep the blocks
// fitting in cache with all the cache misses bunched at the end.
// This number is the approximate size of the blocks - this gets converted
// to a number of blocks that is the input to the decomposition method.
//blockSize 1000;
// Optional entry: sort points into internal and boundary points
//orderPoints false;
// Optional: suppress renumbering cellSets,faceSets,pointSets
//renumberSets false;
//method CuthillMcKee;
//method Sloan;
//method manual;
method random;
//method structured;
//method spring;
//method zoltan; // only if compiled with zoltan support
//CuthillMcKeeCoeffs
//{
// // Reverse CuthillMcKee (RCM) or plain
// reverse true;
//}
manualCoeffs
{
// In system directory: new-to-original (i.e. order) labelIOList
dataFile "cellMap";
}
// For extruded (i.e. structured in one direction) meshes
structuredCoeffs
{
// Patches that mesh was extruded from. These determine the starting
// layer of cells
patches (movingWall);
// Method to renumber the starting layer of cells
method random;
// Renumber in columns (depthFirst) or in layers
depthFirst true;
// Reverse ordering
reverse false;
}
springCoeffs
{
// Maximum jump of cell indices. Is fraction of number of cells
maxCo 0.01;
// Limit the amount of movement; the fraction maxCo gets decreased
// with every iteration
freezeFraction 0.999;
// Maximum number of iterations
maxIter 1000;
}
blockCoeffs
{
method scotch;
//method hierarchical;
//hierarchicalCoeffs
//{
// n (1 2 1);
// delta 0.001;
// order xyz;
//}
}
zoltanCoeffs
{
ORDER_METHOD LOCAL_HSFC;
}
// ************************************************************************* //

View File

@ -51,6 +51,7 @@ using namespace Foam;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
#include "addTimeOptions.H"
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
#include "createMesh.H" #include "createMesh.H"

View File

@ -66,13 +66,13 @@ int main(int argc, char *argv[])
for (const entry& dEntry : dict) for (const entry& dEntry : dict)
{ {
if (dEntry.isStream()) if (!dEntry.isStream())
{ {
List<namedDictionary> list(dEntry.stream()); continue;
Info<< "input: " << dEntry << nl
<< "list: " << list << nl;
} }
Info<< "input: " << dEntry << nl;
List<namedDictionary> list(dEntry.stream());
Info<< "list: " << list << nl;
} }
} }
} }

View File

@ -1,3 +1,3 @@
Test-nullObject.cxx Test-nullObject.C
EXE = $(FOAM_USER_APPBIN)/Test-nullObject EXE = $(FOAM_USER_APPBIN)/Test-nullObject

View File

@ -37,7 +37,6 @@ Description
#include "HashSet.H" #include "HashSet.H"
#include "faceList.H" #include "faceList.H"
#include "pointField.H" #include "pointField.H"
#include "globalIndex.H"
#include "IOstreams.H" #include "IOstreams.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -151,18 +150,6 @@ int main()
NullObject::nullObject = "hello world"; NullObject::nullObject = "hello world";
NullObject::nullObject = Foam::identity(5); NullObject::nullObject = Foam::identity(5);
{
const auto& gi = globalIndex::null();
Info<< "globalIndex::null() => "
<< " empty: " << gi.empty()
<< " nProcs: " << gi.nProcs()
<< " total-size: " << gi.totalSize() << nl;
// Even this works
Info<< " offsets: " << gi.offsets() << nl;
}
Info<< nl; Info<< nl;
return 0; return 0;

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2022-2024 OpenCFD Ltd. Copyright (C) 2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -44,62 +44,175 @@ Description
using namespace Foam; using namespace Foam;
//- Number of elements corresponding to max byte transfer. // Looks like Pstream::exchangeBuf
// Normal upper limit is INT_MAX since MPI sizes are limited to <int>. template<class T>
template<class Type> void do_exchangeBuf
inline std::size_t maxTransferCount
( (
const std::size_t max_bytes = std::size_t(0) const label sendSize,
) noexcept const char* sendData,
const label recvSize,
char* recvData,
const int tag,
const label comm,
const bool wait
)
{ {
return const label startOfRequests = UPstream::nRequests();
(
(max_bytes == 0) // ie, unlimited // Set up receives
? (std::size_t(0)) // // ~~~~~~~~~~~~~~~
: (max_bytes > std::size_t(INT_MAX)) // MPI limit is <int>
? (std::size_t(INT_MAX) / sizeof(Type)) // // forAll(recvSizes, proci)
: (max_bytes > sizeof(Type)) // require an integral number {
? (max_bytes / sizeof(Type)) // // if (proci != Pstream::myProcNo(comm) && recvSizes[proci] > 0)
: (std::size_t(1)) // min of one element if (!Pstream::master(comm) && recvSize > 0)
); {
UIPstream::read
(
UPstream::commsTypes::nonBlocking,
UPstream::myProcNo(comm), // proci,
recvData,
recvSize*sizeof(T),
tag,
comm
);
}
}
// Set up sends
// ~~~~~~~~~~~~
// forAll(sendBufs, proci)
for (const int proci : Pstream::subProcs(comm))
{
if (sendSize > 0)
// if (proci != Pstream::myProcNo(comm) && sendSizes[proci] > 0)
{
if
(
!UOPstream::write
(
UPstream::commsTypes::nonBlocking,
proci,
sendData,
sendSize*sizeof(T),
tag,
comm
)
)
{
FatalErrorInFunction
<< "Cannot send outgoing message. "
<< "to:" << proci << " nBytes:"
<< label(sendSize*sizeof(T))
<< Foam::abort(FatalError);
}
}
}
// Wait for all to finish
// ~~~~~~~~~~~~~~~~~~~~~~
if (wait)
{
UPstream::waitRequests(startOfRequests);
}
} }
//- Upper limit on number of transfer bytes. // Looks like Pstream::exchangeContainer
// Max bytes is normally INT_MAX since MPI sizes are limited to <int>. template<class Container, class T>
// Negative values indicate a subtraction from INT_MAX. void do_exchangeContainer
inline std::size_t PstreamDetail_maxTransferBytes
( (
const int64_t max_bytes const Container& sendData,
) noexcept const label recvSize,
Container& recvData,
const int tag,
const label comm,
const bool wait
)
{ {
return const label startOfRequests = UPstream::nRequests();
(
(max_bytes < 0) // (numBytes fewer than INT_MAX) // Set up receives
? std::size_t(INT_MAX + max_bytes) // ~~~~~~~~~~~~~~~
: std::size_t(max_bytes)
); // for (const int proci : Pstream::allProcs(comm))
{
if (!Pstream::master(comm) && recvSize > 0)
// if (proci != Pstream::myProcNo(comm) && recvSize > 0)
{
UIPstream::read
(
UPstream::commsTypes::nonBlocking,
UPstream::myProcNo(comm), // proci,
recvData.data_bytes(),
recvSize*sizeof(T),
tag,
comm
);
}
}
// Set up sends
// ~~~~~~~~~~~~
if (Pstream::master(comm) && sendData.size() > 0)
{
for (const int proci : Pstream::subProcs(comm))
{
if
(
!UOPstream::write
(
UPstream::commsTypes::nonBlocking,
proci,
sendData.cdata_bytes(),
sendData.size_bytes(),
tag,
comm
)
)
{
FatalErrorInFunction
<< "Cannot send outgoing message. "
<< "to:" << proci << " nBytes:"
<< label(sendData.size_bytes())
<< Foam::abort(FatalError);
}
}
}
// Wait for all to finish
// ~~~~~~~~~~~~~~~~~~~~~~
if (wait)
{
UPstream::waitRequests(startOfRequests);
}
} }
template<class Container, class Type> template<class Container, class T>
void broadcast_chunks void broadcast_chunks
( (
Container& sendData, Container& sendData,
const int tag = UPstream::msgType(), const int tag = UPstream::msgType(),
const label comm = UPstream::worldComm const label comm = UPstream::worldComm,
const int64_t maxComms_bytes = UPstream::maxCommsSize const bool wait = true
) )
{ {
// OR static_assert(is_contiguous<T>::value, "Contiguous data only!") // OR static_assert(is_contiguous<T>::value, "Contiguous data only!")
if (!is_contiguous<Type>::value) if (!is_contiguous<T>::value)
{ {
FatalErrorInFunction FatalErrorInFunction
<< "Contiguous data only." << sizeof(Type) << "Contiguous data only." << sizeof(T) << Foam::abort(FatalError);
<< Foam::abort(FatalError);
} }
if (maxComms_bytes == 0) if (UPstream::maxCommsSize <= 0)
{ {
// Do in one go // Do in one go
Info<< "send " << sendData.size() << " elements in one go" << endl; Info<< "send " << sendData.size() << " elements in one go" << endl;
@ -114,90 +227,93 @@ void broadcast_chunks
sendData.resize_nocopy(recvSize); // A no-op on master sendData.resize_nocopy(recvSize); // A no-op on master
// Determine the number of chunks to send. Note that we
// only have to look at the sending data since we are
// guaranteed that some processor's sending size is some other
// processor's receive size. Also we can ignore any local comms.
// The chunk size (number of elements) corresponding to max byte transfer // We need to send chunks so the number of iterations:
// Is zero for non-chunked exchanges. // maxChunkSize iterations
const std::size_t chunkSize // ------------ ----------
// 0 0
// 1..maxChunkSize 1
// maxChunkSize+1..2*maxChunkSize 2
// ...
const label maxChunkSize
( (
PstreamDetail_maxTransferCount<Type> max
( (
PstreamDetail_maxTransferBytes(maxComms_bytes) static_cast<label>(1),
static_cast<label>(UPstream::maxCommsSize/sizeof(T))
) )
); );
label nChunks(0);
if (chunkSize)
{ {
// Get max send count (elements)
// forAll(sendBufs, proci)
// {
// if (proci != Pstream::myProcNo(comm))
// {
// nChunks = max(nChunks, sendBufs[proci].size());
// }
// }
nChunks = sendSize;
// Convert from send count (elements) to number of chunks. // Convert from send count (elements) to number of chunks.
// Can normally calculate with (count-1), but add some safety // Can normally calculate with (count-1), but add some safety
label nChunks = 1 + (sendSize/label(chunkSize)); if (nChunks)
{
nChunks = 1 + (nChunks/maxChunkSize);
}
reduce(nChunks, maxOp<label>(), tag, comm);
Info Info
<< "send " << sendSize << " elements (" << "send " << sendSize << " elements ("
<< (sendSize*sizeof(Type)) << " bytes) in " << nChunks << (sendSize*sizeof(T)) << " bytes) in " << nChunks
<< " chunks of " << label(chunkSize) << " elements (" << " chunks of " << maxChunkSize << " elements ("
<< label(chunkSize*sizeof(Type)) << " bytes) for maxCommsSize:" << (maxChunkSize*sizeof(T)) << " bytes) for maxCommsSize:"
<< label(maxComms_bytes) << Pstream::maxCommsSize
<< endl; << endl;
} }
// stress-test with shortened sendSize // stress-test with shortened sendSize
// will produce useless loops, but no calls // will produce useless loops, but no calls
// sendSize /= 2; // sendSize /= 2;
typedef stdFoam::span<Type> sendType; label nSend(0);
label startSend(0);
char* charPtrSend;
do for (label iter = 0; iter < nChunks; ++iter)
{ {
sendType payload(sendData.data(), sendData.size()); nSend = min
(
maxChunkSize,
sendSize-startSend
);
if (!chunkSize) charPtrSend =
(
nSend > 0
? reinterpret_cast<char*>(&(sendData[startSend]))
: nullptr
);
Info<< "iter " << iter
<< ": beg=" << startSend << " len=" << nSend
<< " (" << (nSend*sizeof(T)) << " bytes)" << endl;
UPstream::broadcast(charPtrSend, nSend*sizeof(T), comm);
// forAll(nSend, proci)
{ {
UPstream::broadcast startSend += nSend;
(
payload.data_bytes(),
payload.size_bytes(),
comm
);
break;
}
// Dispatch chunk-wise until there is nothing left
for (int iter = 0; /*true*/; ++iter)
{
// The begin/end for the data window
const std::size_t beg = (std::size_t(iter)*chunkSize);
const std::size_t end = (std::size_t(iter+1)*chunkSize);
if (payload.size() <= beg)
{
// No more data windows
break;
}
sendType window
(
(end < payload.size())
? payload.subspan(beg, end - beg)
: payload.subspan(beg)
);
Info<< "iter " << iter
<< ": beg=" << label(beg) << " len=" << label(window.size())
<< " (" << label(window.size_bytes()) << " bytes)" << endl;
UPstream::broadcast
(
window.data_bytes(),
window.size_bytes(),
comm
);
} }
} }
while (false);
Info<< "final" << endl; Info<< "final: " << startSend << endl;
} }
@ -217,7 +333,7 @@ int main(int argc, char *argv[])
} }
labelList input1; labelList input1;
if (UPstream::master()) if (Pstream::master())
{ {
input1 = identity(500); input1 = identity(500);
} }
@ -232,7 +348,7 @@ int main(int argc, char *argv[])
// Mostly the same with PstreamBuffers // Mostly the same with PstreamBuffers
if (false) if (false)
{ {
PstreamBuffers pBufs; PstreamBuffers pBufs(UPstream::commsTypes::nonBlocking);
labelList sendData; labelList sendData;
if (Pstream::master()) if (Pstream::master())

View File

@ -62,7 +62,7 @@ scalar sumReduce
scalar procValue; scalar procValue;
UIPstream::read UIPstream::read
( (
UPstream::commsTypes::buffered, UPstream::commsTypes::blocking,
proci, proci,
reinterpret_cast<char*>(&procValue), reinterpret_cast<char*>(&procValue),
sizeof(scalar), sizeof(scalar),
@ -79,7 +79,7 @@ scalar sumReduce
{ {
UOPstream::write UOPstream::write
( (
UPstream::commsTypes::buffered, UPstream::commsTypes::blocking,
proci, proci,
reinterpret_cast<const char*>(&sum), reinterpret_cast<const char*>(&sum),
sizeof(scalar), sizeof(scalar),
@ -93,7 +93,7 @@ scalar sumReduce
{ {
UOPstream::write UOPstream::write
( (
UPstream::commsTypes::buffered, UPstream::commsTypes::blocking,
UPstream::masterNo(), UPstream::masterNo(),
reinterpret_cast<const char*>(&localValue), reinterpret_cast<const char*>(&localValue),
sizeof(scalar), sizeof(scalar),
@ -105,7 +105,7 @@ scalar sumReduce
{ {
UIPstream::read UIPstream::read
( (
UPstream::commsTypes::buffered, UPstream::commsTypes::blocking,
UPstream::masterNo(), UPstream::masterNo(),
reinterpret_cast<char*>(&sum), reinterpret_cast<char*>(&sum),
sizeof(scalar), sizeof(scalar),

View File

@ -41,7 +41,14 @@ Description
#include "PstreamReduceOps.H" #include "PstreamReduceOps.H"
#include "SHA1.H" #include "SHA1.H"
#include "openfoam_mpi.H" // Include MPI without any C++ bindings
#ifndef MPICH_SKIP_MPICXX
#define MPICH_SKIP_MPICXX
#endif
#ifndef OMPI_SKIP_MPICXX
#define OMPI_SKIP_MPICXX
#endif
#include <mpi.h>
using namespace Foam; using namespace Foam;

View File

@ -41,7 +41,14 @@ Description
#include "StringStream.H" #include "StringStream.H"
#include "Random.H" #include "Random.H"
#include "openfoam_mpi.H" // Include MPI without any C++ bindings
#ifndef MPICH_SKIP_MPICXX
#define MPICH_SKIP_MPICXX
#endif
#ifndef OMPI_SKIP_MPICXX
#define OMPI_SKIP_MPICXX
#endif
#include <mpi.h>
using namespace Foam; using namespace Foam;

View File

@ -130,7 +130,7 @@ int main(int argc, char *argv[])
for (bool barrier_active = false, done = false; !done; /*nil*/) for (bool barrier_active = false, done = false; !done; /*nil*/)
{ {
std::pair<int, int64_t> probed = std::pair<int, int> probed =
UPstream::probeMessage UPstream::probeMessage
( (
UPstream::commsTypes::nonBlocking, UPstream::commsTypes::nonBlocking,
@ -143,8 +143,8 @@ int main(int argc, char *argv[])
{ {
// Message found and had size: receive it // Message found and had size: receive it
const label proci(probed.first); const label proci = probed.first;
const label count(probed.second); const label count = probed.second;
recvBufs(proci).resize_nocopy(count); recvBufs(proci).resize_nocopy(count);
recvFromProc(recvRequests.size()) = proci; recvFromProc(recvRequests.size()) = proci;

View File

@ -40,7 +40,14 @@ Description
#include "Pstream.H" #include "Pstream.H"
#include <iostream> #include <iostream>
#include "openfoam_mpi.H" // Include MPI without any C++ bindings
#ifndef MPICH_SKIP_MPICXX
#define MPICH_SKIP_MPICXX
#endif
#ifndef OMPI_SKIP_MPICXX
#define OMPI_SKIP_MPICXX
#endif
#include <mpi.h>
using namespace Foam; using namespace Foam;

View File

@ -119,7 +119,7 @@ int main(int argc, char *argv[])
for (bool barrier_active = false, done = false; !done; /*nil*/) for (bool barrier_active = false, done = false; !done; /*nil*/)
{ {
std::pair<int, int64_t> probed = std::pair<int, int> probed =
UPstream::probeMessage UPstream::probeMessage
( (
UPstream::commsTypes::nonBlocking, UPstream::commsTypes::nonBlocking,
@ -132,14 +132,14 @@ int main(int argc, char *argv[])
{ {
// Message found and had size: receive it // Message found and had size: receive it
const label proci(probed.first); const label proci = probed.first;
const label count(probed.second); const label count = probed.second;
if (optNonBlocking) if (optNonBlocking)
{ {
recvBufs(proci).resize_nocopy(count); recvBufs(proci).resize_nocopy(count);
// Non-blocking read - MPI_Irecv() // Non-blocking read
UIPstream::read UIPstream::read
( (
recvRequests.emplace_back(), recvRequests.emplace_back(),
@ -155,9 +155,9 @@ int main(int argc, char *argv[])
{ {
IPstream is IPstream is
( (
UPstream::commsTypes::scheduled, // ie, MPI_Recv() UPstream::commsTypes::scheduled,
proci, probed.first,
count, // bufSize probed.second,
tag, tag,
comm comm
); );

View File

@ -66,7 +66,7 @@ int main(int argc, char *argv[])
Pstream::myProcNo() Pstream::myProcNo()
); );
PstreamBuffers pBufs; PstreamBuffers pBufs(Pstream::commsTypes::nonBlocking);
if (!Pstream::master()) if (!Pstream::master())
{ {
@ -150,7 +150,7 @@ int main(int argc, char *argv[])
// Do a non-blocking send inbetween // Do a non-blocking send inbetween
{ {
PstreamBuffers pBufs; PstreamBuffers pBufs(Pstream::commsTypes::nonBlocking);
for (const int proci : Pstream::allProcs()) for (const int proci : Pstream::allProcs())
{ {

View File

@ -131,17 +131,13 @@ void testTransfer(const T& input)
for (const int proci : UPstream::subProcs()) for (const int proci : UPstream::subProcs())
{ {
Perr<< "master sending to proc:" << proci << endl; Perr<< "master sending to proc:" << proci << endl;
OPstream os(UPstream::commsTypes::buffered, proci); OPstream::bsend(data, proci);
os << data;
} }
} }
else else
{ {
{ Perr<< "proc sending to master" << endl;
Perr<< "proc sending to master" << endl; OPstream::bsend(data, UPstream::masterNo());
OPstream os(UPstream::commsTypes::buffered, UPstream::masterNo());
os << data;
}
Perr<< "proc receiving from master" << endl; Perr<< "proc receiving from master" << endl;
IPstream::recv(data, UPstream::masterNo()); IPstream::recv(data, UPstream::masterNo());
@ -169,17 +165,13 @@ void testTokenized(const T& data)
for (const int proci : UPstream::subProcs()) for (const int proci : UPstream::subProcs())
{ {
Perr<< "master sending to proc:" << proci << endl; Perr<< "master sending to proc:" << proci << endl;
OPstream os(UPstream::commsTypes::buffered, proci); OPstream::bsend(tok, proci);
os << tok;
} }
} }
else else
{ {
{ Perr<< "proc sending to master" << endl;
Perr<< "proc sending to master" << endl; OPstream::bsend(tok, UPstream::masterNo());
OPstream os(UPstream::commsTypes::buffered, UPstream::masterNo());
os << tok;
}
Perr<< "proc receiving from master" << endl; Perr<< "proc receiving from master" << endl;
IPstream::recv(tok, UPstream::masterNo()); IPstream::recv(tok, UPstream::masterNo());

View File

@ -7,6 +7,5 @@ EXE_INC = \
EXE_LIBS = \ EXE_LIBS = \
-lfiniteVolume \ -lfiniteVolume \
-ldynamicFvMesh \
-lsampling \ -lsampling \
-loverset -loverset

View File

@ -56,7 +56,6 @@ Description
#include "fvCFD.H" #include "fvCFD.H"
#include "simpleControl.H" #include "simpleControl.H"
#include "predicates.H"
#include "dynamicFvMesh.H" #include "dynamicFvMesh.H"
#include "dynamicOversetFvMesh.H" #include "dynamicOversetFvMesh.H"
@ -98,7 +97,6 @@ int main(int argc, char *argv[])
component(T.ref(), mesh.C(), 1); component(T.ref(), mesh.C(), 1);
// Interpolate + halo swap // Interpolate + halo swap
T.correctBoundaryConditions(); T.correctBoundaryConditions();
// T.boundaryFieldRef().evaluate_if(predicates::always{});
// Check halo swap // Check halo swap
dynamicOversetFvMesh::checkCoupledBC(T); dynamicOversetFvMesh::checkCoupledBC(T);
} }

View File

@ -34,7 +34,14 @@ Description
#include "globalMeshData.H" #include "globalMeshData.H"
#include "OFstream.H" #include "OFstream.H"
#include "openfoam_mpi.H" // Include MPI without any C++ bindings
#ifndef MPICH_SKIP_MPICXX
#define MPICH_SKIP_MPICXX
#endif
#ifndef OMPI_SKIP_MPICXX
#define OMPI_SKIP_MPICXX
#endif
#include <mpi.h>
using namespace Foam; using namespace Foam;

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2023-2024 OpenCFD Ltd. Copyright (C) 2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -29,12 +29,219 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "argList.H" #include "argList.H"
#include "OSspecific.H" // For fileSize()
#include "Fstream.H" #include "Fstream.H"
#include "Pstream.H" #include "Pstream.H"
#include "SpanStream.H" #include "SpanStream.H"
#include <limits>
using namespace Foam; using namespace Foam;
// * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * //
bool optUseSeek = false;
bool optVerbose = false;
// Get file contents. Usually master-only and broadcast
static List<char> slurpFile
(
const fileName& pathname,
const bool parallel = UPstream::parRun(),
const bool masterOnly = true
)
{
Info<< "slurp master-only:" << masterOnly
<< " broadcast:" << (masterOnly && parallel)
<< " seek:" << optUseSeek
<< " file: " << pathname << nl;
if (optUseSeek)
{
Info<< "Rewinding gzstream does not work..." << nl;
}
// -------------------------
List<char> buffer;
ifstreamPointer ifp;
if (UPstream::master() || !masterOnly)
{
ifp.open(pathname);
}
if (ifp && ifp->good())
{
Info<< "compressed:"
<< (IOstreamOption::COMPRESSED == ifp.whichCompression()) << nl;
#if 0
uint64_t inputSize = Foam::fileSize(pathname);
if (IOstreamOption::COMPRESSED == ifp.whichCompression())
{
ifp->ignore(std::numeric_limits<std::streamsize>::max());
const std::streamsize nread = ifp->gcount();
if (nread == std::numeric_limits<std::streamsize>::max())
{
FatalErrorInFunction
<< "Failed call to ignore()" << nl
<< exit(FatalError);
}
inputSize = ifp->gcount();
if (optUseSeek)
{
// Rewinding gzstream does not really work...
ifp->rdbuf()->pubseekpos(0, std::ios_base::in);
}
else
{
// Open it again - gzstream rewinding is unreliable...
ifp.open(pathname);
}
}
buffer.resize(label(inputSize));
ifp->read(buffer.data(), buffer.size_bytes());
const std::streamsize nread = ifp->gcount();
if (nread == std::numeric_limits<std::streamsize>::max())
{
FatalErrorInFunction
<< "Failed call to read()" << nl
<< exit(FatalError);
}
buffer.resize(label(nread)); // Extra safety (paranoid)
#else
if (IOstreamOption::COMPRESSED == ifp.whichCompression())
{
// For compressed files we do not have any idea how large
// the result will be. So read chunk-wise.
// Using the compressed size for the chunk size:
// 50% compression = 2 iterations
// 66% compression = 3 iterations
// ...
const auto inputSize = Foam::fileSize(pathname + ".gz");
const uint64_t chunkSize =
(
(inputSize <= 1024)
? uint64_t(4096)
: uint64_t(2*inputSize)
);
uint64_t beg = 0;
bool normalExit = false;
for (int iter = 1; iter < 100000; ++iter)
{
if (optVerbose)
{
Info<< "iter " << iter << nl;
Info<< "chunk " << label(chunkSize) << nl;
Info<< "size " << label(iter * chunkSize) << nl;
}
buffer.resize(label(iter * chunkSize));
ifp->read(buffer.data() + beg, chunkSize);
const std::streamsize nread = ifp->gcount();
if (optVerbose)
{
Info<< "nread: " << nread << nl;
}
if
(
nread < 0
|| nread == std::numeric_limits<std::streamsize>::max()
)
{
if (iter == 0)
{
FatalErrorInFunction
<< "Failed call to read()" << nl
<< exit(FatalError);
}
break;
}
else
{
beg += uint64_t(nread);
if (nread >= 0 && uint64_t(nread) < chunkSize)
{
normalExit = true;
if (optVerbose)
{
Info<< "stopped after "
<< iter << " iterations" << nl;
}
buffer.resize(label(beg));
break;
}
}
}
if (!normalExit)
{
FatalErrorInFunction
<< "Abnormal exit" << nl
<< exit(FatalError);
}
}
else
{
const auto inputSize = Foam::fileSize(pathname);
if (inputSize >= 0)
{
buffer.resize(label(inputSize));
ifp->read(buffer.data(), buffer.size_bytes());
const std::streamsize nread = ifp->gcount();
if
(
nread < 0
|| nread == std::numeric_limits<std::streamsize>::max()
)
{
FatalErrorInFunction
<< "Failed call to read()" << nl
<< exit(FatalError);
}
buffer.resize(label(nread)); // Extra safety (paranoid)
}
}
#endif
}
// Done with input file
ifp.reset(nullptr);
if (parallel && masterOnly)
{
// On the assumption of larger files,
// prefer two broadcasts instead of serialization
Pstream::broadcastList(buffer);
}
return buffer;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program: // Main program:
@ -43,8 +250,9 @@ int main(int argc, char *argv[])
argList::noBanner(); argList::noBanner();
argList::noFunctionObjects(); argList::noFunctionObjects();
argList::noCheckProcessorDirectories(); argList::noCheckProcessorDirectories();
argList::addVerboseOption("additional information"); argList::addBoolOption("seek", "seek with gzstream (fails!)");
argList::addBoolOption("fail", "fail if file cannot be opened"); argList::addVerboseOption("addition information");
argList::addBoolOption("seek", "seek with gzstream");
argList::addBoolOption("no-broadcast", "suppress broadcast contents"); argList::addBoolOption("no-broadcast", "suppress broadcast contents");
argList::addNote("Test master-only reading (with broadcast)"); argList::addNote("Test master-only reading (with broadcast)");
@ -54,7 +262,8 @@ int main(int argc, char *argv[])
#include "setRootCase.H" #include "setRootCase.H"
const bool syncPar = (UPstream::parRun() && !args.found("no-broadcast")); const bool syncPar = (UPstream::parRun() && !args.found("no-broadcast"));
const bool optFail = args.found("fail"); optUseSeek = args.found("seek");
optVerbose = args.verbose();
auto srcName = args.get<fileName>(1); auto srcName = args.get<fileName>(1);
@ -67,33 +276,7 @@ int main(int argc, char *argv[])
ICharStream is; ICharStream is;
{ {
DynamicList<char> buffer; List<char> buffer(slurpFile(srcName, syncPar));
if (UPstream::master() || !syncPar)
{
if (optFail)
{
IFstream ifs(srcName, IOstreamOption::BINARY);
if (!ifs.good())
{
FatalIOErrorInFunction(srcName)
<< "Cannot open file " << srcName
<< exit(FatalIOError);
}
buffer = IFstream::readContents(ifs);
}
else
{
buffer = IFstream::readContents(srcName);
}
}
if (syncPar)
{
// Prefer two broadcasts instead of serialize/de-serialize
Pstream::broadcastList(buffer);
}
is.swap(buffer); is.swap(buffer);
} }

View File

@ -30,15 +30,16 @@ Description
Gather data from all processors onto all processors. Gather data from all processors onto all processors.
SourceFiles SourceFiles
Gather.txx Gather.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef Foam_TestGather_H #ifndef Gather_H
#define Foam_TestGather_H #define Gather_H
#include "List.H" #include "List.H"
#include "labelList.H" #include "labelList.H"
#include "GatherBase.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -49,34 +50,34 @@ namespace Foam
Class Gather Declaration Class Gather Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
template<class Type> template<class T0>
class Gather class Gather
: :
public List<Type> public GatherBase,
public List<T0>
{ {
// Private Data // Private data
//- Number of processors (1 for sequential) //- Number of processors (1 for sequential)
label nProcs_; label nProcs_;
//- Storage //- Storage of type 0
//List<Type> list_; //List<T0> data0_;
public: public:
// Constructors // Constructors
//- Construct from containers across processors //- Construct from containers across processors
Gather(const Type& localData, const bool redistribute=true); Gather(const T0&, const bool redistribute=true);
// Member Functions // Member Functions
List<Type>& list() noexcept { return *this; } // const List<T0>& data0() const
const List<Type>& list() const noexcept { return *this; } // {
// List<Type>& list() noexcept { return list_; } // return data0_;
// const List<Type>& list() const noexcept { return list_; } // }
}; };

View File

@ -30,71 +30,96 @@ License
#include "IPstream.H" #include "IPstream.H"
#include "OPstream.H" #include "OPstream.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class Type> // Construct from component
Foam::Gather<Type>::Gather(const Type& localData, const bool redistribute) template<class T0>
Gather<T0>::Gather(const T0& localData, const bool redistribute)
: :
nProcs_(Foam::max(1, UPstream::nProcs())) List<T0>(0),
nProcs_(max(1, Pstream::nProcs()))
{ {
this->list().resize(nProcs_); this->setSize(nProcs_);
// //
// Collect sizes on all processor // Collect sizes on all processor
// //
if (UPstream::parRun()) if (Pstream::parRun())
{ {
if (UPstream::master()) if (Pstream::master())
{ {
auto iter = this->list().begin(); auto outIter = this->begin();
*iter = localData; *outIter = localData;
// Receive data // Receive data
for (const int proci : UPstream::subProcs()) for (const int proci : Pstream::subProcs())
{ {
++iter; IPstream fromSlave(Pstream::commsTypes::scheduled, proci);
IPstream::recv(*iter, proci); fromSlave >> *(++outIter);
} }
// Send data // Send data
for (const int proci : UPstream::subProcs()) for (const int proci : Pstream::subProcs())
{ {
OPstream toSlave(Pstream::commsTypes::scheduled, proci);
if (redistribute) if (redistribute)
{ {
OPstream::send(*this, proci); toSlave << *this;
} }
else else
{ {
// Dummy send (to balance sends/receives) // Dummy send just to balance sends/receives
OPstream::send(label(0), proci); toSlave << 0;
} }
} }
} }
else else
{ {
// Send my local data to master // Slave: send my local data to master
OPstream::send(localData, UPstream::masterNo()); {
OPstream toMaster
(
Pstream::commsTypes::scheduled,
Pstream::masterNo()
);
toMaster << localData;
}
// Receive data from master // Receive data from master
if (redistribute)
{ {
IPstream::recv(*this, UPstream::masterNo()); IPstream fromMaster
} (
else Pstream::commsTypes::scheduled,
{ Pstream::masterNo()
// Dummy receive );
label dummy; if (redistribute)
IPstream::recv(dummy, UPstream::masterNo()); {
fromMaster >> *this;
}
else
{
label dummy;
fromMaster >> dummy;
}
} }
} }
} }
else else
{ {
this->list().resize(1); this->operator[](0) = localData;
this->list()[0] = localData;
} }
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

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) 2011-2015 OpenFOAM Foundation
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -24,20 +24,20 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class Class
Foam::lookupBase Foam::GatherBase
Description Description
Base level of Lookup and LookupField classes.
SourceFiles SourceFiles
lookupBase.C GatherBase.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef lookupBase_H #ifndef GatherBase_H
#define lookupBase_H #define GatherBase_H
#include "dictionary.H" #include "List.H"
#include "labelList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -45,44 +45,45 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class lookupBase Declaration Class GatherBase Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class lookupBase class GatherBase
{ {
protected:
// Protected Data
//- Key of object
word name_;
public: public:
// Generated Methods //- Flatten: appends all elements of list into one single list.
// Used to collapse 'Gathered' data.
template<class T>
static T flatten(const List<T>);
//- No copy assignment //- Flatten and offset 'Gathered' indices (into value) so they
void operator=(const lookupBase&) = delete; // remain valid with respect to values (after they have been flattened)
template<class DataType, class IndexType, class AddOp>
static IndexType offset
(
const List<DataType>& values,
const List<IndexType>& indices,
AddOp aop
);
};
// Constructors template<class T>
class AddOp
{
//- Construct from dictionary public:
explicit lookupBase(const dictionary& dict);
//- Copy construct T operator()
explicit lookupBase(const lookupBase& rhs); (
const T& x,
const label offset
//- Destructor ) const
virtual ~lookupBase() = default; {
return x + offset;
}
// Member Functions
//- Write coefficient entries in dictionary format
virtual void writeEntries(Ostream& os) const;
}; };
@ -92,6 +93,10 @@ public:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "GatherBase.txx"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif #endif
// ************************************************************************* // // ************************************************************************* //

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) 2011-2015 OpenFOAM Foundation
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -23,42 +23,93 @@ License
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
Forward declarations related to GeometricField etc.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef Foam_GeometricFieldFwd_H #include "GatherBase.H"
#define Foam_GeometricFieldFwd_H
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
// Forward Declarations
template<class Type>
Type GatherBase::flatten(const List<Type> lst)
{
label sum = 0;
forAll(lst, lstI)
{
sum += lst[lstI].size();
}
Type result(sum);
label index = 0;
forAll(lst, lstI)
{
const Type& sub = lst[lstI];
forAll(sub, subI)
{
result[index++] = sub[subI];
}
}
return result;
}
// Geometric internal field template<class DataType, class IndexType, class AddOp>
template<class Type, class GeoMesh> IndexType GatherBase::offset
class DimensionedField; (
const List<DataType>& values,
const List<IndexType>& indices,
AddOp aop
)
{
if (values.size() != indices.size())
{
FatalErrorInFunction
<< "Input data and indices lists not equal size." << endl
<< "data size:" << values.size()
<< " indices:" << indices.size()
<< abort(FatalError);
}
// Geometric boundary field
template<class Type, template<class> class PatchField, class GeoMesh>
class GeometricBoundaryField;
// Geometric field (internal + boundary) label sum = 0;
template<class Type, template<class> class PatchField, class GeoMesh>
class GeometricField; forAll(indices, lstI)
{
sum += indices[lstI].size();
}
IndexType result(sum);
label index = 0;
label offset = 0;
forAll(indices, lstI)
{
const IndexType& sub = indices[lstI];
forAll(sub, subI)
{
result[index++] = aop(sub[subI], offset);
}
offset += values[lstI].size();
}
return result;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam } // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* // // ************************************************************************* //

View File

@ -148,7 +148,7 @@ int main(int argc, char *argv[])
Info<< "input: " << input << nl Info<< "input: " << input << nl
<< "expand: " << output << nl << "expand: " << output << nl
<< "split: " << stringOps::split(output, '/') << nl << nl; << "split: " << stringOps::split(output, "/") << nl << nl;
} }
} }

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2017-2024 OpenCFD Ltd. Copyright (C) 2017-2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -34,7 +34,6 @@ Description
#include "argList.H" #include "argList.H"
#include "fileName.H" #include "fileName.H"
#include "stringOps.H" #include "stringOps.H"
#include "Switch.H"
using namespace Foam; using namespace Foam;
@ -66,9 +65,6 @@ int main(int argc, char *argv[])
{ {
argList::noBanner(); argList::noBanner();
argList::noParallel(); argList::noParallel();
argList::noMandatoryArgs();
argList::addArgument("string .. stringN");
argList::addOption argList::addOption
( (
"any", "any",
@ -93,12 +89,6 @@ int main(int argc, char *argv[])
"int", "int",
"test split on fixed width" "test split on fixed width"
); );
argList::addOption
(
"begin",
"int",
"begin offset for splits"
);
argList::addBoolOption argList::addBoolOption
( (
"slash", "slash",
@ -114,25 +104,18 @@ int main(int argc, char *argv[])
"empty", "empty",
"preserve empty strings in split" "preserve empty strings in split"
); );
argList args(argc, argv, false, true);
argList args(argc, argv);
if (args.size() <= 1 && args.options().empty()) if (args.size() <= 1 && args.options().empty())
{ {
args.printUsage(); args.printUsage();
} }
const label beginOffset = args.getOrDefault<label>("begin", 0);
const bool keepEmpty = args.found("empty"); const bool keepEmpty = args.found("empty");
Info<< "begin offset: " << beginOffset << nl;
Info<< "keep empty : " << Switch::name(keepEmpty) << nl;
const label nopts = const label nopts =
args.count({"any", "slash", "space", "sub", "fixed", "char"}); args.count({"any", "slash", "space", "sub", "fixed", "char"});
if (args.found("any")) if (args.found("any"))
{ {
const std::string& str = args["any"]; const std::string& str = args["any"];
@ -142,7 +125,7 @@ int main(int argc, char *argv[])
for (label argi=1; argi < args.size(); ++argi) for (label argi=1; argi < args.size(); ++argi)
{ {
auto split = stringOps::splitAny(args[argi], str, beginOffset); const auto split = stringOps::splitAny(args[argi], str);
printSubStrings(args[argi], split); printSubStrings(args[argi], split);
} }
@ -161,7 +144,7 @@ int main(int argc, char *argv[])
for (label argi=1; argi < args.size(); ++argi) for (label argi=1; argi < args.size(); ++argi)
{ {
auto split = stringOps::split(args[argi], str, beginOffset); const auto split = stringOps::split(args[argi], str);
printSubStrings(args[argi], split); printSubStrings(args[argi], split);
} }
@ -178,11 +161,7 @@ int main(int argc, char *argv[])
for (label argi=1; argi < args.size(); ++argi) for (label argi=1; argi < args.size(); ++argi)
{ {
auto split = stringOps::splitSpace(args[argi], beginOffset); const auto split = stringOps::splitSpace(args[argi]);
printSubStrings(args[argi], split);
Info<< "pop_front(2)" << nl;
split.pop_front(2);
printSubStrings(args[argi], split); printSubStrings(args[argi], split);
} }
@ -201,8 +180,7 @@ int main(int argc, char *argv[])
for (label argi=1; argi < args.size(); ++argi) for (label argi=1; argi < args.size(); ++argi)
{ {
auto split = const auto split = stringOps::split(args[argi], delim, keepEmpty);
stringOps::split(args[argi], delim, beginOffset, keepEmpty);
printSubStrings(args[argi], split); printSubStrings(args[argi], split);
} }
@ -221,7 +199,7 @@ int main(int argc, char *argv[])
for (label argi=1; argi < args.size(); ++argi) for (label argi=1; argi < args.size(); ++argi)
{ {
auto split = stringOps::splitFixed(args[argi], width, beginOffset); const auto split = stringOps::splitFixed(args[argi], width);
printSubStrings(args[argi], split); printSubStrings(args[argi], split);
} }
@ -241,8 +219,7 @@ int main(int argc, char *argv[])
for (label argi=1; argi < args.size(); ++argi) for (label argi=1; argi < args.size(); ++argi)
{ {
auto split = const auto split = stringOps::split(args[argi], delim, keepEmpty);
stringOps::split(args[argi], delim, beginOffset, keepEmpty);
printSubStrings(args[argi], split); printSubStrings(args[argi], split);
} }
} }

View File

@ -44,7 +44,7 @@ Description
Format options: Format options:
\table \table
Property | Description | Required | Default Property | Description | Required | Default
commsType | scheduled/nonBlocking/buffered | no | scheduled commsType | blocking/nonBlocking/scheduled | no | scheduled
merge | Enable geometry/field merging | no | true merge | Enable geometry/field merging | no | true
write | Write file(s) | no | false write | Write file(s) | no | false
narrow | Communicate with narrowed values | no | false narrow | Communicate with narrowed values | no | false

Some files were not shown because too many files have changed in this diff Show More