@Mina-Lee 在 precice tourorials中的受力问题 中说:
@RolandLent precice中没有计算OF力的能力,力都是在OF里计算的。OF中的力也是通过force函数计算的。
pecice只干三件事:
1、引用of中的力变量,提取流固耦合交界面的力变量;引用位移变量。2、precice内部运算。3、覆盖引用的位移变量。
我阅读了第一位回答者的源代码,力的计算是precice的of适配器实现的,我在适配器的forcebase类里边找到了计算力的方法,这里附上计算压力和黏性力的部分
if (solverType_.compare("incompressible") == 0)
        {
            forceField.boundaryFieldRef()[patchID] =
                surface * pb[patchID] * rhob[patchID];
        }
        else if (solverType_.compare("compressible") == 0)
        {
            forceField.boundaryFieldRef()[patchID] =
                surface * pb[patchID];
        }
forceField.boundaryFieldRef()[patchID] +=
            surface & devRhoReffb[patchID];
如果是用of的solid求解器就是向您这样的执行方式了
// Check if a force field with the requested name exists.
    // If yes (e.g., solids4Foam), bind Force_ to that field.
    // If not (e.g., pimpleFoam without the Forces function object), create it.
    if (mesh_.foundObject<volVectorField>(nameForce))
    {
        Force_ =
            &const_cast<volVectorField&>(
                mesh_.lookupObject<volVectorField>(nameForce));
    }
    else
    {
        ForceOwning_.reset(new volVectorField(
            IOobject(
                nameForce,
                mesh_.time().timeName(),
                mesh,
                IOobject::NO_READ,
                IOobject::AUTO_WRITE),
            mesh,
            dimensionedVector(
                "fdim",
                dimensionSet(1, 1, -2, 0, 0, 0, 0),
                Foam::vector::zero)));
        Force_ = ForceOwning_.get();
    }