Ejemplo n.º 1
0
def dolfin_adjoint_interpolate(self, other, annotate=None):
    out = dolfin_interpolate(self, other)
    if annotate is True:
        assignment.register_assign(self, other, op=backend.interpolate)
        adjglobals.adjointer.record_variable(adjglobals.adj_variables[self], libadjoint.MemoryStorage(adjlinalg.Vector(self)))

    return out
Ejemplo n.º 2
0
    def __init__(self, *args, **kwargs):

        annotate = kwargs.pop("annotate", None)
        to_annotate = utils.to_annotate(annotate)

        if "name" in kwargs:
            self.adj_name = kwargs["name"]

            #if self.adj_name in adjglobals.function_names and to_annotate:
            #  backend.info_red("Warning: got duplicate function name %s" % self.adj_name)

            adjglobals.function_names.add(self.adj_name)
            del kwargs["name"]

        backend.Function.__init__(self, *args, **kwargs)

        if hasattr(self, 'adj_name'):
            if backend.__name__ == "dolfin":
                self.rename(self.adj_name, "a Function from dolfin-adjoint")
            else:
                self.name = self.__str__

        if to_annotate:
            if not isinstance(args[0], compatibility.function_space_type):
                if isinstance(args[0], backend.Function):
                    known = adjglobals.adjointer.variable_known(adjglobals.adj_variables[args[0]])
                else:
                    known = True

                if known or (annotate is True):
                    assignment.register_assign(self, args[0])
                else:
                    adjglobals.adj_variables.forget(args[0])
Ejemplo n.º 3
0
    def copy(self, *args, **kwargs):

        name = kwargs.pop("name", None)
        annotate = kwargs.pop("annotate", None)
        to_annotate = utils.to_annotate(annotate)

        with misc.annotations(False):
            copy = backend.Function.copy(self, *args, **kwargs)
            copy = utils.function_to_da_function(copy)

        if name is not None:
            copy.adj_name = name
            copy.rename(name, "a Function from dolfin-adjoint")
            adjglobals.function_names.add(name)

        if to_annotate:
            assignment.register_assign(copy, self)

        return copy