35 #undef PACKAGE_BUGREPORT
38 #undef PACKAGE_TARNAME
39 #undef PACKAGE_VERSION
44 #include <octave/oct.h>
45 #include <octave/octave.h>
46 #include <octave/parse.h>
50 #undef PACKAGE_BUGREPORT
53 #undef PACKAGE_TARNAME
54 #undef PACKAGE_VERSION
63 static int is_octave_initialised = 0;
75 octave_value_list grid_in;
76 string_vector argv (2);
77 argv(0) =
"octave_feval";
80 octave_main (2, argv.c_str_vec(), 1);
84 grid_in(0) = PKGDATADIR
"/pmm_griddatan.m";
85 feval(
"source", grid_in, 1);
87 is_octave_initialised = 1;
134 if(oct_data == NULL) {
156 while(b != NULL && c <= size) {
161 ERRPRINTF(
"Error getting average of benchmark:\n");
170 ERRPRINTF(
"Error getting max of benchmark:\n");
179 add_benchmark_to_xy(c, m->
n_p, b_add, oct_data->
x, oct_data->
y);
194 ERRPRINTF(
"size mismatch, added %d of max %d benches (last:%p)\n",
220 octave_value_list oct_in, oct_out;
222 if(is_octave_initialised == 0) {
227 oct_in(0) = octave_value(oct_data->
x);
228 oct_in(1) = octave_value(
"QbB");
230 oct_out = feval(
"delaunayn", oct_in, 1);
232 if(!error_state && oct_out.length() > 0) {
233 oct_data->
tri = oct_out(0).matrix_value();
238 ERRPRINTF(
"Error calculating triangulation of data.\n");
265 if(is_octave_initialised == 0) {
270 flops =
new double[l];
288 octave_value_list oct_in, oct_out;
290 oct_in(0) = octave_value(oct_data->
tri);
291 oct_in(1) = octave_value(oct_data->
x);
292 oct_in(2) = octave_value(oct_data->
y);
293 oct_in(3) = octave_value(xi);
294 oct_in(4) = octave_value(
"linear");
298 oct_out = feval(
"pmm_triinterpn", oct_in, 1);
301 if(!error_state && oct_out.length() > 0) {
302 yi = oct_out(0).matrix_value();
309 ERRPRINTF(
"Error calling pmm_triinterpn in octave.\n");
337 if(is_octave_initialised == 0) {
353 octave_value_list oct_in, oct_out;
355 oct_in(0) = octave_value(oct_data->
tri);
356 oct_in(1) = octave_value(oct_data->
x);
357 oct_in(2) = octave_value(oct_data->
y);
358 oct_in(3) = octave_value(xi);
359 oct_in(4) = octave_value(
"linear");
363 oct_out = feval(
"pmm_triinterpn", oct_in, 1);
366 if(!error_state && oct_out.length() > 0) {
367 yi = oct_out(0).matrix_value();
370 DBGPRINTF(
"-------- INTERPOLATED FLOPS --------\n");
372 printf(
"p:%d:%d ", i, p[i]);
374 printf(
"flops:%f (%f)\n", flops,
yi(1));
378 ERRPRINTF(
"Error calling pmm_triinterpn in octave.\n");
403 if(is_octave_initialised == 0) {
418 octave_value_list grid_in, grid_out;
420 DBGPRINTF(
"Setting up grid_in(0)\n");
421 grid_in(0) = octave_value(oct_data->
x);
422 DBGPRINTF(
"Done.\nSetting ut grid_in(1)\n");
423 grid_in(1) = octave_value(oct_data->
y);
424 DBGPRINTF(
"Done.\nSetting up grid_in(2)\n");
425 grid_in(2) = octave_value(xi);
426 DBGPRINTF(
"Done.\nSetting up grid_in(3)\n");
427 grid_in(3) = octave_value(
"linear");
428 DBGPRINTF(
"Done.\nSetting up grid_in(4)\n");
429 grid_in(4) = octave_value(
"QbB");
430 DBGPRINTF(
"Done.\n");
434 DBGPRINTF(
"feval pmm_griddatan ...\n");
435 grid_out = feval(
"pmm_griddatan", grid_in, 1);
436 DBGPRINTF(
"Done.\n");
439 if(!error_state && grid_out.length() > 0) {
440 yi = grid_out(0).matrix_value();
443 DBGPRINTF(
"-------- INTERPOLATED FLOPS --------\n");
445 printf(
"p:%d:%d ", i, p[i]);
447 printf(
"flops:%f (%f)\n", flops,
yi(1));
451 ERRPRINTF(
"Error calling pmm_griddatan in octave.\n");
479 if(is_octave_initialised == 0) {
494 ret_b->
p = (
int*) malloc(ret_b->
n_p *
sizeof *(ret_b->
p));
496 for(i=0; i<m->
n_p; i++) {
504 octave_value_list grid_in, grid_out;
506 grid_in(0) = octave_value(oct_data->
x);
507 grid_in(1) = octave_value(oct_data->
y);
508 grid_in(2) = octave_value(xi);
509 grid_in(3) = octave_value(
"linear");
510 grid_in(4) = octave_value(
"QbB");
514 grid_out = feval(
"pmm_griddatan", grid_in, 1);
517 if(!error_state && grid_out.length() > 0) {
518 yi = grid_out(0).matrix_value();
521 DBGPRINTF(
"-------- INTERPOLATED BENCH --------\n");
527 ERRPRINTF(
"Error calling pmm_griddatan in octave.\n");