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')
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}'
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()],
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')
@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')