跳转到内容

Freefem

0% developed
来自维基教科书,开放世界中的开放书籍

FREEFEM:一个偏微分方程求解器

[编辑 | 编辑源代码]

freefem 项目有两个分支:2D 求解器 (freefem++) 已经成熟并且有良好的文档,被很多人使用,而 3D 求解器 (freefem3D) 仍在开发中,但欢迎使用它。

该代码是开源的,可以从 freefem 网站 下载。

要使用 freefem 求解偏微分方程 (PDE) 或方程组,首先需要编写一个算法,该算法仅使用线性系统 (一个或多个) 作为中间步骤。

然后,每个系统都必须是适定问题,即提供允许的边界条件并以 *变分形式* 编写。例如,狄利克雷问题

在平面的开集 D 中定义了一个标量函数 v(x,y),在 D 的每个点 (x,y) 上;v 将是周围物体边界 ∂D 处于电势 g(x,y) 的电荷密度为 f(x,y) 的真空中的静电势。

自动三角剖分、有限元求解器和图形都集成在 freefem 中,由 *freefem 脚本* 驱动。

A snapshot of a PC screen executing freefem++
执行 freefem++ 的 PC 屏幕快照

上面的狄利克雷问题可以使用以下脚本用 freefem++ 求解

border C(t=0,2*pi){x=5*cos(t); y=5*sin(t);}
mesh Th = buildmesh (C(50)); 
fespace Vh(Th,P1);     // says that we will use linear triangular elements
Vh u,v;                // defines u and v as piecewise-P1 continuous functions 
func f= x*y;           // definition of a function called f

real cpu=clock();      // optional

solve Poisson(u,v) 
      =  int2d(Th)(dx(u)*dx(v) + dy(u)*dy(v)) // bilinear part 
         - int2d(Th)( f*v)   // right hand side of the variational form
         + on(C,u=0) ;       // Dirichlet boundary condition (g=0)

plot(u); 
cout << " CPU time = " << clock()-cpu << endl; 

用户示例 1

[编辑 | 编辑源代码]

分析描述

[编辑 | 编辑源代码]

freefem 脚本

[编辑 | 编辑源代码]
华夏公益教科书