From 53e9c8eb5ab0eb3c715db2b4f76bf8319964afd1 Mon Sep 17 00:00:00 2001 From: Andrew Heather <> Date: Fri, 3 Dec 2021 11:44:09 +0000 Subject: [PATCH] ENH: forces|Coeffs FO - updated coordinate system --- .../forces/forceCoeffs/forceCoeffs.C | 21 ++++--- src/functionObjects/forces/forces/forces.C | 60 +++++++++---------- src/functionObjects/forces/forces/forces.H | 4 +- 3 files changed, 44 insertions(+), 41 deletions(-) diff --git a/src/functionObjects/forces/forceCoeffs/forceCoeffs.C b/src/functionObjects/forces/forceCoeffs/forceCoeffs.C index b57bf9d2b8e..376df8038e3 100644 --- a/src/functionObjects/forces/forceCoeffs/forceCoeffs.C +++ b/src/functionObjects/forces/forceCoeffs/forceCoeffs.C @@ -89,17 +89,18 @@ void Foam::functionObjects::forceCoeffs::writeIntegratedHeader Ostream& os ) const { + const auto& coordSys = coordSysPtr_(); writeHeader(os, "Force coefficients"); - writeHeaderValue(os, "dragDir", coordSys_.e1()); - writeHeaderValue(os, "sideDir", coordSys_.e2()); - writeHeaderValue(os, "liftDir", coordSys_.e3()); - writeHeaderValue(os, "rollAxis", coordSys_.e1()); - writeHeaderValue(os, "pitchAxis", coordSys_.e2()); - writeHeaderValue(os, "yawAxis", coordSys_.e3()); + writeHeaderValue(os, "dragDir", coordSys.e1()); + writeHeaderValue(os, "sideDir", coordSys.e2()); + writeHeaderValue(os, "liftDir", coordSys.e3()); + writeHeaderValue(os, "rollAxis", coordSys.e1()); + writeHeaderValue(os, "pitchAxis", coordSys.e2()); + writeHeaderValue(os, "yawAxis", coordSys.e3()); writeHeaderValue(os, "magUInf", magUInf_); writeHeaderValue(os, "lRef", lRef_); writeHeaderValue(os, "Aref", Aref_); - writeHeaderValue(os, "CofR", coordSys_.origin()); + writeHeaderValue(os, "CofR", coordSys.origin()); writeHeader(os, ""); writeCommented(os, "Time"); writeTabbed(os, "Cd"); @@ -362,10 +363,12 @@ bool Foam::functionObjects::forceCoeffs::execute() const scalar momentScaling = 1.0/(Aref_*pDyn*lRef_ + SMALL); const scalar forceScaling = 1.0/(Aref_*pDyn + SMALL); + const auto& coordSys = coordSysPtr_(); + forAll(liftCoeffs, i) { - const Field<vector> localForce(coordSys_.localVector(force_[i])); - const Field<vector> localMoment(coordSys_.localVector(moment_[i])); + const Field<vector> localForce(coordSys.localVector(force_[i])); + const Field<vector> localMoment(coordSys.localVector(moment_[i])); dragCoeffs[i] = forceScaling*(localForce.component(0)); sideCoeffs[i] = forceScaling*(localForce.component(1)); diff --git a/src/functionObjects/forces/forces/forces.C b/src/functionObjects/forces/forces/forces.C index dbf2abe1e48..7d6b61f480a 100644 --- a/src/functionObjects/forces/forces/forces.C +++ b/src/functionObjects/forces/forces/forces.C @@ -77,7 +77,7 @@ void Foam::functionObjects::forces::writeIntegratedHeader ) const { writeHeader(os, header); - writeHeaderValue(os, "CofR", coordSys_.origin()); + writeHeaderValue(os, "CofR", coordSysPtr_->origin()); writeHeader(os, ""); writeCommented(os, "Time"); writeTabbed(os, "(total_x total_y total_z)"); @@ -156,17 +156,17 @@ void Foam::functionObjects::forces::setCoordinateSystem const word& e1Name ) { - coordSys_.clear(); + coordSysPtr_.clear(); - if (dict.readIfPresent<point>("CofR", coordSys_.origin())) + point origin(Zero); + if (dict.readIfPresent<point>("CofR", origin)) { const vector e3 = e3Name == word::null ? vector(0, 0, 1) : dict.get<vector>(e3Name); const vector e1 = e1Name == word::null ? vector(1, 0, 0) : dict.get<vector>(e1Name); - coordSys_ = - coordSystem::cartesian(coordSys_.origin(), e3, e1); + coordSysPtr_.reset(new coordSystem::cartesian(origin, e3, e1)); } else { @@ -176,7 +176,7 @@ void Foam::functionObjects::forces::setCoordinateSystem if (dict.found(coordinateSystem::typeName_())) { // New() for access to indirect (global) coordinate system - coordSys_ = + coordSysPtr_ = coordinateSystem::New ( obr_, @@ -186,7 +186,7 @@ void Foam::functionObjects::forces::setCoordinateSystem } else { - coordSys_ = coordSystem::cartesian(dict); + coordSysPtr_.reset(new coordSystem::cartesian(dict)); } } @@ -604,21 +604,23 @@ void Foam::functionObjects::forces::writeForces() { Log << type() << " " << name() << " write:" << nl; + const auto& coordSys = coordSysPtr_(); + writeIntegratedForceMoment ( "forces", - coordSys_.localVector(force_[0]), - coordSys_.localVector(force_[1]), - coordSys_.localVector(force_[2]), + coordSys.localVector(force_[0]), + coordSys.localVector(force_[1]), + coordSys.localVector(force_[2]), forceFilePtr_ ); writeIntegratedForceMoment ( "moments", - coordSys_.localVector(moment_[0]), - coordSys_.localVector(moment_[1]), - coordSys_.localVector(moment_[2]), + coordSys.localVector(moment_[0]), + coordSys.localVector(moment_[1]), + coordSys.localVector(moment_[2]), momentFilePtr_ ); @@ -673,14 +675,16 @@ void Foam::functionObjects::forces::writeBinnedForceMoment void Foam::functionObjects::forces::writeBins() { + const auto& coordSys = coordSysPtr_(); + 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]); + 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]); writeBinnedForceMoment(lf, forceBinFilePtr_); writeBinnedForceMoment(lm, momentBinFilePtr_); @@ -713,7 +717,7 @@ Foam::functionObjects::forces::forces fDName_("fD"), rhoRef_(VGREAT), pRef_(0), - coordSys_(), + coordSysPtr_(nullptr), porosity_(false), nBin_(1), binDir_(Zero), @@ -758,7 +762,7 @@ Foam::functionObjects::forces::forces fDName_("fD"), rhoRef_(VGREAT), pRef_(0), - coordSys_(), + coordSysPtr_(nullptr), porosity_(false), nBin_(1), binDir_(Zero), @@ -950,6 +954,8 @@ void Foam::functionObjects::forces::calcForcesMoment() resetFields(); + const point& origin = coordSysPtr_->origin(); + if (directForceDensity_) { const volVectorField& fD = lookupObject<volVectorField>(fDName_); @@ -958,10 +964,7 @@ void Foam::functionObjects::forces::calcForcesMoment() for (const label patchi : patchSet_) { - vectorField Md - ( - mesh_.C().boundaryField()[patchi] - coordSys_.origin() - ); + vectorField Md(mesh_.C().boundaryField()[patchi] - origin); scalarField sA(mag(Sfb[patchi])); @@ -1000,10 +1003,7 @@ void Foam::functionObjects::forces::calcForcesMoment() for (const label patchi : patchSet_) { - vectorField Md - ( - mesh_.C().boundaryField()[patchi] - coordSys_.origin() - ); + vectorField Md(mesh_.C().boundaryField()[patchi] - origin); vectorField fN ( @@ -1052,7 +1052,7 @@ void Foam::functionObjects::forces::calcForcesMoment() const vectorField d(mesh_.C(), cZone); const vectorField fP(fPTot, cZone); - const vectorField Md(d - coordSys_.origin()); + const vectorField Md(d - origin); const vectorField fDummy(Md.size(), Zero); diff --git a/src/functionObjects/forces/forces/forces.H b/src/functionObjects/forces/forces/forces.H index 6abb8cec658..23dc50d05fd 100644 --- a/src/functionObjects/forces/forces/forces.H +++ b/src/functionObjects/forces/forces/forces.H @@ -141,7 +141,7 @@ SourceFiles #include "fvMeshFunctionObject.H" #include "writeFile.H" -#include "cartesianCS.H" +#include "coordinateSystem.H" #include "volFieldsFwd.H" #include "HashSet.H" #include "Tuple2.H" @@ -217,7 +217,7 @@ protected: scalar pRef_; //- Coordinate system used when evaluating forces/moments - coordSystem::cartesian coordSys_; + autoPtr<coordinateSystem> coordSysPtr_; //- Flag to include porosity effects bool porosity_; -- GitLab