1 / 46

Beginning Fortran

*Black text on white background provided for easy printing. Beginning Fortran. Fortran (77) Basics 22 October 2009. Example Code. Write a program to read in five values of temperature in Fahrenheit and convert to degrees Celsius OR Kelvin OR both. Your Typical Program. c234567

guri
Télécharger la présentation

Beginning Fortran

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

Presentation Transcript


  1. *Black text on white background provided for easy printing Beginning Fortran Fortran (77) Basics 22 October 2009

  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: <TYPE> <NAME> c234567 PROGRAM CONVERTF

  6. Program Declaration • You declare what kind of Fortran file you are writing on the first line. • Syntax: <TYPE> <NAME> 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 ‘<filename>.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: <TYPE> <NAME>

  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. Ki To User From User DOK DOC Ci Fi F To User To User

  21. Read in 5 values of F into array Ki To User From User DOK DOC Ci Fi F To User To User

  22. For each of the five temperatures (for-loop): Ki To User From User DOK DOC Ci Fi F To User To User

  23. 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). Ki To User From User DOK DOC Ci Fi F To User To User

  24. Output F to user (this should be done just to make sure that the input was read correctly). Ki To User From User DOK DOC Ci Fi F To User To User

  25. If DOC = TRUE, then output C as well. Ki To User From User DOK DOC Ci Fi F To User To User

  26. If DOK = TRUE, then compute K from C and output to user as well. Ki To User From User DOK DOC Ci Fi F To User To User

  27. From User Main Code c234567 DO I = 1, NT READ(*,*) F(I) ENDDO F

  28. From User Main Code c234567 DO I = 1, NT READ(*,*) F(I) ENDDO F READ is a Fortran command that is used for input. Syntax: READ(<location>,<formatting>) Location (*) = read in from the terminal Format (*) = no particular format

  29. From User Main Code c234567 DO I = 1, NT READ(*,*) F(I) ENDDO WRITE(*,*) ‘Convert to C?’ READ(*,*) DOC WRITE(*,*) ‘Convert to K?’ READ(*,*) DOK F

  30. From User Main Code c234567 DO I = 1, NT READ(*,*) F(I) ENDDO WRITE(*,*) ‘Convert to C?’ READ(*,*) DOC WRITE(*,*) ‘Convert to K?’ READ(*,*) DOK F 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. 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 Program Start Options/Variable Declaration Main Code Program End

  41. Compilation • Compilation is performed in the terminal: Syntax: <compiler> -o <exec. filename> <source filename> <options>

  42. Compilation • Compilation is performed in the terminal: Syntax: <compiler> -o <exec. filename> <source filename> <options> Depends on system: f77, g77, pgf77, etc.

  43. Compilation • Compilation is performed in the terminal: Syntax: <compiler> -o <exec. filename> <source filename> <options> We wish to create an object that is an executable file with the following name

  44. Compilation • Compilation is performed in the terminal: Syntax: <compiler> -o <exec. filename> <source filename> <options> Use this *.f file to compile the executable

  45. Compilation • Compilation is performed in the terminal: Syntax: <compiler> -o <exec. filename> <source filename> <options> 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: <compiler> -o <exec. filename> <source filename> <options> pgf77 –o CONVERTF.exe CONVERTF.f

More Related