Por Daniel Duque
Igual que con la convección, podemos intentar discretizar la ecuación:
∂u∂t=D∂2u∂x2
o podemos remontarnos a la deducción de la misma
Se suponen cambios de un campo u sólo en la dirección x
El cambio en la cantidad total AΔxui será:
ddt(AΔxui)=Φi−1/2−Φi+1/2
Antes los flujos por las caras venían dados por:
Φi−1/2=Acui−1/2
Φi+1/2=Acui+1/2
(Recordemos que había que aproximar
ui−1/2
y ui+1/2, que son
desconocidas, y vimos con python el
"centered diff", el "upwind" y el
"downwind")
Ahora los flujos vienen de una ley física, la ley de Fick:
Φ=−D∂u∂x.
Lo que expresa es que la difusión tiende a "allanar" los campos, creando un flujo desde zonas con valores altos a otras con valores bajos.
(En realidad, Fick es para concentración; para temperatura se llama "ley de Fourier".)
Así pues, parece natural
Φi−1/2≈−ADui−ui−1/2Δx
Φi+1/2≈−ADui+1−uiΔx
Los cuales, enchufados en
ddt(AΔxui)=Φi−1/2−Φi+1/2…...
... LLevan a:
duidt=Dui−1−2ui+ui+1Δx2
Lo cual, por supuesto, lleva en el continuo a la ecuación tan conocida:
∂u∂t=D∂2u∂x2
Ya sólo queda discretizar el tiempo. Por ejemplo, explícitamente:
un+1i=uni+DΔtΔx2(uni−1−2uni+uni+1)
O, implícitamente:
un+1i=uni+DΔtΔx2(un+1i−1−2un+1i+un+1i+1)
... O incluso métodos mixtos, como el famoso de Crank-Nicolson ˉui=(un+1i+uni)/2
un+1i=uni−DΔtΔx2(ˉui−1−2ˉui+ˉui+1)
Además, siempre aparece un nuevo "número de Courant difusivo" (en realidad, "número difusivo"):
Co:=DΔtΔx2
Hala, a implementar todo esto