vector3 Derived Type

type, public :: vector3


Contents


Components

TypeVisibility AttributesNameInitial
real(kind=real64), public :: x
real(kind=real64), public :: y
real(kind=real64), public :: z

Type-Bound Procedures

procedure, public :: print => vector3_print

  • public subroutine vector3_print(self)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self

procedure, public :: length => vector3_magnitude

  • public function vector3_magnitude(self) result(length)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self

    Return Value real(kind=real64)

procedure, public :: to_array => vector3_to_array

  • public function vector3_to_array(self) result(array)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self

    Return Value real(kind=real64), dimension(3)

generic, public :: from_array => from_array_r32, from_array_r64, from_array_int

  • public subroutine vector3_from_array_r32(vector, array)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(out) :: vector
    real(kind=real32), intent(in), dimension(3):: array
  • public subroutine vector3_from_array_r64(vector, array)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(out) :: vector
    real(kind=real64), intent(in), dimension(3):: array
  • public subroutine vector3_from_array_int(vector, array)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(out) :: vector
    integer, intent(in), dimension(3):: array

generic, public :: operator(+) => add_vector3

generic, public :: operator(-) => subtract_vector3, unary_minus

generic, public :: operator(*) => multiply_scalar_r32, multiply_scalar_r64, multiply_scalar_int

  • public function vector3_times_scalar_r32(self, k) result(v2)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self
    real(kind=real32), intent(in) :: k

    Return Value type(vector3)

  • public function vector3_times_scalar_r64(self, k) result(v2)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self
    real(kind=real64), intent(in) :: k

    Return Value type(vector3)

  • public function vector3_times_scalar_int(self, k) result(v2)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self
    integer, intent(in) :: k

    Return Value type(vector3)

generic, public :: operator(.dot.) => dot

  • public function vector3_dot_vector3(self, v2) result(dot)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self
    class(vector3), intent(in) :: v2

    Return Value real(kind=real64)

generic, public :: operator(.cross.) => cross

generic, public :: operator(.angle.) => angle_between

  • public function vector3_angle_between_vector3(self, v2) result(theta)

    Return angle between vectors in degrees

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self
    class(vector3), intent(in) :: v2

    Return Value real(kind=real64)

generic, public :: assignment(=) => from_array_r32, from_array_r64, from_array_int

  • public subroutine vector3_from_array_r32(vector, array)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(out) :: vector
    real(kind=real32), intent(in), dimension(3):: array
  • public subroutine vector3_from_array_r64(vector, array)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(out) :: vector
    real(kind=real64), intent(in), dimension(3):: array
  • public subroutine vector3_from_array_int(vector, array)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(out) :: vector
    integer, intent(in), dimension(3):: array

procedure, public :: from_array_r32 => vector3_from_array_r32

  • public subroutine vector3_from_array_r32(vector, array)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(out) :: vector
    real(kind=real32), intent(in), dimension(3):: array

procedure, public :: from_array_r64 => vector3_from_array_r64

  • public subroutine vector3_from_array_r64(vector, array)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(out) :: vector
    real(kind=real64), intent(in), dimension(3):: array

procedure, public :: from_array_int => vector3_from_array_int

  • public subroutine vector3_from_array_int(vector, array)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(out) :: vector
    integer, intent(in), dimension(3):: array

procedure, public :: add_vector3 => vector3_plus_vector3

procedure, public :: multiply_scalar_r32 => vector3_times_scalar_r32

  • public function vector3_times_scalar_r32(self, k) result(v2)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self
    real(kind=real32), intent(in) :: k

    Return Value type(vector3)

procedure, public :: multiply_scalar_r64 => vector3_times_scalar_r64

  • public function vector3_times_scalar_r64(self, k) result(v2)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self
    real(kind=real64), intent(in) :: k

    Return Value type(vector3)

procedure, public :: multiply_scalar_int => vector3_times_scalar_int

  • public function vector3_times_scalar_int(self, k) result(v2)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self
    integer, intent(in) :: k

    Return Value type(vector3)

procedure, public :: dot => vector3_dot_vector3

  • public function vector3_dot_vector3(self, v2) result(dot)

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self
    class(vector3), intent(in) :: v2

    Return Value real(kind=real64)

procedure, public :: cross => vector3_cross_vector3

procedure, public :: angle_between => vector3_angle_between_vector3

  • public function vector3_angle_between_vector3(self, v2) result(theta)

    Return angle between vectors in degrees

    Arguments

    Type IntentOptional AttributesName
    class(vector3), intent(in) :: self
    class(vector3), intent(in) :: v2

    Return Value real(kind=real64)

procedure, public :: subtract_vector3 => vector3_minus_vector3

procedure, public :: unary_minus => vector3_unary_minus