root / bin / step.cpp @ 1
Historique | Voir | Annoter | Télécharger (1,68 ko)
1 | 1 | akiss | #include "step.h" |
---|---|---|---|
2 | 1 | akiss | #include <stdio.h> |
3 | 1 | akiss | #include <math.h> |
4 | 1 | akiss | #include "minimize_BFGS.h" |
5 | 1 | akiss | #include "growth_and_chemistry.h" |
6 | 1 | akiss | #include <gsl/gsl_odeiv2.h> |
7 | 1 | akiss | #include <gsl/gsl_errno.h> |
8 | 1 | akiss | #include "compute_energy_and_forces.h" |
9 | 1 | akiss | #include "save_data.h" |
10 | 1 | akiss | #include <cstdlib> |
11 | 1 | akiss | #include "constants.h" |
12 | 1 | akiss | #include <algorithm> |
13 | 1 | akiss | #include "compute_lengths.h" |
14 | 1 | akiss | |
15 | 1 | akiss | |
16 | 1 | akiss | /* this function performs a time step (growth and chemistry then mechanics) */
|
17 | 1 | akiss | |
18 | 1 | akiss | void step(double *vertices, int vertex_number, int edge_number, int *edges_vertices, double *lengths, double *rest_lengths, double *edges_width, int *periodizer, double *width, double *height){ |
19 | 1 | akiss | |
20 | 1 | akiss | /* minimization of energy: move the vertices in order to make the energy as small as possible, i.e. in order to make cells
|
21 | 1 | akiss | as close as possible of their targets */
|
22 | 1 | akiss | minimize_BFGS(vertex_number, vertices, edge_number, edges_vertices, lengths, rest_lengths, edges_width, periodizer, width, height); |
23 | 1 | akiss | |
24 | 1 | akiss | |
25 | 1 | akiss | compute_lengths(vertices, edges_vertices, edge_number, lengths, periodizer, width[0], height[0]); |
26 | 1 | akiss | |
27 | 1 | akiss | struct parameters_list2 {int edge_number; double *lengths; double *edges_width;}; |
28 | 1 | akiss | |
29 | 1 | akiss | struct parameters_list2 parameters2;
|
30 | 1 | akiss | parameters2.edge_number=edge_number; |
31 | 1 | akiss | parameters2.lengths=lengths; |
32 | 1 | akiss | parameters2.edges_width=edges_width; |
33 | 1 | akiss | void *pparameters2=¶meters2;
|
34 | 1 | akiss | int system_size=edge_number;
|
35 | 1 | akiss | |
36 | 1 | akiss | double x[system_size];
|
37 | 1 | akiss | for (int i=0;i<edge_number;i++){ x[i]=rest_lengths[i];} |
38 | 1 | akiss | |
39 | 1 | akiss | gsl_odeiv2_system sys={growth_and_chemistry, NULL, system_size, pparameters2};
|
40 | 1 | akiss | gsl_odeiv2_driver *d=gsl_odeiv2_driver_alloc_y_new (&sys, gsl_odeiv2_step_rk2, 1.e-8, 1.e-8, 0.); |
41 | 1 | akiss | int s; double t=0.0; |
42 | 1 | akiss | s=gsl_odeiv2_driver_apply(d, &t, 1.e-7, x); |
43 | 1 | akiss | for (int i=0;i<edge_number;i++){ rest_lengths[i]=x[i];} |
44 | 1 | akiss | gsl_odeiv2_driver_free(d); |
45 | 1 | akiss | |
46 | 1 | akiss | } |
47 | 1 | akiss | |
48 | 1 | akiss | |
49 | 1 | akiss | |
50 | 1 | akiss |