Compare commits

..

1 Commits

Author SHA1 Message Date
bd41a2abdb WIP: issue #3348 2025-03-31 20:48:17 +02:00
530 changed files with 3392 additions and 5317 deletions

View File

@ -36,8 +36,7 @@ Description
if (adjustTimeStep)
{
scalar maxDeltaTFact = maxCo/(CoNum + StCoNum + SMALL);
const scalar deltaTFact =
scalar deltaTFact =
Foam::min(Foam::min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
runTime.setDeltaT

View File

@ -1,6 +1,5 @@
if (adjustTimeStep)
{
runTime.setDeltaT(Foam::min(dtChem, maxDeltaT));
Info<< "deltaT = " << runTime.deltaTValue() << endl;
}

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2013-2016 OpenFOAM Foundation
Copyright (C) 2020,2025 OpenCFD Ltd.
Copyright (C) 2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -57,23 +57,11 @@ License
// (relative to reference value)
scalar alphaY(pimpleDict.getOrDefault<scalar>("alphaY", 1.0));
// The old reciprocal time scale field, with any damping factor
tmp<volScalarField> rDeltaT0_damped;
// Calculate damped value before applying any other changes
if
(
rDeltaTDampingCoeff < 1
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT0_damped = (scalar(1) - rDeltaTDampingCoeff)*(rDeltaT);
}
Info<< "Time scales min/max:" << endl;
// Cache old reciprocal time scale field
volScalarField rDeltaT0("rDeltaT0", rDeltaT);
// Flow time scale
{
rDeltaT.ref() =
@ -82,14 +70,12 @@ License
/((2*maxCo)*mesh.V()*rho())
);
// Limit the largest time scale (=> smallest reciprocal time)
rDeltaT.clamp_min(1/maxDeltaT);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
// Limit the largest time scale
rDeltaT.max(1/maxDeltaT);
Info<< " Flow = "
<< limits.min() << ", " << limits.max() << endl;
<< 1/gMax(rDeltaT.primitiveField()) << ", "
<< 1/gMin(rDeltaT.primitiveField()) << endl;
}
// Heat release rate time scale
@ -100,13 +86,11 @@ License
mag(Qdot)/(alphaTemp*rho*thermo.Cp()*T)
);
rDeltaT.primitiveFieldRef().clamp_min(rDeltaTT);
auto limits = gMinMax(rDeltaTT.field());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Temperature = "
<< limits.min() << ", " << limits.max() << endl;
<< 1/(gMax(rDeltaTT.field()) + VSMALL) << ", "
<< 1/(gMin(rDeltaTT.field()) + VSMALL) << endl;
rDeltaT.ref() = max(rDeltaT(), rDeltaTT);
}
// Reaction rate time scale
@ -154,13 +138,11 @@ License
if (foundY)
{
rDeltaT.primitiveFieldRef().clamp_min(rDeltaTY);
auto limits = gMinMax(rDeltaTY.field());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Composition = "
<< limits.min() << ", " << limits.max() << endl;
<< 1/(gMax(rDeltaTY.field()) + VSMALL) << ", "
<< 1/(gMin(rDeltaTY.field()) + VSMALL) << endl;
rDeltaT.ref() = max(rDeltaT(), rDeltaTY);
}
else
{
@ -179,22 +161,28 @@ License
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
}
// Limit rate of change of time scale (=> smallest reciprocal time)
// Limit rate of change of time scale
// - reduce as much as required
// - only increase at a fraction of old time scale
if (rDeltaT0_damped)
if
(
rDeltaTDampingCoeff < 1
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT.clamp_min(rDeltaT0_damped());
rDeltaT = max
(
rDeltaT,
(scalar(1) - rDeltaTDampingCoeff)*rDeltaT0
);
}
// Update tho boundary values of the reciprocal time-step
rDeltaT.correctBoundaryConditions();
auto limits = gMinMax(rDeltaT.field());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Overall = "
<< limits.min() << ", " << limits.max() << endl;
<< 1/gMax(rDeltaT.primitiveField())
<< ", " << 1/gMin(rDeltaT.primitiveField()) << endl;
}

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
Copyright (C) 2020,2025 OpenCFD Ltd.
Copyright (C) 2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -106,7 +106,7 @@ Foam::smoluchowskiJumpTFvPatchScalarField::smoluchowskiJumpTFvPatchScalarField
if (!this->readValueEntry(dict))
{
// Fallback: set to the internal field
this->extrapolateInternal();
fvPatchField<scalar>::patchInternalField(*this);
}
refValue() = *this;

View File

@ -23,11 +23,7 @@
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
{
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
Info<< "Flow time scale min/max = "
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
}

View File

@ -52,26 +52,18 @@
// Update the boundary values of the reciprocal time-step
rDeltaT.correctBoundaryConditions();
{
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
Info<< "Flow time scale min/max = "
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
if (rDeltaTSmoothingCoeff < 1.0)
{
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
}
{
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Smoothed flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
Info<< "Smoothed flow time scale min/max = "
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
// Limit rate of change of time scale
// - reduce as much as required
@ -83,13 +75,13 @@
)
{
rDeltaT =
(
rDeltaT0
*max(rDeltaT/rDeltaT0, scalar(1) - rDeltaTDampingCoeff);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
* Foam::max(rDeltaT/rDeltaT0, scalar(1) - rDeltaTDampingCoeff)
);
Info<< "Damped flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
}
}

View File

@ -78,8 +78,8 @@
}
rho = thermo.rho();
rho.clamp_range(rhoMin[i], rhoMax[i]);
rho = max(rho, rhoMin[i]);
rho = min(rho, rhoMax[i]);
rho.relax();
Info<< "Min/max rho:" << min(rho).value() << ' '

View File

@ -387,18 +387,15 @@ updateCoeffs()
{
scalar Q = gSum(kappa(Tp)*patch().magSf()*snGrad());
auto limits = gMinMax(Tp);
auto avg = gAverage(Tp);
Info<< "T solid : " << nl << endl;
Info<< "T solid : " << nl << endl;
Info
<< " heat transfer rate from solid:" << Q
<< " walltemperature "
<< " min:" << limits.min()
<< " max:" << limits.max()
<< " avg:" << avg << nl
<< endl;
Info
<< " heat transfer rate from solid:" << Q
<< " walltemperature "
<< " min:" << gMin(Tp)
<< " max:" << gMax(Tp)
<< " avg:" << gAverage(Tp) << nl
<< endl;
}
}
else if (regionType_ == fluid)
@ -448,16 +445,10 @@ updateCoeffs()
scalarField qLiq((Tp - Tc)*KdeltaLiq);
scalarField qVap((Tp - Tv.patchInternalField())*KdeltaVap);
auto infoT = gMinMax(Tp);
auto avgT = gAverage(Tp);
auto infoLiq = gMinMax(qLiq);
auto infoVap = gMinMax(qVap);
Info<< "T flow : " << nl << endl;
Info<< " qLiq: " << infoLiq.min() << " - " << infoLiq.max() << nl
<< " qVap: " << infoVap.min() << " - " << infoVap.max() << nl;
Info<< " qLiq: " << gMin(qLiq) << " - " << gMax(qLiq) << endl;
Info<< " qVap: " << gMin(qVap) << " - " << gMax(qVap) << endl;
scalar QLiq = gSum(qLiq*patch().magSf());
scalar QVap = gSum(qVap*patch().magSf());
@ -466,9 +457,9 @@ updateCoeffs()
Info<< " Heat transfer to Vap: " << QVap << endl;
Info<< " walltemperature "
<< " min:" << infoT.min()
<< " max:" << infoT.max()
<< " avg:" << avgT
<< " min:" << gMin(Tp)
<< " max:" << gMax(Tp)
<< " avg:" << gAverage(Tp)
<< endl;
}
}

