Source code for recursivenodes.nodes

"""Node sets for the `d`-simplex implemented by ``recursivenodes``"""

import numpy as np

from recursivenodes.utils import (npolys,
                                  multiindex_equal,
                                  multiindex_up_to,
                                  coord_map)
from recursivenodes.quadrature import gaussjacobi, lobattogaussjacobi
from recursivenodes.polynomials import proriolkoornwinderdubinervandermonde


[docs]def equispaced(d, n, domain='biunit'): '''Equispaced nodes for polynomials up to degree `n` on the `d`-simplex. Args: d (int): The dimension of the simplex. n (int): The polynomial degree domain (str, optional) -- The domain of the simplex. See ":ref:`domains`" for the choices and their formal definitions. Returns: ndarray: Equispaced nodes as a 2D array with one row for each of `\\binom{n+d}{d}` nodes, and `d` columns for coordinates (or `d+1` if ``domain='barycentric'``). Example: .. plot:: :include-source: True >>> import matplotlib.pyplot as plt >>> from numpy import eye >>> from recursivenodes.nodes import equispaced >>> from recursivenodes.utils import coord_map >>> nodes = equispaced(2, 7, domain='equilateral') >>> corners = coord_map(eye(3), 'barycentric', 'equilateral') >>> plt.plot(corners[[0,1,2,0],0], corners[[0,1,2,0],1]) [<matplotlib.lines.Line2D object at ...>] >>> plt.scatter(nodes[:,0], nodes[:,1]) <matplotlib.collections.PathCollection object at ...> >>> plt.gca().set_aspect('equal') >>> plt.title('Equispaced Nodes') Text(0.5, 1.0, 'Equispaced Nodes') >>> plt.show() ''' N = npolys(d, n) x = np.ndarray((N, d)) for (k, i) in enumerate(multiindex_up_to(d, n)): x[k, :] = np.array(i) / n return coord_map(x, 'unit', domain)
[docs]def equispaced_interior(d, n, domain='biunit'): '''Equispaced nodes for polynomials up to degree `n` on the `d`-simplex, all of which are in the interior. Args: d (int): The dimension of the simplex. n (int): The polynomial degree domain (str, optional): The domain of the simplex. See ":ref:`domains`" for the choices and their formal definitions. Returns: ndarray: Equispaced interior nodes as a 2D array with one row for each of `\\binom{n+d}{d}` nodes, and `d` columns for coordinates (or `d+1` if ``domain='barycentric'``). Example: .. plot:: :include-source: True >>> import matplotlib.pyplot as plt >>> from numpy import eye >>> from recursivenodes.nodes import equispaced_interior >>> from recursivenodes.utils import coord_map >>> nodes = equispaced_interior(2, 7, domain='equilateral') >>> corners = coord_map(eye(3), 'barycentric', 'equilateral') >>> plt.plot(corners[[0,1,2,0],0], corners[[0,1,2,0],1]) [<matplotlib.lines.Line2D object at ...>] >>> plt.scatter(nodes[:,0], nodes[:,1]) <matplotlib.collections.PathCollection object at ...> >>> plt.gca().set_aspect('equal') >>> plt.title('Equispaced Interior Nodes') Text(0.5, 1.0, 'Equispaced Interior Nodes') >>> plt.show() ''' N = npolys(d, n) x = np.ndarray((N, d)) for (k, i) in enumerate(multiindex_up_to(d, n)): x[k, :] = (np.array(i) + 1/(d+1)) / (n+1) return coord_map(x, 'unit', domain)
[docs]def blyth_luo_pozrikidis(d, n, x=None, domain='biunit'): '''Create Blyth-Luo-Pozrikidis nodes from a 1D node set for polynomials up to degree `n` on the `d`-simplex. Notes: The Blyth-Luo-Pozrikidis rule places an interior node with multi-index `\\boldsymbol{\\alpha}` at the barycentric point `\\boldsymbol{b}(\\boldsymbol{\\alpha})` such that .. math:: :label: blp b_i(\\boldsymbol{\\alpha}) = x_{n,\\boldsymbol{\\alpha}_i} + \\frac{1}{d}(1 - \\sum_{j\\neq i} x_{n,\\boldsymbol{\\alpha}_j}). Points on the boundary look like `(d-1)`-simplex Blyth-Luo-Pozrikidis nodes. Args: d (int): The dimension of the simplex. n (int): The polynomial degree x (ndarray, optional): 1D node set on `[0, 1]` with `n+1` points. Lobatto-Gauss-Legendre nodes are used if ``x=None``. domain (str, optional): The domain of the simplex. See ":ref:`domains`" for the choices and their formal definitions. Returns: ndarray: Blyth-Luo-Pozrikidis nodes as a 2D array with one row for each of `\\binom{n+d}{d}` nodes, and `d` columns for coordinates (or `d+1` if ``domain='barycentric'``). Example: This plot shows the Blyth-Luo-Pozrikidis nodes with lines connecting the Lobatto-Gauss-Legendre nodes on the edges. The definition in :eq:`blp` is designed to place the nodes in the centroids of the triangles created by the intersecting lines. .. plot:: :include-source: True >>> import matplotlib.pyplot as plt >>> from numpy import eye >>> from recursivenodes.nodes import blyth_luo_pozrikidis >>> from recursivenodes.utils import coord_map, multiindex_equal >>> nodes = blyth_luo_pozrikidis(2, 7, domain='equilateral') >>> corners = coord_map(eye(3), 'barycentric', 'equilateral') >>> # plot grid lines >>> for (i, al) in enumerate(multiindex_equal(3, 7)): ... if min(al) > 0 or max(al) == sum(al): continue ... for (j, be) in enumerate(multiindex_equal(3, 7)): ... if (j <= i or min(be) > 0 or max(be) != max(al) ... or sum(be) != sum(al)): ... continue ... for d in range(3): ... if al[d] == be[d] and al[d] != 0: ... _ = plt.plot(nodes[[i,j],0], nodes[[i,j],1], ... linestyle='--', c='grey') >>> plt.plot(corners[[0,1,2,0],0], corners[[0,1,2,0],1]) [<matplotlib.lines.Line2D object at ...>] >>> plt.scatter(nodes[:,0], nodes[:,1]) <matplotlib.collections.PathCollection object at ...> >>> plt.gca().set_aspect('equal') >>> plt.title('Blyth-Luo-Pozrikidis Nodes') Text(0.5, 1.0, 'Blyth-Luo-Pozrikidis Nodes') >>> plt.show() References: :cite:`BlPo06,LuPo06` ''' if x is None: x = coord_map(lobattogaussjacobi(n+1)[0].reshape(n+1, 1), 'biunit', domain) if domain != 'barycentric': x = x[:, 0] n = len(x) - 1 x = x.reshape(x.shape + (1,)) y = coord_map(x, domain, 'unit') y = y[:, 0] N = npolys(d, n) xd = np.zeros((N, d)) for (k, i) in enumerate(multiindex_equal(d+1, n)): numzero = sum([int(y[m] == 0.) for m in i]) weight = 0. for j in range(d+1): ibutj = i[0:j] + i[(j+1):] yibutj = [y[m] for m in ibutj] thisnumzero = sum([int(z == 0) for z in yibutj]) if thisnumzero < numzero: continue yj = 1. - sum(yibutj) weight += 1 for m in range(j): if (m < d): xd[k, m] += y[i[m]] if (j < d): xd[k, j] += yj for m in range(j+1, d+1): if (m < d): xd[k, m] += y[i[m]] xd[k, :] /= weight return coord_map(xd, 'unit', domain)
def _warburton_b(d, xt, i): b = np.ones((xt.shape[0], 1)) tol = 1.e-8 bdry = np.zeros(b.shape) for j in range(d+1): if j == i: continue nonzero = np.abs(2. * xt[:, j] + xt[:, i]) > tol b[nonzero, 0] *= ((2. * xt[nonzero, j]) / (2. * xt[nonzero, j] + xt[nonzero, i])) bdry[~nonzero, 0] += 1. isbdry = bdry[:, 0] > 0. if d == 2: '''The implementation of warp and blend, evident in the Lebesgue constants in the paper and in modepy (https://github.com/inducer/modepy/blob/master/modepy/nodes.py) uses the blending scaling (2 * l2) * (2 * l3) / (1. - (l2 - l3)**2) instead of (2 * l2) * (2 * l3) / ((2 * l2 + l1)*(2 * l3 + l1)). If l1 + l2 + l3 = 1, this is equivalent, because (1. - (l2 - l3)**2) = (1. + (l2 - l3))*(1. - (l2 - l3)) = (l1+l2+l3 +l2-l3)*(l1+l2+l3 -l2+l3) = (2*l2+l1)*(2.*l3+l1) BUT, when we are blending for higher dimensions, we may be using a subset of barycentric coordinates, i.e. l1 + l2 + l3 + l4 = 1, l4 > 0, and we are computing a face warp for the l4 face, so we use only the (l1,l2,l3) coordinate. In this case l1+l2+l3 != 1, so the two blending scalings are not equivalent. I'm choosing to follow the implementation so that I can reproduce the computed Lebesgue constants. ''' i2 = (i + 1) % 3 i3 = (i + 2) % 3 b[~isbdry, 0] = (4. * xt[~isbdry, i2] * xt[~isbdry, i3] / (1. - (xt[~isbdry, i2]-xt[~isbdry, i3])**2)) b[isbdry, 0] = 1. / (bdry[isbdry, 0] + 1.) return b def _warburton_g(d, n, xt, alpha=0., x=None): g = np.zeros(xt.shape) if (d == 1): if x is None: x, _ = lobattogaussjacobi(n+1) xe = np.linspace(-1., 1., n+1, endpoint=True) diff = (x - xe) / 2 V = proriolkoornwinderdubinervandermonde(1, n, xe.reshape((n+1, 1))) P = np.linalg.solve(V, diff) T = proriolkoornwinderdubinervandermonde(1, n, xt[:, [0]] - xt[:, [1]]) g[:, 0] = T.dot(P) g[:, 1] = -g[:, 0] else: for i in range(d+1): rem = [j for j in range(d+1) if j != i] gi = _warburton_g(d-1, n, xt[:, rem], alpha, x) bi = _warburton_b(d, xt, i) g[:, rem] += (1. + (alpha * xt[:, [i]])**2) * gi * bi return g #: A dictionary of optimal values of the blending parameter `\alpha` computed #: in :cite:`Warb06`. Keyed by ``(d, n)`` tuples. #: #: Example: #: >>> warburton_alpha[(2,7)] #: 1.0999 warburton_alpha = { (2, 3): 1.4152, (3, 3): 0.0000, (2, 4): 0.1001, (3, 4): 0.1002, (2, 5): 0.2751, (3, 5): 1.1332, (2, 6): 0.9808, (3, 6): 1.5608, (2, 7): 1.0999, (3, 7): 1.3413, (2, 8): 1.2832, (3, 8): 1.2577, (2, 9): 1.3648, (3, 9): 1.1603, (2, 10): 1.4773, (3, 10): 1.0153, (2, 11): 1.4959, (3, 11): 0.6080, (2, 12): 1.5743, (3, 12): 0.4523, (2, 13): 1.5770, (3, 13): 0.8856, (2, 14): 1.6223, (3, 14): 0.8717, (2, 15): 1.6258, (3, 15): 0.9655, }
[docs]def warburton(d, n, x=None, alpha=None, domain='biunit'): '''Warburton *warp & blend* nodes from a 1D node set for polynomials up to degree `n` on the `d`-simplex. Notes: The Warburton *warp & blend* nodes define a node's coordinates as a displacement from equispaced coordinates by blending together distortion maps of the `d`-simplex that warp the edge nodes to match the 1D node set. One optimization parameter `\\boldsymbol{\\alpha}` controls the blending in the interior of the simplex. Args: d (int): The dimension of the simplex. n (int): The polynomial degree x (ndarray, optional): 1D node set on `[0, 1]` with `n+1` points. Lobatto-Gauss-Legendre nodes are used if ``x=None``. alpha (float, optional): The blending parameter. If ``alpha=None``, a precomputed optimal parameter is used if known. domain (str, optional): The domain of the simplex. See ":ref:`domains`" for the choices and their formal definitions. Returns: ndarray: Warburton *warp & blend* nodes as a 2D array with one row for each of `\\binom{n+d}{d}` nodes, and `d` columns for coordinates (or `d+1` if ``domain='barycentric'``). Example: .. plot:: :include-source: True >>> import matplotlib.pyplot as plt >>> from numpy import eye >>> from recursivenodes.nodes import warburton >>> from recursivenodes.utils import coord_map >>> nodes = warburton(2, 7, domain='equilateral') >>> corners = coord_map(eye(3), 'barycentric', 'equilateral') >>> plt.plot(corners[[0,1,2,0],0], corners[[0,1,2,0],1]) [<matplotlib.lines.Line2D object at ...>] >>> plt.scatter(nodes[:,0], nodes[:,1]) <matplotlib.collections.PathCollection object at ...> >>> plt.gca().set_aspect('equal') >>> plt.title('Warburton Warp & Blend Nodes') Text(0.5, 1.0, 'Warburton Warp & Blend Nodes') >>> plt.show() References: :cite:`Warb06` ''' if not (x is None): x = coord_map(x, domain, 'biunit') if alpha is None: try: alpha = warburton_alpha[(d, n)] except KeyError: alpha = 0. xt = equispaced(d, n, domain='barycentric') g = _warburton_g(d, n, xt, alpha, x) xt += g return coord_map(xt, 'barycentric', domain)
class NodeFamily: '''Family of nodes on the unit interval. This class essentially is a lazy-evaluate-and-cache dictionary: the user passes a routine to evaluate entries for unknown keys''' def __init__(self, f): self._f = f self._cache = {} def __getitem__(self, key): try: return self._cache[key] except KeyError: value = self._f(key) self._cache[key] = value return value # For each family, family[n] should be a a set of n+1 points in [0,1] in # increasing order that is symmetric about 1/2, family[n] should be None if the # family does not have a representative for that index # # We predefine: # # - shifted Lobatto-Gauss-Legendre (lgl_family) # - shifted Lobatto-Gauss-Chebyshev (lgc_family) # - shifted Gauss-Legendre (gl_family) # - shifted Gauss-Chebyshev (gc_family) # - equispaced, including endpoints (equi_family) # - equispaced, interior (equi_interior_family) lgl_family = NodeFamily(lambda n: coord_map(lobattogaussjacobi(n+1)[0], 'biunit', 'unit') if n > 0 else np.array([0.5])) lgc_family = NodeFamily(lambda n: coord_map(lobattogaussjacobi(n+1, -0.5, -0.5)[0], 'biunit', 'unit') if n > 0 else np.array([0.5])) gl_family = NodeFamily(lambda n: coord_map(gaussjacobi(n+1)[0], 'biunit', 'unit')) gc_family = NodeFamily(lambda n: coord_map(gaussjacobi(n+1, -0.5, -0.5)[0], 'biunit', 'unit')) equi_family = NodeFamily(lambda n: np.linspace(0., 1., n+1) if n > 0 else np.array([0.5])) equi_interior_family = NodeFamily(lambda n: np.linspace(0.5/(n+1), 1.-0.5/(n+1), n+1)) def _recursive(d, n, alpha, family): '''The barycentric d-simplex coordinates for a multiindex alpha with sum n, based on a 1D node family.''' xn = family[n] b = np.zeros((d+1,)) if d == 1: b[:] = xn[[alpha[0], alpha[1]]] return b weight = 0. for i in range(d+1): alpha_noti = alpha[:i] + alpha[i+1:] n_noti = n - alpha[i] w = xn[n_noti] br = _recursive(d-1, n_noti, alpha_noti, family) b[:i] += w * br[:i] b[i+1:] += w * br[i:] weight += w b /= weight return b def _decode_family(family): if family is None: family = lgl_family elif isinstance(family, str): if family == 'lgl': family = lgl_family elif family == 'lgc': family = lgc_family elif family == 'gl': family = gl_family elif family == 'gc': family = gc_family elif family == 'equi': family = equi_family elif family == 'equi_interior': family = equi_interior_family elif isinstance(family, tuple) and len(family) == 2 and family[0] == 'lgg': a = family[1] family = NodeFamily(lambda n: coord_map(lobattogaussjacobi(n+1, a-0.5, a-0.5)[0], 'biunit', 'unit') if n > 0 else np.array([0.5])) elif isinstance(family, tuple) and len(family) == 2 and family[0] == 'gg': a = family[1] family = NodeFamily(lambda n: coord_map(gaussjacobi(n+1, a-0.5, a-0.5)[0], 'biunit', 'unit')) return family
[docs]def recursive(d, n, family='lgl', domain='barycentric'): '''Recursively defined nodes for `\\mathcal{P}_n(\\Delta^d)`, the polynomials with degree at most `n` on the `d`-simplex, based on a 1D node family. Notes: Some definitions: - A 1D *node set* `X_k=(x_{k,0}, \\dots, x_{k,k})` is a sorted list of `k+1` points in `[0,1]` that is symmetric about `1/2`. - A 1D *node family* `\\boldsymbol{X} = \\{X_k\\}` is a collection of 1D node sets for every degree `k`. - The `barycentric triangle`_ is a canonical domain for the `d`-simplex in `\\mathbb{R}^{d+1}`: positive coordinates `\\boldsymbol{b} = (b_0, b_1, \\dots b_d)` such that `\\sum_i b_i = 1`. - For a multi-index_ `\\boldsymbol{\\alpha}`, let `\\#\\boldsymbol{\\alpha}` be its length, `|\\boldsymbol{\\alpha}|` its sum, and `\\boldsymbol{\\alpha}_{\\backslash i}` the multi-index created by removing `\\boldsymbol{\\alpha}_i`: nodes that define a basis of `\\mathcal{P}_n(\\Delta^d)` can be indexed by `\\boldsymbol{\\alpha}` such that `\\#\\boldsymbol{\\alpha} = d+1` and `|\\boldsymbol{\\alpha}| = n`. - For a vector `\\boldsymbol{b}`, let `\\boldsymbol{b}_{+i}` be the vector created by inserting a zero for the `i`-th coordinate. The recursive definition of barycentric node coordinates, `\\boldsymbol{b}_{\\boldsymbol{X}}(\\boldsymbol{\\alpha}) \\in \\mathbb{R}^{\\#\\boldsymbol{\\alpha}}` has the base case .. math:: :label: basecase \\boldsymbol{b}_{\\boldsymbol{X}}(\\boldsymbol{\\alpha}) = (x_{|\\boldsymbol{\\alpha}|,\\boldsymbol{\\alpha}_0}, x_{|\\boldsymbol{\\alpha}|,\\boldsymbol{\\alpha}_1}), \\quad \\#\\boldsymbol{\\alpha} = 2, and the recursion .. math:: :label: recursion \\boldsymbol{b}_{\\boldsymbol{X}}(\\boldsymbol{\\alpha}) = \\frac{\\sum_i x_{|\\boldsymbol{\\alpha}|,|\\boldsymbol{\\alpha}_{\\backslash i}|} \\boldsymbol{b}_{\\boldsymbol{X}}(\\boldsymbol{\\alpha}_{\\backslash i})_{+i}} {\\sum_i x_{|\\boldsymbol{\\alpha}|,|\\boldsymbol{\\alpha}_{\\backslash i}|}}, \\quad \\#\\boldsymbol{\\alpha} > 2. The full set of nodes is .. math:: :label: fullset R^d_{\\boldsymbol{X},n} = \\{\\boldsymbol{b}_{\\boldsymbol{X}}(\\boldsymbol{\\alpha}): \\#\\boldsymbol{\\alpha} = d+1, |\\boldsymbol{\\alpha}| = n\\}. Args: d (int): The dimension of the simplex n (int): The maximum degree of the polynomials family (optional): The 1D node family used to define the coordinates in the barycentric `d`-simplex. The default ``family='lgl'`` corresponds to the shifted Lobatto-Gauss-Legendre_ nodes. See ":ref:`families`" for using other node families. domain (str, optional): The domain for the `d`-simplex where the returned coordinates will be defined. See ":ref:`domains`" for the choices and their formal definitions. Returns: ndarray: The nodes `R^d_{\\boldsymbol{X},n}` defined in :eq:`fullset`, as a 2D array with `\\binom{n+d}{d}` rows. If ``domain='barycentric'``, it has `d+1` columns, otherwise it has `d` columns. Examples: Nodes for `\\mathcal{P}^4(\\Delta^2)` in barycentric coordinates: >>> recursive_nodes(2, 4) array([[0. , 0. , 1. ], [0. , 0.17267316, 0.82732684], [0. , 0.5 , 0.5 ], [0. , 0.82732684, 0.17267316], [0. , 1. , 0. ], [0.17267316, 0. , 0.82732684], [0.2221552 , 0.2221552 , 0.5556896 ], [0.2221552 , 0.5556896 , 0.2221552 ], [0.17267316, 0.82732684, 0. ], [0.5 , 0. , 0.5 ], [0.5556896 , 0.2221552 , 0.2221552 ], [0.5 , 0.5 , 0. ], [0.82732684, 0. , 0.17267316], [0.82732684, 0.17267316, 0. ], [1. , 0. , 0. ]]) The same nodes on the unit triangle: >>> recursive_nodes(2, 4, domain='unit') array([[0. , 0. ], [0. , 0.17267316], [0. , 0.5 ], [0. , 0.82732684], [0. , 1. ], [0.17267316, 0. ], [0.2221552 , 0.2221552 ], [0.2221552 , 0.5556896 ], [0.17267316, 0.82732684], [0.5 , 0. ], [0.5556896 , 0.2221552 ], [0.5 , 0.5 ], [0.82732684, 0. ], [0.82732684, 0.17267316], [1. , 0. ]]) If we construct the node set not from the Lobatto-Gauss-Legendre 1D node family, but from the equispaced 1D node family, we get equispaced 2D nodes: >>> recursive_nodes(2, 4, family='equi', domain='unit') array([[0. , 0. ], [0. , 0.25], [0. , 0.5 ], [0. , 0.75], [0. , 1. ], [0.25, 0. ], [0.25, 0.25], [0.25, 0.5 ], [0.25, 0.75], [0.5 , 0. ], [0.5 , 0.25], [0.5 , 0.5 ], [0.75, 0. ], [0.75, 0.25], [1. , 0. ]]) This is what they look like mapped to the equilateral triangle: .. plot:: :include-source: True >>> import matplotlib.pyplot as plt >>> from recursivenodes import recursive_nodes >>> nodes_equi = recursive_nodes(2, 4, family='equi', domain='equilateral') >>> nodes_lgl = recursive_nodes(2, 4, domain='equilateral') >>> plt.scatter(nodes_lgl[:,0], nodes_lgl[:,1], marker='o', label='recursive LGL') <matplotlib.collections.PathCollection object at ...> >>> plt.scatter(nodes_equi[:,0], nodes_equi[:,1], marker='^', label='equispaced') <matplotlib.collections.PathCollection object at ...> >>> plt.gca().set_aspect('equal') >>> plt.legend() <matplotlib.legend.Legend object at ...> >>> plt.show() .. _multi-index: https://en.wikipedia.org/wiki/Multi-index_notation .. _barycentric triangle: https://en.wikipedia.org/wiki/Barycentric_coordinate_system .. _Lobatto-Gauss-Legendre: https://en.wikipedia.org/wiki/Gaussian_quadrature#Gauss%E2%80%93Lobatto_rules ''' family = _decode_family(family) N = npolys(d, n) x = np.zeros((N, d+1)) for (k, i) in enumerate(multiindex_equal(d+1, n)): x[k, :] = _recursive(d, n, i, family) return coord_map(x, 'barycentric', domain)
# ---------------------------START---------------------------- # # Rapetti, Sommariva, & Vianello Symmetric Lebesgue-minimizing # # Lobatto-Gauss-Legendre nodes: doi:10.1016/j.cam.2011.11.023 # _rsv_lebgls = {} _rsv_lebgls[1] = [ [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], ] _rsv_lebgls[2] = [ [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [5.000000000000000e-01, 5.000000000000000e-01], [5.000000000000000e-01, 0.000000000000000e+00], [0.000000000000000e+00, 5.000000000000000e-01], ] _rsv_lebgls[3] = [ [3.333333333333333e-01, 3.333333333333333e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [2.763932022500210e-01, 7.236067977499789e-01], [7.236067977499789e-01, 2.763932022500210e-01], [2.763932022500210e-01, 0.000000000000000e+00], [7.236067977499789e-01, 0.000000000000000e+00], [0.000000000000000e+00, 2.763932022500210e-01], [0.000000000000000e+00, 7.236067977499789e-01], ] _rsv_lebgls[4] = [ [2.371066302371978e-01, 2.371066302371978e-01], [2.371066302371978e-01, 5.257867395256041e-01], [5.257867395256041e-01, 2.371066302371978e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [1.726731646460114e-01, 8.273268353539885e-01], [5.000000000000000e-01, 5.000000000000000e-01], [8.273268353539885e-01, 1.726731646460114e-01], [1.726731646460114e-01, 0.000000000000000e+00], [5.000000000000000e-01, 0.000000000000000e+00], [8.273268353539885e-01, 0.000000000000000e+00], [0.000000000000000e+00, 1.726731646460114e-01], [0.000000000000000e+00, 5.000000000000000e-01], [0.000000000000000e+00, 8.273268353539885e-01], ] _rsv_lebgls[5] = [ [4.123406940197869e-01, 4.123406940197869e-01], [1.737985196489401e-01, 1.737985196489401e-01], [4.123406940197869e-01, 1.753186119604261e-01], [1.737985196489401e-01, 6.524029607021195e-01], [1.753186119604261e-01, 4.123406940197869e-01], [6.524029607021195e-01, 1.737985196489401e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [1.174723380352677e-01, 8.825276619647322e-01], [3.573842417596774e-01, 6.426157582403224e-01], [6.426157582403225e-01, 3.573842417596774e-01], [8.825276619647324e-01, 1.174723380352675e-01], [1.174723380352677e-01, 0.000000000000000e+00], [3.573842417596774e-01, 0.000000000000000e+00], [6.426157582403225e-01, 0.000000000000000e+00], [8.825276619647324e-01, 0.000000000000000e+00], [0.000000000000000e+00, 1.174723380352677e-01], [0.000000000000000e+00, 3.573842417596774e-01], [0.000000000000000e+00, 6.426157582403225e-01], [0.000000000000000e+00, 8.825276619647324e-01], ] _rsv_lebgls[6] = [ [3.333333333333333e-01, 3.333333333333333e-01], [1.236700206266602e-01, 1.236700206266602e-01], [1.236700206266602e-01, 7.526599587466795e-01], [7.526599587466795e-01, 1.236700206266602e-01], [3.254637175704040e-01, 5.425665225375484e-01], [3.254637175704040e-01, 1.319697598920475e-01], [5.425665225375484e-01, 3.254637175704040e-01], [5.425665225375484e-01, 1.319697598920475e-01], [1.319697598920475e-01, 3.254637175704040e-01], [1.319697598920475e-01, 5.425665225375484e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [8.488805186071646e-02, 9.151119481392835e-01], [2.655756032646428e-01, 7.344243967353571e-01], [5.000000000000001e-01, 4.999999999999998e-01], [7.344243967353571e-01, 2.655756032646428e-01], [9.151119481392833e-01, 8.488805186071668e-02], [8.488805186071646e-02, 0.000000000000000e+00], [2.655756032646428e-01, 0.000000000000000e+00], [5.000000000000001e-01, 0.000000000000000e+00], [7.344243967353571e-01, 0.000000000000000e+00], [9.151119481392833e-01, 0.000000000000000e+00], [0.000000000000000e+00, 8.488805186071646e-02], [0.000000000000000e+00, 2.655756032646428e-01], [0.000000000000000e+00, 5.000000000000001e-01], [0.000000000000000e+00, 7.344243967353571e-01], [0.000000000000000e+00, 9.151119481392833e-01], ] _rsv_lebgls[7] = [ [2.741584394628903e-01, 2.741584394628903e-01], [8.791461398121544e-02, 8.791461398121544e-02], [2.741584394628903e-01, 4.516831210742193e-01], [8.791461398121544e-02, 8.241707720375690e-01], [4.516831210742193e-01, 2.741584394628903e-01], [8.241707720375690e-01, 8.791461398121544e-02], [4.500074460521015e-01, 4.500074460521015e-01], [4.500074460521015e-01, 9.998510789579695e-02], [9.998510789579695e-02, 4.500074460521015e-01], [2.574575396908898e-01, 6.389182038566255e-01], [2.574575396908898e-01, 1.036242564524846e-01], [6.389182038566255e-01, 2.574575396908898e-01], [6.389182038566255e-01, 1.036242564524846e-01], [1.036242564524846e-01, 2.574575396908898e-01], [1.036242564524846e-01, 6.389182038566255e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [6.412992574519671e-02, 9.358700742548032e-01], [2.041499092834289e-01, 7.958500907165710e-01], [3.953503910487606e-01, 6.046496089512394e-01], [6.046496089512393e-01, 3.953503910487606e-01], [7.958500907165713e-01, 2.041499092834286e-01], [9.358700742548031e-01, 6.412992574519682e-02], [6.412992574519671e-02, 0.000000000000000e+00], [2.041499092834289e-01, 0.000000000000000e+00], [3.953503910487606e-01, 0.000000000000000e+00], [6.046496089512393e-01, 0.000000000000000e+00], [7.958500907165713e-01, 0.000000000000000e+00], [9.358700742548031e-01, 0.000000000000000e+00], [0.000000000000000e+00, 6.412992574519671e-02], [0.000000000000000e+00, 2.041499092834289e-01], [0.000000000000000e+00, 3.953503910487606e-01], [0.000000000000000e+00, 6.046496089512393e-01], [0.000000000000000e+00, 7.958500907165713e-01], [0.000000000000000e+00, 9.358700742548031e-01], ] _rsv_lebgls[8] = [ [2.238114422946618e-01, 2.238114422946618e-01], [3.879143834569392e-01, 3.879143834569392e-01], [6.749944697564996e-02, 6.749944697564996e-02], [2.238114422946618e-01, 5.523771154106762e-01], [3.879143834569392e-01, 2.241712330861213e-01], [6.749944697564996e-02, 8.650011060487001e-01], [5.523771154106762e-01, 2.238114422946618e-01], [2.241712330861213e-01, 3.879143834569392e-01], [8.650011060487001e-01, 6.749944697564996e-02], [2.106241399947925e-01, 7.064768674963645e-01], [3.702480264146488e-01, 5.482896391715870e-01], [2.106241399947925e-01, 8.289899250884291e-02], [3.702480264146488e-01, 8.146233441376415e-02], [7.064768674963645e-01, 2.106241399947925e-01], [5.482896391715870e-01, 3.702480264146488e-01], [7.064768674963645e-01, 8.289899250884291e-02], [5.482896391715870e-01, 8.146233441376415e-02], [8.289899250884291e-02, 2.106241399947925e-01], [8.146233441376415e-02, 3.702480264146488e-01], [8.289899250884291e-02, 7.064768674963645e-01], [8.146233441376415e-02, 5.482896391715870e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [5.012100229426996e-02, 9.498789977057300e-01], [1.614068602446310e-01, 8.385931397553689e-01], [3.184412680869108e-01, 6.815587319130891e-01], [5.000000000000001e-01, 4.999999999999998e-01], [6.815587319130891e-01, 3.184412680869108e-01], [8.385931397553689e-01, 1.614068602446310e-01], [9.498789977057298e-01, 5.012100229427018e-02], [5.012100229426996e-02, 0.000000000000000e+00], [1.614068602446310e-01, 0.000000000000000e+00], [3.184412680869108e-01, 0.000000000000000e+00], [5.000000000000001e-01, 0.000000000000000e+00], [6.815587319130891e-01, 0.000000000000000e+00], [8.385931397553689e-01, 0.000000000000000e+00], [9.498789977057298e-01, 0.000000000000000e+00], [0.000000000000000e+00, 5.012100229426996e-02], [0.000000000000000e+00, 1.614068602446310e-01], [0.000000000000000e+00, 3.184412680869108e-01], [0.000000000000000e+00, 5.000000000000001e-01], [0.000000000000000e+00, 6.815587319130891e-01], [0.000000000000000e+00, 8.385931397553689e-01], [0.000000000000000e+00, 9.498789977057298e-01], ] _rsv_lebgls[9] = [ [3.333333333333333e-01, 3.333333333333333e-01], [5.208382829746331e-02, 5.208382829746331e-02], [1.835842328020949e-01, 1.835842328020949e-01], [5.208382829746331e-02, 8.958323434050733e-01], [1.835842328020949e-01, 6.328315343958100e-01], [8.958323434050733e-01, 5.208382829746331e-02], [6.328315343958100e-01, 1.835842328020949e-01], [4.677778353675260e-01, 4.677778353675260e-01], [4.677778353675260e-01, 6.444432926494780e-02], [6.444432926494780e-02, 4.677778353675260e-01], [3.335906038202737e-01, 4.796482965082551e-01], [1.723053623095807e-01, 7.617793422357387e-01], [3.093824727565271e-01, 6.225829731720886e-01], [3.335906038202737e-01, 1.867610996714711e-01], [1.723053623095807e-01, 6.591529545468055e-02], [3.093824727565271e-01, 6.803455407138414e-02], [4.796482965082551e-01, 3.335906038202737e-01], [7.617793422357387e-01, 1.723053623095807e-01], [6.225829731720886e-01, 3.093824727565271e-01], [4.796482965082551e-01, 1.867610996714711e-01], [7.617793422357387e-01, 6.591529545468055e-02], [6.225829731720886e-01, 6.803455407138414e-02], [1.867610996714711e-01, 3.335906038202737e-01], [6.591529545468055e-02, 1.723053623095807e-01], [6.803455407138414e-02, 3.093824727565271e-01], [1.867610996714711e-01, 4.796482965082551e-01], [6.591529545468055e-02, 7.617793422357387e-01], [6.803455407138414e-02, 6.225829731720886e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [4.023304591677051e-02, 9.597669540832294e-01], [1.306130674472475e-01, 8.693869325527523e-01], [2.610375250947778e-01, 7.389624749052221e-01], [4.173605211668064e-01, 5.826394788331934e-01], [5.826394788331933e-01, 4.173605211668066e-01], [7.389624749052223e-01, 2.610375250947776e-01], [8.693869325527523e-01, 1.306130674472476e-01], [9.597669540832292e-01, 4.023304591677079e-02], [4.023304591677051e-02, 0.000000000000000e+00], [1.306130674472475e-01, 0.000000000000000e+00], [2.610375250947778e-01, 0.000000000000000e+00], [4.173605211668064e-01, 0.000000000000000e+00], [5.826394788331933e-01, 0.000000000000000e+00], [7.389624749052223e-01, 0.000000000000000e+00], [8.693869325527523e-01, 0.000000000000000e+00], [9.597669540832292e-01, 0.000000000000000e+00], [0.000000000000000e+00, 4.023304591677051e-02], [0.000000000000000e+00, 1.306130674472475e-01], [0.000000000000000e+00, 2.610375250947778e-01], [0.000000000000000e+00, 4.173605211668064e-01], [0.000000000000000e+00, 5.826394788331933e-01], [0.000000000000000e+00, 7.389624749052223e-01], [0.000000000000000e+00, 8.693869325527523e-01], [0.000000000000000e+00, 9.597669540832292e-01], ] _rsv_lebgls[10] = [ [1.312733767493933e-01, 1.312733767493933e-01], [5.386953019930516e-02, 5.386953019930516e-02], [2.252378431088206e-01, 2.252378431088206e-01], [1.312733767493933e-01, 7.374532465012133e-01], [5.386953019930516e-02, 8.922609396013896e-01], [2.252378431088206e-01, 5.495243137823585e-01], [7.374532465012133e-01, 1.312733767493933e-01], [8.922609396013896e-01, 5.386953019930516e-02], [5.495243137823585e-01, 2.252378431088206e-01], [3.824877939073025e-01, 3.824877939073025e-01], [3.824877939073025e-01, 2.350244121853949e-01], [2.350244121853949e-01, 3.824877939073025e-01], [2.622175009707391e-01, 6.564279951505325e-01], [3.776961071421849e-01, 5.223502436193665e-01], [1.820746613840211e-01, 7.792454007990795e-01], [3.779628077066509e-01, 5.892534012902733e-01], [2.622175009707391e-01, 8.135450387872833e-02], [3.776961071421849e-01, 9.995364923844851e-02], [1.820746613840211e-01, 3.867993781689926e-02], [3.779628077066509e-01, 3.278379100307571e-02], [6.564279951505325e-01, 2.622175009707391e-01], [5.223502436193665e-01, 3.776961071421849e-01], [7.792454007990795e-01, 1.820746613840211e-01], [5.892534012902733e-01, 3.779628077066509e-01], [6.564279951505325e-01, 8.135450387872833e-02], [5.223502436193665e-01, 9.995364923844851e-02], [7.792454007990795e-01, 3.867993781689926e-02], [5.892534012902733e-01, 3.278379100307571e-02], [8.135450387872833e-02, 2.622175009707391e-01], [9.995364923844851e-02, 3.776961071421849e-01], [3.867993781689926e-02, 1.820746613840211e-01], [3.278379100307571e-02, 3.779628077066509e-01], [8.135450387872833e-02, 6.564279951505325e-01], [9.995364923844851e-02, 5.223502436193665e-01], [3.867993781689926e-02, 7.792454007990795e-01], [3.278379100307571e-02, 5.892534012902733e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [3.299928479597025e-02, 9.670007152040297e-01], [1.077582631684279e-01, 8.922417368315720e-01], [2.173823365018974e-01, 7.826176634981025e-01], [3.521209322065304e-01, 6.478790677934695e-01], [5.000000000000000e-01, 5.000000000000000e-01], [6.478790677934695e-01, 3.521209322065304e-01], [7.826176634981024e-01, 2.173823365018975e-01], [8.922417368315722e-01, 1.077582631684277e-01], [9.670007152040296e-01, 3.299928479597036e-02], [3.299928479597025e-02, 0.000000000000000e+00], [1.077582631684279e-01, 0.000000000000000e+00], [2.173823365018974e-01, 0.000000000000000e+00], [3.521209322065304e-01, 0.000000000000000e+00], [5.000000000000000e-01, 0.000000000000000e+00], [6.478790677934695e-01, 0.000000000000000e+00], [7.826176634981024e-01, 0.000000000000000e+00], [8.922417368315722e-01, 0.000000000000000e+00], [9.670007152040296e-01, 0.000000000000000e+00], [0.000000000000000e+00, 3.299928479597025e-02], [0.000000000000000e+00, 1.077582631684279e-01], [0.000000000000000e+00, 2.173823365018974e-01], [0.000000000000000e+00, 3.521209322065304e-01], [0.000000000000000e+00, 5.000000000000000e-01], [0.000000000000000e+00, 6.478790677934695e-01], [0.000000000000000e+00, 7.826176634981024e-01], [0.000000000000000e+00, 8.922417368315722e-01], [0.000000000000000e+00, 9.670007152040296e-01], ] _rsv_lebgls[11] = [ [1.050821229581930e-01, 1.050821229581930e-01], [4.295650634280591e-02, 4.295650634280591e-02], [2.195219638878813e-01, 2.195219638878813e-01], [1.050821229581930e-01, 7.898357540836139e-01], [4.295650634280591e-02, 9.140869873143881e-01], [2.195219638878813e-01, 5.609560722242372e-01], [7.898357540836139e-01, 1.050821229581930e-01], [9.140869873143881e-01, 4.295650634280591e-02], [5.609560722242372e-01, 2.195219638878813e-01], [4.807601837574821e-01, 4.807601837574821e-01], [4.286809903071824e-01, 4.286809903071824e-01], [4.807601837574821e-01, 3.847963248503571e-02], [4.286809903071824e-01, 1.426380193856351e-01], [3.847963248503571e-02, 4.807601837574821e-01], [1.426380193856351e-01, 4.286809903071824e-01], [1.994095640340481e-01, 7.069562305387490e-01], [1.474224961654246e-01, 8.177875722890196e-01], [3.075960627730014e-01, 6.626688579526240e-01], [3.278085121320318e-01, 4.251975363710968e-01], [3.205222948140067e-01, 5.840805307965026e-01], [1.994095640340481e-01, 9.363420542720279e-02], [1.474224961654246e-01, 3.478993154555565e-02], [3.075960627730014e-01, 2.973507927437446e-02], [3.278085121320318e-01, 2.469939514968714e-01], [3.205222948140067e-01, 9.539717438949057e-02], [7.069562305387490e-01, 1.994095640340481e-01], [8.177875722890196e-01, 1.474224961654246e-01], [6.626688579526240e-01, 3.075960627730014e-01], [4.251975363710968e-01, 3.278085121320318e-01], [5.840805307965026e-01, 3.205222948140067e-01], [7.069562305387490e-01, 9.363420542720279e-02], [8.177875722890196e-01, 3.478993154555565e-02], [6.626688579526240e-01, 2.973507927437446e-02], [4.251975363710968e-01, 2.469939514968714e-01], [5.840805307965026e-01, 9.539717438949057e-02], [9.363420542720279e-02, 1.994095640340481e-01], [3.478993154555565e-02, 1.474224961654246e-01], [2.973507927437446e-02, 3.075960627730014e-01], [2.469939514968714e-01, 3.278085121320318e-01], [9.539717438949057e-02, 3.205222948140067e-01], [9.363420542720279e-02, 7.069562305387490e-01], [3.478993154555565e-02, 8.177875722890196e-01], [2.973507927437446e-02, 6.626688579526240e-01], [2.469939514968714e-01, 4.251975363710968e-01], [9.539717438949057e-02, 5.840805307965026e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [2.755036388855880e-02, 9.724496361114411e-01], [9.036033917799679e-02, 9.096396608220032e-01], [1.835619234840696e-01, 8.164380765159302e-01], [3.002345295173255e-01, 6.997654704826744e-01], [4.317235335725362e-01, 5.682764664274637e-01], [5.682764664274635e-01, 4.317235335725364e-01], [6.997654704826742e-01, 3.002345295173257e-01], [8.164380765159302e-01, 1.835619234840697e-01], [9.096396608220034e-01, 9.036033917799657e-02], [9.724496361114410e-01, 2.755036388855891e-02], [2.755036388855880e-02, 0.000000000000000e+00], [9.036033917799679e-02, 0.000000000000000e+00], [1.835619234840696e-01, 0.000000000000000e+00], [3.002345295173255e-01, 0.000000000000000e+00], [4.317235335725362e-01, 0.000000000000000e+00], [5.682764664274635e-01, 0.000000000000000e+00], [6.997654704826742e-01, 0.000000000000000e+00], [8.164380765159302e-01, 0.000000000000000e+00], [9.096396608220034e-01, 0.000000000000000e+00], [9.724496361114410e-01, 0.000000000000000e+00], [0.000000000000000e+00, 2.755036388855880e-02], [0.000000000000000e+00, 9.036033917799679e-02], [0.000000000000000e+00, 1.835619234840696e-01], [0.000000000000000e+00, 3.002345295173255e-01], [0.000000000000000e+00, 4.317235335725362e-01], [0.000000000000000e+00, 5.682764664274635e-01], [0.000000000000000e+00, 6.997654704826742e-01], [0.000000000000000e+00, 8.164380765159302e-01], [0.000000000000000e+00, 9.096396608220034e-01], [0.000000000000000e+00, 9.724496361114410e-01], ] _rsv_lebgls[12] = [ [3.333333333333333e-01, 3.333333333333333e-01], [4.108337681828540e-02, 4.108337681828540e-02], [2.530162527885500e-01, 2.530162527885500e-01], [9.275221949490589e-02, 9.275221949490589e-02], [4.108337681828540e-02, 9.178332463634292e-01], [2.530162527885500e-01, 4.939674944228998e-01], [9.275221949490589e-02, 8.144955610101881e-01], [9.178332463634292e-01, 4.108337681828540e-02], [4.939674944228998e-01, 2.530162527885500e-01], [8.144955610101881e-01, 9.275221949490589e-02], [4.044590487503580e-01, 4.044590487503580e-01], [4.044590487503580e-01, 1.910819024992839e-01], [1.910819024992839e-01, 4.044590487503580e-01], [2.815910345568075e-01, 6.409342565390805e-01], [4.080479136914563e-01, 5.518892594390213e-01], [1.791741767343328e-01, 7.271665681840357e-01], [2.625999784981004e-01, 7.120109530779203e-01], [3.930958962903537e-01, 4.966440289045495e-01], [2.367253835467234e-01, 6.047812780184623e-01], [1.274088629870740e-01, 8.437470933281366e-01], [2.815910345568075e-01, 7.747470890411189e-02], [4.080479136914563e-01, 4.006282686952233e-02], [1.791741767343328e-01, 9.365925508163130e-02], [2.625999784981004e-01, 2.538906842397914e-02], [3.930958962903537e-01, 1.102600748050966e-01], [2.367253835467234e-01, 1.584933384348142e-01], [1.274088629870740e-01, 2.884404368478932e-02], [6.409342565390805e-01, 2.815910345568075e-01], [5.518892594390213e-01, 4.080479136914563e-01], [7.271665681840357e-01, 1.791741767343328e-01], [7.120109530779203e-01, 2.625999784981004e-01], [4.966440289045495e-01, 3.930958962903537e-01], [6.047812780184623e-01, 2.367253835467234e-01], [8.437470933281366e-01, 1.274088629870740e-01], [6.409342565390805e-01, 7.747470890411189e-02], [5.518892594390213e-01, 4.006282686952233e-02], [7.271665681840357e-01, 9.365925508163130e-02], [7.120109530779203e-01, 2.538906842397914e-02], [4.966440289045495e-01, 1.102600748050966e-01], [6.047812780184623e-01, 1.584933384348142e-01], [8.437470933281366e-01, 2.884404368478932e-02], [7.747470890411189e-02, 2.815910345568075e-01], [4.006282686952233e-02, 4.080479136914563e-01], [9.365925508163130e-02, 1.791741767343328e-01], [2.538906842397914e-02, 2.625999784981004e-01], [1.102600748050966e-01, 3.930958962903537e-01], [1.584933384348142e-01, 2.367253835467234e-01], [2.884404368478932e-02, 1.274088629870740e-01], [7.747470890411189e-02, 6.409342565390805e-01], [4.006282686952233e-02, 5.518892594390213e-01], [9.365925508163130e-02, 7.271665681840357e-01], [2.538906842397914e-02, 7.120109530779203e-01], [1.102600748050966e-01, 4.966440289045495e-01], [1.584933384348142e-01, 6.047812780184623e-01], [2.884404368478932e-02, 8.437470933281366e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [2.334507667891805e-02, 9.766549233210819e-01], [7.682621767406377e-02, 9.231737823259362e-01], [1.569057654591214e-01, 8.430942345408785e-01], [2.585450894543320e-01, 7.414549105456679e-01], [3.753565349468798e-01, 6.246434650531200e-01], [4.999999999999998e-01, 5.000000000000001e-01], [6.246434650531199e-01, 3.753565349468800e-01], [7.414549105456680e-01, 2.585450894543319e-01], [8.430942345408788e-01, 1.569057654591211e-01], [9.231737823259358e-01, 7.682621767406416e-02], [9.766549233210819e-01, 2.334507667891805e-02], [2.334507667891805e-02, 0.000000000000000e+00], [7.682621767406377e-02, 0.000000000000000e+00], [1.569057654591214e-01, 0.000000000000000e+00], [2.585450894543320e-01, 0.000000000000000e+00], [3.753565349468798e-01, 0.000000000000000e+00], [4.999999999999998e-01, 0.000000000000000e+00], [6.246434650531199e-01, 0.000000000000000e+00], [7.414549105456680e-01, 0.000000000000000e+00], [8.430942345408788e-01, 0.000000000000000e+00], [9.231737823259358e-01, 0.000000000000000e+00], [9.766549233210819e-01, 0.000000000000000e+00], [0.000000000000000e+00, 2.334507667891805e-02], [0.000000000000000e+00, 7.682621767406377e-02], [0.000000000000000e+00, 1.569057654591214e-01], [0.000000000000000e+00, 2.585450894543320e-01], [0.000000000000000e+00, 3.753565349468798e-01], [0.000000000000000e+00, 4.999999999999998e-01], [0.000000000000000e+00, 6.246434650531199e-01], [0.000000000000000e+00, 7.414549105456680e-01], [0.000000000000000e+00, 8.430942345408788e-01], [0.000000000000000e+00, 9.231737823259358e-01], [0.000000000000000e+00, 9.766549233210819e-01], ] _rsv_lebgls[13] = [ [1.480452652753508e-01, 1.480452652753508e-01], [8.377435391383915e-02, 8.377435391383915e-02], [3.446157135859970e-02, 3.446157135859970e-02], [1.480452652753508e-01, 7.039094694492982e-01], [8.377435391383915e-02, 8.324512921723217e-01], [3.446157135859970e-02, 9.310768572828006e-01], [7.039094694492982e-01, 1.480452652753508e-01], [8.324512921723217e-01, 8.377435391383915e-02], [9.310768572828006e-01, 3.446157135859970e-02], [4.655749386684967e-01, 4.655749386684967e-01], [3.658220186966510e-01, 3.658220186966510e-01], [4.308181049840558e-01, 4.308181049840558e-01], [4.655749386684967e-01, 6.885012266300649e-02], [3.658220186966510e-01, 2.683559626066979e-01], [4.308181049840558e-01, 1.383637900318882e-01], [6.885012266300649e-02, 4.655749386684967e-01], [2.683559626066979e-01, 3.658220186966510e-01], [1.383637900318882e-01, 4.308181049840558e-01], [1.876198296639073e-01, 7.505363476334480e-01], [2.408988278555256e-01, 6.203711602337613e-01], [1.095911259954575e-01, 8.671079494311813e-01], [3.011955592096039e-01, 6.516018514940782e-01], [2.401186982114374e-01, 7.423494369880164e-01], [4.086944595865063e-01, 5.728822400760038e-01], [2.755611410714366e-01, 5.088600522034840e-01], [3.311895891298100e-01, 5.665822045660098e-01], [1.876198296639073e-01, 6.184382270264465e-02], [2.408988278555256e-01, 1.387300119107129e-01], [1.095911259954575e-01, 2.330092457336119e-02], [3.011955592096039e-01, 4.720258929631782e-02], [2.401186982114374e-01, 1.753186480054613e-02], [4.086944595865063e-01, 1.842330033748984e-02], [2.755611410714366e-01, 2.155788067250792e-01], [3.311895891298100e-01, 1.022282063041801e-01], [7.505363476334480e-01, 1.876198296639073e-01], [6.203711602337613e-01, 2.408988278555256e-01], [8.671079494311813e-01, 1.095911259954575e-01], [6.516018514940782e-01, 3.011955592096039e-01], [7.423494369880164e-01, 2.401186982114374e-01], [5.728822400760038e-01, 4.086944595865063e-01], [5.088600522034840e-01, 2.755611410714366e-01], [5.665822045660098e-01, 3.311895891298100e-01], [7.505363476334480e-01, 6.184382270264465e-02], [6.203711602337613e-01, 1.387300119107129e-01], [8.671079494311813e-01, 2.330092457336119e-02], [6.516018514940782e-01, 4.720258929631782e-02], [7.423494369880164e-01, 1.753186480054613e-02], [5.728822400760038e-01, 1.842330033748984e-02], [5.088600522034840e-01, 2.155788067250792e-01], [5.665822045660098e-01, 1.022282063041801e-01], [6.184382270264465e-02, 1.876198296639073e-01], [1.387300119107129e-01, 2.408988278555256e-01], [2.330092457336119e-02, 1.095911259954575e-01], [4.720258929631782e-02, 3.011955592096039e-01], [1.753186480054613e-02, 2.401186982114374e-01], [1.842330033748984e-02, 4.086944595865063e-01], [2.155788067250792e-01, 2.755611410714366e-01], [1.022282063041801e-01, 3.311895891298100e-01], [6.184382270264465e-02, 7.505363476334480e-01], [1.387300119107129e-01, 6.203711602337613e-01], [2.330092457336119e-02, 8.671079494311813e-01], [4.720258929631782e-02, 6.516018514940782e-01], [1.753186480054613e-02, 7.423494369880164e-01], [1.842330033748984e-02, 5.728822400760038e-01], [2.155788067250792e-01, 5.088600522034840e-01], [1.022282063041801e-01, 5.665822045660098e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [2.003247736636959e-02, 9.799675226336304e-01], [6.609947308482655e-02, 9.339005269151734e-01], [1.355657004543369e-01, 8.644342995456630e-01], [2.246802985356765e-01, 7.753197014643233e-01], [3.286379933286436e-01, 6.713620066713563e-01], [4.418340655581481e-01, 5.581659344418519e-01], [5.581659344418519e-01, 4.418340655581480e-01], [6.713620066713563e-01, 3.286379933286436e-01], [7.753197014643234e-01, 2.246802985356765e-01], [8.644342995456628e-01, 1.355657004543371e-01], [9.339005269151735e-01, 6.609947308482644e-02], [9.799675226336305e-01, 2.003247736636948e-02], [2.003247736636959e-02, 0.000000000000000e+00], [6.609947308482655e-02, 0.000000000000000e+00], [1.355657004543369e-01, 0.000000000000000e+00], [2.246802985356765e-01, 0.000000000000000e+00], [3.286379933286436e-01, 0.000000000000000e+00], [4.418340655581481e-01, 0.000000000000000e+00], [5.581659344418519e-01, 0.000000000000000e+00], [6.713620066713563e-01, 0.000000000000000e+00], [7.753197014643234e-01, 0.000000000000000e+00], [8.644342995456628e-01, 0.000000000000000e+00], [9.339005269151735e-01, 0.000000000000000e+00], [9.799675226336305e-01, 0.000000000000000e+00], [0.000000000000000e+00, 2.003247736636959e-02], [0.000000000000000e+00, 6.609947308482655e-02], [0.000000000000000e+00, 1.355657004543369e-01], [0.000000000000000e+00, 2.246802985356765e-01], [0.000000000000000e+00, 3.286379933286436e-01], [0.000000000000000e+00, 4.418340655581481e-01], [0.000000000000000e+00, 5.581659344418519e-01], [0.000000000000000e+00, 6.713620066713563e-01], [0.000000000000000e+00, 7.753197014643234e-01], [0.000000000000000e+00, 8.644342995456628e-01], [0.000000000000000e+00, 9.339005269151735e-01], [0.000000000000000e+00, 9.799675226336305e-01], ] _rsv_lebgls[14] = [ [2.480357184193379e-01, 2.480357184193379e-01], [1.456863552793877e-01, 1.456863552793877e-01], [6.329150383943313e-02, 6.329150383943313e-02], [2.529465459854143e-02, 2.529465459854143e-02], [2.480357184193379e-01, 5.039285631613240e-01], [1.456863552793877e-01, 7.086272894412243e-01], [6.329150383943313e-02, 8.734169923211337e-01], [2.529465459854143e-02, 9.494106908029170e-01], [5.039285631613240e-01, 2.480357184193379e-01], [7.086272894412243e-01, 1.456863552793877e-01], [8.734169923211337e-01, 6.329150383943313e-02], [9.494106908029170e-01, 2.529465459854143e-02], [4.144353019078003e-01, 4.144353019078003e-01], [4.581970243973809e-01, 4.581970243973809e-01], [4.144353019078003e-01, 1.711293961843993e-01], [4.581970243973809e-01, 8.360595120523806e-02], [1.711293961843993e-01, 4.144353019078003e-01], [8.360595120523806e-02, 4.581970243973809e-01], [2.328433256200428e-01, 6.207971314222264e-01], [3.356649442686338e-01, 5.253621216168752e-01], [2.173235932081969e-01, 7.084887848223708e-01], [3.360380238642644e-01, 5.889993254408694e-01], [3.168899942468522e-01, 6.569340955504540e-01], [1.269728328340639e-01, 8.095167697311791e-01], [9.346022651957634e-02, 8.882284430310810e-01], [2.011513660730161e-01, 7.745114061393802e-01], [3.244865857496181e-01, 4.096454737120259e-01], [4.293343266786438e-01, 5.406727865350026e-01], [2.328433256200428e-01, 1.463595429577306e-01], [3.356649442686338e-01, 1.389729341144909e-01], [2.173235932081969e-01, 7.418762196943218e-02], [3.360380238642644e-01, 7.496265069486618e-02], [3.168899942468522e-01, 2.617591020269371e-02], [1.269728328340639e-01, 6.351039743475683e-02], [9.346022651957634e-02, 1.831133044934263e-02], [2.011513660730161e-01, 2.433722778760361e-02], [3.244865857496181e-01, 2.658679405383558e-01], [4.293343266786438e-01, 2.999288678635358e-02], [6.207971314222264e-01, 2.328433256200428e-01], [5.253621216168752e-01, 3.356649442686338e-01], [7.084887848223708e-01, 2.173235932081969e-01], [5.889993254408694e-01, 3.360380238642644e-01], [6.569340955504540e-01, 3.168899942468522e-01], [8.095167697311791e-01, 1.269728328340639e-01], [8.882284430310810e-01, 9.346022651957634e-02], [7.745114061393802e-01, 2.011513660730161e-01], [4.096454737120259e-01, 3.244865857496181e-01], [5.406727865350026e-01, 4.293343266786438e-01], [6.207971314222264e-01, 1.463595429577306e-01], [5.253621216168752e-01, 1.389729341144909e-01], [7.084887848223708e-01, 7.418762196943218e-02], [5.889993254408694e-01, 7.496265069486618e-02], [6.569340955504540e-01, 2.617591020269371e-02], [8.095167697311791e-01, 6.351039743475683e-02], [8.882284430310810e-01, 1.831133044934263e-02], [7.745114061393802e-01, 2.433722778760361e-02], [4.096454737120259e-01, 2.658679405383558e-01], [5.406727865350026e-01, 2.999288678635358e-02], [1.463595429577306e-01, 2.328433256200428e-01], [1.389729341144909e-01, 3.356649442686338e-01], [7.418762196943218e-02, 2.173235932081969e-01], [7.496265069486618e-02, 3.360380238642644e-01], [2.617591020269371e-02, 3.168899942468522e-01], [6.351039743475683e-02, 1.269728328340639e-01], [1.831133044934263e-02, 9.346022651957634e-02], [2.433722778760361e-02, 2.011513660730161e-01], [2.658679405383558e-01, 3.244865857496181e-01], [2.999288678635358e-02, 4.293343266786438e-01], [1.463595429577306e-01, 6.207971314222264e-01], [1.389729341144909e-01, 5.253621216168752e-01], [7.418762196943218e-02, 7.084887848223708e-01], [7.496265069486618e-02, 5.889993254408694e-01], [2.617591020269371e-02, 6.569340955504540e-01], [6.351039743475683e-02, 8.095167697311791e-01], [1.831133044934263e-02, 8.882284430310810e-01], [2.433722778760361e-02, 7.745114061393802e-01], [2.658679405383558e-01, 4.096454737120259e-01], [2.999288678635358e-02, 5.406727865350026e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [1.737703674808060e-02, 9.826229632519194e-01], [5.745897788851178e-02, 9.425410221114882e-01], [1.182401550240923e-01, 8.817598449759076e-01], [1.968733972650772e-01, 8.031266027349226e-01], [2.896809726431638e-01, 7.103190273568361e-01], [3.923230223181028e-01, 6.076769776818971e-01], [4.999999999999998e-01, 5.000000000000001e-01], [6.076769776818971e-01, 3.923230223181028e-01], [7.103190273568363e-01, 2.896809726431636e-01], [8.031266027349228e-01, 1.968733972650771e-01], [8.817598449759076e-01, 1.182401550240923e-01], [9.425410221114880e-01, 5.745897788851195e-02], [9.826229632519192e-01, 1.737703674808077e-02], [1.737703674808060e-02, 0.000000000000000e+00], [5.745897788851178e-02, 0.000000000000000e+00], [1.182401550240923e-01, 0.000000000000000e+00], [1.968733972650772e-01, 0.000000000000000e+00], [2.896809726431638e-01, 0.000000000000000e+00], [3.923230223181028e-01, 0.000000000000000e+00], [4.999999999999998e-01, 0.000000000000000e+00], [6.076769776818971e-01, 0.000000000000000e+00], [7.103190273568363e-01, 0.000000000000000e+00], [8.031266027349228e-01, 0.000000000000000e+00], [8.817598449759076e-01, 0.000000000000000e+00], [9.425410221114880e-01, 0.000000000000000e+00], [9.826229632519192e-01, 0.000000000000000e+00], [0.000000000000000e+00, 1.737703674808060e-02], [0.000000000000000e+00, 5.745897788851178e-02], [0.000000000000000e+00, 1.182401550240923e-01], [0.000000000000000e+00, 1.968733972650772e-01], [0.000000000000000e+00, 2.896809726431638e-01], [0.000000000000000e+00, 3.923230223181028e-01], [0.000000000000000e+00, 4.999999999999998e-01], [0.000000000000000e+00, 6.076769776818971e-01], [0.000000000000000e+00, 7.103190273568363e-01], [0.000000000000000e+00, 8.031266027349228e-01], [0.000000000000000e+00, 8.817598449759076e-01], [0.000000000000000e+00, 9.425410221114880e-01], [0.000000000000000e+00, 9.826229632519192e-01], ] _rsv_lebgls[15] = [ [3.333333333333333e-01, 3.333333333333333e-01], [2.259887508865324e-02, 2.259887508865324e-02], [6.337752529816408e-02, 6.337752529816408e-02], [1.299996108136073e-01, 1.299996108136073e-01], [2.259887508865324e-02, 9.548022498226934e-01], [6.337752529816408e-02, 8.732449494036718e-01], [1.299996108136073e-01, 7.400007783727852e-01], [9.548022498226934e-01, 2.259887508865324e-02], [8.732449494036718e-01, 6.337752529816408e-02], [7.400007783727852e-01, 1.299996108136073e-01], [4.768184624021342e-01, 4.768184624021342e-01], [4.135242422374686e-01, 4.135242422374686e-01], [4.475011342659718e-01, 4.475011342659718e-01], [4.768184624021342e-01, 4.636307519573157e-02], [4.135242422374686e-01, 1.729515155250627e-01], [4.475011342659718e-01, 1.049977314680562e-01], [4.636307519573157e-02, 4.768184624021342e-01], [1.729515155250627e-01, 4.135242422374686e-01], [1.049977314680562e-01, 4.475011342659718e-01], [1.984381315028134e-01, 6.660691622793706e-01], [2.706592592313675e-01, 6.488056171765984e-01], [2.928073839318821e-01, 6.831597592164991e-01], [2.628566217358005e-01, 5.392755677725964e-01], [3.257909497774679e-01, 5.479384774728655e-01], [4.214455528895491e-01, 5.627175182619162e-01], [3.583733638754480e-01, 5.880202970479078e-01], [1.937972504074645e-01, 7.497461573992948e-01], [1.199382949296624e-01, 8.286645968284446e-01], [8.498011953666545e-02, 8.970890223173155e-01], [3.258604505228824e-01, 4.435185812169222e-01], [1.796047914038433e-01, 8.040198765390368e-01], [1.984381315028134e-01, 1.354927062178159e-01], [2.706592592313675e-01, 8.053512359203396e-02], [2.928073839318821e-01, 2.403285685161871e-02], [2.628566217358005e-01, 1.978678104916029e-01], [3.257909497774679e-01, 1.262705727496664e-01], [4.214455528895491e-01, 1.583692884853460e-02], [3.583733638754480e-01, 5.360633907664413e-02], [1.937972504074645e-01, 5.645659219324061e-02], [1.199382949296624e-01, 5.139710824189291e-02], [8.498011953666545e-02, 1.793085814601891e-02], [3.258604505228824e-01, 2.306209682601952e-01], [1.796047914038433e-01, 1.637533205711982e-02], [6.660691622793706e-01, 1.984381315028134e-01], [6.488056171765984e-01, 2.706592592313675e-01], [6.831597592164991e-01, 2.928073839318821e-01], [5.392755677725964e-01, 2.628566217358005e-01], [5.479384774728655e-01, 3.257909497774679e-01], [5.627175182619162e-01, 4.214455528895491e-01], [5.880202970479078e-01, 3.583733638754480e-01], [7.497461573992948e-01, 1.937972504074645e-01], [8.286645968284446e-01, 1.199382949296624e-01], [8.970890223173155e-01, 8.498011953666545e-02], [4.435185812169222e-01, 3.258604505228824e-01], [8.040198765390368e-01, 1.796047914038433e-01], [6.660691622793706e-01, 1.354927062178159e-01], [6.488056171765984e-01, 8.053512359203396e-02], [6.831597592164991e-01, 2.403285685161871e-02], [5.392755677725964e-01, 1.978678104916029e-01], [5.479384774728655e-01, 1.262705727496664e-01], [5.627175182619162e-01, 1.583692884853460e-02], [5.880202970479078e-01, 5.360633907664413e-02], [7.497461573992948e-01, 5.645659219324061e-02], [8.286645968284446e-01, 5.139710824189291e-02], [8.970890223173155e-01, 1.793085814601891e-02], [4.435185812169222e-01, 2.306209682601952e-01], [8.040198765390368e-01, 1.637533205711982e-02], [1.354927062178159e-01, 1.984381315028134e-01], [8.053512359203396e-02, 2.706592592313675e-01], [2.403285685161871e-02, 2.928073839318821e-01], [1.978678104916029e-01, 2.628566217358005e-01], [1.262705727496664e-01, 3.257909497774679e-01], [1.583692884853460e-02, 4.214455528895491e-01], [5.360633907664413e-02, 3.583733638754480e-01], [5.645659219324061e-02, 1.937972504074645e-01], [5.139710824189291e-02, 1.199382949296624e-01], [1.793085814601891e-02, 8.498011953666545e-02], [2.306209682601952e-01, 3.258604505228824e-01], [1.637533205711982e-02, 1.796047914038433e-01], [1.354927062178159e-01, 6.660691622793706e-01], [8.053512359203396e-02, 6.488056171765984e-01], [2.403285685161871e-02, 6.831597592164991e-01], [1.978678104916029e-01, 5.392755677725964e-01], [1.262705727496664e-01, 5.479384774728655e-01], [1.583692884853460e-02, 5.627175182619162e-01], [5.360633907664413e-02, 5.880202970479078e-01], [5.645659219324061e-02, 7.497461573992948e-01], [5.139710824189291e-02, 8.286645968284446e-01], [1.793085814601891e-02, 8.970890223173155e-01], [2.306209682601952e-01, 4.435185812169222e-01], [1.637533205711982e-02, 8.040198765390368e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [1.521597686489117e-02, 9.847840231351088e-01], [5.039973345326398e-02, 9.496002665467360e-01], [1.039958540690923e-01, 8.960041459309076e-01], [1.738056485587534e-01, 8.261943514412466e-01], [2.569702890564312e-01, 7.430297109435687e-01], [3.500847655496184e-01, 6.499152344503815e-01], [4.493368632390252e-01, 5.506631367609747e-01], [5.506631367609745e-01, 4.493368632390254e-01], [6.499152344503815e-01, 3.500847655496184e-01], [7.430297109435688e-01, 2.569702890564311e-01], [8.261943514412466e-01, 1.738056485587533e-01], [8.960041459309076e-01, 1.039958540690923e-01], [9.496002665467360e-01, 5.039973345326398e-02], [9.847840231351090e-01, 1.521597686489095e-02], [1.521597686489117e-02, 0.000000000000000e+00], [5.039973345326398e-02, 0.000000000000000e+00], [1.039958540690923e-01, 0.000000000000000e+00], [1.738056485587534e-01, 0.000000000000000e+00], [2.569702890564312e-01, 0.000000000000000e+00], [3.500847655496184e-01, 0.000000000000000e+00], [4.493368632390252e-01, 0.000000000000000e+00], [5.506631367609745e-01, 0.000000000000000e+00], [6.499152344503815e-01, 0.000000000000000e+00], [7.430297109435688e-01, 0.000000000000000e+00], [8.261943514412466e-01, 0.000000000000000e+00], [8.960041459309076e-01, 0.000000000000000e+00], [9.496002665467360e-01, 0.000000000000000e+00], [9.847840231351090e-01, 0.000000000000000e+00], [0.000000000000000e+00, 1.521597686489117e-02], [0.000000000000000e+00, 5.039973345326398e-02], [0.000000000000000e+00, 1.039958540690923e-01], [0.000000000000000e+00, 1.738056485587534e-01], [0.000000000000000e+00, 2.569702890564312e-01], [0.000000000000000e+00, 3.500847655496184e-01], [0.000000000000000e+00, 4.493368632390252e-01], [0.000000000000000e+00, 5.506631367609745e-01], [0.000000000000000e+00, 6.499152344503815e-01], [0.000000000000000e+00, 7.430297109435688e-01], [0.000000000000000e+00, 8.261943514412466e-01], [0.000000000000000e+00, 8.960041459309076e-01], [0.000000000000000e+00, 9.496002665467360e-01], [0.000000000000000e+00, 9.847840231351090e-01], ] _rsv_lebgls[16] = [ [5.284047111616667e-02, 5.284047111616667e-02], [2.645455243559301e-01, 2.645455243559301e-01], [2.559645338426510e-02, 2.559645338426510e-02], [1.499953744415702e-01, 1.499953744415702e-01], [5.284047111616667e-02, 8.943190577676666e-01], [2.645455243559301e-01, 4.709089512881395e-01], [2.559645338426510e-02, 9.488070932314697e-01], [1.499953744415702e-01, 7.000092511168594e-01], [8.943190577676666e-01, 5.284047111616667e-02], [4.709089512881395e-01, 2.645455243559301e-01], [9.488070932314697e-01, 2.559645338426510e-02], [7.000092511168594e-01, 1.499953744415702e-01], [4.283192720111305e-01, 4.283192720111305e-01], [4.772486744600083e-01, 4.772486744600083e-01], [3.590252375678640e-01, 3.590252375678640e-01], [4.283192720111305e-01, 1.433614559777389e-01], [4.772486744600083e-01, 4.550265107998330e-02], [3.590252375678640e-01, 2.819495248642718e-01], [1.433614559777389e-01, 4.283192720111305e-01], [4.550265107998330e-02, 4.772486744600083e-01], [2.819495248642718e-01, 3.590252375678640e-01], [4.064266340483982e-01, 5.139836528036283e-01], [4.408916140714010e-01, 5.391596382131452e-01], [3.155166619585914e-01, 5.566613706105387e-01], [3.329777549008310e-01, 6.152305573515951e-01], [7.665376588027764e-02, 9.117800275056731e-01], [2.338026098230794e-01, 5.863699513874213e-01], [2.147217887957071e-01, 7.742669553673616e-01], [3.367659421500994e-01, 4.592838884885920e-01], [3.119742262865882e-01, 6.662160116048213e-01], [2.225573376197091e-01, 7.378559340872877e-01], [1.042596010644970e-01, 8.219786509556015e-01], [1.553621225506644e-01, 7.636963728963229e-01], [1.378422477974028e-01, 8.352850255545913e-01], [2.315357275962031e-01, 6.738457052373849e-01], [4.064266340483982e-01, 7.958971314797347e-02], [4.408916140714010e-01, 1.994874771545374e-02], [3.155166619585914e-01, 1.278219674308698e-01], [3.329777549008310e-01, 5.179168774757381e-02], [7.665376588027764e-02, 1.156620661404927e-02], [2.338026098230794e-01, 1.798274387894992e-01], [2.147217887957071e-01, 1.101125583693118e-02], [3.367659421500994e-01, 2.039501693613084e-01], [3.119742262865882e-01, 2.180976210859031e-02], [2.225573376197091e-01, 3.958672829300302e-02], [1.042596010644970e-01, 7.376174797990142e-02], [1.553621225506644e-01, 8.094150455301252e-02], [1.378422477974028e-01, 2.687272664800577e-02], [2.315357275962031e-01, 9.461856716641181e-02], [5.139836528036283e-01, 4.064266340483982e-01], [5.391596382131452e-01, 4.408916140714010e-01], [5.566613706105387e-01, 3.155166619585914e-01], [6.152305573515951e-01, 3.329777549008310e-01], [9.117800275056731e-01, 7.665376588027764e-02], [5.863699513874213e-01, 2.338026098230794e-01], [7.742669553673616e-01, 2.147217887957071e-01], [4.592838884885920e-01, 3.367659421500994e-01], [6.662160116048213e-01, 3.119742262865882e-01], [7.378559340872877e-01, 2.225573376197091e-01], [8.219786509556015e-01, 1.042596010644970e-01], [7.636963728963229e-01, 1.553621225506644e-01], [8.352850255545913e-01, 1.378422477974028e-01], [6.738457052373849e-01, 2.315357275962031e-01], [5.139836528036283e-01, 7.958971314797347e-02], [5.391596382131452e-01, 1.994874771545374e-02], [5.566613706105387e-01, 1.278219674308698e-01], [6.152305573515951e-01, 5.179168774757381e-02], [9.117800275056731e-01, 1.156620661404927e-02], [5.863699513874213e-01, 1.798274387894992e-01], [7.742669553673616e-01, 1.101125583693118e-02], [4.592838884885920e-01, 2.039501693613084e-01], [6.662160116048213e-01, 2.180976210859031e-02], [7.378559340872877e-01, 3.958672829300302e-02], [8.219786509556015e-01, 7.376174797990142e-02], [7.636963728963229e-01, 8.094150455301252e-02], [8.352850255545913e-01, 2.687272664800577e-02], [6.738457052373849e-01, 9.461856716641181e-02], [7.958971314797347e-02, 4.064266340483982e-01], [1.994874771545374e-02, 4.408916140714010e-01], [1.278219674308698e-01, 3.155166619585914e-01], [5.179168774757381e-02, 3.329777549008310e-01], [1.156620661404927e-02, 7.665376588027764e-02], [1.798274387894992e-01, 2.338026098230794e-01], [1.101125583693118e-02, 2.147217887957071e-01], [2.039501693613084e-01, 3.367659421500994e-01], [2.180976210859031e-02, 3.119742262865882e-01], [3.958672829300302e-02, 2.225573376197091e-01], [7.376174797990142e-02, 1.042596010644970e-01], [8.094150455301252e-02, 1.553621225506644e-01], [2.687272664800577e-02, 1.378422477974028e-01], [9.461856716641181e-02, 2.315357275962031e-01], [7.958971314797347e-02, 5.139836528036283e-01], [1.994874771545374e-02, 5.391596382131452e-01], [1.278219674308698e-01, 5.566613706105387e-01], [5.179168774757381e-02, 6.152305573515951e-01], [1.156620661404927e-02, 9.117800275056731e-01], [1.798274387894992e-01, 5.863699513874213e-01], [1.101125583693118e-02, 7.742669553673616e-01], [2.039501693613084e-01, 4.592838884885920e-01], [2.180976210859031e-02, 6.662160116048213e-01], [3.958672829300302e-02, 7.378559340872877e-01], [7.376174797990142e-02, 8.219786509556015e-01], [8.094150455301252e-02, 7.636963728963229e-01], [2.687272664800577e-02, 8.352850255545913e-01], [9.461856716641181e-02, 6.738457052373849e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [1.343391168429097e-02, 9.865660883157090e-01], [4.456000204221327e-02, 9.554399979577867e-01], [9.215187438911487e-02, 9.078481256108851e-01], [1.544855096861576e-01, 8.455144903138422e-01], [2.293073003349492e-01, 7.706926996650507e-01], [3.139127832172615e-01, 6.860872167827384e-01], [4.052440132408411e-01, 5.947559867591587e-01], [4.999999999999999e-01, 5.000000000000000e-01], [5.947559867591587e-01, 4.052440132408412e-01], [6.860872167827384e-01, 3.139127832172615e-01], [7.706926996650507e-01, 2.293073003349492e-01], [8.455144903138422e-01, 1.544855096861577e-01], [9.078481256108852e-01, 9.215187438911476e-02], [9.554399979577867e-01, 4.456000204221322e-02], [9.865660883157091e-01, 1.343391168429086e-02], [1.343391168429097e-02, 0.000000000000000e+00], [4.456000204221327e-02, 0.000000000000000e+00], [9.215187438911487e-02, 0.000000000000000e+00], [1.544855096861576e-01, 0.000000000000000e+00], [2.293073003349492e-01, 0.000000000000000e+00], [3.139127832172615e-01, 0.000000000000000e+00], [4.052440132408411e-01, 0.000000000000000e+00], [4.999999999999999e-01, 0.000000000000000e+00], [5.947559867591587e-01, 0.000000000000000e+00], [6.860872167827384e-01, 0.000000000000000e+00], [7.706926996650507e-01, 0.000000000000000e+00], [8.455144903138422e-01, 0.000000000000000e+00], [9.078481256108852e-01, 0.000000000000000e+00], [9.554399979577867e-01, 0.000000000000000e+00], [9.865660883157091e-01, 0.000000000000000e+00], [0.000000000000000e+00, 1.343391168429097e-02], [0.000000000000000e+00, 4.456000204221327e-02], [0.000000000000000e+00, 9.215187438911487e-02], [0.000000000000000e+00, 1.544855096861576e-01], [0.000000000000000e+00, 2.293073003349492e-01], [0.000000000000000e+00, 3.139127832172615e-01], [0.000000000000000e+00, 4.052440132408411e-01], [0.000000000000000e+00, 4.999999999999999e-01], [0.000000000000000e+00, 5.947559867591587e-01], [0.000000000000000e+00, 6.860872167827384e-01], [0.000000000000000e+00, 7.706926996650507e-01], [0.000000000000000e+00, 8.455144903138422e-01], [0.000000000000000e+00, 9.078481256108852e-01], [0.000000000000000e+00, 9.554399979577867e-01], [0.000000000000000e+00, 9.865660883157091e-01], ] _rsv_lebgls[17] = [ [1.945791515169107e-01, 1.945791515169107e-01], [2.049112087429205e-02, 2.049112087429205e-02], [4.259795575418456e-02, 4.259795575418456e-02], [1.564181521041115e-01, 1.564181521041115e-01], [1.945791515169107e-01, 6.108416969661784e-01], [2.049112087429205e-02, 9.590177582514158e-01], [4.259795575418456e-02, 9.148040884916308e-01], [1.564181521041115e-01, 6.871636957917768e-01], [6.108416969661784e-01, 1.945791515169107e-01], [9.590177582514158e-01, 2.049112087429205e-02], [9.148040884916308e-01, 4.259795575418456e-02], [6.871636957917768e-01, 1.564181521041115e-01], [3.592196968697690e-01, 3.592196968697690e-01], [3.899674085227521e-01, 3.899674085227521e-01], [4.556998336553927e-01, 4.556998336553927e-01], [4.779584328346175e-01, 4.779584328346175e-01], [3.592196968697690e-01, 2.815606062604619e-01], [3.899674085227521e-01, 2.200651829544957e-01], [4.556998336553927e-01, 8.860033268921452e-02], [4.779584328346175e-01, 4.408313433076493e-02], [2.815606062604619e-01, 3.592196968697690e-01], [2.200651829544957e-01, 3.899674085227521e-01], [8.860033268921452e-02, 4.556998336553927e-01], [4.408313433076493e-02, 4.779584328346175e-01], [2.064981741524552e-01, 7.765619597341436e-01], [3.643269502619441e-01, 5.977234247390156e-01], [1.356289190443467e-01, 7.886565198452635e-01], [1.989384047369088e-01, 6.984622374624075e-01], [2.566042921861959e-01, 5.741340329630012e-01], [1.364658140077919e-01, 8.412149343742766e-01], [8.644084936146931e-02, 8.566967730929346e-01], [2.541088096408400e-01, 6.323144327340671e-01], [2.765015607981030e-01, 6.704156948701927e-01], [3.705134447642415e-01, 4.826648284887848e-01], [3.038781746832655e-01, 6.837355849980972e-01], [3.625423658269765e-01, 5.525551268328993e-01], [4.292890810760650e-01, 5.586509174935030e-01], [2.918435801264757e-01, 4.818709044312088e-01], [6.803793687523349e-02, 9.226625456558029e-01], [1.935420559772826e-01, 7.663263726878712e-01], [2.064981741524552e-01, 1.693986611340114e-02], [3.643269502619441e-01, 3.794962499904019e-02], [1.356289190443467e-01, 7.571456111038976e-02], [1.989384047369088e-01, 1.025993578006836e-01], [2.566042921861959e-01, 1.692616748508027e-01], [1.364658140077919e-01, 2.231925161793135e-02], [8.644084936146931e-02, 5.686237754559597e-02], [2.541088096408400e-01, 1.135767576250926e-01], [2.765015607981030e-01, 5.308274433170423e-02], [3.705134447642415e-01, 1.468217267469735e-01], [3.038781746832655e-01, 1.238624031863722e-02], [3.625423658269765e-01, 8.490250734012416e-02], [4.292890810760650e-01, 1.206000143043195e-02], [2.918435801264757e-01, 2.262855154423154e-01], [6.803793687523349e-02, 9.299517468963514e-03], [1.935420559772826e-01, 4.013157133484601e-02], [7.765619597341436e-01, 2.064981741524552e-01], [5.977234247390156e-01, 3.643269502619441e-01], [7.886565198452635e-01, 1.356289190443467e-01], [6.984622374624075e-01, 1.989384047369088e-01], [5.741340329630012e-01, 2.566042921861959e-01], [8.412149343742766e-01, 1.364658140077919e-01], [8.566967730929346e-01, 8.644084936146931e-02], [6.323144327340671e-01, 2.541088096408400e-01], [6.704156948701927e-01, 2.765015607981030e-01], [4.826648284887848e-01, 3.705134447642415e-01], [6.837355849980972e-01, 3.038781746832655e-01], [5.525551268328993e-01, 3.625423658269765e-01], [5.586509174935030e-01, 4.292890810760650e-01], [4.818709044312088e-01, 2.918435801264757e-01], [9.226625456558029e-01, 6.803793687523349e-02], [7.663263726878712e-01, 1.935420559772826e-01], [7.765619597341436e-01, 1.693986611340114e-02], [5.977234247390156e-01, 3.794962499904019e-02], [7.886565198452635e-01, 7.571456111038976e-02], [6.984622374624075e-01, 1.025993578006836e-01], [5.741340329630012e-01, 1.692616748508027e-01], [8.412149343742766e-01, 2.231925161793135e-02], [8.566967730929346e-01, 5.686237754559597e-02], [6.323144327340671e-01, 1.135767576250926e-01], [6.704156948701927e-01, 5.308274433170423e-02], [4.826648284887848e-01, 1.468217267469735e-01], [6.837355849980972e-01, 1.238624031863722e-02], [5.525551268328993e-01, 8.490250734012416e-02], [5.586509174935030e-01, 1.206000143043195e-02], [4.818709044312088e-01, 2.262855154423154e-01], [9.226625456558029e-01, 9.299517468963514e-03], [7.663263726878712e-01, 4.013157133484601e-02], [1.693986611340114e-02, 2.064981741524552e-01], [3.794962499904019e-02, 3.643269502619441e-01], [7.571456111038976e-02, 1.356289190443467e-01], [1.025993578006836e-01, 1.989384047369088e-01], [1.692616748508027e-01, 2.566042921861959e-01], [2.231925161793135e-02, 1.364658140077919e-01], [5.686237754559597e-02, 8.644084936146931e-02], [1.135767576250926e-01, 2.541088096408400e-01], [5.308274433170423e-02, 2.765015607981030e-01], [1.468217267469735e-01, 3.705134447642415e-01], [1.238624031863722e-02, 3.038781746832655e-01], [8.490250734012416e-02, 3.625423658269765e-01], [1.206000143043195e-02, 4.292890810760650e-01], [2.262855154423154e-01, 2.918435801264757e-01], [9.299517468963514e-03, 6.803793687523349e-02], [4.013157133484601e-02, 1.935420559772826e-01], [1.693986611340114e-02, 7.765619597341436e-01], [3.794962499904019e-02, 5.977234247390156e-01], [7.571456111038976e-02, 7.886565198452635e-01], [1.025993578006836e-01, 6.984622374624075e-01], [1.692616748508027e-01, 5.741340329630012e-01], [2.231925161793135e-02, 8.412149343742766e-01], [5.686237754559597e-02, 8.566967730929346e-01], [1.135767576250926e-01, 6.323144327340671e-01], [5.308274433170423e-02, 6.704156948701927e-01], [1.468217267469735e-01, 4.826648284887848e-01], [1.238624031863722e-02, 6.837355849980972e-01], [8.490250734012416e-02, 5.525551268328993e-01], [1.206000143043195e-02, 5.586509174935030e-01], [2.262855154423154e-01, 4.818709044312088e-01], [9.299517468963514e-03, 9.226625456558029e-01], [4.013157133484601e-02, 7.663263726878712e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [1.194722129390074e-02, 9.880527787060993e-01], [3.967540732623298e-02, 9.603245926737670e-01], [8.220323239095506e-02, 9.177967676090449e-01], [1.381603353583786e-01, 8.618396646416213e-01], [2.057475828406691e-01, 7.942524171593308e-01], [2.827924815439379e-01, 7.172075184560620e-01], [3.668186735608596e-01, 6.331813264391403e-01], [4.551254532576739e-01, 5.448745467423260e-01], [5.448745467423260e-01, 4.551254532576739e-01], [6.331813264391406e-01, 3.668186735608593e-01], [7.172075184560620e-01, 2.827924815439379e-01], [7.942524171593308e-01, 2.057475828406691e-01], [8.618396646416213e-01, 1.381603353583786e-01], [9.177967676090450e-01, 8.220323239095495e-02], [9.603245926737669e-01, 3.967540732623309e-02], [9.880527787060993e-01, 1.194722129390068e-02], [1.194722129390074e-02, 0.000000000000000e+00], [3.967540732623298e-02, 0.000000000000000e+00], [8.220323239095506e-02, 0.000000000000000e+00], [1.381603353583786e-01, 0.000000000000000e+00], [2.057475828406691e-01, 0.000000000000000e+00], [2.827924815439379e-01, 0.000000000000000e+00], [3.668186735608596e-01, 0.000000000000000e+00], [4.551254532576739e-01, 0.000000000000000e+00], [5.448745467423260e-01, 0.000000000000000e+00], [6.331813264391406e-01, 0.000000000000000e+00], [7.172075184560620e-01, 0.000000000000000e+00], [7.942524171593308e-01, 0.000000000000000e+00], [8.618396646416213e-01, 0.000000000000000e+00], [9.177967676090450e-01, 0.000000000000000e+00], [9.603245926737669e-01, 0.000000000000000e+00], [9.880527787060993e-01, 0.000000000000000e+00], [0.000000000000000e+00, 1.194722129390074e-02], [0.000000000000000e+00, 3.967540732623298e-02], [0.000000000000000e+00, 8.220323239095506e-02], [0.000000000000000e+00, 1.381603353583786e-01], [0.000000000000000e+00, 2.057475828406691e-01], [0.000000000000000e+00, 2.827924815439379e-01], [0.000000000000000e+00, 3.668186735608596e-01], [0.000000000000000e+00, 4.551254532576739e-01], [0.000000000000000e+00, 5.448745467423260e-01], [0.000000000000000e+00, 6.331813264391406e-01], [0.000000000000000e+00, 7.172075184560620e-01], [0.000000000000000e+00, 7.942524171593308e-01], [0.000000000000000e+00, 8.618396646416213e-01], [0.000000000000000e+00, 9.177967676090450e-01], [0.000000000000000e+00, 9.603245926737669e-01], [0.000000000000000e+00, 9.880527787060993e-01], ] _rsv_lebgls[18] = [ [3.333333333333333e-01, 3.333333333333333e-01], [1.867832911591294e-01, 1.867832911591294e-01], [1.843625980360632e-02, 1.843625980360632e-02], [7.974745165252009e-02, 7.974745165252009e-02], [4.582737591105361e-02, 4.582737591105361e-02], [1.867832911591294e-01, 6.264334176817411e-01], [1.843625980360632e-02, 9.631274803927872e-01], [7.974745165252009e-02, 8.405050966949597e-01], [4.582737591105361e-02, 9.083452481778927e-01], [6.264334176817411e-01, 1.867832911591294e-01], [9.631274803927872e-01, 1.843625980360632e-02], [8.405050966949597e-01, 7.974745165252009e-02], [9.083452481778927e-01, 4.582737591105361e-02], [4.610274012108529e-01, 4.610274012108529e-01], [4.031134167385391e-01, 4.031134167385391e-01], [4.393412546532561e-01, 4.393412546532561e-01], [4.610274012108529e-01, 7.794519757829410e-02], [4.031134167385391e-01, 1.937731665229216e-01], [4.393412546532561e-01, 1.213174906934877e-01], [7.794519757829410e-02, 4.610274012108529e-01], [1.937731665229216e-01, 4.031134167385391e-01], [1.213174906934877e-01, 4.393412546532561e-01], [2.697535482222230e-01, 5.131123254361209e-01], [1.013663979040955e-01, 8.552745279773800e-01], [1.577802125320718e-01, 8.143102779121228e-01], [5.704260843925303e-02, 9.307086014792093e-01], [3.518333725591127e-01, 5.516132715650402e-01], [2.643961982569245e-01, 6.635759045983397e-01], [1.323082356077286e-01, 7.771019226176585e-01], [4.389280715061170e-01, 5.474017498960880e-01], [1.756721652834479e-01, 7.043665532533164e-01], [3.285410056449763e-01, 6.538843552798158e-01], [3.384986151918548e-01, 5.183440648484733e-01], [1.066901027121254e-01, 8.801628839826043e-01], [4.388925265213433e-01, 5.152283097309622e-01], [1.991527726480603e-01, 7.356822819499346e-01], [2.703436617821667e-01, 6.001860955307918e-01], [3.526900037620688e-01, 6.037477082466996e-01], [2.177546267144484e-01, 7.742157293365573e-01], [2.463925035152266e-01, 7.226718910081446e-01], [3.242851625161429e-01, 4.292054611356153e-01], [2.697535482222230e-01, 2.171341263416559e-01], [1.013663979040955e-01, 4.335907411852446e-02], [1.577802125320718e-01, 2.790950955580528e-02], [5.704260843925303e-02, 1.224879008153767e-02], [3.518333725591127e-01, 9.655335587584701e-02], [2.643961982569245e-01, 7.202789714473578e-02], [1.323082356077286e-01, 9.058984177461271e-02], [4.389280715061170e-01, 1.367017859779495e-02], [1.756721652834479e-01, 1.199612814632355e-01], [3.285410056449763e-01, 1.757463907520784e-02], [3.384986151918548e-01, 1.431573199596718e-01], [1.066901027121254e-01, 1.314701330527023e-02], [4.388925265213433e-01, 4.587916374769451e-02], [1.991527726480603e-01, 6.516494540200501e-02], [2.703436617821667e-01, 1.294702426870414e-01], [3.526900037620688e-01, 4.356228799123151e-02], [2.177546267144484e-01, 8.029643948994191e-03], [2.463925035152266e-01, 3.093560547662865e-02], [3.242851625161429e-01, 2.465093763482417e-01], [5.131123254361209e-01, 2.697535482222230e-01], [8.552745279773800e-01, 1.013663979040955e-01], [8.143102779121228e-01, 1.577802125320718e-01], [9.307086014792093e-01, 5.704260843925303e-02], [5.516132715650402e-01, 3.518333725591127e-01], [6.635759045983397e-01, 2.643961982569245e-01], [7.771019226176585e-01, 1.323082356077286e-01], [5.474017498960880e-01, 4.389280715061170e-01], [7.043665532533164e-01, 1.756721652834479e-01], [6.538843552798158e-01, 3.285410056449763e-01], [5.183440648484733e-01, 3.384986151918548e-01], [8.801628839826043e-01, 1.066901027121254e-01], [5.152283097309622e-01, 4.388925265213433e-01], [7.356822819499346e-01, 1.991527726480603e-01], [6.001860955307918e-01, 2.703436617821667e-01], [6.037477082466996e-01, 3.526900037620688e-01], [7.742157293365573e-01, 2.177546267144484e-01], [7.226718910081446e-01, 2.463925035152266e-01], [4.292054611356153e-01, 3.242851625161429e-01], [5.131123254361209e-01, 2.171341263416559e-01], [8.552745279773800e-01, 4.335907411852446e-02], [8.143102779121228e-01, 2.790950955580528e-02], [9.307086014792093e-01, 1.224879008153767e-02], [5.516132715650402e-01, 9.655335587584701e-02], [6.635759045983397e-01, 7.202789714473578e-02], [7.771019226176585e-01, 9.058984177461271e-02], [5.474017498960880e-01, 1.367017859779495e-02], [7.043665532533164e-01, 1.199612814632355e-01], [6.538843552798158e-01, 1.757463907520784e-02], [5.183440648484733e-01, 1.431573199596718e-01], [8.801628839826043e-01, 1.314701330527023e-02], [5.152283097309622e-01, 4.587916374769451e-02], [7.356822819499346e-01, 6.516494540200501e-02], [6.001860955307918e-01, 1.294702426870414e-01], [6.037477082466996e-01, 4.356228799123151e-02], [7.742157293365573e-01, 8.029643948994191e-03], [7.226718910081446e-01, 3.093560547662865e-02], [4.292054611356153e-01, 2.465093763482417e-01], [2.171341263416559e-01, 2.697535482222230e-01], [4.335907411852446e-02, 1.013663979040955e-01], [2.790950955580528e-02, 1.577802125320718e-01], [1.224879008153767e-02, 5.704260843925303e-02], [9.655335587584701e-02, 3.518333725591127e-01], [7.202789714473578e-02, 2.643961982569245e-01], [9.058984177461271e-02, 1.323082356077286e-01], [1.367017859779495e-02, 4.389280715061170e-01], [1.199612814632355e-01, 1.756721652834479e-01], [1.757463907520784e-02, 3.285410056449763e-01], [1.431573199596718e-01, 3.384986151918548e-01], [1.314701330527023e-02, 1.066901027121254e-01], [4.587916374769451e-02, 4.388925265213433e-01], [6.516494540200501e-02, 1.991527726480603e-01], [1.294702426870414e-01, 2.703436617821667e-01], [4.356228799123151e-02, 3.526900037620688e-01], [8.029643948994191e-03, 2.177546267144484e-01], [3.093560547662865e-02, 2.463925035152266e-01], [2.465093763482417e-01, 3.242851625161429e-01], [2.171341263416559e-01, 5.131123254361209e-01], [4.335907411852446e-02, 8.552745279773800e-01], [2.790950955580528e-02, 8.143102779121228e-01], [1.224879008153767e-02, 9.307086014792093e-01], [9.655335587584701e-02, 5.516132715650402e-01], [7.202789714473578e-02, 6.635759045983397e-01], [9.058984177461271e-02, 7.771019226176585e-01], [1.367017859779495e-02, 5.474017498960880e-01], [1.199612814632355e-01, 7.043665532533164e-01], [1.757463907520784e-02, 6.538843552798158e-01], [1.431573199596718e-01, 5.183440648484733e-01], [1.314701330527023e-02, 8.801628839826043e-01], [4.587916374769451e-02, 5.152283097309622e-01], [6.516494540200501e-02, 7.356822819499346e-01], [1.294702426870414e-01, 6.001860955307918e-01], [4.356228799123151e-02, 6.037477082466996e-01], [8.029643948994191e-03, 7.742157293365573e-01], [3.093560547662865e-02, 7.226718910081446e-01], [2.465093763482417e-01, 4.292054611356153e-01], [1.000000000000000e+00, 0.000000000000000e+00], [0.000000000000000e+00, 1.000000000000000e+00], [0.000000000000000e+00, 0.000000000000000e+00], [1.069411688896010e-02, 9.893058831110399e-01], [3.554923592370679e-02, 9.644507640762931e-01], [7.376971110167684e-02, 9.262302888983231e-01], [1.242528987236936e-01, 8.757471012763062e-01], [1.855459313673898e-01, 8.144540686326101e-01], [2.558853571596433e-01, 7.441146428403566e-01], [3.332475760877505e-01, 6.667524239122494e-01], [4.154069882953593e-01, 5.845930117046407e-01], [5.000000000000000e-01, 5.000000000000000e-01], [5.845930117046408e-01, 4.154069882953591e-01], [6.667524239122492e-01, 3.332475760877507e-01], [7.441146428403569e-01, 2.558853571596430e-01], [8.144540686326102e-01, 1.855459313673897e-01], [8.757471012763063e-01, 1.242528987236936e-01], [9.262302888983231e-01, 7.376971110167684e-02], [9.644507640762930e-01, 3.554923592370695e-02], [9.893058831110401e-01, 1.069411688895982e-02], [1.069411688896010e-02, 0.000000000000000e+00], [3.554923592370679e-02, 0.000000000000000e+00], [7.376971110167684e-02, 0.000000000000000e+00], [1.242528987236936e-01, 0.000000000000000e+00], [1.855459313673898e-01, 0.000000000000000e+00], [2.558853571596433e-01, 0.000000000000000e+00], [3.332475760877505e-01, 0.000000000000000e+00], [4.154069882953593e-01, 0.000000000000000e+00], [5.000000000000000e-01, 0.000000000000000e+00], [5.845930117046408e-01, 0.000000000000000e+00], [6.667524239122492e-01, 0.000000000000000e+00], [7.441146428403569e-01, 0.000000000000000e+00], [8.144540686326102e-01, 0.000000000000000e+00], [8.757471012763063e-01, 0.000000000000000e+00], [9.262302888983231e-01, 0.000000000000000e+00], [9.644507640762930e-01, 0.000000000000000e+00], [9.893058831110401e-01, 0.000000000000000e+00], [0.000000000000000e+00, 1.069411688896010e-02], [0.000000000000000e+00, 3.554923592370679e-02], [0.000000000000000e+00, 7.376971110167684e-02], [0.000000000000000e+00, 1.242528987236936e-01], [0.000000000000000e+00, 1.855459313673898e-01], [0.000000000000000e+00, 2.558853571596433e-01], [0.000000000000000e+00, 3.332475760877505e-01], [0.000000000000000e+00, 4.154069882953593e-01], [0.000000000000000e+00, 5.000000000000000e-01], [0.000000000000000e+00, 5.845930117046408e-01], [0.000000000000000e+00, 6.667524239122492e-01], [0.000000000000000e+00, 7.441146428403569e-01], [0.000000000000000e+00, 8.144540686326102e-01], [0.000000000000000e+00, 8.757471012763063e-01], [0.000000000000000e+00, 9.262302888983231e-01], [0.000000000000000e+00, 9.644507640762930e-01], [0.000000000000000e+00, 9.893058831110401e-01], ] # Rapetti, Sommariva, & Vianello Symmetric Lebesgue-minimizing # # Lobatto-Gauss-Legendre nodes: doi:10.1016/j.cam.2011.11.023 # # ----------------------------END----------------------------- #
[docs]def rapetti_sommariva_vianello(n, domain='unit'): '''Create Rapetti-Sommariva-Vianello nodes for the triangle. that minimize the Lebesgue constant while remaining symmetric and having Lobatto-Gauss-Legendre nodes on the edges. Notes: The Rapetti-Sommariva-Vianello nodes are implicitly defined by minimizing the Lebesgue constanat while maintaining `S_3` symmetry and edge nodes that are Lobatto-Gauss-Legendre nodes. Args: n (int): The polynomial degree, must be `\\leq 18`. domain (str, optional): The domain of the simplex. See ":ref:`domains`" for the choices and their formal definitions. Returns: ndarray: Rapetti-Sommariva-Vianellow nodes as a 2D array with one row for each of `\\binom{n+2}{2}` nodes, and 2 columns for coordinates (or 3 if ``domain='barycentric'``). Example: This plot shows the Rapetti-Sommariva-Vianello nodes for `n = 10`, which do not have the lattice-like structure of the explicitly defined nodes in the module. .. plot:: :include-source: True >>> import matplotlib.pyplot as plt >>> from numpy import eye >>> from recursivenodes.nodes import rapetti_sommariva_vianello >>> from recursivenodes.utils import coord_map >>> nodes = rapetti_sommariva_vianello(10, domain='equilateral') >>> corners = coord_map(eye(3), 'barycentric', 'equilateral') >>> plt.plot(corners[[0,1,2,0],0], corners[[0,1,2,0],1]) [<matplotlib.lines.Line2D object at ...>] >>> plt.scatter(nodes[:,0], nodes[:,1]) <matplotlib.collections.PathCollection object at ...> >>> plt.gca().set_aspect('equal') >>> plt.title('Rapetti-Sommariva-Vianello Nodes') Text(0.5, 1.0, 'Rapetti-Sommariva-Vianello Nodes') >>> plt.show() References: :cite:`RaSV12` Warning: These nodes cannot be used with :func:`recursivenodes.lebesgue.lebesguemax` for `n \\geq 10`, because they do not have lattice-like structure. ''' nodes = np.array(_rsv_lebgls[n]) return coord_map(nodes, 'unit', domain)
def expand_to_boundary(d, n, nodes, ex_nodes, domain='biunit'): ''' given degree n nodes for the d-simplex that are logically laid out like the equispaced nodes and are only in the interior, construct degree (n + d + 1) nodes for the d-simplex which are equal to nodes in the interior and ex_nodes on the boundary. No attempt is made to make the new boundary nodes good for interpolation: they are just there to aid in computing lebesguemax() in lebesgue.py ''' nd = n + d + 1 tuple_to_index = {} for (k, i) in enumerate(multiindex_equal(d+1, n)): tuple_to_index[i] = k ex_nodes = ex_nodes.copy() for (k, i) in enumerate(multiindex_equal(d+1, nd)): if min(i) > 0: ihat = tuple([a - 1 for a in i]) j = tuple_to_index[ihat] ex_nodes[k, :] = nodes[j, :] return ex_nodes def add_nodes_to_parser(parser): parser.add_argument('-n', '--degree', type=int, nargs='?', default=7, help=('degree of polynomial space for ' 'which node set is equisolvent')) parser.add_argument('-d', '--dimension', type=int, nargs='?', default=3, help='spatial dimensions to node set simplex') parser.add_argument('--nodes', type=str, choices=['recursive', 'warburton', 'blyth_luo_pozrikidis', 'equispaced', 'equispaced_interior'], nargs='?', default='recursive', help='node placement algorithm') parser.add_argument('-w', '--w-alpha', type=float, nargs='?', help=('blending parameter for ' 'Warburton warp & blend method')) parser.add_argument('--domain', type=str, choices=['biunit', 'unit', 'barycentric', 'equilateral'], default='biunit', nargs='?', help='output simlex domain') parser.add_argument('-f', '--family', type=str, choices=['lgl', 'lgc', 'gl', 'gc', 'equi', 'equi_interior', 'lgg', 'gg'], default='lgl', nargs='?', help=('base 1D node family for Blyth-Pozrikidis, ' 'Warburton, and recursive nodes')) parser.add_argument('-g', '--g-alpha', type=float, nargs='?', default=0., help=('Gegenbauer alpha exponent (only used with ' '--family lgg or --family gg)')) def nodes_from_args(args, expanded=False): d = args.dimension n = args.degree domain = args.domain fam_arg = args.family need_expanded = False if expanded: need_expanded = True if (args.nodes == 'equispaced' or (args.nodes != 'equispaced_interior' and (args.family == 'equi' or fam_arg[0] == 'l'))): need_expanded = False if need_expanded: if (args.nodes == 'equispaced_interior' or args.family == 'equi_interior'): ex_fam_arg = 'equi' else: ex_fam_arg = 'l' + fam_arg if (fam_arg == 'lgg' or fam_arg == 'gg'): fam_arg = (fam_arg, args.g_alpha) family = _decode_family(fam_arg) x = coord_map(family[n], 'unit', domain) if need_expanded: if (ex_fam_arg == 'lgg'): ex_fam_arg = (ex_fam_arg, args.g_alpha) ex_family = _decode_family(ex_fam_arg) ex_x = coord_map(family[n+d+1], 'unit', domain) if args.nodes == 'equispaced': nodes = equispaced(d, n, domain=domain) elif args.nodes == 'equispaced_interior': nodes = equispaced_interior(d, n, domain=domain) if need_expanded: ex_nodes = equispaced(d, n+d+1, domain=domain) elif args.nodes == 'blyth_luo_pozrikidis': nodes = blyth_luo_pozrikidis(d, n, x, domain=domain) if need_expanded: ex_nodes = blyth_luo_pozrikidis(d, n+d+1, ex_x, domain=domain) elif args.nodes == 'warburton': alpha = args.w_alpha nodes = warburton(d, n, x, alpha=alpha, domain=domain) if need_expanded: ex_nodes = warburton(d, n+d+1, ex_x, alpha=alpha, domain=domain) elif args.nodes == 'recursive': nodes = recursive(d, n, family, domain=domain) if need_expanded: ex_nodes = recursive(d, n+d+1, ex_family, domain=domain) if expanded: if need_expanded: ex_nodes = expand_to_boundary(d, n, nodes, ex_nodes, domain=domain) return (d, n, domain, family, nodes, ex_nodes) else: return (d, n, domain, family, nodes, nodes) return (d, n, domain, family, nodes) if __name__ == '__main__': from argparse import ArgumentParser parser = ArgumentParser(description=('Print out a node set ' 'implemented in nodes.py')) add_nodes_to_parser(parser) args = parser.parse_args() d, n, domain, family, nodes = nodes_from_args(args) print(nodes)