예제 #1
0
            #
            # 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], \
예제 #2
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)