# # Assembler system # assembler = Assembler([problem], mesh) assembler.add_dirichlet(None, ue) assembler.assemble() # # Get solution # ua = assembler.solve() # # Compute the error # e_vec = ua[:, None] - ue.interpolant(dofhandler).data() efn = Nodal(data=e_vec, basis=u, dim=2) # # Record error # errors[resolution][eps][etype] = max(np.abs(e_vec)) headers = ('Resolution', 'Q1:1', 'Q1:1e-3', 'Q1:1e-6', 'Q2:1', 'Q2:1e-3', 'Q2:1e-6') print('{:<12} {:<10} {:<10} {:<10} {:<10} {:<10} {:<10}'.format(*headers)) for resolution in errors.keys(): er = errors[resolution] row = [resolution[0],er[1]['Q1'][0], er[1e-3]['Q1'][0], er[1e-6]['Q1'][0], \
from mesh import QuadMesh, Mesh1D from plot import Plot from fem import QuadFE, DofHandler from function import Explicit import numpy as np plot = Plot() mesh = Mesh1D() Q0 = QuadFE(1, 'DQ0') dh0 = DofHandler(mesh, Q0) n_levels = 10 for l in range(n_levels): mesh.cells.refine(new_label=l) dh0.distribute_dofs(subforest_flag=l) f = Explicit(lambda x: np.abs(x - 0.5), dim=1) fQ = f.interpolant(dh0, subforest_flag=3) plot.line(fQ, mesh) plot.mesh(mesh, dofhandler=dh0, subforest_flag=0) mesh = QuadMesh(resolution=(10, 10)) plot.mesh(mesh)