def spatial_op(state): S,J = euler_operator(sbp, state) + \ outflow_operator(sbp, state, 0, 'w') + \ outflow_operator(sbp, state, 0, 'e') + \ outflow_operator(sbp, state, 0, 's') + \ outflow_operator(sbp, state, 0, 'n') return S, J
def test_outflow_jacobian(self): S, J = outflow_operator(self.sbp, self.state, 0, 'w') J = J.todense() for i, grad in enumerate(J): f = lambda x: outflow_operator(self.sbp, x, 0, 'w')[0][i] grad_approx = approx_fprime(self.state, f, 1e-8) grad_exact = J[i, :] err = np.linalg.norm(grad_approx - grad_exact, ord=np.inf) print("Outflow SAT, Gradient error = {:.2e}".format(err)) self.assertTrue(err < 1e-5)