FreeFEM++下载安装和使用

这篇博客介绍了如何使用开源软件FreeFEM++进行偏微分方程的求解。FreeFEM++具备自动生成网格、各向异性网格适应等特性,并支持多种有限元方法。博主分享了下载、安装及编写FreeFEM++程序的步骤,并提供了Notepad++的配置教程,以便代码高亮显示。此外,还提供了FreeFEM++的中文和英文手册链接供进一步学习。
摘要由CSDN通过智能技术生成

最近要利用机器学习求解一些偏微分方程,对于一些复杂的偏微分方程,需要一些精度比较高的参考解,导师推荐使用FreeFEM++软件求解PDEs。首次使用,特此记录一下,以备以后查阅。

参考链接:

Freefem++ 学习指南:Chap 1 https://zhuanlan.zhihu.com/p/420610473

Freefem++ 学习指南 Chap2 实例学习 https://zhuanlan.zhihu.com/p/420973975

作为偏微分方程求解器的有限元方法实现 https://zhuanlan.zhihu.com/p/69223148

1、FreeFEM++简介

FreeFEM是开源的有限元模拟系统,由法国利翁斯实验室、埃尔和玛丽居里大学共同开发,在世界范围内广泛使用。Freefem的特点:

  1. 通过变分形式描述问题
  2. 多变量多方程 耦合或解耦的可解性
  3. 分片描述边界
  4. 分片描述边界
  5. 自动生成网格
  6. 各向异性的网格适应
  7. 自动插值输出结果
  8. 多种有限元 多项式元、P1元、RT元
  9. 多种方程组求解方式
  10. 基于C++速度
  11. 在线绘图

2、FreeFEM++去何处下载?

下载地址:https://freefem.org/
在这里插入图片描述
点击Download,然后会跳转到 https://github.com/FreeFem/FreeFem-sources/releases
在这里插入图片描述
在这里插入图片描述

3、安装FreeFEM++

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装完成会出现如下图标
在这里插入图片描述

4、如何使用FreeFEM++

点击图标就可以运行 FreeFEM++,运行示例。
在这里插入图片描述
在这里插入图片描述

5、如何编写自己的FreeFEM++程序?

FreeFEM++没有提供编译界面,我们可以使用NotePad++编写自己的代码。
可以在Notepad++中加入与Freefem++相容的语法,使之高亮:
①在菜单“设置”中选择“格式语言设置”
②在“语言”列表中选择C++
③在“自定义扩展名”中输入"edp"
④在“样式”列表中选择“INSTRUCTION WORD”,在“自定义关键字”中加入下列关键字:
P0 P1 P2 P3 P4 P5 P1dc P2dc P3dc P4dc P5dc RT0 RT1 RT2 RT3 RT4
RT5 macro plot int1d int2d solve movemesh adaptmesh trunc checkmovemesh
on func buildmesh square Eigenvalue min max imag exec LinearCG NLCG
Newton BFGS LinearGMRES catch try intalledges jump average mean load
savemesh convect abs sin cos tan atan asin acos cotan sinh cosh tanh cotanh
atanh asinh acosh pow exp log log10 sqrt dx dy endl cout
⑤在“样式”列表中选择“TYPE WORD”,在“自定义关键字”中加入下列关键字:
mesh real fespace varf matrix problem string border complex ifstream ofstream
⑥点击“保存并关闭”,Notepad++就配置好了。

示例和结果

在这里插入图片描述
在这里插入图片描述

7 FreeFEM++ 中文手册和英文手册

地址: https://doc.freefem.org/introduction/index.html
在这里插入图片描述

对流方程是描述流体运动的方程,由Navier-Stokes方程组成,其中包含连续性方程和动量方程。在数值解中,常使用有限元法来求解对流方程。 在FreeFem++中,可以通过定义变量,设定边界条件和初始条件,以及使用有限元法来求解对流方程。 首先,需要定义变量和方程。假设我们要求解二维空间中的定常对流方程,可以如下定义: ``` real xc, yc; // 圆心坐标 real r; // 圆半径 int N; // 网格划分数 xc = 0.5; yc = 0.5; // 假设圆心坐标为(0.5, 0.5) r = 0.2; // 假设圆半径为0.2 N = 50; // 假设网格划分数为50 mesh Th = square(N,N); // 创建二维正方形网格 fespace Vh(Th, P1); // 定义函数空间Vh,使用P1元素 Vh u, v; // 定义速度场变量u和v Vh p; // 定义压力变量p u[] = 0; v[] = 0; // 设置速度初值为0 p[] = 0; // 设置压力初值为0 Vh Du, Dv; // 速度的梯度 Du[] = dx(u); Dv[] = dy(v); // 求速度的梯度 Vh Fh, Gh; // 定义对流项 Fh[] = u*Du; Gh[] = v*Dv; // 计算对流项 Vh L2, L3; // 定义边界项 L2[] = -Fh; L3[] = -Gh; // 计算边界项 Vh L1, L4; // 定义其他项 L1[] = div(u); L4[] = 0; // 计算其他项 // 定义方程 problem NS(u, v, p, (Du, Dv), {Fh, Gh}, {L1, L2, L3, L4}); ``` 然后,设定边界条件和初始条件。可以根据实际问题来设置边界条件和初始条件。 最后,使用有限元法求解对流方程,并输出结果。 ``` NS; // 使用有限元法求解方程 plot(u, wait=true); // 绘制速度场 plot(p, wait=true); // 绘制压力场 ``` 以上代码展示了如何在FreeFem++使用有限元法求解二维定常对流方程,并输出结果。实际应用中,可以根据具体情况更改和调整代码。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值