ENH: forces|Coeffs FO - updated coordinate system

This commit is contained in:
Andrew Heather
2021-12-03 11:44:09 +00:00
parent 8fc4501c46
commit 53e9c8eb5a
3 changed files with 44 additions and 41 deletions

View File

@ -89,17 +89,18 @@ void Foam::functionObjects::forceCoeffs::writeIntegratedHeader
Ostream& os Ostream& os
) const ) const
{ {
const auto& coordSys = coordSysPtr_();
writeHeader(os, "Force coefficients"); writeHeader(os, "Force coefficients");
writeHeaderValue(os, "dragDir", coordSys_.e1()); writeHeaderValue(os, "dragDir", coordSys.e1());
writeHeaderValue(os, "sideDir", coordSys_.e2()); writeHeaderValue(os, "sideDir", coordSys.e2());
writeHeaderValue(os, "liftDir", coordSys_.e3()); writeHeaderValue(os, "liftDir", coordSys.e3());
writeHeaderValue(os, "rollAxis", coordSys_.e1()); writeHeaderValue(os, "rollAxis", coordSys.e1());
writeHeaderValue(os, "pitchAxis", coordSys_.e2()); writeHeaderValue(os, "pitchAxis", coordSys.e2());
writeHeaderValue(os, "yawAxis", coordSys_.e3()); writeHeaderValue(os, "yawAxis", coordSys.e3());
writeHeaderValue(os, "magUInf", magUInf_); writeHeaderValue(os, "magUInf", magUInf_);
writeHeaderValue(os, "lRef", lRef_); writeHeaderValue(os, "lRef", lRef_);
writeHeaderValue(os, "Aref", Aref_); writeHeaderValue(os, "Aref", Aref_);
writeHeaderValue(os, "CofR", coordSys_.origin()); writeHeaderValue(os, "CofR", coordSys.origin());
writeHeader(os, ""); writeHeader(os, "");
writeCommented(os, "Time"); writeCommented(os, "Time");
writeTabbed(os, "Cd"); writeTabbed(os, "Cd");
@ -362,10 +363,12 @@ bool Foam::functionObjects::forceCoeffs::execute()
const scalar momentScaling = 1.0/(Aref_*pDyn*lRef_ + SMALL); const scalar momentScaling = 1.0/(Aref_*pDyn*lRef_ + SMALL);
const scalar forceScaling = 1.0/(Aref_*pDyn + SMALL); const scalar forceScaling = 1.0/(Aref_*pDyn + SMALL);
const auto& coordSys = coordSysPtr_();
forAll(liftCoeffs, i) forAll(liftCoeffs, i)
{ {
const Field<vector> localForce(coordSys_.localVector(force_[i])); const Field<vector> localForce(coordSys.localVector(force_[i]));
const Field<vector> localMoment(coordSys_.localVector(moment_[i])); const Field<vector> localMoment(coordSys.localVector(moment_[i]));
dragCoeffs[i] = forceScaling*(localForce.component(0)); dragCoeffs[i] = forceScaling*(localForce.component(0));
sideCoeffs[i] = forceScaling*(localForce.component(1)); sideCoeffs[i] = forceScaling*(localForce.component(1));

View File

@ -77,7 +77,7 @@ void Foam::functionObjects::forces::writeIntegratedHeader
) const ) const
{ {
writeHeader(os, header); writeHeader(os, header);
writeHeaderValue(os, "CofR", coordSys_.origin()); writeHeaderValue(os, "CofR", coordSysPtr_->origin());
writeHeader(os, ""); writeHeader(os, "");
writeCommented(os, "Time"); writeCommented(os, "Time");
writeTabbed(os, "(total_x total_y total_z)"); writeTabbed(os, "(total_x total_y total_z)");
@ -156,17 +156,17 @@ void Foam::functionObjects::forces::setCoordinateSystem
const word& e1Name 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 ? const vector e3 = e3Name == word::null ?
vector(0, 0, 1) : dict.get<vector>(e3Name); vector(0, 0, 1) : dict.get<vector>(e3Name);
const vector e1 = e1Name == word::null ? const vector e1 = e1Name == word::null ?
vector(1, 0, 0) : dict.get<vector>(e1Name); vector(1, 0, 0) : dict.get<vector>(e1Name);
coordSys_ = coordSysPtr_.reset(new coordSystem::cartesian(origin, e3, e1));
coordSystem::cartesian(coordSys_.origin(), e3, e1);
} }
else else
{ {
@ -176,7 +176,7 @@ void Foam::functionObjects::forces::setCoordinateSystem
if (dict.found(coordinateSystem::typeName_())) if (dict.found(coordinateSystem::typeName_()))
{ {
// New() for access to indirect (global) coordinate system // New() for access to indirect (global) coordinate system
coordSys_ = coordSysPtr_ =
coordinateSystem::New coordinateSystem::New
( (
obr_, obr_,
@ -186,7 +186,7 @@ void Foam::functionObjects::forces::setCoordinateSystem
} }
else 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; Log << type() << " " << name() << " write:" << nl;
const auto& coordSys = coordSysPtr_();
writeIntegratedForceMoment writeIntegratedForceMoment
( (
"forces", "forces",
coordSys_.localVector(force_[0]), coordSys.localVector(force_[0]),
coordSys_.localVector(force_[1]), coordSys.localVector(force_[1]),
coordSys_.localVector(force_[2]), coordSys.localVector(force_[2]),
forceFilePtr_ forceFilePtr_
); );
writeIntegratedForceMoment writeIntegratedForceMoment
( (
"moments", "moments",
coordSys_.localVector(moment_[0]), coordSys.localVector(moment_[0]),
coordSys_.localVector(moment_[1]), coordSys.localVector(moment_[1]),
coordSys_.localVector(moment_[2]), coordSys.localVector(moment_[2]),
momentFilePtr_ momentFilePtr_
); );
@ -673,14 +675,16 @@ void Foam::functionObjects::forces::writeBinnedForceMoment
void Foam::functionObjects::forces::writeBins() void Foam::functionObjects::forces::writeBins()
{ {
const auto& coordSys = coordSysPtr_();
List<Field<vector>> lf(3); List<Field<vector>> lf(3);
List<Field<vector>> lm(3); List<Field<vector>> lm(3);
lf[0] = coordSys_.localVector(force_[0]); lf[0] = coordSys.localVector(force_[0]);
lf[1] = coordSys_.localVector(force_[1]); lf[1] = coordSys.localVector(force_[1]);
lf[2] = coordSys_.localVector(force_[2]); lf[2] = coordSys.localVector(force_[2]);
lm[0] = coordSys_.localVector(moment_[0]); lm[0] = coordSys.localVector(moment_[0]);
lm[1] = coordSys_.localVector(moment_[1]); lm[1] = coordSys.localVector(moment_[1]);
lm[2] = coordSys_.localVector(moment_[2]); lm[2] = coordSys.localVector(moment_[2]);
writeBinnedForceMoment(lf, forceBinFilePtr_); writeBinnedForceMoment(lf, forceBinFilePtr_);
writeBinnedForceMoment(lm, momentBinFilePtr_); writeBinnedForceMoment(lm, momentBinFilePtr_);
@ -713,7 +717,7 @@ Foam::functionObjects::forces::forces
fDName_("fD"), fDName_("fD"),
rhoRef_(VGREAT), rhoRef_(VGREAT),
pRef_(0), pRef_(0),
coordSys_(), coordSysPtr_(nullptr),
porosity_(false), porosity_(false),
nBin_(1), nBin_(1),
binDir_(Zero), binDir_(Zero),
@ -758,7 +762,7 @@ Foam::functionObjects::forces::forces
fDName_("fD"), fDName_("fD"),
rhoRef_(VGREAT), rhoRef_(VGREAT),
pRef_(0), pRef_(0),
coordSys_(), coordSysPtr_(nullptr),
porosity_(false), porosity_(false),
nBin_(1), nBin_(1),
binDir_(Zero), binDir_(Zero),
@ -950,6 +954,8 @@ void Foam::functionObjects::forces::calcForcesMoment()
resetFields(); resetFields();
const point& origin = coordSysPtr_->origin();
if (directForceDensity_) if (directForceDensity_)
{ {
const volVectorField& fD = lookupObject<volVectorField>(fDName_); const volVectorField& fD = lookupObject<volVectorField>(fDName_);
@ -958,10 +964,7 @@ void Foam::functionObjects::forces::calcForcesMoment()
for (const label patchi : patchSet_) for (const label patchi : patchSet_)
{ {
vectorField Md vectorField Md(mesh_.C().boundaryField()[patchi] - origin);
(
mesh_.C().boundaryField()[patchi] - coordSys_.origin()
);
scalarField sA(mag(Sfb[patchi])); scalarField sA(mag(Sfb[patchi]));
@ -1000,10 +1003,7 @@ void Foam::functionObjects::forces::calcForcesMoment()
for (const label patchi : patchSet_) for (const label patchi : patchSet_)
{ {
vectorField Md vectorField Md(mesh_.C().boundaryField()[patchi] - origin);
(
mesh_.C().boundaryField()[patchi] - coordSys_.origin()
);
vectorField fN vectorField fN
( (
@ -1052,7 +1052,7 @@ void Foam::functionObjects::forces::calcForcesMoment()
const vectorField d(mesh_.C(), cZone); const vectorField d(mesh_.C(), cZone);
const vectorField fP(fPTot, cZone); const vectorField fP(fPTot, cZone);
const vectorField Md(d - coordSys_.origin()); const vectorField Md(d - origin);
const vectorField fDummy(Md.size(), Zero); const vectorField fDummy(Md.size(), Zero);

View File

@ -141,7 +141,7 @@ SourceFiles
#include "fvMeshFunctionObject.H" #include "fvMeshFunctionObject.H"
#include "writeFile.H" #include "writeFile.H"
#include "cartesianCS.H" #include "coordinateSystem.H"
#include "volFieldsFwd.H" #include "volFieldsFwd.H"
#include "HashSet.H" #include "HashSet.H"
#include "Tuple2.H" #include "Tuple2.H"
@ -217,7 +217,7 @@ protected:
scalar pRef_; scalar pRef_;
//- Coordinate system used when evaluating forces/moments //- Coordinate system used when evaluating forces/moments
coordSystem::cartesian coordSys_; autoPtr<coordinateSystem> coordSysPtr_;
//- Flag to include porosity effects //- Flag to include porosity effects
bool porosity_; bool porosity_;