Está en la página 1de 6

Notas - DFC - Capı́tulo 3

Ecuación de onda no-lineal unidimensional


José Miguel Pérez - (23-Marzo-2020)

Versión 1.2

El objetivo de estas notas es estudiar cómo se deben aplicar los esquemas numéricos presentados en la
resolución de la ecuación de ondas lineal en el caso de considerar la ecuación de ondas no lineal (o ecuación
de Burgers). Por simplicidad consideraremos el problema unidimensional,

@u @u
+u =0. (1)
@t @x
En dicha ecuación el término convectivo u@x u es no lineal, siendo el responsable de generar armónicos de alta
frecuencia, lo que implica la cascada de energı́a en la turbulencia, hasta alcanzar la escala de Kolmogorov,
y la generación de ondas de choque. Vamos a ilustrar la generación de armónicos con un ejemplo sencillo.
Supongamos que utilizamos como condición inicial a la hora de resolver el problema anterior la siguiente
función de u,
u = u0 sin (kx) .
donde u0 es una constante y k es el número de onda definido como 2⇡/l, siendo l el periodo espacial de la
onda.
Introduciendo esta condición en el término no lineal, se obtiene que,
1 2
u@x u = ku20 sin (kx) cos (kx) = ku sin (2kx) .
2 0
Es decir, pasamos de tener una onda con número de onda k a otra con número de onda k 0 = 2k. Si
k = 2⇡/l, entonces k 0 = 2⇡/l0 . Utilizando estas tres últimas expresiones tenemos que,
2⇡ 2⇡
= k 0 = 2k = 2 .
l0 l
Es decir, l0 = l/2. El nuevo número de onda se corresponde con una onda cuya periodicidad espacial es la
mitad de la periodicidad espacial que tenı́a la onda inicial. Como se puede ver, el término no lineal es el
responsable de que en nuestro problema aparezcan harmónicos de alta frecuencia de forma constante.
Por otro lado, supongamos que elegimos la condición inicial representada en la figura 1,

u = u0 sin (2⇡x) , con x 2 [0, 1] ,

para el problema no lineal (1). Como se puede ver en dicha curva la velocidad local de propagación de la onda
depende del punto en el que ésta se evalúa. A la izquierda de x = 0.5 la velocidad es positiva, alcanzando
un máximo en x = 0.25, mientras que a la derecha de x = 0.5 la velocidad es negativa, alcanzado el mı́nimo
en x = 0.75. Recordar que en el caso de la ecuación de ondas lineal, la perturbación se mueve con velocidad
c constante en todos los puntos.
Esta diferencia de velocidades producirá inevitablemente una discontinuidad en x = 0.5 en un tiempo
caracterı́stico del orden de la unidad. Este tiempo se obtiene tras darse cuenta de que tanto la longitud
caracterı́stica (longitud del dominio) como velocidad caracterı́stica (velocidad máxima) son orden unidad.
Vamos a estudiar con cierto detalle este proceso.

1 of 6
Figure 1: Condición inicial considerada en la solución numérica de la ecuación de Burgers.

Figure 2: Evolución de la solución numérica, ecuación de Burgers.

• Comportamiento de la solución antes de generarse la discontinuidad: Como se ha dicho antes, en un


tiempo caracterı́stico del orden de la unidad la solución de la ecuación no lineal comenzará a deformarse
antes de generarse la solución discontinua. En las tres primeras figuras de 2 se muestra
R 1 dicho proceso de
deformación en función del tiempo. Este proceso se realiza con la condición de que 0 udx es constante.
Para ver que esto es ası́, basta con integrar la ecuación de onda (1) en el dominio,
Z 1 Z 1 Z 1 Z 1 2
@u @u @u @u /2
dx + u dx = 0 ! dx + dx = 0 !
0 @t 0 @x 0 @t 0 @x
Z Z
d 1 u2 1 d 1
udx + =0! udx = 0 .
dt 0 2 0 dt 0

En la penúltima expresión hemos utilizado que u es cero en x = 0 y x = 1. Es


R 1 decir, la transformación
que se realiza antes de generarse la discontinuidad se hace cumpliendo que 0 udx es constante.
• En el momento que se genera la discontinuidad la solución se amortigua por viscosidad numérica
(últimas tres figuras de 2). En ese caso (tal y como muestran las figuras) la solución puede modelizarse
de la siguiente manera:

u(x, t) = ↵(t)x si x < 0.5 y u(x, t) = ↵(t)(x 1) si x > 0.5

2 of 6
Notar que con la definición realizada se cumple que u(0, t) = 0 y u(1, t) = 0.
Introduciendo el modelo de solución anterior en la ecuación (1) (por ejemplo, cuando x < 0.5) se tiene
que,
@u @u d↵ d↵
+u =0!x + x↵2 = 0 ! = ↵2 .
@t @x dt dt
La solución de la ecuación anterior es directa,
Z ↵ Z t
d↵ 1 ↵ ↵0
2
= dt . ! = (t t0 ) ! ↵ =
↵0 ↵ t0 ↵ ↵0 1 + ↵0 t

