lorentz_group Module

This module contains the definitions of the TYPES representing objects in the Lorentz group, that is, the isometry group of the Lorentz metric

FT 23.02.2022



Uses

  • module~~lorentz_group~~UsesGraph module~lorentz_group lorentz_group module~utility utility module~lorentz_group->module~utility tensor tensor module~lorentz_group->tensor constants constants module~utility->constants matrix matrix module~utility->matrix

Used by

  • module~~lorentz_group~~UsedByGraph module~lorentz_group lorentz_group module~actions actions module~actions->module~lorentz_group module~constructors constructors module~constructors->module~lorentz_group program~construct_newtonian_binary construct_newtonian_binary program~construct_newtonian_binary->module~lorentz_group

Contents


Variables

Type Visibility Attributes Name Initial
double precision, public, parameter, DIMENSION(n_sym4x4) :: eta = [-one, zero, zero, zero, one, zero, zero, one, zero, one]

Minkowski metric


Interfaces

interface

  • public module function apply_as_congruence_to_symrank2_tensor(this, t) result(transformed_t)

    Action of the lorentz_transformation on a -vector

    Arguments

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

    lorentz_transformation object to apply

    double precision, intent(in), DIMENSION(n_sym4x4) :: t

    -vector storing the components of the symmetric tensor to be boosted

    Return Value double precision, DIMENSION(n_sym4x4)

    -vector storing the components of the boosted symmetric tensor

interface

  • public module function apply_as_congruence_to_tensor(this, t) result(transformed_t)

    Action of the lorentz_transformation on a -vector

    Arguments

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

    lorentz_transformation object to apply

    double precision, intent(in), DIMENSION(4,4) :: t(0:3,0:3)

    tensor to be boosted

    Return Value double precision, DIMENSION(4,4), (0:3,0:3)

    Boosted tensor

interface

  • public module function apply_as_similarity_to_symrank2_tensor(this, t) result(transformed_t)

    Action of the lorentz_transformation on a -vector

    Arguments

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

    lorentz_transformation object to apply

    double precision, intent(in), DIMENSION(n_sym4x4) :: t

    -vector storing the components of the symmetric tensor to be boosted

    Return Value double precision, DIMENSION(n_sym4x4)

    -vector storing the components of the boosted symmetric tensor

interface

  • public module function apply_as_similarity_to_tensor(this, t) result(transformed_t)

    Action of the lorentz_transformation on a -vector

    Arguments

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

    lorentz_transformation object to apply

    double precision, intent(in), DIMENSION(4,4) :: t(0:3,0:3)

    tensor to be boosted

    Return Value double precision, DIMENSION(4,4), (0:3,0:3)

    Boosted tensor

interface

  • public module function apply_to_vector(this, u) result(transformed_u)

    Action of the lorentz_transformation on a -vector

    Arguments

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

    lorentz_transformation object to apply

    double precision, intent(in), DIMENSION(4) :: u(0:3)

    -vector to be boosted

    Return Value double precision, DIMENSION(4), (0:3)

    Boosted -vector

interface

  • public pure module subroutine compute_boost_matrices(this, p, lambda_s, matrix)

    Compute the matrices for the lorentz_boost

    Arguments

    Type IntentOptional Attributes Name
    class(lorentz_boost), intent(inout) :: this
    double precision, intent(in), DIMENSION(3) :: p

    lambdav

    double precision, intent(out), DIMENSION(n_sym3x3) :: lambda_s

    Spatial part of the Lorentz boost

    double precision, intent(out), DIMENSION(4,4) :: matrix(0:3,0:3)

    matrix representing the Lorentz boost

interface

  • public module subroutine compute_rotation_matrices(this, euler_angles, r_x, r_y, r_z, r, matrix, inv_r_x, inv_r_y, inv_r_z, inv_r, inv_matrix)

    Compute the matrices for the spatial_rotation

    Arguments

    Type IntentOptional Attributes Name
    class(spatial_rotation), intent(inout) :: this

    spatial_rotation object to compuet the matrices for

    double precision, intent(in), DIMENSION(3) :: euler_angles

    lambdav

    double precision, intent(out), DIMENSION(3,3) :: r_x

    Rotation operator around the axis

    double precision, intent(out), DIMENSION(3,3) :: r_y

    Rotation operator around the axis

    double precision, intent(out), DIMENSION(3,3) :: r_z

    Rotation operator around the axis

    double precision, intent(out), DIMENSION(3,3) :: r

    Full rotation operator

    double precision, intent(out), DIMENSION(4,4) :: matrix(0:3,0:3)

    matrix representing the Lorentz boost

    double precision, intent(out), DIMENSION(3,3) :: inv_r_x

    Inverse rotation operator around the axis

    double precision, intent(out), DIMENSION(3,3) :: inv_r_y

    Inverse rotation operator around the axis

    double precision, intent(out), DIMENSION(3,3) :: inv_r_z

    Inverse rotation operator around the axis

    double precision, intent(out), DIMENSION(3,3) :: inv_r

    Inverse of the full rotation operator

    double precision, intent(out), DIMENSION(4,4) :: inv_matrix(0:3,0:3)

    Inverse of the matrix representing the Lorentz boost

