Traducción del original en coreano escrito por el autor. Leer el original (한국어)
Darle su propio τ a la conducción dejó el calentamiento viscoso atrapado en Pr = 1 — el cuasi-equilibrio g* en LB de dos poblaciones
El trabajo viscoso dentro del flujo de energía debe relajarse al mismo ritmo que el esfuerzo; si g solo se arrastra hacia el equilibrio, el calentamiento viscoso queda en su valor de Pr = 1 para cualquier Pr.
Pr cambió, ¿por qué la temperatura no?#
Considérese un canal de Couette. La pared inferior está en reposo y la superior se desliza a velocidad . Ambas paredes tienen la misma temperatura. Aun así, el centro se calienta. La viscosidad convierte energía cinética en calor (calentamiento viscoso). El aumento de temperatura en el centro es exactamente proporcional al número de Prandtl (Pr, cociente entre difusión de cantidad de movimiento y difusión de calor).
Este artículo trata de cómo cambiar Pr en un modelo térmico de Boltzmann en red (LB, Lattice Boltzmann). Si la distribución se divide en dos conjuntos con tiempos de relajación propios, Pr parece fácil de ajustar. Al ejecutarlo, la conducción cambia, pero el calentamiento viscoso no se mueve de su valor de Pr = 1. Aquí se explica por qué y se presenta la solución de una línea: el cuasi-equilibrio .
Al mover el control de Pr cambia la separación entre el reloj del esfuerzo y el de la conducción, y también a qué curva se pega el flujo de trabajo viscoso.
Con Pr = 0.71, la curva naranja (esfuerzo) y la verde discontinua (flujo de trabajo viscoso en el modelo g*) permanecen superpuestas. La roja (modelo simple de dos τ) sigue el reloj morado de la conducción y se separa del esfuerzo. Al llevar Pr a 1, las cuatro curvas se reducen a dos.
Un solo conjunto de poblaciones solo conoce Pr = 1#
El operador de colisión BGK lleva todos los momentos fuera de equilibrio hacia el equilibrio a una misma tasa . Esfuerzo y flujo de calor se relajan con el mismo reloj. Por eso viscosidad y conductividad quedan atadas al mismo . De ahí sale Pr = 1 en la ecuación BGK continua.
El aire tiene Pr = 0.71 y el agua cerca de 7. Un modelo fijado en Pr = 1 ni siquiera reproduce la razón de espesores de capa límite. Hay dos remedios. Uno relaja solo el momento del flujo de calor a otra tasa dentro del operador de colisión (MRT, tipo Shakhov). El otro entrega la energía a una distribución separada. Este artículo sigue el segundo camino.
Dos conjuntos: f lleva masa y cantidad de movimiento, g la energía total#
En un modelo de dos poblaciones, transporta densidad y cantidad de movimiento, y transporta la energía total (). Las ecuaciones cinéticas son:
fija la viscosidad (viscosidad cinemática ) y la conducción (difusividad térmica ). es el equilibrio local y el cuasi-equilibrio.
Las dos tasas se relacionan con las difusividades así:
es el cuadrado de la velocidad del sonido de la red. Con y , .
El código fija . Entonces y . Las cuatro entradas de la tabla salen de ahí. Pr = 0.5 da . Pr = 0.71 suma , así que . Pr = 1 da . Pr = 2 da . Como , el calor a Pr = 2 se relaja con y la viscosidad queda en . El trabajo viscoso pertenece al reloj lento. El modelo simple de dos τ lo monta en el rápido. Solo la fila Pr = 1 tiene las dos tasas iguales, y ambas columnas marcan 1.000. Si se mira solo esa fila, el error permanece callado.
El trabajo viscoso se esconde en el flujo de energía#
En este modelo de juguete, fija solo tres momentos. Orden cero: . Primer orden (flujo de energía): . Segundo orden: . La parte fuera de equilibrio del primer momento, , es el flujo de calor real.
En el primer orden de la expansión de Chapman–Enskog (que resuelve el no equilibrio para número de Knudsen pequeño), . Aquí se divide en dos partes:
El primer término es la conducción de Fourier. El segundo es la materia prima del trabajo viscoso . Tiene exactamente la forma del esfuerzo fuera de equilibrio de , . El problema es el que lo acompaña.
Si solo se arrastra hacia el equilibrio con , ambas partes salen con . El coeficiente del trabajo viscoso escala con en lugar de . La conducción es correcta, pero el calentamiento viscoso se queda en su valor de Pr = 1. Es la curva roja de la primera viz.
Cuasi-equilibrio g*: atar solo el flujo al reloj del esfuerzo#
La solución es una línea en la definición de . Comparte todos los momentos con salvo el flujo de energía:
es el flujo de cantidad de movimiento real medido en y su valor de equilibrio.
Al tomar el primer momento de la ecuación cinética se obtiene la actualización de un paso de los dos momentos fuera de equilibrio:
se relaja con , así que la conducción sigue a . Al mismo tiempo, si , en el paso siguiente se mantiene . La parte de trabajo viscoso viaja con el reloj del esfuerzo . El cálculo de Chapman–Enskog dice lo mismo: el trabajo viscoso con se cancela con el término y queda solo .
Con el término desaparece. El modelo se reduce a relajación simple y Pr = 1. es una corrección que solo actúa cuando Pr . Una red térmica de una sola población dejaba Pr pegado en 1 aunque τ subiera. Es el mismo muro que las dos constantes que quedaron trabadas. Partir las poblaciones no sale de ese muro si el reloj del trabajo viscoso no se mueve con ellas. La pregunta sigue siendo qué momento se relaja a qué tasa.
Código: el mismo canal de Couette, dos tipos de g#
La solución analítica es sencilla. La ecuación de energía estacionaria es . Con un perfil de velocidad lineal, la temperatura es una parábola:
El máximo en el centro es . El código siguiente usa D2Q9 con una sola celda periódica en y resuelve solo a lo largo de . Las paredes usan la extrapolación fuera de equilibrio de Guo. Para simplificar, usa un equilibrio isotérmico y la energía se acopla en un solo sentido. En un Couette de bajo Mach () la presión es uniforme, de modo que esta simplificación no altera el resultado.
import numpy as np
# D2Q9, una celda periódica en x → arreglos 1D en y
cx = np.array([0, 1, 0, -1, 0, 1, -1, -1, 1])
cy = np.array([0, 0, 1, 0, -1, 1, 1, -1, -1])
w = np.array([4/9] + [1/9]*4 + [1/36]*4)
CV, T0 = 1.0, 1.0
def feq_lattice(rho, ux):
cu = cx[:, None]*ux
return w[:, None]*rho*(1 + 3*cu + 4.5*cu**2 - 1.5*ux**2)
def geq_energy(E, rho, ux):
p = rho*(E/rho - 0.5*ux**2)/CV # p = rho*T
qx = (E + p)*ux
cu = cx[:, None]*ux
return w[:, None]*(E + 3*cx[:, None]*qx + 4.5*E*cu**2 - 1.5*E*ux**2)
def couette_heating(Pr, quasi, N=21, U=0.1, tau_mu=1.0, steps=8000):
om_mu = 1/tau_mu
om_ka = 1/(0.5 + (tau_mu - 0.5)/Pr)
rho = np.ones(N); ux = np.zeros(N)
E = rho*CV*T0*np.ones(N)
f = feq_lattice(rho, ux); g = geq_energy(E, rho, ux)
uw = np.zeros(N); uw[-1] = U
for _ in range(steps):
rho = f.sum(0); ux = (cx[:, None]*f).sum(0)/rho; E = g.sum(0)
fe = feq_lattice(rho, ux); ge = geq_energy(E, rho, ux)
Pxy = ((cx*cy)[:, None]*(f - fe)).sum(0)
f = f + om_mu*(fe - f)
if quasi: # g*: cuasi-equilibrio con u·(P - P_eq) sumado al flujo de energía
gs = ge + w[:, None]*3*cy[:, None]*(ux*Pxy)
g = g + om_mu*(ge - g) + (om_ka - om_mu)*(gs - g)
else: # dos τ simple: g solo se relaja al equilibrio con ω_κ
g = g + om_ka*(ge - g)
for k in range(9):
f[k] = np.roll(f[k], cy[k]); g[k] = np.roll(g[k], cy[k])
for wall, nb in ((0, 1), (N-1, N-2)): # paredes con extrapolación fuera de equilibrio
r = f[:, nb].sum(); un = (cx*f[:, nb]).sum()/r; En = g[:, nb].sum()
fn = feq_lattice(np.array([r]), np.array([un]))[:, 0]
gn = geq_energy(np.array([En]), np.array([r]), np.array([un]))[:, 0]
Ew = r*(CV*T0 + 0.5*uw[wall]**2)
f[:, wall] = feq_lattice(np.array([r]), np.array([uw[wall]]))[:, 0] + f[:, nb] - fn
g[:, wall] = geq_energy(np.array([Ew]), np.array([r]), np.array([uw[wall]]))[:, 0] + g[:, nb] - gn
rho = f.sum(0); ux = (cx[:, None]*f).sum(0)/rho
T = (g.sum(0)/rho - 0.5*ux**2)/CV
theta = (T - T0)/(U**2/(8*CV))
return theta.max(), ux
print(" Pr exact 2-tau(g_eq) g* quasi-eq")
for Pr in (0.5, 0.71, 1.0, 2.0):
a, _ = couette_heating(Pr, False)
b, u = couette_heating(Pr, True)
print(f"{Pr:4.2f} {Pr:6.3f} {a:9.3f} {b:9.3f}")
print(f"u(mid)/U = {u[10]/0.1:.4f}") Pr exact 2-tau(g_eq) g* quasi-eq
0.50 0.500 1.000 0.498
0.71 0.710 1.000 0.710
1.00 1.000 1.000 1.000
2.00 2.000 1.000 1.997
u(mid)/U = 0.5000Ahora el mismo código corre en el navegador. Ambos modelos avanzan lado a lado en el mismo canal.
Al mover el control de Pr, el pico verde sigue el valor analítico discontinuo Pr, mientras el rojo queda pegado en 1.000. Cambiar o tampoco aparta del 1 el rojo. Conviene probar Pr = 3, que no aparece en el bloque de salida.
Lo que dice el 1.000#
La columna del modelo simple de dos τ marca 1.000 sea cual sea Pr. No es ruido, es estructura. El coeficiente del trabajo viscoso escala con , y la conductividad también. En su cociente, , se cancela exactamente. Para aire (Pr = 0.71) se sobrestima el aumento de temperatura entre las paredes en 41 %. Para un fluido con Pr = 7, como el agua, se subestima siete veces.
Con y , el denominador es . El real del aire es . El modelo simple de dos τ da . En la red eso es 1.0009 frente a 1.0013. Con dos decimales, ambos salen 1.00. A Pr = 7 el aumento real es y el modelo da . 1.009 frente a 1.001. Solo separa 1 de 7.
La columna de marca 0.498, 0.710, 1.000 y 1.997. 0.498 queda 0.4 % por debajo de 0.500, y 1.997 queda 0.15 % por debajo de 2. 0.710 coincide con el exacto. En 21 nodos, el resto es la pared y la malla. La velocidad central es idéntica porque ambos modelos comparten el mismo . El error de temperatura no aparece en el campo de velocidad.
En compresible, f también recibe un cuasi-equilibrio#
El de este artículo usó un equilibrio isotérmico. En los modelos compresibles de dos poblaciones, también incorpora un cuasi-equilibrio . Los terceros momentos de D2Q9 tienen un defecto: . Cuando la temperatura varía o el Mach crece, ese defecto introduce un término de error en el esfuerzo. lleva un tensor de presión que lo corrige. repara el flujo de cantidad de movimiento; añade el trabajo viscoso al flujo de energía.
El principio es el mismo. Equilibrio y cuasi-equilibrio comparten las cantidades conservadas (densidad, cantidad de movimiento, energía total). Solo difiere el momento que necesita su propia tasa de relajación. Dónde poner el término de presión de un fluido no ideal es, al final, el sitio de ese momento.
La línea que hay que revisar cuando un código LB térmico fija τκ aparte#
Hay que abrir el paso de colisión de la distribución de energía y ver dónde multiplica . Si todo se arrastra hacia el equilibrio con , el calentamiento viscoso queda en su valor de Pr = 1. Basta una corrida de Couette para comprobarlo. Si no sigue a Pr, falta el término de cuasi-equilibrio.
Validar solo con deja el error en silencio. Una comprobación térmica de LB necesita un caso de calentamiento viscoso con Pr . La temperatura que se difunde en un fluido en reposo no pone en marcha este término. La analogía de Reynolds entre fricción y calor parte de que ese cociente queda atado a Pr. Si no sigue a Pr, esa premisa ya está rota en la red.
Relacionados
Comparte si te resultó útil.