View File

@ -31,7 +31,7 @@
);
scalar regionCoNum =
scalar maxPhiCoNum =
0.5*gMax
(
sumPhi/fluidRegions[regioni].V().field()
@ -43,7 +43,7 @@
/ fluidRegions[regioni].V().field()
)*runTime.deltaTValue();
CoNum = Foam::max(CoNum, Foam::max(regionCoNum, UrCoNum));
CoNum = Foam::max(CoNum, Foam::max(maxPhiCoNum, UrCoNum));
}
}

View File

@ -48,8 +48,12 @@ if (adjustTimeStep)
scalar maxDeltaTFluid = maxCo/(CoNum + SMALL);
scalar maxDeltaTSolid = maxDi/(DiNum + SMALL);
const scalar deltaTFluid =
Foam::min(Foam::min(maxDeltaTFluid, 1.0 + 0.1*maxDeltaTFluid), 1.2);
scalar deltaTFluid =
Foam::min
(
Foam::min(maxDeltaTFluid, 1.0 + 0.1*maxDeltaTFluid),
1.2
);
runTime.setDeltaT
(

View File

@ -60,10 +60,13 @@ template<class Type>
void zeroCells
(
GeometricField<Type, fvPatchField, volMesh>& vf,
const labelUList& cells
const labelList& cells
)
{
UIndirectList<Type>(vf.primitiveField(), cells) = Zero;
forAll(cells, i)
{
vf[cells[i]] = Zero;
}
}

View File

@ -103,8 +103,8 @@ dimensionedScalar alphaMax
laminarTransport
);
const labelUList& inletCells = mesh.boundary()["inlet"].faceCells();
//const labelUList& outletCells = mesh.boundary()["outlet"].faceCells();
const labelList& inletCells = mesh.boundary()["inlet"].faceCells();
//const labelList& outletCells = mesh.boundary()["outlet"].faceCells();
volScalarField alpha
(

View File

@ -55,7 +55,7 @@ if (mesh.changing())
dimensionedScalar rAUf("rAUf", dimTime, 1.0);
const cellCellStencilObject& overlap = Stencil::New(mesh);
const labelUList& cellTypes = overlap.cellTypes();
const labelList& cellTypes = overlap.cellTypes();
const labelIOList& zoneIDs = overlap.zoneID();
while (pimple.correctNonOrthogonal())

View File

@ -36,26 +36,18 @@
// Update the boundary values of the reciprocal time-step
rDeltaT.correctBoundaryConditions();
{
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
Info<< "Flow time scale min/max = "
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
if (rDeltaTSmoothingCoeff < 1.0)
{
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
}
{
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Smoothed flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
Info<< "Smoothed flow time scale min/max = "
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
// Limit rate of change of time scale
// - reduce as much as required
@ -70,10 +62,8 @@
rDeltaT0
*max(rDeltaT/rDeltaT0, scalar(1) - rDeltaTDampingCoeff);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Damped flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
}
}

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2020,2025 OpenCFD Ltd.
Copyright (C) 2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -54,22 +54,11 @@ License
scalar alphaTemp(pimpleDict.getOrDefault("alphaTemp", 0.05));
// The old reciprocal time scale field, with any damping factor
tmp<volScalarField> rDeltaT0_damped;
// Calculate damped value before applying any other changes
if
(
rDeltaTDampingCoeff < 1
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT0_damped = (scalar(1) - rDeltaTDampingCoeff)*(rDeltaT);
}
Info<< "Time scales min/max:" << endl;
// Cache old reciprocal time scale field
volScalarField rDeltaT0("rDeltaT0", rDeltaT);
// Flow time scale
{
rDeltaT.ref() =
@ -78,14 +67,12 @@ License
/((2*maxCo)*mesh.V()*rho())
);
// Limit the largest time scale (=> smallest reciprocal time)
rDeltaT.clamp_min(1/maxDeltaT);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
// Limit the largest time scale
rDeltaT.max(1/maxDeltaT);
Info<< " Flow = "
<< limits.min() << ", " << limits.max() << endl;
<< gMin(1/rDeltaT.primitiveField()) << ", "
<< gMax(1/rDeltaT.primitiveField()) << endl;
}
// Reaction source time scale
@ -106,13 +93,15 @@ License
)
);
rDeltaT.primitiveFieldRef().clamp_min(rDeltaTT);
auto limits = gMinMax(rDeltaTT.field());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Temperature = "
<< limits.min() << ", " << limits.max() << endl;
<< gMin(1/(rDeltaTT.field() + VSMALL)) << ", "
<< gMax(1/(rDeltaTT.field() + VSMALL)) << endl;
rDeltaT.ref() = max
(
rDeltaT(),
rDeltaTT
);
}
// Update tho boundary values of the reciprocal time-step
@ -124,19 +113,25 @@ License
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
}
// Limit rate of change of time scale (=> smallest reciprocal time)
// Limit rate of change of time scale
// - reduce as much as required
// - only increase at a fraction of old time scale
if (rDeltaT0_damped)
if
(
rDeltaTDampingCoeff < 1.0
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT.clamp_min(rDeltaT0_damped());
rDeltaT = max
(
rDeltaT,
(scalar(1) - rDeltaTDampingCoeff)*rDeltaT0
);
}
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Overall = "
<< limits.min() << ", " << limits.max() << endl;
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
}

View File

@ -38,10 +38,8 @@ if (adjustTimeStep)
const scalar maxDeltaTFact =
Foam::min
(
maxCo/(CoNum + SMALL),
maxCo/(surfaceFilm.CourantNumber() + SMALL)
maxCo/(CoNum + SMALL), maxCo/(surfaceFilm.CourantNumber() + SMALL)
);
const scalar deltaTFact =
Foam::min(Foam::min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2020,2025 OpenCFD Ltd.
Copyright (C) 2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -54,22 +54,11 @@ License
scalar alphaTemp(pimpleDict.getOrDefault("alphaTemp", 0.05));
// The old reciprocal time scale field, with any damping factor
tmp<volScalarField> rDeltaT0_damped;
// Calculate damped value before applying any other changes
if
(
rDeltaTDampingCoeff < 1
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT0_damped = (scalar(1) - rDeltaTDampingCoeff)*(rDeltaT);
}
Info<< "Time scales min/max:" << endl;
// Cache old reciprocal time scale field
volScalarField rDeltaT0("rDeltaT0", rDeltaT);
// Flow time scale
{
rDeltaT.ref() =
@ -78,14 +67,12 @@ License
/((2*maxCo)*mesh.V()*rho())
);
// Limit the largest time scale (=> smallest reciprocal time)
rDeltaT.clamp_min(1/maxDeltaT);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
// Limit the largest time scale
rDeltaT.max(1/maxDeltaT);
Info<< " Flow = "
<< limits.min() << ", " << limits.max() << endl;
<< gMin(1/rDeltaT.primitiveField()) << ", "
<< gMax(1/rDeltaT.primitiveField()) << endl;
}
// Reaction source time scale
@ -105,13 +92,15 @@ License
)
);
rDeltaT.primitiveFieldRef().clamp_min(rDeltaTT);
auto limits = gMinMax(rDeltaTT.field());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Temperature = "
<< limits.min() << ", " << limits.max() << endl;
<< gMin(1/(rDeltaTT.field() + VSMALL)) << ", "
<< gMax(1/(rDeltaTT.field() + VSMALL)) << endl;
rDeltaT.ref() = max
(
rDeltaT(),
rDeltaTT
);
}
// Update the boundary values of the reciprocal time-step
@ -123,22 +112,25 @@ License
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
}
// Limit rate of change of time scale (=> smallest reciprocal time)
// Limit rate of change of time scale
// - reduce as much as required
// - only increase at a fraction of old time scale
if (rDeltaT0_damped)
if
(
rDeltaTDampingCoeff < 1.0
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT.clamp_min(rDeltaT0_damped());
rDeltaT = max
(
rDeltaT,
(scalar(1) - rDeltaTDampingCoeff)*rDeltaT0
);
}
// Update the boundary values of the reciprocal time-step
rDeltaT.correctBoundaryConditions();
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Overall = "
<< limits.min() << ", " << limits.max() << endl;
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
}

