1 SUBROUTINE build_matrices_legendre(n, a, b, a_inv, b_inv)
7 INTEGER,
INTENT(IN) :: n
8 REAL(rprec),
INTENT(OUT),
DIMENSION(0:n,0:n) :: a, b,
12 REAL(rprec) :: factorial
13 REAL(rprec),
DIMENSION(13),
PARAMETER :: norm_legend =
14 1 ( / 1, 1, 3, 5, 35, 63, 231, 429, 6435,
15 2 12155, 46189, 88179, 676039 / )
16 REAL(rprec),
DIMENSION(13),
PARAMETER :: norm_inv_legend =
17 1 ( / 1, 1, 2, 2, 8, 8, 16, 16, 128,
18 2 128, 256, 256, 1024 / )
19 REAL(rprec),
DIMENSION(13*13),
PARAMETER :: b_legend =
20 1 ( / 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
21 2 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
22 3 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
23 4 0, 3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
24 5 7, 0, 20, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,
25 6 0, 27, 0, 28, 0, 8, 0, 0, 0, 0, 0, 0, 0,
26 7 33, 0, 110, 0, 72, 0, 16, 0, 0, 0, 0, 0, 0,
27 8 0, 143, 0, 182, 0, 88, 0, 16, 0, 0, 0, 0, 0,
28 9 715, 0, 2600, 0, 2160, 0, 832, 0, 128, 0, 0, 0, 0,
29 a 0, 3315, 0, 4760, 0, 2992, 0, 960, 0, 128, 0, 0, 0,
30 b 4199, 0, 16150, 0, 15504, 0, 7904, 0, 2176, 0,
32 d 0, 20349, 0, 31654, 0, 23408, 0, 10080, 0, 2432,
34 f 52003, 0, 208012, 0, 220248, 0, 133952, 0, 50048,
35 g 0, 10752, 0, 1024 / )
36 REAL(rprec),
DIMENSION(13*13),
PARAMETER :: b_legend_inv =
37 1 ( / 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
38 2 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
39 3 -1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40 4 0, -3, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
41 5 3, 0, -30, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0,
42 6 0, 15, 0, -70, 0, 63, 0, 0, 0, 0, 0, 0, 0,
43 7 -5, 0, 105, 0, -315, 0, 231, 0, 0, 0, 0, 0, 0,
44 8 0, -35, 0, 315, 0, -693, 0, 429, 0, 0, 0, 0, 0,
45 9 35, 0, -1260, 0, 6930, 0, -12012, 0, 6435, 0, 0,
47 b 0, 315, 0, -4620, 0, 18018, 0, -25740, 0, 12155,
49 d -63, 0, 3465, 0, -30030, 0, 90090, 0, -109395, 0,
51 f 0, -693, 0, 15015, 0, -90090, 0, 218790, 0, -230945,
53 h 231, 0, -18018, 0, 225225, 0, -1021020, 0, 2078505,
54 i 0, -1939938, 0, 676039 / )
83 IF (n > 12) stop
'N(legendre) CANNOT be larger than 12!!!'
93 a(i,j) = b_legend(idx+j+1)/norm_legend(i+1)
94 a_inv(i,j) = b_legend_inv(idx+j+1)/norm_inv_legend(i+1)
95 b(i,j) = 2._dp**(-i) * factorial(i)/
96 1 (factorial(j)*factorial(i-j))
97 b_inv(i,j) = 2._dp**j*(-1._dp)**(i-j)* factorial(i)/
98 1 (factorial(j)*factorial(i-j))
102 END SUBROUTINE build_matrices_legendre