def test_basic(): e = ModuleBasic() e.set_mesh_str("\na = 1.0 # size of the mesh\nb = sqrt(2)/2\n\nvertices =\n{\n { 0, -a }, # vertex 0\n { a, -a }, # vertex 1\n { -a, 0 }, # vertex 2\n { 0, 0 }, # vertex 3\n { a, 0 }, # vertex 4\n { -a, a }, # vertex 5\n { 0, a }, # vertex 6\n { a*b, a*b } # vertex 7\n}\n\nelements =\n{\n { 0, 1, 4, 3, 0 }, # quad 0\n { 3, 4, 7, 0 }, # tri 1\n { 3, 7, 6, 0 }, # tri 2\n { 2, 3, 6, 5, 0 } # quad 3\n}\n\nboundaries =\n{\n { 0, 1, 1 },\n { 1, 4, 2 },\n { 3, 0, 4 },\n { 4, 7, 2 },\n { 7, 6, 2 },\n { 2, 3, 4 },\n { 6, 5, 2 },\n { 5, 2, 3 }\n}\n\ncurves =\n{\n { 4, 7, 45 }, # +45 degree circular arcs\n { 7, 6, 45 }\n}\n"); e.set_initial_mesh_refinement(2) e.set_initial_poly_degree(4) e.set_matrix_solver("umfpack") e.set_material_markers([0]) e.set_c1_array([1]) e.set_c2_array([0]) e.set_c3_array([0]) e.set_c4_array([0]) e.set_c5_array([1]) e.set_dirichlet_markers([4]) e.set_dirichlet_values([4], [0]) e.set_neumann_markers([1, 3]) e.set_neumann_values([0, 0]) e.set_newton_markers([2]) e.set_newton_values([1, 1]) success = e.calculate() sln = e.get_solution() assert success is True l = Linearizer() l.process_solution(sln) v = l.get_vertices() t = l.get_triangles()
def test_basicadapt(): e = ModuleBasicAdapt() # Set problem-dependent data. mesh_ok = e.set_mesh_str( "\na = 1.0 # size of the mesh\nb = sqrt(2)/2\n\nvertices =\n{\n { 0, -a }, # vertex 0\n { a, -a }, # vertex 1\n { -a, 0 }, # vertex 2\n { 0, 0 }, # vertex 3\n { a, 0 }, # vertex 4\n { -a, a }, # vertex 5\n { 0, a }, # vertex 6\n { a*b, a*b } # vertex 7\n}\n\nelements =\n{\n { 0, 1, 4, 3, 0 }, # quad 0\n { 3, 4, 7, 0 }, # tri 1\n { 3, 7, 6, 0 }, # tri 2\n { 2, 3, 6, 5, 0 } # quad 3\n}\n\nboundaries =\n{\n { 0, 1, 1 },\n { 1, 4, 2 },\n { 3, 0, 4 },\n { 4, 7, 2 },\n { 7, 6, 2 },\n { 2, 3, 4 },\n { 6, 5, 2 },\n { 5, 2, 3 }\n}\n\ncurves =\n{\n { 4, 7, 45 }, # +45 degree circular arcs\n { 7, 6, 45 }\n}\n" ) assert mesh_ok is True e.set_initial_mesh_refinement(2) e.set_initial_poly_degree(4) e.set_matrix_solver("umfpack") e.set_material_markers([0]) e.set_c1_array([1]) e.set_c2_array([0]) e.set_c3_array([0]) e.set_c4_array([0]) e.set_c5_array([1]) e.set_dirichlet_markers([4]) e.set_dirichlet_values([4], [0]) e.set_neumann_markers([1, 3]) e.set_neumann_values([0, 0]) e.set_newton_markers([2]) e.set_newton_values([1, 1]) # Set adaptivity data. e.set_adaptivity_threshold(0.3) e.set_adaptivity_strategy(0) e.set_cand_list("hp_aniso") e.set_adaptivity_error_weights(2.0, 1.0, 1.4142136) e.set_mesh_regularity(-1) e.set_err_stop(0.1) e.set_conv_exp(1.0) e.set_ndof_stop(60000) e.set_max_num_adapt_steps(5) # Prepare for adaptivity (solve on reference mesh). success, err_est_rel = e.adapt() assert success is True sln = e.get_ref_solution() print "Final relative error:", err_est_rel print "Final ndof_coarse, ndof_fine:", (e.get_ndof_coarse(), e.get_ndof_fine()) print "Assembly time (last step):", e.get_assembly_time() print "Assembly time (total):", e.get_assembly_time_total() print "Solver time (last step):", e.get_solver_time() print "Solver time (total):", e.get_solver_time_total() print "Adaptivity time (last step):", e.get_adaptivity_time_last() print "Adaptivity time (total):", e.get_adaptivity_time_total() l = Linearizer() l.process_solution(sln) v = l.get_vertices() t = l.get_triangles()
def test_basic(): e = Electrostatics() e.set_mesh_str("\na = 1.0 # size of the mesh\nb = sqrt(2)/2\n\nvertices =\n{\n { 0, -a }, # vertex 0\n { a, -a }, # vertex 1\n { -a, 0 }, # vertex 2\n { 0, 0 }, # vertex 3\n { a, 0 }, # vertex 4\n { -a, a }, # vertex 5\n { 0, a }, # vertex 6\n { a*b, a*b } # vertex 7\n}\n\nelements =\n{\n { 0, 1, 4, 3, 0 }, # quad 0\n { 3, 4, 7, 0 }, # tri 1\n { 3, 7, 6, 0 }, # tri 2\n { 2, 3, 6, 5, 0 } # quad 3\n}\n\nboundaries =\n{\n { 0, 1, 1 },\n { 1, 4, 2 },\n { 3, 0, 4 },\n { 4, 7, 2 },\n { 7, 6, 2 },\n { 2, 3, 4 },\n { 6, 5, 2 },\n { 5, 2, 3 }\n}\n\ncurves =\n{\n { 4, 7, 45 }, # +45 degree circular arcs\n { 7, 6, 45 }\n}\n"); e.set_initial_mesh_refinement(2) e.set_initial_poly_degree(4) e.set_material_markers([0]) e.set_permittivity_array([1]) e.set_charge_density_array([1]) e.set_boundary_markers_value([4]) e.set_boundary_values([0]) e.set_boundary_markers_derivative([1, 2, 3]) e.set_boundary_derivatives([0, 0, 0]) r, sln = e.calculate() assert r is True l = Linearizer() l.process_solution(sln) v = l.get_vertices() t = l.get_triangles()