def symboundary(cells, xmin, xmax, ymin, ymax, symbols=sy.sympify('x, y, x0, y0, x1, y1')): BC = {} assign = assignfunctionto(BC) x, y, x0, y0, x1, y1 = symbols I = integration_2d_regular(x, y, x0, y0, x1, y1) @assign((1, False)) def _(σ): ι = I[0](σ) λ = sy.lambdify((x0, y0), ι, 'numpy') ((X0, X1), Y), (X, (Y0, Y1)) = cells[1, False] βx = zeros_like(X0) m = (X0 == xmin) βx[m] -= λ(X0[m], Y[m]) m = (X1 == xmax) βx[m] += λ(X1[m], Y[m]) βy = zeros_like(Y0) m = (Y0 == ymin) βy[m] -= λ(X[m], Y0[m]) m = (Y1 == ymax) βy[m] += λ(X[m], Y1[m]) return βx, βy @assign((2, False)) def _(σ): ι = I[1](σ) λ = (sy.lambdify((x0, x1, y), ι[0], 'numpy'), sy.lambdify((x, y0, y1), ι[1], 'numpy')) ((X0, Y0), (X1, Y1)) = cells[2, False] β = zeros_like(X0) m = (Y0 == ymin) β[m] += λ[0](X0[m], X1[m], Y0[m]) m = (X1 == xmax) β[m] += λ[1](X1[m], Y0[m], Y1[m]) m = (Y1 == ymax) β[m] += λ[0](X1[m], X0[m], Y1[m]) m = (X0 == xmin) β[m] += λ[1](X0[m], Y1[m], Y0[m]) return β return BC
def symboundary(cells, xmin, xmax, ymin, ymax, symbols=sy.sympify('x, y, x0, y0, x1, y1')): BC = {} assign = assignfunctionto(BC) x, y, x0, y0, x1, y1 = symbols I = integration_2d_regular(x, y, x0, y0, x1, y1) @assign((1, False)) def _(σ): ι = I[0](σ) λ = sy.lambdify((x0, y0), ι, 'numpy') ((X0, X1), Y), (X, (Y0, Y1)) = cells[1, False] βx = zeros_like(X0) m = (X0==xmin) βx[m] -= λ(X0[m], Y[m]) m = (X1==xmax) βx[m] += λ(X1[m], Y[m]) βy = zeros_like(Y0) m = (Y0==ymin) βy[m] -= λ(X[m], Y0[m]) m = (Y1==ymax) βy[m] += λ(X[m], Y1[m]) return βx, βy @assign((2, False)) def _(σ): ι = I[1](σ) λ = (sy.lambdify((x0, x1, y), ι[0], 'numpy'), sy.lambdify((x, y0, y1), ι[1], 'numpy')) ((X0, Y0), (X1, Y1)) = cells[2, False] β = zeros_like(X0) m = (Y0==ymin) β[m] += λ[0](X0[m], X1[m], Y0[m]) m = (X1==xmax) β[m] += λ[1](X1[m], Y0[m], Y1[m]) m = (Y1==ymax) β[m] += λ[0](X1[m], X0[m], Y1[m]) m = (X0==xmin) β[m] += λ[1](X0[m], Y1[m], Y0[m]) return β return BC
def symprojection(cells, symbols=sy.sympify('x, y, x0, y0, x1, y1')): P = {} assign = assignfunctionto(P) x, y, x0, y0, x1, y1 = symbols I = integration_2d_regular(x, y, x0, y0, x1, y1) def primaldual(t): @assign((0, t)) def _(σ): (X0, Y0) = cells[0, t] ι = I[0](σ) λ = sy.lambdify((x0, y0), ι, 'numpy') return λ(X0, Y0) + zeros_like(X0) @assign((1, t)) def _(σ): ((X0, X1), Y), (X, (Y0, Y1)) = cells[1, t] ι = I[1](σ) λ = (sy.lambdify((x0, x1, y), ι[0], 'numpy'), sy.lambdify((x, y0, y1), ι[1], 'numpy')) return (λ[0](X0, X1, Y) + zeros_like(X0), λ[1](X, Y0, Y1) + zeros_like(Y0)) @assign((2, t)) def _(σ): ((X0, Y0), (X1, Y1)) = cells[2, t] ι = I[2](σ) λ = sy.lambdify((x0, y0, x1, y1), ι, 'numpy') return λ(X0, Y0, X1, Y1) + zeros_like(X0) for t in (True, False): primaldual(t) return P