From a82d85791f0b1cf9db3150b4ada8aea481593a3a Mon Sep 17 00:00:00 2001 From: andy <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 | 258 +++++++++++------- .../functionObjects/forces/forces/forces.H | 8 +- 2 files changed, 169 insertions(+), 97 deletions(-) diff --git a/src/postProcessing/functionObjects/forces/forces/forces.C b/src/postProcessing/functionObjects/forces/forces/forces.C index eefc8284445..012ab5d4971 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 * * * * * * * * * * * // +Foam::wordList Foam::forces::createFileNames(const dictionary& dict) const +{ + DynamicList<word> names(1); + + const word forceType(dict.lookup("type")); + + if (dict.found("binData")) + { + const dictionary& binDict(dict.subDict("binData")); + label nb = readLabel(binDict.lookup("nBin")); + if (nb > 0) + { + names.append(forceType + "_bins"); + } + } + + names.append(forceType); + + return names; +} + + void Foam::forces::writeFileHeader(const label i) { - file() - << "# Time" << tab - << "forces(pressure, viscous, porous) " - << "moment(pressure, viscous, porous)"; + if (i == 0) + { + // force data - if (localSystem_) + 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) { - file() - << tab - << "local forces(pressure, viscous, porous) " - << "local moment(pressure, viscous, porous)"; + // 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()<< endl; + file(i)<< endl; } @@ -249,25 +315,66 @@ void Foam::forces::applyBins } -void Foam::forces::writeBins() const +void Foam::forces::writeForces() { - if (nBin_ == 1) + if (log_) { - return; + 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; } - autoPtr<writer<vector> > binWriterPtr(writer<vector>::New(binFormat_)); - coordSet axis("forces", "distance", binPoints_, mag(binPoints_)); + 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; - fileName forcesDir = baseTimeDir(); - mkDir(forcesDir); - - if (log_) + if (localSystem_) { - Info<< " Writing bins to " << forcesDir << endl; + 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; } +} + - wordList fieldNames(IStringStream("(pressure viscous porous)")()); +void Foam::forces::writeBins() +{ + if (nBin_ == 1) + { + return; + } List<Field<vector> > f(force_); List<Field<vector> > 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<Field<vector> > localForce(3); - List<Field<vector> > 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<Field<vector> > lf(3); + List<Field<vector> > 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 793cf78cbf0..079c6e483db 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&); -- GitLab