Condiciones de frontera para la ecuación de advección discretizadas por un método de diferencia finita

14

Estoy tratando de encontrar algunos recursos para ayudar a explicar cómo elegir las condiciones de contorno cuando se utilizan métodos de diferencias finitas para resolver PDE.

Todos los libros y notas a los que tengo acceso actualmente dicen cosas similares:

Las reglas generales que gobiernan la estabilidad en presencia de límites son demasiado complicadas para un texto introductorio; requieren maquinaria matemática sofisticada

(A. Iserles Un primer curso en el análisis numérico de ecuaciones diferenciales)

Por ejemplo, cuando intente implementar el método de salto de 2 pasos para la ecuación de advección:

uin+1=uin1+μ(ui+1nui1n)

usando MATLAB

M = 100; N = 100;

mu = 0.5;

c = [mu 0 -mu];
f = @(x)(exp(-100*(x-0.5).^2));

u  = zeros (M, N);
x = 1/(M+1) * (1:M);

u(:,1) = f(x);
u(:,2) = f(x + mu/(M+1));

for i = 3:N
    hold off;
    u(:,i) = conv(u(:,i-1),c,'same') + u(:,i-2);
    plot(x, u(:,i));
    axis( [ 0 1 0 2] )
    drawnow;
end

La solución se comporta bien hasta que alcanza el límite, cuando de repente comienza a comportarse mal.

¿Dónde puedo aprender a manejar condiciones límite como esta?

Simon Morris
fuente

Respuestas:

12

La respuesta de Sloede es muy completa y correcta. Solo quería agregar algunos puntos para que sea más fácil de entender.

Básicamente, cualquier ecuación de onda tiene una velocidad y dirección de onda inherentes. Para una ecuación de onda unidimensional: la velocidad de la onda es la constante a que determina no solo la velocidad a la que se propaga la información en el dominio sino también su dirección. Si a > 0 , la información va de izquierda a derecha y si a < 0 es al revés.

tut+untuX=0 0
unun>0 0un<0 0

Para el método de salto de rana, cuando discretiza las ecuaciones se obtiene: o: u n i =u n - 2 i +μ(u n - 1 i + 1 -u n - 1 i - 1 )dondeμ=-aΔt/Δx. En su caso,μ>0

tuyonorte-tuyonorte-22Δt+untuyo+1norte-1-tuyo-1norte-12ΔX=0 0
tuyonorte=tuyonorte-2+μ(tuyo+1norte-1-tuyo-1norte-1)
μ=-unΔt/ /ΔXμ>0 0que se traduce en una ola que va hacia la izquierda. Ahora, si lo piensa, una onda que viaja hacia la izquierda, solo necesitará una condición de límite en el límite derecho, ya que todos los valores a la izquierda se actualizan a través de sus vecinos derechos. De hecho, especificar cualquier valor en el límite izquierdo es inconsistente con la naturaleza del problema. En ciertos métodos, como el simple viento ascendente, esto se soluciona automáticamente ya que el esquema también involucra solo a los vecinos correctos en su plantilla. En otros métodos, como la rana de salto, debe especificar algún valor "correcto".

Esto generalmente se realiza mediante extrapolación desde el dominio interno para encontrar el valor faltante. Para problemas multidimensionales y no canónicos, esto implica encontrar todos los vectores propios del flujo jacobiano para determinar qué partes del límite realmente necesitan condiciones de límite y qué partes requieren extrapolación.

GradGuy
fuente
Físicamente, ¿qué significaría usar esta ecuación con una condición de contorno en el lado izquierdo y derecho?
Frank
5

Respuesta general
Su problema es que no establece (ni siquiera especifica) las condiciones de contorno, su problema numérico está mal definido.

En general, hay dos formas posibles de especificar las condiciones de contorno:

  1. tu0 0tu101
  2. Cambie la plantilla numérica para que use solo información interior en el límite.

El camino que tomes depende en gran medida de la física de tu problema. Para los problemas de tipo de ecuación de onda, generalmente se determinan los valores propios del flujo jacobiano para decidir si se necesitan condiciones de contorno externas o si se debe utilizar la solución interior (este método se denomina comúnmente 'viento ascendente').



tuyo-1nortetuyo+1norteyonorte+1yo=1tu0 0nortetu100norte+1tu101norte

tu1nortetu100norte

Puede encontrar una versión modificada de su código fuente a continuación:

M = 100; N = 100;

mu = 0.5;

c = [mu 0 -mu];
f = @(x)(exp(-100*(x-0.5).^2));

u  = zeros (M, N);
x = 1/(M+1) * (1:M);

u(:,1) = f(x);
u(:,2) = f(x + mu/(M+1));