interface

  • public pure module function get_lambda(this) result(lambda)

    Returns the Lorentz factor lambda

    Arguments

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

    lorentz_boost object owning this FUNCTION

    Return Value double precision

    Lorentz factor lambda

public interface lorentz_boost

  • public module function construct_boost(v) result(boost)

    Arguments

    Type IntentOptional Attributes Name
    double precision, intent(in), DIMENSION(3) :: v

    Spatial velocity that determines the boost

    Return Value type(lorentz_boost)

    lorentz_boost object to be constructed

  • public module function construct_boost_components(vx, vy, vz) result(boost)

    Arguments

    Type IntentOptional Attributes Name
    double precision, intent(in) :: vx

    component of the spatial velocity that determines the boost

    double precision, intent(in) :: vy

    component of the spatial velocity that determines the boost

    double precision, intent(in) :: vz

    component of the spatial velocity that determines the boost

    Return Value type(lorentz_boost)

    lorentz_boost object to be constructed

public interface spatial_rotation

  • public module function construct_rotation(euler_angles) result(rotation)

    Arguments

    Type IntentOptional Attributes Name
    double precision, intent(in), DIMENSION(3) :: euler_angles

    Euler angles that define the rotation around the axes, in this order

    Return Value type(spatial_rotation)

    spatial_rotation object to be constructed

  • public module function construct_rotation_angles(alpha, beta, gamma) result(rotation)

    Arguments

    Type IntentOptional Attributes Name
    double precision, intent(in) :: alpha

    Euler angle that defines the rotation around the axis

    double precision, intent(in) :: beta

    Euler angle that defines the rotation around the axis

    double precision, intent(in) :: gamma

    Euler angle that defines the rotation around the axis

    Return Value type(spatial_rotation)

    spatial_rotation object to be constructed


Derived Types

type, public, extends(lorentz_transformation) ::  lorentz_boost

TYPE representing a Lorentz boost

Components

Type Visibility Attributes Name Initial
double precision, private, DIMENSION(n_sym3x3) :: inv_lambda_s

Spatial part of the inverse Lorentz boost

double precision, private :: lambda

Lorentz factor

double precision, private, DIMENSION(n_sym3x3) :: lambda_s

Spatial part of the Lorentz boost

double precision, private, DIMENSION(3) :: p

Spatial vector equal to

double precision, private, DIMENSION(3) :: v

Spatial velocity that determines the boost

double precision, private :: v_speed

Euclidean norm of v (its speed)

Constructor

public module function construct_boost (v)
public module function construct_boost_components (vx, vy, vz)

Type-Bound Procedures

generic, public :: apply_as_congruence => apply_as_congruence_to_tensor, apply_as_congruence_to_symrank2_tensor

Generic procedure to apply the lorentz_transformation as a congruence

procedure , public , NON_OVERRIDABLE :: apply_as_congruence_to_symrank2_tensor Interface

Action of the lorentz_transformation as a congruence on a -vector storing the components of a symmetric, purely covariant, tensor

procedure , public , NON_OVERRIDABLE :: apply_as_congruence_to_tensor Interface

Action of the lorentz_transformation as a congruence on a generic purely covariant tensor

generic, public :: apply_as_similarity => apply_as_similarity_to_tensor, apply_as_similarity_to_symrank2_tensor

Generic procedure to apply the lorentz_transformation as a similarity

procedure , public , NON_OVERRIDABLE :: apply_as_similarity_to_symrank2_tensor Interface

Action of the lorentz_transformation as a similarity on a -vector storing the components of a symmetric tensor

procedure , public , NON_OVERRIDABLE :: apply_as_similarity_to_tensor Interface

Action of the lorentz_transformation as a similarity on a generic tensor

procedure , public , NON_OVERRIDABLE :: apply_to_vector Interface

Action of the lorentz_transformation on a -vector

procedure , public :: compute_boost_matrices Interface

Computes the spatial part of the matrix of the Lorentz boost, and its whole matrix, starting from the vector

procedure , public :: get_lambda Interface

Returns the Lorentz factor lambda

type, public ::  lorentz_transformation

TYPE representing a 4D, proper, orthochronous Lorentz transformation

Components

Type Visibility Attributes Name Initial
double precision, private, DIMENSION(4,4) :: inv_matrix(0:3,0:3)

matrix representing the inverse Lorentz transformation

double precision, private, DIMENSION(4,4) :: matrix(0:3,0:3)

matrix representing the Lorentz transformation

double precision, private, DIMENSION(4,4) :: tr_matrix(0:3,0:3)

Transpose of the matrix representing the Lorentz transformation

Type-Bound Procedures

generic, public :: apply_as_congruence => apply_as_congruence_to_tensor, apply_as_congruence_to_symrank2_tensor

