Introduction to Fortran Programming at Boston University

introduction to fortran n.w
1 / 79
Embed
Share

"Explore the history and importance of Fortran programming at Boston University. Learn about the syntax, makefiles, and managing programming projects with this powerful language. Discover why Fortran is essential for efficient large-scale computing and how it compares to other languages like Matlab and C."

  • Fortran Programming
  • Boston University
  • Syntax
  • Makefiles
  • Large-Scale Computing

Uploaded on | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

You are allowed to download the files provided on this website for personal or commercial use, subject to the condition that they are used lawfully. All files are the property of their respective owners.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.

E N D

Presentation Transcript


  1. Introduction to Fortran Doug Sondak SCV sondak@bu.edu

  2. Information Services & Technology 5/13/2025 Outline Boston University Slideshow Title Goes Here Goals Introduction Fortran History Basic syntax Makefiles Additional syntax 2

  3. Information Services & Technology 5/13/2025 Goals Boston University Slideshow Title Goes Here To be able to write simple Fortran programs To be able to understand and modify existing Fortran code To be able to manage programming projects using makefiles 3

  4. Information Services & Technology 5/13/2025 Introduction Boston University Slideshow Title Goes Here Matlab is great! Why do I need to learn a new language?! All codes must be translated to machine language Interpreted language Matlab, Python, Java Translation is performed incrementally at run time Compiled language Fortran, C, C++ Translation is performed once, then executable is run 4

  5. Information Services & Technology 5/13/2025 Introduction (cont d) Boston University Slideshow Title Goes Here Compiled languages run faster I translated a program from Matlab to C for a user, and it ran 7 times as fast (your results may vary!) Large-scale computing is usually done with compiled language Some convenient features of interpreted languages (e.g., no need to declare variables) result in performance and/or memory penalties 5

  6. Information Services & Technology 5/13/2025 Fortran History Boston University Slideshow Title Goes Here Before Fortran, programs were written in assembly language low-level commands such as load x from memory into register 7 or add values in registers 10 and 11 an write result to register 4 Fortran was the first widely-used high-level computer language 1957 Developed by IBM for scientific applications 6

  7. Information Services & Technology 5/13/2025 Fortran History Boston University Slideshow Title Goes Here Fortran 66 (1966) Fortran 77 (1978) Fortran 90 (1991) fairly modern (structures, etc.) Current workhorse Fortran Fortran 95 (minor tweaks to Fortran 90) Fortran 2003 Gradually being implemented by compiler companies Object-oriented support Interoperability with C is in the standard (yay!) 7

  8. Information Services & Technology 5/13/2025 What Language Should I Use? Boston University Slideshow Title Goes Here I usually suggest using the language you know best Interpreted languages are great for many applications, but are not a good choice for major number crunching Researchers often write codes in Matlab, and they grow and grow until they are much too slow (the codes, not the researchers) Then a painful translation is often required 8

  9. Information Services & Technology 5/13/2025 What Language? (cont d) Fortran is hard to beat for performance Boston University Slideshow Title Goes Here C has the potential to be as fast as Fortran if you avoid aliasing issues and promise the optimizer you have done so Fortran doesn t have this issue due to the different nature of its pointers I have not written large C++ codes, but it s to my understanding that object-oriented constructs tend to be slow Suggestion write computationally-intensive codes in Fortran or C Can parallelize using MPI and/or OpenMP 9

  10. Information Services & Technology 5/13/2025 Fortran Syntax Boston University Slideshow Title Goes Here Program is contained in a text file called source code or source file Source code must be processed by a compiler to create an executable Source file suffix can vary, but we will always use .f90 Since source file is simply text, can be written using any text editor usually emacs or vi 10

  11. Information Services & Technology 5/13/2025 Fortran Syntax (cont d) Boston University Slideshow Title Goes Here First statement in code is program statement Followed by program name program myprog (first line in source code) I like to give the source file the same name as the program myprog.f90 (name of source file) Last statement is a corresponding end program also followed by program name end program myprog 11

  12. Information Services & Technology 5/13/2025 Fortran Syntax (3) Boston University Slideshow Title Goes Here Variables have types For now, we ll look at 3 types: real, integer, and character Real variables have decimals Real can be a whole number, but decimal places are stored internally Even when a real is a whole number, it s good practice to write one decimal place 3.0 rather than 3 12

  13. Information Services & Technology 5/13/2025 Fortran Syntax (4) Boston University Slideshow Title Goes Here Integer variables do not have decimals Integer arithmetic is truncated, not rounded 3/2 = 1 2/3 = 0 If these were reals, results would be 3.0/2.0 = 1.5 2.0/3.0 = 0.6666667 Character variables contain literal text enclosed in single quotes T Character strings contain groups of characters This is a character string. 13

  14. Information Services & Technology 5/13/2025 Fortran Syntax (5) Boston University Slideshow Title Goes Here Need to declare the type for every variable real :: velocity, mass, pi integer :: imax, jdim character :: p Due to backward compatibilty with obsolescent Fortran 77, always use the line implicit none This promises the compiler that you will declare all variables Always goes directly after program statement with one exception that we ll cover later Fortran 77 would automatically type variables based on first letter of variable name 14

  15. Information Services & Technology 5/13/2025 Fortran Syntax (6) Boston University Slideshow Title Goes Here Comment character is ! Anything to the right of a comment character on a given line will be ignored by the compiler Use comments liberally to document your source code print* list-directed output Simple way to produce output on the screen Follow by comma, then stuff to print print*, This is my character string. 15

  16. Information Services & Technology 5/13/2025 Fortran Syntax (7) Boston University Slideshow Title Goes Here Not case-sensitive Ampersand at end of line tells compiler that statement is continued on next source line Spaces don t matter except within literal character strings I use them liberally to make code easy to read, e.g., before and after equals signs Note that source lines do not end with semicolons (as in C or Matlab) 16

  17. Information Services & Technology 5/13/2025 Exercise 1 Boston University Slideshow Title Goes Here Write a hello world program in an editor Program should print a character string 4 lines of code Save it to a file name with a .f90 suffix solution 17

  18. Information Services & Technology 5/13/2025 Compilation Boston University Slideshow Title Goes Here A compiler is a program that reads source code and converts it to a form usable by the computer Internally, three steps are performed: compiler translates source code to assembly language assembler translates assembly language to machine language linker gathers machine-language modules and libraries All these steps sometimes loosely referred to as compiling 18

  19. Information Services & Technology 5/13/2025 Compilation (cont d) Boston University Slideshow Title Goes Here Code compiled for a given processor will not generally run on other processors AMD and Intel are compatible On katana we have Portland Group compilers (pgf90) and GNU compilers (gfortran) We ll use pgf90, since it usually results in faster- executing code PGI Fortran reference is at http://www.pgroup.com/doc/pgifortref.pdf 19

  20. Information Services & Technology 5/13/2025 Compilation (3) Boston University Slideshow Title Goes Here Compilers have huge numbers of options See PGI compiler documentation at http://www.pgroup.com/doc/pgiug.pdf For now, we will simply use the o option, which allows you to specify the name of the resulting executable 20

  21. Information Services & Technology 5/13/2025 Compilation (4) Boston University Slideshow Title Goes Here In a Unix window: pgf90 o hello hello.f90 Emacs users may find this convenient: CTL-x 2 will split the window horizontally CTL-x o toggles between windows o stands for other M-x will prompt for a command at the bottom of the window Type shell (no quotes) for the command Half of emacs window will now be a Unix shell, so you can do your compilation there In a normal Unix tcshell you can retrieve previous Unix commands with the up arrow; here it s CTL up arrow 21

  22. Information Services & Technology 5/13/2025 Compilation (5) Boston University Slideshow Title Goes Here Compile your code If it simply returns a Unix prompt it worked If you get error messages, read them carefully and see if you can fix the source code and re-compile Once it compiles correctly, type the executable name at the Unix prompt, and it will print your string 22

  23. Information Services & Technology 5/13/2025 Arithmetic Boston University Slideshow Title Goes Here +, -, *, / ** indicates power Built-in math functions such as sin, acos, exp, etc. argument in parentheses sin(0.6) Exponential notation indicated by letter e 4.2e3 10 2 . 4 5 . 14 . 2 2.4**1.5 3 23

  24. Information Services & Technology 5/13/2025 More List-Directed i/o Boston University Slideshow Title Goes Here read* is list-directed read, analogous to print* Follow with comma, then comma-delimited list of variables you want to read read*, x, j Often use list-directed read and write together print*, Enter a float and an integer: read*, x, j print*, float = , x, integer = , j 24

  25. Information Services & Technology 5/13/2025 Exercise 2 Boston University Slideshow Title Goes Here Write program to prompt for a Celcius temperature, convert it to Fahrenheit, and print the result. make sure you declare all variables use decimal points with all reals, even if they re whole numbers F = (9/5)C + 32 solution 25

  26. Information Services & Technology 5/13/2025 Arrays Boston University Slideshow Title Goes Here Specify static dimensions in declaration: real, dimension(10,3,5) :: x integer, dimension(10) :: i Can also specify ranges of values integer, dimension(3:11, -15:-2) :: ival, jval Access array elements using parenthesis a = y(3) + y(4) 26

  27. Information Services & Technology 5/13/2025 Arrays (cont d) Boston University Slideshow Title Goes Here Dynamic allocation Useful when size is not known at compile time, e.g., input value Need to specify no. dimensions in declaration Need to specify that it s an allocatable array real, dimension(:,:,:), allocatable :: x, y allocate function performs allocation allocate( x(ni,nj,nk), y(ldim,mdim,ndim) ) When you re done with the variables, deallocate deallocate(x, y) not necessary at very end of code; Fortran will clean them up for you 27

  28. Information Services & Technology 5/13/2025 Parameters Boston University Slideshow Title Goes Here If variable has known, fixed value, declare as parameter and initialize in declaration integer, parameter :: idim = 100, jdim = 200 Compiler substitutes values wherever variables appear in code Efficient, since there are no memory accesses Often used for declaring arrays integer, parameter :: idim = 100, jdim = 200 real, dimension(idim, jdim) :: x integer, dimension(idim) :: iarray 28

  29. Information Services & Technology 5/13/2025 Exercise 3 Boston University Slideshow Title Goes Here Write program to prompt for 2 floating-point vectors of length 3, calculate the dot product, and print the result Don t name the code dot_product or dot Fortran has a dot_product intrinsic function there is a Unix command called dot Can use array name in list-directed read, and it will expect the appropriate number of values (dimension) separated by spaces = = 1 3 c a b solution i i i 29

  30. Information Services & Technology 5/13/2025 Control Boston University Slideshow Title Goes Here Do loop repeats calculation over range of indices do i = 1, 10 a(i) = sqrt( b(i)**2 + c(i)**2 ) enddo Can use increment that is not equal to 1 Goes at end of do statement, unlike Matlab do i = 10, -10, -2 30

  31. Information Services & Technology 5/13/2025 Exercise 4 Boston University Slideshow Title Goes Here Modify dot product program to use a do loop Declare scalar real variable to hold the summation Initialize it to zero before the do loop solution 31

  32. Information Services & Technology 5/13/2025 If-Then-Else Boston University Slideshow Title Goes Here Conditional execution of block of source code Based on relational operators < less than > greater than == equal to <= less than or equal to >= greater than or equal to /= not equal to .and. .or. 32

  33. Information Services & Technology 5/13/2025 If-Then-Else (cont d) Boston University Slideshow Title Goes Here if( x > 0.0 .and. y > 0.0 ) then z = 1.0/(x+y) elseif ( x < 0.0 .and. y < 0.0) then z = -2.0/(x+y) else print*, Error condition endif 33

  34. Information Services & Technology 5/13/2025 Exercise 5 Boston University Slideshow Title Goes Here In dot product code, check if the magnitude of the dot product is less than using the absolute value function abs. If it is, print a message. In either case, print the result as before. solution 10 6 34

  35. Information Services & Technology 5/13/2025 Array Syntax Boston University Slideshow Title Goes Here Fortran will perform operations on entire arrays Like Matlab, unlike C To add two arrays, simply use c = a + b Can also specify array sections c(-5:10) = a(0:15) + b(0:30:2) Here we use b(0), b(2), b(4), etc. due to increment specification Numbers of elements must be consistent 35

  36. Information Services & Technology 5/13/2025 Array Syntax (cont d) Boston University Slideshow Title Goes Here There are intrinsic functions to perform some operations on entire arrays sum sum(x) is the same as x(1) + x(2) + x(3) + product minval maxval 36

  37. Information Services & Technology 5/13/2025 Exercise 6 Boston University Slideshow Title Goes Here Modify dot product code to use array syntax instead of do loop use sum intrinsic to sum components solution 37

  38. Information Services & Technology 5/13/2025 Subprograms Boston University Slideshow Title Goes Here Calculations may be grouped into subroutines and functions perform specific tasks such as: read or write data initialize data solve a system of equations Function returns a single object (number, array, etc.), and usually does not alter the arguments Altering arguments in a function, called side effects, is sometimes considered bad programming practice Subroutine transfers calculated values (if any) through arguments 38

  39. Information Services & Technology 5/13/2025 Functions Boston University Slideshow Title Goes Here Definition starts with a return type End with end function analogous to end program Example: distance between two vectors real function distfunc(a, b) real, dimension(3) :: a, b distfunc = sqrt( sum((b-a)**2) ) !... note array syntax for b-a end function distfunc Use: z = distfunc(x, y) Names of dummy arguments don t have to match actual names distfunc must be declared in calling routine real :: distfunc 39

  40. Information Services & Technology 5/13/2025 Subroutines Boston University Slideshow Title Goes Here End with end subroutine analogous to end program Distance subroutine subroutine distsub(a, b, dist) real :: dist real, dimension(3) :: a, b dist = sqrt( sum((b-a)**2) ) end subroutine distfunc Use: call distsub(x, y, d) As with function, names of dummy arguments don t have to match actual names 40

  41. Information Services & Technology 5/13/2025 Exercise 7 Boston University Slideshow Title Goes Here Modify dot-product program to use a subroutine to compute the dot product The subroutine definition may go before or after the main program in source code Don t forget to declare arguments Give the subroutine some name different that the program I called mine dp solution 41

  42. Information Services & Technology 5/13/2025 Basics of Code Management Boston University Slideshow Title Goes Here Large codes usually consist of multiple files I usually create a separate file for each subprogram Easier to edit Can recompile one subprogram at a time Files can be compiled, but not linked, using c option; then object files can be linked pgf90 c mycode.f90 pgf90 c myfunc.f90 pgf90 o mycode mycode.o myfunc.o 42

  43. Information Services & Technology 5/13/2025 Exercise 8 Boston University Slideshow Title Goes Here Put dot-product subroutine and main program in separate files Give main program same name you have been using for code, e.g., program dotprod and dotprod.f90 Give subroutine same name you used for subroutine, e.g., subroutine dp and dp.f90 Compile, link, and run solution 43

  44. Information Services & Technology 5/13/2025 Makefiles Boston University Slideshow Title Goes Here Make is a Unix utility to help manage codes When you make changes to files, it will Automatically deduce which files need to be compiled and compile them Link latest object files Makefile is a file that tells the make utility what to do Default name of file is makefile or Makefile Can use other names if you d like 44

  45. Information Services & Technology 5/13/2025 Makefiles (cont d) Boston University Slideshow Title Goes Here Makefile contains different sections with different functions The sections are not executed in order! Comment character is # There are defaults for some values, but I like to define everything explicitly 45

  46. Information Services & Technology 5/13/2025 Makefiles (3) Boston University Slideshow Title Goes Here example makefile: ### suffix rule .SUFFIXES: .SUFFIXES: .f90 .o .f90.o: $(F90) $(COMPFLAGS) $*.f90 ### compiler F90 = pgf90 COMMONFLAGS = -O3 COMPFLAGS = -c $(COMMONFLAGS) LINKFLAGS = $(COMMONFLAGS) ### objects OBJ = mymain.o sub1.o sub2.o fun1.o ### compile and link myexe: $(OBJ) $(F90) o $@ $(LINKFLAGS) $(OBJ) 46

  47. Information Services & Technology 5/13/2025 Makefiles (4) Boston University Slideshow Title Goes Here variables Some character strings appear repeatedly in makefiles It s convenient to give them names so if they are changed, you only have to do it in one place To define variable: name = string No quotes are required for the string String may contain spaces name is any name you want Variable names are usually all capitals To continue line, use \ character 47

  48. Information Services & Technology 5/13/2025 Makefiles (5) Boston University Slideshow Title Goes Here Variables (cont d) To use variable, either of these work: $(name) ${name} Example: Define compiler F90 = pgf90 To use elsewhere in makefile: $(F90) 48

  49. Information Services & Technology 5/13/2025 Makefiles (6) Boston University Slideshow Title Goes Here Good practice to define compiler info in variables F90 = pgf90 COMMONFLAGS = -O3 COMPFLAGS = -c $(COMMONFLAGS) LINKFLAGS = $(COMMONFLAGS) 49

  50. Information Services & Technology 5/13/2025 Makefiles (7) Boston University Slideshow Title Goes Here Have to define all file suffixes that may be encountered .SUFFIXES: .o .f90 Just to be safe, delete any default suffixes first with a null .SUFFIXES: command .SUFFIXES: .SUFFIXES: .o .f90 50

More Related Content