Compare commits

..

20 Commits

Author SHA1 Message Date
5aadc3a03d CONFIG: bump patch level (240625) 2024-06-26 12:19:02 +02:00
956fb4ca3a BUG: Nastran reading of free format truncates last field (fixes #3189)
- the old logic relied on the presence/absence of a comma to decide
  whether to parse as fixed or free format. This logic is faulty when
  handling the final (trailing) entry and will generally lead to the
  last field being truncated when read in.
  Now the caller decides on fixed vs free.

FIX: inconsistent Nastran surface output format

- use FREE format by default. Previously had an odd mix of SHORT
  format when created without options and LONG format (as default)
  when created with format options.
2024-06-26 12:19:02 +02:00
905d63357c BUG: STL: cannot handle files > 2Gb. Fixes #3171 2024-05-22 13:21:02 +01:00
0177b762c0 BUG: SlicedGeometricField, slices into field instead of shallow copy (#3080)
- regression introduced by e98acdc4fc

  Affected versions: (v2206, v2212, v2306, v2312)
2024-01-19 18:22:37 +01:00
308615e63a COMP: g++11: suppress optimisation. See #3024 2024-01-19 18:20:07 +01:00
2999c15f77 BUG: ThermoSurfaceFilm: reintroduce energy to film sources (fixes #2996) 2023-10-11 11:27:48 +01:00
3d8a1c7f63 BUG: snappyHexMesh: correct oppositeness checking. Fixes #2971 2023-09-07 15:08:39 +01:00
bf14272826 BUG: mapFields: incorrect patches. Fixes #2944. 2023-08-30 16:35:51 +02:00
095c9bc45b BUG: expressions rand() ignores objectRegistry timeIndex (fixes #2923) 2023-06-26 17:53:31 +02:00
20c7f0970d BUG: UPstream::shutdown misbehaves with external initialisation (fixes #2808)
- freeCommmunicatorComponents needs an additional bounds check.
  When MPI is initialized outside of OpenFOAM, there are no
  UPstream communicator equivalents
2023-06-20 09:16:12 +02:00
fd1661ae15 TUT: scalarTransport: avoid excessive number of output directories (fixes #2806) 2023-06-19 09:08:27 +01:00
70874860b9 CONFIG: bump patch level for maintenance-v2212 2023-06-14 14:57:29 +02:00
113fe48d0e ENH: faceAreaWeightAMI - report centre of problenm face. Fixes #2730 2023-05-30 18:00:21 +01:00
d94744e9f7 BUG: parcel injection models - corrected volume calculations. Fixes #2708 2023-05-30 12:07:33 +01:00
dcf005508b BUG: ReversibleReaction::kr - replaced 1e-6 by VSMALL. Fixes #2704 2023-05-30 11:53:47 +01:00
868d6dd778 BUG: VTK write pointSet fails in parallel (fixes #2773)
- de-referenced autoPtr with () instead of ref() will fail on
  non-master ranks.
2023-05-05 15:17:31 +02:00
f8e05934f1 BUG: incorrect dictionary contruction of alphatPhaseChange mDotL 2023-04-03 17:35:07 +02:00
ed89d97627 BUG: LES: enable sigma model for compressible flows (fixes #2727) 2023-03-24 08:23:51 +00:00
5614a571f2 COMP: code adjustments for gcc-13 (#2714) 2023-02-28 11:49:58 +01:00
4136b686ba BUG: infinite template recursion in boundaryData readField 2023-02-28 10:02:15 +01:00
1674 changed files with 21439 additions and 27890 deletions

View File

@ -1,2 +1,2 @@
api=2301
patch=230110
api=2212
patch=240625

View File

@ -1,4 +1,125 @@
#include "../createFields.H"
Info<< "Reading velocity field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
// Initialise the velocity internal field to zero
U = dimensionedVector(U.dimensions(), Zero);
surfaceScalarField phi
(
IOobject
(
"phi",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
fvc::flux(U)
);
if (args.found("initialiseUBCs"))
{
U.correctBoundaryConditions();
phi = fvc::flux(U);
}
// Construct a pressure field
// If it is available read it otherwise construct from the velocity BCs
// converting fixed-value BCs to zero-gradient and vice versa.
// Allow override from command-line -pName option
const word pName = args.getOrDefault<word>("pName", "p");
// Infer the pressure BCs from the velocity
wordList pBCTypes
(
U.boundaryField().size(),
fixedValueFvPatchScalarField::typeName
);
forAll(U.boundaryField(), patchi)
{
if (U.boundaryField()[patchi].fixesValue())
{
pBCTypes[patchi] = zeroGradientFvPatchScalarField::typeName;
}
}
// Note that registerObject is false for the pressure field. The pressure
// field in this solver doesn't have a physical value during the solution.
// It shouldn't be looked up and used by sub models or boundary conditions.
Info<< "Constructing pressure field " << pName << nl << endl;
volScalarField p
(
IOobject
(
pName,
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE,
false
),
mesh,
dimensionedScalar(sqr(dimVelocity), Zero),
pBCTypes
);
// Infer the velocity potential BCs from the pressure
wordList PhiBCTypes
(
p.boundaryField().size(),
zeroGradientFvPatchScalarField::typeName
);
forAll(p.boundaryField(), patchi)
{
if (p.boundaryField()[patchi].fixesValue())
{
PhiBCTypes[patchi] = fixedValueFvPatchScalarField::typeName;
}
}
Info<< "Constructing velocity potential field Phi\n" << endl;
volScalarField Phi
(
IOobject
(
"Phi",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE
),
mesh,
dimensionedScalar(dimLength*dimVelocity, Zero),
PhiBCTypes
);
label PhiRefCell = 0;
scalar PhiRefValue = 0;
setRefCell
(
Phi,
potentialFlow.dict(),
PhiRefCell,
PhiRefValue
);
mesh.setFluxRequired(Phi.name());
#include "createMRF.H"
// Add solver-specific interpolations
{

View File

@ -83,7 +83,6 @@ Description
\heading Options
\plaintable
-writep | write the Euler pressure
-writephi | Write the final volumetric flux
-writePhi | Write the final velocity potential
-initialiseUBCs | Update the velocity boundaries before solving for Phi
\endplaintable
@ -118,12 +117,6 @@ int main(int argc, char *argv[])
"Initialise U boundary conditions"
);
argList::addBoolOption
(
"writephi",
"Write the final volumetric flux field"
);
argList::addBoolOption
(
"writePhi",
@ -142,8 +135,6 @@ int main(int argc, char *argv[])
"Execute functionObjects"
);
#include "addRegionOption.H"
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createNamedDynamicFvMesh.H"
@ -203,16 +194,11 @@ int main(int argc, char *argv[])
<< endl;
}
// Write U
// Write U and phi
U.write();
phi.write();
// Optionally write the volumetric flux, phi
if (args.found("writephi"))
{
phi.write();
}
// Optionally write velocity potential, Phi
// Optionally write Phi
if (args.found("writePhi"))
{
Phi.write();

View File

@ -171,7 +171,10 @@ if (ign.ignited())
fvOptions.correct(Su);
Su.clamp_range(SuMin, SuMax);
// Limit the maximum Su
// ~~~~~~~~~~~~~~~~~~~~
Su.min(SuMax);
Su.max(SuMin);
}
else
{
@ -215,7 +218,7 @@ if (ign.ignited())
+ (
scalar(1)
+ (2*XiShapeCoef)
*(scalar(0.5) - clamp(b, zero_one{}))
*(scalar(0.5) - min(max(b, scalar(0)), scalar(1)))
)*(XiEqStar - scalar(1.001))
);

View File

@ -39,13 +39,13 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi);
Yi.clamp_min(0);
Yi.max(0.0);
Yt += Yi;
}
}
Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0);
Y[inertIndex].max(0.0);
radiation->correct();

View File

@ -38,11 +38,11 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi);
Yi.clamp_min(0);
Yi.max(0.0);
Yt += Yi;
}
}
Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0);
Y[inertIndex].max(0.0);
}

View File

@ -165,10 +165,14 @@ void Foam::smoluchowskiJumpTFvPatchScalarField::updateCoeffs()
return;
}
const auto& pmu = patch().lookupPatchField<volScalarField>(muName_);
const auto& prho = patch().lookupPatchField<volScalarField>(rhoName_);
const auto& ppsi = patch().lookupPatchField<volScalarField>(psiName_);
const auto& pU = patch().lookupPatchField<volVectorField>(UName_);
const fvPatchScalarField& pmu =
patch().lookupPatchField<volScalarField, scalar>(muName_);
const fvPatchScalarField& prho =
patch().lookupPatchField<volScalarField, scalar>(rhoName_);
const fvPatchField<scalar>& ppsi =
patch().lookupPatchField<volScalarField, scalar>(psiName_);
const fvPatchVectorField& pU =
patch().lookupPatchField<volVectorField, vector>(UName_);
// Prandtl number reading consistent with rhoCentralFoam
const dictionary& thermophysicalProperties =
@ -203,7 +207,7 @@ void Foam::smoluchowskiJumpTFvPatchScalarField::updateCoeffs()
// Write
void Foam::smoluchowskiJumpTFvPatchScalarField::write(Ostream& os) const
{
fvPatchField<scalar>::write(os);
fvPatchScalarField::write(os);
os.writeEntryIfDifferent<word>("U", "U", UName_);
os.writeEntryIfDifferent<word>("rho", "rho", rhoName_);
@ -213,7 +217,7 @@ void Foam::smoluchowskiJumpTFvPatchScalarField::write(Ostream& os) const
os.writeEntry("accommodationCoeff", accommodationCoeff_);
Twall_.writeEntry("Twall", os);
os.writeEntry("gamma", gamma_);
fvPatchField<scalar>::writeValueEntry(os);
writeEntry("value", os);
}

View File

@ -155,9 +155,12 @@ void Foam::maxwellSlipUFvPatchVectorField::updateCoeffs()
return;
}
const auto& pmu = patch().lookupPatchField<volScalarField>(muName_);
const auto& prho = patch().lookupPatchField<volScalarField>(rhoName_);
const auto& ppsi = patch().lookupPatchField<volScalarField>(psiName_);
const fvPatchScalarField& pmu =
patch().lookupPatchField<volScalarField, scalar>(muName_);
const fvPatchScalarField& prho =
patch().lookupPatchField<volScalarField, scalar>(rhoName_);
const fvPatchField<scalar>& ppsi =
patch().lookupPatchField<volScalarField, scalar>(psiName_);
Field<scalar> C1
(
@ -184,8 +187,8 @@ void Foam::maxwellSlipUFvPatchVectorField::updateCoeffs()
if (curvature_)
{
const auto& ptauMC =
patch().lookupPatchField<volTensorField>(tauMCName_);
const fvPatchTensorField& ptauMC =
patch().lookupPatchField<volTensorField, tensor>(tauMCName_);
vectorField n(patch().nf());
refValue() -= C1/prho*transform(I - n*n, (n & ptauMC));
@ -197,7 +200,7 @@ void Foam::maxwellSlipUFvPatchVectorField::updateCoeffs()
void Foam::maxwellSlipUFvPatchVectorField::write(Ostream& os) const
{
fvPatchField<vector>::write(os);
fvPatchVectorField::write(os);
os.writeEntryIfDifferent<word>("T", "T", TName_);
os.writeEntryIfDifferent<word>("rho", "rho", rhoName_);
os.writeEntryIfDifferent<word>("psi", "thermo:psi", psiName_);
@ -212,7 +215,7 @@ void Foam::maxwellSlipUFvPatchVectorField::write(Ostream& os) const
refValue().writeEntry("refValue", os);
valueFraction().writeEntry("valueFraction", os);
fvPatchField<vector>::writeValueEntry(os);
writeEntry("value", os);
}

View File

@ -104,8 +104,11 @@ void Foam::fixedRhoFvPatchScalarField::updateCoeffs()
return;
}
const auto& psip = patch().lookupPatchField<volScalarField>(psiName_);
const auto& pp = patch().lookupPatchField<volScalarField>(pName_);
const fvPatchField<scalar>& psip =
patch().lookupPatchField<volScalarField, scalar>(psiName_);
const fvPatchField<scalar>& pp =
patch().lookupPatchField<volScalarField, scalar>(pName_);
operator==(psip*pp);
@ -115,10 +118,11 @@ void Foam::fixedRhoFvPatchScalarField::updateCoeffs()
void Foam::fixedRhoFvPatchScalarField::write(Ostream& os) const
{
fvPatchField<scalar>::write(os);
fvPatchScalarField::write(os);
os.writeEntryIfDifferent<word>("p", "p", pName_);
os.writeEntryIfDifferent<word>("psi", "thermo:psi", psiName_);
fvPatchField<scalar>::writeValueEntry(os);
writeEntry("value", os);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -88,29 +88,26 @@ kappa
case mtLookup:
{
if (mesh.foundObject<volScalarField>(kappaName_))
{
const auto* ptr =
mesh.cfindObject<volScalarField>(kappaName_);
if (ptr)
{
return patch().patchField(*ptr);
}
return patch().lookupPatchField<volScalarField, scalar>
(
kappaName_
);
}
else if (mesh.foundObject<volSymmTensorField>(kappaName_))
{
const auto* ptr =
mesh.cfindObject<volSymmTensorField>(kappaName_);
const symmTensorField& KWall =
patch().lookupPatchField<volSymmTensorField, scalar>
(
kappaName_
);
if (ptr)
{
const symmTensorField& KWall = patch().patchField(*ptr);
const vectorField n(patch().nf());
const vectorField n(patch().nf());
return n & KWall & n;
}
return n & KWall & n;
}
else
{
FatalErrorInFunction
<< "Did not find field " << kappaName_
@ -120,6 +117,9 @@ kappa
<< " or volSymmTensorField."
<< exit(FatalError);
}
break;
}
@ -131,8 +131,10 @@ kappa
mesh.lookupObject<phaseSystem>("phaseProperties")
);
auto tkappaEff = tmp<scalarField>::New(patch().size(), Zero);
auto& kappaEff = tkappaEff.ref();
tmp<scalarField> kappaEff
(
new scalarField(patch().size(), 0.0)
);
forAll(fluid.phases(), phasei)
{
@ -140,10 +142,10 @@ kappa
const fvPatchScalarField& alpha = phase.boundaryField()[patchi];
kappaEff += alpha*phase.kappaEff(patchi)();
kappaEff.ref() += alpha*phase.kappaEff(patchi)();
}
return tkappaEff;
return kappaEff;
break;
}
@ -159,11 +161,9 @@ kappa
}
}
// Return zero-sized (not nullptr)
return tmp<scalarField>::New();
return scalarField(0);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -308,11 +308,12 @@ updateCoeffs()
scalarField& Tp = *this;
const auto& nbrField =
refCast
<
const turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField
>(nbrPatch.lookupPatchField<volScalarField>(TnbrName_));
const turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField&
nbrField = refCast
<const turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField>
(
nbrPatch.lookupPatchField<volScalarField, scalar>(TnbrName_)
);
// Swap to obtain full local values of neighbour internal field
scalarField TcNbr(nbrField.patchInternalField());
@ -329,13 +330,13 @@ updateCoeffs()
scalarField qr(Tp.size(), 0.0);
if (qrName_ != "none")
{
qr = patch().lookupPatchField<volScalarField>(qrName_);
qr = patch().lookupPatchField<volScalarField, scalar>(qrName_);
}
scalarField qrNbr(Tp.size(), 0.0);
if (qrNbrName_ != "none")
{
qrNbr = nbrPatch.lookupPatchField<volScalarField>(qrNbrName_);
qrNbr = nbrPatch.lookupPatchField<volScalarField, scalar>(qrNbrName_);
mpp.distribute(qrNbr);
}
@ -485,7 +486,7 @@ void turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField::write
Ostream& os
) const
{
mixedFvPatchField<scalar>::write(os);
mixedFvPatchScalarField::write(os);
os.writeEntry("kappaMethod", KMethodTypeNames_[method_]);
os.writeEntryIfDifferent<word>("kappa","none", kappaName_);

View File

@ -48,7 +48,7 @@ if (Y.size())
fvOptions.correct(Yi);
Yi.clamp_min(0);
Yi.max(0.0);
Yt += Yi;
}
}
@ -56,6 +56,6 @@ if (Y.size())
if (Y.size())
{
Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0);
Y[inertIndex].max(0.0);
}
}

