TestVectorOperator.f90 Source File


Contents


Source Code

program operator_test
!! Test the functional operators
use vector_m
use iso_fortran_env

implicit none

    type(vector) :: v1, v2, v3, res, z, x, y, v4
    real(real64) :: scal_res

    v1 = [1, 2, 4]
    v2 = [6, 5, 10]
    z = [0, 0, 1]
    x = [1, 0, 0]
    y = [0, 1, 0]

    scal_res = v1 .dot. v2
    print *, "Dot product of ", v1%data(), " and ", v2%data(), " = ", scal_res

    v3 = v1 .proj. v2

    v2 = v2%normalized()
    v3 = v3%normalized()
    scal_res = v2 .dot. v3

    print*, "Dot product of v2 and v3 = ", scal_res

    res = v1 + v2

    v1 = [1, 5, 8]
    v2 = [1, -3, -5]
    res = v1 + v2
    print*, "v1: ", v1%data(), " + ", v2%data(), " = ", res%data()

    res = v1 - v2
    print*, "v1: ", v1%data(), " - ", v2%data(), " = ", res%data()

    res = v1 * 10
    print*, "v1: ", v1%data(), " * 10 = ", res%data()

    v2 = [100, 6, 5]
    res = v2 / 10
    print*, "v2: ", v2%data(), " /10 = ", res%data()

    res = v1 .o. v2
    print*, "v1: ", v1%data(), " * ", v2%data(), " = ", res%data()

    res = v1 / v2
    print*, "v1: ", v1%data(), " / ", v2%data(), " = ", res%data()

    res = 5 * v1
    print *, "5 * ", v1%data(), " = ", res%data()

    res = 5 / v1
    print *, "5 / ", v1%data(), " = ", res%data()

    res = -v1
    print *, "-(", v1%data(), ") = ", res%data()

    res = v1%orthogonalized(vector([0, 0, 1]))
    print *, "v1%orthogonalized([0, 0, 1]) = ", res%data()

    print *, "Scalar = " , (v1 .dot. z) / (z .dot. z)
    res = v1 .proj. z
    print *, "v1 .proj. z = ", res%data()

    res = v1%orthonormalized(vector([0, 0, 1]))
    print *, "v1%orthogonormalized([0, 0, 1]) = ", res%data()


    99 format(80("="))
    print 99
    print 99
    print *, "House holder transformation tests"
    print 99
    print 99

    res = v1 .hh. z
    print *, "v1 .hh. z = ", res%data()

    res = v1 .hh. y
    print *, "v1 .hh. y = ", res%data()

    res = v1 .hh. x
    print *, "v1 .hh. x = ", res%data()

    res = v1 .hhnorm. x
    ! res = res * -1/(res%at(1))
    print *, "v1 .hhnorm. x = ", res%data()

    res = v1%normalized() .hh. res
    print *, "v1 .hh. res = ", res%data()

    v4 = v4%zero(10)

    call v4%print()


    
end program