Estoy tratando de crear un modelo (muy) simple de difusión de calor a lo largo de una barra cerrada (por ejemplo, un anillo) con una condición inicial en la que un segmento está más caliente que el resto.
Estoy usando la siguiente fórmula:
con siendo la temperatura, posición, y siendo el coeficiente de transmisión dado por la conductividad térmica , densidad y capacidad térmica .
Me di cuenta de que cuando acercarse a uno el sistema se vuelve inestable, con oscilaciones crecientes que producen temperaturas extremas por encima y por debajo del rango de temperatura inicial.
Aquí está el código R de una simulación para una barra larga de 100 segmentos con un segmento a 10 °C y el resto a 1 °C. El alfa está configurado para tener una conductividad térmica de una décima parte de . Esta configuración no produce inestabilidad y los resultados parecen realistas:
library(ggplot2)
v <- c(rep(1, 49), 10, rep(1, 50))
out <- data.frame()
for (i in 1:20) {
d2T <- c(v[2:length(v)], v[1]) + c(v[length(v)], v[1:(length(v) - 1)]) - 2 * v
# dx = dt = 1
d2X <- 1
dT <- 1
out <- bind_rows(out, data.frame(
val = v,
x = 1:length(v),
grad = d2T,
iter = i
))
v <- v + .1 * d2T/d2X
}
print(ggplot(out, aes(x, val)) +
geom_line(alpha = .5, show.legend = F) +
geom_point(aes(color = grad)) +
scale_color_viridis_c(option = 'A') +
facet_wrap(~ iter) +
theme_minimal()) +
labs(x = 'x', y = 'T', color = 'd2T/d2x')
Pero si se establece en .5 o más, observamos tendencias inestables.
El modelo se vuelve totalmente irreal como se acerca a 1, con valores mucho más allá del rango de temperatura inicial de 1-10°C. Esto es :
Supongo que estropeé el modelo o es un efecto secundario de la pobre discretización de un proceso continuo. ¿Qué estoy haciendo mal?
El criterio de estabilidad de Von Neumann o Fourier falla para el esquema explícito de diferencias finitas en este contexto . el paso del tiempo debe ser más pequeño que para suprimir inestabilidades, donde corresponde a la discretización espacial y es la difusividad térmica. Esta es la razón por la cual los pasos de unidad de tiempo y distancia tienden a fallar con .
Si está limitado en este aspecto, considere usar un método implícito de solución de diferencias finitas, que siempre es estable (pero más intensivo desde el punto de vista computacional).
Chet Miller