示例#1
0
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()
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()