PLDB
Languages Features Calendar About Lists Add Language
GitHub icon

Fortran

Fortran

Fortran is a programming language created in 1957 by John Backus.

Fortran (; formerly FORTRAN, derived from Formula Translation) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing. Originally developed by IBM in the 1950s for scientific and engineering applications, Fortran came to dominate this area of programming early on and has been in continuous use for over half a century in computationally intensive areas such as numerical weather prediction, finite element analysis, computational fluid dynamics, computational physics, crystallography and computational chemistry. It is a popular language for high-performance computing and is used for programs that benchmark and rank the world's fastest supercomputers. Read more on Wikipedia...

Try now: Riju

#22on PLDB 65Years Old 165.2kUsers

Example code from Riju:

PROGRAM hello PRINT *, "Hello, world!" END PROGRAM hello

Example code from hello-world:

print *,'Hello World' end

Example code from the Hello World Collection:

C Hello World in Fortran PROGRAM HELLO WRITE (*,100) STOP 100 FORMAT (' Hello World! ' /) END

Example code from Linguist:

! Codes/HYCOM/hycom/ATLb2.00/src_2.0.01_22_one/ real onemu, twomu data onemu/0.0098/ data twomu/1./ data threemu/0.e9/ end

Example code from Wikipedia:

program average ! Read in some numbers and take the average ! As written, if there are no data points, an average of zero is returned ! While this may not be desired behavior, it keeps this example simple implicit none real, dimension(:), allocatable :: points integer :: number_of_points real :: average_points=0., positive_average=0., negative_average=0. write (*,*) "Input number of points to average:" read (*,*) number_of_points allocate (points(number_of_points)) write (*,*) "Enter the points to average:" read (*,*) points ! Take the average by summing points and dividing by number_of_points if (number_of_points > 0) average_points = sum(points) / number_of_points ! Now form average over positive and negative points only if (count(points > 0.) > 0) then positive_average = sum(points, points > 0.) / count(points > 0.) end if if (count(points < 0.) > 0) then negative_average = sum(points, points < 0.) / count(points < 0.) end if deallocate (points) ! Print result to terminal write (*,'(a,g12.4)') 'Average = ', average_points write (*,'(a,g12.4)') 'Average of positive points = ', positive_average write (*,'(a,g12.4)') 'Average of negative points = ', negative_average end program average

Keywords in Fortran

ACCESS ACTION ADVANCE ALLOCATABLE ALLOCATE ASSIGN ASSIGNMENT BACKSPACE BLANK BLOCK CALL CASE CHARACTER CLOSE COMMON COMPLEX CONTAINS CONTINUE CYCLE DATA DEALLOCATE DEFAULT DELIM DIMENSION DIRECT DO DOUBLE ELSE ELSEWHERE END ENDFILE ENTRY EOR EQUIVALENCE ERR EXIST EXIT EXTERNAL FILE FMT FORM FORMAT FORMATTED FUNCTION GO IF IMPLICIT IN INOUT INQUIRE INTEGER INTENT INTERFACE INTRINSIC IOLENGTH 10STAT KIND LEN LOGICAL MODULE NAME NAMED NAMELIST NEXTREC NML NONE NULLIFY NUMBER ONLY OPEN OPENED OPERATOR OPTIONAL OUT PAD PARAMETER PAUSE POINTER POSITION PRECISION PRINT PRIVATE PROCEDURE PROGRAM PUBLIC READ READWRITE REAL REC RECl RECURSIVE RESULT RETURN REWIND SAVE SELECT SEQUENCE SEQUENTIAL SIZE STAT STATUS STOP SUBROUTINE TARGET THEN TO TYPE UNFORMATTED UNIT USE WHERE WHILE WRITE

Language features

Feature Supported Example Token
Strings
'Hello world'
'
Assignment =
Line Comments
C A comment
!
Module Pattern
module constants  
implicit none 

   real, parameter :: pi = 3.1415926536  
   real, parameter :: e = 2.7182818285 
   
contains      
   subroutine show_consts()          
      print*, "Pi = ", pi          
      print*,  "e = ", e     
   end subroutine show_consts 
   
end module constants 


program module_example     
use constants      
implicit none     

   real :: x, ePowerx, area, radius 
   x = 2.0
   radius = 7.0
   ePowerx = e ** x
   area = pi * radius**2     
   
   call show_consts() 
   
   print*, "e raised to the power of 2.0 = ", ePowerx
   print*, "Area of a circle with radius 7.0 = ", area  
   
end program module_exampl
Print() Debugging
C     Hello World in Fortran

      PROGRAM HELLO
      WRITE (*,100)
      STOP
  100 FORMAT (' Hello World! ' /)
      END
print
Comments
C
C Lines that begin with 'C' (in the first or 'comment' column) are comments
C
Case Sensitivity ϴ
Semantic Indentation ϴ
MultiLine Comments ϴ

Trending Fortran repos on GitHub

repo stars description
OpenBLAS 2879 OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
E3SM 117 Energy Exascale Earth System Model source code.

Books about Fortran on goodreads

title author year reviews ratings rating
Fortran 90/95 For Scientists And Engineers Stephen J. Chapman 1997 3 41 4.07
Fortran 95/2003 for Scientists and Engineers Stephen J. Chapman 2007 0 30 4.13
FORTRAN 77 for Engineers and Scientists with an Introduction to FORTRAN 90 Larry R. Nyhoff 1995 0 8 2.38
Structured FORTRAN 77 for Engineers and Scientists Delores M. Etter 1983 1 9 3.89
Programming In Fortran: Structured Programming With Fortran Iv And Fortran 77 Vladimir Zwass 1 1 5.00
FORTRAN 77 for engineers and scientists Larry R. Nyhoff 1985 1 3 4.33
Schaum's Outline of Programming with FORTRAN Including Structured FORTRAN Seymour Lipschutz 1978 0 0 0.0
Fortran 77 Programming: With An Introduction To Fortran 90 Standard T.M.R. Ellis 1990 0 2 4.50

Article source

PLDB - Build the next great programming language. v5.0.0 - Acknowledgements · Email · GitHub