mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: forces|Coeffs FO - updated coordinate system
This commit is contained in:
@ -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));
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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_;
|
||||||
|
|||||||
Reference in New Issue
Block a user