the saga continues…
Assigning values to an array can be done in a number of ways. The first is the traditional technique using loops. The second uses an array constructor of the form:
real, dimension(3) :: a a = (/ 0.2, 0.4, 0.8 /)
There is also the notion of variable-dimension array arguments in subroutines, which makes it possible to write generic routines without explicitly specifying array dimensions passed to them.
subroutine SubX(N) integer, intent (in) :: N real, dimension (N) :: arrY end subroutine SubX
Fortran can automatically create arrays just with declarations on entry to subroutines, as long as the the dimensions are known at run time … this doesn’t require the dimensions to be declared parameter attribute, they can be arguments, e.g.,
Fortran 90 added support for array notation that allows operations on array sections, the use of vector indices, and the ability to perform array slicing. Here is an example:
program sliceArray implicit none integer, dimension(20,20) :: theArray integer :: i, j theArray = 0 theArray(7:14,7:14) = 1 do i = 1,20 do j = 1,20 write(*,"(I2)",advance="no") theArray(i,j) end do write(*,*) end do end program sliceArray
Here a 20×20 array is created, and all elements are set to zero. Next a square slice comprising 8×8 elements in the centre is set to 1. Easy!