Transcript Fortran
FORTRAN
BACKGROUND
Fo r t r a n o r FO R m u l a T R A N s l a t i o n wa s d e v e l o p e d i n t h e 1 9 5 0 ' s by I B M a s a n a l te r n a t i v e to
Assembly Language. First successfull high level language.
FO R T R A N 6 6
First HLL Standard
FO R T R A N 77
Character data types
Improved Do Loops and If statements
Fo r t r a n 9 0
Free format source code
Modern control structures
Derived Data Types
Powerful array notation
Dynamic Memory allocation
Operator overloading
Keyword argument passing
The INTENT attribute
Control of numeric precision
Support for Modules
Fo r t r a n 9 5
minor improvements
Fo r t r a n 2 0 0 3
Object oriented Fortran
Fo r t r a n 2 0 0 8
Concurrent Programming
Fo r t r a n 2 01 5
Minor improvements
Programming Languages Family Tree
DEVELOPMENT ENVIRONMENT
Yo u w i l l w a n t to b e c o m fo r t a b l e u s i n g a n tex t - e d i to r l i ke v i o r e m a c s – t h a t s u p p o r t s
s y n t a x h i g h l i g h t i n g a n d a u to - i n d e n t a t i o n et c . . . T h e r e i s a n i d e c a l l e d P h o t r a n t h a t I
h av e n ev e r u s e d .
I p r e f e r e m a c s b u t b o t h v i a n d e m a c s h av e s i m i la r f u n c t io n a l i t y.
I u s u a l l y r u n e m a c s i n t h e te r m i n a l ( f a s t ! )
emacs program.f90 –nw
I m p o r t a n t e m a c s c o m m a n d s to r e m e m b er
ctrl-x
ctrl-x
ctrl-x
ctrl-s
ctrl-x
ctrl-x
ctrl-x
ctrl-x
ctrl-x
ctrl-x
alt-%
ctrl-a
ctrl-e
ctrl-f (find a file)
ctrl-s (save current file)
ctrl-c (close emacs)
(search)
2 (split window horizontally)
3 (split window vertically)
0 (close current window)
o (switch to next window)
k (kill current file)
b (switch to next file
(search and replace)
(start of line)
(end of line)
A l s o g o o d to r e m e m b e r ' c t r l - z ' to s u s p e n d e m a c s a n d ' f g ' to r e s u m e
CONNECTING TO BLUEHIVE
Open a terminal in mac or linux
Putty or MobaxTerm in windows
ssh <netid>@bluehive.circ.rochester.edu
mkdir fortran_class
cd fortran_class
emacs hello_world.f90
COMPILING
I will use intel compiler although gfortran compiler will also
work.
module load intel
ifort hello_world.f90
./a.out
FORTRAN BASICS
/ p u b l i c / j c a r ro l 5 / fo r t r a n / ex 1 . f 9 0
P r o g r am s t r uc t ur e
Comments (! This is a comment)
C o n t i n ua t i on &
lines
Va r i a b l e D e c l a r a t i o n s
D a t a Ty p e s
INTEGER
REAL
CHARACTER
LOGICAL
O p e r a to r s
Arithmetic: +, -, /, *, **
CHARACTER concatenation: //
Relational: >, <, >=, <=, /=, = =
Logical: .AND., .OR., .XOR., .NOT., .EQV., .NEQV.
Use () to group expressions
Intrinsic numerical functions
MOD, FLOOR, CEILING, SIGN, MAX, MIN
Intrinsic math functions
SQRT, LOG, LOG10, EXP, SIN, COS, TAN, SINH, COSH, TANH, ASIN, ACOS, ATAN
Basic I/O
READ, WRITE
EXERCISE 1
Exercise 1: Write a program that uses Heron's formula to
calculate the area of a triangle given the length of its three
sides.
a+b+c
A = p(p - a)(p - b)(p - c) where p =
2
FORMAT SPECIFIERS
/public/jcarrol5/fortran/ex1b.f90
Format specifiers.
write(*,'(A10,2F12.5,I3,L1)') string1, float1, float2, int1, logical1
I – integer
A – string
F – float
E – exponential
EN – scientific notation
ES – engineering notation
All format specifiers can be modified with a repeat count and
width. In addition, the precision can be specified for Format
specifiers for real numbers.
4F10.5 means use a floating point format of width 10 and 5 decimal
points 4 times.
SUBROUTINES AND FUNCTIONS
/public/jcarrol5/fortran/ex2.f90
Fortran programs can contain subroutines and functions.
Functions return a value
Subroutines do not
Fortran normally passes variables by reference – so be careful
when modifying function or subroutine arguments. Best to
declare the intent to avoid common mistakes.
If a constant or an expression is passed as an argument, a
temporary variable is created to store the result of the
expression before being passed to the subroutine or function.
EXERCISE 2
Modify previous program to use a function to calculate the
area of the triangle.
Use format specifiers for the output.
CONTROL STRUCTURES
/public/jcarrol5/ for tran/ex3.f90
For tran has 3 basic control
structures
DO loops
With a counter (an optional
increment)
DO counter=start, end[, increment]
...
IF blocks
IF (condition) THEN
...
ELSE IF (other condition) THEN
...
ELSE
...
END IF
END DO
With a while statement
DO WHILE (a < b)
...
END DO
With an exit statement
DO
...
IF (condition) EXIT
END DO
SELECT CASE statements
SELECT CASE (var)
CASE(constant1)
execution statements
CASE(constant2)
execution statements
CASE DEFAULT
execution statements
END SELECT
EXERCISE 3
Write a Fortran program to calculate the number of uniq
combinations of size r taken from a set of size n – ie 'n
choose r'.
æ n ö
n!
ç
÷=
è r ø r!(n - r)!
Validate that n and r are both non-negative and that n is greater than
or equal to r.
Write a factorial function
Write a combination function that calls the factorial function
Format the output
RECURSIVE FUNCTIONS AND
SUBROUTINES
/public/jcarrol5/fortran/ex4.f90
Often a subroutine or function may want to call itself. This is
called recursion.
Recursive subroutines and functions require the recursive
keyword.
Need to have some termination condition
EXERCISE 4
Modify the factorial function in your combination program to
be recursive.
TOMORROW
Modules
Derived Data Types
Public, Private Entities
Arrays
Namelists
Reading/Writing to files
Pointers