YOMEDIA
Giới thiệu về Fortran 90 - Bùi Hoàng Hải
Chia sẻ: Nguyễn Văn Hồng
| Ngày:
| Loại File: PPT
| Số trang:19
273
lượt xem
82
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
Yêu cầu & Nội dung:
Yêu cầu – đã nắm được fortran 77 (Nếu không thì tự
đọc bài giảng của PGS Phan Văn Tân).
Nội dung:
o Free form vs fixed form
o Biến và khai báo biến
o Cấu trúc điều khiển
o Module
o Kiểu biến người dùng định nghĩa
AMBIENT/
Chủ đề:
Nội dung Text: Giới thiệu về Fortran 90 - Bùi Hoàng Hải
- Giới thiệu về Fortran 90
Bùi Hoàng Hải
- Yêu cầu & Nội dung
• Yêu cầu – đã nắm được fortran 77 (Nếu không thì tự
đọc bài giảng của PGS Phan Văn Tân)
• Nội dung
o Free form vs fixed form
o Biến và khai báo biến
o Cấu trúc điều khiển
o Module
o Kiểu biến người dùng định nghĩa
- Free form (f90) vs Fixed form (f77)
• Phần mở rộng file: .for vs .f90
• Dòng lệnh không bị giới hạn về độ dài, không cần
thụt đầu dòng
• Comment bắt đầu từ dấu ! Đến hết dòng
• Dấu & nối dòng
o Write(*,*), 'This is a long output line',&
' this is the second part'
• Nhiều lệnh trên một dòng
o A = 0.0 ; B = 1.0 ; C = 2.0
- Cấu trúc một chương trình
PROGRAM program-name
IMPLICIT NONE ! Nên có phần này
[Phần khai báo]
[Phần thực thi]
[Các chương trình con]
END PROGRAM program-name
- Phần khai báo
• [Kiểu Biến], [Các thuộc tính] ::
[Danh sách các biến]
• Khai báo biến đơn:
o Integer :: i, j, number_Tcs
o Real :: Radius, Rmax, Vmax
• Khai báo hằng số
o Real, Parameter :: Pi=3.14156, g=9.81
• K h ai b áo u ỗi ký ự
ch t
o Character (Len=11) :: Str1
o Character (Len=*), Parameter:: Str2 = “Hello"
- Phần khai báo
• Khai báo mảng
o Integer, Parameter :: Nx=101, Ny=101
o Real, Dimension(Nx) :: Rx
o Real, Dimension(Ny) :: Ry
o Real, Dimension(Nx,Ny) :: U, V, W, SLp
• Khai báo mảng động
o Real, Dimension(:,:), Allocatable :: Var1,
Var2
o ---
o Allocate(Var1(100,100))
o ---
o DeAllocate(Var1)
- Phép gán với mảng
o Integer, Parameter :: Nx=121, Ny=101
o Real, Dimension(Nx) :: Rx
o Real, Dimension(Ny) :: Ry
o Real, Dimension(Nx,Ny) :: A, B, C
o A = B
o A(1,:) = Ry
o B(Ny,:) = Rx
- Dịch 1 file f90 trong Cygwin
• File nguồn: test.f90
Integer :: i
Do i=1,10
Write(*,*)i
Enddo
End
• Dịch
o g95 test.f90
• Hoặc
o g95 test.f90 –o test.out
• Chạy chương trình
o ./test.out
- Module
• FORTRAN định nghĩa 3 khái niệm đơn vị chương trình là:
Chương trình chính, Chương trình con ngoài, và module.
• Modul khác với các chương trình con ở 2 điểm quan trọng:
o Module có thể chứa trong đó nhiều hơn một chương trình con (được
gọi là các chương trình con module);
o Modul có thể chứa những câu lệnh khai báo và đặc tả mà chúng có
thể tham chiếu được đối với tất cả các đơn vị chương trình có sử
dụng modul
• Các module cũng có thể được biên dịch một cách độc lập
• Để sử dụng module hãy dùng câu lệnh khai báo USE ngay
đầu chương trình:
• USE Tên_Các_Modul_được_sử_dụng
• Một module này có thể sử dụng module khác
- VD về module
• Module_mydata.f90
Module mydata
Implict none
Integer, Parameter :: Nx=10
Real, Dimension(Nx) :: dat
Contains
Subroutine init_data
integer :: i
Do i=1,10
dat(i)=i
Enddo
End Subroutine init_data
End Module mydata
- VD về module
• main.f90
Program main
Implicit none
Use mydata
Call init_data ! Gọi ct con từ module
Do i=1,Nx ! Sử dụng dữ liệu của module
write(*,*)dat(i)
Enddo
End Program main
• Biên dịch (sẽ báo lỗi)
o G95 main.f90 module_mydata.f90
- Quan hÖ gi÷a c¸c ®¬n vị ch¬ng tr×nh
- Kiểu người dùng định nghĩa
• Để nhóm các kiểu biến khác nhau thành 1 kiểu biến
mới
• Cú pháp
Type tên_kiểu
[danh sách khai báo các biến
(dữ_liệu)]
End Type tên_kiểu
• Sử dụng
Type(Tên_kiểu) :: [Tên biến]
Tên_biến%dữ_liệu = …
- VD Kiểu người dùng định nghĩa
module pipedef
type pipe
real diameter
real flowrate
integer length
character(len=10) :: flowtype
end type pipe
end module pipedef program
- VD Kiểu người dùng định nghĩa
Program main
use pipedef
type(pipe) water1, gas1
water1 = pipe(4.5,44.8,1200,"turbulent")
gas1%flowrate = 91.284
gas1%length = 2550
gas1%flowtype = 'laminar'
gas1%diameter = 14.9
end program
- Để viết chương trình sáng sủa và ít lỗi
• Luôn dùng implicit none
• Các khối cấu trúc điều khiển (if, do,…) khi mở một
khối cần đóng khối ngay sau đó, tiếp theo mới chèn
các lệnh vào trong khối
• Các khối lệnh cần phân cấp theo mức độ thò thụt
của dòng lệnh (thông thường 1 cấp 3 space)
• Sử dụng comment khi cần
• Tên biến: sensible, không quá ngắn hoặc quá dài
• Hạn chế sử dụng lệnh goto và nhãn
- Bài tập – (viết trên ngôn ngữ f90)
• BT1 – Nhập từ bàn phím ba số a, b, c, giải và biện luận
phương trình bậc 2 với các hệ số nói trên
• BT2 - Ký hiệu X là mảng một chiều gồm 100 phần tử. Viết
chương trình:
o a) Gán 100 số nguyên dương đầu tiên cho các phần tử tương ứng
của X, từ phần tử có chỉ số lớn nhất đến phần tử có chỉ số nhỏ nhất;
o b) Gán 50 số nguyên dương lẻ đầu tiên cho 50 phần tử đầu tiên và
50 số nguyên dương chẵn đầu tiên cho 50 phần tử tiếp theo của X;
o c) Gán 100 số tự nhiên đầu tiên chia hết cho 3 lần lượt cho các phần
tử của X.
o Mỗi một trường hợp như vậy, hãy in kết quả lên màn hình thành 10
dòng, mỗi dòng 10 số sao cho thẳng hàng thẳng cột.
- Bài tập – (viết trên ngôn ngữ f90)
• BT2 – Tạo một module định nghĩa kiểu dữ liệu thời
gian: module_datetime,
o trong đó định nghĩa kiểu dữ liệu mới là datetime có chứa
các biến thành viên: year, month, day, hour
o Viết chương trình con module kiểm tra tính đúng đắn của
một biến datetime
o Viết chương trình con module để cộng một số giờ (
- Buổi sau
• Biên dịch fortran trên linux
• Thực hành & chữa bài tập
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
ERROR:connection to 10.20.1.98:9315 failed (errno=111, msg=Connection refused)
ERROR:connection to 10.20.1.98:9315 failed (errno=111, msg=Connection refused)
Đang xử lý...