Computational Science Asked by Winabryr on February 14, 2021
I need to implement a numerical scheme for the solution of the one-dimensional advection equation
$$\frac{partial u}{partial t} + C(x, t) frac{partial u}{partial x} = 0 \\$$
$$ \ C(x,t) = frac{picos(2 pi t) + 3.5}{2pi – pisin(pi x)} \\$$
$$\ 0 leq x leq 1, quad 0 leq t leq 1\\$$
with Crank–Nicolson finite difference method
$$\ frac{u^{j + 1}_{k} – u^{j}_{k}}{tau} + frac{C}{4h}(u^{j + 1}_{k + 1} – u^{j + 1}_{k – 1} + u^{j}_{k + 1} – u^{j}_{k – 1}) = 0\\$$
and boundary conditions
$$\ phi(x) = u(x,0), quad psi_{0}(t) = u(0,t), quad psi_{1}(t) = u(1, t) \\$$
it’s known that the exact solution has the following form
$$\ U(x,t) = cos(pi x) – frac{1}{2}sin(2 pi t) + 2pi x – 3.5t\\$$
The numerical solution on each layer in time is found as the solution of a system of linear equations with a tridiagonal matrix
$$\ Au = b \\$$
$$\ A =
begin{pmatrix}
1 & frac{Ctau}{4h} & 0 & …\
-frac{Ctau}{4h} & 1 & frac{Ctau}{4h} & … \
0 & -frac{Ctau}{4h} & 1 & … \
… & … & … & …
end{pmatrix}\\$$
I’ve write a simple python script, but the result doesn’t match the theory:
I’m sure I’m wrong somewhere, but I don’t see where.
Thanks!
Some remarks about the code, perhaps cleaning these up already solves the question, especially the initialization error:
Floating point errors are a thing, so if you want to get the expected results, give some wiggle room (0.01
is arbitrary, I would not expect defects above 1e-12
in this place)
N = int((x1 - x0) / h + 0.01)
M = int((t1 - t0) / tau + 0.01)
There is no guarantee that $N·h=x_1-x_0$ etc., so force this grid condition
h = (x1 - x0) / N
tau = (t1 - t0) / M
There is a honest error in the side boundary initialization, the space component is always first
u[0, i] = psi_0(i * tau)
u[N, i] = psi_1(i * tau)
The implicit trapezoidal method that is the method in time direction of C-N reads as
$$
frac{y^{j+1}-y^j}{tau}=frac{F(t^j,y^j)+F(t^{j+1},y^{j+1})}2.
$$
Accordingly, the coefficients a_h
for the banded matrix should be computed at time (j+1)*tau
to get the correct order $O(tau^2+h^2)$ of the method.
Answered by Lutz Lehmann on February 14, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP