vec4_class Module

Vector4 class module. Defines a vector4 type (x, y, z, p) and associated operations on vectors and other types.


Uses


Interfaces

public interface sin

Vec4 overload of the sin intrinsic

  • private pure elemental function sin_vec(p)

    Sine of a vec4, elementwise

    Arguments

    Type IntentOptional Attributes Name
    type(vec4), intent(in) :: p

    Input vec4

    Return Value type(vec4)

public interface vec4

Initalise a vec4 from a vec3 and a scalar

  • private function init_vec4_vector_real(vec, val) result(out)

    Initalise vec4 from a vec3 and Scalar e.g vec4 = [vec3%x, vec3%y, vec3%z, scalar]

    Arguments

    Type IntentOptional Attributes Name
    type(vector), intent(in) :: vec

    Input vec3

    real(kind=wp), intent(in) :: val

    Input Scalar

    Return Value type(vec4)


Derived Types

type, public ::  vec4

not fully implmented vec4 class

Components

Type Visibility Attributes Name Initial
real(kind=wp), public :: p

vec4 components

real(kind=wp), public :: x

vec4 components

real(kind=wp), public :: y

vec4 components

real(kind=wp), public :: z

vec4 components

Constructor

Initalise a vec4 from a vec3 and a scalar

private function init_vec4_vector_real (vec, val)

Initalise vec4 from a vec3 and Scalar e.g vec4 = [vec3%x, vec3%y, vec3%z, scalar]

Type-Bound Procedures

procedure, public :: length
procedure, public :: magnitude => magnitude_fn
generic, public :: operator(*) => vec_mult_vec, vec_mult_scal, scal_mult_vec ../../

Overloaded Mulitiplication operator

generic, public :: operator(+) => vec_add_vec, vec_add_scal, scal_add_vec ../../

Overloaded Addition operator

generic, public :: operator(-) => vec_minus_vec, vec_minus_scal, scal_minus_vec ../../

Overloaded Subtraction operator

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

.dot. operator

generic, public :: operator(/) => vec_div_scal_r4, vec_div_scal_r8, vec_div_scal_int ../../

Overloaded Division operator

procedure, private, pass(b) :: scal_add_vec
procedure, private, pass(b) :: scal_minus_vec
procedure, private, pass(b) :: scal_mult_vec
procedure, private, pass(a) :: vec_add_scal
procedure, private, pass(a) :: vec_add_vec
procedure, private, pass(a) :: vec_div_scal_int
procedure, private, pass(a) :: vec_div_scal_r4
procedure, private, pass(a) :: vec_div_scal_r8
procedure, private, pass(a) :: vec_dot_vec
procedure, private, pass(a) :: vec_minus_scal
procedure, private, pass(a) :: vec_minus_vec
procedure, private, pass(a) :: vec_mult_scal
procedure, private, pass(a) :: vec_mult_vec

Functions

private function init_vec4_vector_real(vec, val) result(out)

Initalise vec4 from a vec3 and Scalar e.g vec4 = [vec3%x, vec3%y, vec3%z, scalar]

Arguments

Type IntentOptional Attributes Name
type(vector), intent(in) :: vec

Input vec3

real(kind=wp), intent(in) :: val

Input Scalar

Return Value type(vec4)

private pure elemental function length(this)

Returns the length of a vec4

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: this

Return Value real(kind=wp)

private pure elemental function magnitude_fn(this)

Returns the magnitude of a vec4

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: this

Return Value type(vec4)

private pure elemental function scal_add_vec(a, b)

Elementwise scalar + vec4

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: a

Scalar to add

class(vec4), intent(in) :: b

Input vec4

Return Value type(vec4)

private pure elemental function scal_minus_vec(a, b)

Elementwise Scalar - vec4

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: a

Scalar to subtract

class(vec4), intent(in) :: b

Input vec4

Return Value type(vec4)

private pure elemental function scal_mult_vec(a, b)

Elementwise Scalar * vec4

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: a

Scalar to multiply by

class(vec4), intent(in) :: b

Input vec4

Return Value type(vec4)

private pure elemental function sin_vec(p)

Sine of a vec4, elementwise

Arguments

Type IntentOptional Attributes Name
type(vec4), intent(in) :: p

Input vec4

Return Value type(vec4)

private pure elemental function vec_add_scal(a, b)

Elementwise vec4 + scalar

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: a

Input vec4

real(kind=wp), intent(in) :: b

Scalar to add

Return Value type(vec4)

private pure elemental function vec_add_vec(a, b)

Elementwise vec4 + vec4

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: a

Input vec4

type(vec4), intent(in) :: b

vec4 to add

Return Value type(vec4)

private pure elemental function vec_div_scal_int(a, b)

Elementwise vec4 / Scalar. Scalar is an integer

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: a

Input vec4

integer, intent(in) :: b

Scalar to divide by

Return Value type(vec4)

private pure elemental function vec_div_scal_r4(a, b)

Elementwise vec4 / Scalar. Scalar is 32-bit float

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: a

Input vec4

real(kind=sp), intent(in) :: b

Scalar to divide by

Return Value type(vec4)

private pure elemental function vec_div_scal_r8(a, b)

Elementwise vec4 / Scalar. Scalar is 32-bit float

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: a

Input vec4

real(kind=dp), intent(in) :: b

Scalar to divide by

Return Value type(vec4)

private pure elemental function vec_dot_vec(a, b) result(dot)

dot product between two vec4s

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: a

Input vec4

type(vec4), intent(in) :: b

vec4 to dot with

Return Value real(kind=wp)

private pure elemental function vec_minus_scal(a, b)

Elementwise vec4 - scalar

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: a

Input vec4

real(kind=wp), intent(in) :: b

Scalar to subtract

Return Value type(vec4)

private pure elemental function vec_minus_vec(a, b)

Elementwise vec4 - vec4

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: a

Input vec4

type(vec4), intent(in) :: b

vec4 to subtract

Return Value type(vec4)

private pure elemental function vec_mult_scal(a, b)

Elementwise vec4 * Scalar

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: a

Input vec4

real(kind=wp), intent(in) :: b

Scalar to multiply by

Return Value type(vec4)

private pure elemental function vec_mult_vec(a, b)

Elementwise vec4 * vec4

Arguments

Type IntentOptional Attributes Name
class(vec4), intent(in) :: a

Input vec4

type(vec4), intent(in) :: b

vec4 to multiply by

Return Value type(vec4)