コード例 #1
0
    def evaluate_hessian(self, markings=False):
        hessian_input = self.get_outputs()[0].hessian_value
        if hessian_input is None:
            return

        f = backend.Function(backend.VectorFunctionSpace(self.get_outputs()[0].saved_output, "CG", 1))
        f.vector()[:] = hessian_input
        hessian_value = vector_boundary_to_mesh(f, self.get_dependencies()[0].saved_output)
        self.get_dependencies()[0].add_hessian_output(hessian_value.vector())
コード例 #2
0
    def evaluate_adj(self, markings=False):
        adj_value = self.get_outputs()[0].adj_value
        if adj_value is None:
            return

        f = backend.Function(backend.VectorFunctionSpace(self.get_outputs()[0].saved_output, "CG", 1))
        f.vector()[:] = adj_value
        adj_value = vector_boundary_to_mesh(f, self.get_dependencies()[0].saved_output)
        self.get_dependencies()[0].add_adj_output(adj_value.vector())
コード例 #3
0
def vector_mesh_to_boundary(func, b_mesh):
    v_split = func.split(deepcopy=True)
    v_b = []
    for v in v_split:
        v_b.append(mesh_to_boundary(v, b_mesh))
    Vb = backend.VectorFunctionSpace(b_mesh, "CG", 1)
    vb_out = backend.Function(Vb)
    scalar_to_vec = backend.FunctionAssigner(Vb,
                                             [v.function_space() for v in v_b])
    scalar_to_vec.assign(vb_out, v_b)
    return vb_out
コード例 #4
0
def vector_boundary_to_mesh(boundary_func, mesh):
    """
    Transfer a Vector-CG1 function from a Boundary mesh to
    a CG-1 function living on the Parent mesh (where all interior
    values are 0). This function is only meant to be called internally in
    pyadjoint, or for verification purposes.
    """
    V = backend.VectorFunctionSpace(mesh, "CG", 1)
    vb_split = boundary_func.split(deepcopy=True)
    v_vol = []
    for vb in vb_split:
        v_vol.append(boundary_to_mesh(vb, mesh))
    scalar_to_vec = backend.FunctionAssigner(
        V, [v.function_space() for v in v_vol])
    v_out = backend.Function(V)
    scalar_to_vec.assign(v_out, v_vol)
    return v_out