
一直再报优化的错,网上一个相关的都搜不出来,软件太冷门了,本科生写毕业论文第一次接触这个软件,马上就要校级抽检了,感激不尽

关注引自免费微信小程序:皆我百晓生
从你提供的错误信息来看,FreeFEM在执行优化版本的计算时遇到了问题,特别是在第39行。错误信息指出优化检查失败,可能是由于某些计算结果为NaN(非数字)导致的。这通常意味着你的方程组可能没有被正确设置,或者初始化条件、边界条件存在问题,导致迭代过程中出现了无效数值。
针对你的情况,我建议以下步骤来尝试解决问题:
首先,按照错误提示中的建议,尝试禁用优化检查来定位问题。在涉及的积分项后添加optimize=0选项。修改第35行和第40行的积分项,如下所示:
35 solve KS1(rho,phi,r,v,w,s)=int2d(Th)(rho*v/dt optimize=0)
36 +int2d(Th)(D*rold*gamma*(dx(rho)*dx(v)+dy(rho)*dy(v)) optimize=0)
...
40 solve KS2(rho,phi,r,v,w,s)=int2d(Th)(mu*(dx(phi)*dx(w)+dy(phi)*dy(w)) optimize=0)
41 +int2d(Th)(alpha*phi*w optimize=0)-int2d(Th)(chi*(rho*w) optimize=0)
确保所有的边界条件都是正确的,并且与你的物理模型相匹配。特别是第39行的边界条件,检查rho=rho0, phi=phio是否在所有情况下都有定义且合理。
确保rho和phi在循环开始前有合适的初始值。如果初始值设置不当,可能导致迭代过程中的无效计算。
你的方程似乎包含非线性项(如密度rho和phi的依赖),考虑是否需要更稳健的求解策略,比如使用Newton迭代方法,并适当设置求解器的收敛准则。
解开注释第47行至第49行的误差计算和输出代码,这可以帮助你监控每次迭代的误差变化,了解何时开始出现NaN值。
如果问题仍然存在,可以尝试分段执行代码,逐个解决子问题。例如,先单独运行每个solve块,看是否能独立成功执行。
32 for(real t=0;t<T;t+=dt){
35 solve KS1(rho,phi,r,v,w,s)=int2d(Th)(rho*v/dt optimize=0)
36 +int2d(Th)(D*rold*gamma*(dx(rho)*dx(v)+dy(rho)*dy(v)) optimize=0)
37 -int2d(Th)(rold*v/dt optimize=0)
38 -int2d(Th)(chi*D*rold*(dx(pold)*dx(v)+dy(pold)*dy(v)) optimize=0)
39 +on(1,2,3,4,rho=rho0,phi=phio,r=r0);
40 solve KS2(rho,phi,r,v,w,s)=int2d(Th)(mu*(dx(phi)*dx(w)+dy(phi)*dy(w)) optimize=0)
41 +int2d(Th)(alpha*phi*w optimize=0)-int2d(Th)(chi*(rho*w) optimize=0)
42 +on(1,2,3,4,rho=rho0,phi=phi0);
rold=rho;
pold=phi;
47 err=sqrt(int2d(Th)(square(rho-rold)+square(phi-pold))/Th.area);
48 if (err < 1e-3)
49 cout <<"iter " << t << " Err L2 " << err << endl;
// Consider adding a break here or a maximum iteration count to prevent infinite loops.
}
尝试上述步骤后,如果问题依旧,建议检查你的数学模型和方程是否正确无误,或者在FreeFEM的社区论坛寻求帮助,那里可能会有遇到过类似问题的用户。希望这些建议能帮到你,祝你的毕业论文顺利!