View File

@ -89,10 +89,17 @@ void Foam::adjointOutletPressureFvPatchScalarField::updateCoeffs()
return;
}
const auto& phip = patch().lookupPatchField<surfaceScalarField>("phi");
const auto& phiap = patch().lookupPatchField<surfaceScalarField>("phia");
const auto& Up = patch().lookupPatchField<volVectorField>("U");
const auto& Uap = patch().lookupPatchField<volVectorField>("Ua");
const fvsPatchField<scalar>& phip =
patch().lookupPatchField<surfaceScalarField, scalar>("phi");
const fvsPatchField<scalar>& phiap =
patch().lookupPatchField<surfaceScalarField, scalar>("phia");
const fvPatchField<vector>& Up =
patch().lookupPatchField<volVectorField, vector>("U");
const fvPatchField<vector>& Uap =
patch().lookupPatchField<volVectorField, vector>("Ua");
operator==((phiap/patch().magSf() - 1.0)*phip/patch().magSf() + (Up & Uap));
@ -102,8 +109,8 @@ void Foam::adjointOutletPressureFvPatchScalarField::updateCoeffs()
void Foam::adjointOutletPressureFvPatchScalarField::write(Ostream& os) const
{
fvPatchField<scalar>::write(os);
fvPatchField<scalar>::writeValueEntry(os);
fvPatchScalarField::write(os);
writeEntry("value", os);
}

View File

@ -90,8 +90,11 @@ void Foam::adjointOutletVelocityFvPatchVectorField::updateCoeffs()
return;
}
const auto& phiap = patch().lookupPatchField<surfaceScalarField>("phia");
const auto& Up = patch().lookupPatchField<volVectorField>("U");
const fvsPatchField<scalar>& phiap =
patch().lookupPatchField<surfaceScalarField, scalar>("phia");
const fvPatchField<vector>& Up =
patch().lookupPatchField<volVectorField, vector>("U");
scalarField Un(mag(patch().nf() & Up));
vectorField UtHat((Up - patch().nf()*Un)/(Un + SMALL));
@ -107,8 +110,8 @@ void Foam::adjointOutletVelocityFvPatchVectorField::updateCoeffs()
void Foam::adjointOutletVelocityFvPatchVectorField::write(Ostream& os) const
{
fvPatchField<vector>::write(os);
fvPatchField<vector>::writeValueEntry(os);
fvPatchVectorField::write(os);
writeEntry("value", os);
}

View File

@ -94,7 +94,7 @@ if (mesh.changing())
{
if (refCells[zoneId] != -1)
{
validCells.push_back(refCells[zoneId]);
validCells.append(refCells[zoneId]);
}
}

View File

@ -40,11 +40,11 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi);
Yi.clamp_min(0);
Yi.max(0.0);
Yt += Yi;
}
}
Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0);
Y[inertIndex].max(0.0);
}

View File

@ -41,11 +41,11 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi);
Yi.clamp_min(0);
Yi.max(0.0);
Yt += Yi;
}
}
Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0);
Y[inertIndex].max(0.0);
}

View File

@ -38,11 +38,11 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi);
Yi.clamp_min(0);
Yi.max(0.0);
Yt += Yi;
}
}
Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0);
Y[inertIndex].max(0.0);
}

View File

@ -38,11 +38,11 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi);
Yi.clamp_min(0);
Yi.max(0.0);
Yt += Yi;
}
}
Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0);
Y[inertIndex].max(0.0);
}

View File

@ -39,11 +39,11 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.correct(Yi);
Yi.clamp_min(0);
Yi.max(0.0);
Yt += Yi;
}
}
Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0);
Y[inertIndex].max(0.0);
}

View File

