(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.