def test_dense(): f = f_6 exact = exact_6 tol = [1.e-3,1.e-5,1.e-7,1.e-9,1.e-11,1.e-13] t0 = 0 # t0 = random.random()*math.pi t_max = t0 + 2*math.pi y0 = exact(t0) t = np.linspace(t0,t_max,100) ys_exact = np.array([exact(t_) for t_ in t]) err = np.zeros(len(tol)) for i in range(len(tol)): print("tol = ", tol[i]) ys = ex_p.ex_midpoint_parallel(f, y0, t, atol=tol[i], rtol=tol[i], adaptive="order") plt.hold(True) line_exact, = plt.plot(t, ys_exact, "s-") line_sol, = plt.plot(t, ys, "s-") plt.legend([line_exact, line_sol], ["exact", "sol w/ tol =" + str(tol[i])], loc=4) plt.show() err[i] = relative_error(ys, ys_exact) line_error, = plt.semilogy(t, abs(ys_exact - ys), "s-") plt.legend([line_error], ["error"], loc=4) plt.show() plt.loglog(tol, err, "s-") plt.show()
def tst_parallel_vs_serial(f, t0, tf, y0, title="tst_parallel_vs_serial"): tol = np.asarray([10**(-k) for k in range(3, 14)]) time_ratio = np.zeros(len(tol)) fe_seq = np.zeros(len(tol)) fe_tot = np.zeros(len(tol)) fe_diff = np.zeros(len(tol)) h_avg_diff = np.zeros(len(tol)) k_avg_diff = np.zeros(len(tol)) err_p = np.zeros(len(tol)) err_s = np.zeros(len(tol)) y_ref = np.loadtxt("reference.txt") for i in range(len(tol)): print("tol = " + str(tol[i])) time_ = time.time() y_, infodict = ex_p.ex_midpoint_parallel(f, y0, [t0, tf], atol=(tol[i]), rtol=(tol[i]), adaptive="order", full_output=True) parallel_time = time.time() - time_ fe_seq[i], fe_tot[i], h_avg_, k_avg_ = infodict['fe_seq'], infodict['fe_tot'], infodict['h_avg'], infodict['k_avg'] err_p[i] = relative_error(y_[-1], y_ref) print("parallel = " + '%g' % (parallel_time) + "\terr = " + '%e' % err_p[i] + "\th_avg = " + '%e' % h_avg_ + "\tk_avg = " + '%e' % k_avg_ + "\tfe_s1 = " + str(fe_seq[i]) + "\tfe_t1 = " + str(fe_tot[i]) + "\tfe_t1/fe_s1 = " + '%g' % (fe_tot[i]/fe_seq[i])) time_ = time.time() y, fe, h_avg, k_avg = ex_s.ex_midpoint_serial(f, t0, tf, y0, atol=(tol[i]), rtol=(tol[i]), adaptive="order") serial_time = time.time() - time_ err_s[i] = relative_error(y, y_ref) print("serial = " + '%g' % (serial_time) + "\terr = " + '%e' % err_s[i] + "\th_avg = " + '%e' % h_avg + "\tk_avg = " + '%e' % k_avg + "\tfe_s2 = " + str(fe) + "\tfe_t2 = " + str(fe) + "\tfe_s2/fe_s1 = " + '%g' % (fe/fe_seq[i])) time_ratio[i] = serial_time / parallel_time fe_diff[i] = fe_seq[i] - fe h_avg_diff[i] = h_avg_ - h_avg k_avg_diff[i] = k_avg_ - k_avg print("ratio = " + '%g' % (time_ratio[i]) + "\tdiff = " + '%e' %(err_p[i] - err_s[i]) + "\tdiff = " + '%e' %(h_avg_diff[i]) + "\tdiff = " + '%e' %(k_avg_diff[i]) + "\tdiff = " + str(fe_diff[i]) + "\tdiff = " + str(fe_tot[i] - fe) + "\ttime_ratio/(fe_s2/fe_s1) = " + '%g' % (time_ratio[i]/(fe/fe_seq[i]))) print('') return (err_p, err_s)
def cprofile_tst(): bodys = 200 n = 6*bodys tol = 10**(-6) print("n = " + str(n)) print("tol = " + str(tol)) t0 = 0 tf = 3 y0 = fnbod.init_fnbod(n) # print("serial") # _, _, h_avg, k_avg = ex_s.ex_midpoint_serial(f_5, t0, tf, y0, atol=tol, rtol=tol, adaptive="order") print("parallel") _, infodict = ex_p.ex_midpoint_parallel(f_5, y0, [t0, tf], atol=tol, rtol=tol, adaptive="order", full_output=True) h_avg, k_avg = infodict['h_avg'], infodict['k_avg'] print("h_avg = " + str(h_avg) + "\tk_avg = " + str(k_avg))