Statistiques
| Révision :

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
}