Example #1
0
def make(cls, n, xmin=0, xmax=pi):

    assert xmax > xmin
    
    N = n
    pnts = linspace(xmin, xmax, num=n)
    lenx = abs(xmax - xmin)
    delta = diff(pnts)
    
    verts = pnts
    verts_dual = verts[:-1] + 0.5*delta
    
    edges = (pnts[:-1], pnts[1:])
    tmp = concatenate(([xmin], verts_dual, [xmax]))
    delta_dual = diff(tmp)
    edges_dual = (tmp[:-1], tmp[1:])

    N = {(0, True)  : n, 
         (1, True)  : n-1,
         (0, False) : n-1,
         (1, False) : n}

    Delta = {True  : delta,
             False : delta_dual}
    
    cells = {(0, True)  : verts, 
             (1, True)  : edges,
             (0, False) : verts_dual,
             (1, False) : edges_dual,}

    B={(0, True)  : lambda i: lambda x: sp.kappa0(n, i, x), 
       (1, True)  : lambda i: lambda x: sp.kappa1_symm(n, i, x),
       (0, False) : lambda i: lambda x: sp.kappad0(n, i, x),
       (1, False) : lambda i: lambda x: sp.kappad1_symm(n, i, x),}

    D={(0, True)  : lambda f: diff(f), 
       (1, True)  : lambda f: 0,
       (0, False) : lambda f: diff(concatenate(([0], f, [0]))),
       (1, False) : lambda f: 0,}
    
    H={(0, True)  : H0_regular, 
       (1, True)  : H1_regular,
       (0, False) : H0d_regular,
       (1, False) : H1d_regular,}

    refine=dec.common.wrap_refine(to_refine, from_refine)
   
    return cls(n=n,
               xmin=xmin, 
               xmax=xmax,
               delta=Delta,
               N=N,
               cells=cells,
               dec=bunch(P=dec.common.projection(cells),
                         B=B,
                         D=D,
                         H=H,
                         W=None,
                         C=None),
             refine=refine)
Example #2
0
def make(cls, n, xmin=-1, xmax=+1):

    # 2n-1 points: n primal, n-1 dual
    x = sin(linspace(-pi/2, pi/2, 2*n-1))
    pnts = 0.5*(xmin*(1-x) + xmax*(1+x))

    verts = pnts[::2]
    delta = diff(verts)
    edges = (verts[:-1], verts[1:])

    verts_dual = pnts[1::2]
    tmp = concatenate(([pnts[0]], verts_dual, [pnts[-1]]))
    delta_dual = diff(tmp)
    edges_dual = (tmp[:-1], tmp[1:])

    N = {(0, True)  : n, 
         (1, True)  : n-1,
         (0, False) : n-1,
         (1, False) : n}

    Delta = {True  : delta,
             False : delta_dual}
    
    cells = {(0, True)  : verts, 
             (1, True)  : edges,
             (0, False) : verts_dual,
             (1, False) : edges_dual,}

    B={(0, True)  : lambda i: lambda x: sp.psi0(n, i, x), 
       (1, True)  : lambda i: lambda x: sp.psi1(n, i, x),
       (0, False) : lambda i: lambda x: sp.psid0(n, i, x),
       (1, False) : lambda i: lambda x: sp.psid1(n, i, x),}

    D={(0, True)  : lambda f: diff(f), 
       (1, True)  : lambda f: 0,
       (0, False) : lambda f: diff(concatenate(([0], f, [0]))),
       (1, False) : lambda f: 0,}
    
    H={(0, True)  : H0_cheb, 
       (1, True)  : H1_cheb,
       (0, False) : H0d_cheb,
       (1, False) : H1d_cheb,}

    refine=dec.common.wrap_refine(to_refine, from_refine)
   
    return cls(n=n,
               xmin=xmin, 
               xmax=xmax,
               delta=Delta,
               N=N,
               cells=cells,
               dec=bunch(P=dec.common.projection(cells),
                         B=B,
                         D=D,
                         H=H,
                         W=dec.common.wedge(refine),
                         C=dec.common.contraction(refine)),
               refine=refine)  
