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)
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)
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
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
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)
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)
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)
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)