elliptic_nome_13_real64 Function

public elemental function elliptic_nome_13_real64(k) result(q)

Calculate the elliptic nome using the Horner's method and the following polynomial:

Note

  • The elliptic modulus should satisfy .

Arguments

Type IntentOptional Attributes Name
real(kind=real64), intent(in) :: k

elliptic modulus

Return Value real(kind=real64)

elliptic nome


Calls

proc~~elliptic_nome_13_real64~~CallsGraph proc~elliptic_nome_13_real64 elliptic_nome_13_real64 proc~calculate_pw04_epsilon~3 calculate_pw04_epsilon proc~elliptic_nome_13_real64->proc~calculate_pw04_epsilon~3 proc~elliptic_nome_by_epsilon_13~3 elliptic_nome_by_epsilon_13 proc~elliptic_nome_13_real64->proc~elliptic_nome_by_epsilon_13~3 proc~evaluate_modulus~3 evaluate_modulus proc~elliptic_nome_13_real64->proc~evaluate_modulus~3 proc~calculate_pw01_epsilon~3 calculate_pw01_epsilon proc~calculate_pw04_epsilon~3->proc~calculate_pw01_epsilon~3 proc~elliptic_nome_by_epsilon_13_horner~3 elliptic_nome_by_epsilon_13_horner proc~elliptic_nome_by_epsilon_13~3->proc~elliptic_nome_by_epsilon_13_horner~3 proc~elliptic_nome_by_epsilon_09_horner~3 elliptic_nome_by_epsilon_09_horner proc~elliptic_nome_by_epsilon_13_horner~3->proc~elliptic_nome_by_epsilon_09_horner~3 proc~elliptic_nome_by_epsilon_05_horner~3 elliptic_nome_by_epsilon_05_horner proc~elliptic_nome_by_epsilon_09_horner~3->proc~elliptic_nome_by_epsilon_05_horner~3

Called by

proc~~elliptic_nome_13_real64~~CalledByGraph proc~elliptic_nome_13_real64 elliptic_nome_13_real64 interface~elliptic_nome_13 elliptic_nome_13 interface~elliptic_nome_13->proc~elliptic_nome_13_real64

Variables

Type Visibility Attributes Name Initial
real(kind=real64), private :: comp_k

real(kind=real64), private :: pw01_eps

auxiliary parameter

real(kind=real64), private :: pw02_k

real(kind=real64), private :: pw04_eps

real(kind=real64), private :: sqrt_comp_k


Source Code

    elemental function elliptic_nome_13_real64(k) result(q)
        !! Calculate the elliptic nome \( q \) using
        !! the Horner's method and
        !! the following polynomial:
        !! $$
        !! \begin{align*}
        !! \varepsilon &:= \frac{ 1 }{ 2 } \frac{ 1 - \sqrt{ { k }^{ \prime } } }{ 1 + \sqrt{ { k }^{ \prime } } } \\
        !! q(\varepsilon) &:=       \varepsilon
        !!             \\ & +   2 { \varepsilon }^{  5 }
        !!             \\ & +  15 { \varepsilon }^{  9 }
        !!             \\ & + 150 { \varepsilon }^{ 13 }
        !! \end{align*}
        !! $$
        !! @note
        !! - The elliptic modulus \( k \) should satisfy \( { k }^{ 2 } \le 1/2 \).
        !! @endnote

        real(real64), intent(in) :: k !! elliptic modulus \( k \)



        real(real64) :: q !! elliptic nome \( q \)



        real(real64) :: comp_k !! \( { k }^{ \prime } \)

        real(real64) :: pw02_k !! \( { k }^{ 2 } \)

        real(real64) :: sqrt_comp_k !! \( \sqrt{ { k }^{ \prime } } \)

        real(real64) :: pw01_eps !! auxiliary parameter \( \varepsilon \)

        real(real64) :: pw04_eps !! \( { \varepsilon }^{ 4 } \)



        call evaluate_modulus(k = k, pw02_k = pw02_k, comp_k = comp_k)

        call calculate_pw04_epsilon( &!
        &        pw02_k   =      pw02_k   , &!
        &        comp_k   =      comp_k   , &!
        &   sqrt_comp_k   = sqrt_comp_k   , &!
        &        pw01_eps =      pw01_eps , &!
        &        pw04_eps =      pw04_eps   &!
        )

        q = &!
            elliptic_nome_by_epsilon_13( &!
                pw01_eps = pw01_eps , &!
                pw04_eps = pw04_eps   &!
            )

    end function elliptic_nome_13_real64