Programming/Fortran
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
| |