annotate src/DLD-FUNCTIONS/fftw_wisdom.cc @ 5832:5e41e06f6a78

[project @ 2006-05-26 21:41:32 by jwe]
author jwe
date Fri, 26 May 2006 21:42:22 +0000
parents 080c08b192d8
children 160958073cde
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
5307
4c8a2e4e0717 [project @ 2005-04-26 19:24:27 by jwe]
jwe
parents: 5275
diff changeset
19 Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
4c8a2e4e0717 [project @ 2005-04-26 19:24:27 by jwe]
jwe
parents: 5275
diff changeset
20 02110-1301, USA.
4776
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
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
25 #include <config.h>
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
26 #endif
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
27
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
28 #if defined (HAVE_FFTW3)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
29 #include <fftw3.h>
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
30 #endif
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
31
5765
7ba9ad1fec11 [project @ 2006-04-17 05:05:15 by jwe]
jwe
parents: 5726
diff changeset
32 #include <sstream>
7ba9ad1fec11 [project @ 2006-04-17 05:05:15 by jwe]
jwe
parents: 5726
diff changeset
33
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
34 #include "defaults.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
35 #include "defun-dld.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
36 #include "error.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
37 #include "file-ops.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
38 #include "gripes.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
39 #include "lo-mappers.h"
5832
5e41e06f6a78 [project @ 2006-05-26 21:41:32 by jwe]
jwe
parents: 5823
diff changeset
40 #include "load-path.h"
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
41 #include "oct-env.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
42 #include "oct-obj.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
43 #include "sighandlers.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
44 #include "utils.h"
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
45
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
46 DEFUN_DLD (fftw_wisdom, args, ,
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
47 "-*- texinfo -*-\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
48 @deftypefn {Loadable Function} {} fftw_wisdom (@var{file}, @var{ow})\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
49 @deftypefnx {Loadable Function} {} fftw_wisdom (@var{n})\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
50 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
51 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
52 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
53 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
54 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
55 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
56 overhead in calculating the wisdom data.\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
57 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
58 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
59 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
60 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
61 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
62 exists, it will be overwritten.\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
63 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
64 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
65 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
66 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
67 absent dimension. That is\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
68 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
69 @example\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
70 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
71 a = fft (rand (1,102));\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
72 b = fft (rand (103,103));\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
73 c = fftn (rand ([102, 103, 105]));\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
74 @end example\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
75 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
76 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
77 the 102x103x105 FFTs. Note that calculated wisdom will be lost when\n\
5448
ebe5d7d15522 [project @ 2005-09-14 18:55:04 by jwe]
jwe
parents: 5307
diff changeset
78 restarting Octave. However, if it is saved as discussed above, it\n\
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
79 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
80 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
81 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
82 the wisdom is lost.\n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
83 \n\
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
84 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
85 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
86 Octave.\n\
5642
2618a0750ae6 [project @ 2006-03-06 21:26:48 by jwe]
jwe
parents: 5448
diff changeset
87 @seealso{fft, ifft, fft2, ifft2, fftn, ifftn}\n\
2618a0750ae6 [project @ 2006-03-06 21:26:48 by jwe]
jwe
parents: 5448
diff changeset
88 @end deftypefn")
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
89 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
90 octave_value retval;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
91
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
92 int nargin = args.length();
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
93
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
94 if (nargin < 1 || nargin > 2)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
95 {
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5794
diff changeset
96 print_usage ();
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
97 return retval;
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
4792
d2038299c683 [project @ 2004-02-20 18:44:43 by jwe]
jwe
parents: 4787
diff changeset
100 #if defined (HAVE_FFTW3)
d2038299c683 [project @ 2004-02-20 18:44:43 by jwe]
jwe
parents: 4787
diff changeset
101
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
102 if (args(0).is_string ())
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
103 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
104 bool overwrite = false;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
105
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
106 if (nargin != 1)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
107 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
108 double dval = args (1).double_value ();
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4792
diff changeset
109 if (NINTbig (dval) != 0)
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
110 overwrite = true;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
111 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
112
5722
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
113 std::string str = args(0).string_value ();
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
114 std::string wisdom = octave_env::make_absolute
5832
5e41e06f6a78 [project @ 2006-05-26 21:41:32 by jwe]
jwe
parents: 5823
diff changeset
115 (load_path::find_file (str), octave_env::getcwd ());
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
116
5775
ace8d8d26933 [project @ 2006-04-24 19:13:06 by jwe]
jwe
parents: 5765
diff changeset
117 // FIXME -- should probably protect FILE* resources with
4787
02c748eb2ddc [project @ 2004-02-18 21:20:26 by jwe]
jwe
parents: 4776
diff changeset
118 // auto_ptr or similar...
02c748eb2ddc [project @ 2004-02-18 21:20:26 by jwe]
jwe
parents: 4776
diff changeset
119
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
120 if (wisdom.empty () || overwrite)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
121 {
5722
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
122 if (str.empty ())
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
123 error ("fftw_wisdom: can not save to file");
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
124 else
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
125 {
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
126 FILE *ofile = fopen (str.c_str (), "wb");
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
127 if (! ofile)
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
128 error ("fftw_wisdom: can not save to file %s", str.c_str());
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
129 else
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
130 {
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
131 fftw_export_wisdom_to_file (ofile);
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
132 fclose (ofile);
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
133 }
8272a8f03b80 [project @ 2006-03-30 12:48:50 by jwe]
jwe
parents: 5642
diff changeset
134 }
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
135 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
136 else
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 FILE *ifile = fopen (wisdom.c_str (), "r");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
139 if (! fftw_import_wisdom_from_file (ifile))
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
140 error ("fftw_wisdom: can not import wisdom from file");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
141 fclose (ifile);
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
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
144 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
145 else
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 Matrix m = args (0).matrix_value ();
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
148
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
149 if (error_state)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
150 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
151 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
152 return retval;
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
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
155 std::string name = file_ops::tempnam ("", "oct-");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
156
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
157 if (name.empty ())
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
158 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
159 error ("fftw_wisdom: can not open temporary file");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
160 return retval;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
161 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
162
5765
7ba9ad1fec11 [project @ 2006-04-17 05:05:15 by jwe]
jwe
parents: 5726
diff changeset
163 std::ostringstream cmd_buf;
5794
1138ced03f14 [project @ 2006-05-08 20:23:04 by jwe]
jwe
parents: 5775
diff changeset
164 cmd_buf << Vfftw_wisdom_program << " -n -o \"" << name << "\"";
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
165
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4792
diff changeset
166 for (octave_idx_type k = 0; k < m.rows (); k++)
4776
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 bool first = true;
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 cmd_buf << " ";
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
171
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
172 // Note reversal of dimensions for column major storage in FFTW
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4792
diff changeset
173 for (octave_idx_type j = m.columns()-1; j >= 0; j--)
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4792
diff changeset
174 if (NINTbig(m(k,j)) > 0)
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
175 {
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
176 if (first)
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
177 first = false;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
178 else
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
179 cmd_buf << "x";
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4792
diff changeset
180 cmd_buf << NINTbig(m(k,j)) ;
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
181 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
182 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
183
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
184 volatile octave_interrupt_handler old_interrupt_handler
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
185 = octave_ignore_interrupts ();
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
186
5765
7ba9ad1fec11 [project @ 2006-04-17 05:05:15 by jwe]
jwe
parents: 5726
diff changeset
187 std::string cmd_buf_str = cmd_buf.str ();
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
188
5765
7ba9ad1fec11 [project @ 2006-04-17 05:05:15 by jwe]
jwe
parents: 5726
diff changeset
189 int status = system (cmd_buf_str.c_str ());
4776
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 octave_set_interrupt_handler (old_interrupt_handler);
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 if (WIFEXITED (status))
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 FILE *ifile = fopen (name.c_str (), "r");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
196 if (! fftw_import_wisdom_from_file (ifile))
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
197 error ("fftw_wisdom: can not import wisdom from temporary file");
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
198 fclose (ifile);
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
199 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
200 else
5794
1138ced03f14 [project @ 2006-05-08 20:23:04 by jwe]
jwe
parents: 5775
diff changeset
201 error ("fftw_wisdom: error running %s", Vfftw_wisdom_program.c_str ());
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
202 }
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
203
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
204 #else
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
205
4787
02c748eb2ddc [project @ 2004-02-18 21:20:26 by jwe]
jwe
parents: 4776
diff changeset
206 warning ("fftw_wisdom: this copy of Octave was not configured to use FFTW3");
4776
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
207
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
208 #endif
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
209
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
210 return retval;
adf8d68d7143 [project @ 2004-02-16 20:32:20 by jwe]
jwe
parents:
diff changeset
211 }