Exemple #1
0
        plt.savefig('vib_%d_%d_u.pdf' % (timesteps_per_period, num_periods))
        plt.savefig('vib_%d_%d_u.eps' % (timesteps_per_period, num_periods))


#f = RHS(b=0.4, A_F=1, w_F=2)
f = RHS(b=0.4, A_F=0, w_F=2)
f = RHS(b=0.4, A_F=1, w_F=np.pi)
f = RHS(b=0.4, A_F=20,
        w_F=2 * np.pi)  # qualitatively wrong FE, almost ok BE, smaller T
#f = RHS(b=0.4, A_F=20, w_F=0.5*np.pi)  # cool, FE almost there, BE good

# Define different sets of experiments
solvers_theta = [
    odespy.ForwardEuler(f),
    # Implicit methods must use Newton solver to converge
    odespy.BackwardEuler(f, nonlinear_solver='Newton'),
    odespy.CrankNicolson(f, nonlinear_solver='Newton'),
]

solvers_RK = [odespy.RK2(f), odespy.RK4(f)]
solvers_accurate = [
    odespy.RK4(f),
    odespy.CrankNicolson(f, nonlinear_solver='Newton'),
    odespy.DormandPrince(f, atol=0.001, rtol=0.02)
]
solvers_CN = [odespy.CrankNicolson(f, nonlinear_solver='Newton')]

if __name__ == '__main__':
    timesteps_per_period = 20
    solver_collection = 'theta'
    num_periods = 1
Exemple #2
0
L = 0.5
beta = 8.2E-5
N = 40
x = linspace(0, L, N + 1)
dx = x[1] - x[0]
u = zeros(N + 1)

U_0 = zeros(N + 1)
U_0[0] = s(0)
U_0[1:] = 283
dt = dx**2 / (2 * beta)
print('stability limit:', dt)
dt = 600  # 10 min

import odespy
solver = odespy.BackwardEuler(rhs, f_is_linear=True, jac=K)
solver = odespy.ThetaRule(rhs, f_is_linear=True, jac=K, theta=0.5)
solver.set_initial_condition(U_0)
T = 1 * 60 * 60
N_t = int(round(T / dt))
time_points = linspace(0, T, N_t + 1)
u, t = solver.solve(time_points)

# Make movie
import os
os.system('rm tmp_*.png')
import matplotlib.pyplot as plt
import time
plt.ion()
y = u[0, :]
lines = plt.plot(x, y)
Exemple #3
0
f_kwargs = dict(L=L, beta=1, x=x)
u = zeros(N + 1)

U_0 = zeros(N + 1)
U_0[0] = s(0)
U_0[1:] = 283

import odespy

solvers = {
    'FE':
    odespy.ForwardEuler(rhs, f_kwargs=f_kwargs),
    'BE':
    odespy.BackwardEuler(rhs,
                         f_is_linear=True,
                         jac=K,
                         f_kwargs=f_kwargs,
                         jac_kwargs=f_kwargs),
    'B2':
    odespy.Backward2Step(rhs,
                         f_is_linear=True,
                         jac=K,
                         f_kwargs=f_kwargs,
                         jac_kwargs=f_kwargs),
    'theta':
    odespy.ThetaRule(rhs,
                     f_is_linear=True,
                     jac=K,
                     theta=0.5,
                     f_kwargs=f_kwargs,
                     jac_kwargs=f_kwargs),
Exemple #4
0
def f(u, t):
    return -a * u


I = 1
a = 2
T = 6
dt = float(sys.argv[1]) if len(sys.argv) >= 2 else 0.75
Nt = int(round(T / dt))
t_mesh = np.linspace(0, Nt * dt, Nt + 1)

solvers = [
    odespy.RK2(f),
    odespy.RK3(f),
    odespy.RK4(f),
    odespy.BackwardEuler(f, f_is_linear=True, jac=lambda u, t: -a)
]

# (If f_is_linear is not specified in BackwardEuler, a
# nonlinear solver is invoked and this must be Newton
# (nonlinear_solver='Newton') since the default choice,
# nonlinear_solver='Picard', diverges in this problem.)

legends = []
for solver in solvers:
    solver.set_initial_condition(I)
    u, t = solver.solve(t_mesh)

    plt.plot(t, u)
    plt.hold('on')
    legends.append(solver.__class__.__name__)
Exemple #5
0
problem = Problem(c=1, Theta=pi / 4)

atol = 1E-7
rtol = 1E-5
adams_or_bdf = 'bdf'
import odespy

solvers = [
    odespy.AdamsBashMoulton2(problem),
    odespy.AdamsBashMoulton3(problem),
    odespy.AdamsBashforth2(problem),
    odespy.AdamsBashforth3(problem),
    odespy.AdamsBashforth4(problem),
    odespy.AdaptiveResidual(problem, solver='Euler'),
    odespy.Backward2Step(problem),
    odespy.BackwardEuler(problem),
    odespy.Dop853(problem, rtol=rtol, atol=atol),
    odespy.Dopri5(problem, rtol=rtol, atol=atol),
    odespy.Euler(problem),
    odespy.Heun(problem),
    odespy.Leapfrog(problem),
    odespy.LeapfrogFiltered(problem),
    odespy.MidpointImplicit(problem),
    odespy.MidpointIter(problem, max_iter=10, eps_iter=1E-7),
    odespy.RK2(problem),
    odespy.RK3(problem),
    odespy.RK4(problem),
    odespy.RKFehlberg(problem, rtol=rtol, atol=atol),
    odespy.SymPy_odefun(problem),
    odespy.ThetaRule(problem),
    odespy.Trapezoidal(problem),