Skip to content
Easy examples of scientific computing with modern, powerful, easy Fortran 2018 standard
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
CMake find templates Apr 18, 2019
archive lapack svd test Nov 16, 2018
array more meson [skip ci] Feb 11, 2019
benchmarks more meson [skip ci] Feb 11, 2019
build default directory [skip ci] Jan 21, 2019
character fortran 2008 error Apr 15, 2019
cmake properly handle missing scalapack Apr 18, 2019
coarray more meson [skip ci] Feb 11, 2019
contiguous more meson [skip ci] Feb 11, 2019
cxx cleanup options for Windows builds Apr 12, 2019
debug CI workaround Apr 12, 2019
hdf5 cleanup options for Windows builds Apr 12, 2019
io improve tests and soft fail Apr 15, 2019
lapack95 detect Lapack95 found Apr 12, 2019
mpi windows INtel MPI compatible Apr 12, 2019
mumps windows mpi compat Apr 15, 2019
netcdf cleanup options for Windows builds Apr 12, 2019
openmp cleanup options for Windows builds Apr 12, 2019
overloading add color text demo Jan 23, 2019
random random own dir Nov 26, 2018
real folderize Nov 30, 2018
standard fortran 2008 error Apr 15, 2019
system more meson [skip ci] Feb 11, 2019
tests folderize Nov 30, 2018
.appveyor.yml properly handle missing scalapack Apr 18, 2019
.f2py_f2cmap f2py types Jun 4, 2017
.gitattributes template Oct 23, 2017
.gitignore default directory [skip ci] Jan 21, 2019
.travis.yml Disable travis windows as it often never starts [skip appveyor] Apr 12, 2019
CMakeLists.txt improve tests and soft fail Apr 15, 2019
LICENSE Initial commit May 6, 2016
README.md Doc [skip ci] Mar 27, 2019
ford.md move [skip ci] Dec 4, 2018
meson.build cleanup options for Windows builds Apr 12, 2019

README.md

image image

Fortran 2018 Examples

Easy examples of scientific computing with modern, powerful, easy Fortran 2018 standard. Fortran 2018 began as the TS18508 extension, formerly known as Fortran 2015.

Modern Fortran benefits from modern CMake, which supports Fortran features such as

  • submodule
  • preprocessing
  • detecting specific support of Fortran features (so users know their compiler is too old)

Based on widespread compiler support and beneficial features, most new and upgraded Fortran programs should use at least portions of the Fortran 2008 standard.

Prereq

  • Linux / Windows: apt install cmake gfortran libhdf5-dev libopenmpi-dev libnetcdff-dev libcoarrays-dev open-coarrays-bin
  • Mac: brew install gcc cmake open-mpi opencoarrays

Build

The CMake script automatically walks through the subdirectories:

cd build

cmake ..
cmake --build .

ctest

ifort Intel

Be sure you have the Intel Parallel Studio Cluster Edition that has mpiifort.

FC=ifort CC=icc CXX=icpc cmake ..

Flang / Clang

Flang is a Free compiler.

FC=flang CC=clang CXX=clang++ cmake ..

PGI

PGI is available at no cost.

FC=pgf90 CC=pgcc CXX=pgc++ cmake ..

Programs

Each directory has its own README and examples.

  • array/: Array math in modern CMake and Fortran, including MKL, BLAS, LAPACK and LAPACK95.
  • coarray/: modern Fortran is the only major compiled language standard with intrinsic massively parallel arrays.
  • contiguous/: Fortran 2008 contiguous array examples, including Fortran preprocessor with modern CMake.
  • mpi/: OpenMPI parallel computing examples
  • openmp/: OpenMP threading exmaples
  • random/: random numbers with modern Fortran

  • io/: modern Fortran File I/O
  • netcdf/: Easy multidimensional file IO with NetCDF
  • hdf5/: HDF5 is one of the most popular self-describing file formats for massively scalable files.

  • CMake/: CMake work well with modern Fortran features
  • cxx/: standard Fortran C / C++ bindings
  • real/: Numerous examples dealing with practical features of real floating point numbers, including sentinel NaN and polymorphism.
  • character/: String handling is easy and performant in modern Fortran.
  • standard/: advanced features that can be done with Fortran standard coding
  • submodule: Fortran 2008 and CMake ≥ 3.12 enable even better large program architecture with submodule
  • system/: system (hardware) functionality accessible via Fortran

Bugs

iso_fortran_env

Flang 6 and PGI 18.10 seem to have a bug with iso_fortran_env that doesn't allow compiler_version and compiler_options to work unless use iso_fortran_env is ONLY used in program and NOT module even if using only. Thus, simple programs like pragma.f90 work, but not the usual programs to print the compiler versions and options with Flang and PGI.

Resources

Fortran standards

Books

Compiler User Guides

Surveys

You can’t perform that action at this time.