Generic procedure to apply the lorentz_transformation as a congruence

procedure , public , NON_OVERRIDABLE :: apply_as_congruence_to_symrank2_tensor Interface

Action of the lorentz_transformation as a congruence on a -vector storing the components of a symmetric, purely covariant, tensor

procedure , public , NON_OVERRIDABLE :: apply_as_congruence_to_tensor Interface

Action of the lorentz_transformation as a congruence on a generic purely covariant tensor

generic, public :: apply_as_similarity => apply_as_similarity_to_tensor, apply_as_similarity_to_symrank2_tensor

Generic procedure to apply the lorentz_transformation as a similarity

procedure , public , NON_OVERRIDABLE :: apply_as_similarity_to_symrank2_tensor Interface

Action of the lorentz_transformation as a similarity on a -vector storing the components of a symmetric tensor

procedure , public , NON_OVERRIDABLE :: apply_as_similarity_to_tensor Interface

Action of the lorentz_transformation as a similarity on a generic tensor

procedure , public , NON_OVERRIDABLE :: apply_to_vector Interface

Action of the lorentz_transformation on a -vector

type, public, extends(lorentz_transformation) ::  spatial_rotation

TYPE representing a spatial rotation

Components

Type Visibility Attributes Name Initial
double precision, private, DIMENSION(3) :: euler_angles

Euler angles that define the rotation around the axes, in this order

double precision, private, DIMENSION(3,3) :: inv_r

Full inverse rotation operator

double precision, private, DIMENSION(3,3) :: inv_r_x

Inverse rotation operator around the axis

double precision, private, DIMENSION(3,3) :: inv_r_y

Inverse rotation operator around the axis

double precision, private, DIMENSION(3,3) :: inv_r_z

Inverse rotation operator around the axis

double precision, private, DIMENSION(3,3) :: r

Full rotation operator

double precision, private, DIMENSION(3,3) :: r_x

Rotation operator around the axis

double precision, private, DIMENSION(3,3) :: r_y

Rotation operator around the axis

double precision, private, DIMENSION(3,3) :: r_z

Rotation operator around the axis

double precision, private, DIMENSION(3,3) :: tr_r

Transpose of the full inverse rotation operator

Constructor

public module function construct_rotation (euler_angles)
public module function construct_rotation_angles (alpha, beta, gamma)

Type-Bound Procedures

generic, public :: apply_as_congruence => apply_as_congruence_to_tensor, apply_as_congruence_to_symrank2_tensor

Generic procedure to apply the lorentz_transformation as a congruence

procedure , public , NON_OVERRIDABLE :: apply_as_congruence_to_symrank2_tensor Interface

Action of the lorentz_transformation as a congruence on a -vector storing the components of a symmetric, purely covariant, tensor

procedure , public , NON_OVERRIDABLE :: apply_as_congruence_to_tensor Interface

Action of the lorentz_transformation as a congruence on a generic purely covariant tensor

generic, public :: apply_as_similarity => apply_as_similarity_to_tensor, apply_as_similarity_to_symrank2_tensor

Generic procedure to apply the lorentz_transformation as a similarity

procedure , public , NON_OVERRIDABLE :: apply_as_similarity_to_symrank2_tensor Interface

Action of the lorentz_transformation as a similarity on a -vector storing the components of a symmetric tensor

procedure , public , NON_OVERRIDABLE :: apply_as_similarity_to_tensor Interface

Action of the lorentz_transformation as a similarity on a generic tensor

procedure , public , NON_OVERRIDABLE :: apply_to_vector Interface

Action of the lorentz_transformation on a -vector

procedure , public :: compute_rotation_matrices Interface

Computes the spatial part of the matrix of the Lorentz


Functions

public pure function euclidean_inner_product(u, v) result(inner_product)

Arguments

Type IntentOptional Attributes Name
double precision, intent(in), DIMENSION(3) :: u
double precision, intent(in), DIMENSION(3) :: v

Return Value double precision

public pure function minkowski_inner_product(u, v) result(inner_product)

Arguments

Type IntentOptional Attributes Name
double precision, intent(in), DIMENSION(4) :: u(0:3)
double precision, intent(in), DIMENSION(4) :: v(0:3)

Return Value double precision

public pure function minkowski_sqnorm(u) result(sqnorm)

Arguments

Type IntentOptional Attributes Name
double precision, intent(in), DIMENSION(4) :: u(0:3)

Return Value double precision

public pure function row_by_column(u, v) result(res)

Arguments

Type IntentOptional Attributes Name
double precision, intent(in), DIMENSION(:) :: u

Row

double precision, intent(in), DIMENSION(:) :: v

Column

Return Value double precision

public function square_matrix_multiplication(a, b) result(c)

Arguments

Type IntentOptional Attributes Name
double precision, intent(in), DIMENSION(:,:) :: a

First matrix

double precision, intent(in), DIMENSION(:,:) :: b

Second matrix

Return Value double precision, DIMENSION(SIZE(a(1,:)),SIZE(a(1,:)))