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
Trang 1Giới thiệu về Fortran 90
Bùi Hoàng Hải
Trang 2Yê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
Trang 3Free 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
Trang 4Cấ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
Trang 5Phần khai báo
[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
Trang 6Phần khai báo
• Khai báo mảng
o Real, Dimension(Nx) :: Rx
o Real, Dimension(Ny) :: Ry
• Khai báo mảng động
Var2
o
-o Allocate(Var1(100,100))
o
-o DeAllocate(Var1)
Trang 7Phép gán với mảng
o Real, Dimension(Nx) :: Rx
o Real, Dimension(Ny) :: Ry
o A = B
o A(1,:) = Ry
o B(Ny,:) = Rx
Trang 8Dị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
Trang 9• 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:
gọi là các chương trình con module);
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:
• Một module này có thể sử dụng module khác
Trang 10VD 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
Trang 11VD 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
Trang 12Quan hệ giữa các đơn v ch ơng trình ị chương trình
Trang 13Kiể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 = …
Trang 14VD 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
Trang 15VD 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
Trang 16Để 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
Trang 17Bà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:
của X, từ phần tử có chỉ số lớn nhất đến phần tử có chỉ số nhỏ nhất;
50 số nguyên dương chẵn đầu tiên cho 50 phần tử tiếp theo của X;
tử của X
dòng, mỗi dòng 10 số sao cho thẳng hàng thẳng cột.
Trang 18Bà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ờ (<24) vào một biến datetime
o Viết chương trình chính sử dụng module trên
Trang 19Buổi sau
• Biên dịch fortran trên linux
• Thực hành & chữa bài tập