root / bin / compute_energy_width.cpp @ 1
Historique | Voir | Annoter | Télécharger (1,18 ko)
1 | 1 | akiss | #include "compute_energy_width.h" |
---|---|---|---|
2 | 1 | akiss | #include "minimize_BFGS.h" |
3 | 1 | akiss | #include <math.h> |
4 | 1 | akiss | #include <stdio.h> |
5 | 1 | akiss | #include <nlopt.h> |
6 | 1 | akiss | #include <omp.h> |
7 | 1 | akiss | |
8 | 1 | akiss | /* this function computes the mechanical energy and its derivatives */
|
9 | 1 | akiss | |
10 | 1 | akiss | double compute_energy_width(unsigned n, const double *x, double *dx, void *parameters){ |
11 | 1 | akiss | |
12 | 1 | akiss | struct parameters_list3 {int vertex_number; double *vertices; int edge_number; int *edges_vertices; |
13 | 1 | akiss | double *lengths; double *rest_lengths; int *periodizer; double *width; double *height;}; |
14 | 1 | akiss | |
15 | 1 | akiss | minimize_BFGS(((parameters_list3*)parameters)->vertex_number, ((parameters_list3*)parameters)->vertices, ((parameters_list3*)parameters)->edge_number, |
16 | 1 | akiss | ((parameters_list3*)parameters)->edges_vertices, ((parameters_list3*)parameters)->lengths, ((parameters_list3*)parameters)->rest_lengths, |
17 | 1 | akiss | (double*)x, ((parameters_list3*)parameters)->periodizer, ((parameters_list3*)parameters)->width, ((parameters_list3*)parameters)->height);
|
18 | 1 | akiss | |
19 | 1 | akiss | double energy=0; |
20 | 1 | akiss | |
21 | 1 | akiss | for (int i=0; i<((parameters_list3*)parameters)->edge_number; i++){ |
22 | 1 | akiss | energy+=pow((((parameters_list3*)parameters)->lengths[i])/(((parameters_list3*)parameters)->rest_lengths[i])-1.02,2.); |
23 | 1 | akiss | } |
24 | 1 | akiss | |
25 | 1 | akiss | return(energy);
|
26 | 1 | akiss | |
27 | 1 | akiss | } |