fvc::grad(CenPot)为什么算出来不对??
-
各位大佬,有一个问题困扰我好久了,就是已知离心力Fcentrifugal=- fvc::grad(CenPot),也就是离心力可以写成势函数CenPot=0.5omega^2(x^2+y^2)的梯度格式,目前我已经验证过CenPot这个量求出来是没问题的,关键就在于OF里面求一次梯度直接就求错了,求得非常离谱。
理论上求梯度,x方向梯度应该是omega^2*x,y方向梯度应该是omega^2*y吧,omega只有z分量,并且已经排除了网格、边界条件问题,网格用的结构化质量没毛病。求出来y方向梯度是正确的,x方向就不对,结果如下:
上图是-fvc::grad(CenPot)求出来的,居然是对称的???
这是标准的离心力,非常正确越往右边越大
这是标准的离心势,也是没毛病
那为啥就是OF算梯度算出来不对呢??
这是我计算时梯度离散代码:无论是 Gauss linear还是leastSquares算出来都不对gradSchemes { default Gauss linear; }
这是我求解器源码:
Info<< "Reading field CenPot\n" << endl;//读取离心力势 volScalarField CenPot ( IOobject ( "CenPot", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), 1 * SRF->CenPot() ); volVectorField GradCenPot ( IOobject ( "GradCenPot", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), - fvc::grad(CenPot) );