elliptic_nome_fortran.f90 Source File


This file depends on

sourcefile~~elliptic_nome_fortran.f90~~EfferentGraph sourcefile~elliptic_nome_fortran.f90 elliptic_nome_fortran.f90 sourcefile~elliptic_nome_fortran_real128.f90 elliptic_nome_fortran_real128.f90 sourcefile~elliptic_nome_fortran.f90->sourcefile~elliptic_nome_fortran_real128.f90 sourcefile~elliptic_nome_fortran_real32.f90 elliptic_nome_fortran_real32.f90 sourcefile~elliptic_nome_fortran.f90->sourcefile~elliptic_nome_fortran_real32.f90 sourcefile~elliptic_nome_fortran_real64.f90 elliptic_nome_fortran_real64.f90 sourcefile~elliptic_nome_fortran.f90->sourcefile~elliptic_nome_fortran_real64.f90

Source Code

module elliptic_nome_fortran
    !! Compute nome \( q \) for elliptic integrals corresponding to modulus \( k \)
    !! $$
    !! \begin{aligned}
    !! K (k) &:= \int_{ 0 }^{ \pi / 2 } \frac{ d \theta }{ \sqrt{ 1 - { k }^{ 2 } \sin^{ 2 } \theta } } \\
    !! { k }^{ \prime } &:= \sqrt{ 1 - { k }^{ 2 } } \\
    !! { K }^{ \prime } (k) &:= K ( { k }^{ \prime } ) \\
    !! q &:= e^{ - \pi { K }^{ \prime } (k) / K (k) } \\
    !! \varepsilon &:= \frac{ 1 }{ 2 } \frac{ 1 - \sqrt{ { k }^{ \prime } } }{ 1 + \sqrt{ { k }^{ \prime } } }
    !! \end{aligned}
    !! $$
    !! @note
    !! - 山内二郎, 宇野利雄, 一松信 共編  
    !!   電子計算機のための数値計算法 3  
    !!   培風館, 1972.  
    !!   数理科学シリーズ ; 5  
    !!   [NDLサーチ](https://ndlsearch.ndl.go.jp/books/R100000039-I2422322)
    !! - [A002103 - OEIS](https://oeis.org/A002103)
    !! @endnote

    use, non_intrinsic :: elliptic_nome_fortran_real32
    use, non_intrinsic :: elliptic_nome_fortran_real64
    use, non_intrinsic :: elliptic_nome_fortran_real128



    implicit none



    private



    public :: elliptic_nome_01
    public :: elliptic_nome_05
    public :: elliptic_nome_09
    public :: elliptic_nome_13
    public :: elliptic_nome_17
    public :: elliptic_nome_21
    public :: elliptic_nome_25
    public :: elliptic_nome_29
    public :: elliptic_nome_33
    public :: elliptic_nome_auto



    interface elliptic_nome_01
        !! 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
        !! \end{align*}
        !! $$

        module procedure :: elliptic_nome_01_real32
        module procedure :: elliptic_nome_01_real64
        module procedure :: elliptic_nome_01_real128

    end interface elliptic_nome_01



    interface elliptic_nome_05
        !! 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 }
        !! \end{align*}
        !! $$

        module procedure :: elliptic_nome_05_real32
        module procedure :: elliptic_nome_05_real64
        module procedure :: elliptic_nome_05_real128

    end interface elliptic_nome_05



    interface elliptic_nome_09
        !! 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 }
        !! \end{align*}
        !! $$

        module procedure :: elliptic_nome_09_real32
        module procedure :: elliptic_nome_09_real64
        module procedure :: elliptic_nome_09_real128

    end interface elliptic_nome_09



    interface elliptic_nome_13
        !! 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*}
        !! $$

        module procedure :: elliptic_nome_13_real32
        module procedure :: elliptic_nome_13_real64
        module procedure :: elliptic_nome_13_real128

    end interface elliptic_nome_13



    interface elliptic_nome_17
        !! 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*}
        !! $$

        module procedure :: elliptic_nome_17_real32
        module procedure :: elliptic_nome_17_real64
        module procedure :: elliptic_nome_17_real128

    end interface elliptic_nome_17



    interface elliptic_nome_21
        !! 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 }
        !!             \\ & + 20910 { \varepsilon }^{ 21 }
        !! \end{align*}
        !! $$

        module procedure :: elliptic_nome_21_real32
        module procedure :: elliptic_nome_21_real64
        module procedure :: elliptic_nome_21_real128

    end interface elliptic_nome_21



    interface elliptic_nome_25
        !! 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 }
        !!             \\ & +  20910 { \varepsilon }^{ 21 }
        !!             \\ & + 268616 { \varepsilon }^{ 25 }
        !! \end{align*}
        !! $$

        module procedure :: elliptic_nome_25_real32
        module procedure :: elliptic_nome_25_real64
        module procedure :: elliptic_nome_25_real128

    end interface elliptic_nome_25



    interface elliptic_nome_29
        !! 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 }
        !!             \\ & +   20910 { \varepsilon }^{ 21 }
        !!             \\ & +  268616 { \varepsilon }^{ 25 }
        !!             \\ & + 3567400 { \varepsilon }^{ 29 }
        !! \end{align*}
        !! $$

        module procedure :: elliptic_nome_29_real32
        module procedure :: elliptic_nome_29_real64
        module procedure :: elliptic_nome_29_real128

    end interface elliptic_nome_29



    interface elliptic_nome_33
        !! 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 }
        !!             \\ & +    20910 { \varepsilon }^{ 21 }
        !!             \\ & +   268616 { \varepsilon }^{ 25 }
        !!             \\ & +  3567400 { \varepsilon }^{ 29 }
        !!             \\ & + 48555069 { \varepsilon }^{ 33 }
        !! \end{align*}
        !! $$

        module procedure :: elliptic_nome_33_real32
        module procedure :: elliptic_nome_33_real64
        module procedure :: elliptic_nome_33_real128

    end interface elliptic_nome_33



    interface elliptic_nome_auto
        module procedure :: elliptic_nome_auto_real32
        module procedure :: elliptic_nome_auto_real64
        module procedure :: elliptic_nome_auto_real128
    end interface elliptic_nome_auto

end module elliptic_nome_fortran