Fix newline in Windows.
[PaGMO.git] / Functions / objfuns / rad_objfun.cpp
blob8980789abbaede0e6a08dea08070164c666df806
1 #include <cmath>
3 #include "rad_objfun.h"
5 using namespace std;
7 /*Continuous radiator function from Jose study*/
9 extern "C"
11 double real_radiator_extern_(double *, const int &);
14 double radiator( const vector<double> &x )
16 const int n = x.size();
17 double J_result=0;
18 const int number_layers=C_NUMBER_LAYERS;
19 double* array = new double[number_layers*2];
20 vector <double> structure;
23 structure = var2struct(x);
25 for (unsigned int i=0;i<structure.size();i++){
26 array[i] = structure[i];
29 J_result = real_radiator_extern_(array, number_layers);
31 delete[] array;
33 return J_result;
36 vector<double> var2struct(const vector<double> &x){
37 const int n = x.size();
38 int number_layers=C_NUMBER_LAYERS;
39 int number_active_layers=C_NUMBER_ACTIVE_LAYERS;
40 int layer_block,rest_layers,number_blocks;
41 vector <double> array(2*number_layers,0);
43 number_blocks=(number_active_layers+1);
44 layer_block=(number_layers-number_active_layers)/number_blocks;
45 rest_layers=number_layers-(layer_block*number_blocks+number_active_layers);
46 if(rest_layers <0) {
47 cout << "Error assigning values to array\n";
48 exit(1);
51 int active_layer=0; // Active_layer and j have always the same values, but it is easier to follow the algorithm in this way
52 int k=0;
53 for (int j=0; j<number_blocks;j++){
55 for (int i=j*layer_block+active_layer;i<(j+1)*layer_block+active_layer;i++){
56 array[i] = x[k];
57 k++;
59 if(active_layer < number_active_layers) array[(j+1)*layer_block+active_layer]=-1.0;
60 active_layer++;
62 //Rest of layers
63 if (rest_layers != 0) {
64 for (int i=number_blocks*layer_block+number_active_layers; i<number_blocks*layer_block+number_active_layers+rest_layers; i++){
65 array[i] = x[k];
66 k++;
71 for (int i=number_layers;i<2*number_layers;i++){
72 array[i] = x[k];
73 k++;
76 return array;