开源软件FREEFEM++,有限元(开源有限元软件介绍)

#开源软件# 。用有限元软件Freefem 和工程作图软件 Tecplot 来完成有限元中偏微分方程求解。该有限元软件只需要写出有限元的变分形式,利用 自身的命令函数,即可实现 C 语言或者 Matlab 编制的数百行代码的功能。FreeFem 软件是一款数值求解偏微分方程的有限元软件。它是一款免费的软件,完全可以直接在http://www.freefem.org这个网站上下载安装包,并自带教程。很容易通过教程编制 FreeFem 有限元程序来数值求解偏微分方程。FreeFem 不是一个工具包,而是一个完整的有限元产品,具有内存需求少、计算速度快、易学好用、功能强大、应用面广等特点。

开源软件FREEFEM++,有限元(开源有限元软件介绍)

real m = 50; / / 设置网格尺度

meshTh=square(m,m);//生成一致网格 fespaceXh(Th,P2);//定义速度的有限元空间 fespaceMh(Th,P1);//定义压力的有限元空间 Xhu1,u2,v1,v2,ooldu1,ooldu2;//声明试探函数和检验函数

Mhp,q;//声明压力的试探函数和检验函数

realepsi=1e-6,TOL=1,n1;//定义相关的参

ofstreamout(“theFEforStokes.txt”);//定义计算结果输出到的 TXT 文件

solveStokes([u1,u2,p],[v1,v2,q])=//定义偏微分方程,即变分形式

int2d( Th) ( dx ( u1 ) * dx ( v1 ) dy ( u1 ) * dy ( v1) dx( u2) * dx( v2) dy( u2) * dy( v2) / / a (u,v)

-p*(dx(v1) dy(v2))//b(v,p)

q*(dx(u1) dy(u2)))//b(u,q)

on(1,2,3,4,u1=0,u2=0) on(3,u1=1,u2

= 0) ; / / 定义边界条件

plot([u1,u2],ps=“u1u2.eps”);

plot(p,ps=“p.eps”);//计算结果的可视化

这样就完成了采用 FreeFem 软件求解的全部过程。

使用该软件进行编程、数值求解偏微分方程时,只需要写出原偏微分方程的变分问题即可,无需进行单元局部和总体的编号、单元刚度矩阵和单元荷载向量的计算、总刚度矩阵和总荷载向量的组成、有限元线性方程组的求解等具体过程。采用“fespaceXh (Th,P2)”和“fespaceMh(Th,P1)”这段语句就完成了有限元空间的定义,并且使用“int2d( Th) ”这个命令就实现了数值积分的功能。寥寥数行即完成了对Stokes方程第一类边值问题的有限元求解。对比使用 C或者 Matlab编程需几百行的代码,FreeFem 程序大大节约了编程时间。

但是, FreeFem 自带的画图命令plot,所显示的图形并不完善。左图对速度的作图已经超出了边框; 右图压力的结果表示也不丰满。一种工程上的作图软件来克服 FreeFem 自带画图功能的缺陷。

基于 Tecplot 的可视化显示方法。主要是根据一个数据文件来实现

可视化操作,最终完成数值结果的工程作图。在 Freefem 程序的后面增加以下代码,使有限元数值结果输出成一个数据文件。这里需要两个文件,一个存储压力,另一个存速度数据。数据输出代码如下:

ofstreamffu(“UV_new.dat”);//定义速度的存

储文件名

ofstreamffp(“P_new.dat”);//定义压力的存

储文件名

ffp<<“Variables=”<<“X”<<“,”<<

“Y”<<“,”<<“P”<<endl;//压力结果及对应

坐标

ffp<<“Zone”<<“”<<“N=”<<Th.nv<

<“,”<<“E=”<<Th.nt<<“,”

<<“F=FEPOINT,ET=TRIANGLE”<<

endl;//输出单元局部编码和整体编码的对应关系ffu<<“Variables=”<<“X”<<“,”<<“Y”<<“,”<<“u”<<“,”<<“v”<<endl;

//速度结果及对应坐标

ffu<<“Zone”<<“”<<“N=”<<Th.nv<

<“,”<<“E=”<<Th.nt<<“,”

<<“F=FEPOINT,ET=TRIANGLE”<<

endl;

inti,j;

for(i=0;i<Th.nv;i )//具体输出每个单元上的速度结果及对应坐标

{ffp<<Th(i).x<<“”<<Th(i).y<<“”

<<p(Th(i).x,Th(i).y)<<endl;

ffu<<Th(i).x<<“”<<Th(i).y<<“”

<<u1(Th(i).x,Th(i).y)<<“”<<u2(Th

(i).x,Th(i).y)<<endl;

}

for(i=0;i<Th.nt;i )//具体输出每个单元的局部编码

{for(j=0;j<3;j )

{ffu<<Th[i][j] 1<<“”;ffp<<Th[i][j] 1<<“”;

}

if(j==3)

{ffu<<endl;ffp<<endl;

}

}

这样就得到了两个数据件“UV_new.dat”和“P_new.dat”。再利用Tecplot做图软件,进行一系列的可视化操作,就可以得到的有限元方法数值解。

开源软件FREEFEM++,有限元(开源有限元软件介绍)

#开源软件#

#有限元#

相关新闻

联系我们
联系我们
在线咨询
分享本页
返回顶部