## Equação de Bateman-Burgers

* A equação de Burgers é o modelo mais simples para analisar o efeito combinado de convecção e difusão não linear

\begin{equation}
\frac{\partial u}{\partial t} + u \frac{\partial u}{\partial x} = \nu \frac{\partial^2 u}{\partial x^2}.
\end{equation}

* No limite onde a viscosidade tende a zero, o termo de difusão se torna cada vez menor e as soluções suaves convergem de forma não uniforme para a onda de choque descontínua apropriada.

* A equação de convecção propaga uma forma de onda ou sinal na velocidade $c$

\begin{equation}
\frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x} = 0.
\end{equation}

* Por outro lado, a equação não linear propaga sinais de tal forma que ocorre distorção no perfil da forma de onda 

\begin{equation}
\frac{\partial u}{\partial t} + u \frac{\partial u}{\partial x} = 0.
\end{equation}

* É sabido também que a equação do calor contém um termo de difusão responsável por suavizar o perfil inicial

\begin{equation}
\frac{\partial u}{\partial t} - \alpha \frac{\partial^2 u}{\partial x^2} = 0,
\end{equation}

onde $ \alpha > 0$.

# Equação de Navier Stokes

A equação de Burgers é considerada uma simplificação de outra equação mais complexa, a equação de Navier Stokes, uma EDP usada para descrever o movimento de substâncias fluidas como líquidos e gases. 

Considere as equações a seguir:

