Ir al contenido

EDP y diferencias finitas

Una ecuación diferencial parcial (EDP) relaciona una función de varias variables, por ejemplo u(x, y) o u(x, t), con sus derivadas parciales. Modela calor, difusión, fluidos, ondas y potenciales gravitacionales o eléctricos (lámina 2).

ElípticaLaplace, Poisson∂²u/∂x² + ∂²u/∂y² = Sestado de equilibrio:no hay tiempo→ se itera hasta convergerParabólicacalor, difusión∂u/∂t = D ∂²u/∂x²evoluciona en el tiempo(1.ª derivada en t)→ un paso usa el anteriorHiperbólicaonda, tsunami∂²u/∂t² = c² ∂²u/∂x²evoluciona en el tiempo(2.ª derivada en t)→ usa t y t − 1

Cómo leerlo: la diferencia que importa en paralelo es si aparece el tiempo. Las elípticas no lo tienen: se itera hasta que la solución converge. Las parabólicas e hiperbólicas avanzan paso a paso en el tiempo, y ese avance no se puede paralelizar (lámina 31): solo se reparte el espacio.

De la derivada a la resta: diferencias finitas (láminas 4, 7–8)

Sección titulada «De la derivada a la resta: diferencias finitas (láminas 4, 7–8)»

Idea: la derivada es una pendiente. En una malla con separación h, la aproximas restando valores vecinos.

DerivadaAproximaciónError
Primera (hacia adelante)(ui+1 − ui) / hO(h)
Primera (centrada)(ui+1 − ui−1) / 2hO(h²)
Segunda (centrada)(ui+1 − 2ui + ui−1) / h²O(h²)

Salen de la serie de Taylor: si sumas u(x₀+h) y u(x₀−h), los términos de orden impar se cancelan y queda u(x₀+h) + u(x₀−h) = 2u(x₀) + h²·u″(x₀) + O(h⁴). Al despejar u″ sale la fórmula de la segunda derivada.

Ecuación de Laplace (equilibrio de temperatura): ∂²u/∂x² + ∂²u/∂y² = 0.

  1. Sustituir cada segunda derivada por su diferencia finita (con Δx = Δy = h):

    (ui+1,j − 2ui,j + ui−1,j)/h² + (ui,j+1 − 2ui,j + ui,j−1)/h² = 0

  2. Multiplicar por h² y juntar términos:

    ui+1,j + ui−1,j + ui,j+1 + ui,j−1 − 4ui,j = 0

  3. Despejar ui,j: ui,j = ¼ · (suma de los 4 vecinos).

  4. Frontera: si un vecino está en el borde, su valor es conocido y pasa al lado derecho (lámina 15): −4u2,4 + u3,4 + u2,3 + u2,5 = −u1,4.

Una ecuación por punto interior: con N×N puntos hay N² ecuaciones con N² incógnitas (en 3D con 1000³ puntos, 10⁹ ecuaciones, lámina 24). Nadie resuelve eso por eliminación gaussiana: se itera.

i,ji−1i+1j−1j+1rojo = frontera (valor conocido)Cada punto interior = promedio de sus 4 vecinosu[i][j] = 0.25 · ( uold[i−1][j] + uold[i+1][j] + uold[i][j−1] + uold[i][j+1] )viene de ∂²u/∂x² + ∂²u/∂y² = 0 con diferencias finitas:u(i+1,j) + u(i−1,j) + u(i,j+1) + u(i,j−1) − 4u(i,j) = 0m = 5 operaciones por punto · N² puntos · k iteracionesT(N) = k · m · N²

Cómo leerlo: el punto naranja se recalcula con los 4 celestes. Este patrón fijo de vecinos se llama stencil de 5 puntos. Como cada punto solo depende de vecinos cercanos, el problema se reparte bien: un proceso solo necesita los puntos de sus bordes que tienen otros procesos.

Poisson: Laplace con fuente (láminas 23–25)

Sección titulada «Poisson: Laplace con fuente (láminas 23–25)»

∇²u = S(x, y). La fuente S es la masa, la carga o una fuente de calor. Con el mismo procedimiento:

uk+1i,j = ¼ · ( uki+1,j + uki−1,j + uki,j+1 + uki,j−1 − h²·Si,j )

Tipos de frontera: Dirichlet fija el valor (u = f en el borde). Neumann fija la derivada normal (∂u/∂n = g, por ejemplo “no sale calor”).

JacobiGauss-Seidel
Qué vecinos usatodos de la iteración anterior (u_old)los ya actualizados en esta iteración
Memoriados arreglos (u y u_old)uno solo
Iteraciones para convergermásmenos (≈ la mitad)
Paralelismotodos los puntos a la vezel punto i espera al i−1: secuencial. Hay que reordenar (rojo-negro, conocimiento general)

Criterio de parada: diff = max |uk+1 − uk| < ε. En paralelo, cada proceso calcula su máximo local y luego se hace un MPI_Allreduce con MPI_MAX.

Complejidad: T(N) = k · m · N² (lámina 26)

Sección titulada «Complejidad: T(N) = k · m · N² (lámina 26)»
  • N: puntos por dimensión (N² en total en 2D).
  • m: operaciones por punto (≈ 5 en el stencil: 3 sumas, 1 multiplicación y la diferencia del error).
  • k: número de iteraciones hasta converger.

La trampa es que k no es constante: crece con N. Medido con laplace_sec.cpp (Laplace 1D, tolerancia 10⁻⁶):

NIteraciones de Jacobi hasta converger
506 066
10021 980
20077 614

Al duplicar N las iteraciones se multiplican por ≈ 3.6. Es decir, k crece casi como N². El motivo: el valor de la frontera avanza un punto por iteración, y además cada recorrido solo reduce un poco el error.

1. Discretiza la ecuación del calor 1D ∂u/∂t = D·∂²u/∂x² con diferencia hacia adelante en el tiempo (paso Δt) y centrada en el espacio (paso h). Escribe uin+1.

Ver solución

Izquierda: (uin+1 − uin)/Δt. Derecha: D·(ui+1n − 2uin + ui−1n)/h².

Despejando: uin+1 = uin + (D·Δt/h²)·(ui+1n − 2uin + ui−1n).

Es el mismo stencil de 3 puntos, así que se paraleliza igual que Laplace 1D: 1 valor de halo por lado y por paso. Conocimiento general: este esquema explícito solo es estable si D·Δt/h² ≤ ½.

2. Una malla 3D de 512³ puntos, m = 8 operaciones por punto y k = 2000 iteraciones. ¿Cuántas operaciones hace Jacobi? Si la máquina hace 10 GFLOP/s, ¿cuánto tarda?

Ver solución

T = k·m·N³ (en 3D hay N³ puntos) = 2000 · 8 · 512³ = 2000 · 8 · 134 217 728 ≈ 2.15·10¹² operaciones.

A 10·10⁹ op/s: 2.15·10¹² / 10¹⁰ ≈ 215 s. Por eso estos problemas se reparten entre muchos procesos.

Autoevaluación

0/6 correctas · 0 respondidas
1. ¿Qué tipo de EDP es la ecuación de Laplace?
2. En una EDP parabólica u(x,t), ¿qué se puede paralelizar?
3. El stencil de Laplace 2D calcula u[i][j] como…
4. ¿Por qué Jacobi se paraleliza mejor que Gauss-Seidel?
5. En T(N) = k·m·N², ¿qué pasa con k al aumentar N en Jacobi?
6. Una frontera de Neumann fija…

Fuente ·U5.1 Algoritmos-EDP.pdf (láminas 2–31) · U5.1 Algoritmos-EDP-code/laplace_sec.cpp