This repository has been archived on 2023-11-20. You can view files and clone it, but cannot push or open issues or pull requests.
foam-extend4.1-coherent-io/applications/solvers/solidMechanics/icoFsiElasticNonLinULSolidFoam/calculateLiftAndDrag.H

37 lines
1.3 KiB
C++

{
//- calculate lift and drag for plate and cylinder due to pressure (ignore shear stress)
label plateID = mesh.boundaryMesh().findPatchID("plate");
label cylinderID = mesh.boundaryMesh().findPatchID("cylinder");
if(plateID == -1 || cylinderID == -1)
{
FatalError << "\n Cannot find the plate patch or the cylinder"
<< " patch to calculate lift and drag!"
<< exit(FatalError);
}
scalar lift = 0;
scalar drag = 0;
const vectorField& Sfp = mesh.boundary()[plateID].Sf();
forAll(p.boundaryField()[plateID], facei)
{
vector faceForce = p.boundaryField()[plateID][facei] * Sfp[facei];
lift += vector(0,1,0) & faceForce;
drag += vector(1,0,0) & faceForce;
}
const vectorField& Sfc = mesh.boundary()[cylinderID].Sf();
forAll(p.boundaryField()[cylinderID], facei)
{
vector faceForce = p.boundaryField()[cylinderID][facei] * Sfc[facei];
lift += vector(0,1,0) & faceForce;
drag += vector(1,0,0) & faceForce;
}
scalar width = 0.050668;
Info<< "Total lift on the cylinder and plate boundaries is " << lift << " N, per unit width is " << (lift/width) << " N\n"
<< "Total drag on the cylinder and plate boundaries is " << drag << " N, per unit width is " << (drag/width) << " N\n"
<< endl;
}