potentialFOAM代码中的几个问题求解
-
while (potentialFlow.correctNonOrthogonal()) { fvScalarMatrix PhiEqn ( fvm::laplacian(dimensionedScalar("1", dimless, 1), Phi) == fvc::div(phi)//为什么此处方程的右侧是通量的散度而不是0? ); PhiEqn.setReference(PhiRefCell, PhiRefValue); PhiEqn.solve(); if (potentialFlow.finalNonOrthogonalIter()) { phi -= PhiEqn.flux();//此处为什么要在当前通量的基础上减去由速度势建构出来的通量? } } MRF.makeAbsolute(phi);//此处的makeAbsolute按字面意思是取绝对值,那这个对下文中重构速度场不会产生影响么? Info<< "Continuity error = " << mag(fvc::div(phi))().weightedAverage(mesh.V()).value() << endl; U = fvc::reconstruct(phi); U.correctBoundaryConditions();
论坛里的各位前辈,对代码中不理解的地方已经用备注说明,还请各位赐教!
-
if (potentialFlow.finalNonOrthogonalIter()) { phi -= PhiEqn.flux(); }
这段我觉得倒不是因为
phi
被初始化了,好像上面求解的Phi
方程就不是 http://dyfluid.com/potentialFoam.html 里头的方程(6),而应该是
▽(▽P)=▽(U-▽P)
也就是代码中的phi=(U-▽P)
,这样子的话也能解释速度边界条件是怎么添加到Phi
方程中的了。但有一点不很明白,就是代码中好像表达的并不完全是phi=(U-▽P)
的意思,所以还是有些糊涂。另,
MRF.makeAbsolute(phi);//此处的makeAbsolute按字面意思是取绝对值,那这个对下文中重构速度场不会产生影响么?
这句话应该不是取绝对值,可能用了多重坐标系,之前有个变换,现在变回来了,但不是很确定是不是这个意思
@东岳 @张某人
上面是我的理解,如果有不对的地方还请直接指出来,一起讨论讨论