Example #3
0
 def __init__(self, *coords):
     self.coords = coords
     self.dimension = len(coords)
     if len(coords) == 1:
         x, = coords
         dec = bunch(D=derivative_1d(x),
                     H=hodge_star_1d(),
                     W=wedge_1d(),
                     C=contraction_1d(),
                     )
     elif len(coords) == 2:
         x, y = coords
         dec = bunch(D=derivative_2d(x, y),
                     H=hodge_star_2d(),
                     W=wedge_2d(),
                     C=contraction_2d(),
                     )
     else:
         raise NotImplementedError
     self.dec = dec
Example #4
0
 def __init__(self, *coords):
     self.coords = coords
     self.dimension = len(coords)
     if len(coords) == 1:
         x, = coords
         dec = bunch(
             D=derivative_1d(x),
             H=hodge_star_1d(),
             W=wedge_1d(),
             C=contraction_1d(),
         )
     elif len(coords) == 2:
         x, y = coords
         dec = bunch(
             D=derivative_2d(x, y),
             H=hodge_star_2d(),
             W=wedge_2d(),
             C=contraction_2d(),
         )
     else:
         raise NotImplementedError
     self.dec = dec
Example #5
0
def wrap_refine(to_refine, from_refine):
    
    T0, T1, T0d, T1d = to_refine()
    U0, U1, U0d, U1d = from_refine()    
    T = {(0, True):  T0, 
         (1, True):  T1, 
         (0, False): T0d, 
         (1, False): T1d,}
    U = {(0, True):  U0, 
         (1, True):  U1, 
         (0, False): U0d, 
         (1, False): U1d,}

    return bunch(T=T, U=U)
Example #6
0
def make(cls, n, xmin=0, xmax=2 * pi):

    pnts = linspace(xmin, xmax, num=(n + 1))
    lenx = abs(xmax - xmin)
    delta = diff(pnts)

    verts = pnts[:-1]
    edges = (pnts[:-1], pnts[1:])

    verts_dual = verts + 0.5 * delta
    edges_dual = (roll(verts_dual, shift=1), verts_dual)
    edges_dual[0][0] -= lenx
    delta_dual = delta

    N = {(0, True): n, (1, True): n, (0, False): n, (1, False): n}

    Delta = {True: delta, False: delta_dual}

    cells = {
        (0, True): verts,
        (1, True): edges,
        (0, False): verts_dual,
        (1, False): edges_dual,
    }

    B = {
        (0, True): lambda i: lambda x: sp.phi0(n, i, x),
        (1, True): lambda i: lambda x: sp.phi1(n, i, x),
        (0, False): lambda i: lambda x: sp.phid0(n, i, x),
        (1, False): lambda i: lambda x: sp.phid1(n, i, x),
    }

    D = {
        (0, True): lambda f: roll(f, shift=-1) - f,
        (1, True): lambda f: 0,
        (0, False): lambda f: roll(D[0, True](f), shift=+1),
        (1, False): lambda f: 0,
    }

    H = {
        (0, True): lambda x: real(sp.H(x)),
        (1, True): lambda x: real(sp.Hinv(x)),
        (0, False): lambda x: H[0, True](x),
        (1, False): lambda x: H[1, True](x),
    }

    refine = dec.common.wrap_refine(to_refine, from_refine)

    return cls(n=n,
               xmin=xmin,
               xmax=xmax,
               delta=Delta,
               N=N,
               cells=cells,
               dec=bunch(P=dec.common.projection(cells),
                         B=B,
                         D=D,
                         H=H,
                         W=dec.common.wedge(refine),
                         C=dec.common.contraction(refine)),
               refine=refine)
