Exemplo n.º 1
0
print(f'v={v} c')

if __name__ == '__main__':
    from os.path import splitext
    from sys import argv
    from skfem.visuals.matplotlib import plot, savefig
    import matplotlib.pyplot as plt

    B_x = projection(A, global_basis, global_basis, 1)
    B_y = -projection(A, global_basis, global_basis, 0)

    E_x = -projection(U, global_basis, global_basis, 0)
    E_y = -projection(U, global_basis, global_basis, 1)

    fig = plt.figure(figsize=(11.52, 5.12))

    ax1 = plt.subplot(1, 2, 1)
    plot(global_basis, np.sqrt(B_x**2 + B_y**2), ax=ax1, colorbar=True)
    ax1.set_title('Magnetic flux density (Tesla)')
    ax1.set_aspect('equal')
    ax1.set_yticks([])

    ax2 = plt.subplot(1, 2, 2)
    plot(global_basis, np.sqrt(E_x**2 + E_y**2), ax=ax2, colorbar=True)
    ax2.set_title('Electric field strength (V/m)')
    ax2.set_aspect('equal')
    ax2.set_yticks([])

    savefig(splitext(argv[0])[0] + '_solution.png')
Exemplo n.º 2
0
exit_interface_temperature = {
    'skfem':
    temperature[np.intersect1d(dofs['fluid-outlet'].all(),
                               dofs['solid-outlet'].all())[0]],
    'exact':
    exact(length, -1.)
}

if __name__ == '__main__':
    from pathlib import Path
    from skfem.visuals.matplotlib import plot, savefig

    plot(mesh, temperature)
    savefig(Path(__file__).with_suffix('.png'),
            bbox_inches='tight',
            pad_inches=0)

    fig, ax = subplots()
    ax.set_title('transverse temperature profiles')

    y = {label: mesh.p[1, d.nodal['u']] for label, d in dofs.items()}
    ii = {label: np.argsort(yy) for label, yy in y.items()}

    y['exact'] = np.linspace(min(y['solid-inlet']), max(y['fluid-inlet']))
    for port, saturation, linestyle in [('inlet', '', '--'),
                                        ('outlet', 'dark', '-')]:
        for phase, hue, marker in [('fluid', 'green', 'x'),
                                   ('solid', 'red', '+')]:
            color = saturation + hue
            label = f'{phase}-{port}'
Exemplo n.º 3
0
psi = solve(*condense(A, vorticity, D=basis['psi'].find_dofs()['floor'].all()))

if __name__ == '__main__':

    from functools import partial
    from os.path import splitext
    from sys import argv

    from matplotlib.tri import Triangulation

    from skfem.visuals.matplotlib import plot, savefig

    name = splitext(argv[0])[0]

    plot(mesh, pressure)
    savefig(f'{name}-pressure.png', bbox_inches='tight', pad_inches=0)

    mesh.save(f'{name}-velocity.vtk',
              {'velocity': velocity[basis['u'].nodal_dofs].T})

    fig, ax = subplots()
    ax.plot(
        *mesh.p[:,
                mesh.facets[:,
                            np.concatenate(list(mesh.boundaries.values()))]],
        color='k')

    n_streamlines = 11
    contour = partial(ax.tricontour,
                      Triangulation(*mesh.p, mesh.t.T),
                      psi[basis['psi'].nodal_dofs.flatten()],
Exemplo n.º 4
0
    from matplotlib.tri import Triangulation

    from skfem.visuals.matplotlib import plot, draw, savefig

    name = splitext(argv[0])[0]

    mesh.save(f'{name}_velocity.vtk',
              {'velocity': velocity[basis['u'].nodal_dofs].T})

    print(basis['psi'].interpolator(psi)(np.zeros((2, 1)))[0],
          '(cf. exact 1/64)')

    print(
        basis['p'].interpolator(pressure)(np.array([[-0.5, 0.5], [0.5, 0.5]])),
        '(cf. exact -/+ 1/8)')

    ax = draw(mesh)
    plot(basis['p'], pressure, ax=ax)
    savefig(f'{name}_pressure.png')

    ax = draw(mesh)
    velocity1 = velocity[basis['u'].nodal_dofs]
    ax.quiver(*mesh.p, *velocity1, mesh.p[0, :])  # colour by buoyancy
    savefig(f'{name}_velocity.png')

    ax = draw(mesh)
    ax.tricontour(Triangulation(*mesh.p, mesh.t.T),
                  psi[basis['psi'].nodal_dofs.flatten()])
    savefig(f'{name}_stream-function.png')
Exemplo n.º 5
0
@BilinearForm
def hdg(u, ut, v, vt, w):
    from skfem.helpers import grad, dot
    # outwards normal
    n = w.n * (-1.)**w.idx[0]
    return dot(n, grad(u)) * (vt - v) + dot(n, grad(v)) * (ut - u)\
        + 1e1 / w.h * (ut - u) * (vt - v)


@LinearForm
def load(v, vt, w):
    return 1. * v


A = asm(laplace, ibasis) + asm(hdg, tbasis)
f = asm(load, ibasis)

y = solve(*condense(A, f, D=ibasis.get_dofs()))

(u1, ibasis1), (u2, ibasis2) = ibasis.split(y)

if __name__ == '__main__':
    from os.path import splitext
    from sys import argv
    from skfem.visuals.matplotlib import plot, savefig
    plot(ibasis1, u1, Nrefs=3, colorbar=True, shading='gouraud')
    savefig(splitext(argv[0])[0] + '_p1dg.png')
    plot(ibasis2, u2, Nrefs=4, colorbar=True, shading='gouraud')
    savefig(splitext(argv[0])[0] + '_skeleton.png')