for i = 3:N
    hold off;
    %u(:,i) = conv(u(:,i-1),c,'same') + u(:,i-2);

    % Apply the numerical stencil to all interior points
    for j = 2:M-1
        u(j,i) = u(j,i-2) + mu*(u(j+1,i-1) - u(j-1,i-1));
    end

    % Set the boundary values by interpolating linearly from the interior
    u(1,i) = 2*u(2,i) - u(3,i);
    u(M,i) = 2*u(M-1,i) - u(M-2,i);

    plot(x, u(:,i));
    axis( [ 0 1 0 2] )
    drawnow;
end
Michael Schlottke-Lakemper
fuente
Buena respuesta, y bienvenido a scicomp, Sloede. Una pregunta, normalmente veo "viento arriba" definido como el uso de una plantilla unilateral donde la información se extrae de un solo límite del dominio. ¿Querías decir eso en tu respuesta?
Aron Ahmadia
1
Si, de hecho. Lo siento, si mi respuesta no fue lo suficientemente clara. En general, sin embargo, "hacia arriba" solo significa que tiene en cuenta la dirección del flujo de información. No tiene que significar que descarta un lado de la solución por completo, solo significa que le da preferencia a la parte de la solución que se encuentra en la dirección "viento arriba".
Michael Schlottke-Lakemper
Si crea N = 1000y ejecuta el código un poco más, encontrará que no se comporta como se esperaba.
Simon Morris
La razón de esto es que mi solución de "solución rápida" no es físicamente sólida, y además de eso es bastante sensible a las oscilaciones espurias en la solución. ¡No use esto para cálculos científicos reales!
Michael Schlottke-Lakemper
2

Así que he analizado esto con más detalle, y parece que esto (al menos en los casos básicos que estoy manejando) depende de la velocidad de grupo del método.

El método leapfrog (por ejemplo) es:

tuyonorte+1=tuyonorte-1+μ(tuyo+1norte-tuyo-1norte)

tuknorte=miyo(ζkΔX+ω(ζ)norteΔt)

mi2yoωΔt=1+μmiyoωΔt(miyoζΔX-mi-yoζΔX)

pecado(ωΔt)=μpecado(ζΔX)

reωreζ=cos(ζΔX)1-μ2syonorte2(ζΔX)[-1,1]

Ahora necesitamos descubrir la velocidad del grupo de las condiciones de contorno:

tu1norte+2=tu1norte+μtu2norte+1

Podemos calcular la velocidad del grupo de límites de la siguiente manera:

2yopecado(ωΔt)=μmiyoζΔX

así que para encontrar algunas velocidades de grupo que permiten los límites, necesitamos encontrar:

ω=Cζ

cos(ζΔX)=0 0,μpecado(ζΔX)=2pecado(ζCΔt)

ζ=π2ΔXμ=2pecado(Cμπ2)C[-1,1]μ


tu0 0norte+1=tu1norte[-1,1]

Todavía tengo bastante más que leer sobre esto antes de entenderlo completamente. Creo que las palabras clave que estoy buscando son la teoría GKS.

Fuente de todo esto Notas de A Iserles Parte III


Puede encontrar un cálculo más claro de lo que he hecho aquí: http://people.maths.ox.ac.uk/trefethen/publication/PDF/1983_7.pdf

Simon Morris
fuente
-2

Chicos, soy muy nuevo en este sitio. Quizás este no sea el lugar para preguntar, pero por favor perdóname porque soy muy nuevo aquí :) Tengo un problema extremadamente similar, la única diferencia es la función de inicio que, en mi caso, es una onda cosenoidal. Mi código es este: borrar todo; clc; cierra todo;

M = 1000; N = 2100;

mu = 0,5;

c = [mu 0 -mu]; f = @ (x) 1- cos (20 * pi * x-0.025). ^ 2; u = ceros (M, N); x = 0: (1 / M): 0,05; u (1: longitud (x), 1) = f (x); u (1: longitud (x), 2) = f (x - mu / (M)); x = espacio interior (0,1, M);

para i = 3: N espera;

% Apply the numerical stencil to all interior points
for j = 2:M-1
    u(j,i) = u(j,i-2) - mu*(u(j+1,i-1) - u(j-1,i-1));
end

% Set the boundary values by interpolating linearly from the interior
u(M,i) =  2*u(M-1,i-1) - u(M-2,i-1);

plot (x, u (:, i)); eje ([0 1.5 -0.5 2]) dibujado hacia abajo; % pausa final

Ya existe este código aquí, pero por alguna razón, probablemente relacionada con la onda cosenoidal, mi código falla: / cualquier ayuda sería apreciada :) ¡gracias!

John
fuente
2
¡Bienvenido a SciComp.SE! Deberías hacer de esto una nueva pregunta. (Las respuestas solo están destinadas a, bueno, las respuestas reales.) Si usa el "enlace para hacer su propia pregunta" en la parte inferior (es amarillo oscuro sobre amarillo claro, ciertamente es un poco difícil de ver si no sabe que está allí) , vinculará automáticamente la pregunta a esta. (También puede incluir un enlace a esta pregunta en la suya.)
Christian Clason