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
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()