3 #include "rad_objfun.h"
7 /*Continuous radiator function from Jose study*/
11 double real_radiator_extern_(double *, const int &);
14 double radiator( const vector
<double> &x
)
16 const int n
= x
.size();
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
);
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
);
47 cout
<< "Error assigning values to array\n";
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
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
++){
59 if(active_layer
< number_active_layers
) array
[(j
+1)*layer_block
+active_layer
]=-1.0;
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
++){
71 for (int i
=number_layers
;i
<2*number_layers
;i
++){