From 04e92966793499ca35048d23e0aac635989ca0e0 Mon Sep 17 00:00:00 2001 From: sergio Date: Wed, 8 Feb 2012 09:59:58 +0000 Subject: [PATCH 1/7] BUG: Fix of temperatureThermoBaffle for multi prperties case --- .../temperatureThermoBaffleFvPatchScalarField.C | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/regionModels/thermoBaffleModels/derivedFvPatchFields/temperatureThermoBaffle/temperatureThermoBaffleFvPatchScalarField.C b/src/regionModels/thermoBaffleModels/derivedFvPatchFields/temperatureThermoBaffle/temperatureThermoBaffleFvPatchScalarField.C index cf339acd54..082f6ae5d1 100644 --- a/src/regionModels/thermoBaffleModels/derivedFvPatchFields/temperatureThermoBaffle/temperatureThermoBaffleFvPatchScalarField.C +++ b/src/regionModels/thermoBaffleModels/derivedFvPatchFields/temperatureThermoBaffle/temperatureThermoBaffleFvPatchScalarField.C @@ -107,6 +107,11 @@ temperatureThermoBaffleFvPatchScalarField << exit(FatalError); } + const directMappedPatchBase& mpp = + refCast(patch().patch()); + + const word nbrMesh = mpp.sampleRegion(); + const fvMesh& thisMesh = patch().boundaryMesh().mesh(); typedef regionModels::thermoBaffleModels::thermoBaffleModel baffle; @@ -114,14 +119,15 @@ temperatureThermoBaffleFvPatchScalarField if ( thisMesh.name() == polyMesh::defaultRegion - && !thisMesh.foundObject("thermoBaffle") + && !thisMesh.foundObject(nbrMesh) && !owner_ ) { - Info << "Creating thermal baffle..." << endl; + Info << "Creating thermal baffle..." << nbrMesh << endl; baffle_.reset(baffle::New(thisMesh, dict).ptr()); owner_ = true; dict.lookup("thermoType") >> solidThermoType_; + baffle_->rename(nbrMesh); } } From acb4ca2425d8ad5caf3692654e9141bdb2be0c97 Mon Sep 17 00:00:00 2001 From: sergio Date: Wed, 8 Feb 2012 10:15:05 +0000 Subject: [PATCH 2/7] BUG: initiate the Ptr mapToMap is bounda box on mesh processors overlaps --- src/fieldSources/basicSource/basicSource/basicSource.C | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/fieldSources/basicSource/basicSource/basicSource.C b/src/fieldSources/basicSource/basicSource/basicSource.C index 355073b33a..2d218de752 100644 --- a/src/fieldSources/basicSource/basicSource/basicSource.C +++ b/src/fieldSources/basicSource/basicSource/basicSource.C @@ -167,8 +167,10 @@ void Foam::basicSource::setCellSet() Info<< indent << "- selecting inter region mapping" << endl; const fvMesh& secondaryMesh = mesh_.time().lookupObject(mapRegionName_); - const boundBox primaryBB = mesh_.bounds(); - const boundBox secondaryBB = secondaryMesh.bounds(); + + boundBox primaryBB(mesh_.points(), false); + boundBox secondaryBB(secondaryMesh.points(), false); + if (secondaryBB.overlaps(primaryBB)) { // Dummy patches From 93e2226595af6dd4c2b51fe8f2f865ff6bebf727 Mon Sep 17 00:00:00 2001 From: sergio Date: Wed, 8 Feb 2012 10:18:44 +0000 Subject: [PATCH 3/7] ENH: check of valid Ptr before using it --- .../interRegionHeatTransferModel.C | 147 +++++++++--------- 1 file changed, 75 insertions(+), 72 deletions(-) diff --git a/src/fieldSources/basicSource/interRegionHeatTransferModel/interRegionHeatTransferModel/interRegionHeatTransferModel.C b/src/fieldSources/basicSource/interRegionHeatTransferModel/interRegionHeatTransferModel/interRegionHeatTransferModel.C index 24c0f612dd..772f26094a 100644 --- a/src/fieldSources/basicSource/interRegionHeatTransferModel/interRegionHeatTransferModel/interRegionHeatTransferModel.C +++ b/src/fieldSources/basicSource/interRegionHeatTransferModel/interRegionHeatTransferModel/interRegionHeatTransferModel.C @@ -137,100 +137,103 @@ void Foam::interRegionHeatTransferModel::addSup const label fieldI ) { - if (firstIter_) + if (secondaryToPrimaryInterpPtr_.valid()) { - check(); - firstIter_ = false; - } + if (firstIter_) + { + check(); + firstIter_ = false; + } - const volScalarField& h = eEqn.psi(); + const volScalarField& h = eEqn.psi(); - tmp tTmapped - ( - new volScalarField + tmp tTmapped ( - IOobject + new volScalarField ( - "Tmapped" + mesh_.name(), - mesh_.time().timeName(), + IOobject + ( + "Tmapped" + mesh_.name(), + mesh_.time().timeName(), + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("T", dimTemperature, 0.0) - ) - ); + dimensionedScalar("T", dimTemperature, 0.0) + ) + ); - volScalarField& Tmapped = tTmapped(); + volScalarField& Tmapped = tTmapped(); - const fvMesh& secondaryMesh = - mesh_.time().lookupObject(mapRegionName_); + const fvMesh& secondaryMesh = + mesh_.time().lookupObject(mapRegionName_); - const volScalarField& Tsecondary = - secondaryMesh.lookupObject("T"); + const volScalarField& Tsecondary = + secondaryMesh.lookupObject("T"); - secondaryToPrimaryInterpPtr_->interpolateInternalField - ( - Tmapped, - Tsecondary, - meshToMesh::MAP, - eqOp() - ); - - if (!master_) - { secondaryToPrimaryInterpPtr_->interpolateInternalField ( - htc_, - secIrht_->calculateHtc(), - meshToMesh::CELL_VOLUME_WEIGHT, + Tmapped, + Tsecondary, + meshToMesh::MAP, eqOp() ); - } - if (debug) - { - Info<< " Volumetric integral of htc : " - << fvc::domainIntegrate(htc_).value() - << endl; - } - - //SAF: temporarily output - if (mesh_.time().outputTime()) - { - Tmapped.write(); - htc_.write(); - } - - if (h.dimensions() == dimEnergy/dimMass) - { - const basicThermo& primaryThermo = - mesh_.lookupObject("thermophysicalProperties"); - - eEqn += htc_*Tmapped - fvm::Sp(htc_/primaryThermo.Cp(), h); + if (!master_) + { + secondaryToPrimaryInterpPtr_->interpolateInternalField + ( + htc_, + secIrht_->calculateHtc(), + meshToMesh::CELL_VOLUME_WEIGHT, + eqOp() + ); + } if (debug) { - Info<< " Energy exchange from region " << secondaryMesh.name() - << " To " << mesh_.name() << " : " - << fvc::domainIntegrate - ( - htc_*(h/primaryThermo.Cp() - Tmapped) - ).value() + Info<< " Volumetric integral of htc : " + << fvc::domainIntegrate(htc_).value() << endl; } - } - else if(h.dimensions() == dimTemperature) - { - eEqn += htc_*Tmapped - fvm::Sp(htc_, h); - if (debug) + //SAF: temporarily output + if (mesh_.time().outputTime()) { - Info<< " Enegy exchange from region " << secondaryMesh.name() - << " To " << mesh_.name() << " : " - << fvc::domainIntegrate(htc_*(h - Tmapped)).value() - << endl; + Tmapped.write(); + htc_.write(); + } + + if (h.dimensions() == dimEnergy/dimMass) + { + const basicThermo& primaryThermo = + mesh_.lookupObject("thermophysicalProperties"); + + eEqn += htc_*Tmapped - fvm::Sp(htc_/primaryThermo.Cp(), h); + + if (debug) + { + Info<< " Energy exchange from region " << secondaryMesh.name() + << " To " << mesh_.name() << " : " + << fvc::domainIntegrate + ( + htc_*(h/primaryThermo.Cp() - Tmapped) + ).value() + << endl; + } + } + else if(h.dimensions() == dimTemperature) + { + eEqn += htc_*Tmapped - fvm::Sp(htc_, h); + + if (debug) + { + Info<< " Enegy exchange from region " << secondaryMesh.name() + << " To " << mesh_.name() << " : " + << fvc::domainIntegrate(htc_*(h - Tmapped)).value() + << endl; + } } } } From e730fbec127c684eb5736b7e52d0eaceac843139 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 8 Feb 2012 13:46:31 +0000 Subject: [PATCH 4/7] ENH: polynomial: added constructor from components --- .../DataEntry/polynomial/polynomial.C | 51 ++++++++++++++++++- .../DataEntry/polynomial/polynomial.H | 3 ++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C index 34c595f8ac..c9c8ba3f65 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C +++ b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.C @@ -31,8 +31,11 @@ License namespace Foam { defineTypeNameAndDebug(polynomial, 0); + DataEntry::adddictionaryConstructorToTable + addpolynomialConstructorToTable_; } + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::polynomial::polynomial(const word& entryName, const dictionary& dict) @@ -48,7 +51,7 @@ Foam::polynomial::polynomial(const word& entryName, const dictionary& dict) if (!coeffs_.size()) { - FatalErrorIn("Foam::polynomial::polynomial(const word&, Istream&)") + FatalErrorIn("Foam::polynomial::polynomial(const word&, dictionary&)") << "polynomial coefficients for entry " << this->name_ << " are invalid (empty)" << nl << exit(FatalError); } @@ -66,7 +69,7 @@ Foam::polynomial::polynomial(const word& entryName, const dictionary& dict) { if (!canIntegrate_) { - WarningIn("Foam::polynomial::polynomial(const word&, Istream&)") + WarningIn("Foam::polynomial::polynomial(const word&, dictionary&)") << "Polynomial " << this->name_ << " cannot be integrated" << endl; } @@ -74,6 +77,50 @@ Foam::polynomial::polynomial(const word& entryName, const dictionary& dict) } +Foam::polynomial::polynomial +( + const word& entryName, + const List >& coeffs +) +: + DataEntry(entryName), + coeffs_(coeffs), + canIntegrate_(true) +{ + if (!coeffs_.size()) + { + FatalErrorIn + ( + "Foam::polynomial::polynomial" + "(const word&, const List >&&)" + ) << "polynomial coefficients for entry " << this->name_ + << " are invalid (empty)" << nl << exit(FatalError); + } + + forAll(coeffs_, i) + { + if (mag(coeffs_[i].second() + 1) < ROOTVSMALL) + { + canIntegrate_ = false; + break; + } + } + + if (debug) + { + if (!canIntegrate_) + { + WarningIn + ( + "Foam::polynomial::polynomial" + "(const word&, const List >&&)" + ) << "Polynomial " << this->name_ << " cannot be integrated" + << endl; + } + } +} + + Foam::polynomial::polynomial(const polynomial& poly) : DataEntry(poly), diff --git a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H index 2ed38a9f32..2c2cbcb30f 100644 --- a/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H +++ b/src/OpenFOAM/primitives/functions/DataEntry/polynomial/polynomial.H @@ -96,6 +96,9 @@ public: polynomial(const word& entryName, const dictionary& dict); + //- Construct from components + polynomial(const word& entryName, const List >&); + //- Copy constructor polynomial(const polynomial& poly); From bbb7b2ad8ab7818392f0931692cdf776f76d1e40 Mon Sep 17 00:00:00 2001 From: sergio Date: Wed, 8 Feb 2012 13:50:03 +0000 Subject: [PATCH 5/7] BUG : Changing name fo mappedPatchBase --- .../temperatureThermoBaffleFvPatchScalarField.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/regionModels/thermoBaffleModels/derivedFvPatchFields/temperatureThermoBaffle/temperatureThermoBaffleFvPatchScalarField.C b/src/regionModels/thermoBaffleModels/derivedFvPatchFields/temperatureThermoBaffle/temperatureThermoBaffleFvPatchScalarField.C index 082f6ae5d1..af07a07057 100644 --- a/src/regionModels/thermoBaffleModels/derivedFvPatchFields/temperatureThermoBaffle/temperatureThermoBaffleFvPatchScalarField.C +++ b/src/regionModels/thermoBaffleModels/derivedFvPatchFields/temperatureThermoBaffle/temperatureThermoBaffleFvPatchScalarField.C @@ -107,8 +107,8 @@ temperatureThermoBaffleFvPatchScalarField << exit(FatalError); } - const directMappedPatchBase& mpp = - refCast(patch().patch()); + const mappedPatchBase& mpp = + refCast(patch().patch()); const word nbrMesh = mpp.sampleRegion(); From f52a64b083ceed7213cdf032a999649c033341a2 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 8 Feb 2012 14:27:01 +0000 Subject: [PATCH 6/7] ENH: fanFvPatchField: generic DataEntry form allowed --- .../derived/fan/fanFvPatchField.C | 44 +++------ .../derived/fan/fanFvPatchField.H | 61 ++++++++++--- .../derived/fan/fanFvPatchFields.C | 90 +++++++++++++++---- 3 files changed, 134 insertions(+), 61 deletions(-) diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C index 0261efd54e..477b242b76 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,7 +24,6 @@ License \*---------------------------------------------------------------------------*/ #include "fanFvPatchField.H" -#include "IOmanip.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -36,7 +35,7 @@ Foam::fanFvPatchField::fanFvPatchField ) : fixedJumpFvPatchField(p, iF), - f_(0) + jumpTable_(0) {} @@ -50,7 +49,7 @@ Foam::fanFvPatchField::fanFvPatchField ) : fixedJumpFvPatchField(ptf, p, iF, mapper), - f_(ptf.f_) + jumpTable_(ptf.jumpTable_().clone().ptr()) {} @@ -63,28 +62,8 @@ Foam::fanFvPatchField::fanFvPatchField ) : fixedJumpFvPatchField(p, iF), - f_() -{ - { - Istream& is = dict.lookup("f"); - is.format(IOstream::ASCII); - is >> f_; - - // Check that f_ table is same on both sides.? - } - - if (dict.found("value")) - { - fvPatchField::operator= - ( - Field("value", dict, p.size()) - ); - } - else - { - this->evaluate(Pstream::blocking); - } -} + jumpTable_(DataEntry::New("jumpTable", dict)) +{} template @@ -95,7 +74,7 @@ Foam::fanFvPatchField::fanFvPatchField : cyclicLduInterfaceField(), fixedJumpFvPatchField(ptf), - f_(ptf.f_) + jumpTable_(ptf.jumpTable_().clone().ptr()) {} @@ -107,7 +86,7 @@ Foam::fanFvPatchField::fanFvPatchField ) : fixedJumpFvPatchField(ptf, iF), - f_(ptf.f_) + jumpTable_(ptf.jumpTable_().clone().ptr()) {} @@ -119,11 +98,10 @@ void Foam::fanFvPatchField::write(Ostream& os) const { fixedJumpFvPatchField::write(os); - - IOstream::streamFormat fmt0 = os.format(IOstream::ASCII); - os.writeKeyword("f") << f_ << token::END_STATEMENT << nl; - os.format(fmt0); - + if (this->cyclicPatch().owner()) + { + jumpTable_->writeData(os); + } this->writeEntry("value", os); } diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H index e93b697977..b3799c2bd9 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,7 +25,43 @@ Class Foam::fanFvPatchField Description - Foam::fanFvPatchField + Jump boundary condition. Operates on cyclic. Jump specified as a DataEntry. + (table, fileTable, csv etc.) + + Example of the boundary condition specification: + \verbatim + fan_half0 + { + type fan; + patchType cyclic; + jump uniform 0; + jumpTable csvFile; + csvFileCoeffs + { + hasHeaderLine 1; + refColumn 0; + componentColumns 1(1); + separator ","; + fileName "$FOAM_CASE/constant/pressureVsU"; + } + value uniform 0; + } + \endverbatim + + + Backwards compatibility: if the 'f' keyword is detected it assumes + it is a power of the flowrate. + + \verbatim + fan_half0 + { + type fan; + patchType cyclic; + jump uniform 0; + f 2(100 -0.1); + value uniform 0; + } + \endverbatim SourceFiles fanFvPatchField.C @@ -36,6 +72,7 @@ SourceFiles #define fanFvPatchField_H #include "fixedJumpFvPatchField.H" +#include "DataEntry.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -53,8 +90,8 @@ class fanFvPatchField { // Private data - //- Fan pressure rise polynomial coefficients - List f_; + //- Interpolation table + autoPtr > jumpTable_; public: @@ -126,15 +163,6 @@ public: // Member functions - // Access - - //- Return the polynomial coefficients - const List& f() const - { - return f_; - } - - // Evaluation functions //- Update the coefficients associated with the patch field @@ -148,6 +176,13 @@ public: //- Specialisation of the jump-condition for the pressure template<> +fanFvPatchField::fanFvPatchField +( + const fvPatch&, + const DimensionedField&, + const dictionary& +); +template<> void fanFvPatchField::updateCoeffs(); diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C index b3af1d2245..eacee81a37 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchFields.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,6 +27,8 @@ License #include "addToRunTimeSelectionTable.H" #include "volFields.H" #include "surfaceFields.H" +#include "Tuple2.H" +#include "polynomial.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -41,24 +43,87 @@ makeTemplatePatchTypeField fanFvPatchScalarField ); +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<> +Foam::fanFvPatchField::fanFvPatchField +( + const fvPatch& p, + const DimensionedField& iF, + const dictionary& dict +) +: + fixedJumpFvPatchField(p, iF), + jumpTable_(new DataEntry("jumpTable")) +{ + if (this->cyclicPatch().owner()) + { + if (dict.found("f")) + { + // Backwards compatibility + Istream& is = dict.lookup("f"); + is.format(IOstream::ASCII); + scalarList f(is); + + label nPows = 0; + forAll(f, powI) + { + if (mag(f[powI]) > VSMALL) + { + nPows++; + } + } + List > coeffs(nPows); + nPows = 0; + forAll(f, powI) + { + if (mag(f[powI]) > VSMALL) + { + coeffs[nPows++] = Tuple2(f[powI], powI); + } + } + + Pout<< "** coeffss:" << coeffs << endl; + + jumpTable_.reset + ( + new polynomial("jumpTable", coeffs) + ); + } + else + { + // Generic input constructed from dictionary + jumpTable_ = DataEntry::New("jumpTable", dict); + } + } + + + if (dict.found("value")) + { + fvPatchScalarField::operator= + ( + scalarField("value", dict, p.size()) + ); + } + else + { + this->evaluate(Pstream::blocking); + } +} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // //- Specialisation of the jump-condition for the pressure template<> void Foam::fanFvPatchField::updateCoeffs() { - if (updated()) + if (this->updated()) { return; } - // Note that the neighbour side jump_ data is never actually used; the - // jump() function just calls the owner side jump(). - - // Constant - jump_ = f_[0]; - - if (f_.size() > 1) + if (this->cyclicPatch().owner()) { const surfaceScalarField& phi = db().lookupObject("phi"); @@ -73,12 +138,7 @@ void Foam::fanFvPatchField::updateCoeffs() Un /= patch().lookupPatchField("rho"); } - for (label i=1; ivalue(Un); } fixedJumpFvPatchField::updateCoeffs(); From 3376610f4e427bf07c1a1521eab1503add6e5fba Mon Sep 17 00:00:00 2001 From: laurence Date: Wed, 8 Feb 2012 15:16:44 +0000 Subject: [PATCH 7/7] ENH: cvMesh: Add writeProcessorInterface function. Correct bug where List was used instead of DynamicList. --- .../conformalVoronoiMesh.C | 30 +++- .../conformalVoronoiMesh.H | 41 +++-- .../conformalVoronoiMeshCalcDualMesh.C | 141 +++++++++++------- .../conformalVoronoiMeshIO.C | 31 ++++ 4 files changed, 173 insertions(+), 70 deletions(-) diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C index 4e97af7a7a..7ca688a113 100644 --- a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C +++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C @@ -240,9 +240,9 @@ void Foam::conformalVoronoiMesh::insertPoints { label preDistributionSize(points.size()); - DynamicList transferPoints; + DynamicList transferPoints(points.size()/2); - List pointsOnProcessor; + DynamicList pointsOnProcessor(points.size()/2); for ( @@ -393,6 +393,30 @@ void Foam::conformalVoronoiMesh::insertPoints // Info<< returnReduce(pts.size(), sumOp