# ComputeTorque

## 1 Intro

The torque or the power consumption is an usual request in compressor/turbine computations. So here is an atempt to fulfill this request. The code computes the torqe due to pressure forces on a patch.

It applies to Valid versions: ## 2 Code

Inside the code, there is a commented loop left there just for clarification purposes. The next line does the same thing in a more elegant way.

```
/*----------------------------------------------------------------------------*\
Application
computeTorque

Description
computes the pressure torque on a given surface

\*---------------------------------------------------------------------------*/

// Main program:

#include "fvCFD.H"

void computeTorq(word patchName, fvMesh& mesh, volScalarField& p);

int main(int argc, char *argv[])
{

#   include "setRootCase.H"

#   include "createTime.H"
#   include "createMesh.H"
#   include "createFields.H"

computeTorq("rotor", mesh, p);

const label buff = findMax(p);
Info << "label: " << buff << " pMax: " << p[buff] << " point: " << mesh.C()[buff] << endl;

}

void computeTorq(word patchName, fvMesh& mesh, volScalarField& p)
{

// get the label for the requested patch
label patchID = mesh.boundaryMesh().findPatchID(patchName);

if (-1 == patchID)
{
Info << "no patch named "+patchName << endl <<"Available patches:" << endl;
error err("Error!\n");

//access boundary elements
const fvPatchList& patches = mesh.boundary();

//loop over boundaries
forAll(patches, patchI)
{
Info << patches[patchI].name() << endl;
}

err.exit();
}

const fvPatch& cPatch = mesh.boundary()[patchID];

vector torque(0,0,0);
const vector r0(0.48,0,0);
const scalar omega = 104.72; //[rad/s] - 1000 rpm

/*	forAll(cPatch,faceI)
{
scalar pabs = p.boundaryField()[patchID][faceI]+101325;
vector Area = cPatch.Sf()[faceI];
vector r = cPatch.Cf()[faceI]-r0;
vector force = pabs*Area;
torque = torque+(r^force);
}
*/
torque = sum((cPatch.Cf()-r0)^((p.boundaryField()[patchID]+101325)*cPatch.Sf()));
Info << "torque(" << patchName << "): " << torque << " power: " << torque.x()*omega << "[W]" << endl;
}```

If the patch is a closed one (as a real boundary should be), then the reference pressure is no longer necessary. Also, for a parallel calculation, the "sum" function should be replaced by a "gSum" call.