def test_quasigraph(self, plot=False): sol = self.solver errz = [] errl = [] ks = np.arange(1, 5) for k in ks: self.scheme.h = pow(2, -k) sol.initialize(u0=self.u0, time=1, name='{0}_{1}'.format(type(self).__name__, k)) sol.run() zexact = sol.system.exact(sol.final_time(), self.u0)[0] lexact = sol.system.exact(sol.final_time(), self.u0)[2] df = sol.final()[0] - zexact logerrz = np.log2(np.abs(df)) logerrl = np.log2(np.abs(sol.final()[2] - lexact)) errz.append(logerrz) errl.append(logerrl) pl.clf() pl.subplot(1, 2, 1) pl.title('z') regz = order.linear_regression(ks, errz, do_plot=True) pl.plot(ks, errz, 'o-') pl.legend() pl.subplot(1, 2, 2) pl.title(u'λ') regl = order.linear_regression(ks, errl, do_plot=True) pl.plot(ks, errl, 'o-') pl.legend() oz = -regz[0] ol = -regl[0] nt.assert_greater(ol, self.expected_orders[0] - self.tol) nt.assert_greater(oz, self.expected_orders[1] - self.tol) return sol
def test_quasigraph(self, plot=False): sol = self.solver errz = [] errl = [] ks = np.arange(1,5) for k in ks: self.scheme.h = pow(2,-k) sol.initialize(u0=self.u0,time=1, name='{0}_{1}'.format(type(self).__name__, k)) sol.run() zexact = sol.system.exact(sol.final_time(),self.u0)[0] lexact = sol.system.exact(sol.final_time(),self.u0)[2] df = sol.final()[0] - zexact logerrz = np.log2(np.abs(df)) logerrl = np.log2(np.abs(sol.final()[2] - lexact)) errz.append(logerrz) errl.append(logerrl) plt.clf() plt.subplot(1,2,1) plt.title('z') regz = order.linear_regression(ks,errz,do_plot=True) plt.plot(ks,errz,'o-') plt.legend() plt.subplot(1,2,2) plt.title(u'λ') regl = order.linear_regression(ks,errl,do_plot=True) plt.plot(ks,errl,'o-') plt.legend() oz = -regz[0] ol = -regl[0] nt.assert_greater(ol, self.expected_orders[0] - self.tol) nt.assert_greater(oz, self.expected_orders[1] - self.tol) return sol
def test_orders(expected_orders, scheme, plot=False, tol=.2): system = QuasiGraphSystem(fsin) #system = GraphSystem(fsin) u0 = np.array([0.,0.,1]) solver = Solver(scheme, system) #compare_exact(sol, u0, 2) sol = solver errz = [] errl = [] ks = np.arange(1,5) for k in ks: scheme.h = pow(2,-k) sol.initialize(u0=u0) sol.run(1) zexact = sol.system.exact(sol.final_time(),u0)[0] lexact = sol.system.exact(sol.final_time(),u0)[2] df = sol.final()[0] - zexact logerrz = np.log2(np.abs(df)) logerrl = np.log2(np.abs(sol.final()[2] - lexact)) errz.append(logerrz) errl.append(logerrl) if plot: plt.clf() plt.subplot(1,2,1) plt.title('z') plt.plot(ks,errz,'o-') plt.legend() plt.subplot(1,2,2) plt.title(u'λ') plt.plot(ks,errl,'o-') plt.legend() regz = order.linear_regression(ks,errz,do_plot=False) regl = order.linear_regression(ks,errl,do_plot=False) oz = -regz[0] ol = -regl[0] assert ol > expected_orders[0] - tol assert oz > expected_orders[1] - tol return sol