{ //- 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; }