I am trying to make a code for 1D shallow water equation (nonlinear without source terms) using the MacCormack method for sinusoidal wave propagation. My issue is that the wave fluctuates and does not produce a smooth result. I think there might be an issue with my boundary conditions as I am giving boundary condition in linear terms:

\begin{align} h=a\sin\left(\frac{2\pi n}{T}\right)\\ u=\left(\frac{g}{h_0}\right)^{1/2}h \end{align}

where $n$ is temporal, $a$ is $0.1$, and $h_0$ is $1$ meter. $\Delta t$ is $0.01$ and $\Delta x$ is $0.1$. If I understood my problem correctly, please tell me how I can give boundary conditions for the nonlinear terms of shallow water equation.

enter image description here

  • 2
    $\begingroup$ Are you sure that your Courant number $C$ defined as the ratio between the physical velocity $\underset{x}{max}{(v(x))}$ and the mesh velocity $\Delta x/\Delta t$ is less that $1$ for an explicit scheme? $\endgroup$
    – HBR
    Sep 9, 2017 at 11:12
  • $\begingroup$ Have you checked to make sure that it's actually the BCs and not the scheme? You could use periodic BCs and an appropriate IC. My guess is that in reality you have done everything fine but that you are seeing the oscillations introduced by the shocks that form (unless you have accounted for that already). $\endgroup$ Sep 10, 2017 at 15:31


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.