Un mapa conservativo que modela cualitativamente la estructura de anillos de Saturno. Pablo Santamaría v0.2 (Noviembre 2011) Resumen En este trabajo presentamos un mapa conservativo que permite modelar, al menos cualitativamente, la estructura de anillos de Saturno, poniendo en evidencia que cuerpos de masa despreciable pueden efectivamente organizarse en estructuras anulares con brechas entre los mismos debido a la perturbación gravitatoria del satélite Mimas sobre sus órbitas en torno a Saturno. 1. Introducción Los anillos de Saturno consisten en un gran número de pequeñas partículas orbitando al planeta en órbitas próximas al ecuador del mismo. Estos anillos son muy delgados comparados con su extensión radial, puesto que se extienden sobre un diámetro de más de 250 000 km con un espesor de no más de 1.5 km. Las partículas que los conforman tienen tamaños entre los pocos micrómetros a varios metros y están constituidas principalmente de hielo de agua. En escala planetaria, el sistema de anillos presenta una estructura que tiene la apariencia de una serie concéntrica de aros con una estructura radial destacada por “brechas” entre los mismos, pero poca o ninguna variación azimutal observable1 . La tabla 1 muestra la clasificación éstandar de los mismos. Entre los anillos A y B existe una gran brecha conocida como división de Cassini. Este “ordenamiento” radial de las partículas es debido principalmente al resultado de la interacción gravitacional con los satélites de Saturno más próximos. En particular, el satélite Mimas, debido a su gran masa comparada con el resto de los satélites internos, juega un rol importante en la organización de la estructura: principalmente su acción gravitacional desestabiliza las órbitas de las partículas en el borde externo del anillo B definiendo, entonces, al mismo (allí una partícula completa dos órbitas por cada órbita de Mimas). La interacción gravitacional de satélites próximos o embebidos en los anillos es quien, en última instancia, origina la rica e intricada estructura que se observa en las fotografías obtenidas por la sonda Voyager o, más recientemente, por la Cassini. 1 Es importante aclarar que las brechas no son zonas enteramente vacías, sino con una densidad de cuerpos menor que sus zonas vecinas. 1 Anillo Distancia Ancho D C B División de Cassini A F G E 66.9 74.7 92.0 7.6 17.3 25.6 122.2 140.2 170.0 181.0 14.6 0.5 5.0 302.0 Tabla 1. Clasificación de los anillos de Saturno. Las distancias son medidas desde el centro de Saturno al borde interno del anillo y en unidades de 103 km. Datos extraídos de la Saturnian Rings Fact Sheet[1]. 2. Construcción del modelo Un modelo de la estructura real de los anillos de Saturno es ciertamente una cuestión compleja. Ahora bien, partiendo de aproximaciones simples, en un marco idealizado del sistema, es posible obtener un modelo que describe cualitativamente tal estructura, poniendo en evidencia que cuerpos de pequeña masa pueden efectivamente organizarse en una estructura de anillos con brechas entre los mismos. Este modelo, desarrollado por Fröyland[2], considera un sistema que consiste del planeta Saturno y su satélite Mimas, junto con un conjunto de partículas de masa despreciable orbitando entre Mimas y la superficie del planeta. La órbita de Mimas se asume fija y circular a una distancia del centro de Saturno igual a su distancia media σ = 185.7 × 103 km. Todas las partículas, de masas iguales m despreciable respecto de la masa de Saturno, se asumen en órbitas coplanares con la de Mimas y cuasi-circulares a diversas distancias radiales r del centro de Saturno. En efecto, la interacción gravitatoria dominante de Saturno permite asumir que una cualquiera de tales partículas se encuentra en una órbita esencialmente circular en torno a Saturno, pero cuyo radio cambia debido a la interacción gravitatoria de Mimas, concebida entonces como una perturbación a tal órbita circular. En el modelo, la interacción con Saturno es introducida como sigue. La órbita circular de Mimas, de radio σ y período Tσ , es tomada como órbita de referencia, en tanto que el tiempo que tarda Mimas en completar una revolución orbital es tomado como la unidad de tiempo (ésta es, pues, la discretización del tiempo para el mapa a construir). Sea θn el valor, al tiempo n, del ángulo formado por el radio vector de una partícula respecto a una dirección fija. Para la órbita de referencia de Mimas tal ángulo se incrementa en 2π por cada paso temporal, mientras que para una partícula en su órbita circular este ángulo, al tiempo n + 1, está dado por Tσ θn+1 = θn + 2π , (1) Tn donde Tn es el período de la partícula en la n−ésima revolución orbital de Mimas. Ahora bien, de la tercera ley de Kepler se sigue, en virtud de la masa dominante de Saturno, que σ3 Tσ2 = , Tn2 rn3 2 (2) donde rn es la distancia de la partícula al centro de Saturno al tiempo n. Reemplazando (2) en (1) obtenemos la siguiente ecuación para iterar el ángulo: θn+1 = θn + 2π σ rn 3/2 . (3) Por otra parte, el efecto perturbador de Mimas sobre la distancia radial r de una partícula es modelado como sigue. La aceleración radial que la partícula experimenta está dada por r̈ = Fr , m (4) donde Fr es la componente radial de la fuerza gravitatoria entre Mimas y la partícula de masa m. Esta ecuación diferencial puede ser transformada en una ecuación de diferencias finitas considerando la aproximación de diferencia centrada para la derivada segunda de r: r̈ ≈ r(t + ∆t) − 2r(t) + r(t − ∆t) , (∆t)2 (5) donde ∆t es un cierto intervalo temporal. Entonces, promediando sobre un período completo Tσ de Mimas, tomando ∆t = Tσ y evaluando el miembro izquierdo de (4) al tiempo n, dicha ecuación conduce a rn+1 − 2rn + rn−1 = f (rn , θn ), (6) donde la función Tσ2 Fr (rn , θn ) , (7) m representa una especie de promedio de la accción gravitatoria de Mimas sobre la distancia radial de la partícula. f (rn , θn ) ≡ Las ecuaciones (3) y (6) conducen así a un mapa del modelo definido por las ecuaciones: θ σ 3/2 , rn = 2rn − rn−1 + f (rn , θn ). n+1 rn+1 = θn + 2π (8) Introduciendo una nueva variable zn = rn−1 , tales equaciones pueden ser reescritas en la forma: 3/2 σ θ = ξ(θ , r , z ) = θ + 2π , n+1 n n n n rn (9) rn+1 = η(θn , rn , zn ) = 2rn − zn + f (rn , θn ), z n+1 = ζ(θn , rn , zn ) = rn , las cuales definen un mapa no lineal tridimensional el cual resulta conservativo independientemente de la forma funcional de f (rn , θn ). En efecto, es fácil verificar que el determinante de la matriz jacobiana de la transformación definida por estas ecuaciones es igual a la unidad: ξ θ η θ ζθ ξr ξz 1 ξr 0 ηr ηz = ηθ ηr −1 = 1. ζr ζz 0 1 0 3 (10) Así pues, el mapa preserva el volumen en el espacio (θ, r, z) y, en consecuencia, es conservativo. La dependencia funcional de f con sus argumentos es una función complicada, aunque es claro que ésta tiene que ser periódica en θn y debe incrementarse conforme la distancia a Mimas |rn − σ| decrece, puesto que, en definitiva, deviene de la interacción gravitatoria entre Mimas, de masa Mσ , y la partícula en consideración. Esto nos permite escribir, f (rn , θn ) = A g(θn ) , (rn − σ)2 (11) siendo A una constante con dimensiones de volumen, dada por A ≡ GMσ Tσ2 = 4π 2 σ 3 Mσ , MS (12) siendo G la constante universal de gravitación, y donde, en la última expresión, hemos aplicado la tercera ley de Kepler a la órbita de Mimas: Tσ2 4π 2 = , σ3 GMS (13) siendo MS la masa de Saturno órdenes de magnitud mayor que la de Mimas. Por otra parte, la dependencia angular de f está ahora contenida en g(θn ), la cual es una función periódica de θn y, más aún, por simetría, una funcion par de θn . La derivación de la forma explícita de la dependencia de g con su argumento requiere de desarrollos en serie con las técnicas usuales de la Mecánica Celeste. Sin embargo, aquí, para propósitos de un modelo simple, tomaremos la dependencia funcional más simple que satisface las condiciones anteriores, a saber, g(θn ) = cos θn . (14) En consecuencia, las ecuaciones que definen el mapa de nuestro modelo son: 3/2 σ θn+1 = θn + 2π , rn cos θn , rn+1 = 2rn − rn−1 + A (rn − σ)2 (15) donde la constante A es, en principio, calculable según la ecuación (12). Siendo MS = 5.68 × 1026 kg y expresando las distancias en 103 km, A ' 17. (16) Ahora bien, debido a las simplificaciones introducidas en la expresión de f y en el modelo en general, la constante A puede ser considerada como un parámetro para el mapa cuyo valor determina, en última instancia, la estructura y estabilidad de los anillos, como veremos en la simulaciones presentadas en la siguiente sección. 3. Simulaciones. En nuestra primer simulación, la estructura de anillos es generada para A = 15, un valor próximo a la estimación dada en (16). En la simulación un total de Nbody = 15 partículas son 4 consideradas con condiciones iniciales dadas por θ (j) = 0, 0 r (j) = rint + (j − 1)∆, 0 (17) para cada j = 1, . . . , Nbody . Las distancias radiales iniciales, todas contenidas entre la región delimitada por la superfice de Saturno (a RS = 60.4 × 103 km del centro del mismo) y la órbita de Mimas (a σ = 185.7 × 103 km), se encuentran separadas en ∆ = 5 × 103 km, siendo (1) la distancia radial de la órbita más interna r0 = rint ≡ 70 × 103 km y, en consecuencia, la (15) de la órbita más externa, r0 = 70 + 14 ∗ 5 = 140 mil km. Para cada una de las partículas, el mapa es iterado en un total de Niter = 40 000 veces. Nótese que como la ecuación de diferencias para la componente radial es de segundo orden (j) (j) no es suficiente especificar su valor inicial r0 , sino que debe darse también el valor de r1 . La forma más simple de proceder consiste en tomar (j) (j) r1 = r0 , (18) (j) en tanto que el valor correspondiente al ángulo θ1 está dado por la ecuación correspondiente del mapa: σ 3/2 (j) (j) θ1 = θ0 + 2π (j) . (19) r0 De aquí en más, las iteracciones para cada partícula j proceden según el modelo dado por la ecuación (15): σ 3/2 (j) (j) θ = θ + 2π , n−1 (j) n rn−1 (20) (j) r (j) = 2r (j) − r (j) + A cos θn−1 , n−1 n−2 (j) n (rn−1 − σ)2 para n = 2, 3, . . . , Niter . Puede ocurrir que una partícula ya sea escape al infinito o bien colisione con Saturno, sin contribuir, por lo tanto, a la estructura estable de los anillos. De este modo, durante las iteracciones, una partícula es removida de la simulación tan pronto la distancia radial sea menor al radio RS de Saturno o mayor que un límite superior prefijado en 5 RS . Para cada partícula j, después de la n−ésima iteración, las coordenadas rectangulares x(j) = r (j) cos θ (j) , n n n yn(j) = rn(j) sen θn(j) , (21) son calculadas. Esto permite graficar en el plano x − y la estructura resultante de la simulación. La implentación computacional del procedimiento discutido es dada en el apéndice A como un programa escrito en Fortran 95, mientras que en el apéndice B se presenta una implementación con interface gráfica escrita en Perl/Tk. La figura 1 ilustra el resultado de la simulación para A = 15. Como vemos, el modelo produce una estructura de anillos con brechas entre los mismos claramente visibles donde no hay partículas presentes. Tales brechas se extienden alrededor de las regiones correspondientes 5 200 2:1 150 3:1 4:1 100 50 0 -50 -100 -150 -200 -200 -150 -100 -50 0 50 100 150 200 Figura 1. Orbitas en el plano x − y de 15 partículas iteradas independientemente según el modelo propuesto (ecuaciones (15)) con el parámetro A = 15 × 109 km3 . Las unidades de los ejes son expresadas en 103 km. La órbita de Mimas, indicada por la circunferencia exterior punteada, es σ = 185.7 × 103 km y el radio de Saturno, indicado por la circunferencia punteada interior, es RS = 60.4 × 103 km. Las localizaciones nominales de las resonancias de movimiento medio con Mimas 2:1, 3:1 y 4:1 son también señaladas. a conmensurabilidades de períodos con Mimas, especificamente en las resonancias (internas) de movimientos medios de primer orden 2:1, 3:1 y 4:1 (ver el apéndice C para una somera discusión de la terminología), como puede verse de sus localizaciones nominales: anom = 3 117.0 × 10 km 89.2 × 103 km 73.7 × 103 km resonancia 2:1, resonancia 3:1, resonancia 4:1. (22) La figura 2 muestra una serie de simulaciones para las mismas condiciones iniciales, pero variando el valor del parámetro A del modelo. Las simulaciones muestran valores en el rango 15 ≤ A . 2000 originan una estructura de anillos similar, pero con bordes más definidos conforme A se incrementa (recordemos que A es proporcional a la razón de la masa del satélite Mimas respecto de la de Saturno). Si el parámetro A se incrementa más allá de este rango, con A ≈ 3000 el anillo exterior desaparece y mayores incrementos conducen a la desaparición de los sucesivos anillos. 6 200 200 150 150 100 100 50 50 0 0 -50 -50 -100 -100 -150 -150 -200 -200 -150 -100 -50 0 50 100 150 200 -200 -200 -150 -100 (a) A = 15 200 150 150 100 100 50 50 0 0 -50 -50 -100 -100 -150 -150 -50 0 0 50 100 150 200 50 100 150 200 (b) A = 200 200 -200 -200 -150 -100 -50 50 100 150 200 (c) A = 2000 -200 -200 -150 -100 -50 0 (d) A = 3000 Figura 2. Simulaciones para las mismas condiciones indicadas en la figura 1 pero para diversos valores del parámetro A del modelo, según se indica en cada gráfico, en 109 km3 . 7 200 200 150 150 100 100 50 50 0 0 -50 -50 -100 -100 -150 -150 -200 -200 -150 -100 -50 0 50 100 150 200 -200 -200 -150 -100 (e) A = 4000 -50 0 50 100 150 200 (f) A = 5000 Figura 2. (Cont.) Simulaciones para las mismas condiciones indicadas en la figura 1 pero para diversos valores del parámetro A del modelo, según se indica en cada gráfico, en 109 km3 . Referencias y lecturas complementarias [1] Saturnian Rings Fact Sheet: http://nssdc.gsfc.nasa.gov/planetary/factsheet/ satringfact.html. [2] Jan Fröyland, Introduction to Chaos and Coherence, Institute of Physics Publishing, 1992. [3] Harve Gould, Jan Tobochnik, Wolfang Christian, An Introduction to Computer Simulation Methods, Third Edition, Pearson, 2007. [4] Richard H. Enns, George C. McGuire, Nonlinear Pysics with Mathematica for Scientists and Engineers, Birkhäuser, 2001. [5] Larry Esposito, Planetary Rings, Cambridge University Press, 2006. [6] Ellis D. Miner, Randii R. Wessen and Jeffrey N. Cuzzi, Planetary Ring Systems, Springer, 2007. A. Implementación del modelo en Fortran 95 A continuación presentamos el código en Fortran 95 que permite efectuar las iteraciones del mapa propuesto para los anillos de Saturno. Asignadadas las condiciones iniciales para un conjunto de partículas dado y el parámetro A del modelo, la ejecución del programa imprime sobre la salida estandar, para cada partícula aún ligada al sistema al tiempo final, las coordenadas rectangulares (x, y) en cada iteración. 8 Descargar el código PROGRAM rings IMPLICIT NONE ! ----------------------------------------------------------------------! Parámetros del modelo ! ----------------------------------------------------------------------! Unidad de distancia: 10^3 km ! ----------------------------------------------------------------------REAL, PARAMETER :: sigma = 185.7 ! Distancia media de Mimas a Saturno REAL, PARAMETER :: rs = 60.4 ! Radio de Saturno REAL, PARAMETER :: re = 5.0*rs ! Distancia máxima de ligadura al sistema ! ----------------------------------------------------------------------! Parámetros de la simulación ! ----------------------------------------------------------------------REAL, PARAMETER :: a = 15.0 ! Parámetro de la fuerza radial INTEGER, PARAMETER :: nbody = 15 ! Número de partículas REAL, PARAMETER :: ri = 70.0 ! Mínima distancia radial REAL, PARAMETER :: delta = 5 ! Incremento en la distancia radial INTEGER, PARAMETER :: niter = 4000 ! Número de iteraciones en el mapa ! ----------------------------------------------------------------------! Variables del programa ! ----------------------------------------------------------------------REAL, PARAMETER :: pi = 4.0*atan(1.0) REAL, DIMENSION(0:niter) :: tt REAL, DIMENSION(0:niter) :: rr INTEGER :: count_body INTEGER :: count_points INTEGER :: j,n LOGICAL :: escribir ! ----------------------------------------------------------------------! Bloque de procesamiento ! ----------------------------------------------------------------------count_body = 0 ! Número de partículas que sobreviven count_points = 0 ! Número total de puntos en las órbitas ! ----------------------------------------------------------------------! Iterar para cada una de las nbody partículas ! ----------------------------------------------------------------------DO j = 1, nbody ! -------------------------------------------------------------------! Asignar condiciones iniciales ! -------------------------------------------------------------------tt(0) = 0.0 rr(0) = ri + delta*REAL(j-1) ! -------------------------------------------------------------------! Considerar una primera iteración en el mapa ! -------------------------------------------------------------------tt(1) = MOD(tt(0) + 2.0*pi*(sigma/rr(0))**1.5,2*pi) rr(1) = rr(0) ! -------------------------------------------------------------------! Iterar en el mapa. Si la distancia radial resulta menor al radio ! de Saturno o mayor que el límite superior especificado no ! continuar iterando y descartar la órbita de tal partícula 9 ! -------------------------------------------------------------------escribir = .TRUE. DO n = 2, niter tt(n) = MOD(tt(n-1) + 2.0*pi*(sigma/rr(n-1))**1.5,2*pi) rr(n) = 2.0*rr(n-1) - rr(n-2) + a*COS(tt(n-1))/(rr(n-1)-sigma)**2 IF ( rr(n) < rs .OR. rr(n) > re ) THEN escribir = .FALSE. EXIT ENDIF ENDDO ! -------------------------------------------------------------------! Escribir los datos de la órbita si la partícula está dentro de los ! límites establecidos ! -------------------------------------------------------------------IF ( escribir ) THEN WRITE(*,*) ’# Partícula = ’, j count_body = count_body + 1 DO n = 0, niter WRITE(*,*) rr(n)*COS(tt(n)), rr(n)*SIN(tt(n)) count_points = count_points + 1 END DO WRITE(*,*) WRITE(*,*) ENDIF ! -------------------------------------------------------------------ENDDO ! ----------------------------------------------------------------------WRITE(*,*) ’# Número de final partículas = ’, count_body WRITE(*,*) ’# Número total de puntos = ’, count_points ! ----------------------------------------------------------------------STOP ! ----------------------------------------------------------------------END PROGRAM rings B. Implementación del modelo en Perl/Tk En nuestra implementación en Fortran 95 del modelo, para cada simulación tenemos que cambiar los datos necesarios dentro del programa, compilar éste, ejecutarlo y, finalmente, graficar la salida de datos obtenida. Sería mucho más conveniente poder disponer de una interfaz gráfica que permita ingresar los datos necesarios y obtener directamente en pantalla las órbitas de la simulación. Esto permite explorar en forma más rápida y cómoda el espacio de parámetros y condiciones iniciales. A continuación presentamos una implementción del modelo en Perl/Tk cuya interface gráfica resultante se ilustra en la figura 3. La misma permite ingresar el número de partículas del modelo y el número total de iteraciones a considerar. Además, permite indicar si las distancias radiales iniciales serán asignadas al azar entre la superficie de Saturno y la órbita de Mimas y si tal generación al azar se desea reiniciar en cada simulación. En el gráfico obtenido en el plano x − y, la órbita de cada partícula es coloreada con un color único. Finalmente, el programa permite también exportar como archivo gráfico .eps el resultado obtenido. 10 Figura 3. Interface gráfica para el mapa que modela los anillos de Saturno. 11 Descargar el código #!/usr/bin/perl use warnings; use strict; use Tk; use use use use use use use my my my my my constant constant constant constant constant constant constant $A $NITER $NBODY $AZAR $RESEED SIZE SIGMA RS RE RI DELTA PI => => => => => => => 600; # Tamaño en pixels del canvas 185.7; # Distancia media de Mimas a Saturno 60; # Radio de Saturno 50*RS; # Distancia máxima de ligadura al sistema 70.0; # Mínima distancia radial 5; # Incremento en la distancia radial 3.14159265358979; # Obviamente el número pi = 200; # Parámetro del mapa por omisión = 4000; # Número de iteraciones en el mapa por omisión = 15; # Número de partículas por omisión = 0; # Condiciones iniciales al azar (no por omisión) = 0; # Reiniciar semilla (no por omisión) # Crear ventana principal my $mw = new MainWindow; $mw -> title(’Anillos’); # Cambiar el look & feel $mw -> optionAdd(’*font’, ’-*-arial-normal-r-*-*-*-120-*-*-*-*-*-*’); $mw -> optionAdd(’*background’, ’#eeeeee’); #$mw -> optionAdd(’*borderWidth’, 1); # Crear frame 1 (contiene al canvas) my $frame1 = $mw -> Frame(); my $canvas = $frame1 -> Canvas(-relief => ’flat’, -width => SIZE, -height => SIZE, -background => ’white’); # Pack $frame1 -> pack( -side => ’top’, -fill => ’both’); $canvas -> pack( -side => ’top’, -fill => ’both’); # Crear frame 2 (contiene controladores de la simulación) my $frame2 = $mw -> Frame(-borderwidth => 2, -relief => ’groove’); # Pack $frame2 -> pack(-side => ’top’, -fill => ’both’); # Control para el número de partículas my $lf0 = $frame2 -> Labelframe(-text => ’Partículas’); my $e0 = $lf0 -> Entry(-textvariable => \$NBODY, -width => 12, -background => ’white’, -validate => ’key’, -validatecommand => sub { 12 my ($proposed, $changes, $current, $index, $type) = @_; return not $proposed =~ m/[^\d]/g; }); # Pack $lf0 $e0 -> pack(-side => ’left’, -padx => 5, -pady => 5, -anchor => ’n’); -> pack(-padx => 5, -pady => 5); # Control para la generación de condiciones iniciales my $lf1 = $frame2 -> Labelframe(-text => ’Condiciones iniciales’); my $cb2 = $lf1 -> Checkbutton(-text => ’Reiniciar semilla’, -variable => \$RESEED, -state => ’disabled’); my $cb1 = $lf1 -> Checkbutton(-text => ’Al azar’, -variable => \$AZAR, -command => sub { if ( $cb2 -> cget(-state) eq ’disabled’) { $cb2 -> configure(-state => ’normal’); } else { $cb2 -> configure(-state => ’disabled’); } }); # Pack $lf1 -> pack(-side => ’left’, -padx => 5, -pady => 5, -anchor => ’n’); $cb1 -> pack(-side => ’top’, -anchor => ’w’); $cb2 -> pack(-side => ’top’, -anchor => ’w’); # Control para el número de iteraciones my $lf2 = $frame2 -> Labelframe(-text => ’Iteraciones’); my $e1 = $lf2 -> Entry(-textvariable => \$NITER, -width => 12, -background => ’white’, -validate => ’key’, -validatecommand => sub { my ($proposed, $changes, $current, $index, $type) = @_; return not $proposed =~ m/[^\d]/g; }); # Pack $lf2 -> pack(-side => ’right’,-padx => 5, -pady => 5, -anchor => ’n’); $e1 -> pack(-padx => 5, -pady => 5); # Control para el parámetro del mapa my $lf3 = $frame2 -> Labelframe(-text => ’Parámetro’); my $e2 = $lf3 -> Entry(-textvariable => \$A, -width => 12, -background => ’white’, -validate => ’key’, -validatecommand => sub { my ($proposed, $changes, $current, $index, $type) = @_; return not $proposed =~ m/[^\d]/g; }); # Pack $lf3 -> pack(-side => ’right’, -padx => 5, -pady => 5, -anchor => ’n’); $e2 -> pack(-padx => 5, -pady => 5); 13 # Frame 3 (botones de inicio, exportar y salida) my $frame3 = $mw -> Frame(-borderwidth => 2, -relief => ’flat’); my $bstart = $frame3 -> Button(-text => ’Iniciar’, -command => \&make_map ); my $bexport = $frame3 -> Button(-text => ’Exportar’, -command => \&export_map ); my $bquit = $frame3 -> Button(-text => ’Salir’, -command => sub { exit }); # Pack $frame3 -> pack(-side => ’top’, -fill => ’both’); $bstart -> pack(-side => ’left’, -padx => 5, -pady => 5 ); $bquit -> pack(-side => ’right’,-padx => 5, -pady => 5); $bexport -> pack(-side => ’right’,-padx => 5, -pady => 5 ); # Dibujar objetos iniciales sobre el canvas draw_saturn(); draw_mimas(); MainLoop; sub make_map { $bstart -> configure(-state => ’disabled’); $bexport-> configure(-state => ’disabled’); $mw -> configure(-cursor=> ’watch’); # Borrar todos los objetos presentes de una simulación # anterior y re-dibujar a Saturno y Mimas $canvas -> delete($canvas -> find(withtag => ’all’)); draw_saturn(); draw_mimas(); # Crear condiciones iniciales y colores # para cada una de las particulas y # posicionarlas en el canvas my (@colors,@t0,@r0); srand(5) unless ($RESEED); foreach my $i ((0..($NBODY-1))) { $colors[$i] = sprintf(’#%02x%02x%02x’, int(rand(256)), int(rand(256)), int(rand(256))); if ($AZAR) { $t0[$i] = $r0[$i] = } else { $t0[$i] = $r0[$i] = } 2*PI*rand(1); RI + (SIGMA - RI)*rand(1); 0.0; RI + DELTA*$i; 14 my $x = SIZE/2 + $r0[$i]*cos($t0[$i]); my $y = SIZE/2 - $r0[$i]*sin($t0[$i]); $canvas -> createText($x,$y,-fill => $colors[$i], -text=> ’*’); } # Forzar la actualización del canvas $mw -> update(); # Preparar el canvas para la iteración del mapa: # borrar condiciones iniciales y re-dibujar Saturno y Mimas $canvas -> delete($canvas -> find(withtag => ’all’)); draw_saturn(); draw_mimas(); # Iterar sobre cada una de las partículas foreach my $i ((0..($NBODY-1))) { # Coordenadas polares de la órbita my (@tt,@rr); # Asignar condiciones iniciales $tt[0] = $t0[$i]; $rr[0] = $r0[$i]; # Considerar una primera iteración en el mapa $tt[1] = $tt[0] + 2.0*PI*(SIGMA/$rr[0])**1.5; $rr[1] = $rr[0]; # Iterar el mapa my $dibujar = 1; foreach my $n ((2..$NITER)) { $tt[$n] = $tt[$n-1] + 2.0*PI*(SIGMA/$rr[$n-1])**1.5; $rr[$n] = 2.0*$rr[$n-1] - $rr[$n-2] + $A*cos($tt[$n-1])/($rr[$n-1] - SIGMA)**2; if ( $rr[$n] < RS or $rr[$n] > RE ) { $dibujar = 0; # La partícula no forma más parte del sistema last; } } # Dibujar los puntos de la órbita si la partícula # se encuentra ligada al sistema if ($dibujar) { foreach my $n ((0..$NITER)) { my $x = SIZE/2 + $rr[$n]*cos($tt[$n]); my $y = SIZE/2 - $rr[$n]*sin($tt[$n]); $canvas -> createText($x,$y,-fill => $colors[$i], -text=>’.’); } } else { warn "Partícula ", $i+1, " eliminada.\n"; } } 15 # Actualizar el estado de las ventanas $bstart -> configure(-state => ’normal’); $bexport-> configure(-state => ’normal’); $mw -> configure(-cursor=> ’left_ptr’); } sub draw_saturn { $canvas->createOval(SIZE/2 - RS, SIZE/2 - RS, SIZE/2 + RS, SIZE/2 + RS, -fill => ’yellow’, -outline => ’yellow’, -width => 0); } sub draw_mimas { $canvas->createOval(SIZE/2 SIZE/2 SIZE/2 SIZE/2 } + + SIGMA, SIGMA, SIGMA, SIGMA); sub export_map { my $file = $mw->getSaveFile(-defaultextension => ’.eps’, -filetypes => [ [’EPS Files’, ’.eps’], [’PS Files’, ’.ps’], [’All Files’, ’*’]], -initialfile => ’anillos.eps’, ); if (defined $file) { $mw -> configure(-cursor=> ’watch’); $mw -> idletasks; $canvas -> postscript(-file => $file,-colormode=>’color’); $mw -> configure(-cursor=> ’left_ptr’); } } C. Resonancias de movimientos medios En esencia, una resonancia de movimientos medios ocurre cuando la razón de los períodos orbitales de dos cuerpos son conmensurables, es decir, es aproximadamente igual a la razón de dos enteros pequeños. Consideremos en primer lugar las resonancias que introduce un cuerpo de masa m0 al perturbar el movimiento de un cuerpo de masa despreciable m en una órbita interior a m0 . Si despreciamos las (lentas) frecuencias de precesión de los nodos y pericentros de las órbitas una resonancia de movimientos medios ocurre cuando para dos 16 enteros particulares j1 y j2 se satisface la relación: j1 n0 + j2 n ' 0. (23) siendo n = 2π/T , n0 = 2π/T los movimientos medios de las órbitas keplerianas de m y m0 , respectivamente, en torno al cuerpo central. Tomando j1 = p + q, j2 = −p donde p y q son enteros positivos, podemos escribir la conmesurabilidad de movimientos medios involucrada como n p+q = , (24) n0 p y decimos que m se encuentra en una resonancia interna p + q : p de m0 , siendo q el orden de la resonancia. Esta conmensurabilidad de movimientos medios implica, a su vez, una relación entre los semiejes de las órbitas de m y m0 . Asumiendo que, tanto las masas m y m0 son despreciables frente a la del cuerpo central (m, m0 m0 ), se sigue de la tercera ley de Kepler: n02 a03 = Gm0 , n2 a3 = Gm0 , (25) y por lo tanto a = a0 0 2/3 n n = p p+q 2/3 . (26) Debido a la dependencia con el semieje mayor a0 , la resonancias de movimientos medios están espacialmente localizadas. Definimos la localización nominal anom de la resonancia p + q : p como el valor del semieje mayor del cuerpo m que satisface la relación: anom = p p+q 2/3 a0 . En el caso particular de resonancias de primer orden, q = 1. 17 (27)