# Source Code: Calculation of Drag

 Register Blogs Members List Search Today's Posts Mark Forums Read

 October 17, 2017, 09:29 Source Code: Calculation of Drag #1 Member   Join Date: Jun 2017 Posts: 73 Rep Power: 9 Hi, I try to understand how OpenFOAM calculates the drag forces and coefficients. In the sourceCode of forceCoeffs.C I have found the following exression: Code: ```bool Foam::functionObjects::forceCoeffs::write() { forces::calcForcesMoment(); if (Pstream::master()) { writeFiles::write(); scalar pDyn = 0.5*rhoRef_*magUInf_*magUInf_; Field totForce(force_[0] + force_[1] + force_[2]); Field totMoment(moment_[0] + moment_[1] + moment_[2]); List> coeffs(3); coeffs[0].setSize(nBin_); coeffs[1].setSize(nBin_); coeffs[2].setSize(nBin_); // lift, drag and moment coeffs[0] = (totForce & liftDir_)/(Aref_*pDyn); coeffs[1] = (totForce & dragDir_)/(Aref_*pDyn); coeffs[2] = (totMoment & pitchAxis_)/(Aref_*lRef_*pDyn); scalar Cl = sum(coeffs[0]); scalar Cd = sum(coeffs[1]); scalar Cm = sum(coeffs[2]);``` Nothing special here, everything is more or less as expected. I just need to find out how the force [0],[1] and [2] are calculated. I have found out that 0 is the normal, 1 the tangential and 2 the porous force. But what is a porous force? I have never read such thing before. Looking in forces.C I have found: Code: ```if (directForceDensity_) { const volVectorField& fD = obr_.lookupObject(fDName_); const fvMesh& mesh = fD.mesh(); const surfaceVectorField::Boundary& Sfb = mesh.Sf().boundaryField(); forAllConstIter(labelHashSet, patchSet_, iter) { label patchi = iter.key(); vectorField Md ( mesh.C().boundaryField()[patchi] - coordSys_.origin() ); scalarField sA(mag(Sfb[patchi])); // Normal force = surfaceUnitNormal*(surfaceNormal & forceDensity) vectorField fN ( Sfb[patchi]/sA *( Sfb[patchi] & fD.boundaryField()[patchi] ) ); // Tangential force (total force minus normal fN) vectorField fT(sA*fD.boundaryField()[patchi] - fN); //- Porous force vectorField fP(Md.size(), Zero); applyBins(Md, fN, fT, fP, mesh.C().boundaryField()[patchi]); } }``` So forces are calculated via a forceDensity, but how does the calculation of the forceDensity work? Does anyone know how OpenFOAM calculates the forces and coefficients? I would be very thankfull for any help. Greetings, Friendly

 Tags coefficients, drag, force, source code