@ -1,5 +1,14 @@
{
alphav = clamp((rho - rholSat)/(rhovSat - rholSat), zero_one{});
alphav =
max
(
min
(
(rho - rholSat)/(rhovSat - rholSat),
scalar(1)
),
scalar(0)
);
alphal = 1.0 - alphav;
Info<< "max-min alphav: " << max(alphav).value()

View File

@ -126,9 +126,9 @@ alphaContactAngleFvPatchScalarField::alphaContactAngleFvPatchScalarField
void alphaContactAngleFvPatchScalarField::write(Ostream& os) const
{
fvPatchField<scalar>::write(os);
fvPatchScalarField::write(os);
os.writeEntry("thetaProperties", thetaProps_);
fvPatchField<scalar>::writeValueEntry(os);
writeEntry("value", os);
}

View File

@ -779,7 +779,7 @@ Foam::multiphaseMixtureThermo::surfaceTensionForce() const
auto sigma = sigmas_.cfind(interfacePair(alpha1, alpha2));
if (!sigma.good())
if (!sigma.found())
{
FatalErrorInFunction
<< "Cannot find interface " << interfacePair(alpha1, alpha2)
@ -907,7 +907,7 @@ void Foam::multiphaseMixtureThermo::correctContactAngle
const auto tp =
acap.thetaProps().cfind(interfacePair(alpha1, alpha2));
if (!tp.good())
if (!tp.found())
{
FatalErrorInFunction
<< "Cannot find interface " << interfacePair(alpha1, alpha2)

View File

@ -99,6 +99,17 @@ Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::mDotAlphal() const
Foam::Pair<Foam::tmp<Foam::volScalarField>>
Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::mDot() const
{
volScalarField limitedAlpha1
(
min(max(mixture_.alpha1(), scalar(0)), scalar(1))
);
volScalarField limitedAlpha2
(
min(max(mixture_.alpha2(), scalar(0)), scalar(1))
);
const volScalarField& T = mesh_.lookupObject<volScalarField>("T");
const twoPhaseMixtureEThermo& thermo =
@ -113,15 +124,11 @@ Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::mDot() const
volScalarField mDotE
(
"mDotE",
coeffE_*mixture_.rho1()*clamp(mixture_.alpha1(), zero_one{})
* max(T - TSat, T0)
"mDotE", coeffE_*mixture_.rho1()*limitedAlpha1*max(T - TSat, T0)
);
volScalarField mDotC
(
"mDotC",
coeffC_*mixture_.rho2()*clamp(mixture_.alpha2(), zero_one{})
* max(TSat - T, T0)
"mDotC", coeffC_*mixture_.rho2()*limitedAlpha2*max(TSat - T, T0)
);
if (mesh_.time().outputTime())
@ -141,6 +148,16 @@ Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::mDot() const
Foam::Pair<Foam::tmp<Foam::volScalarField>>
Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::mDotDeltaT() const
{
volScalarField limitedAlpha1
(
min(max(mixture_.alpha1(), scalar(0)), scalar(1))
);
volScalarField limitedAlpha2
(
min(max(mixture_.alpha2(), scalar(0)), scalar(1))
);
const volScalarField& T = mesh_.lookupObject<volScalarField>("T");
const twoPhaseMixtureEThermo& thermo =
@ -153,14 +170,8 @@ Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::mDotDeltaT() const
return Pair<tmp<volScalarField>>
(
(
coeffC_*mixture_.rho2()*clamp(mixture_.alpha2(), zero_one{})
* pos(TSat - T)
),
(
coeffE_*mixture_.rho1()*clamp(mixture_.alpha1(), zero_one{})
* pos(T - TSat)
)
coeffC_*mixture_.rho2()*limitedAlpha2*pos(TSat - T),
coeffE_*mixture_.rho1()*limitedAlpha1*pos(T - TSat)
);
}
@ -190,17 +201,25 @@ Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::TSource() const
const dimensionedScalar& TSat = thermo.TSat();
const dimensionedScalar L = mixture_.Hf2() - mixture_.Hf1();
dimensionedScalar L = mixture_.Hf2() - mixture_.Hf1();
volScalarField limitedAlpha1
(
min(max(mixture_.alpha1(), scalar(0)), scalar(1))
);
volScalarField limitedAlpha2
(
min(max(mixture_.alpha2(), scalar(0)), scalar(1))
);
const volScalarField Vcoeff
(
coeffE_*mixture_.rho1()*clamp(mixture_.alpha1(), zero_one{})
* L*pos(T - TSat)
coeffE_*mixture_.rho1()*limitedAlpha1*L*pos(T - TSat)
);
const volScalarField Ccoeff
(
coeffC_*mixture_.rho2()*clamp(mixture_.alpha2(), zero_one{})
* L*pos(TSat - T)
coeffC_*mixture_.rho2()*limitedAlpha2*L*pos(TSat - T)
);
TSource =

View File

@ -167,10 +167,20 @@ Foam::Pair<Foam::tmp<Foam::volScalarField>>
Foam::temperaturePhaseChangeTwoPhaseMixtures::interfaceHeatResistance::
mDotAlphal() const
{
volScalarField limitedAlpha1
(
min(max(mixture_.alpha1(), scalar(0)), scalar(1))
);
volScalarField limitedAlpha2
(
min(max(mixture_.alpha2(), scalar(0)), scalar(1))
);
return Pair<tmp<volScalarField>>
(
(mDotc_/clamp(mixture_.alpha2(), scalarMinMax(SMALL, 1))),
-(mDote_/clamp(mixture_.alpha1(), scalarMinMax(SMALL, 1)))
(mDotc_/(limitedAlpha2 + SMALL)),
-(mDote_/(limitedAlpha1 + SMALL))
);
}

View File

@ -155,7 +155,7 @@ Foam::tmp<Foam::volScalarField> Foam::twoPhaseMixtureEThermo::Cp() const
{
const volScalarField limitedAlpha1
(
clamp(alpha1_, zero_one{})
min(max(alpha1_, scalar(0)), scalar(1))
);
return tmp<volScalarField>
@ -176,11 +176,13 @@ Foam::tmp<Foam::scalarField> Foam::twoPhaseMixtureEThermo::Cp
const label patchi
) const
{
const scalarField alpha1p
const volScalarField limitedAlpha1
(
clamp(alpha1_.boundaryField()[patchi], zero_one{})
min(max(alpha1_, scalar(0)), scalar(1))
);
const scalarField& alpha1p = limitedAlpha1.boundaryField()[patchi];
return
(
alpha1p*Cp1().value() + (scalar(1) - alpha1p)*Cp2().value()
@ -192,7 +194,7 @@ Foam::tmp<Foam::volScalarField> Foam::twoPhaseMixtureEThermo::rho() const
{
const volScalarField limitedAlpha1
(
clamp(alpha1_, zero_one{})
min(max(alpha1_, scalar(0)), scalar(1))
);
return tmp<volScalarField>
@ -212,11 +214,13 @@ Foam::tmp<Foam::scalarField> Foam::twoPhaseMixtureEThermo::rho
const label patchi
) const
{
const scalarField alpha1p
const volScalarField limitedAlpha1
(
clamp(alpha1_.boundaryField()[patchi], zero_one{})
min(max(alpha1_, scalar(0)), scalar(1))
);
const scalarField& alpha1p = limitedAlpha1.boundaryField()[patchi];
return
(
alpha1p*rho1().value() + (scalar(1) - alpha1p)*rho2().value()
@ -228,7 +232,7 @@ Foam::tmp<Foam::volScalarField> Foam::twoPhaseMixtureEThermo::Cv() const
{
const volScalarField limitedAlpha1
(
clamp(alpha1_, zero_one{})
min(max(alpha1_, scalar(0)), scalar(1))
);
return tmp<volScalarField>
@ -249,11 +253,13 @@ Foam::tmp<Foam::scalarField> Foam::twoPhaseMixtureEThermo::Cv
const label patchi
) const
{
const scalarField alpha1p
const volScalarField limitedAlpha1
(
clamp(alpha1_.boundaryField()[patchi], zero_one{})
min(max(alpha1_, scalar(0)), scalar(1))
);
const scalarField& alpha1p = limitedAlpha1.boundaryField()[patchi];
return
(
alpha1p*Cv1().value() + (scalar(1) - alpha1p)*Cv2().value()
@ -333,7 +339,7 @@ Foam::tmp<Foam::volScalarField> Foam::twoPhaseMixtureEThermo::kappa() const
{
const volScalarField limitedAlpha1
(
clamp(alpha1_, zero_one{})
min(max(alpha1_, scalar(0)), scalar(1))
);
return tmp<volScalarField>
@ -352,11 +358,13 @@ Foam::tmp<Foam::scalarField> Foam::twoPhaseMixtureEThermo::kappa
const label patchi
) const
{
const scalarField alpha1p
const volScalarField limitedAlpha1
(
clamp(alpha1_.boundaryField()[patchi], zero_one{})
min(max(alpha1_, scalar(0)), scalar(1))
);
const scalarField& alpha1p = limitedAlpha1.boundaryField()[patchi];
return (alpha1p*kappa1().value() + (1 - alpha1p)*kappa2().value());
}
@ -394,11 +402,13 @@ Foam::tmp<Foam::scalarField> Foam::twoPhaseMixtureEThermo::kappaEff
const label patchi
) const
{
const scalarField alpha1p
const volScalarField limitedAlpha1
(
clamp(alpha1_.boundaryField()[patchi], zero_one{})
min(max(alpha1_, scalar(0)), scalar(1))
);
const scalarField& alpha1p = limitedAlpha1.boundaryField()[patchi];
return
(alpha1p*kappa1().value() + (1 - alpha1p)*kappa2().value()) + kappat;
@ -425,11 +435,13 @@ Foam::tmp<Foam::scalarField> Foam::twoPhaseMixtureEThermo::alphaEff
const label patchi
) const
{
const scalarField alpha1p
const volScalarField limitedAlpha1
(
clamp(alpha1_.boundaryField()[patchi], zero_one{})
min(max(alpha1_, scalar(0)), scalar(1))
);
const scalarField& alpha1p = limitedAlpha1.boundaryField()[patchi];
const scalarField rho
(
alpha1p*rho1().value() + (1.0 - alpha1p)*rho2().value()

View File

@ -103,7 +103,7 @@
{
if (refCells[zoneId] != -1)
{
validCells.push_back(refCells[zoneId]);
validCells.append(refCells[zoneId]);
}
}

View File

@ -70,7 +70,7 @@ Foam::Pair<Foam::tmp<Foam::volScalarField>>
Foam::phaseChangeTwoPhaseMixtures::Kunz::mDotAlphal() const
{
const volScalarField& p = alpha1_.db().lookupObject<volScalarField>("p");
volScalarField limitedAlpha1(clamp(alpha1_, zero_one{}));
volScalarField limitedAlpha1(min(max(alpha1_, scalar(0)), scalar(1)));
return Pair<tmp<volScalarField>>
(
@ -85,7 +85,7 @@ Foam::Pair<Foam::tmp<Foam::volScalarField>>
Foam::phaseChangeTwoPhaseMixtures::Kunz::mDotP() const
{
const volScalarField& p = alpha1_.db().lookupObject<volScalarField>("p");
volScalarField limitedAlpha1(clamp(alpha1_, zero_one{}));
volScalarField limitedAlpha1(min(max(alpha1_, scalar(0)), scalar(1)));
return Pair<tmp<volScalarField>>
(

View File

@ -82,7 +82,7 @@ Foam::Pair<Foam::tmp<Foam::volScalarField>>
Foam::phaseChangeTwoPhaseMixtures::Merkle::mDotP() const
{
const volScalarField& p = alpha1_.db().lookupObject<volScalarField>("p");
volScalarField limitedAlpha1(clamp(alpha1_, zero_one{}));
volScalarField limitedAlpha1(min(max(alpha1_, scalar(0)), scalar(1)));
return Pair<tmp<volScalarField>>
(

View File

@ -99,7 +99,7 @@ Foam::phaseChangeTwoPhaseMixtures::SchnerrSauer::pCoeff
const volScalarField& p
) const
{
volScalarField limitedAlpha1(clamp(alpha1_, zero_one{}));
volScalarField limitedAlpha1(min(max(alpha1_, scalar(0)), scalar(1)));
volScalarField rho
(
limitedAlpha1*rho1() + (scalar(1) - limitedAlpha1)*rho2()
@ -117,7 +117,7 @@ Foam::phaseChangeTwoPhaseMixtures::SchnerrSauer::mDotAlphal() const
const volScalarField& p = alpha1_.db().lookupObject<volScalarField>("p");
volScalarField pCoeff(this->pCoeff(p));
volScalarField limitedAlpha1(clamp(alpha1_, zero_one{}));
volScalarField limitedAlpha1(min(max(alpha1_, scalar(0)), scalar(1)));
return Pair<tmp<volScalarField>>
(
@ -134,7 +134,7 @@ Foam::phaseChangeTwoPhaseMixtures::SchnerrSauer::mDotP() const
const volScalarField& p = alpha1_.db().lookupObject<volScalarField>("p");
volScalarField pCoeff(this->pCoeff(p));
volScalarField limitedAlpha1(clamp(alpha1_, zero_one{}));
volScalarField limitedAlpha1(min(max(alpha1_, scalar(0)), scalar(1)));
volScalarField apCoeff(limitedAlpha1*pCoeff);
return Pair<tmp<volScalarField>>

View File

@ -37,7 +37,7 @@ surfaceScalarField phi
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar(dimVelocity*dimArea, Zero)
dimensionedScalar(dimArea*dimVelocity, Zero)
);
multiphaseSystem fluid(U, phi);

View File

@ -53,7 +53,7 @@
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar(dimVelocity*dimArea, Zero)
dimensionedScalar(dimArea*dimVelocity, Zero)
);
volScalarField rho("rho", fluid.rho());

View File

@ -126,9 +126,9 @@ alphaContactAngleFvPatchScalarField::alphaContactAngleFvPatchScalarField
void alphaContactAngleFvPatchScalarField::write(Ostream& os) const
{
fvPatchField<scalar>::write(os);
fvPatchScalarField::write(os);
os.writeEntry("thetaProperties", thetaProps_);
fvPatchField<scalar>::writeValueEntry(os);
writeEntry("value", os);
}

View File

@ -287,7 +287,7 @@ Foam::multiphaseMixture::surfaceTensionForce() const
auto sigma = sigmas_.cfind(interfacePair(alpha1, alpha2));
if (!sigma.good())
if (!sigma.found())
{
FatalErrorInFunction
<< "Cannot find interface " << interfacePair(alpha1, alpha2)
@ -463,7 +463,7 @@ void Foam::multiphaseMixture::correctBoundaryContactAngle
const auto tp = acap.thetaProps().cfind(interfacePair(alpha1, alpha2));
if (!tp.good())
if (!tp.found())
{
FatalErrorInFunction
<< "Cannot find interface " << interfacePair(alpha1, alpha2)

View File

@ -180,7 +180,7 @@ while (pimple.correct())
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar(dimVelocity*dimArea, Zero)
dimensionedScalar("phiHbyA", dimArea*dimVelocity, 0)
);
forAll(phases, phasei)

View File

@ -165,7 +165,7 @@ while (pimple.correct())
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar(dimVelocity*dimArea, Zero)
dimensionedScalar("phiHbyA", dimArea*dimVelocity, 0)
);
forAll(phases, phasei)

View File

@ -152,9 +152,14 @@ void tractionDisplacementFvPatchVectorField::updateCoeffs()
db().lookupObject<IOdictionary>("thermalProperties");
const auto& rho = patch().lookupPatchField<volScalarField>("rho");
const auto& rhoE = patch().lookupPatchField<volScalarField>("E");
const auto& nu = patch().lookupPatchField<volScalarField>("nu");
const fvPatchField<scalar>& rho =
patch().lookupPatchField<volScalarField, scalar>("rho");
const fvPatchField<scalar>& rhoE =
patch().lookupPatchField<volScalarField, scalar>("E");
const fvPatchField<scalar>& nu =
patch().lookupPatchField<volScalarField, scalar>("nu");
scalarField E(rhoE/rho);
scalarField mu(E/(2.0*(1.0 + nu)));
@ -171,7 +176,8 @@ void tractionDisplacementFvPatchVectorField::updateCoeffs()
vectorField n(patch().nf());
const auto& sigmaD = patch().lookupPatchField<volSymmTensorField>("sigmaD");
const fvPatchField<symmTensor>& sigmaD =
patch().lookupPatchField<volSymmTensorField, symmTensor>("sigmaD");
gradient() =
(
@ -181,10 +187,11 @@ void tractionDisplacementFvPatchVectorField::updateCoeffs()
if (thermalProperties.get<bool>("thermalStress"))
{
const auto& threeKalpha =
patch().lookupPatchField<volScalarField>("threeKalpha");
const fvPatchField<scalar>& threeKalpha=
patch().lookupPatchField<volScalarField, scalar>("threeKalpha");
const auto& T = patch().lookupPatchField<volScalarField>("T");
const fvPatchField<scalar>& T =
patch().lookupPatchField<volScalarField, scalar>("T");
gradient() += n*threeKalpha*T/twoMuLambda;
}
@ -195,10 +202,10 @@ void tractionDisplacementFvPatchVectorField::updateCoeffs()
void tractionDisplacementFvPatchVectorField::write(Ostream& os) const
{
fvPatchField<vector>::write(os);
fvPatchVectorField::write(os);
traction_.writeEntry("traction", os);
pressure_.writeEntry("pressure", os);
fvPatchField<vector>::writeValueEntry(os);
writeEntry("value", os);
}

View File

@ -152,9 +152,14 @@ void tractionDisplacementCorrectionFvPatchVectorField::updateCoeffs()
"mechanicalProperties"
);
const auto& rho = patch().lookupPatchField<volScalarField>("rho");
const auto& rhoE = patch().lookupPatchField<volScalarField>("E");
const auto& nu = patch().lookupPatchField<volScalarField>("nu");
const fvPatchField<scalar>& rho =
patch().lookupPatchField<volScalarField, scalar>("rho");
const fvPatchField<scalar>& rhoE =
patch().lookupPatchField<volScalarField, scalar>("E");
const fvPatchField<scalar>& nu =
patch().lookupPatchField<volScalarField, scalar>("nu");
scalarField E(rhoE/rho);
scalarField mu(E/(2.0*(1.0 + nu)));
@ -167,8 +172,11 @@ void tractionDisplacementCorrectionFvPatchVectorField::updateCoeffs()
vectorField n(patch().nf());
const auto& sigmaD = patch().lookupPatchField<volSymmTensorField>("sigmaD");
const auto& sigmaExp = patch().lookupPatchField<volTensorField>("sigmaExp");
const fvPatchField<symmTensor>& sigmaD =
patch().lookupPatchField<volSymmTensorField, symmTensor>("sigmaD");
const fvPatchField<tensor>& sigmaExp =
patch().lookupPatchField<volTensorField, tensor>("sigmaExp");
gradient() =
(
@ -182,10 +190,10 @@ void tractionDisplacementCorrectionFvPatchVectorField::updateCoeffs()
// Write
void tractionDisplacementCorrectionFvPatchVectorField::write(Ostream& os) const
{
fvPatchField<vector>::write(os);
fvPatchVectorField::write(os);
traction_.writeEntry("traction", os);
pressure_.writeEntry("pressure", os);
fvPatchField<vector>::writeValueEntry(os);
writeEntry("value", os);
}

View File

@ -6,7 +6,6 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -53,29 +52,28 @@ int main(int argc, char *argv[])
Info << "testField:" << testField << endl;
testField.emplace_back(0.5, 4.8, 6.2);
testField.append(vector(0.5, 4.8, 6.2));
Info << "testField after appending:" << testField << endl;
testField.emplace_back(2.7, 2.3, 6.1);
testField.append(vector(2.7, 2.3, 6.1));
Info << "testField after appending:" << testField << endl;
vector elem = testField.back();
testField.pop_back();
vector elem = testField.remove();
Info << "removed element:" << elem << endl;
Info << "testField:" << testField << endl;
testField.emplace_back(3.0, 1.3, 9.2);
testField.append(vector(3.0, 1.3, 9.2));
Info << "testField:" << testField << endl;
testField.resize(10, vector(1.5, 0.6, -1.0));
testField.setSize(10, vector(1.5, 0.6, -1.0));
Info << "testField after setSize:" << testField << endl;
testField.push_back(testField2);
testField.append(testField2);
Info << "testField after appending testField2:" << testField << endl;
@ -89,7 +87,7 @@ int main(int argc, char *argv[])
testField.clear();
testField.emplace_back(3.0, 1.3, 9.2);
testField.append(vector(3.0, 1.3, 9.2));
Info << "testField after clear and append:" << testField << endl;

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2017-2023 OpenCFD Ltd.
Copyright (C) 2017-2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -140,7 +140,7 @@ int main(int argc, char *argv[])
{
0, 1, 2, 3, 4
};
dlA.push_back({ 5, 6 });
dlA.append({ 5, 6 });
dlA = { 1, 2, 4 };
DynamicList<label> dlB;
@ -172,7 +172,7 @@ int main(int argc, char *argv[])
// Copy back and append a few time
for (label i=0; i < 3; i++)
{
dlB.push_back(lstA);
dlB.append(lstA);
}
Info<< "appended list a few times" << endl;
@ -186,7 +186,7 @@ int main(int argc, char *argv[])
// Copy back and append a few time
for (label i=0; i < 3; i++)
{
dlB.push_back(lstA);
dlB.append(lstA);
}
@ -220,8 +220,8 @@ int main(int argc, char *argv[])
for (label elemI=0; elemI < 5; ++elemI)
{
dlE1.push_back(4 - elemI);
dlE2.push_back(elemI);
dlE1.append(4 - elemI);
dlE2.append(elemI);
}
printInfo("dlE2", dlE2, true);
@ -243,12 +243,9 @@ int main(int argc, char *argv[])
{
DynamicList<label> addr(10);
addr.emplace_back(3);
addr.emplace_back(1);
addr.emplace_back(2);
// Can also use the return value
Info<< "adding " << addr.emplace_back(4) << endl;
addr.append(3);
addr.append(1);
addr.append(2);
forAll(dlE2, i)
{
@ -300,9 +297,9 @@ int main(int argc, char *argv[])
Info<< "test move-append with "
<< flatOutput(input1) << " and " << flatOutput(input2) << endl;
list2.push_back(std::move(list1));
list2.push_back(std::move(input1));
list2.push_back(std::move(input2));
list2.append(std::move(list1));
list2.append(std::move(input1));
list2.append(std::move(input2));
Info<< "result: " << flatOutput(list2) << nl
<< "inputs: " << flatOutput(list1) << " / "

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2019-2023 OpenCFD Ltd.
Copyright (C) 2019-2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -309,45 +309,32 @@ int main(int argc, char *argv[])
if (Pstream::parRun())
{
// Fixed buffer would also work, but want to test using UList
List<labelPair> buffer;
const label startOfRequests = UPstream::nRequests();
if (Pstream::master())
{
buffer.resize(UPstream::nProcs());
buffer[0] = labelPair(0, UPstream::myProcNo());
for (const int proci : Pstream::subProcs())
{
UIPstream::read
(
UPstream::commsTypes::nonBlocking,
proci,
buffer.slice(proci, 1)
);
IPstream fromSlave(Pstream::commsTypes::blocking, proci);
FixedList<label, 2> list3(fromSlave);
Serr<< "Receiving from " << proci
<< " : " << list3 << endl;
}
}
else
{
buffer.resize(1);
buffer[0] = labelPair(0, UPstream::myProcNo());
Perr<< "Sending to master" << endl;
Perr<< "Sending to master: " << buffer << endl;
UOPstream::write
OPstream toMaster
(
UPstream::commsTypes::nonBlocking,
UPstream::masterNo(),
buffer.slice(0, 1) // OK
/// buffer // Also OK
Pstream::commsTypes::blocking,
Pstream::masterNo()
);
FixedList<label, 2> list3;
list3[0] = 0;
list3[1] = Pstream::myProcNo();
toMaster << list3;
}
UPstream::waitRequests(startOfRequests);
Info<< "Gathered: " << buffer << endl;
}
return 0;

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2020-2023 OpenCFD Ltd.
Copyright (C) 2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -109,11 +109,7 @@ int main(int argc, char *argv[])
{
#include "setConstantRunTimeDictionaryIO.H"
#if (OPENFOAM > 2212)
dictionary propsDict(IOdictionary::readContents(dictIO));
#else
dictionary propsDict(static_cast<dictionary&&>(IOdictionary(dictIO)));
#endif
IOdictionary propsDict(dictIO);
const scalarField xvals(propsDict.lookup("x"));
@ -136,7 +132,7 @@ int main(int argc, char *argv[])
{
if (nameFilter(f))
{
functionNames.push_back(f);
functionNames.append(f);
}
}
}
@ -144,7 +140,7 @@ int main(int argc, char *argv[])
{
for (label argi=1; argi < args.size(); ++argi)
{
functionNames.push_back(args[argi]);
functionNames.append(args[argi]);
}
}

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation
Copyright (C) 2018-2023 OpenCFD Ltd.
Copyright (C) 2018-2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -25,11 +25,11 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
Some simple HashSet tests
\*---------------------------------------------------------------------------*/
#include "hashedWordList.H"
#include "nil.H"
#include "HashOps.H"
#include "HashSet.H"
#include "Map.H"
@ -73,22 +73,6 @@ void printMinMax(const HashSet<Key, Hash>& set)
}
template<class Key, class Hash>
void printHashSet(const HashSet<Key, Hash>& table)
{
Info<< table.size() << '(' << nl;
for (const auto& key : table.sortedToc())
{
const auto iter = table.find(key);
Info<< " " << key << " : " << Foam::name(&(iter.key())) << nl;
}
Info<< ')' << nl;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
@ -100,33 +84,33 @@ int main(int argc, char *argv[])
<< typeid(HashSet<label>::hasher).name() << nl << nl;
hashedWordList words
({
{
"abc",
"def",
"ghi"
});
};
words = { "def", "ghi", "xy", "all", "end", "all" };
wordHashSet setA
({
{
"xx",
"yy",
"zz"
});
};
setA = { "kjhk", "kjhk2", "abced" };
HashTable<label> tableA
({
{
{ "value1", 1 },
{ "value2", 2 },
{ "value3", 3 }
});
};
HashTable<Foam::zero> tableB;
tableB.emplace("value4");
tableB.emplace("value5");
tableB.emplace("value6");
HashTable<nil> tableB;
tableB.insert("value4", nil());
tableB.insert("value5", nil());
tableB.insert("value6", nil());
Info<< "tableA keys: "; tableA.writeKeys(Info) << endl;
@ -139,11 +123,11 @@ int main(int argc, char *argv[])
}
Map<label> mapA
({
{
{ 1, 1 },
{ 2, 2 },
{ 3, 3 }
});
};
mapA.set(4, 4);
Info<< "hashedWordList: " << words << nl
@ -185,7 +169,7 @@ int main(int argc, char *argv[])
Info<< wordHashSet(setA) << endl;
Info<< "create from HashTable<T>: ";
Info<< wordHashSet(tableA) << endl;
Info<< "create from HashTable<zero>: ";
Info<< "create from HashTable<nil>: ";
Info<< wordHashSet(tableB) << endl;
Info<< "create from Map<label>: ";
@ -201,9 +185,9 @@ int main(int argc, char *argv[])
}
labelHashSet setB
({
{
1, 11, 42
});
};
Info<<"Set with min/max:" << minMax(setB)
<< " min:" << min(setB) << " max:" << max(setB) << nl;
@ -325,26 +309,6 @@ int main(int argc, char *argv[])
Info<< "setA1: " << setA1 << nl
<< "setB1: " << setB1 << nl;
// Merging
{
wordHashSet set0({ "abc", "kjhk", "kjhk2" });
wordHashSet set1({ "abc", "def", "ghi", "jkl" });
Info<< nl
<< "Set0" << nl;
printHashSet(set0);
Info<< "Set1" << nl;
printHashSet(set1);
set1.merge(set0);
Info<< "merged 0" << nl;
printHashSet(set0);
Info<< "merged 1" << nl;
printHashSet(set1);
}
return 0;
}

View File

@ -79,56 +79,26 @@ public:
};
template<class T, class Key, class Hash>
void printTable(const HashPtrTable<T, Key, Hash>& table)
{
Info<< table.size() << '(' << nl;
for (const auto& key : table.sortedToc())
{
const auto iter = table.find(key);
Info
<< " " << iter.key() << " (" << Foam::name(&(iter.key()))
<< ") : ";
if (iter.val())
{
Info<< *(iter.val());
}
else
{
Info<< "nullptr";
}
Info<< " (" << Foam::name(iter.val()) << ")" << nl;;
}
Info<< ')' << nl;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
int main(int argc, char *argv[])
{
HashTable<Label, Foam::string> table0
({
{"abc", 123},
HashTable<label, Foam::string> table1
{
{"kjhk", 10},
{"kjhk2", 12}
});
};
Info<< "table0: " << table0 << nl
<< "toc: " << flatOutput(table0.toc()) << nl;
Info<< "table1: " << table1 << nl
<< "toc: " << flatOutput(table1.toc()) << nl;
HashTable<label, label, Hash<label>> table2
({
{
{3, 10},
{5, 12},
{7, 16}
});
};
Info<< "table2: " << table2 << nl
<< "toc: " << flatOutput(table2.toc()) << nl;
@ -157,7 +127,7 @@ int main(int argc, char *argv[])
table1.insert("ghi", 15);
table1.insert("jkl", 20);
Info<< nl << "Table toc: " << flatOutput(table1.sortedToc()) << nl;
Info<< nl << "Table toc: " << flatOutput(table1.toc()) << nl;
for (const word k : { "abc" })
{
@ -183,30 +153,16 @@ int main(int argc, char *argv[])
;
}
}
Info<< nl
<< "Table0: " << flatOutput(table0.sortedToc()) << nl
<< "Table1: " << flatOutput(table1.sortedToc()) << nl;
table1.merge(table0);
Info<< "merged 0: " << flatOutput(table0.sortedToc()) << nl
<< "merged 1: " << flatOutput(table1.sortedToc()) << nl;
}
{
HashPtrTable<Label> ptable0(0);
ptable0.emplace("abc", 123),
ptable0.emplace("kjhk", 10);
ptable0.emplace("kjhk2", 12);
HashPtrTable<Label> ptable1(0);
ptable1.insert("abc", autoPtr<Label>::New(5));
ptable1.emplace("def", 10);
ptable1.emplace("ghi", 15);
ptable1.emplace("jkl", 20);
ptable1.insert("def", autoPtr<Label>::New(10));
ptable1.insert("ghi", autoPtr<Label>::New(15));
ptable1.insert("jkl", autoPtr<Label>::New(20));
Info<< nl << "PtrTable toc: " << flatOutput(ptable1.sortedToc()) << nl;
Info<< nl << "PtrTable toc: " << flatOutput(ptable1.toc()) << nl;
for (const word k : { "abc" })
{
@ -286,20 +242,6 @@ int main(int argc, char *argv[])
}
}
Info<< nl
<< "Table0" << nl;
printTable(ptable0);
Info<< "Table1" << nl;
printTable(ptable1);
ptable1.merge(ptable0);
Info<< "merged 0" << nl;
printTable(ptable0);
Info<< "merged 1" << nl;
printTable(ptable1);
Info<< nl << "Ending scope" << nl;
}
@ -335,28 +277,6 @@ int main(int argc, char *argv[])
Info<< "got with " << (*iter).size() << nl;
}
Info<< nl
<< "Test (DIY) insert_or_assign" << nl;
label nKeys = 0;
for (const auto& key : { "abc", "foo", "mno", "xyz" })
{
Info<< key;
if (ltable1.contains(key))
{
Info<< " : " << ltable1[key];
}
else
{
Info<< " : n/a";
}
/// ltable1.insert_or_assign(key, identity(++nKeys));
ltable1(key) = identity(++nKeys);
Info<< " --> " << ltable1[key] << nl;
}
}
Info<< "\nEnd\n" << endl;

View File

@ -334,7 +334,7 @@ int main(int argc, char *argv[])
Info<< "==target==" << nl; reportDetail(objects);
Info<< "==source==" << nl; reportDetail(other);
objects.merge(other);
objects.merge(std::move(other));
Info<< nl << "After merge" << nl;
Info<< "==target==" << nl; reportDetail(objects);

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2017-2023 OpenCFD Ltd.
Copyright (C) 2017-2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -81,7 +81,7 @@ namespace ListPolicy
{
// Override on a per-type basis
template<> struct short_length<short> : std::integral_constant<int,20> {};
template<> struct short_length<short> : std::integral_constant<short,20> {};
} // End namespace ListPolicy
} // End namespace Detail
@ -365,12 +365,6 @@ int main(int argc, char *argv[])
Info<<"assigned identity in range:" << subset
<< "=> " << flatOutput(longLabelList) << nl;
// Assign values in iterator range
std::iota(longLabelList.begin(15), longLabelList.begin(50), 115);
Info<<"assigned values in iterator range "
<< "=> " << flatOutput(longLabelList) << nl;
labelList someList(identity(24));
longLabelList.slice(subset) =
@ -416,20 +410,8 @@ int main(int argc, char *argv[])
longLabelList.slice({5,-5}) = 42;
longLabelList.slice({21,100}) = 42;
#if 0
// Compiles, but is runtime abort!
const bool oldThrowingError = FatalError.throwing(true);
try
{
longLabelList.slice(labelRange(20,50)) = constLabelList;
}
catch (const Foam::error& err)
{
Info<< "Caught FatalError "
<< err << nl << endl;
}
FatalError.throwing(oldThrowingError);
#endif
//Good: does not compile
longLabelList.slice(labelRange(20,50)) = constLabelList;
//Good: does not compile
// longLabelList[labelRange(20,50)] = fixedLabelList;

View File

@ -155,7 +155,7 @@ int main(int argc, char *argv[])
<< IndirectList<label>::subset_if(test6, evenNonZero) << nl
<< endl;
test6.push_back(identity(13, 12));
test6.append(identity(13, 12));
Info<< "Randomized: " << flatOutput(test6) << endl;
inplaceUniqueSort(test6);

View File

@ -191,7 +191,7 @@ int main(int argc, char *argv[])
Info<< nl << "list: " << flatOutput(list) << nl << endl;
list.pop_back();
list.remove();
Info<<"remove = " << flatOutput(list) << nl;
{

View File

@ -52,13 +52,13 @@ int main(int argc, char *argv[])
// Same, but with non-const access
// Map<bool>::iterator map1Iter = map1.find(5);
if (!map1Iter.good())
if (!map1Iter.found()) // same as (map1Iter == map1.end())
{
Info<< "not found" << endl;
}
else
{
Info<< "5 is " << map1Iter.val() << endl;
Info<< "5 is " << *map1Iter << endl;
}
// Repeat with std::map

View File

@ -6,7 +6,6 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -72,9 +71,16 @@ int main(int argc, char *argv[])
label edgeI = 0;
Info<< "Starting walk on edge " << edgeI << endl;
initialEdges.push_back(edgeI);
initialEdges.append(edgeI);
const edge& e = patch.edges()[edgeI];
initialEdgesInfo.emplace_back(e.centre(patch.localPoints()), 0);
initialEdgesInfo.append
(
patchEdgeFaceInfo
(
e.centre(patch.localPoints()),
0.0
)
);
}

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation
Copyright (C) 2018-2023 OpenCFD Ltd.
Copyright (C) 2018-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -268,7 +268,10 @@ Ostream& report
int main(int argc, char *argv[])
{
#if 0
PtrList<Scalar> list1(10);
PtrList<Scalar> list2(15);
PtrList<Scalar> listApp;
{
DLPtrList<Scalar> llist1;
llist1.push_front(new Scalar(100));
@ -298,10 +301,8 @@ int main(int argc, char *argv[])
<< "for-: " << it << endl;
}
}
#endif
// Same but as SLPtrList
#if 0
{
SLPtrList<Scalar> llist1;
llist1.push_front(new Scalar(100));
@ -317,27 +318,24 @@ int main(int argc, char *argv[])
PtrList<Scalar> list1b(llist1);
Info<< list1b << endl;
}
#endif
PtrList<Scalar> list1(10);
forAll(list1, i)
{
list1.set(i, new Scalar(1.3*i));
}
PtrList<Scalar> list2(15);
Info<< "Emplace set " << list2.size() << " values" << nl;
forAll(list2, i)
{
list2.emplace(i, (10 + 1.3*i));
}
PtrList<Scalar> listApp;
for (label i = 0; i < 5; ++i)
{
listApp.emplace_back(1.3*i);
listApp.append(new Scalar(1.3*i));
}
listApp.emplace_back(100);
Info<< nl
<< "list1: " << list1 << nl
@ -355,7 +353,7 @@ int main(int argc, char *argv[])
if (old)
{
ptrs.push_back(old.release());
ptrs.append(old.release());
}
}
@ -379,24 +377,6 @@ int main(int argc, char *argv[])
list1.set(i, nullptr);
}
{
Info<< "range-for of list (" << list1.count() << '/'
<< list1.size() << ") non-null entries" << nl
<< "(" << nl;
for (const auto& item : list1)
{
Info<< " " << item << nl;
}
Info<< ")" << nl;
}
{
Info<< "iterate on non-null:" << endl;
forAllConstIters(list1, iter)
{
Info<< " " << iter.key() << " : " << iter.val() << nl;
}
}
Info<< "release some items:" << endl;
for (label i = -2; i < 5; i++)
@ -479,8 +459,8 @@ int main(int argc, char *argv[])
printAddr(Info, dynlist1b);
printAddr(Info, dynlist1c);
dynlist1d.push_back(std::move(dynlist1b));
dynlist1d.push_back(std::move(dynlist1c));
dynlist1d.append(std::move(dynlist1b));
dynlist1d.append(std::move(dynlist1c));
Info<< "result:" << nl;
print(Info, dynlist1d);
@ -497,8 +477,8 @@ int main(int argc, char *argv[])
printAddr(Info, list1b);
printAddr(Info, list1c);
list1d.push_back(std::move(list1b));
list1d.push_back(std::move(list1c));
list1d.append(std::move(list1b));
list1d.append(std::move(list1c));
Info<< "result:" << nl;
print(Info, list1d);
@ -543,7 +523,7 @@ int main(int argc, char *argv[])
printAddr(Info, ulist1);
Info<< nl;
ulist1c.push_back(std::move(ulist1b));
ulist1c.append(std::move(ulist1b));
Info<< "UPtrList append/append:";
printAddr(Info, ulist1c);
@ -584,7 +564,6 @@ int main(int argc, char *argv[])
<< "ulist2: " << ulist2 << nl;
// Test iterator random access
#if (OPENFOAM <= 2212)
{
auto iter1 = ulist1.begin();
auto iter2 = iter1 + 3;
@ -599,7 +578,6 @@ int main(int argc, char *argv[])
Info<< "*" << (*iter1).value() << nl;
Info<< "()" << iter1().value() << nl;
}
#endif
PtrList<plane> planes;
planes.emplace_back(vector::one, vector::one);
@ -618,14 +596,12 @@ int main(int argc, char *argv[])
{
dynPlanes.emplace_back(vector::one, vector::one);
dynPlanes.emplace_back(vector(1,2,3), vector::one);
dynPlanes.push_back(nullptr);
dynPlanes.append(nullptr);
dynPlanes.set(6, new plane(vector(2,2,1), vector::one));
dynPlanes.set(10, new plane(vector(4,5,6), vector::one));
Info<< "emplaced :"
<< dynPlanes.emplace(12, vector(3,2,1), vector::one) << endl;
dynPlanes.emplace(12, vector(3,2,1), vector::one);
dynPlanes.emplace_back(Zero, vector::one);
}
@ -643,10 +619,10 @@ int main(int argc, char *argv[])
Info<< "now append again" << endl;
{
dynPlanes.emplace_back(vector::one, vector::one);
dynPlanes.emplace_back(vector(1,2,3), vector::one);
dynPlanes.append(new plane(vector::one, vector::one));
dynPlanes.append(new plane(vector(1,2,3), vector::one));
dynPlanes.emplace(5, vector(2,2,1), vector::one);
dynPlanes.set(5, new plane(vector(2,2,1), vector::one));
}
report(Info, dynPlanes, true);
@ -682,12 +658,12 @@ int main(int argc, char *argv[])
{
PtrDynList<plane> dynPlanes2;
dynPlanes2.emplace_back(vector::one, vector::one);
dynPlanes2.emplace_back(vector(1,2,3), vector::one);
dynPlanes2.push_back(nullptr);
dynPlanes2.append(new plane(vector::one, vector::one));
dynPlanes2.append(new plane(vector(1,2,3), vector::one));
dynPlanes2.append(nullptr);
dynPlanes2.emplace(6, vector(2,2,1), vector::one);
dynPlanes2.emplace(10, Zero, vector::one);
dynPlanes2.set(6, new plane(vector(2,2,1), vector::one));
dynPlanes2.set(10, new plane(Zero, vector::one));
labelList order;
sortedOrder(dynPlanes2, order);
@ -725,7 +701,7 @@ int main(int argc, char *argv[])
Info<< "Append" << endl;
report(Info, dynPlanes2, false);
dynPlanes.push_back(std::move(dynPlanes2));
dynPlanes.append(std::move(dynPlanes2));
Info<< "Result" << endl;
report(Info, dynPlanes, false);

View File

@ -6,7 +6,6 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -131,7 +130,7 @@ int main(int argc, char *argv[])
flatList = labelUIndList(completeList, addresses);
Info<< "List assign from UIndirectList: " << flatOutput(flatList) << nl;
flatList.push_back(labelUIndList(completeList, addresses));
flatList.append(labelUIndList(completeList, addresses));
Info<< "List::append(UIndirectList): " << flatOutput(flatList) << nl;
@ -139,7 +138,7 @@ int main(int argc, char *argv[])
Info<< "DynamicList construct from UIndirectList: " << flatOutput(dynList)
<< nl;
flatList.push_back(labelUIndList(completeList, addresses));
dynList.append(labelUIndList(completeList, addresses));
Info<< "DynamicList::append(UIndirectList): " << flatOutput(dynList) << nl;
Info<< "\nEnd\n" << endl;

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2019-2023 OpenCFD Ltd.
Copyright (C) 2019-2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -59,24 +59,9 @@ int main(int argc, char *argv[])
<< "complexVector::one : " << complexVector::one << nl
<< nl;
{
const complex a(0, 1);
const complex b(20, 100);
Info<< "lerp of " << a << " : " << b << nl;
for (const double t : { 0.0, 0.5, 1.0, -0.5, 1.5 })
{
Info<< " " << t << " = " << lerp(a, b, t) << nl;
}
}
for (complex c : { complex{1, 0}, complex{1, 2}} )
{
Info<< nl << "complex : " << c
<< " mag = " << c.magnitude()
<< " norm = " << c.magSqr()
<< nl;
Info<< nl << "complex : " << c << nl;
Info<< "sin: " << sin(c) << nl
<< "pow(3.0f): " << pow(c, 3.0f) << nl
@ -145,8 +130,6 @@ int main(int argc, char *argv[])
complexField cmplx(4);
zip(cmplx, reals, zero{});
zip(cmplx, 1, imags);
zip(cmplx, reals, imags);
Info<< nl
<< "zip " << reals << nl
@ -362,24 +345,6 @@ int main(int argc, char *argv[])
// MinMax fails since there is no less comparison operator
// Info<< "min/max = " << MinMax<complex>(fld1) << nl;
// Cross-product
{
const vector vec(1, 2, 3);
const vector realValue(4, 5, 6);
const vector imagValue(7, 8, 9);
complexVector cmplxVec(zip(realValue, imagValue));
Info<< "complexVector: " << cmplxVec << nl;
Info<< "cross: " << (vec ^ cmplxVec) << nl;
Info<< "cross real: " << (vec ^ realValue) << nl
<< "cross imag: " << (vec ^ imagValue) << nl
<< "cross : "
<< zip((vec ^ realValue), (vec ^ imagValue)) << nl;
}
Info<< "\nEnd\n" << endl;
return 0;

View File

@ -28,6 +28,7 @@ Description
\*---------------------------------------------------------------------------*/
#include "string.H"
#include "macros.H"
#include "IOstreams.H"
#include "List.H"

View File

@ -84,10 +84,10 @@ int main(int argc, char *argv[])
DynamicList<string> dynlst;
dynlst.reserve(16);
dynlst.push_back("string1 with content");
dynlst.push_back("string2 other content");
dynlst.push_back("string3 more");
dynlst.push_back("string4 done");
dynlst.append("string1 with content");
dynlst.append("string2 other content");
dynlst.append("string3 more");
dynlst.append("string4 done");
{
CStringList inC(dynlst);
@ -133,7 +133,7 @@ int main(int argc, char *argv[])
dynlst.clear();
for (int i=0; i<argc; ++i)
{
dynlst.push_back(argv[i]);
dynlst.append(argv[i]);
}
Info<< "input: " << dynlst << endl;

View File

@ -29,7 +29,7 @@ Description
\*---------------------------------------------------------------------------*/
#include "word.H"
#include "string.H"
#include "IOstreams.H"
using namespace Foam;

View File

@ -1,39 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2306 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object dictionary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Test evaluation with small values
dp #eval{ sqrt(3./2.) *1e-3};
a #eval{ 2/sqrt(2.)*$dp };
A_square #eval{ $a*$a };
A_inlet #eval{ $A_square-2*degToRad(180)*$dp*$dp*0.25 };
Q $A_inlet;
Qerror #eval{$A_inlet};
e #eval{0.2526944494428081};
Uin #eval{ $Q/($A_square*$e) };
// Bypass
alt_dp #eval{ sqrt(3./2.) *1e-3};
alt_a #eval{ 2/sqrt(2.)*$[alt_dp] };
alt_A_square #eval{ $[alt_a]*$[alt_a] };
alt_A_inlet #eval{ $[alt_A_square]-2*degToRad(180)*$[alt_dp]*$[alt_dp]*0.25 };
alt_Q $alt_A_inlet;
alt_Qerror #eval{ $[alt_A_inlet] };
alt_e #eval{0.2526944494428081};
alt_Uin #eval{ $[alt_Q]/($[alt_A_square]*$[alt_e]) };
// ************************************************************************* //

View File

@ -110,7 +110,8 @@ unsigned checkDimensions
try
{
min(a, b);
// min(a, b);
clip(a, b);
dimsOk = true;
}
catch (const Foam::error& err)

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2013 OpenFOAM Foundation
Copyright (C) 2018-2023 OpenCFD Ltd.
Copyright (C) 2018-2019 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -28,7 +28,8 @@ License
#include "dictionary.H"
#include "primitiveEntry.H"
#include "dimensionedTypes.H"
#include "dimensionedScalar.H"
#include "dimensionedTensor.H"
using namespace Foam;
@ -101,18 +102,6 @@ int main(int argc, char *argv[])
}
}
{
dimensionedLabel a("min", dimTime, -10);
dimensionedLabel b("max", dimTime, 100);
scalar t = 0.5;
Info<< "lerp of" << nl
<< " " << a << nl
<< " " << b << nl
<< " = " << lerp(a, b, t) << nl
<< " vs " << ((1-t)*a + t*b) << nl
<< nl;
}
Pout<< "zero scalar (time): " << dimensionedScalar(dimTime) << endl;
Pout<< "zero vector: " << dimensionedVector(dimLength) << endl;

View File

@ -6,7 +6,6 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2012 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -68,14 +67,14 @@ int main(int argc, char *argv[])
{
scalar factor = pI/scalar(size);
pointList.push_back(0.99*point::uniform(factor));
pointFieldList[pI] = 0.99*point::uniform(factor);
pointList.append(0.99*point(factor, factor, factor));
pointFieldList[pI] = 0.99*point(factor, factor, factor);
}
for (label i=0; i<5; ++i)
{
pointList.emplace_back(0.95, 0.95, 0.95);
pointFieldList.emplace_back(0.95, 0.95, 0.95);
pointList.append(point(0.95, 0.95,0.95));
pointFieldList.append(point(0.95, 0.95,0.95));
}
Info<< "Time to construct lists of points: "
@ -149,7 +148,7 @@ int main(int argc, char *argv[])
// Test point insertion
label index = pointList.size();
pointList.push_back(p);
pointList.append(p);
Info<< nl << "Inserting point " << p << " with index " << index << endl;
@ -160,7 +159,7 @@ int main(int argc, char *argv[])
<< tree.findNearest(p, 0.4) << endl;
index = pointList.size();
pointList.push_back(p);
pointList.append(p);
Info<< "Inserting same point " << p << " with index " << index << endl;

View File

@ -85,8 +85,8 @@ int main(int argc, char *argv[])
}
else
{
libPtrs_.push_back(ptr);
libNames_.push_back(libName);
libPtrs_.append(ptr);
libNames_.append(libName);
if (verbose)
{

View File

@ -48,6 +48,12 @@ using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
bool notEqual(const scalar s1, const scalar s2, const scalar tol)
{
return mag(s1-s2) > tol;
}
// Main program:
int main(int argc, char *argv[])
@ -148,8 +154,6 @@ int main(int argc, char *argv[])
// Face removal engine. No checking for not merging boundary faces.
removeFaces faceRemover(mesh, GREAT);
// Comparison for inequality
const auto isNotEqual = notEqualOp<scalar>(1e-10);
while (runTime.loop())
{
@ -250,6 +254,7 @@ int main(int argc, char *argv[])
}
}
// Check constant profile
{
const scalar max = gMax(one);
@ -258,7 +263,7 @@ int main(int argc, char *argv[])
Info<< "Uniform one field min = " << min
<< " max = " << max << endl;
if (isNotEqual(max, 1) || isNotEqual(min, 1))
if (notEqual(max, 1.0, 1e-10) || notEqual(min, 1.0, 1e-10))
{
FatalErrorInFunction
<< "Uniform volVectorField not preserved."
@ -282,7 +287,7 @@ int main(int argc, char *argv[])
Info<< "Linear profile field min = " << min
<< " max = " << max << endl;
if (isNotEqual(max, 0) || isNotEqual(min, 0))
if (notEqual(max, 0.0, 1e-10) || notEqual(min, 0.0, 1e-10))
{
FatalErrorInFunction
<< "Linear profile not preserved."
@ -305,7 +310,7 @@ int main(int argc, char *argv[])
Info<< "Uniform surface field min = " << min
<< " max = " << max << endl;
if (isNotEqual(max, 1) || isNotEqual(min, 1))
if (notEqual(max, 1.0, 1e-10) || notEqual(min, 1.0, 1e-10))
{
FatalErrorInFunction
<< "Uniform surfaceScalarField not preserved."

View File

@ -35,18 +35,15 @@ Description
#include "vector2D.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
typedef GeometricField<vector2D, fvPatchField, volMesh> volVector2DField;
typedef fvPatchField<vector2D> fvPatchVector2DField;
defineTemplateTypeNameAndDebug(volVector2DField::Internal, 0);
defineTemplateTypeNameAndDebug(volVector2DField, 0);
defineTemplateRunTimeSelectionTable(fvPatchVector2DField, patch);
defineTemplateRunTimeSelectionTable(fvPatchVector2DField, patchMapper);
defineTemplateRunTimeSelectionTable(fvPatchVector2DField, dictionary);
typedef fvPatchField<vector2D> fvPatchVector2DField;
makeFvPatchField(fvPatchVector2DField)
}

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2021-2023 OpenCFD Ltd.
Copyright (C) 2021-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -181,7 +181,7 @@ int main(int argc, char *argv[])
DynamicList<label> globalIDs;
for (label i = 0; i < 100; i++)
{
globalIDs.push_back(rndGen.position(label(0), nTotalCells-1));
globalIDs.append(rndGen.position(label(0), nTotalCells-1));
}
// Get the cell centres at those cell indices

View File

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

View File

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

View File

@ -1,88 +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/>.
Description
Test loading of different gravity items
\*---------------------------------------------------------------------------*/
#include "MeshObject.H"
#include "gravityMeshObject.H"
#include "IOobjectList.H"
#include "IOstreams.H"
#include "argList.H"
#include "Time.H"
using namespace Foam;
void printInfo(const meshObjects::gravity& g)
{
Pout<< "name:" << g.uniformDimensionedVectorField::name()
<< " type:" << g.type()
<< " value:" << g.value() << nl;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
int main(int argc, char *argv[])
{
#include "setRootCase.H"
#include "createTime.H"
IOobjectList objects(runTime, runTime.constant());
Info<< "Found: " << objects << nl << endl;
for (const IOobject& io : objects.sorted<uniformDimensionedVectorField>())
{
if (io.name() == meshObjects::gravity::typeName)
{
const auto& g = meshObjects::gravity::New(runTime);
printInfo(g);
}
else
{
const auto& g = meshObjects::gravity::New(io.name(), runTime);
printInfo(g);
}
Pout<< "registered:" << flatOutput(runTime.sortedToc()) << nl << endl;
}
meshObjects::gravity::Delete("g", runTime);
meshObjects::gravity::Delete("something-not-in-registry", runTime);
Info<< "after Delete" << nl;
Pout<< "registered:" << flatOutput(runTime.sortedToc()) << endl;
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -1,21 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2212 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class uniformDimensionedVectorField;
location "constant";
object banana;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -2 0 0 0 0];
value (0 0 -10);
// ************************************************************************* //

View File

@ -1,21 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2212 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class uniformDimensionedVectorField;
location "constant";
object g;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -2 0 0 0 0];
value (0 -9.81 0);
// ************************************************************************* //

View File

@ -1,21 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2212 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class uniformDimensionedVectorField;
location "constant";
object saturn;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -2 0 0 0 0];
value (-100 0 0);
// ************************************************************************* //

View File

@ -1,34 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2212 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application blockMesh;
startFrom startTime;
startTime 0;
stopAt endTime;
endTime 10;
deltaT 1;
writeControl timeStep;
writeInterval 1;
// ************************************************************************* //

View File

@ -62,20 +62,20 @@ int main(int argc, char *argv[])
{
DynamicList<instant> times;
times.emplace_back();
times.emplace_back(12, "abc");
times.emplace_back(3.14159);
times.emplace_back(300.456, "def");
times.emplace_back(454.456, "xyz");
times.emplace_back(10, "ten");
times.push_back({15, "fifteen"});
times.append(instant{});
times.append({12, "abc"});
times.append(instant{3.14159});
times.append({300.456, "def"});
times.append({454.456, "xyz"});
times.append({10, "ten"});
times.append({15, "fifteen"});
{
word timeName("twenty");
Info<<"move append: <" << timeName << '>' << nl;
times.emplace_back(20, std::move(timeName));
Info<<"after append: <" << timeName << '>' << nl;
Info<<"move append: " << timeName << nl;
times.append({20, std::move(timeName)});
Info<<"after append: " << timeName << nl;
}
Info<< nl << "times:" << times << nl;
@ -97,12 +97,12 @@ int main(int argc, char *argv[])
}
DynamicList<fileNameInstant> files;
files.emplace_back();
files.emplace_back(12, "twelve");
files.emplace_back(3.14, "/path/almost-pi");
files.emplace_back(300, "/dev/value");
files.emplace_back(454, "/tmp/xyz");
files.emplace_back(10, "ten");
files.append(fileNameInstant{});
files.append({12, "twelve"});
files.append({3.14, "/path/almost-pi"});
files.append({300, "/dev/value"});
files.append({454, "/tmp/xyz"});
files.append({10, "ten"});
Info<< nl << "files:" << files << nl;
sort(files);

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation
Copyright (C) 2017-2023 OpenCFD Ltd.
Copyright (C) 2017-2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -37,7 +37,9 @@ using namespace Foam;
void printInfo(const labelRange& range)
{
Info<< "min " << range.min() << nl
Info<< "first " << range.first() << nl
<< "last " << range.last() << nl
<< "min " << range.min() << nl
<< "max " << range.max() << nl
<< "end " << range.end_value() << nl
<< "begin/end " << *range.cbegin() << ' ' << *range.cend() << nl;
@ -76,10 +78,10 @@ int main(int argc, char *argv[])
{
Info<<"test sorting" << endl;
DynamicList<labelRange> list1(10);
list1.emplace_back(25, 8);
list1.emplace_back(8);
list1.emplace_back(15, 5);
list1.emplace_back(50, -10, true);
list1.append(labelRange(25, 8));
list1.append(labelRange(8));
list1.append(labelRange(15, 5));
list1.append(labelRange(50, -10, true));
sort(list1);
Info<<"sorted" << list1 << endl;

View File

@ -32,8 +32,8 @@ Description
#include <limits>
#include "int.H"
#include "uint.H"
#include "string.H"
#include "scalar.H"
#include "word.H"
#include "IOstreams.H"
using namespace Foam;

View File

@ -468,13 +468,13 @@ int main(int argc, char *argv[])
for (auto& val : A)
{
val.real(rndGen.GaussNormal<scalar>());
val.imag(rndGen.GaussNormal<scalar>());
val.Re() = rndGen.GaussNormal<scalar>();
val.Im() = rndGen.GaussNormal<scalar>();
}
for (auto& val : B)
{
val.real(rndGen.GaussNormal<scalar>());
val.imag(rndGen.GaussNormal<scalar>());
val.Re() = rndGen.GaussNormal<scalar>();
val.Im() = rndGen.GaussNormal<scalar>();
}
Info<< nl << "# (A.T()).T() = A:" << nl;
@ -893,8 +893,8 @@ int main(int argc, char *argv[])
for (auto& val : A)
{
val.real(rndGen.GaussNormal<scalar>());
val.imag(rndGen.GaussNormal<scalar>());
val.Re() = rndGen.GaussNormal<scalar>();
val.Im() = rndGen.GaussNormal<scalar>();
}
Info<< "# SquareMatrix<complex>.symmetric():" << nl

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2019-2023 OpenCFD Ltd.
Copyright (C) 2019-2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -83,9 +83,6 @@ int main(int argc, char *argv[])
Info<<"Construct zero : ";
printInfo(MinMax<scalar>(Zero)) << nl;
Info<<"Construct zero_one : ";
printInfo(MinMax<scalar>(zero_one{})) << nl;
Info<<"Construct range : ";
printInfo(MinMax<scalar>(1, 20)) << nl;
@ -95,26 +92,6 @@ int main(int argc, char *argv[])
Info<<"A 0-1 vector range : ";
printInfo(MinMax<vector>::zero_one()) << nl;
{
vector a(0, 1, 20);
vector b(2, 1, 0);
vector c(4, 10, 12);
Info<< "vectors:"
<< " a = " << a
<< " b = " << b
<< " c = " << c << nl;
Info<< "min max = " << min(max(a, b), c) << nl;
Info<< "range clamp= " << MinMax<vector>(b, c).clamp(a) << nl;
Info<< "clamp = " << clamp(a, b, c) << nl;
Info<< "clamp 0/1 = " << clamp(a, vector::zero, vector::one) << nl;
}
// Scalar promotion
Info<< "clamp (scalar) = " << clamp(15.0, -1, 1) << nl;
{
scalarMinMax range1(10, 20);
@ -203,9 +180,6 @@ int main(int argc, char *argv[])
{
MinMax<scalar> limiter(10, 200);
clampOp<scalar> clipper(limiter);
// clampOp<scalar> clipper(zero_one{});
// clampOp<scalar> clipper(10, 200);
Info<< nl
<< "Test clipping limiter: " << limiter << nl
@ -222,10 +196,7 @@ int main(int argc, char *argv[])
Info<< nl << "test clip() with limiter: " << limiter << nl;
for (const scalar& val : values1)
{
Info<< "clipped : " << val << " = "
<< clip(val, limiter)
<< " or " << clip(val, limiter)
<< " or " << clipper(val) << nl;
Info<< "clipped : " << val << " = " << clip(val, limiter) << nl;
}
Info<< nl << "test clip(Field) with limiter: " << limiter << nl;
@ -237,15 +208,9 @@ int main(int argc, char *argv[])
Info<< "before " << flatOutput(values2) << nl;
// Too much clutter
// for (scalar& val : values2)
// {
// clampEqOp<scalar>{limiter}(val);
// }
for (scalar& val : values2)
{
val = clipper(val);
clipEqOp<scalar>()(val, limiter);
}
Info<< "after: " << flatOutput(values2) << nl;

View File

@ -1,2 +1,7 @@
/* EXE_INC = */
/* EXE_LIBS = */
EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
-lfiniteVolume \
-lmeshTools

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2019-2023 OpenCFD Ltd.
Copyright (C) 2019 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -24,11 +24,11 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
Test-minMax2
Test minMax
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "fvCFD.H"
#include "Time.H"
#include "BitOps.H"
#include "HashOps.H"
@ -37,7 +37,6 @@ Description
#include "MinMax.H"
#include "dimensionedScalar.H"
#include "dimensionedMinMax.H"
#include "Random.H"
using namespace Foam;
@ -79,6 +78,7 @@ int main(int argc, char *argv[])
Info<< "Test min/max " << nl;
{
scalarMinMax range1(10, 20);
scalarMinMax range2(40, 50);
@ -140,42 +140,7 @@ int main(int argc, char *argv[])
}
}
{
scalarField someField(25);
Random rnd(4567);
for (scalar& val : someField)
{
val = rnd.position(scalar(-0.2), scalar(1.2));
}
Info<< nl
<< "field: " << flatOutput(someField) << nl;
Info<< "clamp01: "
<< flatOutput(clamp(someField, zero_one{})()) << nl;
Info<< "clamp01: "
<< clamp(tmp<scalarField>(someField), zero_one{})<< nl;
scalarField result(10);
clamp(result, someField, zero_one{});
Info<< "result: " << result << nl;
someField.clamp_range(zero_one{});
Info<< "inplace: " << someField << nl;
scalar val(1.414);
Info<< "clamp " << val
// nope << " : " << clamp(val, zero_one{})
// nope << " : " << clamp(val, scalarMinMax(zero_one{}))
<< " : " << clamp(val, 0, 1)
<< " : " << clamp(val, zero_one{})
<< nl;
}
Info<< nl << "\nDone\n" << endl;
return 0;
}

View File

@ -32,8 +32,6 @@ Description
\*---------------------------------------------------------------------------*/
#define Foam_PstreamExchange_debug_chunks
#include "List.H"
#include "argList.H"
#include "Time.H"
@ -373,7 +371,6 @@ int main(int argc, char *argv[])
}
// Manually
Info<< "perform list exchange" << endl;
{
labelListList sendBufs(UPstream::nProcs());
labelListList recvBufs(UPstream::nProcs());
@ -400,34 +397,6 @@ int main(int argc, char *argv[])
);
}
Info<< "perform Map exchange" << endl;
{
Map<labelList> sendBufs;
Map<labelList> recvBufs;
Map<label> recvSizes;
if (Pstream::master())
{
for (const int proci : Pstream::allProcs())
{
if (proci != Pstream::myProcNo())
{
sendBufs(proci) = identity(500);
}
}
}
Pstream::exchangeSizes(sendBufs, recvSizes);
Pstream::exchange<labelList, label>
(
sendBufs,
recvSizes,
recvBufs
);
}
Info<< "End\n" << endl;
return 0;
}

View File

@ -1,4 +1,2 @@
include $(GENERAL_RULES)/mpi-rules
EXE_INC = $(PFLAGS) $(PINC) $(c++LESSWARN)
EXE_LIBS = $(PLIBS)
/* EXE_INC = */
/* EXE_LIBS = */

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2022-2023 OpenCFD Ltd.
Copyright (C) 2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -39,7 +39,6 @@ Description
#include "Tuple2.H"
#include "IOstreams.H"
#include "PstreamReduceOps.H"
#include <mpi.h>
using namespace Foam;
@ -63,8 +62,6 @@ int main(int argc, char *argv[])
argList::noBanner();
argList::noCheckProcessorDirectories();
argList::addBoolOption("verbose", "Set debug level");
argList::addBoolOption("comm-split", "Test simple comm split");
argList::addBoolOption("host-comm", "Test DIY host-comm split");
// Capture manually. We need values before proper startup
int nVerbose = 0;
@ -142,91 +139,6 @@ int main(int argc, char *argv[])
Pout<< endl;
#endif
if (Pstream::parRun() && args.found("comm-split"))
{
MPI_Comm hostComm;
MPI_Comm_split_type
(
MPI_COMM_WORLD,
MPI_COMM_TYPE_SHARED, // OMPI_COMM_TYPE_NODE
0, MPI_INFO_NULL, &hostComm
);
int host_nprocs = 0;
int host_rank = 0;
MPI_Comm_size(hostComm, &host_nprocs);
MPI_Comm_rank(hostComm, &host_rank);
Pout<< nl << "Host comm with "
<< host_rank << " / " << host_nprocs
<< " (using MPI_Comm_split_type)" << endl;
MPI_Comm_free(&hostComm);
}
if (Pstream::parRun() && args.found("host-comm"))
{
// Host communicator, based on the current worldComm
// Use hostname
// Lowest rank per hostname is the IO rank
label numprocs = UPstream::nProcs(UPstream::globalComm);
stringList hosts(numprocs);
hosts[Pstream::myProcNo(UPstream::globalComm)] = hostName();
labelList hostIDs_;
// Compact
if (Pstream::master(UPstream::globalComm))
{
DynamicList<word> hostNames(numprocs);
hostIDs_.resize_nocopy(numprocs);
forAll(hosts, proci)
{
const word& host = hosts[proci];
hostIDs_[proci] = hostNames.find(host);
if (hostIDs_[proci] == -1)
{
hostIDs_[proci] = hostNames.size();
hostNames.push_back(host);
}
}
}
Pstream::broadcasts(UPstream::globalComm, hostIDs_);
const label myHostId =
hostIDs_[Pstream::myProcNo(UPstream::globalComm)];
DynamicList<label> subRanks;
forAll(hostIDs_, proci)
{
if (hostIDs_[proci] == myHostId)
{
subRanks.push_back(proci);
}
}
// Allocate new communicator with globalComm as its parent
const label hostComm =
UPstream::allocateCommunicator
(
UPstream::globalComm, // parent
subRanks,
true
);
Pout<< nl << "Host comm with "
<< UPstream::myProcNo(hostComm)
<< " / " << UPstream::nProcs(hostComm)
<< nl;
UPstream::freeCommunicator(hostComm, true);
}
Info<< "\nEnd\n" << endl;
return 0;

View File

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

View File

@ -1,4 +0,0 @@
include $(GENERAL_RULES)/mpi-rules
EXE_INC = $(PFLAGS) $(PINC) $(c++LESSWARN)
EXE_LIBS = $(PLIBS)

View File

@ -1,249 +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-parallel-comm3a
Description
Basic communicator tests
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "Time.H"
#include "IPstream.H"
#include "OPstream.H"
#include "Pair.H"
#include "Tuple2.H"
#include "IOstreams.H"
#include "StringStream.H"
#include "Random.H"
#include <mpi.h>
using namespace Foam;
void printRequests(const UList<MPI_Request>& requests)
{
OStringStream buf;
buf << "request: " << requests.size() << '(';
for (const auto& req : requests)
{
if (req == MPI_REQUEST_NULL)
{
buf << " null";
}
else
{
buf << " " << Foam::name(req);
}
}
buf << " )";
Pout << buf.str().c_str() << endl;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
argList::noBanner();
argList::noCheckProcessorDirectories();
#include "setRootCase.H"
if (!Pstream::parRun())
{
Info<< "\nWarning: not parallel - skipping further tests\n" << endl;
return 0;
}
const int tag = (UPstream::msgType() + 314159);
// const label comm = UPstream::worldComm;
Random rnd(20*UPstream::myProcNo());
Map<DynamicList<char>> sendBufs;
Map<DynamicList<char>> recvBufs;
DynamicList<MPI_Request> sendRequests(10);
DynamicList<MPI_Request> recvRequests(10);
if (!Pstream::master())
{
// Send some random length to master
const int toProci = UPstream::masterNo();
label len = rnd.position<label>(10, 20);
if (UPstream::myProcNo() && (UPstream::myProcNo() % 3) == 0) len = 0;
// Has data to send
if (len)
{
auto& buf = sendBufs(toProci);
buf.resize(len, 'x');
MPI_Issend
(
buf.cdata_bytes(),
buf.size_bytes(),
MPI_BYTE,
toProci,
tag,
MPI_COMM_WORLD,
&sendRequests.emplace_back()
);
}
}
// Probe and receive
MPI_Request barrierReq;
for (bool barrier_active = false, done = false; !done; /*nil*/)
{
int flag = 0;
MPI_Status status;
MPI_Iprobe
(
MPI_ANY_SOURCE,
tag,
MPI_COMM_WORLD,
&flag,
&status
);
if (flag)
{
// Message found, receive into dest buffer location
const label fromProci = status.MPI_SOURCE;
int count = 0;
MPI_Get_count(&status, MPI_BYTE, &count);
auto& buf = recvBufs(fromProci);
buf.resize_nocopy(count);
MPI_Irecv
(
buf.data_bytes(),
buf.size_bytes(),
MPI_BYTE,
fromProci,
tag,
MPI_COMM_WORLD,
&recvRequests.emplace_back()
);
}
if (barrier_active)
{
// Test barrier for completion
// - all received, or nothing to receive
MPI_Test(&barrierReq, &flag, MPI_STATUS_IGNORE);
if (flag)
{
done = true;
}
}
else
{
// Check if all sends have arrived
MPI_Testall
(
sendRequests.size(), sendRequests.data(),
&flag, MPI_STATUSES_IGNORE
);
if (flag)
{
MPI_Ibarrier(MPI_COMM_WORLD, &barrierReq);
barrier_active = true;
}
}
}
if (recvRequests.empty())
{
Pout << "No receive requests" << endl;
}
else
{
printRequests(recvRequests);
}
// Either MPI_Waitall, or MPI_Waitany...
label loop = 0;
for (bool dispatched = recvRequests.empty(); !dispatched; /*nil*/)
{
int index = 0;
MPI_Waitany
(
recvRequests.size(),
recvRequests.data(),
&index,
MPI_STATUS_IGNORE
);
if (index == MPI_UNDEFINED)
{
//Pout<< "Testany is " << (flag ? "done" : "waiting") << endl;
Pout<< "Waitany (loop:" << loop << ") : done" << endl;
dispatched = true;
}
else
{
Pout<< "Waitany (loop:"
<< loop << ") "
<< index << " of " << recvRequests.size() << endl;
printRequests(recvRequests);
}
++loop;
}
// Not needed: all tested...
// MPI_Waitall(recvRequests.size(), recvRequests.data(), MPI_STATUSES_IGNORE);
MPI_Barrier(MPI_COMM_WORLD);
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //

View File

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

View File

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

View File

@ -1,228 +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-parallel-comm3b
Description
Basic communicator tests
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "Time.H"
#include "IPstream.H"
#include "OPstream.H"
#include "Pair.H"
#include "Tuple2.H"
#include "IOstreams.H"
#include "StringStream.H"
#include "Random.H"
using namespace Foam;
void printRequests(const UList<UPstream::Request>& requests)
{
OStringStream buf;
buf << "request: " << requests.size() << '(';
for (const auto& req : requests)
{
if (req.good())
{
buf << " " << Foam::name(req.pointer());
}
else
{
buf << " null";
}
}
buf << " )";
Pout << buf.str().c_str() << endl;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
argList::noBanner();
argList::noCheckProcessorDirectories();
#include "setRootCase.H"
if (!Pstream::parRun())
{
Info<< "\nWarning: not parallel - skipping further tests\n" << endl;
return 0;
}
const int tag = (UPstream::msgType() + 314159);
const label comm = UPstream::worldComm;
Random rnd(20*UPstream::myProcNo());
Map<DynamicList<char>> sendBufs;
Map<DynamicList<char>> recvBufs;
DynamicList<UPstream::Request> sendRequests(10);
DynamicList<UPstream::Request> recvRequests(10);
// Map request indices to procs
Map<label> recvFromProc(20);
if (!Pstream::master())
{
// Send some random length to master
const int toProci = UPstream::masterNo();
label len = rnd.position<label>(10, 20);
if (UPstream::myProcNo() && (UPstream::myProcNo() % 3) == 0) len = 0;
// Has data to send
if (len)
{
auto& buf = sendBufs(toProci);
buf.resize(len, 'x');
UOPstream::write
(
sendRequests.emplace_back(),
UPstream::masterNo(),
sendBufs[toProci],
tag,
comm,
UPstream::sendModes::sync
);
}
}
// Probe and receive
UPstream::Request barrierReq;
for (bool barrier_active = false, done = false; !done; /*nil*/)
{
std::pair<int, int> probed =
UPstream::probeMessage
(
UPstream::commsTypes::nonBlocking,
-1, // ANY_SOURCE
tag,
comm
);
if (probed.second > 0)
{
// Message found and had size: receive it
const label proci = probed.first;
const label count = probed.second;
recvBufs(proci).resize_nocopy(count);
recvFromProc(recvRequests.size()) = proci;
// Non-blocking read
UIPstream::read
(
recvRequests.emplace_back(),
proci,
recvBufs[proci],
tag,
comm
);
}
if (barrier_active)
{
// Test barrier for completion
if (UPstream::finishedRequest(barrierReq))
{
done = true;
}
}
else
{
// Check if all sends have arrived
if (UPstream::finishedRequests(sendRequests))
{
UPstream::barrier(comm, &barrierReq);
barrier_active = true;
}
}
}
if (recvRequests.empty())
{
Pout << "No receive requests" << endl;
}
else
{
printRequests(recvRequests);
}
// Either MPI_Waitall, or MPI_Waitany...
label loop = 0;
for (bool dispatched = recvRequests.empty(); !dispatched; /*nil*/)
{
label index = UPstream::waitAnyRequest(recvRequests);
if (index < 0)
{
Pout<< "Waitany (loop:" << loop << ") : done" << endl;
dispatched = true;
}
else
{
Pout<< "Waitany (loop:"
<< loop << ") "
<< index << " of " << recvRequests.size()
<< " from proc:" << recvFromProc.lookup(index, -1)
<< endl;
printRequests(recvRequests);
}
++loop;
}
// Not needed: all tested...
// UPstream::waitRequest(recvRequests);
UPstream::barrier(UPstream::worldComm);
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //

View File

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

View File

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

View File

@ -1,227 +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-parallel-nbx2
Description
Test for send/receive data
\*---------------------------------------------------------------------------*/
#include "List.H"
#include "argList.H"
#include "Time.H"
#include "IPstream.H"
#include "OPstream.H"
#include "IOstreams.H"
#include "Random.H"
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
argList::noCheckProcessorDirectories();
argList::addBoolOption("non-blocking", "Test with non-blocking receives");
#include "setRootCase.H"
const bool optNonBlocking = args.found("non-blocking");
if (!Pstream::parRun())
{
Info<< "\nWarning: not parallel - skipping further tests\n" << endl;
return 0;
}
Info<< "\nTesting with non-blocking receives: " << optNonBlocking << nl;
const int tag = (UPstream::msgType() + 314159);
const label comm = UPstream::worldComm;
Random rnd(20*UPstream::myProcNo());
// Looks a bit like a DIY PstreamBuffers...
Map<DynamicList<char>> sendBufs;
Map<DynamicList<char>> recvBufs;
DynamicList<UPstream::Request> sendRequests(10);
DynamicList<UPstream::Request> recvRequests(10);
if (!Pstream::master())
{
// Send some random length to master
const int toProci = UPstream::masterNo();
label len = rnd.position<label>(10, 20);
if (UPstream::myProcNo() && (UPstream::myProcNo() % 3) == 0) len = 0;
scalarField fld(len, scalar(UPstream::myProcNo()));
// Format for sending
if (!fld.empty())
{
auto& buf = sendBufs(toProci);
UOPstream os(buf);
os << fld;
}
// Start nonblocking synchronous send to process dest
if (sendBufs.found(toProci) && !sendBufs[toProci].empty())
{
Pout<< "send: [" << sendBufs[toProci].size() << " bytes] "
<< flatOutput(fld) << endl;
// Has data to send
UOPstream::write
(
sendRequests.emplace_back(),
UPstream::masterNo(),
sendBufs[toProci],
tag,
comm,
UPstream::sendModes::sync
);
}
}
// Probe and receive
UPstream::Request barrierReq;
for (bool barrier_active = false, done = false; !done; /*nil*/)
{
std::pair<int, int> probed =
UPstream::probeMessage
(
UPstream::commsTypes::nonBlocking,
-1, // ANY_SOURCE
tag,
comm
);
if (probed.second > 0)
{
// Message found and had size: receive it
const label proci = probed.first;
const label count = probed.second;
if (optNonBlocking)
{
recvBufs(proci).resize_nocopy(count);
// Non-blocking read
UIPstream::read
(
recvRequests.emplace_back(),
proci,
recvBufs[proci],
tag,
comm
);
// Pout<< "Done: "
// << UPstream::finishedRequests(recvRequests) << endl;
}
else
{
IPstream is
(
UPstream::commsTypes::scheduled,
probed.first,
probed.second,
tag,
comm
);
scalarField fld(is);
Info<< "from [" << probed.first
<< "] : " << flatOutput(fld) << endl;
}
}
if (barrier_active)
{
// Test barrier for completion
if (UPstream::finishedRequest(barrierReq))
{
done = true;
}
}
else
{
// Check if all sends have arrived
if (UPstream::finishedRequests(sendRequests))
{
UPstream::barrier(comm, &barrierReq);
barrier_active = true;
}
}
}
Pout<< "pending receives: " << recvRequests.size() << endl;
// Wait for receives to complete
UPstream::waitRequests(recvRequests);
// It could be we need this type of synchronization point
// if the receives are non-blocking
if (optNonBlocking)
{
UPstream::barrier(comm);
}
if (!recvBufs.empty())
{
Pout<< "Receives from: " << flatOutput(recvBufs.sortedToc()) << endl;
forAllConstIters(recvBufs, iter)
{
Pout<< "proc:" << iter.key() << " len:" << iter.val().size() << nl;
if (!iter.val().empty())
{
UIPstream is(iter.val());
scalarField fld(is);
Pout<< "recv:" << iter.key()
<< " : " << flatOutput(fld) << nl;
}
}
}
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -50,8 +50,9 @@ using namespace Foam;
int main(int argc, char *argv[])
{
argList::noCheckProcessorDirectories();
argList args(argc, argv);
#include "setRootCase.H"
#include "createTime.H"
// Test PstreamBuffers
// ~~~~~~~~~~~~~~~~~~~
@ -82,13 +83,13 @@ int main(int argc, char *argv[])
if (Pstream::master())
{
// Collect my own data
allData.push_back(data);
allData.append(data);
for (const int proci : Pstream::subProcs())
{
Perr << "master receiving from " << proci << endl;
UIPstream fromProc(proci, pBufs);
allData.push_back(vector(fromProc));
allData.append(vector(fromProc));
}
}
@ -101,7 +102,7 @@ int main(int argc, char *argv[])
{
Perr << "master sending to " << proci << endl;
UOPstream toProc(proci, pBufs);
toProc << allData;
toSlave << allData;
}
}
@ -124,27 +125,13 @@ int main(int argc, char *argv[])
scalar data1 = 1.0;
label request1 = -1;
{
Foam::reduce
(
data1,
sumOp<scalar>(),
UPstream::msgType(),
UPstream::worldComm,
request1
);
Foam::reduce(data1, sumOp<scalar>(), UPstream::msgType(), request1);
}
scalar data2 = 0.1;
UPstream::Request request2;
label request2 = -1;
{
Foam::reduce
(
data2,
sumOp<scalar>(),
UPstream::msgType(),
UPstream::worldComm,
request2
);
Foam::reduce(data2, sumOp<scalar>(), UPstream::msgType(), request2);
}
@ -181,23 +168,23 @@ int main(int argc, char *argv[])
if (request1 != -1)
{
Pout<< "Waiting for non-blocking reduce with request "
<< request1 << endl;
UPstream::waitRequest(request1);
Pout<< "Waiting for non-blocking reduce with request " << request1
<< endl;
Pstream::waitRequest(request1);
}
Info<< "Reduced data1:" << data1 << endl;
if (request2.good())
if (request2 != -1)
{
Pout<< "Waiting for non-blocking reduce with request "
<< Foam::name(request2.pointer()) << endl;
UPstream::waitRequest(request2);
Pout<< "Waiting for non-blocking reduce with request " << request1
<< endl;
Pstream::waitRequest(request2);
}
Info<< "Reduced data2:" << data2 << endl;
// Clear all outstanding requests
UPstream::resetRequests(0);
// Clear any outstanding requests
Pstream::resetRequests(0);
Info<< "End\n" << endl;

View File

@ -67,24 +67,54 @@ void testMapDistribute()
labelList nSend(Pstream::nProcs(), Zero);
forAll(complexData, i)
{
const label proci = complexData[i].first();
nSend[proci]++;
const label procI = complexData[i].first();
nSend[procI]++;
}
// Collect items to be sent
labelListList sendMap(Pstream::nProcs());
forAll(sendMap, proci)
forAll(sendMap, procI)
{
sendMap[proci].resize_nocopy(nSend[proci]);
nSend[proci] = 0;
sendMap[procI].setSize(nSend[procI]);
}
nSend = 0;
forAll(complexData, i)
{
const label proci = complexData[i].first();
sendMap[proci][nSend[proci]++] = i;
const label procI = complexData[i].first();
sendMap[procI][nSend[procI]++] = i;
}
mapDistribute map(std::move(sendMap));
// Sync how many to send
labelList nRecv;
Pstream::exchangeSizes(sendMap, nRecv);
// Collect items to be received
labelListList recvMap(Pstream::nProcs());
forAll(recvMap, procI)
{
recvMap[procI].setSize(nRecv[procI]);
}
label constructSize = 0;
// Construct with my own elements first
forAll(recvMap[Pstream::myProcNo()], i)
{
recvMap[Pstream::myProcNo()][i] = constructSize++;
}
// Construct from other processors
forAll(recvMap, procI)
{
if (procI != Pstream::myProcNo())
{
forAll(recvMap[procI], i)
{
recvMap[procI][i] = constructSize++;
}
}
}
// Construct distribute map (destructively)
mapDistribute map(constructSize, std::move(sendMap), std::move(recvMap));
// Distribute complexData
map.distribute(complexData);

View File

@ -86,8 +86,11 @@ int main(int argc, char *argv[])
forAll(fEdges, i)
{
changedEdges.push_back(fEdges[i]);
changedInfo.emplace_back(labelPair(globalFacei, globalFacei));
changedEdges.append(fEdges[i]);
changedInfo.append
(
patchEdgeFaceRegions(labelPair(globalFacei, globalFacei))
);
}
}

View File

@ -40,8 +40,6 @@ Description
#include "Tuple2.H"
#include "Switch.H"
#include "dictionary.H"
#include "primitiveFields.H"
#include "labelVector.H"
using namespace Foam;
@ -95,13 +93,6 @@ void printValPair(const char* desc, const T1& val1, const T2& val2)
}
// The 'naive' implementation. Not exact at end points
inline scalar naive_lerp(const scalar a, const scalar b, const scalar t)
{
return a + t*(b - a);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<class T>
@ -189,113 +180,6 @@ int main(int argc, char *argv[])
{
unsigned nFail = 0;
{
const float a = 1e8f, b = 1.0f;
Info<< "lerp exact: "
<< (a == lerp(a, b, 0.0f)) << " "
<< (b == lerp(a, b, 1.0f)) << nl;
Info<< "naive lerp exact: "
<< (a == naive_lerp(a, b, 0.0f)) << " "
<< (b == naive_lerp(a, b, 1.0f)) << nl;
}
{
const scalar a = 1e24, b = 1.0;
Info<< "lerp exact: "
<< (a == lerp(a, b, 0.0)) << " "
<< (b == lerp(a, b, 1.0)) << nl;
Info<< "naive lerp exact: "
<< (a == naive_lerp(a, b, 0.0)) << " "
<< (b == naive_lerp(a, b, 1.0)) << nl;
}
{
const vector a(vector::uniform(1e24)), b(vector::uniform(1.0));
Info<<"lerp exact: "
<< (a == lerp(a, b, 0.0f)) << " "
<< (b == lerp(a, b, 1.0f)) << nl;
Info<< "lerp: "
<< lerp(vector::uniform(0), vector::uniform(100), 0.5) << nl;
}
{
const lerpOp1<vector> half(0.5);
const vector a(vector::uniform(20));
const vector b(vector::uniform(100));
Info<< "lerp half: "
<< a << " : " << b << " => " << half(a, b) << nl;
}
{
const labelVector a(labelVector::uniform(10000));
const labelVector b(labelVector::uniform(1));
Info<< "lerp (labelVector) = "
<< lerp(a, b, 0.1) << nl;
}
{
const scalar a(0);
const scalar b(100);
Info<< "lerp of " << a << " : " << b << nl;
for (const double t : { 0.0, 0.5, 1.0, -0.5, 1.5 })
{
Info<< " " << t << " = " << lerp(a, b, t) << nl;
}
}
// No yet
#if 0
{
const label a(10000);
const label b(1);
Info<<"lerp (label) = "
<< label(lerp(a, b, 0.1)) << nl;
}
{
const bool a(true);
const bool b(false);
Info<<"lerp (bool) = "
<< (lerp(a, b, 0.5)) << nl;
}
#endif
{
const sphericalTensor a(10), b(20);
Info<<"lerp exact: "
<< (a == lerp(a, b, 0.0f)) << " "
<< (b == lerp(a, b, 1.0f)) << nl;
// Info<< "lerp: "
// << lerp(vector::uniform(0), vector::uniform(100), 0.5) << nl;
}
{
const tensor a(tensor::uniform(1e24));
const tensor b(tensor::uniform(0));
Info<<"lerp exact: "
<< (a == lerp(a, b, 0.0f)) << " "
<< (b == lerp(a, b, 1.0f)) << nl;
// Info<< "lerp: "
// << lerp(vector::uniform(0), vector::uniform(100), 0.5) << nl;
}
{
Info<< nl << "Test Switch parsing:" << nl;
nFail += testParsing

View File

@ -1,4 +1,2 @@
include $(GENERAL_RULES)/mpi-rules
EXE_INC = $(PFLAGS) $(PINC) $(c++LESSWARN)
EXE_LIBS = $(PLIBS)
/* EXE_INC = */
/* EXE_LIBS = */

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2022-2023 OpenCFD Ltd.
Copyright (C) 2022 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -33,7 +33,6 @@ Description
#include "polyMesh.H"
#include "globalMeshData.H"
#include "OFstream.H"
#include <mpi.h>
using namespace Foam;
@ -43,25 +42,11 @@ using namespace Foam;
int main(int argc, char *argv[])
{
argList::noFunctionObjects();
argList::addBoolOption("verbose", "Set debug level");
argList::addBoolOption("comm-graph", "Test simple graph communicator");
argList::addNote
(
"Create graph of OpenFOAM mesh connections"
);
// Capture manually. We need values before proper startup
int nVerbose = 0;
for (int argi = 1; argi < argc; ++argi)
{
if (strcmp(argv[argi], "-verbose") == 0)
{
++nVerbose;
}
}
UPstream::debug = nVerbose;
#include "setRootCase.H"
if (!Pstream::parRun())
@ -76,7 +61,7 @@ int main(int argc, char *argv[])
// Adjacency table
const labelListList& connectivity =
mesh.globalData().topology().procAdjacency();
mesh.globalData().topology().procNeighbours();
if (Pstream::master())
{
@ -120,127 +105,6 @@ int main(int argc, char *argv[])
<< "Use neato, circo or fdp graphviz tools" << nl;
}
if (Pstream::parRun() && args.found("comm-graph"))
{
Info<< nl;
// Local neighbours
const labelList& neighbours =
mesh.globalData().topology().procNeighbours();
Pout<< "Neigbours: " << flatOutput(neighbours) << endl;
// As integers values
List<int> connected(neighbours.size());
List<int> weights(neighbours.size());
forAll(neighbours, i)
{
connected[i] = neighbours[i];
weights[i] = 1;
}
MPI_Comm topoComm;
int mpiErrorCode =
MPI_Dist_graph_create_adjacent
(
MPI_COMM_WORLD,
// Connections into this rank
connected.size(), connected.cdata(), MPI_UNWEIGHTED,
// Connections out of this rank
connected.size(), connected.cdata(), MPI_UNWEIGHTED,
MPI_INFO_NULL,
0, // no reordering (apparently broken anyhow)
&topoComm
);
if (mpiErrorCode)
{
FatalError
<< "Failed to create topo communicator. Error:"
<< mpiErrorCode << exit(FatalError);
}
int topo_rank = 0;
int topo_nprocs = 0;
int topo_inCount = 0;
int topo_outCount = 0;
int topo_isWeighted = 0;
MPI_Comm_rank(topoComm, &topo_rank);
MPI_Comm_size(topoComm, &topo_nprocs);
{
int topo_type = 0;
MPI_Topo_test(topoComm, &topo_type);
if (MPI_CART == topo_type)
{
Info<< "MPI topology : Cartesian" << endl;
}
else if (MPI_GRAPH == topo_type)
{
Info<< "MPI topology : Graph" << endl;
}
else if (MPI_DIST_GRAPH == topo_type)
{
Info<< "MPI topology : Distributed graph" << endl;
}
else
{
Info<< "MPI topology : None" << endl;
}
}
MPI_Dist_graph_neighbors_count
(
topoComm,
&topo_inCount,
&topo_outCount,
&topo_isWeighted
);
Pout<< "Topo comm with "
<< topo_rank << " / " << topo_nprocs
<< " from " << connected.size() << flatOutput(connected)
<< " numNbr:" << topo_inCount
<< nl;
List<int> myPatchIds(neighbours.size());
forAll(myPatchIds, i)
{
// Patches to neighbours
myPatchIds[i] =
mesh.globalData().topology().procPatchLookup(neighbours[i]);
}
List<int> nbrPatchIds(neighbours.size(), Zero);
mpiErrorCode = MPI_Neighbor_alltoall
(
myPatchIds.data(),
1, // one element per neighbour
MPI_INT,
nbrPatchIds.data(),
1, // one element per neighbour
MPI_INT,
topoComm
);
if (mpiErrorCode)
{
FatalError
<< "MPI Error: " << mpiErrorCode << exit(FatalError);
}
Pout<< "proc neighbours:" << flatOutput(neighbours)
<< " my patches:" << flatOutput(myPatchIds)
<< " their patches:" << flatOutput(nbrPatchIds)
<< endl;
MPI_Comm_free(&topoComm);
}
Info<< nl << "End\n" << endl;
return 0;

View File

@ -108,8 +108,8 @@ int main(int argc, char *argv[])
{
if (surf->interfaceCell()[celli])
{
centres.push_back(surf->centre()[celli]);
normals.push_back(surf->normal()[celli]);
centres.append(surf->centre()[celli]);
normals.append(surf->normal()[celli]);
}
}

View File

@ -249,7 +249,7 @@ void Foam::router::storeRoute
{
if (weights_[nodeI] == pathValue)
{
route.push_back(nodeI);
route.append(nodeI);
storeRoute
(
@ -386,7 +386,7 @@ Foam::labelList Foam::router::getRoute(const label pathValue) const
DynamicList<label> route(weights_.size());
route.push_back(startNodeI);
route.append(startNodeI);
storeRoute(startNodeI, -1, pathValue, route);

View File

@ -31,8 +31,9 @@ Description
#include "bool.H"
#include "Switch.H"
#include "string.H"
#include "dictionary.H"
#include "zero.H"
#include "nil.H"
#include "IOstreams.H"
#include "PstreamBuffers.H"
#include "argList.H"
@ -81,8 +82,8 @@ int main(int argc, char *argv[])
}
{
zero x;
cout<<"zero:" << sizeof(x) << nl;
nil x;
cout<<"nil:" << sizeof(x) << nl;
}
#if 0
{

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2019-2023 OpenCFD Ltd.
Copyright (C) 2019-2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -47,10 +47,10 @@ void printInfo(const sliceCoeffs& coeffs)
Info<< nl
<< "coeffs: " << coeffs << nl
<< "range: " << range << nl
<< "min: " << range.min() << nl
<< "range: " << range << nl
<< "first: " << range.first() << nl
<< "*begin " << *range.begin() << nl
<< "max: " << range.max() << nl
<< "last: " << range.last() << nl
<< "*end " << *range.end() << nl
<< "values: " << flatOutput(range.labels()) << nl;

View File

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

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