(i) Because it is one of the simplest, easiest and most efficient
language for doing scientific/numerical computing. Features like
dynamic memory, modules (with public/private types), user defined
data types (even ADT's), pointers, function/subroutine overloading
etc.[a] provide all the flexibility needed for any
numerical/HPC application.
(ii) Also because
- The source itself is the pseudocode.
- L2 norm of a vector 'x' is simply
sqrt(sum(x**2))
- [B]'[D][B] is simply
matmul((matmul(transpose(B)),D),B)
Such math operations on arrays and intrinsics like 'matmul', use of
pure/elemental procedures, as well as statements such as 'forall'
provide a lot of room for compiler optimization and
auto-parallelization specially on multicore processors (in
ifort/sunf95 you just have to use the '-parallel/-xautopar'
compiler switch). Throw in libraries/API's such as Blas/Lapack,
OpenMP/MPI[b], SunPerf/MKL/ESSL, NAG/IMSL,
PETSc[b]/MUMPS/Scalapack etc. and you have all the tools
for your numerical computing/HPC needs. Moreover with the inclusion
of co-arrays
(available in Cray Fortran compiler since about a decade and more
recently in G95[c])[d]
in the next Fortran standard (2008), programming parallel machines
will be even more abstract and easier.
Here are some notes for installing and
using some popular parallel numerical libraries.
Here are some useful examples for new
Fortran 95 users.
---
[a] Fortran 2003 also adds many new features such as
type extension, parameterized derived types, type bound procedures,
procedure pointers, polymorphic entities, inheritance etc. but not
all compilers besides those from IBM and Cray support them yet.
[b] Provides Fortran interface
[c] If you want to run more than 5 images then you need
to shell out a small one time license fee
[d] A reference implementation of Co-array Fortran
(through OpenMP) is also available
(co-array.org) in case you simply want to try it out or use it on a
shared memory machine.