View File

@ -48,7 +48,8 @@ U.correctBoundaryConditions();
fvOptions.correct(U);
rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax);
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
Info<< "p min/max = " << min(p).value() << ", " << max(p).value() << endl;

View File

@ -49,7 +49,8 @@
fvOptions.correct(U);
rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax);
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
Info<< "p min/max = " << min(p).value() << ", " << max(p).value() << endl;

View File

@ -1,5 +1,6 @@
rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax);
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
volScalarField rAU(1.0/UEqn.A());
@ -93,7 +94,8 @@ p.relax();
// Recalculate density from the relaxed pressure
rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax);
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
Info<< "rho min/max : " << min(rho).value() << " " << max(rho).value() << endl;

View File

@ -1,5 +1,6 @@
rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax);
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
volScalarField rAU(1.0/UEqn.A());
@ -93,7 +94,8 @@ p.relax();
// Recalculate density from the relaxed pressure
rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax);
rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax();
Info<< "rho min/max : " << min(rho).value() << " " << max(rho).value() << endl;

View File

@ -38,7 +38,7 @@ if (adjustTimeStep)
scalar maxDeltaTFact =
Foam::min(maxCo/(CoNum + SMALL), maxAlphaCo/(alphaCoNum + SMALL));
const scalar deltaTFact =
scalar deltaTFact =
Foam::min(Foam::min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
runTime.setDeltaT

View File

@ -53,21 +53,6 @@
pimpleDict.getOrDefault<scalar>("maxDeltaT", GREAT)
);
// The old reciprocal time scale field, with any damping factor
tmp<volScalarField> rDeltaT0_damped;
// Calculate damped value before applying any other changes
if
(
rDeltaTDampingCoeff < 1
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT0_damped = (scalar(1) - rDeltaTDampingCoeff)*(rDeltaT);
}
volScalarField rDeltaT0("rDeltaT0", rDeltaT);
// Set the reciprocal time-step from the local Courant number
@ -98,13 +83,10 @@
// Update tho boundary values of the reciprocal time-step
rDeltaT.correctBoundaryConditions();
{
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Flow time scale min/max = "
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
Info<< "Flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
if (rDeltaTSmoothingCoeff < 1.0)
{
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
@ -128,25 +110,27 @@
fvc::sweep(rDeltaT, alpha1, nAlphaSweepIter, alphaSpreadDiff);
}
{
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Smoothed flow time scale min/max = "
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
Info<< "Smoothed flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
// Limit rate of change of time scale (=> smallest reciprocal time)
// Limit rate of change of time scale
// - reduce as much as required
// - only increase at a fraction of old time scale
if (rDeltaT0_damped)
if
(
rDeltaTDampingCoeff < 1.0
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT.clamp_min(rDeltaT0_damped());
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
rDeltaT = max
(
rDeltaT,
(scalar(1) - rDeltaTDampingCoeff)*rDeltaT0
);
Info<< "Damped flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
}
}

View File

@ -38,7 +38,7 @@ if (adjustTimeStep)
scalar maxDeltaTFact =
Foam::min(maxCo/(CoNum + SMALL), maxAcousticCo/(acousticCoNum + SMALL));
const scalar deltaTFact =
scalar deltaTFact =
Foam::min(Foam::min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
runTime.setDeltaT

View File

@ -210,7 +210,7 @@ void VoFPatchTransfer::correct
film().toRegion(patchi, Vp);
const polyPatch& pp = pbm[patchi];
const labelUList& faceCells = pp.faceCells();
const labelList& faceCells = pp.faceCells();
// Accumulate the total mass removed from patch
scalar dMassPatch = 0;

View File

@ -135,7 +135,7 @@ public:
virtual volScalarField& he()
{
NotImplemented;
return volScalarField::null().constCast();
return const_cast<volScalarField&>(volScalarField::null());
}
//- Enthalpy/Internal energy [J/kg]

View File

@ -243,7 +243,7 @@ public:
virtual volScalarField& he()
{
NotImplemented;
return volScalarField::null().constCast();
return const_cast<volScalarField&>(volScalarField::null());
}
//- Enthalpy/Internal energy [J/kg]

View File

@ -50,7 +50,7 @@ if (adjustTimeStep)
)
);
const scalar deltaTFact =
scalar deltaTFact =
Foam::min(Foam::min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
runTime.setDeltaT
@ -61,7 +61,6 @@ if (adjustTimeStep)
maxDeltaT
)
);
Info<< "deltaT = " << runTime.deltaTValue() << endl;
}

View File

@ -86,7 +86,7 @@ public:
virtual volScalarField& he()
{
NotImplemented;
return volScalarField::null().constCast();
return const_cast<volScalarField&>(volScalarField::null());
}
//- Return access to the internal energy field [J/Kg]

View File

@ -65,7 +65,7 @@
dimensionedScalar rAUf("rAUf", dimTime/rho.dimensions(), 1.0);
const cellCellStencilObject& overlap = Stencil::New(mesh);
const labelUList& cellTypes = overlap.cellTypes();
const labelList& cellTypes = overlap.cellTypes();
const labelIOList& zoneIDs = overlap.zoneID();
while (pimple.correctNonOrthogonal())

View File

@ -38,9 +38,7 @@
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
}

View File

@ -31,9 +31,7 @@
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
<< gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
}

View File

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

View File

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

View File

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

View File

