计算作用于cellZone上的压力和剪切力
-
@李东岳 李老师,这也正是我遇到的问题
。
退一步我做一个简化,在图示的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; } }