1 / 311

3.35k likes | 3.77k Views

Introduction to Fortran 90/95 by Stephen J. Chapman. Grading system: 1. Attendance: 30% 2. Midterm: 30% 3. Final: 40%. Office hours: (PH224) 1. Tues. 11:10~12:00 14:40~15:30 2. Fri. 13:40~15:30.

Download Presentation
## Introduction to Fortran 90/95 by Stephen J. Chapman

**An Image/Link below is provided (as is) to download presentation**
Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.
Content is provided to you AS IS for your information and personal use only.
Download presentation by click this link.
While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.
During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

**Introduction to Fortran 90/95**by Stephen J. Chapman Grading system: 1. Attendance: 30% 2. Midterm: 30% 3. Final: 40% Office hours: (PH224) 1. Tues. 11:10~12:00 14:40~15:30 2. Fri. 13:40~15:30**Ch. 1 Introduction To Computers And The Fortran Language**Sec. 1.1 The Computer Fig 1-1 Main Memory Secondary Memory Output devices Input devices C P U (Central processing unit)**Sec 1.2 Data Representation in a Computer**bit : Each switch represents one binary digit. ON 1 OFF 0 byte : a group of 8 bits e.g., 825 MB hard disk. ( 1MB = 106 byte) Sec 1.2.1 The Binary Number System The base 10 number system: 12310 = 1 x 102 + 2 x 101 + 3 x 100 = 123. 102 101 100**The base 2 number system:**1012 = 1 x 22 + 0 x 21 + 1 x 20 = 5 1112 = 1 x 22 + 1 x 21 + 1 x 20 = 7 22 21 20 3 bits can represent 8 possible values : 0 ~ 7 (or 0002 ~ 1112 )**In general, n bits**2n possible values. e.g., 8 bits ( = 1 byte) 28 = 256. (-128 ~ +127) 16 bits ( = 2 byte) 216 = 65,536. (-32,768 ~ +32,767) • Sec 1.2.2 Types of Data Stored in Memory • Character data : (western language, < 256, use 1 byte) • A ~ Z (26) • a ~ z (26) • 0 ~ 9 (10) • Miscellaneous symbols: ( ) { } ! … • Special letters or symbols: à ë …**Coding systems: (see App. A, 8-bit codes)**• ASCII(American Standard Code for Information Interchange) • EBCDIC (Extended Binary Coded Decimal Interchange Code) • *The unicode coding system uses 2 bytes for each character. • (for any language) • Integer data: (negative, zero, positive) • For an n-bit integer, • Smallest Integer value = - 2n-1 • Largest Integer value = 2n-1 - 1 • e.g., a 4-byte (= 32-bit) integer, • the smallest = -2,147,483,648( = - 232-1) • the largest = 2,147,483,647( = 232-1-1) • *Overflow condition: An integer > the largest or < the smallest.**Real data: (or floating-point data)**• The base 10 system: • 299,800,000 = 2.998 x 108 (scientific notation) exponent mantissa The base 2 system: e.g., a 4-byte real number = 24-bit mantissa + 8-bit exponent value = mantissa x 2exponent Precision:The number of significant digits that can be preserved in a number. e.g.,24-bit mantissa ± 223 (~ seven significant digits) Range: The diff. between the largest and the smallest numbers. e.g.,8-bit exponent 2-128 ~ 2127 (range ~ 10-38 to 1038)**Sec 1.3 Computer Languages**• Machine language: The actual language that a computer recognizes • and executes. • High-level languages: Basic, C, Fortran, … • *The History of the Fortran Language • Fortran = Formula translation • Fortran 66 Fortran 77 Fortran 90 Fortran 95 • (1966) (1977) (1991) (1997)**Sec. 2.3 The Structure of a Fortran Statement**A Fortran program = a series of statements • Executable statements: e.g., additions, subtractions, … • Non-executable statements: providing information. Free-source form: Fortran statements may be entered anywhere on a line, up to 132 characters long. e.g., 100 output = input1 + input2 ! Sum the inputs or 100 output = input1 & ! Sum the inputs + input2**Sec. 2.4 The Structure of a Fortran Program**Fig 2-1 (A simple Fortran program) PROGRAM my_first_program ! Purpose: … ! Declare the variables INTEGER :: i, j, k !All variable are integers ! Get the variables WRITE (*,*) " Enter the numbers to multiply:" READ (*,*) i, j k = i * j ! Write out the result WRITE (*,*) 'Result = ', k STOP END PROGRAM Declaration section Execution section Termination section**Sec. 2.4.4 Program Style**• Text book : • Capitalizing Fortran keywords ( e.g., READ, WRITE) • Using lowercase for variables, parameters Sec. 2.4.5 Compiling, Linking, and Executing the Fortran Program Fig 2-2 Fortran program Executable program Object file (Compile) (Link)**Sec. 2.5 Constants and Variables**Valid variable names: time distance z123456789 I_want_to_go_home (up to 31 chracters, and the 1st character in a name must always be alphabetic) Invalid variable names: this_is _a_very_long_variable_name 3_days A$($ is an illegal character) my-help (“-” is an illegal character)**Five intrinsic types of Fortran constants and variables:**• INTEGER • REAL • COMPLEX • LOGICAL • CHARACTER (numeric) (logical) (character) Sec. 2.5.1 Integer Constant and Variables Integer constants: (no decimal point) e.g., 0 -999 +17 1,000,000(X) -100. (X)**Integer variables:**16-bit integers 32-bit integers (diff. kinds of integers, Ch. 7) Sec. 2.5.2 Real Constants and Variables Real constants: (with a decimal point) e.g., 10. -999.9 1.0E-3 (= 1.0 x 10-3 or 0.001) 123.45E20 0.12E+1 1,000,000. (X) 111E3 (X) -12.0E1.5 (X)**Real variables:**32-bit real numbers 64-bit real numbers (diff. kinds of real numbers, Ch. 7) Sec. 2.5.3 Character Constants and Variables Character constants: [enclosed in single (‘) or double (“) quotes)] e.g., ‘This is a test!’ “This is a test!” ‘ ‘ (a single blank) ‘{^}’ ‘3.141593’ (not a number) This is a test! (X) ‘This is a test!” (X) A character variable contains a value of the character data type.**Sec. 2.5.4 Logical Constants and Variables**Character constants: e.g., .TRUE. .FALSE. TRUE (X) .FALSE (X) A logical variable contains a value of the logical data type. Sec. 2.5.5 Default and Explicit Variable Typing Default typing: Any variable names beginning with the letters I, J, K, L, M, or N are assumed to be of type INTEGER. e.g., incr (integer data type) big (real data type)**Explicit typing: The type of a variable is explicitly**defined in the declaration section. e.g., PROGRAM example INTEGER :: day, month, year REAL :: second LOGICAL :: test1, test2 CHARACTER :: initial (Executable statements) *No default names for the character data type!**Sec. 2.5.6 Keeping Constants Consistent in a Program**Using the PARAMETER attribute : type, PARAMETER :: name=value e.g., REAL, PARAMETER :: pi=3.14159 CHARACTER, PARAMETER :: error=‘unknown’ Sec. 2.6 Assignment Statements and Arithmetic Calculations Assignment statement: variable_name = expression e.g., I = I + 1 ( I + 1 I )**Arithmetic operators:**• binary operators: • a + b (a + b, addition) • a – b (a – b, subtraction) • a * b (a x b, multiplication) • a / b (a/b, division) • a ** b (ab, exponentiation) • unary operators: • + a • - b • Rules: • 1. No two operators may occur side by side. • e.g., • a*-b(X)a*(-b) • a**-2 (X) a**(-2)**2. Implied multiplication is illegal.**e.g., x (y + z)(X)x*(y + z) 3.Parentheses may be used to group terms whenever desired e.g., 2**((8+2) / 5) Sec. 2.6.1 Integer Arithmetic e.g., 3/4 = 0, 6/4 = 1 7/4 = 1, 9/4 = 2 Sec. 2.6.2 Real Arithmetic (or floating-point arithmetic) e.g., 3./4. = 0.75, 6./4. = 1.50 7./4. = 1.75, 9./4. = 2.25**Sec. 2.6.3 Hierarchy (order) of Operators**• e.g., • x = 0.5 * a * t **2 • is equal to • x = 0.5 * a * (t **2) ? • or • x = (0.5 * a * t ) **2 ? • Order: • Parentheses, from inward to outward. • Exponentials, from right to left. • Multiplications and divisions, from left to right. • Additions and subtractions, from left to right.**Example 2-1**a = 3. b = 2. c=5. d=4. e = 10. f = 2. g= 3. (1) output = a * b + c * d + e / f **g (2) output = a * (b + c) * d + (e / f) **g (3) output = a * (b + c) * (d + e) / f **g Sol. (1) output = 3. * 2. + 5. * 4. + 10. / 2. ** 3. = 6. + 20. + 1.25 = 27.25 (2) output = 3. * (2. + 5.) * 4. + (10. / 2.) ** 3. = 84. + 125. = 209. (3) output = 3. * (2. + 5.) * (4. + 10.) / 2. ** 3. = 3. * 7. * 14. / 8. = 294. / 8. = 36.75**Example 2-2**a = 3. b = 2. c=3. (1) output = a ** (b ** c) (2) output = (a ** b) ** c (3) output = a ** b ** c Sol. (1) output = 3. ** (2. ** 3.) = 3. ** 8. = 6561. (2) output = (3. ** 2.) ** 3. = 9. ** 3. = 729. (3) output = 3. ** 2. ** 3. = 3. ** 8. = 6561.**Sec. 2.6.4 Mixed-Mode Arithmetic**In the case of an operation between a real number and an integer, the integer is converted by the computer into a real number. e.g., 3. / 2 = 1.5 1 + 1/4 = 1 1. + 1/4 = 1. 1 + 1./4 = 1.25 Automatic type conversion: e.g., nres = 1.25 + 9/4 ave = (5 + 2) / 2 = 1.25 + 2 = 7/2 = 3.25 = 3. = 3 (a real variable) (a integer variable)**Logarithm**• Base 10: • If 10x= N, then x = ? log N = x • e.g., N = 100 log 100 = log (102) = 2 • N = 3 log 3 = 0.47712… • Base e (=2.71828…): (Natural logarithm) • If ex = N, then x = ? ln N = x • e.g., N = e2 ln (e2) = 2 • N = 3 ln 3 = 1.09861… • * If N < 0 ( log N ) or ( ln N ) is undefined !**Sec. 2.6.5 Mixed-Mode Arithmetic and Exponentiation**If result and y are real, and n is an integer, result = y ** n = y * y * y…*y (real arithmetic, not mixed-mode) But if result, y and x are real, result = y ** x = ?**use**yx = e x ln y(∵ e x ln y = e ln (yx) = yx ) e.g., (4.0) ** 1.5 = 8. (8.0)**(1./3)=2. (-2.0) ** 2 = 4. [∵ (-2.0) * (-2.0) = 4.] (-2.0) ** 2.0 [X, ∵ln (-2.0) is undefined!]**Sec. 2.7 Assignment Statements and Logical Calculations**• Assignment statements: • logical variable name = logical expression • Logical operators: • relational operators • combinational operators Sec. 2.7.1 Relational Operators a1 op a2 a1, a2: arithmetic expressions, variables, constants, or character strings. op: the relational logical operators. (see Table 2-3)**Table 2-3**operation meaning = = equal to / = not equal to > greater than > = greater than or equal to < less than < = less than or equal to e.g., operation result 3 < 4 .TRUE. 3 < = 4 .TRUE. 3 = = 4 .FALSE. ‘A’ < ‘B’ .TRUE. (in ASCII, A 65, B 66, p.493) 7+3 < 2+11 .TRUE.**Sec. 2.7.2 Combinational Logic Operators**l1 .op. l2 and .NOT. l1(.NOT. isa unary operator) l1, l2: logical expressions, variables, or constants. op: the binary operators. (see Table 2-4) Table 2-4 operation meaning .AND. logical AND .OR. logical OR .EQV. logical equivalence .NEQV. logical non-equivalence .NOT. logical NOT**The order of operations:**• Arithmetic operators. • All relational operators, from left to right. • All .NOT. operators. • All .AND. operators, from left to right. • All .OR. operators, from left to right. • All .EQV. And .NEQV. operators, from left to right.**Example 2-3**L1 = .TRUE., L2 = .TRUE., L3 = .FALSE. (a) .NOT. L1 .FALSE. (b) L1 .OR. L3 .TRUE. (c) L1 .AND. L3 .FALSE. (d) L2 .NEQV. L3 .TRUE. (e) L1 .AND. L2 .OR. L3 .TRUE. (f) L1 .OR. L2 .AND. L3 .TRUE. (g) .NOT. (L1 .EQV. L2) .FALSE.**Sec. 2.7.3 The Significance of Logical Variables and**Expressions Most of the major branching and looping structures of Fortran are controlled by logical values. Sec. 2.8 Assignment Statements and Character Variables character variables name = character expression • Character operators: • substring specifications • concatenation**Sec. 2.8.1 Substring Specifications**E.g., str1 = ‘123456’ str1(2:4) contains the string ‘234’. Example 2-4 PROGRAM substring CHARACTER (len=8) :: a,b,c a = ‘ABCDEFGHIJ’ b = ‘12345678’ c = a(5:7) b(7:8) = a(2:6) WRITE(*,*) 'a=', a WRITE(*,*) 'b=', b WRITE(*,*) 'c=', c END PROGRAM a = ? b = ? c = ? (Try it out!)**Solu:**a = ‘ABCDEFGH’ (∵ len = 8) ∵b(7:8) = a(2:6) = ‘BC’ b = ‘123456BC’ c = a(5:7) = ‘EFG’ = ‘EFG□□□□□‘(∵ len = 8) (Cont.)**Sec. 2.8.2 The Concatenation Operator**E.g., PROGRAM concate CHARACTER (len=10) :: a CHARACTER (len=8) :: b,c a = ‘ABCDEFGHIJ’ b = ‘12345678’ c = a(1:3) // b(4:5) // a(6:8) WRITE(*,*)’c=‘,c END PROGRAM c = ? (Try it out: c =‘ABC45FGH’)**Sec. 2.8.3 Relational Operators with Character Data**E.g., ‘123’ = = ‘123’ (true) ‘123’ = = ‘1234’ (false) ‘A’ < ‘B’ (true, ∵ASCII, A 65, B 66) ‘a’ < ‘A’ (false, ∵ a 97) ‘AAAAAB’ > ‘AAAAAA’ (true) ‘AB’ > ‘AAAA’ (true) ‘AAAAA’ > ‘AAAA’ (true)**Sec. 2.9 Intrinsic Functions**• Intrinsic functions are the most common functions built directly • into the Fortran language. ( see Table 2-6 and App. B) • External functions are supplied by the user. (see Ch. 6) e.g., y = sin(3.141593) INT(2.9995) = 2 (truncates the real number) y = sin(x) y = sin(pi*x) NINT(2.9995) = 3 (rounds the real number) y = sin(SQRT(x))**Generic functions: (can use more than one type of input**data) e.g., If x is a real number, ABS(x) is real. If x is an integer, ABS(x) is integer. Specific functions: (can use only one specific type of input data) e.g., IABS(i) (integer only) *See Appendix B for a complete list of all intrinsic functions.**Sec. 2.10 List-directed (or free-format) Input and Output**Statements • The list-directed input statement: • READ (*,*) input_list • I/O unitformat • The list-directed output statement: • WRITE (*,*) output_list • I/O unitformat**e.g.,**PROGRAM input_example INTEGER :: i, j REAL :: a CHARACTER (len=12) :: chars READ(*,*) i, j, a, chars WRITE(*,*) i, j, a, chars END PROGRAM Input: 1, 2, 3., ‘This one.’ (or 1 2 3. ‘This one.’) Output: 1 2 3.00000 This one. (Try it out!)**Sec. 2.11 Initialization of Variables**E.g., PROGRAM init INTEGER :: i WRITE(*,*) I END PROGRAM Output: i = ??? (uninitialized variable) Run-timeerror! (depends on machines) (Try it out!)**Three ways to initialize variables:**• 1. Assignment statements: • e.g., • PROGRAM init_1 • INTEGER :: i • i = 1 • WRITE(*,*) i • END PROGRAM • READ statements: • e.g., • PROGRAM init_2 • INTEGER :: i • READ(*,*) i • WRITE(*,*) i • END PROGRAM**3. Type declaration Statements:**type :: var1 = value1, [var2 = value2, …] e.g., REAL :: time = 0.0, distance = 5128. INTEGER :: loop = 10 LOGICAL :: done = .FALSE. CARACTER (len=12) :: string = ‘characters’ or PROGRAM init_3 INTEGER :: i = 1 WRITE(*,*) i END PROGRAM**Sec. 2.12 The IMPLICIT NONE Statement**When the IMPLICIT NONE statement is included in a program, any variable that does not appear in an explicit type declaration statement is considered an error. e.g., PROGRAM test_1 REAL :: time time = 10.0 WRITE(*,*) ‘Time=‘,tmie END PROGRAM Output: Run-timeerror! (depends on machines)**+ IMPLICIT NONE,**PROGRAM test_1 IMPLICIT NONE REAL :: time time = 10.0 WRITE(*,*) ‘Time=‘,tmie END PROGRAM Output: Compile-timeerror! (depends on machines)**Sec. 2.13 Program Examples**Example 2-5 (Temperature conversion) T (0F) = (9/5) T(0C) + 32 Fig. 2-6 PROGRAM temp IMPLICIT NONE REAL :: temp_c, temp_f WRITE(*,*) ’Enter T in degrees C:’ READ(*,*) temp_c temp_f = (9./5.) * temp_c + 32. WRITE(*,*) temp_c,’ degrees C =‘, temp_f, & ‘degrees F’ END PROGRAM (Try it out!)**Example (extra)**Write a program for converting a 4 bits integer into a base 10 number, e.g., 1 0 1 1 = 1 x 23 + 0 x 22 + 1 x 21 + 1 x 20 = 11**Ch. 3 Control Structures and**Program Design Ch. 2: Sequential programs(simple and fixed order) Here: Complex programs (using two control statements) (1) branches (2) loops**Sec. 3.1 Introduction to Top-down Design Techniques**Fig. 3-1 (a formal program design process) Start State the problem Design the algorithm Convert algorithm into Fortran statements Test the program Finished !

More Related