En el último paso hemos asumido que t0 = 0. Introduciendo esta expresión en u(x, t) = ↵(t)x tenemos
que,
↵0 x
u= , cuando x < 0.5 .
1 + ↵0 t
Como se puede ver la solución cumple la condición de contorno u(0, t) = 0. Una expresión análoga
se puede obtener en la región x > 0.5, teniendo en cuenta que en ese caso la condición de contorno a
cumplir es que u(1, t) = 0, en ese caso tenemos que,

↵0 (x 1)
u= , cuando x > 0.5 .
1 + ↵0 t

Es evidente en las soluciones anteriores que existe una discontinuidad en x = 0.5. En la región izquierda,
cuando x tiende a 0.5 se tiene que u = 0.5↵/(1 + ↵0 t) mientras que en la región derecha, cuando x
tiende a 0.5 se tiene que u = 0.5↵/(1 + ↵0 t).
Sin embargo, si hacemos lo mismo con u2 , vemos que no existe diferencia cuando nos aproximamos a
0.5 desde la izquierda o la derecha.
Esto significa que mientras que la formulación no conservativa, dada por la ecuación (1) existe una
discontinuidad en el término no no lineal, en la formulación conservativa dada por,

@u @ u2 /2
+ =0. (2)
@t @x
el flujo f = u2 /2 es continuo en la discontinuidad. Esto significa que mientras que la derivada @x u es
infinita, la derivada @x f no lo es. Por esta razón debemos discretizar la formulación conservativa de la
ecuación (2) en vez de la no conservativa (1).

Por otro lado, tal y como se dijo en el caso del problema lineal, en este tipo de problemas debemos
introducir o un modelo de viscosidad artificial, o como caso particular un modelo upwinding en el cuál, a la
hora de calcular las derivadas espaciales se tome la información desde donde nos llega la información. Esto
significa que el modelo más sencillo que podemos utilizar a la hora de resolver numéricamente la ecuación
de Burgers es el siguiente:
duj 1 u2j u2j 1
+ = 0 , si uj > 0 ,
dt 2 x
duj 1 u2j+1 u2j
+ = 0 , si uj < 0 ,
dt 2 x
donde hemos aplicando el método de las lı́neas en la ecuación (2) y aproximando la derivada espacial con el
esquema upwinding.
A continuación se muestra un código escrito en Python en el que se resuelve numéricamente la ecuación
de onda no-lineal utilizando el esquema upwinding descrito en esta sección. En los exámenes no se realizan
preguntas sobre este tipo de códigos. Puse el ejemplo para que veáis cómo se materializa la programación
de este tipo de esquemas.

3 of 6
1 ## Non l i n e a r e q u a t i o n
im po rt numpy a s np
3 from m a t p l o t l i b im por t p y p l o t a s p l t
im po rt time , s y s
5
d e f plot1D ( nx , l x , u , title ):
7
fig = plt . figure ()
9 plt . p l o t ( np . l i n s p a c e ( 0 , l x , nx ) , u ) ;
plt . xlim ( 0 , l x )
11 plt . x l a b e l ( ’ $x$ ’ )
plt . y l a b e l ( ’ $u$ ’ )
13 plt . title ( title )
plt . ylim (( 1 ,1))
15 plt . show ( )

17 d e f main ( ) :

19 ## variable declarations
lx = 1.0 # domain l e n g t h
21 nx = 200 # number o f nodes
dx = l x / ( nx 1) # d i s t a n c e between nodes
23 nt = 200 # number o f t i m e s t e p s
dt = 0.001 # time s t e p
25 c = 1.0 # wavespeed

27 print ( ’ domain l e n g t h = ’ , lx )
print ( ’ number o f nodes = ’ , nx )
29 print ( ’ dx = ’ , dx )
print ( ’ time s t e p = ’ , dt )
31 print ( ’ f i n a l time = ’ , dt ⇤ nt )
print ( ’ wavespeed = ’ , c)
33
u = np . o n e s ( nx ) # i n i t i a l i z e u = 1
35 un = np . o n e s ( nx )

37 f o r i i n r a n g e ( 0 , nx ) : #l o o p i n p o s i t i o n s
x = i ⇤dx
39 u [ i ] = np . s i n ( 2 ⇤np . p i ⇤x )

41 t i t l e = ’ 1D Non l i n e a r C o n v e c t i o n I n i t i a l condition ’
plot1D ( nx , l x , u , t i t l e )
43
f o r n i n r a n g e ( nt ) : # l o o p i n time
45 un = u . copy ( )
f o r i i n r a n g e ( 1 , nx 1): # l o o p i n p o s i t i o n s
47 i f un [ i ] > 0 :
u [ i ] = un [ i ] dt / dx / 2 . 0 ⇤ ( un [ i ] ⇤un [ i ] un [ i 1] ⇤un [ i 1])
49 else :
u [ i ] = un [ i ] dt / dx / 2 . 0 ⇤ ( un [ i +1] ⇤un [ i +1] un [ i ] ⇤un [ i ] )
51
p r i n t ( ’ Time = ’ , ” { : . 2 e } ” . f o r m a t ( dt ⇤n ) )
53
t i t l e = ’ 1D Non l i n e a r C o n v e c t i o n S o l u t i o n a t time ’ + s t r ( dt ⇤ nt )
55 plot1D ( nx , l x , u , t i t l e )

