MCPcopy Create free account
hub / github.com/OpenFOAM/OpenFOAM-dev / calcForcesMoment

Function calcForcesMoment

src/functionObjects/forces/forces/forces.C:746–876  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

744
745
746void Foam::functionObjects::forces::calcForcesMoment()
747{
748 initialise();
749
750 force_[0] = Zero;
751 force_[1] = Zero;
752 force_[2] = Zero;
753
754 moment_[0] = Zero;
755 moment_[1] = Zero;
756 moment_[2] = Zero;
757
758 if (directForceDensity_)
759 {
760 const volVectorField& fD = obr_.lookupObject<volVectorField>(fDName_);
761
762 const surfaceVectorField::Boundary& Sfb =
763 mesh_.Sf().boundaryField();
764
765 forAllConstIter(labelHashSet, patchSet_, iter)
766 {
767 label patchi = iter.key();
768
769 vectorField Md
770 (
771 mesh_.C().boundaryField()[patchi] - coordSys_.origin()
772 );
773
774 scalarField sA(mag(Sfb[patchi]));
775
776 // Normal force = surfaceUnitNormal*(surfaceNormal & forceDensity)
777 vectorField fN
778 (
779 Sfb[patchi]/sA
780 *(
781 Sfb[patchi] & fD.boundaryField()[patchi]
782 )
783 );
784
785 // Tangential force (total force minus normal fN)
786 vectorField fT(sA*fD.boundaryField()[patchi] - fN);
787
788 //- Porous force
789 vectorField fP(Md.size(), Zero);
790
791 applyBins(Md, fN, fT, fP, mesh_.C().boundaryField()[patchi]);
792 }
793 }
794 else
795 {
796 const volScalarField& p = obr_.lookupObject<volScalarField>(pName_);
797
798 const surfaceVectorField::Boundary& Sfb =
799 mesh_.Sf().boundaryField();
800
801 tmp<volSymmTensorField> tdevRhoReff = devRhoReff();
802 const volSymmTensorField::Boundary& devRhoReffb
803 = tdevRhoReff().boundaryField();

Callers 2

writeFunction · 0.85
writeFunction · 0.85

Calls 8

applyBinsFunction · 0.85
rhoFunction · 0.85
initialiseFunction · 0.70
forAllFunction · 0.70
forAllConstIterFunction · 0.50
boundaryFieldMethod · 0.45
keyMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected