def test_affine_shape_parametrization_from_vertices_mapping_hole():
    filename = "vertices_mapping_hole"
    assert VerticesMappingIO.exists_file(data_dir, filename)
    vertices_mappings = VerticesMappingIO.load_file(data_dir, filename)
    shape_parametrization_expression = [
        affine_shape_parametrization_from_vertices_mapping(2, vertices_mapping)
        for vertices_mapping in vertices_mappings]
    # Auxiliary symbolic quantities
    x = MatrixSymbol("x", 2, 1)
    mu = MatrixSymbol("mu", 2, 1)
    # Start checks
    assert len(shape_parametrization_expression) == 8
    # Check subdomain 1
    assert len(shape_parametrization_expression[0]) == 2
    assert symbolic_equal(
        shape_parametrization_expression[0][X], "2 - 2 * mu[0] + mu[0] * x[0] + (2 - 2 * mu[0]) * x[1]", x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[0][Y], "2 - 2 * mu[1] + (2 - mu[1]) * x[1]", x, mu)
    # Check subdomain 2
    assert len(shape_parametrization_expression[1]) == 2
    assert symbolic_equal(
        shape_parametrization_expression[1][X], "2 * mu[0]- 2 + x[0] + (mu[0] - 1) * x[1]", x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[1][Y], "2 - 2 * mu[1] + (2 - mu[1]) * x[1]", x, mu)
    # Check subdomain 3
    assert len(shape_parametrization_expression[2]) == 2
    assert symbolic_equal(
        shape_parametrization_expression[2][X], "2 - 2 * mu[0] + (2 - mu[0]) * x[0]", x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[2][Y], "2 - 2 * mu[1] + (2- 2*mu[1]) * x[0] + mu[1] * x[1]", x, mu)
    # Check subdomain 4
    assert len(shape_parametrization_expression[3]) == 2
    assert symbolic_equal(
        shape_parametrization_expression[3][X], "2 - 2 * mu[0] + (2 - mu[0]) * x[0]", x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[3][Y], "2 * mu[1] - 2 + (mu[1] - 1) * x[0] + x[1]", x, mu)
    # Check subdomain 5
    assert len(shape_parametrization_expression[4]) == 2
    assert symbolic_equal(
        shape_parametrization_expression[4][X], "2 * mu[0] - 2 + (2 - mu[0]) * x[0]", x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[4][Y], "2 - 2 * mu[1] + (2 * mu[1]- 2) * x[0] + mu[1] * x[1]", x, mu)
    # Check subdomain 6
    assert len(shape_parametrization_expression[5]) == 2
    assert symbolic_equal(
        shape_parametrization_expression[5][X], "2 * mu[0] - 2 + (2 - mu[0]) * x[0]", x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[5][Y], "2 * mu[1] - 2 + (1 - mu[1]) * x[0] + x[1]", x, mu)
    # Check subdomain 7
    assert len(shape_parametrization_expression[6]) == 2
    assert symbolic_equal(
        shape_parametrization_expression[6][X], "2 - 2 * mu[0] + mu[0] * x[0] + (2 * mu[0] - 2) * x[1]", x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[6][Y], "2 * mu[1] - 2 + (2 - mu[1]) * x[1]", x, mu)
    # Check subdomain 8
    assert len(shape_parametrization_expression[7]) == 2
    assert symbolic_equal(
        shape_parametrization_expression[7][X], "2 * mu[0] - 2 + x[0] + (1 - mu[0]) * x[1]", x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[7][Y], "2 * mu[1] - 2 + (2 - mu[1]) * x[1]", x, mu)
Exemplo n.º 2
0
def test_affine_shape_parametrization_from_vertices_mapping_navier_stokes():
    vertices_mappings = [
        {
            ("0.0", "5.0"): ("0.0", "5.0"),
            ("0.0", "2.0"): ("0.0", "2.0"),
            ("22.0", "2.0"): ("22.0", "2.0")
        },  # subdomain 1 bottom
        {
            ("22.0", "2.0"): ("22.0", "2.0"),
            ("22.0", "5.0"): ("22.0", "5.0"),
            ("0.0", "5.0"): ("0.0", "5.0")
        },  # subdomain 1 top
        {
            ("4.0", "2.0"): ("4.0", "2.0"),
            ("4.0", "0.0"): ("4.0", "2.0 - mu[1]"),
            ("22.0", "0.0"): ("22.0", "2.0 - mu[1]")
        },  # subdomain 2 bottom
        {
            ("22.0", "0.0"): ("22.0", "2.0 - mu[1]"),
            ("22.0", "2.0"): ("22.0", "2.0"),
            ("4.0", "2.0"): ("4.0", "2.0")
        }  # subdomain 2 top
    ]
    shape_parametrization_expression = [
        affine_shape_parametrization_from_vertices_mapping(
            2, vertices_mapping) for vertices_mapping in vertices_mappings
    ]
    # Auxiliary symbolic quantities
    x = MatrixSymbol("x", 2, 1)
    mu = MatrixSymbol("mu", 2, 1)
    # Start checks
    assert len(shape_parametrization_expression) is 4
    # Check subdomain 1 top
    assert len(shape_parametrization_expression[0]) is 2
    assert symbolic_equal(shape_parametrization_expression[0][X], "x[0]", x,
                          mu)
    assert symbolic_equal(shape_parametrization_expression[0][Y], "x[1]", x,
                          mu)
    # Check subdomain 1 bottom
    assert len(shape_parametrization_expression[1]) is 2
    assert symbolic_equal(shape_parametrization_expression[1][X], "x[0]", x,
                          mu)
    assert symbolic_equal(shape_parametrization_expression[1][Y], "x[1]", x,
                          mu)
    # Check subdomain 2 top
    assert len(shape_parametrization_expression[2]) is 2
    assert symbolic_equal(shape_parametrization_expression[2][X], "x[0]", x,
                          mu)
    assert symbolic_equal(shape_parametrization_expression[2][Y],
                          "0.5*mu[1]*x[1] - 1.0*mu[1] + 2.0", x, mu)
    # Check subdomain 2 bottom
    assert len(shape_parametrization_expression[3]) is 2
    assert symbolic_equal(shape_parametrization_expression[3][X], "x[0]", x,
                          mu)
    assert symbolic_equal(shape_parametrization_expression[3][Y],
                          "0.5*mu[1]*x[1] - 1.0*mu[1]+ 2.0", x, mu)
Exemplo n.º 3
0
def test_affine_shape_parametrization_from_vertices_mapping_graetz():
    vertices_mappings = [
        {
            ("0", "0"): ("0", "0"),
            ("0", "1"): ("0", "1"),
            ("1", "1"): ("1", "1")
        },  # subdomain 1 top
        {
            ("0", "0"): ("0", "0"),
            ("1", "0"): ("1", "0"),
            ("1", "1"): ("1", "1")
        },  # subdomain 1 bottom
        {
            ("1", "0"): ("1", "0"),
            ("1", "1"): ("1", "1"),
            ("2", "1"): ("1 + mu[0]", "1")
        },  # subdomain 2 top
        {
            ("1", "0"): ("1", "0"),
            ("2", "0"): ("1 + mu[0]", "0"),
            ("2", "1"): ("1 + mu[0]", "1")
        }  # subdomain 2 bottom
    ]
    shape_parametrization_expression = [
        affine_shape_parametrization_from_vertices_mapping(
            2, vertices_mapping) for vertices_mapping in vertices_mappings
    ]
    # Auxiliary symbolic quantities
    x = MatrixSymbol("x", 2, 1)
    mu = MatrixSymbol("mu", 1, 1)
    # Start checks
    assert len(shape_parametrization_expression) is 4
    # Check subdomain 1 top
    assert len(shape_parametrization_expression[0]) is 2
    assert symbolic_equal(shape_parametrization_expression[0][X], "x[0]", x,
                          mu)
    assert symbolic_equal(shape_parametrization_expression[0][Y], "x[1]", x,
                          mu)
    # Check subdomain 1 bottom
    assert len(shape_parametrization_expression[1]) is 2
    assert symbolic_equal(shape_parametrization_expression[1][X], "x[0]", x,
                          mu)
    assert symbolic_equal(shape_parametrization_expression[1][Y], "x[1]", x,
                          mu)
    # Check subdomain 2 top
    assert len(shape_parametrization_expression[2]) is 2
    assert symbolic_equal(shape_parametrization_expression[2][X],
                          "mu[0]*(x[0] - 1) + 1", x, mu)
    assert symbolic_equal(shape_parametrization_expression[2][Y], "x[1]", x,
                          mu)
    # Check subdomain 2 bottom
    assert len(shape_parametrization_expression[3]) is 2
    assert symbolic_equal(shape_parametrization_expression[3][X],
                          "mu[0]*(x[0] - 1) + 1", x, mu)
    assert symbolic_equal(shape_parametrization_expression[3][Y], "x[1]", x,
                          mu)
Exemplo n.º 4
0
def test_affine_shape_parametrization_from_vertices_mapping_stokes_optimal_dirichlet_boundary_control(
):
    vertices_mappings = [
        "identity",  # subdomain 1
        {
            ("0.9", "0.0"): ("0.9", "0.0"),
            ("1.0", "0.0"): ("0.9+mu[0]", "0.0"),
            ("0.9", "0.4"): ("0.9", "0.4")
        },  # subdomain 2
        {
            ("1.0", "0.0"): ("0.9+mu[0]", "0.0"),
            ("1.0", "0.4"): ("0.9+mu[0]", "0.4"),
            ("0.9", "0.4"): ("0.9", "0.4")
        },  # subdomain 3
        {
            ("0.9", "0.6"): ("0.9", "0.6"),
            ("1.0", "0.6"): ("0.9+mu[0]", "0.6"),
            ("0.9", "1.0"): ("0.9", "1.0")
        },  # subdomain 4
        {
            ("1.0", "0.6"): ("0.9+mu[0]", "0.6"),
            ("1.0", "1.0"): ("0.9+mu[0]", "1.0"),
            ("0.9", "1.0"): ("0.9", "1.0")
        },  # subdomain 5
        {
            ("1.0", "0.0"): ("0.9+mu[0]", "0.0"),
            ("1.8", "0.2"): ("1.8", "0.2"),
            ("1.0", "0.4"): ("0.9+mu[0]", "0.4")
        },  # subdomain 6
        {
            ("1.0", "0.0"): ("0.9+mu[0]", "0.0"),
            ("2.0", "0.0"): ("2.0", "0.0"),
            ("1.8", "0.2"): ("1.8", "0.2")
        },  # subdomain 7
        {
            ("1.0", "0.6"): ("0.9+mu[0]", "0.6"),
            ("1.8", "0.8"): ("1.8", "0.8"),
            ("1.0", "1.0"): ("0.9+mu[0]", "1.0")
        },  # subdomain 8
        {
            ("1.0", "1.0"): ("0.9+mu[0]", "1.0"),
            ("1.8", "0.8"): ("1.8", "0.8"),
            ("2.0", "1.0"): ("2.0", "1.0")
        },  # subdomain 9
        {
            ("1.8", "0.8"): ("1.8", "0.8"),
            ("2.0", "0.0"): ("2.0", "0.0"),
            ("2.0", "1.0"): ("2.0", "1.0")
        },  # subdomain 10
        {
            ("1.8", "0.8"): ("1.8", "0.8"),
            ("1.8", "0.2"): ("1.8", "0.2"),
            ("2.0", "0.0"): ("2.0", "0.0")
        },  # subdomain 11
        {
            ("1.0", "0.4"): ("0.9+mu[0]", "0.4"),
            ("1.8", "0.2"): ("1.8", "0.2"),
            ("1.0", "0.6"): ("0.9+mu[0]", "0.6")
        },  # subdomain 12
        {
            ("1.0", "0.6"): ("0.9+mu[0]", "0.6"),
            ("1.8", "0.2"): ("1.8", "0.2"),
            ("1.8", "0.8"): ("1.8", "0.8")
        }  # subdomain 13
    ]
    shape_parametrization_expression = [
        affine_shape_parametrization_from_vertices_mapping(
            2, vertices_mapping) for vertices_mapping in vertices_mappings
    ]
    # Auxiliary symbolic quantities
    x = MatrixSymbol("x", 2, 1)
    mu = MatrixSymbol("mu", 1, 1)
    # Start checks
    assert len(shape_parametrization_expression) is 13
    # Check subdomain 1
    assert len(shape_parametrization_expression[0]) is 2
    assert symbolic_equal(shape_parametrization_expression[0][X], "x[0]", x,
                          mu)
    assert symbolic_equal(shape_parametrization_expression[0][Y], "x[1]", x,
                          mu)
    # Check subdomain 2
    assert len(shape_parametrization_expression[1]) is 2
    assert symbolic_equal(shape_parametrization_expression[1][X],
                          "0.9 - 9.0*mu[0] + 10.0*mu[0]*x[0] ", x, mu)
    assert symbolic_equal(shape_parametrization_expression[1][Y], "x[1]", x,
                          mu)
    # Check subdomain 3
    assert len(shape_parametrization_expression[2]) is 2
    assert symbolic_equal(shape_parametrization_expression[2][X],
                          "0.9 - 9.0*mu[0] + 10.0*mu[0]*x[0] ", x, mu)
    assert symbolic_equal(shape_parametrization_expression[2][Y], "x[1]", x,
                          mu)
    # Check subdomain 4
    assert len(shape_parametrization_expression[3]) is 2
    assert symbolic_equal(shape_parametrization_expression[3][X],
                          "0.9 - 9.0*mu[0] + 10.0*mu[0]*x[0] ", x, mu)
    assert symbolic_equal(shape_parametrization_expression[3][Y], "x[1]", x,
                          mu)
    # Check subdomain 5
    assert len(shape_parametrization_expression[4]) is 2
    assert symbolic_equal(shape_parametrization_expression[4][X],
                          "0.9 - 9.0*mu[0] + 10.0*mu[0]*x[0] ", x, mu)
    assert symbolic_equal(shape_parametrization_expression[4][Y], "x[1]", x,
                          mu)
    # Check subdomain 6
    assert len(shape_parametrization_expression[5]) is 2
    assert symbolic_equal(shape_parametrization_expression[5][X],
                          "2.25*mu[0] + x[0]*(-1.25*mu[0] + 1.125) - 0.225 ",
                          x, mu)
    assert symbolic_equal(shape_parametrization_expression[5][Y], "x[1]", x,
                          mu)
    # Check subdomain 7
    assert len(shape_parametrization_expression[6]) is 2
    assert symbolic_equal(
        shape_parametrization_expression[6][X],
        "2.0*mu[0] + x[0]*(-mu[0] + 1.1) + x[1]*(-mu[0] + 0.1) - 0.2 ", x, mu)
    assert symbolic_equal(shape_parametrization_expression[6][Y], "x[1]", x,
                          mu)
    # Check subdomain 8
    assert len(shape_parametrization_expression[7]) is 2
    assert symbolic_equal(shape_parametrization_expression[7][X],
                          "2.25*mu[0] + x[0]*(-1.25*mu[0] + 1.125) - 0.225 ",
                          x, mu)
    assert symbolic_equal(shape_parametrization_expression[7][Y], "x[1]", x,
                          mu)
    # Check subdomain 9
    assert len(shape_parametrization_expression[8]) is 2
    assert symbolic_equal(
        shape_parametrization_expression[8][X],
        "mu[0] + x[0]*(-mu[0] + 1.1) + x[1]*(mu[0] - 0.1) - 0.1", x, mu)
    assert symbolic_equal(shape_parametrization_expression[8][Y], "x[1]", x,
                          mu)
    # Check subdomain 10
    assert len(shape_parametrization_expression[9]) is 2
    assert symbolic_equal(shape_parametrization_expression[9][X], "x[0]", x,
                          mu)
    assert symbolic_equal(shape_parametrization_expression[9][Y], "x[1]", x,
                          mu)
    # Check subdomain 11
    assert len(shape_parametrization_expression[10]) is 2
    assert symbolic_equal(shape_parametrization_expression[10][X], "x[0]", x,
                          mu)
    assert symbolic_equal(shape_parametrization_expression[10][Y], "x[1]", x,
                          mu)
    # Check subdomain 12
    assert len(shape_parametrization_expression[11]) is 2
    assert symbolic_equal(shape_parametrization_expression[11][X],
                          "x[0]*(-1.25*mu[0] + 1.125) + 2.25*mu[0] - 0.225", x,
                          mu)
    assert symbolic_equal(shape_parametrization_expression[11][Y], "x[1]", x,
                          mu)
    # Check subdomain 13
    assert len(shape_parametrization_expression[12]) is 2
    assert symbolic_equal(shape_parametrization_expression[12][X],
                          "2.25*mu[0] + x[0]*(-1.25*mu[0] + 1.125) - 0.225", x,
                          mu)
    assert symbolic_equal(shape_parametrization_expression[12][Y], "x[1]", x,
                          mu)
Exemplo n.º 5
0
def test_affine_shape_parametrization_from_vertices_mapping_hole_rotation():
    vertices_mappings = [
        {
            ("-1", "-1"): ("-sqrt(2.0)*cos(mu[0]) - 0.0*sin(mu[0])",
                           "-sqrt(2.0)*sin(mu[0]) + 0.0*cos(mu[0])"),
            ("-2", "-2"): ("-2", "-2"),
            ("1", "-1"): ("0.0*cos(mu[0])-(-sqrt(2.0))*sin(mu[0])",
                          "0.0*sin(mu[0])+(-sqrt(2.0))*cos(mu[0])")
        },  # subdomain 1
        {
            ("-2", "-2"): ("-2", "-2"),
            ("2", "-2"): ("2", "-2"),
            ("1", "-1"): ("0.0*cos(mu[0])-(-sqrt(2.0))*sin(mu[0])",
                          "0.0*sin(mu[0])+(-sqrt(2.0))*cos(mu[0])")
        },  # subdomain 2
        {
            ("-1", "-1"): ("-sqrt(2.0)*cos(mu[0]) - 0.0*sin(mu[0])",
                           "-sqrt(2.0)*sin(mu[0]) + 0.0*cos(mu[0])"),
            ("-1", "1"): ("0.0*cos(mu[0])-sqrt(2.0)*sin(mu[0])",
                          "0.0*sin(mu[0])+sqrt(2.0)*cos(mu[0])"),
            ("-2", "-2"): ("-2", "-2")
        },  # subdomain 3
        {
            ("-1", "1"): ("0.0*cos(mu[0])-sqrt(2.0)*sin(mu[0])",
                          "0.0*sin(mu[0])+sqrt(2.0)*cos(mu[0])"),
            ("-2", "2"): ("-2", "2"),
            ("-2", "-2"): ("-2", "-2")
        },  # subdomain 4
        {
            ("1", "-1"): ("0.0*cos(mu[0])-(-sqrt(2.0))*sin(mu[0])",
                          "0.0*sin(mu[0])+(-sqrt(2.0))*cos(mu[0])"),
            ("2", "-2"): ("2", "-2"),
            ("1", "1"): ("sqrt(2.0)*cos(mu[0]) - 0.0*sin(mu[0])",
                         "sqrt(2.0)*sin(mu[0]) + 0.0*cos(mu[0])")
        },  # subdomain 5
        {
            ("2", "2"): ("2", "2"),
            ("1", "1"): ("sqrt(2.0)*cos(mu[0]) - 0.0*sin(mu[0])",
                         "sqrt(2.0)*sin(mu[0]) + 0.0*cos(mu[0])"),
            ("2", "-2"): ("2", "-2")
        },  # subdomain 6
        {
            ("-2", "2"): ("-2", "2"),
            ("-1", "1"): ("0.0*cos(mu[0])-sqrt(2.0)*sin(mu[0])",
                          "0.0*sin(mu[0])+sqrt(2.0)*cos(mu[0])"),
            ("1", "1"): ("sqrt(2.0)*cos(mu[0]) - 0.0*sin(mu[0])",
                         "sqrt(2.0)*sin(mu[0]) + 0.0*cos(mu[0])")
        },  # subdomain 7
        {
            ("-2", "2"): ("-2", "2"),
            ("1", "1"): ("sqrt(2.0)*cos(mu[0]) - 0.0*sin(mu[0])",
                         "sqrt(2.0)*sin(mu[0]) + 0.0*cos(mu[0])"),
            ("2", "2"): ("2", "2")
        }  # subdomain 8
    ]
    shape_parametrization_expression = [
        affine_shape_parametrization_from_vertices_mapping(
            2, vertices_mapping) for vertices_mapping in vertices_mappings
    ]
    # Auxiliary symbolic quantities
    x = MatrixSymbol("x", 2, 1)
    mu = MatrixSymbol("mu", 1, 1)
    # Start checks
    assert len(shape_parametrization_expression) is 8
    # Check subdomain 1
    assert len(shape_parametrization_expression[0]) is 2
    assert symbolic_equal(
        shape_parametrization_expression[0][X],
        "-2*sqrt(2.0)*cos(mu[0]) + x[0]*(sqrt(2.0)*sin(mu[0])/2 + sqrt(2.0)*cos(mu[0])/2) + x[1]*(-sqrt(2.0)*sin(mu[0])/2 - 3*sqrt(2.0)*cos(mu[0])/2 + 2) + 2",
        x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[0][Y],
        "-2*sqrt(2.0)*sin(mu[0]) + x[0]*(sqrt(2.0)*sin(mu[0])/2 - sqrt(2.0)*cos(mu[0])/2) + x[1]*(-3*sqrt(2.0)*sin(mu[0])/2 + sqrt(2.0)*cos(mu[0])/2 + 2) + 2",
        x, mu)
    # Check subdomain 2
    assert len(shape_parametrization_expression[1]) is 2
    assert symbolic_equal(
        shape_parametrization_expression[1][X],
        "2*sqrt(2.0)*sin(mu[0]) + x[0] + x[1]*(sqrt(2.0)*sin(mu[0]) - 1) - 2",
        x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[1][Y],
        "-2*sqrt(2.0)*cos(mu[0]) + x[1]*(-sqrt(2.0)*cos(mu[0]) + 2) + 2", x,
        mu)
    # Check subdomain 3
    assert len(shape_parametrization_expression[2]) is 2
    assert symbolic_equal(
        shape_parametrization_expression[2][X],
        "-2*sqrt(2.0)*cos(mu[0]) + x[0]*(sqrt(2.0)*sin(mu[0])/2 - 3*sqrt(2.0)*cos(mu[0])/2 + 2) + x[1]*(-sqrt(2.0)*sin(mu[0])/2 + sqrt(2.0)*cos(mu[0])/2) + 2",
        x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[2][Y],
        "-2*sqrt(2.0)*sin(mu[0]) + x[0]*(-3*sqrt(2.0)*sin(mu[0])/2 - sqrt(2.0)*cos(mu[0])/2 + 2) + x[1]*(sqrt(2.0)*sin(mu[0])/2 + sqrt(2.0)*cos(mu[0])/2) + 2",
        x, mu)
    # Check subdomain 4
    assert len(shape_parametrization_expression[3]) is 2
    assert symbolic_equal(
        shape_parametrization_expression[3][X],
        "-2*sqrt(2.0)*sin(mu[0]) + x[0]*(-sqrt(2.0)*sin(mu[0]) + 2) + 2", x,
        mu)
    assert symbolic_equal(
        shape_parametrization_expression[3][Y],
        "2*sqrt(2.0)*cos(mu[0]) + x[0]*(sqrt(2.0)*cos(mu[0]) - 1) + x[1] - 2",
        x, mu)
    # Check subdomain 5
    assert len(shape_parametrization_expression[4]) is 2
    assert symbolic_equal(
        shape_parametrization_expression[4][X],
        "2*sqrt(2.0)*sin(mu[0]) + x[0]*(-3*sqrt(2.0)*sin(mu[0])/2 + sqrt(2.0)*cos(mu[0])/2 + 2) + x[1]*(-sqrt(2.0)*sin(mu[0])/2 + sqrt(2.0)*cos(mu[0])/2) - 2",
        x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[4][Y],
        "-2*sqrt(2.0)*cos(mu[0]) + x[0]*(sqrt(2.0)*sin(mu[0])/2 + 3*sqrt(2.0)*cos(mu[0])/2 - 2) + x[1]*(sqrt(2.0)*sin(mu[0])/2 + sqrt(2.0)*cos(mu[0])/2) + 2",
        x, mu)
    # Check subdomain 6
    assert len(shape_parametrization_expression[5]) is 2
    assert symbolic_equal(
        shape_parametrization_expression[5][X],
        "2*sqrt(2.0)*cos(mu[0]) + x[0]*(-sqrt(2.0)*cos(mu[0]) + 2) - 2", x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[5][Y],
        "2*sqrt(2.0)*sin(mu[0]) + x[0]*(-sqrt(2.0)*sin(mu[0]) + 1) + x[1] - 2",
        x, mu)
    # Check subdomain 7
    assert len(shape_parametrization_expression[6]) is 2
    assert symbolic_equal(
        shape_parametrization_expression[6][X],
        "-2*sqrt(2.0)*sin(mu[0]) + x[0]*(sqrt(2.0)*sin(mu[0])/2 + sqrt(2.0)*cos(mu[0])/2) + x[1]*(3*sqrt(2.0)*sin(mu[0])/2 + sqrt(2.0)*cos(mu[0])/2 - 2) + 2",
        x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[6][Y],
        "2*sqrt(2.0)*cos(mu[0]) + x[0]*(sqrt(2.0)*sin(mu[0])/2 - sqrt(2.0)*cos(mu[0])/2) + x[1]*(sqrt(2.0)*sin(mu[0])/2 - 3*sqrt(2.0)*cos(mu[0])/2 + 2) - 2",
        x, mu)
    # Check subdomain 8
    assert len(shape_parametrization_expression[7]) is 2
    assert symbolic_equal(
        shape_parametrization_expression[7][X],
        "2*sqrt(2.0)*cos(mu[0]) + x[0] + x[1]*(-sqrt(2.0)*cos(mu[0]) + 1) - 2",
        x, mu)
    assert symbolic_equal(
        shape_parametrization_expression[7][Y],
        "2*sqrt(2.0)*sin(mu[0]) + x[1]*(-sqrt(2.0)*sin(mu[0]) + 2) - 2", x, mu)
Exemplo n.º 6
0
def AffineShapeParametrizationDecoratedProblem(*shape_parametrization_vertices_mappings, **decorator_kwargs):
    
    if "shape_parametrization_vertices_mappings" in decorator_kwargs:
        assert len(shape_parametrization_vertices_mappings) is 0
        shape_parametrization_vertices_mappings = decorator_kwargs["shape_parametrization_vertices_mappings"]
    
    # Possibly read vertices mappings from file
    if (
        len(shape_parametrization_vertices_mappings) is 1
            and
        isinstance(shape_parametrization_vertices_mappings[0], str)
    ):
        filename = shape_parametrization_vertices_mappings[0]
        assert filename != "identity", "It does not make any sense to use this if you only have one subdomain without parametrization"
        assert VerticesMappingIO.exists_file("", filename)
        shape_parametrization_vertices_mappings = VerticesMappingIO.load_file("", filename)
        
    # Detect the mesh dimension based on the number of vertices to be mapped
    dim = None
    for vertices_mapping in shape_parametrization_vertices_mappings:
        if isinstance(vertices_mapping, str):
            assert vertices_mapping.lower() == "identity"
            continue
        else:
            assert isinstance(vertices_mapping, dict)
            assert len(vertices_mapping) in (3, 4)
            if len(vertices_mapping) is 3:
                if dim is None:
                    dim = 2
                else:
                    assert dim is 2
            elif len(vertices_mapping) is 4:
                if dim is None:
                    dim = 3
                else:
                    assert dim is 3
    assert dim is not None, "It does not make any sense to use this of all your subdomains are not parametrized"
        
    # Get the shape parametrization expression from vertices mappings
    shape_parametrization_expression = [affine_shape_parametrization_from_vertices_mapping(dim, vertices_mapping) for vertices_mapping in shape_parametrization_vertices_mappings]
    if decorator_kwargs.get("debug", False):
        print("=== DEBUGGING AFFINE SHAPE PARAMETRIZATION ===")
        for (subdomain, (vertices_mapping, expression)) in enumerate(zip(shape_parametrization_vertices_mappings, shape_parametrization_expression)):
            print("Subdomain", subdomain + 1)
            print("\tvertices mapping =", vertices_mapping)
            print("\tshape parametrization expression =", expression)
    decorator_kwargs.pop("debug", None)
    
    # Apply the parent decorator
    AffineShapeParametrizationDecoratedProblem_Decorator_Base = ShapeParametrizationDecoratedProblem(*shape_parametrization_expression, **decorator_kwargs)
    
    # Further decorate the resulting class
    from rbnics.shape_parametrization.problems.affine_shape_parametrization import AffineShapeParametrization
    
    @ProblemDecoratorFor(AffineShapeParametrization, shape_parametrization_vertices_mappings=shape_parametrization_vertices_mappings)
    def AffineShapeParametrizationDecoratedProblem_Decorator(ParametrizedDifferentialProblem_DerivedClass):
        
        AffineShapeParametrizationDecoratedProblem_Class = AffineShapeParametrizationDecoratedProblem_Decorator_Base(ParametrizedDifferentialProblem_DerivedClass)
        
        # return value (a class) for the decorator
        return AffineShapeParametrizationDecoratedProblem_Class
    
    # return the decorator itself
    return AffineShapeParametrizationDecoratedProblem_Decorator