跳轉到內容

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 指令碼

[編輯 | 編輯原始碼]
華夏公益教科書