Section Arrays: Reshape#

Adapted from: gjbex/Fortran-MOOC

This program reshapes an array into a matrix in Fortran.#

program reshape_test
    implicit none
    integer, parameter :: nr_values = 12
    integer :: i
    integer, dimension(nr_values) :: values = [ (i, i=1, nr_values) ]
    integer, dimension(2, 5) :: too_small
    integer, dimension(3, 5) :: too_large

    too_small = reshape(values, shape(too_small))
    call print_matrix(too_small)

    too_large = reshape(values, shape(too_large), pad=[-1, -2])
    call print_matrix(too_large)

contains

    subroutine print_matrix(A)
        implicit none
        integer, dimension(:, :), intent(in) :: A
        integer :: i

        do i = 1, size(A, 1)
            print *, A(i, :)
        end do
    end subroutine print_matrix

end program reshape_test

The above program is compiled and run using Fortran Package Manager (fpm):

Build the Program using FPM (Fortran Package Manager)#

import os
root_dir = os.getcwd()
code_dir = root_dir + "/" + "Fortran_Code/Section_Arrays_Reshape"
os.chdir(code_dir)
build_status = os.system("fpm build 2>/dev/null")

Run the Program using FPM (Fortran Package Manager)#

exec_status = os.system("fpm run 2>/dev/null")
           1           3           5           7           9
           2           4           6           8          10

           1           4           7          10          -1
           2           5           8          11          -2
           3           6           9          12          -1