diff --git a/src/functionObjects/forces/forceCoeffs/forceCoeffs.C b/src/functionObjects/forces/forceCoeffs/forceCoeffs.C index d9807ec9764dbb06d803c91bbf41d605219cf9db..f793922e4c9b99e4ae3f2458e61bcbbfcf45fddf 100644 --- a/src/functionObjects/forces/forceCoeffs/forceCoeffs.C +++ b/src/functionObjects/forces/forceCoeffs/forceCoeffs.C @@ -61,13 +61,69 @@ void Foam::functionObjects::forceCoeffs::initialise() } +Foam::volVectorField& Foam::functionObjects::forceCoeffs::forceCoeff() +{ + auto* coeffPtr = + mesh_.getObjectPtr<volVectorField>(scopedName("forceCoeff")); + + if (!coeffPtr) + { + coeffPtr = new volVectorField + ( + IOobject + ( + scopedName("forceCoeff"), + time_.timeName(), + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh_, + dimensionedVector(dimless, Zero) + ); + + mesh_.objectRegistry::store(coeffPtr); + } + + return *coeffPtr; +} + + +Foam::volVectorField& Foam::functionObjects::forceCoeffs::momentCoeff() +{ + auto* coeffPtr = + mesh_.getObjectPtr<volVectorField>(scopedName("momentCoeff")); + + if (!coeffPtr) + { + coeffPtr = new volVectorField + ( + IOobject + ( + scopedName("momentCoeff"), + time_.timeName(), + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh_, + dimensionedVector(dimless, Zero) + ); + + mesh_.objectRegistry::store(coeffPtr); + } + + return *coeffPtr; +} + + void Foam::functionObjects::forceCoeffs::reset() { Cf_.reset(); Cm_.reset(); - forceCoeff_ == dimensionedVector(dimless, Zero); - momentCoeff_ == dimensionedVector(dimless, Zero); + forceCoeff() == dimensionedVector(dimless, Zero); + momentCoeff() == dimensionedVector(dimless, Zero); } @@ -111,7 +167,7 @@ void Foam::functionObjects::forceCoeffs::calcForceCoeffs() const auto& coordSys = coordSysPtr_(); // Calculate force coefficients - forceCoeff_ = forceScaling*force_; + forceCoeff() = forceScaling*force(); Cf_.reset ( @@ -135,7 +191,7 @@ void Foam::functionObjects::forceCoeffs::calcMomentCoeffs() const auto& coordSys = coordSysPtr_(); // Calculate moment coefficients - momentCoeff_ = momentScaling*moment_; + momentCoeff() = momentScaling*moment(); Cm_.reset ( @@ -225,32 +281,6 @@ Foam::functionObjects::forceCoeffs::forceCoeffs forces(name, runTime, dict, false), Cf_(), Cm_(), - forceCoeff_ - ( - IOobject - ( - "forceCoeff", // scopedName() is not available at ctor level - mesh_.time().timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedVector(dimless, Zero) - ), - momentCoeff_ - ( - IOobject - ( - "momentCoeff", - mesh_.time().timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedVector(dimless, Zero) - ), coeffFilePtr_(), magUInf_(Zero), lRef_(Zero), @@ -342,9 +372,6 @@ bool Foam::functionObjects::forceCoeffs::read(const dictionary& dict) } } - forceCoeff_.rename(scopedName("forceCoeff")); - momentCoeff_.rename(scopedName("momentCoeff")); - Info<< endl; return true; @@ -421,8 +448,8 @@ bool Foam::functionObjects::forceCoeffs::write() if (writeFields_) { - forceCoeff_.write(); - momentCoeff_.write(); + forceCoeff().write(); + momentCoeff().write(); } Log << endl; diff --git a/src/functionObjects/forces/forceCoeffs/forceCoeffs.H b/src/functionObjects/forces/forceCoeffs/forceCoeffs.H index 85fbe23d2ed11ce8184d610ef429ef6d46150950..997f36ac2b0c916c69498d2d05bef285d944582d 100644 --- a/src/functionObjects/forces/forceCoeffs/forceCoeffs.H +++ b/src/functionObjects/forces/forceCoeffs/forceCoeffs.H @@ -431,12 +431,6 @@ private: //- Moment components forceComponents Cm_; - //- Force coefficient field - volVectorField forceCoeff_; - - //- Moment coefficient field - volVectorField momentCoeff_; - //- Operand force and moment coefficients HashTable<coeffDesc> coeffs_; @@ -470,6 +464,13 @@ protected: //- Initialise containers and fields void initialise(); + //- Return access to the force coefficients field + volVectorField& forceCoeff(); + + //- Return access to the moment coefficients field + volVectorField& momentCoeff(); + + //- Reset containers and fields void reset(); diff --git a/src/functionObjects/forces/forces/forces.C b/src/functionObjects/forces/forces/forces.C index 5916aa2a61fcc6e16837ac5b9cf480dbca28b765..c1509c733d539383764b87b52e6795c1df326170 100644 --- a/src/functionObjects/forces/forces/forces.C +++ b/src/functionObjects/forces/forces/forces.C @@ -91,6 +91,60 @@ void Foam::functionObjects::forces::setCoordinateSystem } +Foam::volVectorField& Foam::functionObjects::forces::force() +{ + auto* forcePtr = mesh_.getObjectPtr<volVectorField>(scopedName("force")); + + if (!forcePtr) + { + forcePtr = new volVectorField + ( + IOobject + ( + scopedName("force"), + time_.timeName(), + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh_, + dimensionedVector(dimForce, Zero) + ); + + mesh_.objectRegistry::store(forcePtr); + } + + return *forcePtr; +} + + +Foam::volVectorField& Foam::functionObjects::forces::moment() +{ + auto* momentPtr = mesh_.getObjectPtr<volVectorField>(scopedName("moment")); + + if (!momentPtr) + { + momentPtr = new volVectorField + ( + IOobject + ( + scopedName("moment"), + time_.timeName(), + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh_, + dimensionedVector(dimForce*dimLength, Zero) + ); + + mesh_.objectRegistry::store(momentPtr); + } + + return *momentPtr; +} + + void Foam::functionObjects::forces::initialise() { if (initialised_) @@ -143,8 +197,10 @@ void Foam::functionObjects::forces::reset() sumInternalForces_ = Zero; sumInternalMoments_ = Zero; - force_ == dimensionedVector(force_.dimensions(), Zero); - moment_ == dimensionedVector(moment_.dimensions(), Zero); + auto& force = this->force(); + auto& moment = this->moment(); + force == dimensionedVector(force.dimensions(), Zero); + moment == dimensionedVector(moment.dimensions(), Zero); } @@ -291,14 +347,14 @@ void Foam::functionObjects::forces::addToPatchFields { sumPatchForcesP_ += sum(fP); sumPatchForcesV_ += sum(fV); - force_.boundaryFieldRef()[patchi] += fP + fV; + force().boundaryFieldRef()[patchi] += fP + fV; const vectorField mP(Md^fP); const vectorField mV(Md^fV); sumPatchMomentsP_ += sum(mP); sumPatchMomentsV_ += sum(mV); - moment_.boundaryFieldRef()[patchi] += mP + mV; + moment().boundaryFieldRef()[patchi] += mP + mV; } @@ -309,16 +365,19 @@ void Foam::functionObjects::forces::addToInternalField const vectorField& f ) { + auto& force = this->force(); + auto& moment = this->moment(); + forAll(cellIDs, i) { const label celli = cellIDs[i]; sumInternalForces_ += f[i]; - force_[celli] += f[i]; + force[celli] += f[i]; const vector m(Md[i]^f[i]); sumInternalMoments_ += m; - moment_[celli] = m; + moment[celli] = m; } } @@ -449,32 +508,6 @@ Foam::functionObjects::forces::forces : fvMeshFunctionObject(name, runTime, dict), writeFile(mesh_, name), - force_ - ( - IOobject - ( - "force", // scopedName() is not available at ctor level - time_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedVector(dimForce, Zero) - ), - moment_ - ( - IOobject - ( - "moment", - time_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedVector(dimForce*dimLength, Zero) - ), sumPatchForcesP_(Zero), sumPatchForcesV_(Zero), sumPatchMomentsP_(Zero), @@ -515,32 +548,6 @@ Foam::functionObjects::forces::forces : fvMeshFunctionObject(name, obr, dict), writeFile(mesh_, name), - force_ - ( - IOobject - ( - "force", - time_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedVector(dimForce, Zero) - ), - moment_ - ( - IOobject - ( - "moment", - time_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedVector(dimForce*dimLength, Zero) - ), sumPatchForcesP_(Zero), sumPatchForcesV_(Zero), sumPatchMomentsP_(Zero), @@ -645,8 +652,6 @@ bool Foam::functionObjects::forces::read(const dictionary& dict) Info<< " Fields will be written" << endl; } - force_.rename(scopedName("force")); - moment_.rename(scopedName("moment")); return true; } @@ -823,8 +828,8 @@ bool Foam::functionObjects::forces::write() { Log << " writing force and moment fields." << endl; - force_.write(); - moment_.write(); + force().write(); + moment().write(); } Log << endl; diff --git a/src/functionObjects/forces/forces/forces.H b/src/functionObjects/forces/forces/forces.H index da01eff4af34119614338c52b5ba40dd610f0d5f..808ba321a8ea823091bcbc904a0823673bff5a99 100644 --- a/src/functionObjects/forces/forces/forces.H +++ b/src/functionObjects/forces/forces/forces.H @@ -173,7 +173,7 @@ SourceFiles #include "fvMeshFunctionObject.H" #include "writeFile.H" #include "coordinateSystem.H" -#include "volFields.H" +#include "volFieldsFwd.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -198,12 +198,6 @@ protected: // Fields - //- Forces - volVectorField force_; - - //- Moments - volVectorField moment_; - //- Sum of patch pressure forces vector sumPatchForcesP_; @@ -281,13 +275,18 @@ protected: const word& e1Name = word::null ); + //- Return access to the force field + volVectorField& force(); + + //- Return access to the moment field + volVectorField& moment(); + //- Initialise containers and fields void initialise(); //- Reset containers and fields void reset(); - // Evaluation //- Return the effective stress (viscous + turbulent)