Lecture 1
Lecture 1
MATTEO PASQUALI
[email protected]
713-348-5830
AL B-243
FORTRAN LECTURE 1
TYPICAL COMPUTER (2001)
CENTRAL PROCESSING UNIT (CPU)
ULTRAFAST
FAST
CACHE
SLOW
PERMANENT MEMORY
CHOOSING YOUR WEAPONS
SPREADSHEETS Excel
SPEED & CONTROL
Maple
EASE OF USE
UI PROGRAMMER
G
TEXT ALGORITHM
EDITOR
SOURCE CODE High-level
Language
COMPILER (Fortran) HUMAN
(TRANSLATOR) OBJECT CODE
Low-level
Language
LIBRARIES EXECUTABLE (Computer + hackers)
Process data
follow instructions
DATA CPU in executable
Understandable
RESULTS by HUMANS
PROBLEM SOLVING
BY COMPUTER-AIDED METHODS
program NAME
DECLARATION OF VARIABLES
BODY OF PROGRAM
end
VARIABLES
A VARIABLE IS A NAME ASSOCIATED
WITH A CERTAIN PIECE OF INFORMATION
BIT BYTE
INTEGER VARIABLES
DECLARATION
integer :: iteration
integer :: index, size, year
integer (kind = K) :: maxcount
ASSIGNMENT
USED FOR NUMBERS WITHOUT DECIMAL POINT;
NEGATIVE INTEGERS PRECEEDED BY MINUS SIGN
iteration = 0
year = 1306
index = -47
REPRESENTATION OF INTEGER VARIABLES
2-BYTE, 4-BYTE (default) OR 8-BYTE WORD
integer :: iteration 4-BYTE
integer (kind = 8 [2]) :: maxcount 8-BYTE
compiler-dependent
BYTES 2 4 8
MAX INTEGER 3.3e4 2.1e9 9.2e18
INVALID INTEGER ASSIGNMENTS
integer :: a, b, c, d
a = 3.26 not an integer, 3 will be stored
COMPILATION ERRORS
REAL VARIABLES
DECLARATION
real :: time
real :: force, mass, acceleration
real (kind = K) :: gravity
ASSIGNMENT
USED FOR DECIMAL NUMBERS;
FIXED OR EXPONENTIAL NOTATION
A POINT (.) MUST ALWAYS BE PRESENT
time = 0. force = - 512.15
time = 0.0 force = - 5.1215e2
mass = 3. acceleration = 0.00406
mass = 3.0 acceleration = 4.06e-3
NEVER USE COMMAS
REMARKS
VARIABLE NAMES MUST START WITH LETTER
a3p2 bl0p 3nql
DECLARATION
integer, parameter :: prec = selected_real_kind(13)
real (kind = prec) :: mass, force THESE VARIABLES
ASSIGNMENT HAVE AT LEAST 13
DIGITS PRECISION
force = 9.81_prec
NAMED PRECISION
mass = 3.5e-2_prec CONSTANTS
LOGICAL VARIABLES
TRUE OR FALSE ONLY
DECLARATION
logical :: proposition, condition
ASSIGNMENT
proposition = .true.
LOGICAL
condition = .false. CONSTANTS
CHARACTER VARIABLES
DECLARATION
character (len=20) :: school_name
LENGTH OF THE STRING
ASSIGNMENT
school_name = ‘Rice University’
school_name = ‘University of Minnesota’
TOO LONG: LAST 3 LETTERS
WILL BE DROPPED
SOME COMPILERS GIVE ERROR
REMARKS ON VARIABLE DECLARATIONS
A–H REAL
I–N INTEGER
O–Z REAL
integer :: step
real :: mass
logical :: proposition
IMPLICIT NONE
program test
implicit none
DECLARATION OF VARIABLES
INSTRUCTIONS (PROGRAM BODY)
end program test
PARAMETER STATEMENT
EXAMPLE
WRONG USE
a – 1.0 = 2.0 y - a = x**2
3.0 = a x**2 = y - a
x / 4.9 = 5.0 – 2.34
FORTRAN OPERATIONS
OPERATOR OPERATION
+ ADDITION
- SUBTRACTION
* MULTIPLICATION
/ DIVISION
** EXPONENTIATION
SIMPLE EXPRESSIONS
x + 2.0 * y
a / (m + n)
a ** 2 - 4. * (a + b) / (c – d)
3. * sqrt (a - b **2)
ORDER OF OPERATIONS
1. EXPONENTIATION; MULTIPLE
EXPONENTIATIONS ARE RIGHT TO LEFT
2. MULTIPLICATIONS AND DIVISIONS,
FROM LEFT TO RIGHT
3. ADDITIONS AND SUBTRACTIONS,
FROM LEFT TO RIGHT
EXAMPLE
b
a + b / c**d**e - 2.0 * f a+ de
−2f
c
VARIABLE TYPES IN EXPRESSIONS
3 / 4 0 TRUNCATION
mass = 4.0
force = 8.8
acceleration = force / mass
mass1 = 1.1e-23
mass2 = 2.3e-23
lightspeed = 3.e8
energy = (mass1 + mass2) * lightspeed**2
ASSIGNMENT OF EXPRESSIONS TO VARIABLES
total = 15
attempts = 5
ratio = total / attempts 3
total = 18
attempts = 5
ratio = total / attempts 3
TRUNCATION
SOME INTRINSIC FUNCTIONS
FUNCTION DESCRIPTION ARG. VALUE
abs(x) ABSOLUTE VALUE INT / REAL SAME
cos(x) COSINE (RADIANS) REAL REAL
exp(x) EXPONENTIAL REAL REAL
int(x) INTEGER PART OF x REAL INT
floor(x) GREATEST INTEGER ≤ x REAL INT
fraction(x) FRACTIONAL PART OF x REAL REAL
log(x) NATURAL LOG OF x REAL REAL
max(x1,...,xN) MAXIMUM OF x1, ..., xN INT/REAL SAME
min(x1,...,xN) MINIMUM OF x1, ..., xN INT/REAL SAME
mod(x,y) x (mod y); x - int(x/y) * y INT/REAL SAME
nint(x) x ROUND TO NEAREST INT REAL INT
real(x) CONVERT x TO REAL INT REAL
sin(x) SINE (RADIANS) REAL REAL
sqrt(x) SQUARE ROOT REAL REAL
tan(x) TANGENT (RADIANS) REAL REAL
UNFORMATTED INPUT / OUTPUT
SYNTAX
read (*,*) a, b, c
READ FROM USE DEFAULT FORMAT
DEFAULT INPUT (FREE)
DEVICE (KEYBOARD)
SYNTAX
write (*, fmt=‘(STRING)’) e, ‘hello’, g
USE FORMAT SPECIFIED
BY STRING
STRING IS A SEQUENCE OF
FORMAT DESCRIPTORS
INTEGER FORMAT DESCRIPTOR
SYNTAX INTEGER
REPETITION
riw NUMBER OF DIGITS
INDICATOR TO BE PRINTED
(DEFAULT = 1) (FLUSHED RIGHT)
EXAMPLE
write (*, fmt=‘(2i6)’) index1, number1
write (*, fmt=‘(2i6)’) index2, number2
~~~~12~~~347
~~4506~–2399
BLANK SPACE MINUS SIGN
REAL (FLOATING-POINT) FORMAT DESCRIPTOR
SYNTAX DIGITS RIGHT OF
FLOATING POINT DECIMAL POINT
REPETITION
rfw.d TO BE PRINTED
REPETITION
rew.d
INDICATOR TOTAL DIGITS
(DEFAULT = 1) TO BE PRINTED
(FLUSHED RIGHT)
EXAMPLE
write (*, fmt=‘(2e12.6)’) num1, num2
write (*, fmt=‘(2e12.6)’) num3, num4
INSUFFICIENT SPACING
ROUNDING
~~0.121235e2–0.347000e–1
~~0.450000e3~–0.239930e3
EXPONENT MINUS SIGN
CHARACTER FORMAT DESCRIPTOR
SYNTAX CHARACTER
REPETITION
raw
INDICATOR TOTAL CHARACTERS
(DEFAULT = 1) TO BE PRINTED
(FLUSHED LEFT)
EXAMPLE
write (*, fmt=‘(2a12)’) ‘B.S.’, ‘MIT’
write (*, fmt=‘(2e12)’) ‘Ph.D.’, ‘Rice University’
LOST
B.S.~~~~~~~~MIT~~~~~~~~~
Ph.D.~~~~~~~Rice~University
TRUNCATED
EXAMPLE OF PROGRAM INPUT / OUTPUT
program convert_temp_F_to_C
! this program converts Fahrenheit to Celsius
! and outputs results to screen
! declaration of variables
implicit none
real, parameter :: factor = 1.8 ! conversion factor F to C
real :: temp_fahr, temp_cels
! body
write (*,*) ‘Input temperature in Fahrenheit’
read (*,*) temp_fahr
temp_cels = factor * (temp_fahr – 32.0)
write (*,*) ‘The temperature is’, temp_cels, ‘degrees C’
end program convert_temp_F_to_C
BASIC DOCUMENTATION
1. PUT YOUR NAME, RICE ID#,
AND DATE AT BEGINNING OF PROGRAM
2. DECLARE AND DEFINE ALL VARIABLES
3. USE SUGGESTIVE NAMES FOR VARIABLES
program crap
write (*,*) ‘temp’
read (*,*) x
y = 1.8 * (x – 32.0)
write (*,*) y
end program crap
COMMENTS AFTER !