TestMatrixOperators.f90 Source File


Contents


Source Code

program mat_subop_test
    ! Test the function operators for matrices

use matrix_m
use vector_m
use iso_fortran_env, only: real64

implicit none

    type(matrix) :: m1, m2, m3, m4, m5, m6, i1, m7, hh, m8, m9, o1, o2, m10, m11
    type(vector) :: v1, v2, v3, v4, v5, v_temp
    real(real64), dimension(:,:), allocatable :: temp_a

    m1 = reshape([2,3,4,5], [2,2])
    m2 = reshape([1, 0, 0, 1], [2,2])

    v1 = [2, 4]

    m3 = m1 * m2

    call m1%print()
    print *, " times "
    call m2%print()
    print *, " equals "
    call m3%print()

    v2 = m1 * v1

    call m1%print()
    print *, "times"
    call v1%print()
    print *, " equals "
    call v2%print()
    
    m4 = m1 .o. m2

    call m4%print()
    print *

    m5 = m1 + m2

    call m1%print() 
    print *, "plus"
    call m2%print()
    print *, "equals"
    call m5%print()

    m6 = m4 - m3


    call m4%print() 
    print *, "minus"
    call m3%print()
    print *, "equals"
    call m6%print()

    i1 = i1%id(10)

    call i1%print()

    print *, "V1 = "
    call v1%print()
    print *, "V2 = "
    call v2%print()

    m7 = v1 .outer. v2

    print *, "Outer product: "
    call m7%print()

    v3 = [1, 2, 3]
    v4 = [1, 0, 0]

    v5 = v3 .hh. v4

    print *, v3%data(), " rotated over ", v4%data(), " = ", v5%data()

       
    hh = hh%create_hh(v4)
    call hh%print()

    hh = hh%create_hh(vector([0, 1, 0]))
    call hh%print()
    
    hh = hh%create_hh(vector([0, 0, 1]))
    call hh%print()

    
    v5 = hh * v3
    
    call v5%print()
    
    hh = hh%create_hh(vector([0, 0, 0, 0, 1]))
    call hh%print()

    print *
    print *
    print *, "Matrix decomposition methods"
    print *
    print *

    allocate(temp_a(3,2))

    call random_number(temp_a)

    m8 = temp_a

    call m8%print()

    o1 = m8%gram_schmidt()

    print *, "Calling gram_schmidt"

    print *
    print *

    call o1%print()

    print *, "is o1 orthonormal? : ", o1%is_orthonormal()


    v_temp = o1%get_col(1)

    print *, "Col 1 of o1 length = ", v_temp%length()

    deallocate(temp_a)
    allocate(temp_a(2, 4))

    call random_number(temp_a)

    m9 = temp_a

    o2 = m9%gram_schmidt()

    print *
    call m9%print()

    print*

    call o2%print()
    print *

    m10 = reshape([1, 2, 2, 4], [2,2])

    m11 = m10 ** 0

    call m10%print()

    print*, "m10 ** 0 = "
    call m11%print()

    m11 = m10**1

    print *, "m10 ** 1 = "
    call m11%print()

    m11 = m10**2

    print *, "m10 ** 2 = "
    call m11%print()

    m11 = m10**3

    print *, "m10 ** 3 = "
    call m11%print()

    m11 = m10**4

    print *, "m10 ** 4 = "
    call m11%print()


    
    
end program