diff --git a/etc/controlDict b/etc/controlDict index c1d7416515f2c7495b8350794ebdfb52748b47a5..6f47c9c2732542251e5f0d5c509dde38643e960e 100644 --- a/etc/controlDict +++ b/etc/controlDict @@ -377,6 +377,7 @@ DebugSwitches displacementLaplacian 0; displacementSBRStress 0; distanceSurface 0; + distribution 0; downwind 0; dragModel 0; duplicatePoints 0; diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C index 439ed64bdf06229f8b13fd6424a9336f14f43187..7cc9e70c0ef6413a086dc1f33c8aefdaaa242840 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C @@ -25,27 +25,49 @@ License \*----------------------------------------------------------------------------*/ #include "distribution.H" +#include "OFstream.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { + defineTypeNameAndDebug(distribution, 0); +} + +// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // + +void Foam::distribution::write +( + const fileName& file, + const List<Pair<scalar> >& pairs +) +{ + OFstream os(file); + + forAll(pairs, i) + { + os << pairs[i].first() << ' ' << pairs[i].second() << nl; + } +} + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -distribution::distribution() +Foam::distribution::distribution() : Map<label>(), binWidth_(1) {} -distribution::distribution(const scalar binWidth) +Foam::distribution::distribution(const scalar binWidth) : Map<label>(), binWidth_(binWidth) {} -distribution::distribution(const distribution& d) +Foam::distribution::distribution(const distribution& d) : Map<label>(static_cast< Map<label> >(d)), binWidth_(d.binWidth()) @@ -54,13 +76,13 @@ distribution::distribution(const distribution& d) // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // -distribution::~distribution() +Foam::distribution::~distribution() {} // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -label distribution::totalEntries() const +Foam::label Foam::distribution::totalEntries() const { label sumOfEntries = 0; @@ -88,7 +110,7 @@ label distribution::totalEntries() const } -scalar distribution::approxTotalEntries() const +Foam::scalar Foam::distribution::approxTotalEntries() const { scalar sumOfEntries = 0; @@ -101,7 +123,7 @@ scalar distribution::approxTotalEntries() const } -scalar distribution::mean() const +Foam::scalar Foam::distribution::mean() const { scalar runningSum = 0; @@ -124,7 +146,7 @@ scalar distribution::mean() const } -scalar distribution::median() +Foam::scalar Foam::distribution::median() { // From: // http://mathworld.wolfram.com/StatisticalMedian.html @@ -188,7 +210,7 @@ scalar distribution::median() } -void distribution::add(const scalar valueToAdd) +void Foam::distribution::add(const scalar valueToAdd) { iterator iter(this->begin()); @@ -218,13 +240,13 @@ void distribution::add(const scalar valueToAdd) } -void distribution::add(const label valueToAdd) +void Foam::distribution::add(const label valueToAdd) { add(scalar(valueToAdd)); } -void distribution::insertMissingKeys() +void Foam::distribution::insertMissingKeys() { iterator iter(this->begin()); @@ -247,7 +269,7 @@ void distribution::insertMissingKeys() } -List< Pair<scalar> > distribution::normalised() +Foam::List<Foam::Pair<Foam::scalar> > Foam::distribution::normalised() { scalar totEnt = approxTotalEntries(); @@ -268,17 +290,25 @@ List< Pair<scalar> > distribution::normalised() normDist[k].second() = scalar((*this)[key])/totEnt/binWidth_; } + if (debug) + { + Info<< "totEnt: " << totEnt << endl; + } + return normDist; } -List< Pair<scalar> > distribution::normalisedMinusMean() +Foam::List<Foam::Pair<Foam::scalar> > Foam::distribution::normalisedMinusMean() { return normalisedShifted(mean()); } -List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue) +Foam::List<Foam::Pair<Foam::scalar> > Foam::distribution::normalisedShifted +( + scalar shiftValue +) { List<Pair<scalar> > oldDist(normalised()); @@ -301,20 +331,23 @@ List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue) label newKey = lowestNewKey; -// Info << shiftValue -// << nl << lowestOldBin -// << nl << lowestNewKey -// << nl << interpolationStartDirection -// << endl; + if (debug) + { + Info<< shiftValue + << nl << lowestOldBin + << nl << lowestNewKey + << nl << interpolationStartDirection + << endl; -// scalar checkNormalisation = 0; + scalar checkNormalisation = 0; -// forAll (oldDist, oD) -// { -// checkNormalisation += oldDist[oD].second()*binWidth_; -// } + forAll (oldDist, oD) + { + checkNormalisation += oldDist[oD].second()*binWidth_; + } -// Info << "Initial normalisation = " << checkNormalisation << endl; + Info<< "Initial normalisation = " << checkNormalisation << endl; + } forAll(oldDist,u) { @@ -368,20 +401,23 @@ List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue) newKey++; } -// checkNormalisation = 0; + if (debug) + { + scalar checkNormalisation = 0; -// forAll (newDist, nD) -// { -// checkNormalisation += newDist[nD].second()*binWidth_; -// } + forAll (newDist, nD) + { + checkNormalisation += newDist[nD].second()*binWidth_; + } -// Info << "Shifted normalisation = " << checkNormalisation << endl; + Info<< "Shifted normalisation = " << checkNormalisation << endl; + } return newDist; } -List<Pair<scalar> > distribution::raw() +Foam::List<Foam::Pair<Foam::scalar> > Foam::distribution::raw() { insertMissingKeys(); @@ -406,7 +442,7 @@ List<Pair<scalar> > distribution::raw() // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // -void distribution::operator=(const distribution& rhs) +void Foam::distribution::operator=(const distribution& rhs) { // Check for assignment to self if (this == &rhs) @@ -424,7 +460,7 @@ void distribution::operator=(const distribution& rhs) // * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // -Ostream& operator<<(Ostream& os, const distribution& d) +Foam::Ostream& Foam::operator<<(Ostream& os, const distribution& d) { os << d.binWidth_ << static_cast<const Map<label>&>(d); @@ -440,8 +476,4 @@ Ostream& operator<<(Ostream& os, const distribution& d) } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H index da1ce973bc7d3fa9dceabbcf4dd2e5f2b39a1b87..d86ae83934966791471978c1e657d1ce6a7f346c 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H @@ -26,6 +26,8 @@ Class Foam::distribution Description + Accumulating histogram of values. Specified bin resolution + automatic generation of bins. SourceFiles distributionI.H @@ -59,6 +61,21 @@ class distribution public: + //- Runtime type information + + TypeName("distribution"); + + // Static functions + + //- write to file + + static void write + ( + const fileName& file, + const List<Pair<scalar> >& pairs + ); + + // Constructors //- Construct null @@ -73,7 +90,7 @@ public: // Destructor - ~distribution(); + virtual ~distribution(); // Member Functions @@ -97,7 +114,7 @@ public: List<Pair<scalar> > normalisedMinusMean(); - List<Pair<scalar> > normalisedShifted(const scalar shiftValue); + List<Pair<scalar> > normalisedShifted(scalar shiftValue); List<Pair<scalar> > raw();