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 脚本* 驱动。
上面的狄利克雷问题可以使用以下脚本用 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;
本书是一个未完成的草稿或提纲。 您可以帮助 开发作品,也可以在 项目室 寻求帮助。 |