Example #7
0
def make(cls, n, xmin=-1, xmax=+1):

    # 2n-1 points: n primal, n-1 dual
    x = sin(linspace(-pi / 2, pi / 2, 2 * n - 1))
    pnts = 0.5 * (xmin * (1 - x) + xmax * (1 + x))

    verts = pnts[::2]
    delta = diff(verts)
    edges = (verts[:-1], verts[1:])

    verts_dual = pnts[1::2]
    tmp = concatenate(([pnts[0]], verts_dual, [pnts[-1]]))
    delta_dual = diff(tmp)
    edges_dual = (tmp[:-1], tmp[1:])

    N = {(0, True): n, (1, True): n - 1, (0, False): n - 1, (1, False): n}

    Delta = {True: delta, False: delta_dual}

    cells = {
        (0, True): verts,
        (1, True): edges,
        (0, False): verts_dual,
        (1, False): edges_dual,
    }

    B = {
        (0, True): lambda i: lambda x: sp.psi0(n, i, x),
        (1, True): lambda i: lambda x: sp.psi1(n, i, x),
        (0, False): lambda i: lambda x: sp.psid0(n, i, x),
        (1, False): lambda i: lambda x: sp.psid1(n, i, x),
    }

    D = {
        (0, True): lambda f: diff(f),
        (1, True): lambda f: 0,
        (0, False): lambda f: diff(concatenate(([0], f, [0]))),
        (1, False): lambda f: 0,
    }

    H = {
        (0, True): H0_cheb,
        (1, True): H1_cheb,
        (0, False): H0d_cheb,
        (1, False): H1d_cheb,
    }

    refine = dec.common.wrap_refine(to_refine, from_refine)

    return cls(n=n,
               xmin=xmin,
               xmax=xmax,
               delta=Delta,
               N=N,
               cells=cells,
               dec=bunch(P=dec.common.projection(cells),
                         B=B,
                         D=D,
                         H=H,
                         W=dec.common.wedge(refine),
                         C=dec.common.contraction(refine)),
               refine=refine)
Example #8
0
def make(cls, n, xmin=0, xmax=pi):

    assert xmax > xmin

    N = n
    pnts = linspace(xmin, xmax, num=n)
    lenx = abs(xmax - xmin)
    delta = diff(pnts)

    verts = pnts
    verts_dual = verts[:-1] + 0.5 * delta

    edges = (pnts[:-1], pnts[1:])
    tmp = concatenate(([xmin], verts_dual, [xmax]))
    delta_dual = diff(tmp)
    edges_dual = (tmp[:-1], tmp[1:])

    N = {(0, True): n, (1, True): n - 1, (0, False): n - 1, (1, False): n}

    Delta = {True: delta, False: delta_dual}

    cells = {
        (0, True): verts,
        (1, True): edges,
        (0, False): verts_dual,
        (1, False): edges_dual,
    }

    B = {
        (0, True): lambda i: lambda x: sp.kappa0(n, i, x),
        (1, True): lambda i: lambda x: sp.kappa1_symm(n, i, x),
        (0, False): lambda i: lambda x: sp.kappad0(n, i, x),
        (1, False): lambda i: lambda x: sp.kappad1_symm(n, i, x),
    }

    D = {
        (0, True): lambda f: diff(f),
        (1, True): lambda f: 0,
        (0, False): lambda f: diff(concatenate(([0], f, [0]))),
        (1, False): lambda f: 0,
    }

    H = {
        (0, True): H0_regular,
        (1, True): H1_regular,
        (0, False): H0d_regular,
        (1, False): H1d_regular,
    }

    refine = dec.common.wrap_refine(to_refine, from_refine)

    return cls(n=n,
               xmin=xmin,
               xmax=xmax,
               delta=Delta,
               N=N,
               cells=cells,
               dec=bunch(P=dec.common.projection(cells),
                         B=B,
                         D=D,
                         H=H,
                         W=None,
                         C=None),
               refine=refine)