cannam@167: \input texinfo @c -*-texinfo-*- cannam@167: @c Update by C-x C-e on: (texinfo-multiple-files-update "fftw3.texi" nil t) cannam@167: @setfilename fftw3.info cannam@167: @include version.texi cannam@167: @settitle FFTW @value{VERSION} cannam@167: @setchapternewpage odd cannam@167: @c define constant index (ct) cannam@167: @defcodeindex ct cannam@167: @syncodeindex ct fn cannam@167: @syncodeindex vr fn cannam@167: @syncodeindex pg fn cannam@167: @syncodeindex tp fn cannam@167: @c define foreign function index (ff) cannam@167: @defcodeindex ff cannam@167: @syncodeindex ff cp cannam@167: @c define foreign constant index (fc) cannam@167: @defcodeindex fc cannam@167: @syncodeindex fc cp cannam@167: @c define foreign program index (fp) cannam@167: @defcodeindex fp cannam@167: @syncodeindex fp cp cannam@167: @comment %**end of header cannam@167: cannam@167: @iftex cannam@167: @paragraphindent 0 cannam@167: @parskip=@medskipamount cannam@167: @end iftex cannam@167: cannam@167: @c cannam@167: @c The following macros are coded in a weird way: cannam@167: cannam@167: @c @macro FOO cannam@167: @c @noindent cannam@167: @c cannam@167: @c @refill cannam@167: @c @end macro cannam@167: cannam@167: @c The @noindent/@refill stuff is not necessary in texinfo up to version cannam@167: @c 4, but it is a hack necessary to make texinfo-5 work. cannam@167: cannam@167: @c Texinfo has been stable for the first 15 years of FFTW's history. cannam@167: @c Then some genius, with too much time in his hands and on a mission to cannam@167: @c deliver the world from the evil of the C language, decided to rewrite cannam@167: @c makeinfo in Perl, the old C version of makeinfo being, as I said, cannam@167: @c evil. The official excuse for the rewrite was that now I can have my cannam@167: @c manual in XML format, as if XML were a feature. cannam@167: cannam@167: @c The result of this stroke of genius is that texinfo-5 has different cannam@167: @c rules for macro expansion than texinfo-4 does, specifically regarding cannam@167: @c whether or not spaces after a macro are ignored. Texinfo-4 had weird cannam@167: @c rules, but at least they were constant and internally more or less cannam@167: @c consistent. Texinfo-5 has different rules, and even worse the rules cannam@167: @c in texinfo-5 are inconsistent between the TeX and HTML output cannam@167: @c processors. This situation makes it almost impossible for us to cannam@167: @c produce a manual that works with both texinfo 4 and 5 in all modes cannam@167: @c (TeX, info, and html). The @noindent/@refill hack is my best shot at cannam@167: @c patching this situation. cannam@167: cannam@167: @c "@noindent" has two effects: First, it makes texinfo-5 believe that cannam@167: @c the next "@ifinfo" is on a new line, otherwise texinfo-5 complains cannam@167: @c that it is not (even though it obviously is). Second, "@noindent" is cannam@167: @c a macro that eats extra space, and we want this effect because somehow cannam@167: @c macro expansion in texinfo-5 inserts extra spaces that were not there cannam@167: @c in texinfo-4. cannam@167: cannam@167: @c "@refill" stops texinfo-5 from interpreting the rest of the line after cannam@167: @c a macro invocation as an argument to "@end tex". For example, in cannam@167: @c "FFTW uses @Onlogn algorithms", somehow texinfo-5 thinks that cannam@167: @c "algorithms" is an argument to "@end tex". "@noindent" would have the cannam@167: @c same effect (as would any other macro invocation, I think), but, cannam@167: @c unlike "@noindent", "@refill" does not eat spaces and does not scan cannam@167: @c the rest of the input file for macro arguments. However, "@refill" is cannam@167: @c deemed "obsolete" in the texinfo-5 source code, so expect this to cannam@167: @c break at some point. cannam@167: cannam@167: @c This situation is wholly unsatisfactory, and the GNU project is cannam@167: @c obviously out of control. If this nonsense persists, we will abandon cannam@167: @c texinfo and produce a latex-only version of the manual. cannam@167: cannam@167: cannam@167: @macro Onlogn cannam@167: @noindent cannam@167: @ifinfo cannam@167: O(n log n) cannam@167: @end ifinfo cannam@167: @html cannam@167: O(n log n) cannam@167: @end html cannam@167: @tex cannam@167: $O(n \\log n)$ cannam@167: @end tex cannam@167: @refill cannam@167: @end macro cannam@167: cannam@167: @macro ndims cannam@167: @noindent cannam@167: @ifinfo cannam@167: n[0] x n[1] x n[2] x ... x n[d-1] cannam@167: @end ifinfo cannam@167: @html cannam@167: n0 × n1 × n2 × … × nd-1 cannam@167: @end html cannam@167: @tex cannam@167: $n_0 \\times n_1 \\times n_2 \\times \\cdots \\times n_{d-1}$ cannam@167: @end tex cannam@167: @refill cannam@167: @end macro cannam@167: cannam@167: @macro ndimshalf cannam@167: @noindent cannam@167: @ifinfo cannam@167: n[0] x n[1] x n[2] x ... x (n[d-1]/2 + 1) cannam@167: @end ifinfo cannam@167: @html cannam@167: n0 × n1 × n2 × … × (nd-1/2 + 1) cannam@167: @end html cannam@167: @tex cannam@167: $n_0 \\times n_1 \\times n_2 \\times \\cdots \\times (n_{d-1}/2 + 1)$ cannam@167: @end tex cannam@167: @refill cannam@167: @end macro cannam@167: cannam@167: @macro ndimspad cannam@167: @noindent cannam@167: @ifinfo cannam@167: n[0] x n[1] x n[2] x ... x [2 (n[d-1]/2 + 1)] cannam@167: @end ifinfo cannam@167: @html cannam@167: n0 × n1 × n2 × … × [2 (nd-1/2 + 1)] cannam@167: @end html cannam@167: @tex cannam@167: $n_0 \\times n_1 \\times n_2 \\times \\cdots \\times [2(n_{d-1}/2 + 1)]$ cannam@167: @end tex cannam@167: @refill cannam@167: @end macro cannam@167: cannam@167: @macro twodims{d1, d2} cannam@167: @noindent cannam@167: @ifinfo cannam@167: \d1\ x \d2\ cannam@167: @end ifinfo cannam@167: @html cannam@167: \d1\ × \d2\ cannam@167: @end html cannam@167: @tex cannam@167: $\d1\ \\times \d2\$ cannam@167: @end tex cannam@167: @refill cannam@167: @end macro cannam@167: cannam@167: @macro threedims{d1, d2, d3} cannam@167: @noindent cannam@167: @ifinfo cannam@167: \d1\ x \d2\ x \d3\ cannam@167: @end ifinfo cannam@167: @html cannam@167: \d1\ × \d2\ × \d3\ cannam@167: @end html cannam@167: @tex cannam@167: $\d1\ \\times \d2\ \\times \d3\$ cannam@167: @end tex cannam@167: @refill cannam@167: @end macro cannam@167: cannam@167: @macro dimk{k} cannam@167: @noindent cannam@167: @ifinfo cannam@167: n[\k\] cannam@167: @end ifinfo cannam@167: @html cannam@167: n\k\ cannam@167: @end html cannam@167: @tex cannam@167: $n_\k\$ cannam@167: @end tex cannam@167: @refill cannam@167: @end macro cannam@167: cannam@167: cannam@167: @macro ndimstrans cannam@167: @noindent cannam@167: @ifinfo cannam@167: n[1] x n[0] x n[2] x ... x n[d-1] cannam@167: @end ifinfo cannam@167: @html cannam@167: n1 × n0 × n2 ×…× nd-1 cannam@167: @end html cannam@167: @tex cannam@167: $n_1 \\times n_0 \\times n_2 \\times \\cdots \\times n_{d-1}$ cannam@167: @end tex cannam@167: @refill cannam@167: @end macro cannam@167: cannam@167: @copying cannam@167: This manual is for FFTW cannam@167: (version @value{VERSION}, @value{UPDATED}). cannam@167: cannam@167: Copyright @copyright{} 2003 Matteo Frigo. cannam@167: cannam@167: Copyright @copyright{} 2003 Massachusetts Institute of Technology. cannam@167: cannam@167: @quotation cannam@167: Permission is granted to make and distribute verbatim copies of this cannam@167: manual provided the copyright notice and this permission notice are cannam@167: preserved on all copies. cannam@167: cannam@167: Permission is granted to copy and distribute modified versions of this cannam@167: manual under the conditions for verbatim copying, provided that the cannam@167: entire resulting derived work is distributed under the terms of a cannam@167: permission notice identical to this one. cannam@167: cannam@167: Permission is granted to copy and distribute translations of this manual cannam@167: into another language, under the above conditions for modified versions, cannam@167: except that this permission notice may be stated in a translation cannam@167: approved by the Free Software Foundation. cannam@167: @end quotation cannam@167: @end copying cannam@167: cannam@167: @dircategory Development cannam@167: @direntry cannam@167: * fftw3: (fftw3). FFTW User's Manual. cannam@167: @end direntry cannam@167: cannam@167: @titlepage cannam@167: @title FFTW cannam@167: @subtitle for version @value{VERSION}, @value{UPDATED} cannam@167: @author Matteo Frigo cannam@167: @author Steven G. Johnson cannam@167: @page cannam@167: @vskip 0pt plus 1filll cannam@167: @insertcopying cannam@167: @end titlepage cannam@167: cannam@167: @contents cannam@167: cannam@167: @ifnottex cannam@167: @node Top, Introduction, (dir), (dir) cannam@167: @top FFTW User Manual cannam@167: Welcome to FFTW, the Fastest Fourier Transform in the West. FFTW is a cannam@167: collection of fast C routines to compute the discrete Fourier transform. cannam@167: This manual documents FFTW version @value{VERSION}. cannam@167: @end ifnottex cannam@167: cannam@167: @menu cannam@167: * Introduction:: cannam@167: * Tutorial:: cannam@167: * Other Important Topics:: cannam@167: * FFTW Reference:: cannam@167: * Multi-threaded FFTW:: cannam@167: * Distributed-memory FFTW with MPI:: cannam@167: * Calling FFTW from Modern Fortran:: cannam@167: * Calling FFTW from Legacy Fortran:: cannam@167: * Upgrading from FFTW version 2:: cannam@167: * Installation and Customization:: cannam@167: * Acknowledgments:: cannam@167: * License and Copyright:: cannam@167: * Concept Index:: cannam@167: * Library Index:: cannam@167: @end menu cannam@167: cannam@167: @c ************************************************************ cannam@167: @include intro.texi cannam@167: @include tutorial.texi cannam@167: @include other.texi cannam@167: @include reference.texi cannam@167: @include threads.texi cannam@167: @include mpi.texi cannam@167: @include modern-fortran.texi cannam@167: @include legacy-fortran.texi cannam@167: @include upgrading.texi cannam@167: @include install.texi cannam@167: @include acknowledgements.texi cannam@167: @include license.texi cannam@167: @include cindex.texi cannam@167: @include findex.texi cannam@167: @c ************************************************************ cannam@167: cannam@167: @bye