# Array and Matrix

src/05_array.f90
! Program : ArrayPROGRAM array  IMPLICIT NONE  INTEGER :: vec(10)  INTEGER :: ii  OUTER_LOOP : DO ii = 1, 10    vec(ii) = ii  ENDDO OUTER_LOOP  DO ii = 1, 10    PRINT '(i2)', vec(ii)  ENDDOEND PROGRAM array

There is intrinsic SIZE function to determine the length of a vector, SIZE(vec). Another example where we use implied DO loop to assign an array:

src/05_array2.f90
PROGRAM array2    IMPLICIT NONE    INTEGER, DIMENSION(10) :: vec    INTEGER :: ii    vec = [(ii, ii = 1, 10)]    DO ii = 1, SIZE(vec)      PRINT '(i2)', vec(ii)    ENDDOEND PROGRAM array2

Dynamic array allocation with ALLOCATABLE:

INTEGER, DIMENSION(:), ALLOCATABLE :: aINTEGER ia = [(i, i = 1, 10)]DEALLOCATE(a)

See dynamic array allocation in this example.

Assign high dimensional array with RESHAPE:

a = RESHAPE([1, 2, 3, 4, 5, 6], [2, 3])! will produce! 1 3 5! 2 4 6a = RESHAPE([1, 2, 3, 4, 5, 6], [2, 3], order=[2, 1])! will produce! 1 2 3! 4 5 6

Matrix multiplication:

src/05_matrix_mult.f90
! Program : Matrix multiplicationPROGRAM matrix_mult  IMPLICIT NONE  INTEGER, DIMENSION(2, 3) :: A = RESHAPE([1, 2, 3, &                                           4, 5, 6], &                                           shape(A), &                                           order=[2, 1])  INTEGER, DIMENSION(3, 2) :: B = RESHAPE([1, 2, &                                           3, 4, &                                           5, 6], &                                           shape(B), &                                           order=[2, 1])  INTEGER, DIMENSION(2, 2) :: output  INTEGER :: ii  output = MATMUL(A, B)  DO ii = 1, 2    PRINT *, output(ii, :)  END DOEND PROGRAM matrix_mult

You can assign all the array element same value by assigning it a scaler value:

INTEGER, DIMENSION(2, 2) :: aa = 1! will produce! 1 1! 1 1