@ -52,8 +52,7 @@ void printInfo
if (showSize)
{
Info<< " size=\"" << list.size()
<< "\" capacity=\"" << list.capacity() << "\""
<< "\" min=\"" << SizeMin << "\"" ;
<< "\" capacity=\"" << list.capacity() << "\"";
if (list.cdata())
{
Info<< " ptr=\"" << name(list.cdata()) << "\"";
@ -80,8 +79,7 @@ void printInfo
if (showSize)
{
Info<< " size=\"" << list.size()
<< "\" capacity=\"" << list.capacity() << "\""
<< "\" min=\"" << SizeMin << "\"" ;
<< "\" capacity=\"" << list.capacity() << "\"";
if (list.cdata())
{
Info<< " ptr=\"" << name(list.cdata()) << "\"";
@ -170,22 +168,6 @@ int main(int argc, char *argv[])
printInfo("", list2);
}
{
DynamicList<float, 32> list1(std::pair<label,label>(16,0));
list1 = -1;
Info<< "construct with specified size/capacity" << nl;
printInfo("", list1);
}
{
DynamicList<float, 32> list1(std::pair<label,label>(8,16));
list1 = -1;
Info<< "construct with specified size/capacity" << nl;
printInfo("", list1);
}
Info<< "\nEnd\n";
return 0;

View File

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

View File

@ -41,6 +41,7 @@ See also
#include "List.H"
#include "IPstream.H"
#include "OPstream.H"
#include <numeric>
using namespace Foam;

View File

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

View File

@ -274,7 +274,9 @@ int main(int argc, char *argv[])
Info<< nl << "No " << is.name() << " file found ..." << nl;
}
for (token tok; tok.read(is); /*nil*/)
token tok;
while (is.good() && is.read(tok) && tok.good())
{
const word listType(tok.wordToken());

View File

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

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2017-2025 OpenCFD Ltd.
Copyright (C) 2017-2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -83,10 +83,12 @@ Ostream& printView(Ostream& os, const char* first, const char* last)
}
#if __cplusplus >= 201703L
Ostream& printView(Ostream& os, std::string_view s)
{
return printView(os, s.begin(), s.end());
}
#endif
Ostream& printView(Ostream& os, stdFoam::span<char> s)
@ -136,10 +138,17 @@ void printInfo(const List<char>& buf)
void printTokens(Istream& is)
{
label count = 0;
for (token tok; tok.read(is); ++count)
token t;
while (is.good())
{
Info<< "token: " << tok << nl;
is >> t;
if (t.good())
{
++count;
Info<<"token: " << t << endl;
}
}
Info<< count << " tokens" << endl;
}

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2017 OpenFOAM Foundation
Copyright (C) 2019-2025 OpenCFD Ltd.
Copyright (C) 2019-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -269,7 +269,7 @@ int main(int argc, char *argv[])
ioOutput.rename(args.executable() + "-labels");
Info<< "write " << ioOutput.objectRelPath() << endl;
{
IOList<label>::writeContents(ioOutput, ints);
IOListRef<label>(ioOutput, ints).write();
}
ioOutput.rename(args.executable() + "-points");

View File

@ -73,13 +73,14 @@ Ostream& toString(Ostream& os, const List<char>& list)
void printTokens(Istream& is)
{
Info<< "stream tokens:" << endl;
label count = 0;
Info<< "stream tokens:" << endl;
for (token tok; tok.read(is); ++count)
{
Info<< " : " << tok << nl;
Info<< " : " << tok << endl;
}
Info<< count << " tokens" << endl;
}

View File

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

View File

@ -54,6 +54,7 @@ See also
#include "ListPolicy.H"
#include <list>
#include <numeric>
#include <functional>
// see issue #2083
@ -74,6 +75,8 @@ public:
namespace Detail
{
namespace ListPolicy
{
@ -81,6 +84,7 @@ namespace ListPolicy
template<> struct short_length<short> : std::integral_constant<int,20> {};
} // End namespace ListPolicy
} // End namespace Detail
} // End namespace Foam
@ -115,9 +119,9 @@ Ostream& printListOutputType(const char* what)
Info<< what
<< " (contiguous="
<< is_contiguous_v<T> << " no_linebreak="
<< ListPolicy::no_linebreak<T>::value
<< Detail::ListPolicy::no_linebreak<T>::value
<< " short_length="
<< ListPolicy::short_length<T>::value << ')';
<< Detail::ListPolicy::short_length<T>::value << ')';
return Info;
}
@ -139,46 +143,8 @@ int main(int argc, char *argv[])
argList::addBoolOption("ListList", "Test list of list functionality");
argList::addBoolOption("flag");
argList::addBoolOption("reserve", "Test ListPolicy for reserve_size");
#include "setRootCase.H"
if (args.found("reserve"))
{
using namespace Foam::ListPolicy;
using control = std::pair<label, label>;
for
(
const auto& tup :
{
control{ 10, 5 },
control{ 20, 25 }
}
)
{
const auto [len, capacity] = tup;
Info<< "test " << tup << nl;
auto size = reserve_size<16,2>(len, capacity);
Info<< " => " << size << " (ratio 2)" << nl;
size = reserve_size<16,3,2>(len, capacity);
Info<< " => " << size << " (ratio 3/2)" << nl;
size = reserve_size<16,13,8>(len, capacity);
Info<< " => " << size << " (ratio " << (13.0/8) << ')' << nl;
size = reserve_size<16,25,16>(len, capacity);
Info<< " => " << size << " (ratio " << (25.0/16) << ')' << nl;
}
Info<< nl << "\nEnd" << endl;
return 0;
}
{
List<label> ident(15);
Foam::identity(ident, 0);

View File

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

View File

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

View File

@ -50,6 +50,7 @@ Description
#include "ListPolicy.H"
#include <list>
#include <numeric>
#include <functional>
using namespace Foam;
@ -85,7 +86,7 @@ bool readBracketList(List<T>& list, Istream& is)
// constexpr label chunkSize = 128;
typedef std::unique_ptr<List<T>> chunkType;
tok.read(is);
is >> tok;
is.fatalCheck(FUNCTION_NAME);
if (tok.isPunctuation(token::END_LIST))
@ -149,7 +150,7 @@ bool readBracketList(List<T>& list, Istream& is)
"reading entry"
);
tok.read(is);
is >> tok;
is.fatalCheck(FUNCTION_NAME);
}

View File

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

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2017-2025 OpenCFD Ltd.
Copyright (C) 2017-2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -83,10 +83,12 @@ Ostream& printView(Ostream& os, const char* first, const char* last)
}
#if __cplusplus >= 201703L
Ostream& printView(Ostream& os, std::string_view s)
{
return printView(os, s.begin(), s.end());
}
#endif
Ostream& printView(Ostream& os, stdFoam::span<char> s)
@ -127,10 +129,17 @@ void printInfo(const BufType& buf)
void printTokens(Istream& is)
{
label count = 0;
for (token tok; tok.read(is); ++count)
token t;
while (is.good())
{
Info<< "token: " << tok << nl;
is >> t;
if (t.good())
{
++count;
Info<<"token: " << t << endl;
}
}
Info<< count << " tokens" << endl;
}

View File

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

View File

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

View File

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

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2017-2025 OpenCFD Ltd.
Copyright (C) 2017-2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -85,10 +85,12 @@ Ostream& printView(Ostream& os, const char* first, const char* last)
}
#if __cplusplus >= 201703L
Ostream& printView(Ostream& os, std::string_view s)
{
return printView(os, s.begin(), s.end());
}
#endif
Ostream& printView(Ostream& os, stdFoam::span<char> s)
@ -143,10 +145,17 @@ void printInfo(const UList<char>& buf)
void printTokens(Istream& is)
{
label count = 0;
for (token tok; tok.read(is); ++count)
token t;
while (is.good())
{
Info<< "token: " << tok << nl;
is >> t;
if (t.good())
{
++count;
Info<<"token: " << t << endl;
}
}
Info<< count << " tokens" << endl;
}

View File

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

View File

@ -38,6 +38,7 @@ Description
#include "SubField.H"
#include "labelRange.H"
#include "ListOps.H"
#include <numeric>
using namespace Foam;

View File

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

View File

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

View File

@ -499,7 +499,7 @@ int main(int argc, char *argv[])
Info<<"bitSet ";
report(list4);
list4.shrink_to_fit();
list4.shrink();
Info<<"shrunk ";
report(list4);

View File

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

View File

@ -43,6 +43,8 @@ Description
#include "SubList.H"
#include "FlatOutput.H"
#include <numeric>
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -50,6 +50,8 @@ Description
#include "SliceStreamRepo.H"
#endif
#include <numeric>
using namespace Foam;

View File

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

View File

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

View File

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

View File

@ -142,26 +142,6 @@ int main(int argc, char *argv[])
Info<< "sorted ";
printInfo(e4);
// Sorted construction
{
edge edge1(10, 5);
Info<< "plain ";
printInfo(edge1);
// construct sorted
auto edge3(edge::sorted(10, 5));
Info<< "sorted ";
printInfo(edge3);
// // construct sorted (deprecated)
// edge edge2(10, 5, true);
//
// Info<< "sorted ";
// printInfo(edge2);
}
return 0;
}

View File