57 ## program e x e c u t i o n
main ( )
Listing 1: Código que resuelve la ecuación de Burgers con un esquema upwinding

4 of 6
A. Teorema de Godunov
Antes de formular el teorema de Godunov vamos a definir el concepto de monotonı́a de las funciones, y para
ello en primer lugar necesitamos definir la función variación total de la solución.
Dada una función u(x, t), solución por ejemplo de la ecuación de onda lineal, se define la función varia-
cional total de u como,
Z L
@u(x, t)
T V (t) = dx .
0 @x
Donde L es el dominio computacional. Dados los nodos xj de la malla, se puede sustituir la integral anterior
como la suma en j del valor del integrando en dichos nodos j multiplicado por la distancia entre dos nodos
consecutivos, es decir, por x. En ese caso se tiene que,
X @u
T V (t) = x.
j
@x xj

Utilizando un esquema upwinding para discretizar la derivada espacial del sumatorio se tiene que,
X |uj uj 1|
T V (t) = x.
j
x

Esta función es la suma de todos los saltos que se producen entre dos nodos consecutivos. Suponiendo que
tenemos un problema lineal, el valor de la función T V debe mantenerse constante en el tiempo. A lo sumo,
y si integramos numéricamente, dicha función deberı́a disminuir por viscosidad numérica, aplanándose las
discontinuidades. Esta propiedad se conoce como condición de monotonı́a.
Se dice que un esquema numérico es monótono si para dos tiempos consecutivos cualesquiera, tn y
tn+1 = tn + t, se cumple que,
T V (tn+1 )  T V (tn ) .
El teorema de Godunov nos dice que dado un esquema numérico lineal, en la presencia de discontinuidades
los esquemas de alto orden (orden espacial mayor o igual que 2) no son monótonos. Esto significa que se
generan oscilaciones numéricas espúreas como la representada en la figura 3 en x ⇡ 0.8.

Figure 3: Campo de velocidad en las mismas condiciones. En el primer caso (figura izquierda) el esquema
en la discontinuidad es de bajo orden y no se producen oscilaciones espúreas. En el segundo caso (figura
derecha) el esquema es de alto orden en la discontinuidad y se producen unas perturbaciones numéricas en
las proximidades de ésta. Dichas discontinuidades se propagaran a lo largo del dominio, pudiendo crecer en
el tiempo en función de cómo se elija el esquema temporal.

Por esa razón, y siempre y cuando trabajemos con esquemas lineales, se debe aplicar un esquema de bajo
orden en presencia de discontinuidades (por ejemplo el modelo de viscosidad artificial basado en µ2 ) y un
modelo de alto orden en regiones donde no existen discontinuidades (por ejemplo el modelo de viscosidad
artificial basado en µ4 el cuál era orden dos). De esta manera se reduce la viscosidad numérica en las regiones
donde no existe discontinuidades y se evitan oscilaciones numéricas espúreas cerca de las discontinuidades.
Ver figura 4. En el tema de volúmenes finitos estudiaremos como cambiar de un modelo de bajo orden a
uno de alto orden en tiempo de simulación. Para finalizar existen dos alternativas a la hora de capturar
ondas de choque. En estas regiones, el flujo es fundamentalmente no viscoso, produciéndose cambios bruscos
y discontinuidades de las variables; presión, temperatura, densidad o velocidad. Esto numéricamente es
complicado y para ello existen dos metodologı́as, en las cuáles no vamos a entrar porqué va más allá del
alcance de este curso. Las metodologı́as son:

5 of 6
Figure 4: Rango de aplicación de los modelos de viscosidad artificial. En las regiones donde la solución es
suave (no existen discontinuidades) se utilizan modelos de viscosidad artificial de alto orden; por ejemplo el
modelo µ4 . En las regiones donde existen discontinuidades, y para cumplir con la condición de monotonı́a
(evitar oscilaciones espúreas), se deben utilizar modelos de viscosidad artificial de bajo orden; por ejemplo
el modelo µ2 . El código debe ser capaz de detectar en qué región está y utilizar el modelo adecuado.

• Métodos shock capturing: En este caso las ondas de choque se capturan numéricamente introduciendo
viscosidad numérica en el esquema. Al hacerlo las ondas de choque se difuminan ligeramente, desa-
parece la discontinuidad y éstas se representan en unos 4 o 5 nodos (tı́picamente). Este esquema es
menos preciso que el siguiente esquema, sin embargo es más fácil de programar por lo que se utiliza en
la mayorı́a de los códigos existentes.
• Métodos shock fitting: En este caso las ondas de choque se introducen matemáticamente en las sim-
ulaciones (por ejemplo usando las relaciones de Rankine–Hugoniot). De esta forma las ondas pueden
verse como condiciones de contorno del problema. Este método es más preciso que el anterior, pero es
extremadamente difı́cil de utilizar en problemas bi- y tridimensionales.

6 of 6

También podría gustarte