Download presentation
Presentation is loading. Please wait.
Published byTracy Grant Harrington Modified over 9 years ago
1
Beginning Fortran Fortran (77) Basics 22 October 2009 *Black text on white background provided for easy printing
2
Example Code Write a program to read in five values of temperature in Fahrenheit and convert to degrees Celsius OR Kelvin OR both.
3
Your Typical Program c234567 PROGRAM MYPROGRAM STOP END Program Options Declaration of Variables MAIN CODE
4
Your Typical Program c234567 PROGRAM MYPROGRAM STOP END Program Options Declaration of Variables MAIN CODE
5
Program Declaration You declare what kind of Fortran file you are writing on the first line. Syntax: c234567 PROGRAM CONVERTF
6
Program Declaration You declare what kind of Fortran file you are writing on the first line. Syntax: c234567 PROGRAM CONVERTF Specifies the file as a program Program name – something short but descriptive
7
Your Typical Program c234567 PROGRAM CONVERTF STOP END Program Options Declaration of Variables MAIN CODE
8
Options and Variables There are numerous options – you can Google them if you are interested In general, there are two kinds: – You can “include” variables from another *.h file by putting include ‘.h’ in the options section. – You can switch on other options about how the code is run (Google it) – We are going to use implicit none
9
Options and Variables All variables we are going to use must be accounted for in the declaration section (no implicit variables allowed) – implicit none What do we need? – Temperature in Fahrenheit, Celsius, Kelvin – Logicals (do we want Celsius, Kelvin, both?) – Some integer to loop through all 5 values – Syntax:
10
Options and Variables c234567 IMPLICIT NONE PARAMETER NT = 5 REAL F(NT) REAL K(NT) REAL C(NT) LOGICAL DOC LOGICAL DOK INTEGER I
11
Options and Variables c234567 IMPLICIT NONE PARAMETER NT = 5 REAL F(NT) REAL K(NT) REAL C(NT) LOGICAL DOC LOGICAL DOK INTEGER I Specify a special parameter – an unchangeable value that can immediately be used (unlike a variable, which can change value)
12
Options and Variables c234567 IMPLICIT NONE PARAMETER NT = 5 REAL F(NT) REAL K(NT) REAL C(NT) LOGICAL DOC LOGICAL DOK INTEGER I Array of 5 REALs for Fahrenheit temps
13
Options and Variables c234567 IMPLICIT NONE PARAMETER NT = 5 REAL F(NT) REAL K(NT) REAL C(NT) LOGICAL DOC LOGICAL DOK INTEGER I Array of 5 REALs for Kelvin temps
14
Options and Variables c234567 IMPLICIT NONE PARAMETER NT = 5 REAL F(NT) REAL K(NT) REAL C(NT) LOGICAL DOC LOGICAL DOK INTEGER I Array of 5 REALs for Celsius temps
15
Options and Variables c234567 IMPLICIT NONE PARAMETER NT = 5 REAL F(NT) REAL K(NT) REAL C(NT) LOGICAL DOC LOGICAL DOK INTEGER I Logical: Do we want to convert to Celsius (TRUE) or not (FALSE)?
16
Options and Variables c234567 IMPLICIT NONE PARAMETER NT = 5 REAL F(NT) REAL K(NT) REAL C(NT) LOGICAL DOC LOGICAL DOK INTEGER I Logical: Do we want to convert to Kelvin (TRUE) or not (FALSE)?
17
Options and Variables c234567 IMPLICIT NONE PARAMETER NT = 5 REAL F(NT) REAL K(NT) REAL C(NT) LOGICAL DOC LOGICAL DOK INTEGER I Integer that counts from 1 to 5 for loop over one-dimensional arrays
18
Your Typical Program c234567 PROGRAM CONVERTF IMPLICIT NONE PARAMETER NT = 5 REAL F(NT) REAL K(NT) REAL C(NT) LOGICAL DOC LOGICAL DOK INTEGER I STOP END MAIN CODE
19
Main Code We need to do several things: – Read in 5 values of temperature – Determine if we need to convert to Celsius, Kelvin, or both – Output values
20
F F From User FiFi FiFi CiCi CiCi KiKi KiKi To User DOC DOK
21
F F From User FiFi FiFi CiCi CiCi KiKi KiKi To User Read in 5 values of F into array DOC DOK
22
F F From User FiFi FiFi CiCi CiCi KiKi KiKi To User For each of the five temperatures (for-loop): DOC DOK
23
F F From User FiFi FiFi CiCi CiCi KiKi KiKi To User Compute C (we are going to do this no matter what, because we know that the output has to either be C or K or both, and we need C in order to calculate K anyway). DOC DOK
24
F F From User FiFi FiFi CiCi CiCi KiKi KiKi To User Output F to user (this should be done just to make sure that the input was read correctly). DOC DOK
25
F F From User FiFi FiFi CiCi CiCi KiKi KiKi To User If DOC = TRUE, then output C as well. DOC DOK
26
F F From User FiFi FiFi CiCi CiCi KiKi KiKi To User If DOK = TRUE, then compute K from C and output to user as well. DOC DOK
27
Main Code F F From User c234567 DO I = 1, NT READ(*,*) F(I) ENDDO
28
Main Code F F From User c234567 DO I = 1, NT READ(*,*) F(I) ENDDO READ is a Fortran command that is used for input. Syntax: READ(, ) Location (*) = read in from the terminal Format (*) = no particular format
29
Main Code F F From User c234567 DO I = 1, NT READ(*,*) F(I) ENDDO WRITE(*,*) ‘Convert to C?’ READ(*,*) DOC WRITE(*,*) ‘Convert to K?’ READ(*,*) DOK
30
Main Code F F From User c234567 DO I = 1, NT READ(*,*) F(I) ENDDO WRITE(*,*) ‘Convert to C?’ READ(*,*) DOC WRITE(*,*) ‘Convert to K?’ READ(*,*) DOK Write to screen with no particular formatting.
31
Main Code c234567 DO I = 1, NT C(I) = (5./9.)*(F(I)-32.) ENDDO
32
Main Code c234567 DO I = 1, NT C(I) = (5./9.)*(F(I)-32.) ENDDO For each temperature:
33
Main Code c234567 DO I = 1, NT C(I) = (5./9.)*(F(I)-32.) ENDDO For each temperature: Compute Celsius temp.
34
Main Code c234567 IF (DOK.EQV..TRUE.) THEN DO I = 1, NT K(I) = C(I) + 273.15 ENDDO ENDIF
35
Main Code c234567 IF (DOK.EQV..TRUE.) THEN DO I = 1, NT K(I) = C(I) + 273.15 ENDDO ENDIF Logical trap: If we want to calculate Kelvin:
36
Main Code c234567 IF (DOK.EQV..TRUE.) THEN DO I = 1, NT K(I) = C(I) + 273.15 ENDDO ENDIF Logical trap: If we want to calculate Kelvin: Loop through temperatures and calculate Kelvin temps. (If DOK =.FALSE., this entire loop is avoided)
37
Main Code c234567 IF ((DOC.EQV..TRUE.).AND. (DOK.EQV..FALSE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, C(I), ‘C’ ENDDO ENDIF c IF ((DOC.EQV..FALSE.).AND. (DOK.EQV..TRUE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, K(I), ‘K’ ENDDO ENDIF c IF ((DOC.EQV..TRUE.).AND. (DOK.EQV..TRUE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, C(I), ‘C ’, K(I), ‘K’ ENDDO ENDIF
38
Main Code c234567 IF ((DOC.EQV..TRUE.).AND. (DOK.EQV..FALSE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, C(I), ‘C’ ENDDO ENDIF c IF ((DOC.EQV..FALSE.).AND. (DOK.EQV..TRUE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, K(I), ‘K’ ENDDO ENDIF c IF ((DOC.EQV..TRUE.).AND. (DOK.EQV..TRUE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, C(I), ‘C ’, K(I), ‘K’ ENDDO ENDIF
39
c234567 PROGRAM CONVERTF IMPLICIT NONE PARAMETER NT = 5 REAL F(NT) REAL K(NT) REAL C(NT) LOGICAL DOC LOGICAL DOK INTEGER I DO I = 1, NT READ(*,*) F(I) ENDDO WRITE(*,*) ‘Convert to C?’ READ(*,*) DOC WRITE(*,*) ‘Convert to K?’ READ(*,*) DOK DO I = 1, NT C(I) = (5./9.)*(F(I)-32.) ENDDO IF (DOK.EQV..TRUE.) THEN DO I = 1, NT K(I) = C(I) + 273.15 ENDDO ENDIF IF ((DOC.EQV..TRUE.).AND. (DOK.EQV..FALSE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, C(I), ‘C’ ENDDO ENDIF c IF ((DOC.EQV..FALSE.).AND. (DOK.EQV..TRUE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, K(I), ‘K’ ENDDO ENDIF c IF ((DOC.EQV..TRUE.).AND. (DOK.EQV..TRUE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, C(I), ‘C ’, K(I), ‘K’ ENDDO ENDIF STOP END
40
Program Start Options/Variable Declaration Main Code Program End c234567 PROGRAM CONVERTF IMPLICIT NONE PARAMETER NT = 5 REAL F(NT) REAL K(NT) REAL C(NT) LOGICAL DOC LOGICAL DOK INTEGER I DO I = 1, NT READ(*,*) F(I) ENDDO WRITE(*,*) ‘Convert to C?’ READ(*,*) DOC WRITE(*,*) ‘Convert to K?’ READ(*,*) DOK DO I = 1, NT C(I) = (5./9.)*(F(I)-32.) ENDDO IF (DOK.EQV..TRUE.) THEN DO I = 1, NT K(I) = C(I) + 273.15 ENDDO ENDIF IF ((DOC.EQV..TRUE.).AND. (DOK.EQV..FALSE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, C(I), ‘C’ ENDDO ENDIF c IF ((DOC.EQV..FALSE.).AND. (DOK.EQV..TRUE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, K(I), ‘K’ ENDDO ENDIF c IF ((DOC.EQV..TRUE.).AND. (DOK.EQV..TRUE.)) THEN DO I = 1, NT WRITE(*,*) F(I), ‘F = ‘, C(I), ‘C ’, K(I), ‘K’ ENDDO ENDIF STOP END
41
Compilation Compilation is performed in the terminal: Syntax: -o
42
Compilation Compilation is performed in the terminal: Syntax: -o Depends on system: f77, g77, pgf77, etc.
43
Compilation Compilation is performed in the terminal: Syntax: -o We wish to create an object that is an executable file with the following name
44
Compilation Compilation is performed in the terminal: Syntax: -o Use this *.f file to compile the executable
45
Compilation Compilation is performed in the terminal: Syntax: -o Also depends on compiler. Some frequent options: Mextend – allows you to go over column 70 in the code Mbounds – if you attempt to reference an array index out of bounds, will notify you Mbyteswapio – some formats require a byte-swap
46
Compilation Compilation is performed in the terminal: Syntax: -o pgf77 –o CONVERTF.exe CONVERTF.f
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.