Beruflich Dokumente
Kultur Dokumente
Prctica2
AlgoritmodeVerlet
Esferacargadauniformemente
Prof.JorgeRamnSotoMercado
Ayud.JulioAlbertoLpezSaldvar
RicardoMucioGmez
I.
Introduccin
= 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.
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
);
}
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
TablaIV.a.Posicionesdepuntosenlaesferaunitaria
b. AlgoritmodeVerletparalascargasenlaesfera
En este
tiempo
R[28]
R[75]
R[189]
TablaIV.bDatosdelradiodelaspartcula28,75y189coneltiempo
V.
Conclusiones
a. Distribucindepuntosenlaesfera
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