@李东岳 李老师,这也正是我遇到的问题
。
退一步我做一个简化,在图示的myForces.H的结构最外层cell上套一层patch边界,可不可以仅用patch计算cellZone最外层网格的力和力矩[1],而不阻碍水体穿越被patch包裹的cellZone区域?
这个想法可行吗,如果可行的话老师方便指点一下,如何实现水体不穿越patch的功能?
[1] 只计算外层网格表面的受力是因为网衣通常不会太厚,有文献采用2m厚的多孔介质模型,网格尺寸0.5m来模拟。
在OF2206中,
对于patch,有addToPatchFields函数:
void Foam::functionObjects::forces::addToPatchFields
(
const label patchi,
const vectorField& Md,
const vectorField& fP,
const vectorField& fV
)
{
sumPatchForcesP_ += sum(fP);
sumPatchForcesV_ += sum(fV);
force().boundaryFieldRef()[patchi] += fP + fV;
const vectorField mP(Md^fP);
const vectorField mV(Md^fV);
sumPatchMomentsP_ += sum(mP);
sumPatchMomentsV_ += sum(mV);
moment().boundaryFieldRef()[patchi] += mP + mV;
}
对于多孔介质的cellZone,有addToInternalField函数:
void Foam::functionObjects::forces::addToInternalField
(
const labelList& cellIDs,
const vectorField& Md,
const vectorField& f
)
{
auto& force = this->force();
auto& moment = this->moment();
forAll(cellIDs, i)
{
const label celli = cellIDs[i];
sumInternalForces_ += f[i];
force[celli] += f[i];
const vector m(Md[i]^f[i]);
sumInternalMoments_ += m;
moment[celli] = m;
}
}