Hermes2D: Example Layer (11/02/2009)

184 days ago by skregmi

from hermes2d import (Mesh, MeshView, H1Shapeset, PrecalcShapeset, H1Space, WeakForm, Solution, DummySolver, LinSystem, ScalarView, RefSystem, H1OrthoHP, set_verbose) from hermes2d.examples.c22 import set_bc, set_forms from enthought.mayavi import mlab set_verbose(False) def calc(p_init = 1, threshold=0.3, strategy=0, h_only=True, err_tol=1, \ interactive_plot=False, show_mesh=True, show_graph=False, nb=True): print "Version 11/02/2009" # creating a mesh mesh = Mesh() mesh.create([ [0, 0], [1, 0], [1, 1], [0, 1], ], [ [2, 3, 0, 1, 0], ], [ [0, 1, 1], [1, 2, 1], [2, 3, 1], [3, 0, 1], ], []) # initial mesh refinements (more types available) mesh.refine_all_elements() # defining shapeset shapeset = H1Shapeset() pss = PrecalcShapeset(shapeset) # defining finite element space space = H1Space(mesh, shapeset) set_bc(space) space.set_uniform_order(p_init) # choosing weak formulation (to be improved soon) wf = WeakForm(1) set_forms(wf) # basic and fine mesh solutions sln = Solution() rsln = Solution() solver = DummySolver() # visualization view = ScalarView("Solution") mview = MeshView("Mesh") iter = 0 graph = [] print "Calculating..." # adaptivity loop while 1: space.assign_dofs() sys = LinSystem(wf, solver) sys.set_spaces(space) sys.set_pss(pss) sys.assemble() sys.solve_system(sln) dofs = sys.get_matrix().shape[0] if interactive_plot: view.show(sln, lib="mayavi", notebook=nb, filename="a%02d.png" % iter) if show_mesh: mview.show(mesh, lib="mpl", method="orders", notebook=nb, filename="b%02d.png" % iter, space=space) rsys = RefSystem(sys) rsys.assemble() rsys.solve_system(rsln) hp = H1OrthoHP(space) err_est = hp.calc_error(sln, rsln)*100 print """<html><table border=1>""" print "iter=%02d, err_est=%5.2f%%, NDOF=%d" % (iter, err_est, dofs) print """<tr><td><img src="cell://""" + ("a%02d.png" % iter) + """"></td><td><img src="cell://""" + ("b%02d.png" % iter) +"""" width="540" height="405"></td></tr>""" print """</table></html>""" graph.append([dofs, err_est]) if err_est < err_tol: break hp.adapt(threshold, strategy, h_only) iter += 1 if not interactive_plot: view.show(sln, lib="mayavi", notebook=nb) if show_graph: from numpy import array graph = array(graph) import pylab pylab.clf() pylab.plot(graph[:, 0], graph[:, 1], "ko", label="error estimate") pylab.plot(graph[:, 0], graph[:, 1], "k-") pylab.title("Error Convergence for the Inner Layer Problem") pylab.legend() pylab.xlabel("Degrees of Freedom") pylab.ylabel("Error [%]") pylab.yscale("log") pylab.grid() pylab.savefig("graph.png") 
       
calc(p_init = 2, h_only = False, nb=True, show_graph=True, interactive_plot=True, err_tol=10) 
       
Version 11/02/2009
Calculating...

iter=00, err_est=85.97%, NDOF=9
iter=01, err_est=67.48%, NDOF=19
iter=02, err_est=50.58%, NDOF=41
iter=03, err_est=46.38%, NDOF=61
iter=04, err_est=31.89%, NDOF=96
iter=05, err_est=22.30%, NDOF=119
iter=06, err_est=15.85%, NDOF=176
iter=07, err_est=12.34%, NDOF=233
iter=08, err_est= 9.26%, NDOF=329