elliptic_nome_17_real32 Function

public elemental function elliptic_nome_17_real32(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=real32), intent(in) :: k

elliptic modulus

Return Value real(kind=real32)

elliptic nome


Calls

proc~~elliptic_nome_17_real32~~CallsGraph proc~elliptic_nome_17_real32 elliptic_nome_17_real32 proc~calculate_pw04_epsilon calculate_pw04_epsilon proc~elliptic_nome_17_real32->proc~calculate_pw04_epsilon proc~elliptic_nome_by_epsilon_17 elliptic_nome_by_epsilon_17 proc~elliptic_nome_17_real32->proc~elliptic_nome_by_epsilon_17 proc~evaluate_modulus evaluate_modulus proc~elliptic_nome_17_real32->proc~evaluate_modulus proc~calculate_pw01_epsilon calculate_pw01_epsilon proc~calculate_pw04_epsilon->proc~calculate_pw01_epsilon proc~elliptic_nome_by_epsilon_17_horner elliptic_nome_by_epsilon_17_horner proc~elliptic_nome_by_epsilon_17->proc~elliptic_nome_by_epsilon_17_horner proc~elliptic_nome_by_epsilon_13_horner elliptic_nome_by_epsilon_13_horner proc~elliptic_nome_by_epsilon_17_horner->proc~elliptic_nome_by_epsilon_13_horner proc~elliptic_nome_by_epsilon_09_horner elliptic_nome_by_epsilon_09_horner proc~elliptic_nome_by_epsilon_13_horner->proc~elliptic_nome_by_epsilon_09_horner proc~elliptic_nome_by_epsilon_05_horner elliptic_nome_by_epsilon_05_horner proc~elliptic_nome_by_epsilon_09_horner->proc~elliptic_nome_by_epsilon_05_horner

Called by

proc~~elliptic_nome_17_real32~~CalledByGraph proc~elliptic_nome_17_real32 elliptic_nome_17_real32 interface~elliptic_nome_17 elliptic_nome_17 interface~elliptic_nome_17->proc~elliptic_nome_17_real32

Variables

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

real(kind=real32), private :: pw01_eps

auxiliary parameter

real(kind=real32), private :: pw02_k

real(kind=real32), private :: pw04_eps

real(kind=real32), private :: sqrt_comp_k


Source Code

    elemental function elliptic_nome_17_real32(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 }
        !!             \\ & + 1707 { \varepsilon }^{ 17 }
        !! \end{align*}
        !! $$
        !! @note
        !! - The elliptic modulus \( k \) should satisfy \( { k }^{ 2 } \le 1/2 \).
        !! @endnote

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



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



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

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

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

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

        real(real32) :: 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_17( &!
                pw01_eps = pw01_eps , &!
                pw04_eps = pw04_eps   &!
            )

    end function elliptic_nome_17_real32