comparison src/fftw-3.3.8/doc/html/Overview-of-Fortran-interface.html @ 167:bd3cc4d1df30

Add FFTW 3.3.8 source, and a Linux build
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 19 Nov 2019 14:52:55 +0000
parents
children
comparison
equal deleted inserted replaced
166:cbd6d7e562c7 167:bd3cc4d1df30
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2 <html>
3 <!-- This manual is for FFTW
4 (version 3.3.8, 24 May 2018).
5
6 Copyright (C) 2003 Matteo Frigo.
7
8 Copyright (C) 2003 Massachusetts Institute of Technology.
9
10 Permission is granted to make and distribute verbatim copies of this
11 manual provided the copyright notice and this permission notice are
12 preserved on all copies.
13
14 Permission is granted to copy and distribute modified versions of this
15 manual under the conditions for verbatim copying, provided that the
16 entire resulting derived work is distributed under the terms of a
17 permission notice identical to this one.
18
19 Permission is granted to copy and distribute translations of this manual
20 into another language, under the above conditions for modified versions,
21 except that this permission notice may be stated in a translation
22 approved by the Free Software Foundation. -->
23 <!-- Created by GNU Texinfo 6.3, http://www.gnu.org/software/texinfo/ -->
24 <head>
25 <title>FFTW 3.3.8: Overview of Fortran interface</title>
26
27 <meta name="description" content="FFTW 3.3.8: Overview of Fortran interface">
28 <meta name="keywords" content="FFTW 3.3.8: Overview of Fortran interface">
29 <meta name="resource-type" content="document">
30 <meta name="distribution" content="global">
31 <meta name="Generator" content="makeinfo">
32 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
33 <link href="index.html#Top" rel="start" title="Top">
34 <link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
35 <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
36 <link href="Calling-FFTW-from-Modern-Fortran.html#Calling-FFTW-from-Modern-Fortran" rel="up" title="Calling FFTW from Modern Fortran">
37 <link href="Extended-and-quadruple-precision-in-Fortran.html#Extended-and-quadruple-precision-in-Fortran" rel="next" title="Extended and quadruple precision in Fortran">
38 <link href="Calling-FFTW-from-Modern-Fortran.html#Calling-FFTW-from-Modern-Fortran" rel="prev" title="Calling FFTW from Modern Fortran">
39 <style type="text/css">
40 <!--
41 a.summary-letter {text-decoration: none}
42 blockquote.indentedblock {margin-right: 0em}
43 blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
44 blockquote.smallquotation {font-size: smaller}
45 div.display {margin-left: 3.2em}
46 div.example {margin-left: 3.2em}
47 div.lisp {margin-left: 3.2em}
48 div.smalldisplay {margin-left: 3.2em}
49 div.smallexample {margin-left: 3.2em}
50 div.smalllisp {margin-left: 3.2em}
51 kbd {font-style: oblique}
52 pre.display {font-family: inherit}
53 pre.format {font-family: inherit}
54 pre.menu-comment {font-family: serif}
55 pre.menu-preformatted {font-family: serif}
56 pre.smalldisplay {font-family: inherit; font-size: smaller}
57 pre.smallexample {font-size: smaller}
58 pre.smallformat {font-family: inherit; font-size: smaller}
59 pre.smalllisp {font-size: smaller}
60 span.nolinebreak {white-space: nowrap}
61 span.roman {font-family: initial; font-weight: normal}
62 span.sansserif {font-family: sans-serif; font-weight: normal}
63 ul.no-bullet {list-style: none}
64 -->
65 </style>
66
67
68 </head>
69
70 <body lang="en">
71 <a name="Overview-of-Fortran-interface"></a>
72 <div class="header">
73 <p>
74 Next: <a href="Reversing-array-dimensions.html#Reversing-array-dimensions" accesskey="n" rel="next">Reversing array dimensions</a>, Previous: <a href="Calling-FFTW-from-Modern-Fortran.html#Calling-FFTW-from-Modern-Fortran" accesskey="p" rel="prev">Calling FFTW from Modern Fortran</a>, Up: <a href="Calling-FFTW-from-Modern-Fortran.html#Calling-FFTW-from-Modern-Fortran" accesskey="u" rel="up">Calling FFTW from Modern Fortran</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
75 </div>
76 <hr>
77 <a name="Overview-of-Fortran-interface-1"></a>
78 <h3 class="section">7.1 Overview of Fortran interface</h3>
79
80 <p>FFTW provides a file <code>fftw3.f03</code> that defines Fortran 2003
81 interfaces for all of its C routines, except for the MPI routines
82 described elsewhere, which can be found in the same directory as
83 <code>fftw3.h</code> (the C header file). In any Fortran subroutine where
84 you want to use FFTW functions, you should begin with:
85 </p>
86 <a name="index-iso_005fc_005fbinding-1"></a>
87 <div class="example">
88 <pre class="example"> use, intrinsic :: iso_c_binding
89 include 'fftw3.f03'
90 </pre></div>
91
92 <p>This includes the interface definitions and the standard
93 <code>iso_c_binding</code> module (which defines the equivalents of C
94 types). You can also put the FFTW functions into a module if you
95 prefer (see <a href="Defining-an-FFTW-module.html#Defining-an-FFTW-module">Defining an FFTW module</a>).
96 </p>
97 <p>At this point, you can now call anything in the FFTW C interface
98 directly, almost exactly as in C other than minor changes in syntax.
99 For example:
100 </p>
101 <a name="index-fftw_005fplan_005fdft_005f2d-2"></a>
102 <a name="index-fftw_005fexecute_005fdft-2"></a>
103 <a name="index-fftw_005fdestroy_005fplan-3"></a>
104 <div class="example">
105 <pre class="example"> type(C_PTR) :: plan
106 complex(C_DOUBLE_COMPLEX), dimension(1024,1000) :: in, out
107 plan = fftw_plan_dft_2d(1000,1024, in,out, FFTW_FORWARD,FFTW_ESTIMATE)
108 ...
109 call fftw_execute_dft(plan, in, out)
110 ...
111 call fftw_destroy_plan(plan)
112 </pre></div>
113
114 <p>A few important things to keep in mind are:
115 </p>
116 <ul>
117 <li> <a name="index-fftw_005fcomplex-2"></a>
118 <a name="index-C_005fPTR"></a>
119 <a name="index-C_005fINT"></a>
120 <a name="index-C_005fDOUBLE"></a>
121 <a name="index-C_005fDOUBLE_005fCOMPLEX"></a>
122 FFTW plans are <code>type(C_PTR)</code>. Other C types are mapped in the
123 obvious way via the <code>iso_c_binding</code> standard: <code>int</code> turns
124 into <code>integer(C_INT)</code>, <code>fftw_complex</code> turns into
125 <code>complex(C_DOUBLE_COMPLEX)</code>, <code>double</code> turns into
126 <code>real(C_DOUBLE)</code>, and so on. See <a href="FFTW-Fortran-type-reference.html#FFTW-Fortran-type-reference">FFTW Fortran type reference</a>.
127
128 </li><li> Functions in C become functions in Fortran if they have a return value,
129 and subroutines in Fortran otherwise.
130
131 </li><li> The ordering of the Fortran array dimensions must be <em>reversed</em>
132 when they are passed to the FFTW plan creation, thanks to differences
133 in array indexing conventions (see <a href="Multi_002ddimensional-Array-Format.html#Multi_002ddimensional-Array-Format">Multi-dimensional Array Format</a>). This is <em>unlike</em> the legacy Fortran interface
134 (see <a href="Fortran_002dinterface-routines.html#Fortran_002dinterface-routines">Fortran-interface routines</a>), which reversed the dimensions
135 for you. See <a href="Reversing-array-dimensions.html#Reversing-array-dimensions">Reversing array dimensions</a>.
136
137 </li><li> <a name="index-alignment-4"></a>
138 <a name="index-SIMD-2"></a>
139 Using ordinary Fortran array declarations like this works, but may
140 yield suboptimal performance because the data may not be not aligned
141 to exploit SIMD instructions on modern proessors (see <a href="SIMD-alignment-and-fftw_005fmalloc.html#SIMD-alignment-and-fftw_005fmalloc">SIMD alignment and fftw_malloc</a>). Better performance will often be obtained
142 by allocating with &lsquo;<samp>fftw_alloc</samp>&rsquo;. See <a href="Allocating-aligned-memory-in-Fortran.html#Allocating-aligned-memory-in-Fortran">Allocating aligned memory in Fortran</a>.
143
144 </li><li> <a name="index-fftw_005fexecute-5"></a>
145 Similar to the legacy Fortran interface (see <a href="FFTW-Execution-in-Fortran.html#FFTW-Execution-in-Fortran">FFTW Execution in Fortran</a>), we currently recommend <em>not</em> using <code>fftw_execute</code>
146 but rather using the more specialized functions like
147 <code>fftw_execute_dft</code> (see <a href="New_002darray-Execute-Functions.html#New_002darray-Execute-Functions">New-array Execute Functions</a>).
148 However, you should execute the plan on the <code>same arrays</code> as the
149 ones for which you created the plan, unless you are especially
150 careful. See <a href="Plan-execution-in-Fortran.html#Plan-execution-in-Fortran">Plan execution in Fortran</a>. To prevent
151 you from using <code>fftw_execute</code> by mistake, the <code>fftw3.f03</code>
152 file does not provide an <code>fftw_execute</code> interface declaration.
153
154 </li><li> <a name="index-flags-8"></a>
155 Multiple planner flags are combined with <code>ior</code> (equivalent to &lsquo;<samp>|</samp>&rsquo; in C). e.g. <code>FFTW_MEASURE | FFTW_DESTROY_INPUT</code> becomes <code>ior(FFTW_MEASURE, FFTW_DESTROY_INPUT)</code>. (You can also use &lsquo;<samp>+</samp>&rsquo; as long as you don&rsquo;t try to include a given flag more than once.)
156
157 </li></ul>
158
159 <table class="menu" border="0" cellspacing="0">
160 <tr><td align="left" valign="top">&bull; <a href="Extended-and-quadruple-precision-in-Fortran.html#Extended-and-quadruple-precision-in-Fortran" accesskey="1">Extended and quadruple precision in Fortran</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
161 </td></tr>
162 </table>
163
164 <hr>
165 <div class="header">
166 <p>
167 Next: <a href="Reversing-array-dimensions.html#Reversing-array-dimensions" accesskey="n" rel="next">Reversing array dimensions</a>, Previous: <a href="Calling-FFTW-from-Modern-Fortran.html#Calling-FFTW-from-Modern-Fortran" accesskey="p" rel="prev">Calling FFTW from Modern Fortran</a>, Up: <a href="Calling-FFTW-from-Modern-Fortran.html#Calling-FFTW-from-Modern-Fortran" accesskey="u" rel="up">Calling FFTW from Modern Fortran</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
168 </div>
169
170
171
172 </body>
173 </html>