wignerd Module

Module for computing the Wigner D-matrix and d-matrix (big D and little d; Fortran is case insensitive). The d-matrix can be calculated via the analytic expression, but this can overflow for large j due to the ratios of large factoials. The d-matrix can instead be calculated via sparse banded matrix diagonalization. See DOI: 10.1103PhysRevE.92.043307 for more details.


Interfaces

public interface wigner_d

Interface to access the routines to calculate the matrix D(α,β,γ) or d(β) based on the number of arguments

  • private module function wigner_big_D_jint(j, euler_alpha, euler_beta, euler_gamma, use_analytic) result(D)

    Return the wigner D-matrix for integer j

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: j

    The angular momentum

    real(kind=rp), intent(in) :: euler_alpha

    The Euler angle α

    real(kind=rp), intent(in) :: euler_beta

    The Euler angle β

    real(kind=rp), intent(in) :: euler_gamma

    The Euler angle γ

    logical, intent(in), optional :: use_analytic

    Force the use of the analytic expression to obtain ?

    Return Value complex(kind=rp), allocatable, (:,:)

    The Wigner D-matrix

  • private module function wigner_big_D_jreal(j, euler_alpha, euler_beta, euler_gamma, use_analytic) result(D)

    Return the wigner D-matrix for real j

    Arguments

    Type IntentOptional Attributes Name
    real(kind=rp), intent(in) :: j

    The angular momentum

    real(kind=rp), intent(in) :: euler_alpha

    The Euler angle α

    real(kind=rp), intent(in) :: euler_beta

    The Euler angle β

    real(kind=rp), intent(in) :: euler_gamma

    The Euler angle γ

    logical, intent(in), optional :: use_analytic

    Force the use of the analytic expression to obtain ?

    Return Value complex(kind=rp), allocatable, (:,:)

    The Wigner D-matrix

  • private module function wigner_little_d_jint(j, euler_beta, use_analytic) result(d)

    Return the Wigner d-matrix for integer j

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: j

    The angular momentum

    real(kind=rp), intent(in) :: euler_beta

    The euler angle β

    logical, intent(in), optional :: use_analytic

    Force the use of the analytic expression to obtain ?

    Return Value real(kind=rp), allocatable, (:,:)

    The matrix

  • private module function wigner_little_d_jreal(j, euler_beta, use_analytic) result(d)

    Return the Wigner d-matrix for real j

    Arguments

    Type IntentOptional Attributes Name
    real(kind=rp), intent(in) :: j

    The angular momentum

    real(kind=rp), intent(in) :: euler_beta

    The euler angle β

    logical, intent(in), optional :: use_analytic

    Force the use of the analytic expression to obtain ?

    Return Value real(kind=rp), allocatable, (:,:)

    The matrix

public interface wigner_big_D

Interface to access the routines to calculate D(α,β,γ) via matrix diagonalization or the analytic expression

  • private module function wigner_big_D_jint(j, euler_alpha, euler_beta, euler_gamma, use_analytic) result(D)

    Return the wigner D-matrix for integer j

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: j

    The angular momentum

    real(kind=rp), intent(in) :: euler_alpha

    The Euler angle α

    real(kind=rp), intent(in) :: euler_beta

    The Euler angle β

    real(kind=rp), intent(in) :: euler_gamma

    The Euler angle γ

    logical, intent(in), optional :: use_analytic

    Force the use of the analytic expression to obtain ?

    Return Value complex(kind=rp), allocatable, (:,:)

    The Wigner D-matrix

  • private module function wigner_big_D_jreal(j, euler_alpha, euler_beta, euler_gamma, use_analytic) result(D)

    Return the wigner D-matrix for real j

    Arguments

    Type IntentOptional Attributes Name
    real(kind=rp), intent(in) :: j

    The angular momentum

    real(kind=rp), intent(in) :: euler_alpha

    The Euler angle α

    real(kind=rp), intent(in) :: euler_beta

    The Euler angle β

    real(kind=rp), intent(in) :: euler_gamma

    The Euler angle γ

    logical, intent(in), optional :: use_analytic

    Force the use of the analytic expression to obtain ?

    Return Value complex(kind=rp), allocatable, (:,:)

    The Wigner D-matrix

public interface wigner_little_d

Interface to access the routines to calculate d(β) via matrix diagonalization or the analytic expression

  • private module function wigner_little_d_jint(j, euler_beta, use_analytic) result(d)

    Return the Wigner d-matrix for integer j

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: j

    The angular momentum

    real(kind=rp), intent(in) :: euler_beta

    The euler angle β

    logical, intent(in), optional :: use_analytic

    Force the use of the analytic expression to obtain ?

    Return Value real(kind=rp), allocatable, (:,:)

    The matrix

  • private module function wigner_little_d_jreal(j, euler_beta, use_analytic) result(d)

    Return the Wigner d-matrix for real j

    Arguments

    Type IntentOptional Attributes Name
    real(kind=rp), intent(in) :: j

    The angular momentum

    real(kind=rp), intent(in) :: euler_beta

    The euler angle β

    logical, intent(in), optional :: use_analytic

    Force the use of the analytic expression to obtain ?

    Return Value real(kind=rp), allocatable, (:,:)

    The matrix