-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain1.c
65 lines (53 loc) · 1.61 KB
/
main1.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <stdlib.h>
#include "inicial.h"
#include "evolve.h"
/*
Un programa sencillo para seguir la evolucion
dinamica de un conjunto de N masas puntuales.
*/
int main(int argc, char **argv){
int i=0, N=0;
double *p=NULL;
double *v=NULL;
double *a=NULL;
double *U=NULL;
double *K=NULL;
double time_step=0, total_time=0, epsilon=0;
int n_steps=0;
/*inicializacion*/
recibe_input(argc, argv, &N, &epsilon);
p = crea_vector(3*N);
v = crea_vector(3*N);
a = crea_vector(3*N);
U = crea_vector(N);
K = crea_vector(N);
posiciones_iniciales(p, N);
calcula_energia(p, v, U, K, N);
escribe_estado(p, v, U, K, N, i);
// tiempos caracteristicos
total_time = calcula_tiempo_total(N);
time_step = calcula_time_step(N, epsilon);
n_steps = (int)(total_time/time_step);
fprintf(stderr, "tiempo total: %f time_step: %f n_steps %d\n",
total_time, time_step, n_steps);
//evolucion temporal
calcula_aceleracion(p, v, a, N, epsilon);
kick(p, v, a, N, time_step/4.0);
//#pragma omp parallel for
for(i=0;i<n_steps;i++){
drift(p, v, a, N, time_step/1.4801579);
calcula_aceleracion(p, v, a, N, epsilon);
kick(p, v, a, N, time_step/0.7400789);
drift(p, v, a, N, time_step*(-0.175603596));
calcula_aceleracion(p, v, a, N, epsilon);
kick(p, v, a, N, time_step*(-0.851207192));
drift(p, v, a, N, time_step*(-0.175603596));
calcula_aceleracion(p, v, a, N, epsilon);
kick(p, v, a, N, time_step/0.7400789);
drift(p, v, a, N, time_step/1.4801579);
}
calcula_energia(p, v, U, K, N);
escribe_estado(p, v, U, K, N, i);
return 0;
}