From a82d85791f0b1cf9db3150b4ada8aea481593a3a Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 26 Jul 2013 15:24:28 +0100 Subject: [PATCH] ENH: forces - updated writing of data to file --- .../functionObjects/forces/forces/forces.C | 266 +++++++++++------- .../functionObjects/forces/forces/forces.H | 8 +- 2 files changed, 173 insertions(+), 101 deletions(-) diff --git a/src/postProcessing/functionObjects/forces/forces/forces.C b/src/postProcessing/functionObjects/forces/forces/forces.C index eefc828444..012ab5d497 100644 --- a/src/postProcessing/functionObjects/forces/forces/forces.C +++ b/src/postProcessing/functionObjects/forces/forces/forces.C @@ -45,22 +45,88 @@ defineTypeNameAndDebug(forces, 0); // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -void Foam::forces::writeFileHeader(const label i) +Foam::wordList Foam::forces::createFileNames(const dictionary& dict) const { - file() - << "# Time" << tab - << "forces(pressure, viscous, porous) " - << "moment(pressure, viscous, porous)"; + DynamicList names(1); - if (localSystem_) + const word forceType(dict.lookup("type")); + + if (dict.found("binData")) { - file() - << tab - << "local forces(pressure, viscous, porous) " - << "local moment(pressure, viscous, porous)"; + const dictionary& binDict(dict.subDict("binData")); + label nb = readLabel(binDict.lookup("nBin")); + if (nb > 0) + { + names.append(forceType + "_bins"); + } } - file()<< endl; + names.append(forceType); + + return names; +} + + +void Foam::forces::writeFileHeader(const label i) +{ + if (i == 0) + { + // force data + + file(i) + << "# Time" << tab + << "forces(pressure,viscous,porous) " + << "moment(pressure,viscous,porous)"; + + if (localSystem_) + { + file(i) + << tab + << "localForces(pressure,viscous,porous) " + << "localMoments(pressure,viscous,porous)"; + } + } + else if (i == 1) + { + // bin data + + file(i) + << "# bins : " << nBin_ << nl + << "# start : " << binMin_ << nl + << "# delta : " << binDx_ << nl + << "# direction : " << binDir_ << nl + << "# Time"; + + for (label j = 0; j < nBin_; j++) + { + const word jn = Foam::name(j); + + file(i) + << tab + << "forces" << jn << "(pressure,viscous,porous) " + << "moment" << jn << "(pressure,viscous,porous)"; + } + if (localSystem_) + { + for (label j = 0; j < nBin_; j++) + { + const word jn = Foam::name(j); + + file(i) + << tab + << "localForces" << jn << "(pressure,viscous,porous) " + << "localMoments" << jn << "(pressure,viscous,porous)"; + } + } + } + else + { + FatalErrorIn("void Foam::forces::writeFileHeader(const label)") + << "Unhandled file index: " << i + << abort(FatalError); + } + + file(i)<< endl; } @@ -249,26 +315,67 @@ void Foam::forces::applyBins } -void Foam::forces::writeBins() const +void Foam::forces::writeForces() +{ + if (log_) + { + Info<< type() << " output:" << nl + << " forces(pressure,viscous,porous) = (" + << sum(force_[0]) << "," + << sum(force_[1]) << "," + << sum(force_[2]) << ")" << nl + << " moment(pressure,viscous,porous) = (" + << sum(moment_[0]) << "," + << sum(moment_[1]) << "," + << sum(moment_[2]) << ")" + << nl; + } + + file(0) << obr_.time().value() << tab + << "(" + << sum(force_[0]) << "," + << sum(force_[1]) << "," + << sum(force_[2]) + << ") " + << "(" + << sum(moment_[0]) << "," + << sum(moment_[1]) << "," + << sum(moment_[2]) + << ")" + << endl; + + if (localSystem_) + { + vectorField localForceN(coordSys_.localVector(force_[0])); + vectorField localForceT(coordSys_.localVector(force_[1])); + vectorField localForceP(coordSys_.localVector(force_[2])); + vectorField localMomentN(coordSys_.localVector(moment_[0])); + vectorField localMomentT(coordSys_.localVector(moment_[1])); + vectorField localMomentP(coordSys_.localVector(moment_[2])); + + file(0) << obr_.time().value() << tab + << "(" + << sum(localForceN) << "," + << sum(localForceT) << "," + << sum(localForceP) + << ") " + << "(" + << sum(localMomentN) << "," + << sum(localMomentT) << "," + << sum(localMomentP) + << ")" + << endl; + } +} + + +void Foam::forces::writeBins() { if (nBin_ == 1) { return; } - autoPtr > binWriterPtr(writer::New(binFormat_)); - coordSet axis("forces", "distance", binPoints_, mag(binPoints_)); - - fileName forcesDir = baseTimeDir(); - mkDir(forcesDir); - - if (log_) - { - Info<< " Writing bins to " << forcesDir << endl; - } - - wordList fieldNames(IStringStream("(pressure viscous porous)")()); - List > f(force_); List > m(moment_); @@ -286,43 +393,50 @@ void Foam::forces::writeBins() const } } - OFstream osForce(forcesDir/"force_bins"); - binWriterPtr->write(axis, fieldNames, f, osForce); - - OFstream osMoment(forcesDir/"moment_bins"); - binWriterPtr->write(axis, fieldNames, m, osMoment); + file(1) << obr_.time().value(); + forAll(f[0], i) + { + file(1) + << tab + << "(" << f[0][i] << "," << f[1][i] << "," << f[2][i] << ") " + << "(" << m[0][i] << "," << m[1][i] << "," << m[2][i] << ")"; + } if (localSystem_) { - List > localForce(3); - List > localMoment(3); - localForce[0] = coordSys_.localVector(force_[0]); - localForce[1] = coordSys_.localVector(force_[1]); - localForce[2] = coordSys_.localVector(force_[2]); - localMoment[0] = coordSys_.localVector(moment_[0]); - localMoment[1] = coordSys_.localVector(moment_[1]); - localMoment[2] = coordSys_.localVector(moment_[2]); + List > lf(3); + List > lm(3); + lf[0] = coordSys_.localVector(force_[0]); + lf[1] = coordSys_.localVector(force_[1]); + lf[2] = coordSys_.localVector(force_[2]); + lm[0] = coordSys_.localVector(moment_[0]); + lm[1] = coordSys_.localVector(moment_[1]); + lm[2] = coordSys_.localVector(moment_[2]); if (binCumulative_) { - for (label i = 1; i < localForce[0].size(); i++) + for (label i = 1; i < lf[0].size(); i++) { - localForce[0][i] += localForce[0][i-1]; - localForce[1][i] += localForce[1][i-1]; - localForce[2][i] += localForce[2][i-1]; - localMoment[0][i] += localMoment[0][i-1]; - localMoment[1][i] += localMoment[1][i-1]; - localMoment[2][i] += localMoment[2][i-1]; + lf[0][i] += lf[0][i-1]; + lf[1][i] += lf[1][i-1]; + lf[2][i] += lf[2][i-1]; + lm[0][i] += lm[0][i-1]; + lm[1][i] += lm[1][i-1]; + lm[2][i] += lm[2][i-1]; } } - OFstream osLocalForce(forcesDir/"force_local"); - binWriterPtr->write(axis, fieldNames, localForce, osLocalForce); - - OFstream osLocalMoment(forcesDir/"moment_local"); - binWriterPtr->write(axis, fieldNames, localMoment, osLocalMoment); + forAll(lf[0], i) + { + file(1) + << tab + << "(" << lf[0][i] << "," << lf[1][i] << "," << lf[2][i] << ") " + << "(" << lm[0][i] << "," << lm[1][i] << "," << lm[2][i] << ")"; + } } + + file(1) << endl; } @@ -336,7 +450,7 @@ Foam::forces::forces const bool loadFromFiles ) : - functionObjectFile(obr, name, word(dict.lookup("type"))), + functionObjectFile(obr, name, createFileNames(dict)), name_(name), obr_(obr), active_(true), @@ -642,55 +756,7 @@ void Foam::forces::write() { functionObjectFile::write(); - if (log_) - { - Info<< type() << " output:" << nl - << " forces(pressure,viscous,porous) = (" - << sum(force_[0]) << "," - << sum(force_[1]) << "," - << sum(force_[2]) << ")" << nl - << " moment(pressure,viscous,porous) = (" - << sum(moment_[0]) << "," - << sum(moment_[1]) << "," - << sum(moment_[2]) << ")" - << nl; - } - - file() << obr_.time().value() << tab - << "(" - << sum(force_[0]) << "," - << sum(force_[1]) << "," - << sum(force_[2]) - << ") " - << "(" - << sum(moment_[0]) << "," - << sum(moment_[1]) << "," - << sum(moment_[2]) - << ")" - << endl; - - if (localSystem_) - { - vectorField localForceN(coordSys_.localVector(force_[0])); - vectorField localForceT(coordSys_.localVector(force_[1])); - vectorField localForceP(coordSys_.localVector(force_[2])); - vectorField localMomentN(coordSys_.localVector(moment_[0])); - vectorField localMomentT(coordSys_.localVector(moment_[1])); - vectorField localMomentP(coordSys_.localVector(moment_[2])); - - file() << obr_.time().value() << tab - << "(" - << sum(localForceN) << "," - << sum(localForceT) << "," - << sum(localForceP) - << ") " - << "(" - << sum(localMomentN) << "," - << sum(localMomentT) << "," - << sum(localMomentP) - << ")" - << endl; - } + writeForces(); writeBins(); diff --git a/src/postProcessing/functionObjects/forces/forces/forces.H b/src/postProcessing/functionObjects/forces/forces/forces.H index 793cf78cbf..079c6e483d 100644 --- a/src/postProcessing/functionObjects/forces/forces/forces.H +++ b/src/postProcessing/functionObjects/forces/forces/forces.H @@ -218,6 +218,9 @@ protected: // Protected Member Functions + //- Create file names for forces and bins + wordList createFileNames(const dictionary& dict) const; + //- Output file header information virtual void writeFileHeader(const label i); @@ -244,8 +247,11 @@ protected: const vectorField& d ); + //- Helper function to write force data + void writeForces(); + //- Helper function to write bin data - void writeBins() const; + void writeBins(); //- Disallow default bitwise copy construct forces(const forces&);