Disco estable para simulación de cuerpo NNN

Quiero simular una Galaxia de norte partículas que tengo que generar primero. Lo que he hecho hasta ahora no conduce al resultado que quiero ver. Probablemente cometí un error y no lo veo. Aquí viene lo que hice:

1) Generar partículas uniformemente distribuidas dentro de un círculo unitario con masa metro i = 1 / norte :

Por cada punto que hago:

   R = 1;
   radius = R*sqrt(rand(0,1));
   phi = rand(0,2*pi);
   m = 1/N;
   x = radius*cos(phi);
   y = radius*sin(phi);

Haciendo eso obtengo la siguiente distribución:

t=0

2) Generar velocidades tales que el círculo no explote o implosione:

Quiero generar algo donde F Gravedad = F Centrífugo

Desde F Centrífugo = metro v 2 r y F Gravedad = GRAMO METRO ( r ) metro r 2 Puedo igualar ambas ecuaciones y obtener la velocidad v

METRO ( r ) es la masa dentro del radio r . puedo escribir METRO nene = π R 2 y METRO = π r 2 (densidad ρ = 1 ). De esas ecuaciones obtengo METRO ( r ) = r 2 R 2 METRO nene . Ahora puedo volver a ponerlo en v y obten:

v = GRAMO r 2 METRO nene r R 2

Desde METRO nene = GRAMO = R = 1 Yo obtengo:

v = r

Entonces, para cada punto que hago:

   velocity = sqrt(radius);
   v_x = -velocity*sin(phi);
   v_y = velocity*cos(phi);

Entonces obtengo el siguiente resultado:

t=1

t=4

t=7 t=10

Ok, parece que el círculo explota de alguna manera. Las partículas del centro se mueven hacia el exterior. ¿Es mi cálculo para v mal, o simplemente no funciona para mi propósito? ¿Necesito otra distribución de velocidad? Al final, para grandes t , No puedo ver que se formen brazos espirales ni ninguna otra estructura. Lo intenté norte = 4000 y norte = 50000 . ¿Necesito más partículas? Hice algo mal?

el phipara las velocidades debe elegirse al azar (uniforme en [ 0 , 2 π ) ).
@AccidentalFourierTransform Hago eso. Tomo lo mismo phique ya tomo para la posición de la partícula. ¿Es eso incorrecto? ¿ Tengo que generar phiuna segunda vez para la velocidad?
sí, eso está mal, y sí, necesitas generar phiuna segunda vez para la velocidad (¡trata de pensar por qué!).
@AccidentalFourierTransform No veo por qué tengo que tomar otro phi. Esto significaría que la velocidad no es tangencial. ¿Y eso no significaría que obtendría un círculo de puntos que se mueven aleatoriamente en lugar de una rotación de cuerpo rígido?
Al tomar lo mismo phitanto para la posición como para las velocidades, está haciendo que todas las velocidades sean radiales (es decir, sin componente tangencial). Esta es la razón de la "explosión exterior" inicial.
@AccidentalFourierTransform Pero en cambio tengo una "explosión interna". Dado que las partículas se mueven aleatoriamente, la esfera 2D colapsa. No hay forma de que pueda formar una estructura en espiral. ¿O estoy equivocado? lo acabo de probar con norte = 3000 y parece un cúmulo de estrellas sin ninguna estructura.
Si la distribución de ϕ v es uniforme, entonces el grupo inicial no tiene momento angular. Es posible que desee probar con no uniforme ϕ v .

Respuestas (1)

Su lógica es correcta, incluida la elección de la velocidad tangencial como

 x = r*cos(phi);
 y = r*sin(phi);
 vx=-v*sin(phi);
 vy= v*cos(phi);

Donde (intentaste) poner ven equilibrio centrífugo. Sin embargo, la atracción gravitacional de un disco es diferente de la de una esfera, en particular, su suposición de que la aceleración es igual a GM(r)/r^2 es incorrecta. La mejor manera de encontrar la forma correcta es obtener las fuerzas de su modelo de N-cuerpo y tomar el promedio azimutal de la aceleración radial en intervalos radiales. Su modelo inicial debe satisfacer el teorema del virial , es decir, la energía cinética debe ser -0,5 veces la energía gravitacional.

Pero, ¿cómo calculaste las fuerzas y cómo integraste las ecuaciones de movimiento? Debe evitar las fuerzas exactas de N-cuerpos, ya que divergen en los encuentros cercanos y, en su lugar, utilizan fuerzas suavizadas . Básicamente, agrega para cada interacción partícula-partícula un desplazamiento vertical constante h, la longitud de ablandamiento . Ajústelo a aproximadamente 0,1 veces el radio.

La integración de tiempo se realiza mejor utilizando el integrador de salto. Por ejemplo

for(I:particles)
    I.vel += 0.5*tau*I.acc
    I.pos += tau*I.vel
time += tau
compute_accelerations(particles);
for(I:particles)
    I.vel += 0.5*tau*I.acc

para integrar un paso de tiempo de longitud tau. Por supuesto, debe calcular las aceleraciones iniciales antes del primer paso. El tamaño del paso taudebe ser lo suficientemente pequeño para que la energía total se conserve en una parte en 1000 o más.

Usé un algoritmo de árbol con un integrador Runge Kutta. ¿Mi enfoque es correcto si uso una esfera (3D)?
Puede asignar velocidades tangenciales en equilibrio a partículas en una esfera, pero la esfera no rotará y no es un disco. Usaste suavizante? ¿Con qué precisión decidiste cuándo abrir una celda con el código de árbol? -- ¿Quizás no tuviste cuidado con eso y te encontraste con el "error de las galaxias explosivas"?
Ya simulé una esfera de Plummer y obtuve buenos resultados. Así que creo que hay un problema con la condición inicial de la velocidad. Intenté tu idea pero obtuve peores resultados. La esfera explota. ¡Pero al principio hay algunos brazos en espiral visibles! Tal vez hice algo mal. ¿Podría llevar a cabo su idea y mostrar cómo obtendría la velocidad correcta para dicho sistema? Eso seria genial.
Desafortunadamente, no proporcionó suficiente información. ¿Cómo/cuáles son las aceleraciones? ¿Qué tan bien se conservan la energía total, el momento lineal y angular?