예제 #1
0
def triangulate(
    corner_points,
    max_refloops=20,
    theta=0.8,
    smooth_steps=50,
    quality=0.9,
    verbose=False,
    **params,
):
    from .criterion import avg_quality
    from .initial import cdt
    from .mark import adaptive_theta
    from .refine import rgb
    from .smooth import cpt
    from .solve import laplace

    m = process(
        initial=cdt,
        solve=laplace,
        mark=adaptive_theta,
        refine=rgb,
        smooth=cpt,
        criterion=avg_quality,
        corner_points=corner_points,
        max_refloops=max_refloops,
        theta=theta,
        smooth_steps=smooth_steps,
        quality=quality,
        verbose=verbose,
        **params,
    )
    m.draw = types.MethodType(lambda self, **kwargs: draw(self, **kwargs), m)
    m.show = types.MethodType(lambda self, **kwargs: show(self, **kwargs), m)

    return m
예제 #2
0

if __name__ == "__main__":
    from skfem.visuals.matplotlib import draw, plot, show
    draw(m)

for itr in reversed(range(9)):

    basis = Basis(m, e)

    K = asm(laplace, basis)
    M = asm(mass, basis)
    #f = asm(load, basis)

    I = m.interior_nodes()
    Lh, eigen_uh = solve(*condense(K, M, I=I),
                         solver=solver_eigen_scipy_sym(sigma=20, k=1))
    eigv = Lh[0]
    print(eigv)
    eigen_uh = eigen_uh.flatten()

    if itr > 0:
        m = m.refined(adaptive_theta(eval_estimator(m, eigen_uh, eigv)))
        draw(m)
        show()

if __name__ == "__main__":
    draw(m)
    plot(m, eigen_uh, shading='gouraud')
    show()