$\left\{\begin{array}{l}\nabla \cdot \mathbf{v}=0 \\ (\rho \mathbf{v})_{t}+\nabla \cdot(\rho \mathbf{v v})+\nabla p-\mu \nabla^{2} \mathbf{v}=0\end{array}\right.$

Onde $\rho$ é a densidade, $p$ é a pressão, $v$ é a velocidade e $\mu$ é a viscosidade de um fluido.
Se simplificarmos a equação usando somente o componente $x$ do vetor velocidade, que chamaremos de $v^{x}$, ficaremos com:

$\rho \cfrac{\partial v^{x}}{\partial t}+\rho v^{x} \cfrac{\partial v^{x}}{\partial x}+\rho v^{y} \cfrac{\partial v^{x}}{\partial y}+\rho v^{z} \cfrac{\partial v^{x}}{\partial z}+\cfrac{\partial p}{\partial x}-\mu\left(\cfrac{\partial^{2} v^{x}}{\partial x^{2}}+\cfrac{\partial^{2} v^{x}}{\partial y^{2}}+\cfrac{\partial^{2} v^{x}}{\partial z^{2}}\right)=0$

Agora, se considerarmos um problema com somente uma dimensão:

$\rho \cfrac{\partial v^{x}}{\partial t}+\rho v^{x} \cfrac{\partial v^{x}}{\partial x}-\mu \cfrac{\partial^{2} v^{x}}{\partial x^{2}}=0$

Finalmente, se substituirmos $v^{x}$ por $u$, já que o problema é unidimensional, e usar a relação $\epsilon=\cfrac{\mu}{\rho}$ da viscosidade cinemática, ficaremos com a equação discutida.

## Transformação Hopf-Cole

A transformação Hopf-Cole é usada para tornar a equação de Burgers, que é não linear, em uma versão da equação do calor, que é linear.

$\cfrac{\partial}{\partial t} \psi(\mathbf{x}, t)=v \Delta \psi(\mathbf{x}, t)$

$\psi(\mathbf{x}, t)=e^{h(\mathbf{x}, t) / 2 v}$

$\Delta \psi=\cfrac{1}{2 v}\left[\Delta h+\cfrac{1}{2 v}(\nabla h)^{2}\right] e^{h / 2 v}$

$\cfrac{\partial}{\partial t} h-\cfrac{1}{2}(\nabla h)^{2}=v \Delta h$

Nesta última equação, percebe-se que ela se iguala à equação de Kardar-Parisi-Zhang, que é um modelo para uma superfície sólida crescendo por deposição de vapor, ou, o caso oposto, erosão de material de uma superfície sólida:

$\cfrac{\partial}{\partial t} h(\mathbf{x}, t)-\cfrac{1}{2}(\nabla h(\mathbf{x}, t))^{2}=v \cfrac{\partial^{2}}{\partial x^{2}} h(x, t)+F(x, t)$

onde 

$\mathbf{u}(\mathbf{x}, t)=-\nabla h(\mathbf{x}, t)$

Combinando esses conhecimentos, se obtêm:

$\mathbf{u}(\mathbf{x}, t)=-\cfrac{1}{2 v} \nabla \ln \psi(\mathbf{x}, t)$

### **Solução geral em 1D**

Condições iniciais:

$u(x, 0), \quad \psi(x, 0)=e^{-\cfrac{1}{2 v} \displaystyle\int^{x} d x^{\prime} u\left(x^{\prime}, 0\right)}$

Equação do calor:

$\psi(x, t)=\displaystyle\int d x^{\prime} G\left(x-x^{\prime}, t\right) \psi\left(x^{\prime}, 0\right)$

$G\left(x-x^{\prime}, t\right)=\cfrac{1}{\sqrt{4 \pi t}} e^{-\cfrac{\left(x-x^{\prime}\right)^{2}}{4 v t}}$

Solução em termos da condição inicial:

$\psi(x, t)=\cfrac{1}{\sqrt{4 \pi t}} \displaystyle\int d x^{\prime} e^{-\cfrac{\left(x-x^{\prime}\right)^{2}}{4 v t}-\cfrac{1}{2 v} \displaystyle\int^{x^{\prime}} d x^{\prime \prime} u\left(x^{\prime \prime}, 0\right)}$






## Método Numérico

### Discretização



$\cfrac{\partial{u}}{\partial{t}}+u\cfrac{\partial{u}}{\partial{x}}=\nu\cfrac{\partial^{2}{u}}{\partial{x^{2}}}$

#### FTCS (_**F**oward **T**ime **C**entral **S**pace_):

Sabe-se que, (utilizando a derivada à direita)

$\cfrac{\partial}{\partial{t}}u(x,t) = \cfrac{u(x,t+\Delta t) - u(x,t)}{\Delta t} +\mathcal{O}(\Delta t^{2})$

$\cfrac{\partial^{2}}{\partial{x^{2}}}u(x,t) = \cfrac{u(x+\Delta x, t) - 2u(x,t) + u(x-\Delta x,t)}{(\Delta t)^{2}} +\mathcal{O}(\Delta x^{3})$

Se,

$u(x, t) := u_{i}^{n}$ 

$u(x, t+\Delta t) := u_{i}^{n+1}$ 

$u(x+\Delta x, t) := u_{i+1}^{n}$

$\implies \cfrac{\partial{u}}{\partial{t}}+u\cfrac{\partial{u}}{\partial{x}}=\nu\cfrac{\partial^{2}{u}}{\partial{x^{2}}} \longrightarrow \cfrac{u_{i}^{n+1}-u_{i}^{n}}{\Delta t} + u_{i}^{n}\cfrac{u_{i}^{n}-u_{i-1}^{n}}{\Delta x} = \nu\cfrac{u_{i+1}^{n}-2u_{i}^{n}+u_{i-1}^{n}}{(\Delta x)^{2}}$

$\longrightarrow u_{i}^{n+1} = u_{i}^{n} - u_{i}^{n}\cfrac{\Delta t}{\Delta x}(u_{i}^{n}-u_{i-1}^{n})+\nu\cfrac{\Delta t}{(\Delta x)^{2}}(u_{i+1}^{n}-2u_{i}^{n}+u_{i-1}^{n})$

#### Supondo que

* **Condições Iniciais (CI)**:

$
\left\{
    \begin{array}\\
        u_{i}^{n=0} = \cfrac{-2\nu}{\phi(x,\nu)}\left(\cfrac{\partial\phi(x,\nu)}{\partial x}\right)+4 \\
        \phi = e^{\left(\cfrac{-x^{2}}{4\nu}\right)} + e^{\left[\cfrac{-(x-2\pi)^{2}}{4\nu}\right]}
    \end{array}
\right.
$

Derivando $\phi$ e substituindo na equação:

$\implies u_{i}^{n=0} = -\cfrac{x}{2\nu}e^{\left(\cfrac{-x^{2}}{4\nu}\right)}-\cfrac{(x-2\pi)}{2\nu}e^{\left[\cfrac{-(x-2\pi)^{2}}{4\nu}\right]}$

* **Condições de Contorno (CC)**:

Periódica:

$u_{i=0}^{n}=u_{i_{max}}^{n}$

#### Solução analítica:

$
\left\{
    \begin{array}\\
        u_{i}^{n} = \cfrac{-2\nu}{\phi(x,\nu)}\left(\cfrac{\partial\phi(x,\nu)}{\partial x}\right)+4 \\
        \phi=e^{\left(\cfrac{-(x-4 t)^{2}}{4 \nu(t+1)}\right)}+e^{\left[\cfrac{-(x-4 t-2 \pi)^{2}}{4 \nu(t+1)}\right]}
    \end{array}
\right.
$

Derivando $\phi$ e substituindo na equação:

$\implies u_{i}^{n} = -\cfrac{(x-4t)}{2\nu(t+1)}e^{-\left(\cfrac{(x-4t)^{2}}{4\nu(t+1)}\right)}-\cfrac{(x-4t-2\pi)}{2\nu(t+1)}e^{\left[\cfrac{-(x-4t-2\pi)^{2}}{4\nu(t+1)}\right]}$

## Código - Fluido víscido ($\nu\neq0$)
##### *(com viscosidade)*

### Burgers Numérico


```python
from math import pi, exp
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

Array2D = np.ndarray # typing...

def burgers(nt:int, nx:int, tmax:float, xmax:float, v:float) -> tuple:
    # incrementos
    dt = tmax/(nt-1) # no tempo
    dx = xmax/(nx-1) # no espaco

    # arrays
    u = np.zeros((nx, nt)) # velocidade
    x = np.zeros(nx)
    ipos = np.zeros(nx) 
    ineg = np.zeros(nx) 

    # condicoes de contorno periodicas
    for i in range(0, nx): # i:     0,  1, ... nx-2, nx-1, nx
        x[i] = i*dx
        ipos[i] = i+1 # 1, 2, ... nx-2, nx+1
        ineg[i] = i-1 # -1, 0, ... nx-2, nx-1

    ipos[-1] = 0 # ipos[nx-1] = 0, u_{n+1}
    ineg[0] = nx-1 # u_{n-1}

    # condicoes iniciais
    for i in range(0, nx):
        phi = exp( -(x[i]**2)/(4*v) ) + exp( -(x[i]-2*pi)**2 / (4*v) )
        dphi = (-(0.5*x[i]/v)*exp( -(x[i]**2) / (4*v) ) - (0.5*(x[i]-2*pi) / v )
                *exp(-(x[i]-2*pi)**2 / (4*v) ))
        u[i,0] = -2*v*(dphi/phi) + 4

    # solucao numerica
    for n in range(0, nt-1):
        for i in range(0,nx):
            u[i,n+1] = (u[i,n]-u[i,n]*(dt/dx)*(u[i,n]-u[int(ineg[i]),n])+
                        v*(dt/dx**2)*(u[int(ipos[i]),n]-2*u[i,n]+u[int(ineg[i]),n]))
    return((u, x))
```

### Burgers Analítico


```python
def burgers_analytical(nt:int, nx:int, tmax:float, xmax:float, v:float) -> tuple:
    # incrementos
    dt = tmax/(nt-1)
    dx = xmax/(nx-1)

    # arrays
    u_a = np.zeros((nx, nt))
    x = np.zeros(nx)
    t = np.zeros(nt)

    # len(x)
    for i in range(0, nx):
        x[i] = i*dx

    # solucao analitica
    for n in range(0, nt):
        t = n*dt

        for i in range(0, nx):
            phi = (exp( -(x[i]-4*t)**2/(4*v*(t+1)) ) + 
                   exp( -(x[i]-4*t-2*pi)**2/(4*v*(t+1)) ))

            dphi = ( -0.5*(x[i]-4*t)/(v*(t+1))*exp( -(x[i]-4*t)**2/(4*v*(t+1)) )
                -0.5*(x[i]-4*t-2*pi)/(v*(t+1))*exp( -(x[i]-4*t-2*pi)**2/(4*v*(t+1)) ) )

            u_a[i,n] = -2*v*(dphi/phi) + 4

    return((u_a, x))
```

#### Gráfico de $u$ e $u_{a}$ *vs.* $x$


```python
def plot(u_a:Array2D, u:Array2D, x:list, nt:int, title:str):
    plt.figure(figsize=(8, 6), dpi=80)
    colour=iter(cm.rainbow(np.linspace(0, 20, nt)))
    for n in range(0, nt, 20):
        c=next(colour)
        plt.plot(x, u[:, n], 'ko', markerfacecolor=c, alpha=0.5)
        plt.plot(x, u_a[:, n], linestyle='-', c=c, label=f'i={n}')
    plt.legend()
    plt.xlabel(r'$x$')
    plt.ylabel(r'$u$')
    plt.ylim([0, 8.0])
    plt.xlim([0, max(x)])
    plt.title(title)
    plt.show()
```

#### Gráfico de $u_{a}$ *vs.* $x$


```python
def plot_analytical(u_a:Array2D, x:list, nt:int, title:str) -> None:
    plt.figure(figsize=(8, 6), dpi=80)
    colour=iter(cm.rainbow(np.linspace(0, 20, nt)))
    for n in range(0, nt, 20):
        c=next(colour)
        plt.plot(x, u_a[:, n], linestyle='-', c=c, label=f'i={n}')
    plt.legend()
    plt.xlabel(r'$x$')
    plt.ylabel(r'$u$')
    plt.ylim([0, 8.0])
    plt.xlim([0, max(x)])
    plt.title(title)
    plt.show()
```

#### Erro numérico $\left|u-u_{a}\right|$ *vs.* $x$
##### *(log)*



```python
def plot_error(u_a:Array2D, u:Array2D, x:list, nt:int) -> None:
    plt.figure(figsize=(8, 6), dpi=80)
    colour=iter(cm.rainbow(np.linspace(0,20,nt)))
    for n in range(0,nt,20):
        c = next(colour)
        err = abs(u[:, n]-u_a[:, n])
        plt.plot(x, err, 'ko', color=c, markersize=3, 
                 label=f'i={n}, max={max(err):.4f}, M={np.sum(err)/len(err):.4f}')
    plt.legend()
    plt.xlabel(r'$x$')
    plt.ylabel(r'$\|u-u_{a}\|$')
    plt.xlim([0, max(x)])
    plt.yscale('log')
    plt.ylim([10e-6, 10e2])
    plt.title('Erro Numérico')
    plt.show()
```

* $\nu=0.1, \,\,\, n_{t}=151, \,\,\, n_{x}=151, \,\,\, t_{max}=0.5, \,\,\, x_{max}=2\pi$


```python
nt, nx, tmax, xmax, v = 151, 151, 0.5, 2*pi, 0.1
```

* $\nu=0.01, \,\,\, n_{t}=151, \,\,\, n_{x}=151, \,\,\, t_{max}=0.5, \,\,\, x_{max}=2\pi$


```python
nt, nx, tmax, xmax, v = 151, 151, 0.5, 2*pi, 0.01
```

* $\nu=0.15, \,\,\, n_{t}=151, \,\,\, n_{x}=151, \,\,\, t_{max}=0.5, \,\,\, x_{max}=2\pi$


```python
nt, nx, tmax, xmax, v = 151, 151, 0.5, 2*pi, 0.15
```

* $\nu=0.1, \,\,\, n_{t}=201, \,\,\, n_{x}=201, \,\,\, t_{max}=0.5, \,\,\, x_{max}=3\pi$


```python
nt, nx, tmax, xmax, v = 201, 201, 0.5, 3*pi, 0.9
```

---


```python
u, x = burgers(nt, nx, tmax, xmax, v)
u_a, x = burgers_analytical(nt, nx, tmax, xmax, v)
title = str(r'$\nu=$'+f'{v}, '+r'$n_t$'+f'={nt}, '+
     r'$n_x$'+f'={nx}, '+r'$t_{max}$'+f'={tmax}')
plot(u_a, u, x, nt, title)
plot_analytical(u_a, x, nt, title)
plot_error(u_a,u,x,nt)
```

---

## Fluido invíscido ($\nu=0$)
##### *(sem viscosidade)*

$\cfrac{\partial{u}}{\partial{t}}+u\cfrac{\partial{u}}{\partial{x}} = 0$

$\implies \cfrac{\partial{u}}{\partial{t}}+u\cfrac{\partial{u}}{\partial{x}} = 0 \longrightarrow \cfrac{u_{i}^{n+1}-u_{i}^{n}}{\Delta t} + u_{i}^{n}\cfrac{u_{i}^{n}-u_{i-1}^{n}}{\Delta x} = 0$

$\longrightarrow u_{i}^{n+1} = u_{i}^{n} - u_{i}^{n}\cfrac{\Delta t}{\Delta x}(u_{i}^{n}-u_{i-1}^{n})$

* Utilizando as mesmas condições:

### Código


```python
def burgers_inv(nt:int, nx:int, tmax:float, xmax:float, v) -> tuple:
    # incrementos
    dt = tmax/(nt-1)
    dx = xmax/(nx-1)

    # arrays
    u = np.zeros((nx,nt))
    x = np.zeros(nx)
    ipos = np.zeros(nx)
    ineg = np.zeros(nx)

    # condicoes de contorno periodicas
    for i in range(0,nx):
        x[i] = i*dx
        ipos[i] = i+1
        ineg[i] = i-1

    ipos[nx-1] = 0
    ineg[0] = nx-1
    
    # condicoes iniciais
    for i in range(0,nx):
        phi = exp( -(x[i]**2)/(4*v) ) + exp( -(x[i]-2*pi)**2 / (4*v) )
        dphi = -(0.5*x[i]/v)*exp( -(x[i]**2) / (4*v) ) - (0.5*(x[i]-2*pi) / v )*exp(-(x[i]-2*pi)**2 / (4*v) )
        u[i,0] = -2*v*(dphi/phi) + 4

    # solucao numerica
    for n in range(0,nt-1):
        for i in range(0,nx):
            u[i,n+1] = (u[i,n]-u[i,n]*(dt/dx)*(u[i,n]-u[int(ineg[i]),n]))
    return((u, x))
```

#### Gráfico de $u_{inv}$ e $u$ *vs.* $x$


```python
def plot_iv(u_inv:Array2D, u:Array2D, x:list, nt:int) -> None:
    plt.figure(figsize=(8, 6), dpi=80)
    plt.plot(x, u[:,0], color='red', label=r'$u$')
    plt.plot(x, u_inv[:,0], color='blue', label=r'$u_{inv}$')
    for n in range(1,nt,20):
        plt.plot(x, u[:,n], color='red')
        plt.plot(x, u_inv[:,n], color='blue')
    plt.legend()
    plt.xlabel(r'$x$')
    plt.ylabel(r'$u$')
    plt.xlim([0, max(x)])
    plt.title(r'$(u_{inv})$ '+'e '+r'$u$')
    plt.show()
```

---


```python
u_inv, x_inv = burgers_inv(nt, nx, tmax, xmax, v)
plot_analytical(u, x, nt, str(r'$\nu=$'+f'{v}, '+r'$n_t$'+f'={nt}, '+
                 r'$n_x$'+f'={nx}, '+r'$t_{max}$'+f'={tmax}'))
plot_analytical(u_inv, x_inv, nt, str(r'$\nu=$'+'0, '+r'$n_t$'+f'={nt}, '+
                 r'$n_x$'+f'={nx}, '+r'$t_{max}$'+f'={tmax}'))
plot_iv(u_inv, u, x, nt)
```

<font color='red'>bar</font>

c4af150a7bb2ca4beeeff27dfa62dad1689b7347
ipynb
Jupyter Notebook
burgers.ipynb
luis-gustta/metcompc
3988c7731617c074eea20b0cce2fa8199a54a2c4
MIT
burgers.ipynb
luis-gustta/metcompc
3988c7731617c074eea20b0cce2fa8199a54a2c4
MIT
burgers.ipynb
luis-gustta/metcompc
3988c7731617c074eea20b0cce2fa8199a54a2c4
MIT
Qwen/Qwen-72B
1. YES
2. YES