Un mapa conservativo que modela cualitativamente la estructura de

Anuncio
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)
Descargar