Free FEM

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 15

Phương pháp Phần tử hữu hạn và Freefem++

TẠ Thị Thanh Mai

Viện Toán ứng dụng và Tin học


Trường Đại học Bách khoa Hà Nội

Ngày 24 tháng 6 năm 2020

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 1 / 15


Outline

1 Ví dụ minh hoạ

2 Phương pháp phần tử hữu hạn

3 Lập trình với Freefem++

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 2 / 15


Ví dụ trong FreeFem++
Phương trình Poisson

Cho hàm số f (x, y ), tìm u(x, y ) là nghiệm của phương trình:


(
−∆u(x, y ) = f (x, y ) ∀(x, y ) trong Ω,
u(x, y ) =0 ∀(x, y ) trên ∂Ω

với ∂Ω là biên của miền Ω ∈ R2 và


∂2u ∂2u
∆u = + .
∂x 2 ∂y 2

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 3 / 15


Ví dụ trong FreeFem++
Phương trình Laplace

Giả sử f (x, y ) = xy và Ω là vòng tròn đơn vị.


Khi đó biên C = ∂Ω được tham số hoá:

C = (x, y )|x = cos t, y = sin t, 0 ≤ t ≤ 2π




Ta có code xây dựng miền trong Freefem++


b o r d e r C( t =0, 2∗ p i ){ x=c o s ( t ) ; y=s i n ( t ) ; }
mesh Th = b u i l d m e s h (C ( 5 0 ) ) ;
p l o t ( Th ) ;

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 4 / 15


Các bước thực hiện giải xấp xỉ

Bước 1: Xấp xỉ miền tính toán


Bước 2: Xây dựng công thức biến phân ⇒ Bài toán yếu
Bước 3: Tìm nghiệm của bài toán yếu trên các nút điểm của miền
tính toán ⇒Nghiệm xấp xỉ

Definition
Nghiệm của bài toán yếu được gọi là nghiệm mở rộng.

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 5 / 15


Phương pháp phần tử hữu hạn
Công thức Green

Kí hiệu toán tử Gradient:


 T
∂ ∂
∇= ,
∂x ∂y

Theorem (Gauss - Oxtrogradsky - Định lý Phân kỳ)


Giả sử F là trường vector khả vi liên tục trên một miền Ω thuộc R2 . Khi
đó: Z Z
∇·F= F·n
Ω ∂Ω

Định lý Green là hệ quả. Thật vậy, nếu thay:


 
∂u ∂u
F = v ∇u = v , v
∂x ∂y

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 6 / 15


Phương pháp phần tử hữu hạn
Công thức Green

Ta có:
   
∂ ∂u ∂ ∂u
∇·F= v + v
∂x ∂x ∂y ∂y
∂u ∂v 2
∂ u ∂u ∂v ∂2u
= +v 2 + +v 2
∂x ∂x ∂x ∂y ∂y ∂y
= ∇u · ∇v + v ∆u.

Theorem (Green)
Giả sử u(x, y ) ∈ H 2 (Ω) và v (x, y ) ∈ H 1 (Ω). Khi đó:
Z Z Z
∂u
v ∆u = − ∇u · ∇v + v
Ω Ω ∂Ω ∂n

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 7 / 15


Phương pháp phần tử hữu hạn
Bài toán yếu cho trường hợp biên Dirichlet thuần nhất

Tìm u ∈ H 2 (Ω) sao cho:


(
−∆u = f trong Ω
u = 0 trên ∂Ω

Nhân 2 vế của pt đầu với hàm thử v rồi áp dụng công thức Green:
Z Z Z
∂u
∇u.∇vdx = f v dx + v
Ω Ω ∂Ω ∂n

Chọn hàm v thoả mãn v = 0(v ∈ H01 (Ω)) trên biên:


Z Z
∇u.∇vdx = fvdx
Ω Ω

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 8 / 15


Phương pháp phần tử hữu hạn
Bài toán yếu cho trường hợp biên Dirichlet thuần nhất

Bài toán giá trị biên tương đương với bài toán biến phân:
Tìm u ∈ H01 (Ω) sao cho:

a(u, v ) = L(v )∀ v ∈ H01 (Ω)

với ( R
a(u, v ) = Ω ∇u.∇vdx
R
L(v ) = Ω fvdx
Ta có code xây dựng a(u, v ) và L(v ) trong Freefem++
s ol ve Laplace (u , v )
= i n t 2 d ( Th ) ( dx ( u )∗ dx ( v ) + dy ( u )∗ dy ( v ) ) // a ( u , v )
− i n t 2 d ( Th ) ( f ∗ v ) // L ( v )
+ on (C , u=0) ; // D i r i c h l e t c o n d i

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 9 / 15


Phương pháp phần tử hữu hạn
Bài toán yếu cho trường hợp biên Dirichlet thuần nhất

Xét không gian Hilbert V . Cho a(u, v ) là một dạng tuyến tính trên V và
L(v ) là một phiếm hàm tuyến tính trên V .

Definition (Bài toán yếu)


Tìm u ∈ V thoả mãn

a(u, v ) = L(v ), ∀v ∈ V

được gọi là bài toán yếu trong không gian Hilbert V.

Theorem (Lax-Migram)
Nếu a(u, v ) là một dạng song tuyến tính liên tục trên V và V − eliptic và
L là một phiếm hàm tuyến tính, liên tục trên V thì bài toán yếu có nghiệm
duy nhất.

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 10 / 15


Lập trình với Freefem++
Các bước giải phương trình Laplace

// t h e f i n i t e e l e m e n t s p a c e
f e s p a c e Vh( Th , P1 ) ;
// d e c l a r e u ( s o l u t i o n ) and v ( t e s t f u n c t i o n )
Vh u , v ;
// d e f i n i t i o n t h e RHS
f u n c f= x ∗ y ;
// d e f i n e s t h e PDE
solve poisson (u , v)
= i n t 2 d ( Th ) ( dx ( u )∗ dx ( v ) + dy ( u )∗ dy ( v ) ) // b i l i n e a r
− i n t 2 d ( Th ) ( f ∗ v ) // r i g h t hand
+ on (C , u=0) ; // D i r i c h l e t c o
plot (u ) ;

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 11 / 15


Phương pháp phần tử hữu hạn
Bài toán yếu cho trường hợp biên tổng quát

Tìm u trong Ω sao cho:





 −∆u = f trong Ω

u = 0 trên ΓD
 ∂u
= g trên ΓN .



∂n

Nhân 2 vế của pt đầu với hàm thử v ∈ HΓ1D (Ω) rồi áp dụng công thức
Green: Z Z Z
∇u.∇vdx = fvdx + g .vds
Ω Ω ΓN

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 12 / 15


Phương pháp phần tử hữu hạn
Bài toán yếu cho trường hợp biên tổng quát

Tìm u ∈ HΓ1D (Ω) sao cho:

a(u, v ) = L(v )∀ v ∈ HΓ1D (Ω)

với
Z
a(u, v ) = ∇u.∇vdx
ZΩ Z
L(v ) = fvdx + g .vds
Ω ΓN

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 13 / 15


Lập trình với Freefem++
Xây dựng miền tính toán

Hàm square, cube


// u n i t s q u a r e
mesh Th=s q u a r e ( 5 , 1 0 ) ;
p l o t ( Th ) ;
// u n i t s q u a r e
mesh Th=cube ( 1 0 , 1 0 , 1 0 ) ;
p l o t ( Th ) ;
// r e c t a n g l e mesh
r e a l x0 = 0. , x1 = 1 0 . ;
r e a l y0 =0, y1 =1;
i n t n=100 ,m=20;
mesh Th=s q u a r e ( n ,m, [ x0+(x1−x0 )∗ x , y0+(y1−y0 )∗ y ] ) ;
p l o t ( Th ) ;
s a vemes h ( Th , "Th . mesh" ) ;
T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 14 / 15
Lập trình với Freefem++
Xây dựng miền tính toán

Xây dựng biên của miền bằng border


b o r d e r C( t =0, 2∗ p i ){ x=c o s ( t ) ; y=s i n ( t ) ; }
mesh Th = b u i l d m e s h (C ( 5 0 ) ) ;

Xây dựng lưới từ file ảnh


Đọc file lưới gmsh có sẵn

T.T.M. Ta (HUST) Mô hình-Mô phỏng Ngày 24 tháng 6 năm 2020 15 / 15

You might also like