Sie sind auf Seite 1von 11

FsicaComputacional

Prctica2

AlgoritmodeVerlet

Esferacargadauniformemente

Prof.JorgeRamnSotoMercado

Ayud.JulioAlbertoLpezSaldvar

RicardoMucioGmez

Se idealizara una esfera cargada por unacantidadbienescogidade cargas,eneste


problema se escogieron 200. Se considerarn de masas y cargas iguales,
distribuidas uniformemente sobre la esfera. Para lo cual se resolver primero el
problema de escoger laposicindeunaciertacantidaddepuntosenlasuperficiede
la esfera de modo que estn bien distribuidos. Despus se usar el algoritmo de
verlet para encontrar sus posiciones variantes con respecto al tiempo debido a la
fuerza Coulombiana que sienten con respecto a las dems, de modo que se pueda
encontrar cul es el tiempo transcurrido entre el radio esfrico inicial y uno final tal
queseadosveceselprimero.


I.

Introduccin

Para distribuir puntos uniformemente sobre la superficie de la esfera nos fijamos


primeramente en coordenadas esfricas ya que es en dichas donde la superficierequerida
es tratada de manera ms natural en el sentido de que particionar intervalos resulte en
particiones ms directas en la superficie esfrica que si esto se hiciese en coordenadas
cartesianas para la misma superficie esfrica. Tomando en cuenta las coordenadas r, ,
donde el radio ser constante siempre en particular r=1(vermos que esta slo es la
condicin inicial y despus crecer por la fuerza de repulsin. No podemos escoger las
distribuciones clsicas de en[0, 2)ydeen[0, ], ya que esto asigna linealmente los
puntos para cada coordenada produciendo un abultamientoenlospolos yportanto,nouna
distribucinuniforme.Dichoestopodemosdefinirlosparmetrosu,ven(0,1)talesque

= 2u(1)
= arcos(2v 1)(2)
cumpliendo as con los intervalos de y y adems conforme al comportamiento de la
funcin arcoseno podemos ver que esta distribuye los puntos de tal modo que evita una
concentracin excesiva en los polos. Se particiona cada intervalo de los parmetros u y v
peronoconlamismaparticinaunques unacombinacinlineal,esdecir,parauparmetro
de , se particiona uniformemente con un nmero natural, en particular un nmero par tal
que su mitad sea otro nmero par, el cual sera el numero de particiones uniformes para v
parmetro de , esto ya que el intervalo de la primer coordenada tiene una medida del
dobledelamedidadelasegundacoordenada.
Hecho esto, hemos obtenido la posicin para cada punto dado por la particin. El nmero
depuntoseselnmerodeparticionessobreuporelnmerodeparticionessobrev.
En los casos en que este resultado es utilizado para un fin mayor por el de una esfera
cargada, estudiada por el mtodo de verlet es necesario tener una representacin de las
coordenadasdelospuntosencoordenadascartesianascomoseverenelprograma.

Construyamos ahora la representacin matemtica del problema de la esfera con cargas


distribuidas uniformemente y encontremos la solucin analtica para el problema del radio
delaspartculasconrespectoaltiempo.

Supongamos un sistema aislado donde la energa se conserva dT + dU = 0 , entonces la


energacinticaypotencialseexpresanmediante
2

T = MR
2 .(3)
1 Q (4)
U = 4
r

Lostrminosdiferencialessonentonces

dT = mdrr(5)
dU =

1 Q
4 r2 dr(6)

Usandolaecuacindeconservacindelaenergatenemosque
Q
mr2r = 4
con = 1(7)
Q
r2dtd ( dtdr ) = 4m

( ) =
r ( ) =
r2d
2

4m (dt) , integrando

dr
dt

Q
4m t

dr
dt

BuscamoslasolucionanaliticadeltiempotranscurridodepasardelradioinicialRalfinal2R
2R

Q
t (dt)
r2 (dr) = 4m

R
7 R3
3

0
Q 2
8m t

porlotanto : t =

56m R3 .(8)

3Q

Es el tiempo quetardaunaesfera,cargadauniformemente,enaumentarsuradioinicialdos
veces.EnpartculaparaelcasodeQ=1,R=1yM=1,talquem=1/200=0.005

t =

56(0.005)

= 0.54149 .

II.

CdigoyDesarrollo
a. Programaqueobtienelaposicindelospuntosenlaesfera

//Iniciodeprogramadepuntosenlaesferauniformementedistribuidos
#include
<stdio.h>
#include
<math.h>

#include
<stdlib.h>

int
main
(){
//Abriremos4archivos,elprimeronospermiteobservarenconjuntoelcomportamientode
nuestrosdatos,lossiguientestrescreanunarchivoconlalistadedatosparala
coordenadax,yoz.
FILE
*
data
=
fopen
(
"sphere1.txt"
,
"w"
);

FILE
*
datax
=
fopen
(
"spherex.txt"
,
"w"
);
FILE
*
datay
=
fopen
(
"spherey.txt"
,
"w"
);
FILE
*
dataz
=
fopen
(
"spherez.txt"
,
"w"
);

//Sedefinenlasvariables
double
tet
,
phi
,
r
;

//coordenadasesfricas

double
x
,
y
,
z
;

//coordenadascartesianas

double
si
,
sj
,
u
,
v
;

//tamaodelasparticionesyparmetrosuyv

int
i
,
pi
,
j
,
pj
;

//contadoresi,jynmerodeparticionesparauyv
r
=
1
;

//Radiodelaesferaigualauno
pi
=
20
;

//nmerodeparticionesparau

pj
=
10
;

//nmerodeparticionesparav
si
=
1.
/
pi
;

//tamanodelasparticiones
sj
=
1.
/
pj;

v
=
0.0;
u
=
0.0;
//calculodelosvaloresparalacoordenadatetha

for
(
i
=
1
;
i
<=
pi
;
i
++){
u
=
i
*
si;

tet
=
2
*
M_PI
*
u;
//Calculodelosvaloresparalacoordenadaphi

for
(
j
=
0
;
j
<=
pj
;
j
++){
v
=
j
*
sj;

phi
=
acos
(
2
*
v

1
);
//cambiodecoordenadasesfericasacartesianas
x
=
r
*
cos
(
tet
)*
sin
(
phi
);
y
=
r
*
sin
(
tet
)*
sin
(
phi
);
z
=
r
*
cos
(
phi
);

//impresiondevaloresensusrespectivosarchivos
fprintf
(
data
,
"%lf%lf%lf%i%lf%lf\n"
,
x
,
y
,
z
,
i
,
tet
,
phi
);
fprintf
(
datax
,
"%lf\n"
,
x
);
fprintf
(
datay
,
"%lf\n"
,
y
);
fprintf
(
dataz
,
"%lf\n"
,
z
);
}
}
fclose
(
data
);

fclose
(
datax
);
fclose
(
datay
);
fclose
(
dataz
);
}

Observando que se abrieron tresarchivosextraparaguardarlosvaloresporseparadodex,


y, y z ya que en el programa de aplicacin del algoritmo de verlet necesitamos las
componentes de la posicin x, y y z comoarreglosdendatosyparaestousamosuncierto
cdigo que nos permite leer los datos de un archivo y almacenarlos como entradas a
nuestroarreglo.
Es claro que primero tenemos que correr este programa a. y despus elqueapareceenla
siguienteseccinb.

b. ProgramaqueusaelalgoritmodeVerletparaestudiarelradioenfuncindeltiempo

//Iniciaprogramparausodelalgoritmodeverletenelestudiode
p cargasdistribuidas
uniformementeenunaesfera
#include
<stdio.h>
#include
<math.h>

#include
<stdlib.h>
//subrutinaquecalculalafuerzaFconlasposicioner
void
SF
(
double
r
[
1550
][
3
],

double
F
[
1550
][
3
]){

int
i
,
j
,
k
,
p
,
pi
,
pj;

double
N
;

//Nlanormadelosvectoresdeposicin
p
=
pi
*
pj
+
pi;

for
(
i
=
1
;
i
<=
p
;
i
++){

for
(
k
=
0
;
k
<
3
;
k
++){
F
[
i
][
k
]=
0.0;
}
}
//cicloparaelclculodelanorma

for
(
i
=
1
;
i
<=
p
;
i
++){

for
(
j
=
1
;
j
<=
p
;
j
++){
//Seescogennicamentelasnormasquenoseanceroparaquenosetenganfuerzas
indefinidas

if
(
j
!=
i
){
N
=
0.0;

for
(
k
=
0
;
k
<
3
;
k
++){

N
=
N
+
pow
((
r
[
j
][
k
]
r
[
i
][
k
]),
2
);

N
=
sqrt
(
N
);

if
(
N
!=
0.0
){

for
(
k
=
0
;
k
<
3
;
k
++){

F
[
i
][
k
]=(
pow
((
p

pi
),
2
))*(
r
[
j
][
k
]
r
[
i
][
k
])/
pow
(
N
,
3
);

}
}
}
}
}

//iniciaelprogramareal
int
main
(){

void
SF
();
//Sedefinenlosarreglosparalascomponentesdex,yyz
double
x
[
301
],
y
[
301
],
z
[
301
];

int
i
;

//Contador

int
p
,
pi
,
pj
;
//Sedefinelospuntospylasparticindedeuyv

double
t
,
h
=
0.54
;
//Sedefineeltiempotyeltamaodelospasos
int
k
,
m
;
//Mascontadores
doubler
[
1550
][
3
];

//Arreglop

aral
ap
osicind
em
uchasp
artculase
nc
adac
oordenada

cartesiana
doubleF
[
1550
][
3
];

//Arregloparalafuerzademuchaspartculasencadacoordenada

cartesiana
double
rm1
[
1550
][
3
];

double
v
[
1550
][
3
];
//Velocidadenelmismosentidodelaposicinyfuerza
double
d;

int
it
=
200;

FILE
*
datax
=
fopen
(
"spherex.txt"
,
"r"
);
FILE
*
datay
=
fopen
(
"spherey.txt"
,
"r"
);
FILE
*
dataz
=
fopen
(
"spherez.txt"
,
"r"
);

pi
=
20
;

//numerodeparticionesdeu
pj
=
10
;

//numerodeparticionesdev
p
=
pi
*
pj
+
pi
;

//numerodecargas

//Creamoslosarreglosdex,y,zobtenidosdelai
nformacind
el
osa
rchivost
xtc
readose
n
elprogramaanteriorparacadacoordenada,x,yyz

for

(
i
=

1
;
i
<=
p
;
i
++){

fscanf
(
datax
,

"%lf\n"
,

&
x
[
i
]);

for

(
i
=

1
;
i
<=
p
;
i
++){

fscanf
(
datay
,

"%lf\n"
,

&
y
[
i
]);

for

(
i
=

1
;
i
<=
p
;
i
++){

fscanf
(
dataz
,

"%lf\n"
,

&
z
[
i
]);

fclose
(
datax
);
fclose
(
datay
);

fclose
(
dataz
);

//Abrimosarchivoparaguardarlosdatosdelosradiosdelascargaseneltiempo

FILE
*
data1
=
fopen
(
"vsphere.txt"
,
"w"
);

//Condicionesiniciales
for
(
i
=
1
;
i
<=
p
;
i
++){

for
(
k
=
0
;
k
<
3
;
k
++){
r
[
i
][
k
]=
1.;
v
[
i
][
k
]=
0.;

//Definimoscadavectordeposicionrespectoalascomponentesx,yyz

for
(
i
=
1
;
i
<=
p
;
i
++){
r
[
i
][
0
]=
x
[
i
];
r
[
i
][
1
]=
y
[
i
];
r
[
i
][
2
]=
z
[
i
];
}

SF
(
r
,
F
);

for
(
i
=
1
;
i
<=
p
;
i
++){

for
(
k
=
0
;
k
<
3
;
k
++){

rm1
[
i
][
k
]=
r
[
i
][
k
]
v
[
i
][
k
]*
h
+
0.5
*
h
*
h
*
F
[
i
][
k
];

}
}

//VerletCalculos
SF
(
r
,
F
);

for
(
m
=
0
;
m
<
it
;
m
++){

//iteracionesdeltiempo1000
t
=
m
*
h;

for
(
i
=
1
;
i
<=
p
;
i
++){

for
(
k
=
0
;
k
<
3
;
k
++){

d
=
r
[
i
][
k
];

r
[
i
][
k
]=
rm1
[
i
][
k
]+
2.
*
r
[
i
][
k
]+
F
[
i
][
k
]*
h
*
h;

rm1
[
i
][
k
]=
d;

}
}

//Definimoselradiodecadapartcula
double
R
[
550
];
R
[
i
]=
0.0;

for
(
i
=
1
;
i
<=
p
;
i
++){

for
(
k
=
0
;
k
<
3
;
k
++){

R
[
i
]=
R
[
i
]+
pow
(
r
[
i
][
k
],
2
);

if
(
R
[
i
]>=
0.0
){

R
[
i
]=
sqrt
(
R
[
i
]);

//Imprimimoslosradiosparaciertasparticulaseneltiempo

fprintf
(
data1
,
"%lf%lf%lf%lf\n"
,
t
,
R
[
28
],
R
[
75
],
R
[
189
]);
}
}
fclose
(
data1
);

III.

Grficas
a. Puntosenlaesfera

FigIII.aDistribucinuniformedepuntosenlaesferaderadio1
b.Grficadelaposicincontraeltiempo

FigIII.bGrficadelaposicindelapartcula28contraeltiempo

IV.

AnlisisyResultados
a. Distribucindepuntosenlaesferauniformemente

Como podemos observar en la Figura III.a nohayunabultamientoenlospolosdelaesfera


ni se nota un cmulo de cargas en alguna regin arbitraria. Podemos ver que se lograron
distribuir 200 cargas ya que se particionuen20 pedazosyven10y estoda unacantidad
de puntos de u*v=200, cada uno con su correspondiente carga en la antpoda. Podemos
observar un ejemplo de los datos obtenidos para las posiciones de cada punto con el
programaescritoenlaseccinII.a.

TablaIV.a.Posicionesdepuntosenlaesferaunitaria

b. AlgoritmodeVerletparalascargasenlaesfera

Se us un tamao de los paso en el tiempo de h = 0.54, es decir de aproximadamente el


tamao encontrado por la solucin analtica para quelaesferaunitariacargadadupliquesu
radio y como podemos ver en la tabla IV.b, se encontratravsdelalgoritmodeverletque
efectivamente los radios de las cargas, en particular la 28, 75 y 189, duplicaron su dacio
inicial unitario al doble en una cantidad de tiempo igual al paso h de 0.54.

En este

programa queda cierta incertidumbre sobrelacertezade losresultadosyaqueseesperara


que al iniciar la evolucin del estado, el aumento del radio con respecto al tiempo fuera
mucho mayor que el aumento enuntiempomuchomayor,dondetendramosque teneruna
grfica que mientraspasaeltiempo,seasemejamsaunafuncinlineal.En cambioloque
obtuvimosesunafuncinlinealdesdeeliniciocomoseveenlaFiguraIII.b.

tiempo

R[28]

R[75]

R[189]

TablaIV.bDatosdelradiodelaspartcula28,75y189coneltiempo

V.

Conclusiones
a. Distribucindepuntosenlaesfera

Es indispensable tomar en cuenta el intervalo de los parmetros y las particiones de estos


para asegurar no tener puntos repetidos y que el nmero de posiciones en total sea par al
igual que su mitad para que deesemodocadapuntotengasuparejabiendistribuida.Sise
uhubieran escogido nmeros aleatorios en los parmetros, habramos tenido tansolouna
misma probabilidad para el nmero de puntos en cada pedazo de la esfera, pero esto
permitalaposibilidaddeteneracumulacionesaleatoria.

b. AlgoritmodeVerletparacargasenlaesfera

Se necesit hacer uso de un condicional que slo permitiera las normas no negativaspara
eliminar la posibilidad de dividir entre cero. Ocurriendo esto slo en el caso de que se

tuvieran dos puntos en el mismo lugar del espacio. lo cual se intento arreglar desde la
distribucion de puntos en la esfera en el programa de laseccinII.a,peroporalgunarazn
siempre se encontraron u*v puntos ms u. Y es necesario revisar la razon del porque se
tiene en todo momento un aumento lineal del radio y no uno mayor al inicio. Fue de vital
importanciaademsparaelalgoritmodeverlet,poderusarlascomponentesdelosvectores
posicin como arreglos, por lo cual se necesito como ya se mencion de tres archivosque
guarden cada uno la lista para cada componente y as desde el programa II.a poder
construirarreglosinvocandodichosarchivos.

VI.

Bibliografa
a. Weisstein, Eric W. "Sphere Point Picking." From
MathWorld
A Wolfram Web
Resource.

http://mathworld.wolfram.com/SpherePointPicking.html

b. http://stackoverflow.com/questions/20378430/readingnumbersfromatextfileintoa
narrayinc

Das könnte Ihnen auch gefallen