Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Beginning Fortran Fortran (77) Basics 22 October 2009 *Black text on white background provided for easy printing."— Presentation transcript:

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


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

Similar presentations


Ads by Google