Difference between revisions of "Programming/Fortran"
m |
m |
||
Line 1: | Line 1: | ||
== Programming Details == | == Programming Details == | ||
− | Fortran (formerly FORTRAN, derived from Formula Translation) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing. | + | Fortran (formerly FORTRAN, derived from Formula Translation) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing. The GFortran compiler is fully compliant with the Fortran 95 Standard and includes legacy F77 support. In addition, a significant number of Fortran 2003 and Fortran 2008 features are implemented. Intel's Fortran compiler (ifort) is also compliant with Fortran back to F77 and earlier to most implementations. |
+ | |||
{| | {| | ||
|style="width:5%; border-width: 0;cellpadding=0" | [[File:icon_tick.png]] | |style="width:5%; border-width: 0;cellpadding=0" | [[File:icon_tick.png]] |
Revision as of 15:20, 12 February 2018
Contents
Programming Details
Fortran (formerly FORTRAN, derived from Formula Translation) is a general-purpose, imperative programming language that is especially suited to numeric computation and scientific computing. The GFortran compiler is fully compliant with the Fortran 95 Standard and includes legacy F77 support. In addition, a significant number of Fortran 2003 and Fortran 2008 features are implemented. Intel's Fortran compiler (ifort) is also compliant with Fortran back to F77 and earlier to most implementations.
There is direct support for openMP and openMPI. |
Programming example
Non Parallel Example
program variableTesting implicit none ! declaring variables integer :: total,average complex :: cx logical :: done character(len=80) :: message ! a string of 80 characters !assigning values total = 20000 average = 1666 done = .true. message = "A big Hello from HPC" cx = (3.0, 5.0) ! cx = 3.0 + 5.0i if (total .ge. average) then print *, total, " greater or equal than average" else print *, total, " less than average" endif Print *, average Print *, cx Print *, done Print *, message end program variableTesting
Parallel Example (openMP)
program helloworld use omp_lib implicit none !$OMP PARALLEL !$OMP CRITICAL print *,'Hello from thread number',OMP_GET_THREAD_NUM() !$OMP END CRITICAL !$OMP END PARALLEL end program helloworld
Modules Available
The following modules are available:
- module add gcc/4.9.3 (GNU compiler)
- module add intel/compiler/64/2016.2.181 (Intel compiler)
Note : It is generally accepted that the intel compiler generates faster code on Intel hardware than gcc, although gcc is generally more compatible with a wide range of hardware.
Compilation
The program would be compiled in the following way, optional Intel compiler available too:
[username@login01 ~]$ module add gcc/4.9.3 [username@login01 ~]$ gfortran -o testFortran testFortran.f03
Note : mpifort would be used as the compiler wrapper if the above example used openMPI.
Usage Examples
Batch example
#!/bin/bash #SBATCH -J openmpi-single-node #SBATCH -N 1 #SBATCH --ntasks-per-node 28 #SBATCH -o %N.%j.%a.out #SBATCH -e %N.%j.%a.err #SBATCH -p compute #SBATCH --exclusive echo $SLURM_JOB_NODELIST module purge module add gcc/4.9.3 export I_MPI_DEBUG=5 export I_MPI_FABRICS=shm:tmi export I_MPI_FALLBACK=no /home/user/CODE_SAMPLES/OPENMP/demo
[username@login01 ~]$ sbatch demo.job Submitted batch job 239552
Further Information
- http://www.tutorialspoint.com/fortran/
- https://en.wikipedia.org/wiki/OpenMP
- http://www.openmp.org/
- https://computing.llnl.gov/tutorials/openMP/
- https://en.wikipedia.org/wiki/Open_MPI
- https://www.open-mpi.org/
- C Programming
- C++ Programming
- Python Programming