def costfct(self, uin, udin): """Compute cost functional from observed fwd and data, i.e., return .5*||uin - udin||^2. uin & udin are np.arrays""" arearrays(uin, udin) diff = uin - udin return 0.5*np.dot(diff, diff)
def assemble_rhsadj(self, uin, udin, outp, bc): """Compute rhs term for adjoint equation and store it in outp, i.e., outp = - B^T( uin - udin), where uin = obs(fwd solution) uin & udin = np.arrays outp = Function(self.V) bc = fenics' boundary conditons""" arearrays(uin, udin) isFunction(outp) diff = uin - udin outp.vector()[:] = -1.0 * self.BTdot(diff) bc.apply(outp.vector())
def assemble_rhsadj(self, uin, udin, outp, bc): arearrays(uin, udin) isFunction(outp) self.diffv[:] = uin - udin outp.vector()[:] = - (self.W * self.diffv).array() bc.apply(outp.vector())
def costfct(self, uin, udin): arearrays(uin, udin) self.diffv[:] = uin - udin return 0.5 * (self.W*self.diffv).inner(self.diffv)