@ -262,12 +262,13 @@ int main(int argc, char *argv[])
// Check constant profile
{
auto limits = gMinMax(one);
const scalar max = gMax(one);
const scalar min = gMin(one);
Info<< "Uniform one field min = "
<< limits.min() << " max = " << limits.max() << endl;
Info<< "Uniform one field min = " << min
<< " max = " << max << endl;
if (isNotEqual(limits.min(), 1) || isNotEqual(limits.max(), 1))
if (isNotEqual(max, 1) || isNotEqual(min, 1))
{
FatalErrorInFunction
<< "Uniform volVectorField not preserved."
@ -285,12 +286,13 @@ int main(int argc, char *argv[])
{
const scalarField diff = ccX-mesh.C().component(0);
auto limits = gMinMax(diff);
const scalar max = gMax(diff);
const scalar min = gMin(diff);
Info<< "Linear profile field min = "
<< limits.min() << " max = " << limits.max() << endl;
Info<< "Linear profile field min = " << min
<< " max = " << max << endl;
if (isNotEqual(limits.min(), 0) || isNotEqual(limits.max(), 0))
if (isNotEqual(max, 0) || isNotEqual(min, 0))
{
FatalErrorInFunction
<< "Linear profile not preserved."
@ -307,12 +309,13 @@ int main(int argc, char *argv[])
// Check face field mapping
if (surfaceOne.size())
{
auto limits = gMinMax(surfaceOne.primitiveField());
const scalar max = gMax(surfaceOne.primitiveField());
const scalar min = gMin(surfaceOne.primitiveField());
Info<< "Uniform surface field min = "
<< limits.min() << " max = " << limits.max() << endl;
Info<< "Uniform surface field min = " << min
<< " max = " << max << endl;
if (isNotEqual(limits.min(), 1) || isNotEqual(limits.max(), 1))
if (isNotEqual(max, 1) || isNotEqual(min, 1))
{
FatalErrorInFunction
<< "Uniform surfaceScalarField not preserved."

View File

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

View File

@ -182,11 +182,18 @@ int main(int argc, char *argv[])
const labelListList& transformedSlaves =
globalData.globalPointTransformedBoundaryFaces();
const label nBnd = mesh.nBoundaryFaces();
pointField fc(globalPointBoundaryFacesMap.constructSize());
pointField::subList(fc, mesh.nBoundaryFaces()) =
SubList<point>(fc, nBnd) =
primitivePatch
(
mesh.boundaryMesh().faces(),
SubList<face>
(
mesh.faces(),
nBnd,
mesh.nInternalFaces()
),
mesh.points()
).faceCentres();

View File

@ -344,12 +344,13 @@ int main(int argc, char *argv[])
// Check constant profile
{
auto limits = gMinMax(one);
const scalar max = gMax(one);
const scalar min = gMin(one);
Info<< "Uniform one field min = "
<< limits.min() << " max = " << limits.max() << endl;
Info<< "Uniform one field min = " << min
<< " max = " << max << endl;
if (isNotEqual(limits.min(), 1) || isNotEqual(limits.max(), 1))
if (isNotEqual(min, 1) || isNotEqual(max, 1))
{
FatalErrorInFunction
<< "Uniform volVectorField not preserved."
@ -367,12 +368,13 @@ int main(int argc, char *argv[])
{
const scalarField diff = ccX-mesh.C().component(0);
auto limits = gMinMax(diff);
const scalar max = gMax(diff);
const scalar min = gMin(diff);
Info<< "Linear profile field min = "
<< limits.min() << " max = " << limits.max() << endl;
Info<< "Linear profile field min = " << min
<< " max = " << max << endl;
if (isNotEqual(limits.min(), 0) || isNotEqual(limits.max(), 0))
if (isNotEqual(min, 0) || isNotEqual(max, 0))
{
Info<< "Linear profile not preserved."
<< " Min and max should both be 0.0. min:" << min
@ -387,12 +389,13 @@ int main(int argc, char *argv[])
// Check face field mapping
if (surfaceOne.size())
{
auto limits = gMinMax(surfaceOne.primitiveField());
const scalar max = gMax(surfaceOne.primitiveField());
const scalar min = gMin(surfaceOne.primitiveField());
Info<< "Uniform surface field min = "
<< limits.min() << " max = " << limits.max() << endl;
Info<< "Uniform surface field min = " << min
<< " max = " << max << endl;
if (isNotEqual(limits.min(), 1) || isNotEqual(limits.max(), 1))
if (isNotEqual(min, 1) || isNotEqual(max, 1))
{
FatalErrorInFunction
<< "Uniform surfaceScalarField not preserved."

View File

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

View File

@ -1,2 +0,0 @@
/* EXE_INC = */
/* EXE_LIBS = */

View File

@ -1,252 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2025 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 "argList.H"
#include "IOstreams.H"
// Enable/disable based on header
#ifdef Foam_MemoryPool_H
#define FOAM_HAS_MEMORY_POOL
#else
#undef FOAM_HAS_MEMORY_POOL
#endif
// options
int min_align_size = 5;
int min_pool_size = 10;
bool use_aligned_alloc(true);
bool use_aligned_dealloc(true);
//- True if size exceeds the min-size for using memory alignment
template<class IntType>
inline bool use_alignment(IntType n) noexcept
{
return (n >= min_align_size);
}
//- True if size exceeds the min-size for using the memory pool
template<class IntType>
inline bool use_memory_pool(IntType n) noexcept
{
return (n >= IntType(min_pool_size));
}
//- Default alignment
inline constexpr std::align_val_t default_alignment() noexcept
{
return std::align_val_t(64);
}
//- Allocate from memory pool (if active) or aligned/normal
template<class T, class IntType>
inline T* my_allocate(IntType n)
{
std::cerr<< "my_allocate(" << n << ")\n";
if (use_aligned_alloc && use_alignment(n))
{
#ifdef FOAM_HAS_MEMORY_POOL
if
(
void *pool_ptr
(
// Consider memory pool for large amounts of data
use_memory_pool(n)
? Foam::MemoryPool::try_allocate(sizeof(T)*n)
: nullptr
);
pool_ptr
)
{
// Placement new
return new (pool_ptr) T[n];
}
else
#endif
{
return new (default_alignment()) T[n];
}
}
else
{
// Plain new
return new T[n];
}
}
//- Deallocate from memory pool or normal
template<class T>
inline void my_deallocate(T* ptr)
{
std::cerr<< "my_deallocate() : " << Foam::name(ptr) << '\n';
#ifdef FOAM_HAS_MEMORY_POOL
if
(
ptr && !Foam::MemoryPool::try_deallocate(ptr)
)
#endif
{
// Plain new
delete[] ptr;
}
}
//- Deallocate from memory pool or aligned/normal
template<class T, class IntType>
inline void my_deallocate(T* ptr, IntType n)
{
std::cerr<< "my_deallocate(" << n << ") : " << Foam::name(ptr) << '\n';
if (use_aligned_dealloc && use_alignment(n))
{
if
(
#ifdef FOAM_HAS_MEMORY_POOL
ptr && !Foam::MemoryPool::try_deallocate(ptr)
#else
ptr
#endif
)
{
::operator delete[](ptr, default_alignment());
}
}
else
{
// Plain new
delete[] ptr;
}
}
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
int main(int argc, char *argv[])
{
argList::noCheckProcessorDirectories();
argList::addOption
(
"min-align",
"INT",
"Min number of elements for memory alignment (default: 5)"
);
argList::addOption
(
"min-pool",
"INT",
"Min number of elements for using memory pool (default: 10)"
);
argList::addOption
(
"count",
"INT",
"Number of elements to test (default: 10)"
);
argList::addBoolOption
(
"no-align",
"Disable aligned alloc/dealloc"
);
argList::addBoolOption
(
"no-align-alloc",
"Disable aligned alloc (default: false)"
);
argList::addBoolOption
(
"no-align-dealloc",
"Disable aligned dealloc (default: false)"
);
#include "setRootCase.H"
label count(10);
args.readIfPresent("count", count);
args.readIfPresent("min-align", min_align_size);
args.readIfPresent("min-pool", min_pool_size);
if (min_pool_size < min_align_size)
{
min_pool_size = min_align_size;
}
if (args.found("no-align"))
{
use_aligned_alloc = false;
use_aligned_dealloc = false;
}
else
{
use_aligned_alloc = !args.found("no-align-alloc");
use_aligned_dealloc = !args.found("no-align-dealloc");
}
Info<< "Testing with " << count << " elements" << nl
<< "min-align: " << int(min_align_size) << " elements" << nl
#ifdef FOAM_HAS_MEMORY_POOL
<< "min-pool: " << int(min_pool_size)
<< " elements, active:" << MemoryPool::active() << nl
#endif
<< "alignment: " << int(default_alignment()) << " bytes" << nl
<< nl;
{
using T = double;
label len = count;
UList<T> list(my_allocate<T>(len), len);
Info<< "List ptr: " << Foam::name(list.data()) << nl;
list = 1.234;
Info<< "List: " << list << nl;
my_deallocate(list.data(), len);
list = UList<T>();
my_deallocate(list.data());
my_deallocate(list.data(), len);
}
return 0;
}
// ************************************************************************* //

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2019-2025 OpenCFD Ltd.
Copyright (C) 2019-2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -175,36 +175,6 @@ int main(int argc, char *argv[])
<< nl;
}
{
scalarField field1(10);
scalarField field2(10);
scalarField work;
Random rnd(4567);
for (scalar& val : field1)
{
val = rnd.position(scalar(-0.2), scalar(1.2));
}
for (scalar& val : field2)
{
val = rnd.position(scalar(-0.1), scalar(1.1));
}
Info<< nl
<< "field1: " << flatOutput(field1) << nl
<< "field2: " << flatOutput(field2) << nl;
work = field1;
work.clamp_min(field2);
Info<< "clamp_min: " << flatOutput(work) << nl;
work = field1;
work.clamp_max(field2);
Info<< "clamp_max: " << flatOutput(work) << nl;
}
Info<< nl << "\nDone\n" << endl;
return 0;
}

View File

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

View File

@ -69,7 +69,6 @@ int main(int argc, char *argv[])
argList::addBoolOption("info", "information");
argList::addBoolOption("print-tree", "Report tree(s) as graph");
argList::addBoolOption("no-test", "Disable general tests");
argList::addBoolOption("split", "Test Pstream split-comm");
argList::addBoolOption("host-comm", "Test Pstream host-comm");
argList::addBoolOption("host-broadcast", "Test host-base broadcasts");
@ -86,8 +85,8 @@ int main(int argc, char *argv[])
if (UPstream::parRun() && optPrintTree)
{
// Info<< "comms: "
// << UPstream::whichCommunication(UPstream::worldComm) << nl;
Info<< "comms: "
<< UPstream::whichCommunication(UPstream::worldComm) << nl;
UPstream::printCommTree(UPstream::commWorld());
}
@ -103,34 +102,6 @@ int main(int argc, char *argv[])
<< flatOutput(UPstream::procID(UPstream::commLocalNode())) << nl;
}
if (UPstream::parRun() && args.found("split"))
{
Info<< "split: alternative ranks" << nl;
const auto myRank = UPstream::myProcNo();
int colour =
(
(myRank == 5 || myRank == 6) // Exclude these ones
? -1
: (myRank % 2)
);
UPstream::communicator comm =
UPstream::communicator::split(UPstream::commWorld(), colour, true);
Pout<< "split ranks (colour=" << colour << ") "
<< flatOutput(UPstream::procID(comm.comm())) << nl;
comm.reset();
comm =
UPstream::communicator::split(UPstream::commWorld(), colour, false);
Pout<< "Split ranks (colour=" << colour << ") "
<< flatOutput(UPstream::procID(comm.comm())) << nl;
}
if (args.found("info"))
{
Info<< nl;
@ -164,8 +135,8 @@ int main(int argc, char *argv[])
<< endl;
{
// Info<< "host-master: "
// << UPstream::whichCommunication(commInterNode) << endl;
Info<< "host-master: "
<< UPstream::whichCommunication(commInterNode) << endl;
UPstream::printCommTree(commInterNode);
UPstream::printCommTree(commLocalNode);

View File

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

View File

@ -40,6 +40,11 @@ using namespace Foam;
int main(int argc, char *argv[])
{
Info<< "Compiled with C++ " << __cplusplus;
#if __cplusplus >= 201703L
Info<< " - has std::string_view" << nl << nl;
#else
Info<< " - NO std::string_view" << nl << nl;
#endif
// basics
{
@ -58,7 +63,9 @@ int main(int argc, char *argv[])
<< "input: <" << cstr << '>'
<< " type: " << typeid(cstr).name() << " len:" << len << nl;
#if __cplusplus >= 201703L
Info<< " view: " << std::string_view(cstr) << nl;
#endif
Info<< " span: "
<< stdFoam::span<const char>(cstr, len) << nl;

View File

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

View File

@ -195,7 +195,16 @@ void testSparseData(const polyMesh& mesh, Random& rndGen)
<< "Position test of sparse data only correct for cases without cyclics"
<< " with shared points." << endl;
primitivePatch allBoundary(mesh.boundaryMesh().faces(), mesh.points());
primitivePatch allBoundary
(
SubList<face>
(
mesh.faces(),
mesh.nBoundaryFaces(),
mesh.nInternalFaces()
),
mesh.points()
);
const pointField& localPoints = allBoundary.localPoints();

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2017-2025 OpenCFD Ltd.
Copyright (C) 2017-2024 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -134,51 +134,50 @@ int main(int argc, char *argv[])
Info<< "resized: "
<< ctok1.info() << nl << ctok1 << endl;
// Using isA<> on compoundToken()
if
(
const auto* listptr
= ctok1.compoundToken().isA<scalarList>()
)
{
// sneaky, SubField bypasses const!
scalarField::subField fld(*listptr);
fld *= 5;
// Using isA<> on compoundToken()
const auto* listptr = ctok1.compoundToken().isA<scalarList>();
if (listptr)
{
// sneaky, SubField bypasses const!
scalarField::subField fld(*listptr);
fld *= 5;
Info<< "multiplied List<scalar>: "
<< ctok1.info() << nl << ctok1 << endl;
Info<< "multiplied List<scalar>: "
<< ctok1.info() << nl << ctok1 << endl;
}
}
// Using isCompound<...> - combined check
if
(
const auto* listptr
= ctok1.isCompound<scalarList>()
)
{
scalarField::subField fld(*listptr);
fld /= 2;
// Using isCompound<...> - combined check
Info<< "divided List<scalar>: "
<< ctok1.info() << nl << ctok1 << endl;
const auto* listptr = ctok1.isCompound<scalarList>();
if (listptr)
{
scalarField::subField fld(*listptr);
fld /= 2;
Info<< "divided List<scalar>: "
<< ctok1.info() << nl << ctok1 << endl;
}
}
// Using isCompound<...> - combined check
if
(
const auto* listptr
= ctok1.isCompound<labelList>()
)
{
labelField::subField fld(*listptr);
fld /= 2;
// Using isCompound<...> - combined check
Info<< "divided List<label>: "
<< ctok1.info() << nl << ctok1 << endl;
}
else
{
Info<< "compound is not List<label>" << nl;
const auto* listptr = ctok1.isCompound<labelList>();
if (listptr)
{
labelField::subField fld(*listptr);
fld /= 2;
Info<< "divided List<label>: "
<< ctok1.info() << nl << ctok1 << endl;
}
else
{
Info<< "compound is not List<label>" << nl;
}
}
Info<< "Before fill_zero: " << ctok1 << endl;
@ -249,14 +248,13 @@ int main(int argc, char *argv[])
token tok;
if (auto v = obuf.view(); !v.empty())
{
tok = string(v.data(), v.size());
tok.setType(token::tokenType::CHAR_DATA);
}
else
{
tok = token();
auto v = obuf.view();
if (!v.empty())
{
tok = string(v.data(), v.size());
tok.setType(token::tokenType::CHAR_DATA);
}
}
Info<< "tok: " << tok.name() << nl << nl;
@ -276,14 +274,13 @@ int main(int argc, char *argv[])
obuf.endBlock();
if (auto v = obuf.view(); !v.empty())
{
tok = string(v.data(), v.size());
tok.setType(token::tokenType::CHAR_DATA);
}
else
{
tok = token();
auto v = obuf.view();
if (!v.empty())
{
tok = string(v.data(), v.size());
tok.setType(token::tokenType::CHAR_DATA);
}
}
// Output like xml:
@ -352,11 +349,10 @@ int main(int argc, char *argv[])
{
typedef List<scalar> ListType;
if
(
auto* inputDataPtr
= const_cast<ListType*>(entry0.stream().findCompound<ListType>())
)
auto* inputDataPtr =
const_cast<ListType*>(entry0.stream().findCompound<ListType>());
if (inputDataPtr)
{
Info<< "found input data" << nl;
Info<< entry0 << nl;

View File

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

View File

@ -417,7 +417,14 @@ int main(int argc, char *argv[])
// Get calculating engine for all of outside
primitivePatch allBoundary(mesh.boundaryMesh().faces(), mesh.points());
const SubList<face> outsideFaces
(
mesh.faces(),
mesh.nBoundaryFaces(),
mesh.nInternalFaces()
);
primitivePatch allBoundary(outsideFaces, mesh.points());
// Look up mesh labels and convert to input for boundaryCutter.

View File

@ -145,22 +145,17 @@ int main(int argc, char *argv[])
hexRef8 meshCutter(mesh);
// Some stats
{
auto cellLimits = gMinMax(meshCutter.cellLevel());
auto pointLimits = gMinMax(meshCutter.pointLevel());
Info<< "Read mesh:" << nl
<< " cells:" << mesh.globalData().nTotalCells() << nl
<< " faces:" << mesh.globalData().nTotalFaces() << nl
<< " points:" << mesh.globalData().nTotalPoints() << nl
<< " cellLevel :"
<< " min:" << cellLimits.min()
<< " max:" << cellLimits.max() << nl
<< " pointLevel :"
<< " min:" << pointLimits.min()
<< " max:" << pointLimits.max() << nl
<< endl;
}
Info<< "Read mesh:" << nl
<< " cells:" << mesh.globalData().nTotalCells() << nl
<< " faces:" << mesh.globalData().nTotalFaces() << nl
<< " points:" << mesh.globalData().nTotalPoints() << nl
<< " cellLevel :"
<< " min:" << gMin(meshCutter.cellLevel())
<< " max:" << gMax(meshCutter.cellLevel()) << nl
<< " pointLevel :"
<< " min:" << gMin(meshCutter.pointLevel())
<< " max:" << gMax(meshCutter.pointLevel()) << nl
<< endl;
// Maintain 2:1 ratio

View File

@ -37,6 +37,7 @@ License
const Foam::scalar Foam::edgeStats::edgeTol_ = 1e-3;
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
Foam::direction Foam::edgeStats::getNormalDir
@ -44,25 +45,26 @@ Foam::direction Foam::edgeStats::getNormalDir
const twoDPointCorrector* correct2DPtr
) const
{
direction dir = 3;
if (correct2DPtr)
{
const vector& normal = correct2DPtr->planeNormal();
if (mag(normal.x()) > 1-edgeTol_)
if (mag(normal & vector(1, 0, 0)) > 1-edgeTol_)
{
return vector::X;
dir = 0;
}
else if (mag(normal.y()) > 1-edgeTol_)
else if (mag(normal & vector(0, 1, 0)) > 1-edgeTol_)
{
return vector::Y;
dir = 1;
}
else if (mag(normal.z()) > 1-edgeTol_)
else if (mag(normal & vector(0, 0, 1)) > 1-edgeTol_)
{
return vector::Z;
dir = 2;
}
}
return direction(3);
return dir;
}
@ -93,9 +95,12 @@ Foam::edgeStats::edgeStats(const polyMesh& mesh)
{
Info<< "Correcting for 2D motion" << endl << endl;
twoDPointCorrector correct2D(mesh);
autoPtr<twoDPointCorrector> correct2DPtr
(
new twoDPointCorrector(mesh)
);
normalDir_ = getNormalDir(&correct2D);
normalDir_ = getNormalDir(&correct2DPtr());
}
}
}
@ -117,15 +122,24 @@ Foam::edgeStats::edgeStats
Foam::scalar Foam::edgeStats::minLen(Ostream& os) const
{
label nAny(0);
label nX(0);
label nY(0);
label nZ(0);
label nX = 0;
label nY = 0;
label nZ = 0;
scalarMinMax limitsAny(GREAT, -GREAT);
scalarMinMax limitsX(limitsAny);
scalarMinMax limitsY(limitsAny);
scalarMinMax limitsZ(limitsAny);
scalar minX = GREAT;
scalar maxX = -GREAT;
vector x(1, 0, 0);
scalar minY = GREAT;
scalar maxY = -GREAT;
vector y(0, 1, 0);
scalar minZ = GREAT;
scalar maxZ = -GREAT;
vector z(0, 0, 1);
scalar minOther = GREAT;
scalar maxOther = -GREAT;
const edgeList& edges = mesh_.edges();
@ -137,75 +151,58 @@ Foam::scalar Foam::edgeStats::minLen(Ostream& os) const
eVec /= eMag;
if (mag(eVec.x()) > 1-edgeTol_)
if (mag(eVec & x) > 1-edgeTol_)
{
limitsX.add(eMag);
minX = min(minX, eMag);
maxX = max(maxX, eMag);
nX++;
}
else if (mag(eVec.y()) > 1-edgeTol_)
else if (mag(eVec & y) > 1-edgeTol_)
{
limitsY.add(eMag);
minY = min(minY, eMag);
maxY = max(maxY, eMag);
nY++;
}
else if (mag(eVec.z()) > 1-edgeTol_)
else if (mag(eVec & z) > 1-edgeTol_)
{
limitsZ.add(eMag);
minZ = min(minZ, eMag);
maxZ = max(maxZ, eMag);
nZ++;
}
else
{
limitsAny.add(eMag);
nAny++;
minOther = min(minOther, eMag);
maxOther = max(maxOther, eMag);
}
}
os << "Mesh bounding box:" << boundBox(mesh_.points()) << nl << nl
<< "Mesh edge statistics:" << nl
<< " x aligned : number:" << nX
<< "\tminLen:" << limitsX.min() << "\tmaxLen:" << limitsX.max() << nl
<< " y aligned : number:" << nY
<< "\tminLen:" << limitsY.min() << "\tmaxLen:" << limitsY.max() << nl
<< " z aligned : number:" << nZ
<< "\tminLen:" << limitsZ.min() << "\tmaxLen:" << limitsZ.max() << nl
<< " other : number:" << nAny
<< "\tminLen:" << limitsAny.min()
<< "\tmaxLen:" << limitsAny.max() << nl << endl;
<< " x aligned : number:" << nX << "\tminLen:" << minX
<< "\tmaxLen:" << maxX << nl
<< " y aligned : number:" << nY << "\tminLen:" << minY
<< "\tmaxLen:" << maxY << nl
<< " z aligned : number:" << nZ << "\tminLen:" << minZ
<< "\tmaxLen:" << maxZ << nl
<< " other : number:" << mesh_.nEdges() - nX - nY - nZ
<< "\tminLen:" << minOther
<< "\tmaxLen:" << maxOther << nl << endl;
if (normalDir_ == vector::X)
if (normalDir_ == 0)
{
return Foam::min
(
limitsAny.min(),
Foam::min(limitsY.min(), limitsZ.min())
);
return min(minY, min(minZ, minOther));
}
else if (normalDir_ == vector::Y)
else if (normalDir_ == 1)
{
return Foam::min
(
limitsAny.min(),
Foam::min(limitsX.min(), limitsZ.min())
);
return min(minX, min(minZ, minOther));
}
else if (normalDir_ == vector::Z)
else if (normalDir_ == 2)
{
return Foam::min
(
limitsAny.min(),
Foam::min(limitsX.min(), limitsY.min())
);
return min(minX, min(minY, minOther));
}
else
{
return Foam::min
(
limitsAny.min(),
Foam::min
(
limitsX.min(),
Foam::min(limitsY.min(), limitsZ.min())
)
);
return min(minX, min(minY, min(minZ, minOther)));
}
}

View File

@ -81,25 +81,26 @@ void writeSet(const cellSet& cells, const string& msg)
direction getNormalDir(const twoDPointCorrector* correct2DPtr)
{
direction dir = 3;
if (correct2DPtr)
{
const vector& normal = correct2DPtr->planeNormal();
if (mag(normal.x()) > 1-edgeTol)
if (mag(normal & vector(1, 0, 0)) > 1-edgeTol)
{
return vector::X;
dir = 0;
}
else if (mag(normal.y()) > 1-edgeTol)
else if (mag(normal & vector(0, 1, 0)) > 1-edgeTol)
{
return vector::Y;
dir = 1;
}
else if (mag(normal.z()) > 1-edgeTol)
else if (mag(normal & vector(0, 0, 1)) > 1-edgeTol)
{
return vector::Z;
dir = 2;
}
}
return direction(3);
return dir;
}
@ -108,95 +109,89 @@ direction getNormalDir(const twoDPointCorrector* correct2DPtr)
// directions but exclude component (0=x, 1=y, 2=z, other=none)
scalar getEdgeStats(const primitiveMesh& mesh, const direction excludeCmpt)
{
label nAny(0);
label nX(0);
label nY(0);
label nZ(0);
label nX = 0;
label nY = 0;
label nZ = 0;
scalarMinMax limitsAny(GREAT, -GREAT);
scalarMinMax limitsX(limitsAny);
scalarMinMax limitsY(limitsAny);
scalarMinMax limitsZ(limitsAny);
scalar minX = GREAT;
scalar maxX = -GREAT;
vector x(1, 0, 0);
scalar minY = GREAT;
scalar maxY = -GREAT;
vector y(0, 1, 0);
scalar minZ = GREAT;
scalar maxZ = -GREAT;
vector z(0, 0, 1);
scalar minOther = GREAT;
scalar maxOther = -GREAT;
const edgeList& edges = mesh.edges();
for (const edge& e : edges)
forAll(edges, edgei)
{
const edge& e = edges[edgei];
vector eVec(e.vec(mesh.points()));
scalar eMag = mag(eVec);
eVec /= eMag;
if (mag(eVec.x()) > 1-edgeTol)
if (mag(eVec & x) > 1-edgeTol)
{
limitsX.add(eMag);
minX = Foam::min(minX, eMag);
maxX = Foam::max(maxX, eMag);
nX++;
}
else if (mag(eVec.y()) > 1-edgeTol)
else if (mag(eVec & y) > 1-edgeTol)
{
limitsY.add(eMag);
minY = Foam::min(minY, eMag);
maxY = Foam::max(maxY, eMag);
nY++;
}
else if (mag(eVec.z()) > 1-edgeTol)
else if (mag(eVec & z) > 1-edgeTol)
{
limitsZ.add(eMag);
minZ = Foam::min(minZ, eMag);
maxZ = Foam::max(maxZ, eMag);
nZ++;
}
else
{
limitsAny.add(eMag);
nAny++;
minOther = Foam::min(minOther, eMag);
maxOther = Foam::max(maxOther, eMag);
}
}
Info<< "Mesh bounding box:" << boundBox(mesh.points()) << nl << nl
<< "Mesh edge statistics:" << nl
<< " x aligned : number:" << nX
<< "\tminLen:" << limitsX.min() << "\tmaxLen:" << limitsX.max() << nl
<< " y aligned : number:" << nY
<< "\tminLen:" << limitsY.min() << "\tmaxLen:" << limitsY.max() << nl
<< " z aligned : number:" << nZ
<< "\tminLen:" << limitsZ.min() << "\tmaxLen:" << limitsZ.max() << nl
<< " other : number:" << nAny
<< "\tminLen:" << limitsAny.min()
<< "\tmaxLen:" << limitsAny.max() << nl << endl;
<< " x aligned : number:" << nX << "\tminLen:" << minX
<< "\tmaxLen:" << maxX << nl
<< " y aligned : number:" << nY << "\tminLen:" << minY
<< "\tmaxLen:" << maxY << nl
<< " z aligned : number:" << nZ << "\tminLen:" << minZ
<< "\tmaxLen:" << maxZ << nl
<< " other : number:" << mesh.nEdges() - nX - nY - nZ
<< "\tminLen:" << minOther
<< "\tmaxLen:" << maxOther << nl << endl;
if (excludeCmpt == vector::X)
if (excludeCmpt == 0)
{
return Foam::min
(
limitsAny.min(),
Foam::min(limitsY.min(), limitsZ.min())
);
return Foam::min(minY, Foam::min(minZ, minOther));
}
else if (excludeCmpt == vector::Y)
else if (excludeCmpt == 1)
{
return Foam::min
(
limitsAny.min(),
Foam::min(limitsX.min(), limitsZ.min())
);
return Foam::min(minX, Foam::min(minZ, minOther));
}
else if (excludeCmpt == vector::Z)
else if (excludeCmpt == 2)
{
return Foam::min
(
limitsAny.min(),
Foam::min(limitsX.min(), limitsY.min())
);
return Foam::min(minX, Foam::min(minY, minOther));
}
else
{
return Foam::min
(
limitsAny.min(),
Foam::min
(
limitsX.min(),
Foam::min(limitsY.min(), limitsZ.min())
)
);
return Foam::min(minX, Foam::min(minY, Foam::min(minZ, minOther)));
}
}

View File

@ -1674,9 +1674,10 @@ int main(int argc, char *argv[])
// Add cell zones to patch zone list
forAll(bPatches, pI)
{
for (const label celli : bPatches[pI].faceCells())
const labelList& faceCells = bPatches[pI].faceCells();
forAll(faceCells, fcI)
{
if (zoneCell.test(celli))
if (zoneCell.test(faceCells[fcI]))
{
boundaryZones[pI].append(name);
break;

View File

@ -161,7 +161,8 @@ void Foam::fluentFvMesh::writeFluentMesh() const
{
const faceUList& patchFaces = boundaryMesh()[patchi];
const labelUList& patchFaceCells = boundaryMesh()[patchi].faceCells();
const labelList& patchFaceCells =
boundaryMesh()[patchi].faceCells();
// The face group will be offset by 10 from the patch label

View File

@ -1506,7 +1506,7 @@ int main(int argc, char *argv[])
// Go through all the patchFaces and find corresponding face in pp.
forAll(patchFaces, patchi)
{
const auto& pFaces = patchFaces[patchi];
const DynamicList<face>& pFaces = patchFaces[patchi];
Info<< "Finding faces of patch " << patchi << endl;

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