annotate src/DLD-FUNCTIONS/fftw_wisdom.cc @ 4776:adf8d68d7143 ss-2-1-54

[project @ 2004-02-16 20:32:20 by jwe]
author jwe
date Mon, 16 Feb 2004 20:32:20 +0000
parents
children 02c748eb2ddc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
1 /*
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
2
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
3 Copyright (C) 2004 David Bateman
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
4
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
6
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
10 later version.
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
11
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
15 for more details.
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
16
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
20
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
21 */
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
22
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
23 #ifdef HAVE_CONFIG_H
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
24 #include <config.h>
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
25 #endif
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
26
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
27 #if defined (HAVE_FFTW3)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
28 #include <fftw3.h>
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
29 #endif
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
30
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
31 #include "defaults.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
32 #include "defun-dld.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
33 #include "error.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
34 #include "file-ops.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
35 #include "gripes.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
36 #include "lo-mappers.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
37 #include "lo-sstream.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
38 #include "oct-env.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
39 #include "oct-obj.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
40 #include "sighandlers.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
41 #include "utils.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
42
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
43 DEFUN_DLD (fftw_wisdom, args, ,
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
44 "-*- texinfo -*-\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
45 @deftypefn {Loadable Function} {} fftw_wisdom (@var{file}, @var{ow})\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
46 @deftypefnx {Loadable Function} {} fftw_wisdom (@var{n})\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
47 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
48 This function is used to manipulate the FFTW wisdom data. It can\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
49 be used to load previously stored wisdom from a file, create wisdom\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
50 needed by Octave and to save the current wisdom to a file. Wisdom\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
51 data can be used to significantly accelerate the calculation of the FFTs,\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
52 but is only profitable if the same FFT is called many times due to the\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
53 overhead in calculating the wisdom data.\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
54 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
55 Called with a single string argument, @code{fftw_wisdom (@var{file})}\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
56 will load the wisdom data found in @var{file}. If @var{file} does\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
57 not exist, then the current wisdom used by FFTW is saved to this\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
58 file. If the flag @var{ow} is non-zero, then even if @var{file}\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
59 exists, it will be overwritten.\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
60 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
61 It is assumed that each row of @var{n} represents the size of a FFT for\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
62 which it is desired to pre-calculate the wisdom needed to accelerate it.\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
63 Any value of the matrix that is less than 1, is assumed to indicate an\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
64 absent dimension. That is\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
65 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
66 @example\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
67 fftw_wisdom ([102, 0, 0; 103, 103, 0; 102, 103, 105]);\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
68 a = fft (rand (1,102));\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
69 b = fft (rand (103,103));\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
70 c = fftn (rand ([102, 103, 105]));\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
71 @end example\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
72 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
73 calculates the wisdom necessary to accelerate the 103, 102x102 and\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
74 the 102x103x105 FFTs. Note that calculated wisdom will be lost when\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
75 when restarting Octave. However, if it is saved as discussed above, it\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
76 can be reloaded. Also, any system-wide wisdom file that has been found\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
77 will also be used. Saved wisdom files should not be used on different\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
78 platforms since they will not be efficient and the point of calculating\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
79 the wisdom is lost.\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
80 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
81 Note that the program @code{fftw-wisdom} supplied with FFTW can equally\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
82 be used to create a file containing wisdom that can be imported into\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
83 Octave.\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
84 @end deftypefn\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
85 @seealso {fft, ifft, fft2, ifft2, fftn, ifftn}")
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
86 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
87 octave_value retval;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
88
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
89 #if defined (HAVE_FFTW3)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
90
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
91 int nargin = args.length();
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
92
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
93 if (nargin < 1 || nargin > 2)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
94 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
95 print_usage ("fftw_wisdom");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
96 return retval;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
97 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
98
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
99 if (args(0).is_string ())
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
100 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
101 bool overwrite = false;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
102
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
103 if (nargin != 1)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
104 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
105 double dval = args (1).double_value ();
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
106 if (NINT (dval) != 0)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
107 overwrite = true;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
108 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
109
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
110 std::string wisdom = octave_env::make_absolute
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
111 (Vload_path_dir_path.find_first_of (args(0).string_value ().c_str ()),
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
112 octave_env::getcwd ());
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
113
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
114 if (wisdom.empty () || overwrite)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
115 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
116 FILE *ofile = fopen (wisdom.c_str (), "wb");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
117 fftw_export_wisdom_to_file (ofile);
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
118 fclose (ofile);
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
119 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
120 else
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
121 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
122 FILE *ifile = fopen (wisdom.c_str (), "r");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
123 if (! fftw_import_wisdom_from_file (ifile))
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
124 error ("fftw_wisdom: can not import wisdom from file");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
125 fclose (ifile);
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
126 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
127
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
128 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
129 else
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
130 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
131 Matrix m = args (0).matrix_value ();
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
132
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
133 if (error_state)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
134 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
135 error ("fftw_wisdom: argument must be a matrix or a string");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
136 return retval;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
137 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
138
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
139 std::string name = file_ops::tempnam ("", "oct-");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
140
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
141 if (name.empty ())
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
142 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
143 error ("fftw_wisdom: can not open temporary file");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
144 return retval;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
145 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
146
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
147 OSSTREAM cmd_buf;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
148 cmd_buf << Vfftw_wisdom_prog << " -n -o \"" << name << "\"";
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
149
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
150 for (int k = 0; k < m.rows (); k++)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
151 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
152 bool first = true;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
153
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
154 cmd_buf << " ";
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
155
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
156 // Note reversal of dimensions for column major storage in FFTW
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
157 for (int j = m.columns()-1; j >= 0; j--)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
158 if (NINT(m(k,j)) > 0)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
159 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
160 if (first)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
161 first = false;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
162 else
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
163 cmd_buf << "x";
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
164 cmd_buf << NINT(m(k,j)) ;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
165 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
166 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
167
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
168 cmd_buf << OSSTREAM_ENDS;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
169
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
170 volatile octave_interrupt_handler old_interrupt_handler
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
171 = octave_ignore_interrupts ();
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
172
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
173 int status = system (OSSTREAM_C_STR (cmd_buf));
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
174
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
175 OSSTREAM_FREEZE (cmd_buf);
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
176
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
177 octave_set_interrupt_handler (old_interrupt_handler);
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
178
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
179 if (WIFEXITED (status))
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
180 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
181 FILE *ifile = fopen (name.c_str (), "r");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
182 if (! fftw_import_wisdom_from_file (ifile))
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
183 error ("fftw_wisdom: can not import wisdom from temporary file");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
184 fclose (ifile);
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
185 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
186 else
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
187 error ("fftw_wisdom: error running %s", Vfftw_wisdom_prog.c_str ());
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
188
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
189 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
190
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
191 #else
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
192
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
193 error ("fftw_wisdom: this copy of Octave was not configured to use FFTW3");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
194
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
195 #endif
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
196
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
197 return retval;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
198 }