非线性 Poisson 方程

以一个简单的非线性 Poisson 方程为例,我们一起来看一下 FEtch 系统是如何求解非线性偏微分方程问题的。

问题描述

函数 $u(x,y)$ 满足如下非线性椭圆型方程:

\[-\nabla \cdot(\nabla u)=-16 \sqrt{u+1} \quad (\text { in } \Omega )\] \[u=0 \quad (\text { on } \partial \Omega)\]

其中,$\Omega$ 是位于坐标原点的一个单位圆盘, $\partial \Omega$ 是 $\Omega$ 的边界。该方程的精确解为 $u(x,y)=(x^2+y^2)^2-1$。求函数 $u(x,y)$ 的有限元解。

脚本文件

这是一个比较简单的单物理场问题。用有限元语言表述,只需要填写 4 种类型的文件,即 PDE、NFE、GCN 和 MDI 文件。

defi
disp u
coor x y
shap %1 %2
gaus %3
coef un
mate ek 1.0

stif
\非线性系数修正,防止迭代计算崩溃
$c6 if (un < -1d0) then
$c6 	un = -1d0
$c6 endif
dist = +[u/x;u/x]*ek+[u/y;u/y]*ek

load = -[u]*16.0*dsqrt(un+1d0)

end
defi
stif s
load f

coef u1

equation
vect u1,du
read(s,unod) u1,du
matrix = [s]
forc=[f]

solution u
vect ue
[ue]=[u]-[u1]
$c6 aa = 0.0
$c6 ab = 0.0
$c6 bb = 0.0
%nod
%dof
	aa = aa+[ue]*[ue]
	ab = ab+[ue]*[du]
	bb = bb+[du]*[du]
%dof
%nod
$c6 if (itn.eq.1 .or. cc.le.0) then
$c6   	cc = 1.0
$c6 else
$c6 	rab = sqrt(aa)*sqrt(bb)
$c6 	if (ab.gt.0.5*rab) cc = cc*2.0
$c6 	if (ab.gt.0.8*rab) cc = cc*2.0
$c6 	if (ab.lt.0.0) cc = cc*0.5
$c6 	if (ab.lt.-0.40*rab) cc = cc*0.5
$c6 	if (ab.lt.-0.80*rab) cc = cc*0.5
$c6 endif
$c6 if (cc.gt.1.0) cc = 1.0
$c6 err = aa
$c6 ul = 0.0
[u] = [u1]+[ue]*cc
%nod
%dof
	ul = ul + [u]*[u]
%dof
%nod
$c6 write(*,"('itn,cc,err=',i3,2e12.3)") itn,cc,err
$c6 if (err.lt.errb .or. err.lt.errb*ul .or. itn.ge.itnmax) then
$c6 	if (cc .ne. 1.0) then
$c6 		cc = -1
$c6 	else
$c6 		iend=1
gidpost("u",1.0) u(1)
[ue]=0.0
$c6 	endif
$c6 endif
write(s,unod) u,ue

end
defi
a nell

cc = 1.0
errb = 1.0e-8
itnmax = 100

#startsin a	
iend = 0
itn = 1
do while(iend==0)
	#solvsin a
	itn = itn+1
enddo
2dxy
#a 1 1 u
pde poisson q4g2
#

实际操作中,这里的 NFE 文件可以调用系统的库文件自动生成,因此用户只需填写 PDE、GCN 和 MDI 三个文件即可,统计下来,总行数不超过 30 行

我们通过 FEtch 客户端提交脚本文件后,会自动生成并下载有限元程序文件(nps.exe 和 run.bat)、材料参数文件(nps.mat)和 GiD 软件的前处理模板文件(nps.cnd 和 nps.bas)。编程任务至此已经顺利完成。

前处理

前处理和后处理都是通过第三方软件 GiD 来完成的。

我们首先进入 GiD 软件界面进行前处理。依次进行几何建模、施加边界条件、赋迭代初值、赋材料值和网格剖分,最终导出计算所需的数据输入文件(nps.dat)。

边界条件的施加情况如下

img

迭代初值的施加情况如下

img

使用的网格如下

img

计算结果

经过计算,总共使用了 50 次非线性迭代,生成了后处理文件(nps.flavia.res)。我们再次进入 GiD 软件界面进行后处理,查看云图效果如下。

img

提取 x 轴上的计算结果并与解析解进行对比(如下图所示),可以看出两者符合得很好。

img

至此,非线性 Poisson 方程的求解已顺利完成。

参考文献

[1]陆君安. 偏微分方程的MATLAB解法[J]. 武汉大学出版社, 2001.




打赏一个
取消

感谢您的支持,我们会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝或微信扫一扫,即可进行扫码打赏哦