~ubuntu-branches/ubuntu/quantal/fftw/quantal

« back to all changes in this revision

Viewing changes to doc/fftw.ps

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2011-11-29 01:48:33 UTC
  • mfrom: (5.1.1 sid)
  • Revision ID: package-import@ubuntu.com-20111129014833-3leawsns2nghyaoj
Tags: 2.1.5-1
* Team upload.
* New upstream release
* Package moved into the Debian Science team (no answer from the previous
  maintainer) and package not maintained.
* Standards-Version updated to version 3.9.2
* Vcs-Browser & Vcs-Svn updated
* Switch to mpi-default-dev (Closes: #571446)
* Get ride of .la files (Closes: #633175)
* Fix lintian warning debhelper-but-no-misc-depends
* Fix lintian warning patch-system-but-direct-changes-in-diff 
* Switch to dpkg-source 3.0 (quilt) format

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
%!PS-Adobe-2.0
2
 
%%Creator: dvips(k) 5.78 Copyright 1998 Radical Eye Software (www.radicaleye.com)
 
2
%%Creator: dvips(k) 5.86e Copyright 2001 Radical Eye Software
3
3
%%Title: fftw.dvi
4
 
%%Pages: 73
 
4
%%Pages: 74
5
5
%%PageOrder: Ascend
6
6
%%BoundingBox: 0 0 596 842
7
7
%%EndComments
8
 
%DVIPSCommandLine: dvips -Z fftw.dvi -o fftw.ps
 
8
%DVIPSWebPage: (www.radicaleye.com)
 
9
%DVIPSCommandLine: dvips -Z -o fftw.ps fftw.dvi
9
10
%DVIPSParameters: dpi=600, compressed
10
 
%DVIPSSource:  TeX output 1999.11.07:2050
 
11
%DVIPSSource:  TeX output 2003.03.24:0228
11
12
%%BeginProcSet: texc.pro
12
13
%!
13
 
/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
14
 
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
15
 
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
16
 
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
17
 
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
18
 
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
19
 
TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
20
 
forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
21
 
/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
22
 
/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
23
 
/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
24
 
string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
25
 
end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
26
 
/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
27
 
N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
28
 
length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
29
 
128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
30
 
get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
31
 
dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
32
 
/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
33
 
/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
34
 
0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
35
 
setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
36
 
.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
37
 
/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
38
 
gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
39
 
add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
40
 
/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
41
 
dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
42
 
adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
43
 
idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
44
 
putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
45
 
adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
46
 
{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
47
 
adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
48
 
chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
49
 
}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
50
 
length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
51
 
cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
52
 
0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
53
 
add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
54
 
/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
55
 
known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
56
 
/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn
57
 
put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N
58
 
/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley
59
 
X /rulex X V}B /V{}B /RV statusdict begin /product where{pop false[
60
 
(Display)(NeXT)(LaserWriter 16/600)]{dup length product length le{dup
61
 
length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
62
 
forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
63
 
RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
64
 
false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
65
 
round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
66
 
rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
67
 
{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
68
 
B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
69
 
4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
70
 
p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
71
 
a}B /bos{/SS save N}B /eos{SS restore}B end
 
14
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
 
15
N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
 
16
mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
 
17
0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
 
18
landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
 
19
mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
 
20
matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
 
21
exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
 
22
statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
 
23
N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
 
24
/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
 
25
/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
 
26
array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
 
27
df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
 
28
definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
 
29
}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
 
30
B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
 
31
1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
 
32
1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
 
33
0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
 
34
sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
 
35
rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
 
36
gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
 
37
/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
 
38
/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
 
39
A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
 
40
get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
 
41
ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
 
42
fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
 
43
{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
 
44
chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
 
45
1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
 
46
forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
 
47
/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
 
48
}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
 
49
bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
 
50
mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
 
51
SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
 
52
userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
 
53
1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
 
54
index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
 
55
/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
 
56
/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
 
57
(LaserWriter 16/600)]{A length product length le{A length product exch 0
 
58
exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
 
59
end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
 
60
grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
 
61
imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
 
62
exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
 
63
fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
 
64
delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
 
65
B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
 
66
p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
 
67
rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
72
68
 
73
69
%%EndProcSet
74
70
%%BeginProcSet: special.pro
75
71
%!
76
 
TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
77
 
/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
78
 
false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
79
 
/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
80
 
div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
81
 
/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
82
 
10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
83
 
/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
84
 
true def end /@MacSetUp{userdict /md known{userdict /md get type
85
 
/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
86
 
length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
87
 
N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
88
 
clippath mark{transform{itransform moveto}}{transform{itransform lineto}
89
 
}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
90
 
itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
91
 
closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
92
 
0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
93
 
/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
94
 
scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
95
 
ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
96
 
not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
97
 
TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
98
 
pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
99
 
-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
100
 
TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
101
 
sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
102
 
0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
103
 
2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
104
 
{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
105
 
div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
106
 
N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
107
 
maxlength dict begin /magscale true def normalscale currentpoint TR
108
 
/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
109
 
/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
110
 
psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
111
 
scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
112
 
/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
 
72
TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
 
73
/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
 
74
/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
 
75
/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
 
76
/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
 
77
X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
 
78
/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
 
79
/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
 
80
{userdict/md get type/dicttype eq{userdict begin md length 10 add md
 
81
maxlength ge{/md md dup length 20 add dict copy def}if end md begin
 
82
/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
 
83
atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
 
84
itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
 
85
transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
 
86
curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
 
87
pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
 
88
if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
 
89
-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
 
90
get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
 
91
yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
 
92
neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
 
93
noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
 
94
90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
 
95
neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
 
96
1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
 
97
2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
 
98
-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
 
99
TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
 
100
Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
 
101
}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
 
102
save N userdict maxlength dict begin/magscale true def normalscale
 
103
currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
 
104
/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
 
105
psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
 
106
psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
 
107
TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
113
108
psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
114
109
roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
115
 
moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
116
 
begin /SpecialSave save N gsave normalscale currentpoint TR
117
 
@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
118
 
{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
 
110
moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
 
111
begin/SpecialSave save N gsave normalscale currentpoint TR
 
112
@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
 
113
CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
119
114
closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
120
115
sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
121
116
}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
122
117
CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
123
 
lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
124
 
}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
125
 
end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
126
 
N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
127
 
/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
128
 
SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
129
 
/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
130
 
yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
 
118
lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
 
119
/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
 
120
repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
 
121
/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
 
122
currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
 
123
moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
 
124
/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
 
125
1 startangle endangle arc savematrix setmatrix}N end
131
126
 
132
127
%%EndProcSet
133
128
TeXDict begin 39158280 55380996 1000 600 600 (fftw.dvi)
136
131
/Fa 1 47 df<13FCEA03FF000F13804813C05AA25AA2B5FCA31480A214006C5A6C5A6C5A
137
132
EA0FE0121271912B>46 D E
138
133
%EndDVIPSBitmapFont
139
 
%DVIPSBitmapFont: Fb cmtt9 9 47
140
 
/Fb 47 123 df<EB3FE03801FFF84813FE000FEBFF804814C0393FE07FE0EB800F397F00
141
 
07F0007EEB03F800FE13015A6C14FC1400A3127CC8FCA2140115F8A2140315F01407EC0F
142
 
E0EC1FC0143FEC7F80ECFF00495A495A495A495A495A495A495A01FEC7FC485AD807F813
143
 
78484813FC485A485A48B5FCB6FCA36C14F81E2F7CAE27>50 D<EB1FF8EBFFFE0003EBFF
144
 
80000F14C015E0391FF01FF0393FC007F8EB800115FC1400A26CC7FC1204C8FC140115F8
145
 
1403EC07F0140FEC3FE090381FFFC0491380A215E06D13F09038001FF8EC03FC1401EC00
146
 
FE157E157F153FA21238127C12FEA2157F48147E6C14FE007FEB01FCEB8003393FF01FF8
147
 
6CB512F06C14E000031480C6EBFE00EB1FF820307DAE27>I<1278B612FE15FFA315FE39
148
 
FC0001FCEC03F8EC07F0007814E0C7120FEC1FC01580143FEC7F00147E14FE5C13015C13
149
 
035C13075CA2495AA3495AA3133F91C7FCA55B137EA9133C20307DAE27>55
150
 
D<EB03F0497EA2497EA4143CEB1F3EA5EB3F3FA3EB3E1FA2017E7FA4496C7EA548486C7E
151
 
A390B5FCA24880A3EBF003A248486C7EA4000F803A7FFC0FFF8000FF15C06D5A497E007F
152
 
1580222F7EAE27>65 D<007FB5FCB612C08115F87E3907E003FCEC00FE157E157F81A615
153
 
7EA25D1403EC0FF890B55A15C015F081819038E000FE157FED3F80151FA2ED0FC0A6151F
154
 
1680153FED7F004A5A007FB55AB65A5D15E06C1480222E7FAD27>I<903803F80E90381F
155
 
FE1F90383FFFBF90B6FC5A3803FE0F3807F803497E48487E485A49137FA248C7123FA25A
156
 
127E151E150012FE5AAA7E127EA2151E007F143F7EA26C7E157F6D137E6C6C13FE3907F0
157
 
01FCEBF8033903FE0FF86CB512F06C14E0013F13C06D1300EB03F820307DAE27>I<387F
158
 
FFFC14FFB612C06C80813907E00FF81407EC01FC6E7EA2157E157F811680151FA316C015
159
 
0FABED1F80A3153F1600A25D15FEA24A5A4A5A140F007FB55A5DB65A6C91C7FC14FC222E
160
 
7FAD27>I<007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC07804A7EA390B5
161
 
FCA5EBE00FA36E5A91C8FCA4ED03C0ED07E0A7007FB6FCB7FCA36C15C0232E7FAD27>I<
162
 
007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC07804A7EA390B5FCA5EBE00F
163
 
A36E5A91C8FCAC387FFF80B57EA36C5B222E7EAD27>I<3A7FFE07FFE0B54813F0A36C48
164
 
6C13E03A07E0007E00AF90B512FEA59038E0007EB03A7FFE07FFE0B54813F0A36C486C13
165
 
E0242E7FAD27>72 D<007FB512E0B612F0A36C14E039001F8000B3B2007FB512E0B612F0
166
 
A36C14E01C2E7BAD27>I<3A7FFC07FF8016C0486C5A6C487E16803A07C001F80014035D
167
 
4A5A4A5A141F5D4AC7FC147E14FE5CEBC1F8EBC3F013C75CEBCFF0EBDFF813FF8013FEEB
168
 
FC7E143EEBF83F497E01E07F140F01C07F1407811403816E7EA26E7E157C157E3A7FFC01
169
 
FFC016E0486C5A6C487E16C0232E7FAD27>75 D<387FFFC080B5FC7E5CD803F0C8FCB3AA
170
 
ED0780ED0FC0A7007FB6FCA2B7FC7E1680222E7FAD27>I<D87FE0EB7FE0486CEBFFF0A2
171
 
6D5A007F15E0000F150001B813DFEBBC03A3EBBE07019E139FA3EB9F0FA2018F131FA214
172
 
9FA2EB879EA4EB839C14FCA3EB81F8A2EB80F01400AAD87FF0EBFFE0486C4813F0A36C48
173
 
6C13E0242E7FAD27>I<3A7FF003FFE0486C4813F0A213FC007F6D13E000079038003E00
174
 
13DEA313CFA3148013C714C0A213C314E0A213C114F0A3EBC0F8A31478147CA2143C143E
175
 
A2141E141F140FA3EC07BEA3EC03FEEA7FFCEAFFFE1401A26C486C5A242E7FAD27>I<EB
176
 
FFFC0007EBFF80001F14E0A24814F0EBC00F397F8007F8EB0003007E1301A348EB00FCB3
177
 
A76C1301007E14F8A3007F1303EB8007393FE01FF090B5FC6C14E0A200071480C6EBFC00
178
 
1E307CAE27>I<007FB5FCB612E081816C803907E003FEEC00FF81ED3F80151F16C0150F
179
 
A6151F1680153FED7F005DEC03FE90B55A5D5D5D92C7FC01E0C8FCADEA7FFEB5FCA36C5A
180
 
222E7FAD27>I<387FFFF0B512FE6E7E816C803907E01FF014076E7E1401811400A51401
181
 
5D14034A5A141F90B55A5D5DA281EBE01F6E7E14076E7EA816F0EDF1F8A4397FFE01FBB5
182
 
EBFFF08016E06C48EB7FC0C8EA1F00252F7FAD27>82 D<90387FC0E03901FFF1F0000713
183
 
FF5A5AEA3FE0EB801F387F000F007E130712FE5A1403A3EC01E06C90C7FC127E127FEA3F
184
 
C013F86CB47E6C13F86C13FE6CEBFF80C614C0010F13E0010013F0140FEC07F814031401
185
 
15FC1400127812FCA46CEB01F8A26C130390388007F09038F01FE090B5FC15C0150000F8
186
 
5B38701FF81E307CAE27>I<007FB61280B712C0A439FC03F00FA60078EC0780000091C7
187
 
FCB3AB90B512C04880A36C5C222E7EAD27>I<3A7FFE01FFF8B54813FCA36C486C13F83A
188
 
07E0001F80B3AB6D133F00031500A26D5B0001147E6D13FE6C6C485A90387F87F814FF6D
189
 
5B010F13C06D5BD901FEC7FC262F80AD27>I<D87FE0EB7FE0486CEBFFF0A36C48EB7FE0
190
 
001FC7EA0F80A76C6CEB1F00A614F0EB81F83907C3FC3EA4149CEBC79EA30003143CA301
191
 
E7137CEBEF9FA2140FA200011478A49038FE07F8A300005CA2EBFC0390387801E0242F7F
192
 
AD27>87 D<393FFC1FFE387FFE3F815D383FFC1F3903F00FE001F85B1201EBFC1F00005C
193
 
EBFE3F017E90C7FCEB7F7FEB3F7E14FE6D5AA26D5AA26D5AA21303130780130F80131F80
194
 
EB3F7E147F497E017E7F141F01FC7F140FD801F87F14071203496C7E120701E07F3A7FFC
195
 
0FFF8000FF15C06D5A497E007F1580222E7EAD27>I<007FB512F8B612FCA46C14F81E06
196
 
7C7E27>95 D<3803FFC0000F13F04813FC4813FF811380EC1FC0381F000F000480C71207
197
 
A2EB0FFF137F0003B5FC120F5A383FFC07EA7FC0130012FE5AA46C130F007F131FEBC0FF
198
 
6CB612806C15C07E000313F1C69038807F8022207C9F27>97 D<EA7FE0487EA3127F1203
199
 
A914FF01F313C090B512F08181EC81FE49C67E49EB3F8049131F16C049130FA216E01507
200
 
A6150F16C07F151F6DEB3F80157F6DEBFF009038FF83FEECFFFC5D5D01F313C02601E0FE
201
 
C7FC232E7FAD27>I<EB0FFF017F13C048B512E04814F05A380FF807EA1FE0393FC003E0
202
 
903880008048C8FC127EA212FE5AA67E127EA2007F14F0393F8001F813C0381FE003390F
203
 
F80FF06CB5FC6C14E06C14C06C6C1300EB0FF81D207B9F27>I<EC3FF04A7EA3143F1401
204
 
A9EB0FE1EB7FFD48B5FC5A5A380FF83F381FE00F383FC007EB8003EA7F00007E1301A212
205
 
FE5AA67E007E1303A2127F6C1307EB800F381FE01F380FF03F6CB612C06C15E06C13FD38
206
 
007FF9D91FE013C0232E7EAD27>I<EB0FF8EB3FFE90B51280000314C04814E0390FFC0F
207
 
F0391FE003F8EBC001D83F8013FC48C7FC127E157E12FEB612FEA415FC00FCC8FC7E127E
208
 
127F6C143C6D137E6C7E01F013FE390FFC07FC6CB5FC000114F86C14F0013F13C0903807
209
 
FE001F207D9F27>I<EC1FF0ECFFF84913FC4913FE5BEB0FF014C0011F137CEC8000A600
210
 
7FB512F0B612F8A36C14F039001F8000B3A4003FB512C04814E0A36C14C01F2E7EAD27>
211
 
I<153F90391FC0FF80D97FF313C048B612E05A4814EF390FF07F873A1FC01FC3C0EDC000
212
 
EB800F48486C7EA66C6C485AEBC01FA2390FF07F8090B5C7FC5C485BEB7FF0EB1FC090C9
213
 
FCA27F6CB5FC15E015F84814FE4880EB8001007EC7EA3F80007C140F00FC15C0481407A4
214
 
6C140F007C1580007F143F6C6CEB7F009038F807FF6CB55A000714F86C5CC614C0D90FFC
215
 
C7FC23337EA027>I<EA7FE0487EA3127F1203A9147F9038F1FFC001F713F090B5FC8114
216
 
C1EC01FCEBFE005B5BA25BB03A7FFF83FFE0B500C713F0A36C018313E0242E7FAD27>I<
217
 
130F497E497EA46D5A6DC7FC90C8FCA7383FFF80487FA37EEA000FB3A4007FB512F0B6FC
218
 
15F815F07E1D2F7BAE27>I<EA7FE07F12FF127FA21201A991383FFFC04A13E0A36E13C0
219
 
913803F8004A5A4A5A4A5A4A5A02FFC7FCEBF1FEEBF3FCEBF7F8EBFFFC8080143F496C7E
220
 
496C7E01F87FEBF0076E7E6E7E816E7E157E3A7FFFC1FFF002C313F8B512E36C13C316F0
221
 
252E80AD27>107 D<387FFF80B57EA37EEA000FB3B2007FB512F8B612FCA36C14F81E2E
222
 
7CAD27>I<397F07C01F3AFF9FF07FC09039FFF9FFE091B57E7E3A0FFC7FF1F89038F03F
223
 
C001E0138001C01300A3EB803EB03A7FF0FFC3FF486C01E3138001F913E701F813E36C48
224
 
01C313002920819F27>I<387FE07F39FFF1FFC001F713F090B5FC6C80000313C1EC01FC
225
 
EBFE005B5BA25BB03A7FFF83FFE0B500C713F0A36C018313E024207F9F27>I<EB1FE0EB
226
 
7FF83801FFFE487F481480390FF03FC0391FC00FE0393F8007F0EB00034814F8007E1301
227
 
A248EB00FCA76C1301007E14F8A2007F1303393F8007F0A2391FE01FE0390FF03FC06CB5
228
 
12806C14006C5B38007FF8EB1FE01E207C9F27>I<387FE0FFD8FFF313C090B512F0816C
229
 
800003EB81FE49C67E49EB3F8049131F16C049130FA216E01507A6150F16C07F151F6DEB
230
 
3F80157F6DEBFF009038FF83FEECFFFC5D5D01F313C0D9F0FEC7FC91C8FCAC387FFF80B5
231
 
7EA36C5B23317F9F27>I<397FFC03FC39FFFE0FFF023F13804A13C0007F90B5FC39007F
232
 
FE1F14F89138F00F809138E002004AC7FC5CA291C8FCA2137EAD007FB57EB67EA36C5C22
233
 
207E9F27>114 D<9038FFF3800007EBFFC0121F5A5AEB803F38FC000F5AA2EC07806C90
234
 
C7FCEA7F8013FC383FFFF06C13FC000713FF00011480D8000F13C09038003FE014070078
235
 
EB03F000FC1301A27E14036CEB07E0EBE01F90B512C01580150000FB13FC38707FF01C20
236
 
7B9F27>I<133C137EA8007FB512F0B612F8A36C14F0D8007EC7FCAE1518157EA415FE6D
237
 
13FC1483ECFFF86D13F06D13E0010313C0010013001F297EA827>I<397FE01FF8486C48
238
 
7EA3007F131F00031300B21401A21403EBFC0F6CB612E016F07EEB3FFE90390FF87FE024
239
 
207F9F27>I<3A7FFE07FFE000FF15F06D5A497E007F15E03A0F80001F00A36D5B000714
240
 
3EA414F0EBC1F83903E3FC7CA4EBE79EA200011478A301F713F8A2EBFF0F6C5CA3EBFE07
241
 
90387C03E024207F9F27>119 D<393FFC1FFF486C5A168016006C487E3901F807E06C6C
242
 
485A4A5A017E90C7FC6D5AEB1F7E5C6D5A13076D5A5C80497E130F497E143EEB3E3FEB7E
243
 
1F90387C0F8001F87F00016D7E3803F0033A7FFE1FFF80A2B54813C06C486C1380A22220
244
 
7E9F27>I<3A7FFC0FFF80486C4813C0A36C486C13803A07E000F800000313015D13F000
245
 
01130301F85B1200A26D485A137CA290387E0F80133EA2011F90C7FC5CA2130F149E14BE
246
 
130714FC1303A25C1301A25CA213035CA213075C1208EA3E0F007F5B131FD87E7FC8FCEA
247
 
7FFE6C5A5B6C5AEA07C022317E9F27>I<001FB512FE4814FFA490380001FEEC03FCEC07
248
 
F8EC0FF0001EEB1FE0C7EA3FC0EC7F80ECFF00495A495A495AEB1FE0495A495A49C7FC48
249
 
5A4848131E4848133F485A485A485A485AB7FCA46C14FE20207E9F27>I
250
 
E
251
 
%EndDVIPSBitmapFont
252
 
%DVIPSBitmapFont: Fc cmti9 9 1
253
 
/Fc 1 47 df<121C127F12FFA412FE12380808778718>46 D E
254
 
%EndDVIPSBitmapFont
255
 
%DVIPSBitmapFont: Fd cmr9 9 55
256
 
/Fd 55 123 df<91393FE00FE0903A01FFF83FF8903A07E01EF83C903A1F800FF07E903A
257
 
3F001FE0FE017E133F4914C0485A1738484890381F8000ACB812C0A33B03F0001F8000B3
258
 
A7486C497EB50083B5FCA32F357FB42D>11 D<EC1FE0ECFFFC903803F01E90390FC00780
259
 
EB1F8090393F000FC0017E131F5BA2485AED0F8092C7FCA9ED0FC0B7FCA33901F8001F15
260
 
0FB3A6486CEB1FE0267FFFC1B5FCA328357FB42B>I<EC1FF891B512C0903803F00F9038
261
 
0FC01FEB1F80EB3F00137E5B150F485AACB7FCA33901F8000FB3A7486CEB1FE0267FFFE3
262
 
B5FCA328357FB42B>I<123C127EB4FCA21380A2127F123D1201A412031300A25A120612
263
 
0E120C121C5A5A126009177A8715>44 D<B512F0A514057F921A>I<EB0FE0EB7FFCEBF8
264
 
3E3903E00F803907C007C0EB8003000F14E0391F0001F0A24814F8A2003E1300007E14FC
265
 
A500FE14FEB2007E14FCA56CEB01F8A36C14F0A2390F8003E03907C007C0A23903E00F80
266
 
3900F83E00EB7FFCEB0FE01F347DB126>48 D<13075B5B137FEA07FFB5FC13BFEAF83F12
267
 
00B3B3A2497E007FB51280A319327AB126>I<EB3FC0EBFFF0000313FC380F80FF391E00
268
 
7F80001CEB3FC048EB1FE048130F15F00060130712FC6C14F87E1403A3007E1307123CC7
269
 
FC15F0A2140F15E0EC1FC0A2EC3F801500147E5C495A5C495A495A495A49C7FC133E133C
270
 
4913185B485A48481330485A48C7FC001C1470001FB512F05A5AB612E0A31D327CB126>
271
 
I<EB1FE0EBFFFC4813FF3907E03F80390F001FC0001EEB0FE0001CEB07F0123F018013F8
272
 
140313C01380A2381F0007C7FC15F0A2EC0FE015C0141FEC3F80EC7E00EB01F8EB7FE014
273
 
FCEB003FEC1FC0EC0FE0EC07F015F8140315FC140115FEA3127EB4FCA415FC4813031278
274
 
0070EB07F86C14F0003C130F001FEB1FE0390FE03F800003B51200C613FCEB1FE01F347D
275
 
B126>I<EC01C0A214031407A2140F141FA2143F147F146F14CF1301EB038F140F130713
276
 
0E130C131C13381330137013E013C0EA0180120313001206120E120C5A123812305A12E0
277
 
B71280A3C7380FC000A94A7E0107B51280A321337EB226>I<000C14C0380FC00F90B512
278
 
8015005C5C14F014C0D80C18C7FC90C8FCA9EB0FC0EB7FF8EBF07C380FC03F9038001F80
279
 
EC0FC0120E000CEB07E0A2C713F01403A215F8A41218127E12FEA315F0140712F8006014
280
 
E01270EC0FC06C131F003C14806CEB7F00380F80FE3807FFF8000113E038003F801D347C
281
 
B126>I<14FE903807FF80011F13E090383F00F0017C13703901F801F8EBF003EA03E012
282
 
07EA0FC0EC01F04848C7FCA248C8FCA35A127EEB07F0EB1FFC38FE381F9038700F809038
283
 
E007C039FFC003E0018013F0EC01F8130015FC1400A24814FEA5127EA4127F6C14FCA26C
284
 
1301018013F8000F14F0EBC0030007EB07E03903E00FC03901F81F806CB51200EB3FFCEB
285
 
0FE01F347DB126>I<1230123C003FB6FCA34814FEA215FC0070C7123800601430157015
286
 
E04814C01401EC0380C7EA07001406140E5C141814385CA25CA2495A1303A3495AA2130F
287
 
A3131F91C7FCA25BA55BA9131C20347CB126>I<EB0FE0EB7FFC90B5FC3903F01F803907
288
 
C007C0390F0003E0000EEB01F0001E1300001C14F8003C1478A3123EA2003F14F86D13F0
289
 
EBC001D81FF013E09038F803C0390FFE07803907FF0F006C13DE6C13F87EEB3FFE8001F7
290
 
13C0D803E313E0D8078013F0390F007FF8001E131F003EEB07FC003C1303481301EC007E
291
 
12F848143EA2151EA37E153C1278007C14787E6C14F0390F8003E03907F01FC00001B512
292
 
0038007FFCEB1FE01F347DB126>I<EB0FE0EB7FF8EBFFFE3803F83F3907E00F80390FC0
293
 
07C0D81F8013E0EC03F0EA3F0048EB01F8127EA200FE14FC1400A415FEA5007E1301A212
294
 
7F7E1403EA1F80000F13073807C00E3803E01C3801F03838007FF090381FC0FC90C7FC14
295
 
01A215F8A215F01403001F14E0383F800715C0140FEC1F809038003F00001C137E381F01
296
 
FC380FFFF0000313C0C690C7FC1F347DB126>I<DA03FE130C91393FFF801C91B512E090
297
 
3A03FE01F83C903A0FF0003C7CD91FC0EB0EFCD97F80130701FEC7120348481401000315
298
 
005B4848157C485A173C485A171C123F5B007F160CA390C9FC481600AB7E6D150CA3123F
299
 
7F001F161C17186C7E17386C6C15306C6C15706D15E012016C6CEC01C0D97F80EB0380D9
300
 
1FC0EB0F00D90FF0131ED903FE13FC0100B512F0023F13C0DA03FEC7FC2E377CB437>67
301
 
D<B77E16F016FE3A01FE0001FF00009138003FC0EE0FE0707E707E707E707E177E177FEF
302
 
3F80A2EF1FC0A3EF0FE0A418F0AA18E0A3171F18C0A21880173F18005F17FE5F4C5AEE07
303
 
F04C5AEE3FC000014AB45AB748C7FC16F8168034337EB23B>I<B812C0A3D803FCC7127F
304
 
0001150FEE03E01601A21600A21760A403061330A41700150EA2151E157E90B512FEA390
305
 
38FC007E151E150EA21506170CA3171892C7FCA41738A21770A217F01601160316070003
306
 
157FB812E0A32E337DB234>I<B81280A3D803FCC7FC0001151FEE07C01603A21601A216
307
 
00A41760150CA31700A2151CA2153C15FC90B5FCA3EBFC00153C151CA2150CA592C8FCAB
308
 
487EB512FEA32B337DB232>I<B512FEA3000113006C5AB3B3A7487EB512FEA317337EB2
309
 
1C>73 D<B512FEA3D803FEC9FC6C5AB3A9EE0180A416031700A45EA25E5E5E5E16FE0003
310
 
1407B7FCA329337DB230>76 D<D8FFFC923801FFF86D5DA20003EFFE00D801BFED06FCA3
311
 
D99F80140CA2D98FC01418A3D987E01430A2D983F01460A3D981F814C0A3D980FCEB0180
312
 
A2027EEB0300A36E1306A26E6C5AA36E6C5AA36E6C5AA26E6C5AA36E6C5AA3913800FD80
313
 
A2037FC7FCA3486C133ED80FF04B7EB5011C90387FFFF8A33D337CB246>I<D8FFFE9138
314
 
1FFFF87F80C6030013006E143CD9DFE01418EBCFF0A2EBC7F8EBC3FCA2EBC1FEEBC0FF6E
315
 
7EA26E7E6E7EA26E7E6E7E6E7EA26E7E6E7EA2ED7F80ED3FC0ED1FE0A2ED0FF0ED07F8A2
316
 
ED03FCED01FEED00FFA2EE7F98EE3FD8A2EE1FF8160F1607A216031601A2486C1400D807
317
 
F81578B500C01438A2171835337EB23A>I<B612FEEDFFC016F03A03FC0007FC0001EC00
318
 
FE167FEE3F80EE1FC017E0160FA217F0A617E0A2EE1FC0A2EE3F80EE7F0016FEED07F890
319
 
B65A168001FCC9FCB3A2487EB512F8A32C337DB234>80 D<B612FCEDFF8016F03A01FE00
320
 
07FC0000EC01FEED007F707E707E83160F83A65FA24C5AA24C5A047EC7FC4B5AED0FF090
321
 
B612C093C8FC9039FE001FC0ED07F06F7E6F7E150082167E167FA583A5180C17C0A2043F
322
 
131C486C1618B500FEEB1FE0040F1338933807F070C93801FFE09338003F8036357EB239
323
 
>82 D<90381FE00390387FFC0748B5FC3907F01FCF390F8003FF48C7FC003E80814880A2
324
 
00788000F880A46C80A27E92C7FC127F13C0EA3FF013FF6C13F06C13FF6C14C06C14F0C6
325
 
80013F7F01037F9038003FFF140302001380157F153FED1FC0150F12C0A21507A37EA26C
326
 
EC0F80A26C15006C5C6C143E6C147E01C05B39F1FC03F800E0B512E0011F138026C003FE
327
 
C7FC22377CB42B>I<007FB712FEA390398007F001D87C00EC003E0078161E0070160EA2
328
 
0060160600E01607A3481603A6C71500B3AB4A7E011FB512FCA330337DB237>I<B500FE
329
 
90381FFFF8A3000190C813006C48153C1718B3AF1738017F1530A217706D6C1460011F15
330
 
E06E495A010F14036D6C495A6D6C49C7FCD901FC131E6DB413FC91383FFFF0020F13C002
331
 
0190C8FC35357EB23A>I<B5D8F007B539800FFFF0A3000390C7273FF000011300D801FC
332
 
6E48EB007C1A386D140F00001930836D020715706D1860A26E496C14E0013F60A26ED919
333
 
FC1301011F60A26ED930FE1303010F95C7FCA26ED9607F5B01071706A26E9039C03F800E
334
 
0103170CA2913BFC01801FC01C01011718A2913BFE03000FE03801001730A2DAFF06EB07
335
 
F0027F5EA2038CEB03F8023F5EA203D8EB01FC021FEDFD80A203F0EB00FF020F93C8FCA2
336
 
4B800207157EA24B143E0203153CA24B141C020115184C357FB24F>87
337
 
D<EB7F803803FFF0380F80FC381C003E003F133F6D6C7E6E7EA26E7EEA1F00C7FCA4EB01
338
 
FF131FEBFF873803FC07EA0FF0EA1FC0EA3F80127F13004815C05AA3140FA26C131F6C13
339
 
3B3A3F8071F180391FC1E1FF2607FFC013003900FE003C22237DA126>97
340
 
D<EA03F012FFA312071203AEEC3F80ECFFE09038F3C0F89038F7007E01FE7F49EB1F8049
341
 
EB0FC05BED07E016F0A2150316F8AA16F0150716E0A2ED0FC07F6DEB1F8001ECEB3F0001
342
 
CF137C90388381F8903801FFE0C76CC7FC25357EB32B>I<EB07F8EB3FFF9038FC07C039
343
 
01F000E03903E003F03807C007120FEA1F80123F90380003E04890C7FCA2127E12FEAA12
344
 
7FA26C14187F001F14386D1330000F14706C6C13E03903F001C03900FC0F8090383FFE00
345
 
EB07F01D237EA122>I<153FEC0FFFA3EC007F81AEEB07F0EB3FFCEBFC0F3901F003BF39
346
 
07E001FF48487E48487F8148C7FCA25A127E12FEAA127E127FA27E6C6C5BA26C6C5B6C6C
347
 
4813803A03F007BFFC3900F81E3FEB3FFCD90FE0130026357DB32B>I<EB0FE0EB7FFCEB
348
 
F83F3903F00F80D807E013C0390FC007E0381F800315F0EA3F0014014814F8127EA212FE
349
 
A2B6FCA248C8FCA5127E127FA26C1418A26C6C1338000F14306D13706C6C13E03901F003
350
 
C03900FC0F00EB3FFEEB07F01D237EA122>I<EB01FCEB07FF90381F078090383E0FC0EB
351
 
7C1F13FCEA01F8A20003EB070049C7FCACB512F0A3D803F0C7FCB3A7487E387FFFE0A31A
352
 
357FB417>I<151F90391FC07F809039FFF8E3C03901F07FC73907E03F033A0FC01F8380
353
 
9039800F8000001F80EB00074880A66C5CEB800F000F5CEBC01F6C6C48C7FCEBF07C380E
354
 
FFF8380C1FC0001CC9FCA3121EA2121F380FFFFEECFFC06C14F06C14FC4880381F000100
355
 
3EEB007F4880ED1F8048140FA56C141F007C15006C143E6C5C390FC001F83903F007E0C6
356
 
B51280D91FFCC7FC22337EA126>I<EA03F012FFA312071203AEEC1FC0EC7FF09038F1E0
357
 
FC9038F3807C9038F7007E13FE497FA25BA25BB3486CEB7F80B538C7FFFCA326347EB32B
358
 
>I<EA0780EA0FC0EA1FE0A4EA0FC0EA0780C7FCAAEA07E012FFA3120F1207B3A6EA0FF0
359
 
B5FCA310337EB215>I<EB03C0EB07E0EB0FF0A4EB07E0EB03C090C7FCAAEB03F013FFA3
360
 
13071303B3B01238127C00FE13E0130714C0130F007C138038381F00EA1FFCEA07F01443
361
 
84B217>I<EA03F012FFA312071203AF913803FFE0A36E1300EC00F8EC01E05D4A5A020F
362
 
C7FC141C5C5C14F0EBF3F8EBF7FC13FEEBFC7EEBF87F496C7E141F6E7E8114076E7E8114
363
 
016E7E81486CEBFF80B500C313F0A324347EB329>I<EA07E012FFA3120F1207B3B3A7EA
364
 
0FF0B5FCA310347EB315>I<2703F01FE013FF00FF90267FF80313C0903BF1E07C0F03E0
365
 
903BF3803E1C01F02807F7003F387FD803FE1470496D486C7EA2495CA2495CB3486C496C
366
 
487EB53BC7FFFE3FFFF0A33C217EA041>I<3903F01FC000FFEB7FF09038F1E0FC9038F3
367
 
807C3907F7007EEA03FE497FA25BA25BB3486CEB7F80B538C7FFFCA326217EA02B>I<EB
368
 
07F0EB3FFE9038FC1F803901F007C03903C001E000078048486C7E48C7127CA248147E00
369
 
3E143E007E143FA300FE1580A8007E1500A36C147EA26C147C6D13FC6C6C485A00075C39
370
 
03F007E03900FC1F80D93FFEC7FCEB07F021237EA126>I<3903F03F8000FFEBFFE09038
371
 
F3C0F89038F7007ED807FE7F6C48EB1F804914C049130F16E0ED07F0A3ED03F8A9150716
372
 
F0A216E0150F16C06D131F6DEB3F80160001FF13FC9038F381F89038F1FFE0D9F07FC7FC
373
 
91C8FCAA487EB512C0A325307EA02B>I<903807F00390383FFC07EBFC0F3901F8038F38
374
 
07E001000F14DF48486CB4FC497F123F90C77E5AA25A5AA9127FA36C6C5B121F6D5B000F
375
 
5B3907E003BF3903F0073F3800F81EEB3FF8EB0FE090C7FCAAED7F8091380FFFFCA32630
376
 
7DA029>I<3803E07C38FFE1FF9038E38F809038E71FC0EA07EEEA03ECA29038FC0F8049
377
 
C7FCA35BB2487EB512E0A31A217FA01E>I<EBFF06000713CE381F00FE003C133E48131E
378
 
140E5A1406A27EA200FE90C7FC6C7EEA7FFC383FFFC014F0000F7F6C7FC67FEB0FFF1300
379
 
EC3F8000C0131F140F6C1307A37E15006C5B6C130E6C5B38F7807838E1FFE038C07F8019
380
 
237EA11E>I<1330A51370A313F0A21201A212031207381FFFFEB5FCA23803F000AF1403
381
 
A814073801F806A23800FC0EEB7E1CEB1FF8EB07E0182F7FAD1E>I<D803F0133F00FFEB
382
 
0FFFA30007EB007F000380B35DA35D12016D4813800000903803BFFC90387E073FEB1FFE
383
 
D907F8130026227EA02B>I<B5EBFFF0A3D80FF0EB3F800007EC1F000003140E150C6D13
384
 
1C00011418A26C6C5BA26D1370017E1360137F6D5BA290381F8180A214C3010F90C7FCA2
385
 
EB07E6A214FE6D5AA26D5AA36D5AA2146024217E9F29>I<B53A1FFF81FFF0A33C07F801
386
 
FC003F8001F049EB1E0000030100141C816C6C017C1318A26D017E1338000002FE1330A2
387
 
90267E01FF5B159F168090263F030F5BA216C0903A1F8607C180A202C613E390260FCC03
388
 
90C7FCA2D907FC13F6ECF80116FE6D486C5AA36D481378A36D48133034217F9F37>I<B5
389
 
3801FFF8A32603FE0013806C48EB7C0000001478017E1370017F5B90383F81C090381F83
390
 
80D90FC3C7FCEB07E614FE6D5A6D5A6D7E80805B9038039F809038071FC09038060FE0EB
391
 
0C0790381C03F0496C7E01707FEBF000000180000FECFF8026FFFC0313FCA326207F9F29
392
 
>I<3A7FFF807FF8A33A07F8001FC00003EC0F800001EC070015066C6C5BA26D131C017E
393
 
1318A26D5BA2EC8070011F1360ECC0E0010F5BA2903807E180A214F3010390C7FC14FBEB
394
 
01FEA26D5AA31478A21430A25CA214E05CA2495A1278D8FC03C8FCA21306130EEA701CEA
395
 
7838EA1FF0EA0FC025307F9F29>I<003FB512F0A2EB000F003C14E00038EB1FC00030EB
396
 
3F800070137F1500006013FE495A13035CC6485A495AA2495A495A49C7FC153013FE485A
397
 
12035B48481370485A001F14604913E0485A387F000348130F90B5FCA21C207E9F22>I
398
 
E
399
 
%EndDVIPSBitmapFont
400
 
%DVIPSBitmapFont: Fe cmtt12 14.4 2
401
 
/Fe 2 104 df<913807FFF0023F13FE49B61280010715C04915E04915F0137F903AFFFC
 
134
%DVIPSBitmapFont: Fb cmtt12 14.4 2
 
135
/Fb 2 104 df<913807FFF0023F13FE49B61280010715C04915E04915F0137F903AFFFC
402
136
003FF84801E0131F48138091C7FC485A4848EC0FF049EC07E0484891C7FC5B123F5B127F
403
137
5BA312FF90CAFCA97F127FA27F123F7F17FC6C6CEC01FE7F6C7E6C6C14036DEC07FC6C01
404
138
C0130F6C01F0EB1FF86C01FEEBFFF06DB612E06D15C0010F15806D1500010114FC6D6C13
412
146
90B71280C6EEFE006D5D011F15F0010715C001004AC7FC020713C038517DB33E>103
413
147
D E
414
148
%EndDVIPSBitmapFont
415
 
%DVIPSBitmapFont: Ff cmr5 5 2
416
 
/Ff 2 51 df<1360EA01E0120F12FF12F11201B3A3387FFF80A2111C7B9B1C>49
 
149
%DVIPSBitmapFont: Fc cmsl9 9 5
 
150
/Fc 5 117 df<387FFFF8A4B512F015057D921A>45 D<EB07FCEB3FFF9038F80FC03901
 
151
C003E0D803F07F6D6C7EA248486C7E12035BC8FCA21401A2EC7FF8EB07FFEB3FE1EBFF01
 
152
3803F803EA0FF0D81FE05BEA3FC01380007F1560EB000748ECE0C05A140FA2141F007F90
 
153
383BE180EC73E33A1F81E1FF00390FFF81FE3901FE007823237CA126>97
 
154
D<EB03F013FF14E0A2130FA21307130F14C0A5131F1480A5133F1400A55B137EA513FE5B
 
155
A512015BA512035BA41207B51280A2140014347EB315>108 D<14FF010713C090381F81
 
156
F090383E00F80178133C4848133E48487FA248481480120F4848130FED1FC0123F90C7FC
 
157
A25AA400FEEC3F80A31600007E5C157EA25D003E5C003F495A6C495A6C6C485A6C6C485A
 
158
2603F03EC7FC3800FFF8EB3FC022237CA126>111 D<13065BA4131CA25BA2137813F812
 
159
011203485A381FFFFEB5FCA23803F000A212075BA5120F5BA5121FEB8018A41438003F13
 
160
301300A214706C1360EB80E0380F81C0EBC3803803FF00EA00FC172F7AAD1E>116
 
161
D E
 
162
%EndDVIPSBitmapFont
 
163
%DVIPSBitmapFont: Fd cmr5 5 2
 
164
/Fd 2 51 df<1360EA01E0120F12FF12F11201B3A3387FFF80A2111C7B9B1C>49
417
165
D<EA03FCEA0FFF383C0FC0387003E0387801F0EAFC0014F8A214781278C712F814F0A2EB
418
166
01E0EB03C0EB0780EB0F00131C5B13E03801C018EA0380EA0600481338383FFFF05AB5FC
419
167
A2151C7D9B1C>I E
420
168
%EndDVIPSBitmapFont
421
 
%DVIPSBitmapFont: Fg cmmi5 5 2
422
 
/Fg 2 116 df<EB01FEA2EB003E143CA41478A4EBFCF0EA03FEEA0787EA0E01001C13E0
 
169
%DVIPSBitmapFont: Fe cmmi5 5 2
 
170
/Fe 2 116 df<EB01FEA2EB003E143CA41478A4EBFCF0EA03FEEA0787EA0E01001C13E0
423
171
12381278A238F003C0A314C2EB0786A2EA700F38383F8C381FF3F8380FC0F0171D7C9C1F
424
172
>100 D<137E3801FF80EA0381380703C0380E0780EB0300EA0F80EA07F86CB4FC6C1380
425
173
EA000FEA3003127812F8EB0700EAF00EEA7FFCEA1FF012127C911C>115
426
174
D E
427
175
%EndDVIPSBitmapFont
428
 
%DVIPSBitmapFont: Fh cmex10 10 2
429
 
/Fh 2 89 df<BB12E0A4000F90C9381FFE00000318F86C606C60B3B3B3AF486D4B7E486D
 
176
%DVIPSBitmapFont: Ff cmti9 9 7
 
177
/Ff 7 117 df<121C127F12FFA412FE12380808778718>46 D<EB03F8EB0FFEEB3E0F90
 
178
38F807803801F003EA03E0EA07C0120FEA1F801407D83F0013005C007E133EEB03F8387F
 
179
FFE04848C7FC00FCC8FCA45AA4EC0180EC03C0A2007CEB0780EC1F00003C133E6C13F838
 
180
0F03E03807FF80D801FCC7FC1A2277A023>101 D<EB0FC0EA03FFA25CEA001FA391C8FC
 
181
A25BA2133EA2137EA2137CA213FCA29038F83F80ECFFE03901FBE0F09038FF80F8EC0078
 
182
49137C485A5B5BA2484813FC5D5BA2000F13015D1380A2001F13035DEB0007EDC0C048EC
 
183
C1E0020F13C0003E1481A2007E1483ED0380007C1407160000FC140E151E48EB07F80070
 
184
EB01F023357BB327>104 D<EB0180EB07E0A2130FEB07C0EB038090C7FCABEA01F0EA03
 
185
FCEA0F1E120E121C123C1238EA783E1270A2137EEAF07CEA60FCC65AA212015BA212035B
 
186
A2000713C0EBC1E0000F13C01381A21383EB038013071400130E131EEA07F8EA01F01333
 
187
7AB118>I<3903C00FC0390FF03FF0391E78F078391C7DE03C393C3FC0FC00381380EB7F
 
188
00007814F8D8707E13701500EAF0FC12E0EA60F812001201A25BA21203A25BA21207A25B
 
189
A2120FA25BA2121FA290C8FC120E1E227AA020>114 D<EB03F0EB1FFCEB3C1EEB780FEB
 
190
F007EA01E0140F0003131F13C0A2EBE00414007FEBFF8014E06C13F06C13F8EB7FFC1307
 
191
EB00FE147E143E123800FC133CA3147C00F013784813F0EAF001387803E0383C0F80381F
 
192
FE00EA03F818227AA01F>I<1303EB0F80A3131FA21400A25BA2133EA2137EA2137C387F
 
193
FFF8A2B5FC3800F800A21201A25BA21203A25BA21207A25BA2120FA25B1460001F13F014
 
194
E01300130114C01303001E1380EB07005BEA0F1EEA07F8EA01E015307AAE19>I
 
195
E
 
196
%EndDVIPSBitmapFont
 
197
%DVIPSBitmapFont: Fg cmex10 10 2
 
198
/Fg 2 89 df<BB12E0A4000F90C9381FFE00000318F86C606C60B3B3B3AF486D4B7E486D
430
199
4B7E000F01F0913801FFFEB6021FEBFFE0A443537B7F4E>81 D<BF12E08AA38A6C90CCFC
431
200
0900806C6D19076C6D07007F6C6D1A1F1D076C6DF201FF6C6D747E6C6DF33F801E0F6C6D
432
201
1B076D6CF303C06D6D1A01F600E06D7F6D6D1B706D1D30816D6D1B186D6D1B007F816E7E
437
206
F30F801E1F49481B7F4948F3FF0049481A0349CE120F01FEF37FFEF403FF48481A7F4848
438
207
077FB55A48BEFC48655AA248655ABFFC666D747B7F78>88 D E
439
208
%EndDVIPSBitmapFont
440
 
%DVIPSBitmapFont: Fi cmbx12 13.14 52
441
 
/Fi 52 125 df<923807FFE092B512FC020714FF021F81027F9038007FC0902601FFF0EB
442
 
0FE04901C0497E4990C7487ED90FFC147F011F824A14FF495AA2137F5CA2715A715A715A
443
 
EF078094C8FCA7EF07FCB9FCA526007FF0C7123F171FB3B3A2003FB5D8E00FB512F8A53D
444
 
4D7ECC44>12 D<B7FCAA200A7F9D29>45 D<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7F
445
 
FEA2EA3FFCEA1FF8EA07E01010778F22>I<177817F8EE01FCA21603A2EE07F8A217F016
446
 
0FA217E0161FA2EE3FC0A21780167FA217005EA24B5AA25E1503A24B5AA25E150FA25E15
447
 
1FA24B5AA25E157FA24BC7FCA25D1401A25D1403A24A5AA25D140FA24A5AA25D143FA25D
448
 
147FA24AC8FCA25C1301A25C1303A2495AA25C130FA2495AA25C133FA25C137FA249C9FC
449
 
A25B1201A2485AA25B1207A25B120FA2485AA25B123FA25B127FA248CAFCA25AA2127CA2
450
 
2E6D79D13D>I<15F014011407141F147FEB03FF137FB6FCA313FC1380C7FCB3B3B2007F
451
 
B712E0A52B4777C63D>49 D<ECFFF80107EBFF80013F14F090B612FC4881480101EBFF80
452
 
2707F8003F13C0D80FE0010F13E0D81F806D13F0003F80D87FF06D13F86D15FC6D7F00FF
453
 
16FE6D147FA217FF82A36C5A6C5A6C5A6C5AC95A17FEA3EEFFFCA24B13F817F05D17E04B
454
 
13C017804B13004B5A4B5A5EED7FE04B5A4A5B4A90C7FCEC07FC4A5A4A5A4B131FEC3F80
455
 
4AC7FC14FE4948143E495AEB07E0495A4948147E49C8FC017E15FE90B7FC4816FC5A5A5A
456
 
5A5A5AB8FC17F8A430477AC63D>I<EC3FFE0103B512E0010F14FC013F14FF90267FE01F
457
 
7F9026FF000713E0D801FC6D7FD803F07F486C6D7FD80FFE817F486D80167FA3805C16FF
458
 
7E91C75B6C5A6C5AD80020495B90C75C5D5F4B5B5F031F90C7FCED3FFC4AB45A49B512E0
459
 
168016E016FC90C7EA3FFF030713C06F7F6F7F6F7F83707E83A2701380A318C0EA07E0EA
460
 
1FF8487E487EA2B5FCA31880A25E491600127F494A5A6C485D01E05B001F4A5BD80FFC49
461
 
5B2707FFC03F13C06C90B65AC64BC7FC013F14F8010714E09026007FFEC8FC32487BC63D
462
 
>I<EE07E0160FA2161F163F167F16FFA25D5D5DA25D5D5DA2157D15FDEC01F915F1EC03
463
 
E11407EC0FC1EC1F811501143F147E14FC14F8EB01F01303EB07E014C0EB0F80131FEB3F
464
 
00133E5B13FC485A485A5B1207485A485A90C7FC123E127E5AB912FCA5C80003EBE000AD
465
 
023FB612FCA536487DC73D>I<D8038015E001E0140301FC143F9039FFE003FF91B612C0
466
 
17801700A25E5E16F05E5E93C7FC15FC15F001E790C8FC01E0C9FCAAEC1FFC01E1B512C0
467
 
01E714F001EF14FC9039FFE01FFFDA0007138001FC6D13C001F06D13E04915F0497F17F8
468
 
C913FC167F17FEA417FFA3EA0FC0EA3FF0487EA2487EA317FEA34914FF6C4815FC5B0180
469
 
15F86CC74813F07F6C6C4913E0D80FF04913C0D807FC011F13806CB46CB512006C90B512
470
 
FC6C5D013F14C0010F91C7FC010113F030487AC63D>I<ED7FF8913807FFFE021F6D7E02
471
 
7F80903A01FFF01FE0010790388003F04948486C7E49486D7ED93FF013074948130F01FF
472
 
4A7E4849133F5C5A4890C7FCA25A705A48486E5A705A003F92C8FCA3485AA21520913807
473
 
FFE0021F13FC00FF497F4A6D7EDAFC017F9026FDF0007F4A6D7ED9FFC06D7E4A6D7E8391
474
 
C7FC8382491680A318C05BA3127FA6123FA27F001F1780A3000F4B1300A26C6C5DA26C6D
475
 
495A6C6D5C6C6D495A6D6C48485A90263FFC075B6DB65A6D4AC7FC01035C010014F0020F
476
 
90C8FC32487BC63D>I<903803FFF8013FEBFF8090B612E0000315F8489038007FFCD80F
477
 
F0EB1FFED81FC0EB07FF48C71480D87FC015C06D7F486C15E07FA66C5A6C484913C06C5A
478
 
0007C7481380C814005D4B5AED7FF84B5A4A13C05E4A48C7FC5D4A5A5D4A5AA24A5A5DA2
479
 
4AC8FCA3143EAB143C91C9FCA9147E49B47E497F497FA2497FA66D5BA26D5B6D5BD9007E
480
 
C8FC2B4D79CC3A>63 D<EE01F8A24C7EA34C7EA24C7EA34C7FA24C7FA34C7FA293B57EA3
481
 
4B8016F303038016E316E103078016C0030F805E83031F814C7E4B81153E83037E81037C
482
 
7F03FC815D830201824B7F0203825D830207824B7F020F825D84021F8392B8FC4A83A34A
483
 
83027CC8120F02FC835C840101844A810103845C840107844A81010F845C85011F85496C
484
 
82B600C091B712F0A5544D7CCC5D>65 D<93261FFF80EB01C00307B500F81303033F02FE
485
 
13074AB7EAC00F0207EEE03F021F903AFE007FF87F027F01E0903807FCFF91B5C70001B5
486
 
FC010301FC6E7E4901F0151F4901C0814949814990C97E494882494882485B48197F4A17
487
 
3F5A4A171F5A5C48190FA2485B1A07A25AA297C7FC91CDFCA2B5FCAD7EA280A2F207C07E
488
 
A36C7FA26C190F6E18807E6E171F6C1A006E5F6C193E6C6D177E6D6C5F6D6C4C5A6D6D15
489
 
036D6D4B5A6D01F04B5A6D01FCED3FC0010001FFEDFF806E01E0D903FEC7FC021F01FEEB
490
 
3FFC020790B612F002015EDA003F92C8FC030714FCDB001F13804A4D79CB59>67
 
209
%DVIPSBitmapFont: Fh cmbx12 13.14 52
 
210
/Fh 52 125 df<923803FFE092B512FC020714FF021F81027F9038007FC0DAFFF0EB0FE0
 
211
010301C0804990C7EA3FF84948147F4A81494814FF495AA2137F5CA2715A715A715AEF07
 
212
8094C8FCA8EF07FCB9FCA526007FF0C7123F171FB3B3003FB5D8E00FB512F8A53D4D7ECC
 
213
44>12 D<B7FCAA200A7F9C29>45 D<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA
 
214
3FFCEA1FF8EA07E01010778F22>I<177817F8EE01FCA21603A2EE07F8A217F0160FA217
 
215
E0161FA2EE3FC0A21780167FA217005EA24B5AA25E1503A24B5AA25E150FA25E151FA24B
 
216
5AA25E157FA24BC7FCA25D1401A25D1403A24A5AA25D140FA24A5AA25D143FA25D147FA2
 
217
4AC8FCA25C1301A25C1303A2495AA25C130FA2495AA25C133FA25C137FA249C9FCA25B12
 
218
01A2485AA25B1207A25B120FA2485AA25B123FA25B127FA248CAFCA25AA2127CA22E6D79
 
219
D13D>I<15F014011407141F147FEB03FF137FB6FCA313FC1380C7FCB3B3B2007FB712E0
 
220
A52B4777C63D>49 D<ECFFF80107EBFF80013F14F090B612FC4881480101EBFF802707F8
 
221
003F13C0D80FE0010F13E0D81F806D13F0003F80D87FF06D13F86D15FC6D7F00FF16FE6D
 
222
147FA217FF82A36C5A6C5A6C5A6C5AC95A17FEA3EEFFFCA24B13F817F05D17E04B13C017
 
223
804B13004B5A4B5A5EED7FE04B5A4A5B4A90C7FCEC07FC4A5A4A5A4B131FEC3F804AC7FC
 
224
14FE4948143E495AEB07E0495A4948147E49C8FC017E15FE90B7FC4816FC5A5A5A5A5A5A
 
225
B8FC17F8A430477AC63D>I<EC3FFE0103B512E0010F14FC013F14FF90267FE01F7F9026
 
226
FF000713E0D801FC6D7FD803F07F486C6D7FD80FFE817F486D80167FA3805C16FF7E91C7
 
227
5B6C5A6C5AD80020495B90C75C5D5F4B5B5F031F90C7FCED3FFC4AB45A49B512E0168016
 
228
E016FC90C7EA3FFF030713C06F7F6F7F6F7F83707E83A2701380A318C0EA07E0EA1FF848
 
229
7E487EA2B5FCA31880A25E491600127F494A5A6C485D01E05B001F4A5BD80FFC495B2707
 
230
FFC03F13C06C90B65AC64BC7FC013F14F8010714E09026007FFEC8FC32487BC63D>I<EE
 
231
07E0160FA2161F163F167F16FFA25D5D5DA25D5D5DA2157D15FDEC01F915F1EC03E11407
 
232
EC0FC1EC1F811501143F147E14FC14F8EB01F01303EB07E014C0EB0F80131FEB3F00133E
 
233
5B13FC485A485A5B1207485A485A90C7FC123E127E5AB912FCA5C80003EBE000AD023FB6
 
234
12FCA536487DC73D>I<D8038015E001E0140301FC143F9039FFE003FF91B612C0178017
 
235
00A25E5E16F05E5E93C7FC15FC15F001E790C8FC01E0C9FCAAEC1FFC01E1B512C001E714
 
236
F001EF14FC9039FFE01FFFDA0007138001FC6D13C001F06D13E04915F0497F17F8C913FC
 
237
167F17FEA417FFA3EA0FC0EA3FF0487EA2487EA317FEA34914FF6C4815FC5B018015F86C
 
238
C74813F07F6C6C4913E0D80FF04913C0D807FC011F13806CB46CB512006C90B512FC6C5D
 
239
013F14C0010F91C7FC010113F030487AC63D>I<ED7FF8913807FFFE021F6D7E027F8090
 
240
3A01FFF01FE0010790388003F04948486C7E49486D7ED93FF013074948130F01FF4A7E48
 
241
49133F5C5A4890C7FCA25A705A48486E5A705A003F92C8FCA3485AA21520913807FFE002
 
242
1F13FC00FF497F4A6D7EDAFC017F9026FDF0007F4A6D7ED9FFC06D7E4A6D7E8391C7FC83
 
243
82491680A318C05BA3127FA6123FA27F001F1780A3000F4B1300A26C6C5DA26C6D495A6C
 
244
6D5C6C6D495A6D6C48485A90263FFC075B6DB65A6D4AC7FC01035C010014F0020F90C8FC
 
245
32487BC63D>I<903803FFF8013FEBFF8090B612E0000315F8489038007FFCD80FF0EB1F
 
246
FED81FC0EB07FF48C71480D87FC015C06D7F486C15E07FA66C5A6C484913C06C5A0007C7
 
247
481380C8FC4B13004B5AED7FF84B5A16C04A5B4A90C7FC15FC4A5A5D140F5D4A5AA25D4A
 
248
C8FCA3143EAB143C91C9FCA9147E49B47E497F497FA2497FA66D5BA26D5B6D5BD9007EC8
 
249
FC2B4D79CC3A>63 D<EE01F8A24C7EA34C7EA24C7EA34C7FA24C7FA34C7FA293B57EA34B
 
250
8016F303038016E316E103078016C0030F805E83031F814C7E4B81153E83037E81037C7F
 
251
03FC815D830201824B7F0203825D830207824B7F020F825D84021F8392B8FC4A83A34A83
 
252
027CC8120F02FC835C840101844A810103845C840107844A81010F845C85011F85496C82
 
253
B600C091B712F0A5544D7CCC5D>65 D<93261FFF80EB01C00307B500F81303033F02FE13
 
254
074AB7EA800F0207EEE01F021F903AFE007FF83F027F01E0903807FC7F91B5C73801FEFF
 
255
010301FCEC007F4901F0814901C0150F4949814990C97E494882495A48498248197F5C48
 
256
193F5C48191F5C48190FA2485BA21A075AA391CDFCA2B5FCAD7EA280F207C0A27EA36C7F
 
257
1A0F6C1A80806C191F6E18006C61806C197E6C6D177C6D6C17FC6D6C4C5A6D6D4B5A6D6D
 
258
4B5A6D01F0ED1FC06D01FC4B5A010001FF03FFC7FC6E01E0EB07FE021F01FEEB3FFC0207
 
259
90B612F0020116C0DA003F92C8FC030714F8DB001F13804A4D79CB59>67
491
260
D<B912F0F0FF8019F019FC19FFD8001F902680000114C0DD001F7F060713F806017F726C
492
261
7E737E737F737F737F8587737F8587A2747EA38786A21C80A51CC0A586A462A51C80A51C
493
262
00A26263A2631AFF636163614F5B634F5B073F90C7FC4F5A4F5A06035B061F5B4DB512C0
497
266
1A7EA31AFE6219011903A21907190FF13FF819FF1803183FBBFCA262A3494A7CC951>I<
498
267
BBFCA41A80D8001F01C0C7FC181F18038484197F193F191F1AC0190FA31907A4171FF103
499
268
E0A496C7FCA25FA25F5F5E160792B6FCA5EDC0071601828383A283A794C9FCB1B8FCA543
500
 
4A7CC94D>I<B7D8FC01B712F8A5D8001F01C0C8001FEBC000B3AA92B9FCA503C0C8121F
501
 
B3AEB7D8FC01B712F8A5554B7BCA60>72 D<B712FEA5D8000FEBE000B3B3B3ABB712FEA5
 
269
4A7CC94D>I<B7D8FC01B712FCA5D8001F01C0C8001FEBC000B3AA92B9FCA503C0C8121F
 
270
B3AEB7D8FC01B712FCA5564B7BCA60>72 D<B712FEA5D8000FEBE000B3B3B3ABB712FEA5
502
271
274B7DCA2E>I<B8FCA5D8001F01C0C9FCB3B3A4193EA4197E197CA519FCA31801A2F003
503
272
F8A21807180F181F183F187FEF01FF1707173FBA12F0A53F4B7BCA4A>76
504
273
D<B600E04DB612806F5FA26F5FA2D8001F09FCC7FC6FEF0F7FA2DABFFE171EA2DA9FFF17
506
275
6CED0F00A36F6C151EA26F6C5DA26F6D5CA26F6D5CA36F6D495AA26F6D495AA26F6D495A
507
276
A3706C49C7FCA2706C131EA2706C5BA3706D5AA2706D5AA270EBE1E0A370EBF3C0A270EB
508
277
FF80A27190C8FCA2715AA3715AA2715A497EB600F06D480103B71280A3715A715A694B7B
509
 
CA74>I<B600E092B612F88181A281D8001F6D9239001FE0006F705A82A28202BF7F029F
 
278
CA74>I<B600E092B612FC8181A281D8001F6D9239001FE0006F705A82A28202BF7F029F
510
279
7FA2028F7F02877F02837F8214810280806F7F6F7F83816F7F6F7F6F7F83816F80707F70
511
280
7F8482707F707F707FA2707F7014807113C019E0837113F07113F87113FC19FE837113FF
512
281
71148F7213CF1AEF847213FF8484A284848485A2858585A285858585497EB600F8167F1A
513
 
3F1A1F1A0FA2554B7BCA60>I<EEFFF8031FEBFFC04AB612FC020715FF021FD9C01F13C0
 
282
3F1A1F1A0FA2564B7BCA60>I<EEFFF8031FEBFFC04AB612FC020715FF021FD9C01F13C0
514
283
91277FFE000313F0902601FFF09038007FFC49496E7E490180EC0FFF4990C86C7F49486F
515
284
7F49486F7F017F8449486F7F4849707EA24849707E4885A24849701380A2481AC04A82A2
516
285
481AE0A34890CA6C13F0A5B519F8AE6C1AF0A26E5EA36C1AE0A26E5E6C1AC0A26C1A806E
542
311
1CE070017E16036E037C6D5D7001FC15F04E6D14076E63DCFF01EEF80F6F4A6D5DA20583
543
312
EEFC1F6F4A6D92C9FC1CFE05C75F6F4A6D143E05EF16FF4E6E137E6F197C05FF17FC6F91
544
313
C86C5BA36F496F5BA24D816F61A26F496F5BA370486F5BA370486F90CAFCA24D81041F5F
545
 
A27048167C7A4C7ECA7F>87 D<ECFFFC010FEBFFC0017F14F090B612FC489038803FFE3B
546
 
03FC0007FF80486C6D7F6D7F486D6C7F83167F83A2707E6C90C7FC6C5A6C5AC9FCA5ED1F
547
 
FF021FB5FC49B6FC130F013FEBC03F9038FFFE00000313F04813C04890C7FC485A485AA2
548
 
485AA2485AA4167FA26D14FF007F15EF6D01017F6C6C903907CFFF806C6CD90F8F13FE6C
549
 
9038E07F076C9038FFFE0300014A7ED8003F9038F0007F0103018090C7FC37347CB23C>
550
 
97 D<91380FFF8091B512F8010314FF010F15804948C613C0D97FF8EB1FE0D9FFE0EB3F
551
 
F04849137F4849EBFFF84890C7FCA2485A121FA24848EC7FF0EE3FE0EE1FC0007F92C7FC
552
 
5BA212FFAC127FA27FA2123FA26C6C153EA26C6C157E177C6C6D14FC6C6D14F86C6D1303
553
 
6C6DEB07F0D97FFCEB1FE06DB4EBFFC0010F90B5120001035C010014F0020F13802F347C
554
 
B237>99 D<EF1FF0EE3FFFA51600177FB3EC0FFF91B512E0010314F8010F14FC013FEB01
555
 
FF903A7FF8003FFFD9FFE0130F48497F48497F4890C77E48815B121F5B123FA2127F5BA3
556
 
12FFAC127FA36C7EA3121F6D5C120F6C6C5C6C6D5B6C5D6C01E0013F7F6D6C49EBFFE090
557
 
393FFE03FE6DB512F801075C0100148091261FFC00EBC0003B4D7CCB44>I<EC0FFF91B5
558
 
12F0010314FC010F14FF90263FFE077F90267FF0007F49486D7E4801806D7E486F7E4890
559
 
C7120F484881707E121F491403003F82A2127F5B701380A212FFA390B8FCA401F8CAFCA5
560
 
127FA27FA2123FA26C6CED0F80A26C6C151F6C17006E5C6C6D147E6C6D5C6C6D495AD93F
561
 
FCEB07F0903A1FFF803FE0010790B55A010192C7FC6D6C13FC020713C031347DB238>I<
562
 
ED7FF0913807FFFC023F7F4A7F902601FFE0138049018113C049484813E0EB0FFCEB1FF8
563
 
A2EB3FF0A2017F6D13C04A6C1380EE7F00163E93C7FCACB77EA526007FF0C8FCB3B3A300
564
 
3FB512F8A52B4D7DCC26>I<DA7FFCEB0FE00103B538807FF8010F9138E1FFFC013F02FB
565
 
13FE903A7FF01FFFF39026FFC007138348D90001130348168348486DEBC1FCEFC0F8000F
566
 
EEE00049147F001F82A9000F5E6D14FF00075EA26C6C495B6C93C7FC6C9038C007FE9138
567
 
F01FFC4890B55A01EF14E0D803C314809026C07FFCC8FC000790CAFCA47FA27F13FC90B6
568
 
12FCEEFFC06C16F817FE6C8218806C17C06D16E00003B812F0120FD81FFCC7000F13F8D8
569
 
3FF0140049153F4848ED1FFC00FF160F491507A56D150F007F17F86D151F6C6CED3FF06C
570
 
6CED7FE0D80FFE913801FFC06C6C6C010713806C01F8017F1300C690B612FC013F15F001
571
 
071580D9003F01F0C7FC37497DB13D>I<EB7FC0B5FCA512037EB3923801FFC0030F13F8
572
 
033F7F4B13FFDBFE077F9138C1F0039126C3E0017FDAC78080ECCF0014DE02DC6D7F14FC
573
 
5CA25CA35CB3AAB6D8C07FEBFFE0A53B4C7BCB44>I<13FCEA03FF487F487FA2487FA66C
574
 
5BA26C5B6C90C7FCEA00FC90C8FCABEB7FC0B5FCA512037EB3B3A2B61280A5194D7BCC22
575
 
>I<EC01F8EC07FE4A7E4A1380A24A13C0A66E1380A26E13006E5AEC01F891C8FCABEDFF
576
 
C049B5FCA5EB000380B3B3AC1202EA1FC0EA3FE0EA7FF0EAFFF84A1380A216005C5D6C48
577
 
485A49485A003FEB7FF06CB55A6C1480000349C7FC38007FF0226386CC26>I<EB7FC0B5
578
 
FCA512037EB3B3B3AAB61280A5194C7BCB22>108 D<90287FC001FFC0EC7FF0B5010F01
579
 
FC0103B5FC033F6D010F804B6D4980DBFE079026803F817F9126C1F801903AC07E007FF0
580
 
0003D9C3E0DAE0F8806C9026C78000D9F1E06D7E02CFC7EBF3C002DEEDF780DD7FFF6E7E
581
 
02FC93C7FC4A5DA24A5DA34A5DB3AAB6D8C03FB5D8F00FB512FCA55E327BB167>I<903A
582
 
7FC001FFC0B5010F13F8033F7F4B13FFDBFE077F9138C1F00300039026C3E0017F6CD9C7
583
 
8080ECCF0014DE02DC6D7F14FC5CA25CA35CB3AAB6D8C07FEBFFE0A53B327BB144>I<91
584
 
3807FF80027F13F80103B6FC010F15C090261FFE017F903A7FF0003FF849486D7E480180
585
 
EB07FE4890C76C7E4817804980000F17C048486E13E0A2003F17F0A249157F007F17F8A4
586
 
00FF17FCAB007F17F8A46C6CEDFFF0A2001F17E0A26C6C4A13C0A26C6C4A13806C6D4913
587
 
006C5E6C01E0EB1FFC6D6C495A903A3FFE01FFF0010FB612C0010392C7FCD9007F13F802
588
 
07138036347DB23D>I<90397FC007FFB5017F13E002C1B512FC02C714FF9126CFF80F7F
589
 
9126DFC0037F000301FFC77F6C496E7E02F8814A6E7E717E4A81831980A28319C0A37113
590
 
E0AC19C05FA319805F19005F606E143F6E5D4D5A6E4A5A02FF495BDBC0075B9126EFF01F
591
 
5B02E7B548C7FC02E114F8DAE07F13E0DB0FFEC8FC92CAFCAFB612C0A53B477CB144>I<
592
 
9039FF803FE0B5EBFFF8028113FE02837FDA87E11380EC8F830003D99F0713C06C139E14
593
 
BCA214F8A24A6C13806F13006F5A4A90C7FCA45CB3A8B612E0A52A327CB132>114
594
 
D<903907FF8070017FEBF1F048B6FC1207380FFC01391FE0003F4848130F491307127F90
595
 
C71203A2481401A27FA27F01F090C7FC13FCEBFFC06C13FEECFFE06C14FC6C806CECFF80
596
 
6C15C06C15E06C15F06C7E011F14F8010114FCEB000FEC007FED1FFE0078140F00F81407
597
 
15037E1501A27E16FC7E15036D14F86D13076D14F001F8EB1FE001FFEBFFC04890B51280
598
 
486C1400D8F81F13FCD8E00313C027347CB230>I<14F8A51301A41303A21307A2130FA2
599
 
131F133F137F13FF1203000F90B512F0B7FCA426007FF8C7FCB3A7167CAA013F14F880A2
600
 
90391FFE01F0010F1303903907FF87E06DEBFFC06D14806D6C1300EC0FFC26467EC430>
601
 
I<D97FE0EC3FF0B5EC7FFFA5000315016C81B3AC5EA25EA25E7E6EEB0F7F017F021E7F6E
602
 
017CEBFFE090393FFE01F86DB512F0010714E0010114C09027003FFE00EBC0003B337BB1
603
 
44>I<B600C090387FFFF0A5C601F0C73803F8006E5D017F5E801707013F5E6E140F011F
604
 
5E6E141F6D93C7FC6F5B6D153E81177E6D157C6F13FC6D5DEDF0016D5DEDF803027F5CA2
605
 
EDFC07023F5CEDFE0F021F5CEDFF1F6E91C8FC169F16BF6E13BE16FE6E5BA26E5BA26E5B
606
 
A36F5AA26F5AA26F5AA23C327EB041>I<B60081B500FC90387FFFF0A500019026E00003
607
 
90C73801FC006E6F5C6C6F5E6E6F1303017F61A26E6F1307013F4A5E846E49150F011F61
608
 
6E6F131F6D4A93C7FC179F03806E5B6D021F153EEF0FFE6DD9C03F5DEE3E0703E06E13FC
609
 
6D027E5DEE7C0303F015816D4A6C5C03F815C3DA7FF95E4C7E03FD15E7DA3FFF5E4C137F
610
 
19FF6E496D5BA26E94C8FC4C7FA26E5E93C7120FA26E486E5AA202015E4B1403A26E486E
611
 
5A54327EB059>I<B6D88007B512C0A526007FF8C7387F80006D6C92C7FC6E14FE6D6C49
612
 
5A6D6D485A6D01C05B6D4A5A6F485A6DEBF01F6D6D485A6E6C48C8FC023F137E6F5A6E6C
613
 
5A806E5B6E5BA26E7F6E7F6F7E15FF4A7F4A7F4A8003E77FEC0FC3DA1F837FDA3F817F4A
614
 
C67F02FE6D7E4948133F4A8049486D7E01076E7F49486D7F49487F494881017F6E7FB500
615
 
F8011FEBFFF0A53C317EB041>I<007FB500C090387FFFE0A5C601F0C73803F8006E5D01
616
 
7F5E6E1407013F5E80170F011F5E6E141F6D93C7FC6F5B6D153E6F137E6D157C6F13FCA2
617
 
6D6D5B16016D5DEDF803027F5CEDFC07023F5CEDFE0F021F5C15FF161F6E91C8FC16BF6E
618
 
13BE16FE6E5BA26E5BA36E5BA26F5AA26F5AA26F5AA393C9FC5D153E157E157CD81F8013
619
 
FC486C5B387FE001D8FFF05B14035D14074A5A49485A007F133F4948CAFC383F81FE381F
620
 
FFF86C5B6C13C0C648CBFC3B477EB041>I<001FB712FCA4DA000113F801F84913F001E0
621
 
5B4915E0494913C04B138048C75A17004B5A4B5A003E5B5E4A5B4A5B5CC75C4A5B4A90C7
622
 
FC5C5D4A5A495B5B4B137C495B495B5B5D4990C712F8495A13FF5C48491301485B5A4A13
623
 
03484913074849130F48151F91C7EA7FF04848EB03FFB8FCA42E317DB037>I<C212C0A4
624
 
7A04809F7B>124 D E
625
 
%EndDVIPSBitmapFont
626
 
%DVIPSBitmapFont: Fj cmsy7 7 3
627
 
/Fj 3 113 df<B712FEA327037A8F34>0 D<1338A50060130C00F8133E00FC137E00FE13
 
314
A27048167C7A4C7ECA7F>87 D<ECFFFC010FEBFFC0017F14F090B612FC489038803FFF27
 
315
03FC00077F486C6D7F486C6D7F6E7E83707EA3707E6C90C7FC6C5A6C5AC9FCA4ED1FFF02
 
316
1FB5FC49B6FC130F013FEBC03F9038FFFE00000313F04813C04890C7FC485A485AA2485A
 
317
A2485AA4167FA26D14FF007F15EF6D01017F6C6C903907CFFF806C6CD90F8F13FE6C9038
 
318
E07F076C9038FFFE0300014A7ED8003F9038F0007F0103018090C7FC37337CB13C>97
 
319
D<91380FFF8091B512F8010314FF010F158090263FFE0013C0D97FF8EB1FE0D9FFE0EB3F
 
320
F04849EB7FF8484913FF4890C7FC5A5B121F5B003FED7FF0EE3FE0007FED1FC093C7FC5B
 
321
A212FFAC127F7FA2123FA26D153E121F6D157E6C167C6C6D14FC6C16F86C6D13036C01F0
 
322
EB07F0D97FFCEB1FE06DB4EBFFC0010F90B5120001035C010014F0020F13802F337CB137
 
323
>99 D<EF1FF0EE3FFFA51600177FB3A2EC0FFF91B512E0010314F8010F14FE013FEB01FF
 
324
903A7FF8003FFFD9FFE0130F48497F48497F4890C77E4881485AA2485AA3127F5BA212FF
 
325
AC127FA37F123FA2121F7F000F5D6C6C5C5E6C6D5B6C01E0497F6C6D017FEBFFE090393F
 
326
FE03FE6DB512F801075C010114C09027001FFC00EBC0003B4D7CCB44>I<EC0FFF91B512
 
327
F0010314FC010F14FF90263FFE077F90267FF0007F4948EB3FE04801806D7E48824890C7
 
328
6C7E4848140783485A003F6F7EA3485A701380A312FFA290B8FCA401F8CAFCA5127FA27F
 
329
A2123FA26C6CED0F80A2000F161F6C6C16006E5C6C6D147E6C6D5C6C6D495AD97FFCEB07
 
330
F0903A1FFF803FE06D90B55A010392C7FCD9007F13FC020713C031337DB138>I<ED7FE0
 
331
913807FFFC021F7F027F7F902601FFE0138049018113C0902607FE0113E049485A14F813
 
332
1FEB3FF0A26F13C0EB7FE06F1380EE3E0093C7FCADB77EA526007FF0C8FCB3B3A2003FB5
 
333
12F8A52B4D7DCC26>I<DA7FFCEB0FF00103B538807FF8011F9138F1FFFC4991B512FE90
 
334
267FF01F13F32701FFC007138348EB0001A248486DEBC1FC000FEEE0F849027F1300A200
 
335
1F82A8000F5EA26D14FF00075E6C6C495BA26CD9C00790C7FC6C9038F01FFC4890B55A5E
 
336
D803C314809026C07FFCC8FC000790CAFCA47FA27F13FC90B612FCEEFFC06C16F817FE6C
 
337
8218806C17C06D16E00003B812F0120FD81FFCC7000F13F8D83FF0140049153F4848ED1F
 
338
FC00FF160F491507A56D150F007F17F86D151F6C6CED3FF06C6CED7FE0D80FFE913801FF
 
339
C06C6C6C010713806C01F8017F1300C690B612FC013F15F001071580D9003F01F0C7FC37
 
340
487DB03D>I<EB7FC0B5FCA512037EB3A2923801FFC0030F13F8033F13FE4B7F9126C1FE
 
341
077F9126C3F0037F9138C7C001DACF8080150002DE7F02FC81A25CA25CA35CB3A9B6D8C0
 
342
7FEBFFE0A53B4C7BCB44>I<13FCEA03FF487F487FA2487FA66C5BA26C5B6C90C7FCEA00
 
343
FC90C8FCACEB7FC0B5FCA512037EB3B3B61280A5194D7BCC22>I<EC01F8EC07FE4A7E4A
 
344
1380A24A13C0A66E1380A26E13006E5AEC01F891C8FCACEDFFC049B5FCA5EB000380B3B3
 
345
AB1202EA1FC0EA3FE0EA7FF0EAFFF84A1380A216005C5D6C48485A49485A003FEB7FF06C
 
346
B55A6C1480000349C7FC38007FF0226386CC26>I<EB7FC0B5FCA512037EB3B3B3AAB612
 
347
80A5194C7BCB22>108 D<90287FC001FFE0EC7FF8B5010F01FC0103B5FC033F6D010F80
 
348
4B6D6C4814E0DBFE079026C03F817F9126C3F0019138FC007F0003D9C7E0DAE1F8806CDA
 
349
8000D9F1E06D7E02CFC7EBF3C002DE91267FF780131F02FC03FFC77FA24A5DA24A5DA34A
 
350
5DB3A9B6D8C03FB5D8F00FB512FCA55E317BB067>I<903A7FC001FFC0B5010F13F8033F
 
351
13FE4B7F9126C1FE077F9126C3F0037F00039038C7C0016CD9CF8080150002DE7F02FC81
 
352
A25CA25CA35CB3A9B6D8C07FEBFFE0A53B317BB044>I<913807FF80027F13F80103B6FC
 
353
010F15C090261FFE017F903A7FF0003FF8D9FFC0EB0FFC48496D7E4890C76C7E48178049
 
354
80000F17C048486E13E0A2003F17F049157FA2007F17F8A400FF17FCAB007F17F8A36C6C
 
355
EDFFF0A3001F17E06D5C000F17C06C6C4A13806C17006C6D495A6C01E0EB1FFC6D6C495A
 
356
903A3FFE01FFF0010FB612C0010392C7FCD9007F13F80207138036337DB13D>I<90397F
 
357
C00FFFB5017F13F002C1B512FC02C714FF9126CFF80F7F9126FFC00313E0000391C77F6C
 
358
01FC6E7E4A6E7E5C4A6E7E848319808319C0A47113E0AC4D13C0A319805FA219004D5A80
 
359
4D5A6E4A5A6E4A5A02FF495BDB80075B9126EFF01F5B02E7B548C7FC02E314F802E014E0
 
360
DB0FFEC8FC92CAFCAFB612C0A53B467CB044>I<9039FF803FE0B5EBFFF8028113FE0283
 
361
7FDA87E11380EC8F830003D99F0713C06C139E14BCA214F8A24A6C13806F13004A6C5A93
 
362
C7FCA45CB3A7B612E0A52A317CB032>114 D<90390FFF8070017FEBF1F048B6FC120738
 
363
0FFC01391FE0003F4848130F491307127F90C712035A1501A27FA213E06D90C7FC13FE38
 
364
7FFFF0ECFFC015F06C14FC6C14FF6C15806C15C06C15E0C615F0013F14F8010714FCEB00
 
365
7F14019138003FFE150F0078140700F81403A26C1401A37E16FC6C14036D14F87F6DEB07
 
366
F001F8EB1FE001FFEBFFC091B51280D8FC7F1400D8F81F13FCD8E00313C027337CB130>
 
367
I<14F8A61301A41303A21307A2130FA2131F133F137F13FF1203000F90B512F0B7FCA426
 
368
007FF8C7FCB3A6167CAA013F14F880A290391FFE01F0010F1303903907FF87E06DEBFFC0
 
369
6D14806D6C1300EC0FFC26467EC430>I<D97FE0EC3FF0B5EC7FFFA5000315016C81B3AB
 
370
5EA25EA25E7E6EEB0F7F017F021E7F6E017CEBFFE090393FFE01F86DB512F0010714E001
 
371
0114C09027003FFE00EBC0003B327BB044>I<B66C90B512C0A5000101E0C73807F0006E
 
372
5D6C5F6E140F017F5E80171F013F93C7FC6E5C011F153E6E147E6D157C6F13FC6D5DEDC0
 
373
01A26D01E05B16036D5DEDF0076D5DEDF80F027F5CEDFC1F023F91C8FC15FE5E021F133E
 
374
EDFF7E6E137C16FC6E5BA26E5BA36E5BA26E5BA26F5AA26FC9FCA23A317DAF41>I<B600
 
375
81B500FC90387FFFF0A500019026E000030180903803FC006E715A6C6F5E6E6F1303017F
 
376
61A26E496D1307013F616E6F130F011F4A5EA26E6F131F6D4A93C7FCDD9FFC5B6DD9801F
 
377
153E170F03C06E137E6D023F157C93383E07FFDBE07E15FC6DDA7C035C03F015816D02FC
 
378
5D4C7E03F815C3DA7FF95E9226FDF00013E7DA3FFF5E4C137F19FF6E5F4C7FA26E496D90
 
379
C8FCA26E5E93C7120FA26E486E5AA202015E4B1403A26E486E5A54317EAF59>I<B6D880
 
380
07B512C0A526007FFCC7387F8000013F037EC7FC6E14FE6D6C495A6D6D485A6D6D485A6D
 
381
01E05B4C5A6D6D485A6DEBF83F6E6C48C8FC91383FFEFE6E6C5A5E6E5B6E5B806E7FA26E
 
382
7F82824A7F5C4A80DA0FE77FDA1FC37FDA3F817F4AC67F147E4A6D7E49486D7E01036E7E
 
383
49486D7F49487F49488149486D7F017F6E7FB500F8011FEBFFF0A53C307EAF41>I<007F
 
384
B500C090387FFFE0A5C601F0C73803F8006E5D017F5E6E1407013F5E6E140F011F5E6E14
 
385
1FA26D6D91C7FC5F6D153E6F137E6D157C6F13FC6D5DEDF0016D5DEDF803027F5C15FC16
 
386
07DA3FFE5B160F021F5CEDFF1F6E91C8FC16BF6E13BE16FE6E5BA36E5BA26E5BA26F5AA2
 
387
6F5AA26F5AA393C9FC5D153E157E157CD81F8013FC486C5B387FE001D8FFF05B14035D14
 
388
074A5A49485A007F49CAFCEBC07E383F81FC6CB45A6C5B6C13C0C648CBFC3B467EAF41>
 
389
I<001FB712FCA4DA000113F801F84913F001E04913E05B494913C04B138048C7481300A2
 
390
4B5A4B5A003E495B5C5E4A5B4A5BC7485BA24A90C7FC4A5A4A5AA2495B4949137C495BA2
 
391
495B495B4990C712F85B5C495A48491301485BA248491303484913074849130F161F4890
 
392
C7EA7FF04848EB03FFB8FCA42E307DAF37>I<C212C0A47A04809F7B>124
 
393
D E
 
394
%EndDVIPSBitmapFont
 
395
%DVIPSBitmapFont: Fi cmtt9 9 49
 
396
/Fi 49 123 df<00101320007C13F838FE01FCAAEAFC00007C13F8A900381370161778AE
 
397
27>34 D<007FB512F8B612FCA46C14F81E067C9927>45 D<EB3FE03801FFF84813FE000F
 
398
EBFF804814C0393FE07FE0EB800F397F0007F0007EEB03F800FE13015A6C14FC1400A312
 
399
7CC8FCA2140115F8A2140315F01407EC0FE0EC1FC0143FEC7F80ECFF00495A495A495A49
 
400
5A495A495A495A01FEC7FC485AD807F81378484813FC485A485A48B5FCB6FCA36C14F81E
 
401
2F7CAE27>50 D<EB1FF8EBFFFE0003EBFF80000F14C015E0391FF01FF0393FC007F8EB80
 
402
0115FC1400A26CC7FC1204C8FC140115F81403EC07F0140FEC3FE090381FFFC0491380A2
 
403
15E06D13F09038001FF8EC03FC1401EC00FE157E157F153FA21238127C12FEA2157F4814
 
404
7E6C14FE007FEB01FCEB8003393FF01FF86CB512F06C14E000031480C6EBFE00EB1FF820
 
405
307DAE27>I<1278B612FE15FFA315FE39FC0001FCEC03F8EC07F0007814E0C7120FEC1F
 
406
C01580143FEC7F00147E14FE5C13015C13035C13075CA2495AA3495AA3133F91C7FCA55B
 
407
137EA9133C20307DAE27>55 D<EB03F0497EA2497EA4143CEB1F3EA5EB3F3FA3EB3E1FA2
 
408
017E7FA4496C7EA548486C7EA390B5FCA24880A3EBF003A248486C7EA4000F803A7FFC0F
 
409
FF8000FF15C06D5A497E007F1580222F7EAE27>65 D<007FB5FCB612C08115F87E3907E0
 
410
03FCEC00FE157E157F81A6157EA25D1403EC0FF890B55A15C015F081819038E000FE157F
 
411
ED3F80151FA2ED0FC0A6151F1680153FED7F004A5A007FB55AB65A5D15E06C1480222E7F
 
412
AD27>I<903803F80E90381FFE1F90383FFFBF90B6FC5A3803FE0F3807F803497E48487E
 
413
485A49137FA248C7123FA25A127E151E150012FE5AAA7E127EA2151E007F143F7EA26C7E
 
414
157F6D137E6C6C13FE3907F001FCEBF8033903FE0FF86CB512F06C14E0013F13C06D1300
 
415
EB03F820307DAE27>I<387FFFFC14FFB612C06C80813907E00FF81407EC01FC6E7EA215
 
416
7E157F811680151FA316C0150FABED1F80A3153F1600A25D15FEA24A5A4A5A140F007FB5
 
417
5A5DB65A6C91C7FC14FC222E7FAD27>I<007FB61280B712C0A37E3907E0000FA6ED0780
 
418
92C7FCA4EC07804A7EA390B5FCA5EBE00FA36E5A91C8FCA4ED03C0ED07E0A7007FB6FCB7
 
419
FCA36C15C0232E7FAD27>I<007FB61280B712C0A37E3907E0000FA6ED078092C7FCA4EC
 
420
07804A7EA390B5FCA5EBE00FA36E5A91C8FCAC387FFF80B57EA36C5B222E7EAD27>I<3A
 
421
7FFE07FFE0B54813F0A36C486C13E03A07E0007E00AF90B512FEA59038E0007EB03A7FFE
 
422
07FFE0B54813F0A36C486C13E0242E7FAD27>72 D<007FB512E0B612F0A36C14E039001F
 
423
8000B3B2007FB512E0B612F0A36C14E01C2E7BAD27>I<3A7FFC07FF8016C0486C5A6C48
 
424
7E16803A07C001F80014035D4A5A4A5A141F5D4AC7FC147E14FE5CEBC1F8EBC3F013C75C
 
425
EBCFF0EBDFF813FF8013FEEBFC7E143EEBF83F497E01E07F140F01C07F1407811403816E
 
426
7EA26E7E157C157E3A7FFC01FFC016E0486C5A6C487E16C0232E7FAD27>75
 
427
D<387FFFC080B5FC7E5CD803F0C8FCB3AAED0780ED0FC0A7007FB6FCA2B7FC7E1680222E
 
428
7FAD27>I<D87FE0EB7FE0486CEBFFF0A26D5A007F15E0000F150001B813DFEBBC03A3EB
 
429
BE07019E139FA3EB9F0FA2018F131FA2149FA2EB879EA4EB839C14FCA3EB81F8A2EB80F0
 
430
1400AAD87FF0EBFFE0486C4813F0A36C486C13E0242E7FAD27>I<3A7FF003FFE0486C48
 
431
13F0A213FC007F6D13E000079038003E0013DEA313CFA3148013C714C0A213C314E0A213
 
432
C114F0A3EBC0F8A31478147CA2143C143EA2141E141F140FA3EC07BEA3EC03FEEA7FFCEA
 
433
FFFE1401A26C486C5A242E7FAD27>I<EBFFFC0007EBFF80001F14E0A24814F0EBC00F39
 
434
7F8007F8EB0003007E1301A348EB00FCB3A76C1301007E14F8A3007F1303EB8007393FE0
 
435
1FF090B5FC6C14E0A200071480C6EBFC001E307CAE27>I<007FB5FCB612E081816C8039
 
436
07E003FEEC00FF81ED3F80151F16C0150FA6151F1680153FED7F005DEC03FE90B55A5D5D
 
437
5D92C7FC01E0C8FCADEA7FFEB5FCA36C5A222E7FAD27>I<387FFFF0B512FE6E7E816C80
 
438
3907E01FF014076E7E1401811400A514015D14034A5A141F90B55A5D5DA281EBE01F6E7E
 
439
14076E7EA816F0EDF1F8A4397FFE01FBB5EBFFF08016E06C48EB7FC0C8EA1F00252F7FAD
 
440
27>82 D<90387FC0E03901FFF1F0000713FF5A5AEA3FE0EB801F387F000F007E130712FE
 
441
5A1403A3EC01E06C90C7FC127E127FEA3FC013F86CB47E6C13F86C13FE6CEBFF80C614C0
 
442
010F13E0010013F0140FEC07F81403140115FC1400127812FCA46CEB01F8A26C13039038
 
443
8007F09038F01FE090B5FC15C0150000F85B38701FF81E307CAE27>I<007FB61280B712
 
444
C0A439FC03F00FA60078EC0780000091C7FCB3AB90B512C04880A36C5C222E7EAD27>I<
 
445
3A7FFE01FFF8B54813FCA36C486C13F83A07E0001F80B3AB6D133F00031500A26D5B0001
 
446
147E6D13FE6C6C485A90387F87F814FF6D5B010F13C06D5BD901FEC7FC262F80AD27>I<
 
447
D87FE0EB7FE0486CEBFFF0A36C48EB7FE0001FC7EA0F80A76C6CEB1F00A614F0EB81F839
 
448
07C3FC3EA4149CEBC79EA30003143CA301E7137CEBEF9FA2140FA200011478A49038FE07
 
449
F8A300005CA2EBFC0390387801E0242F7FAD27>87 D<393FFC1FFE387FFE3F815D383FFC
 
450
1F3903F00FE001F85B1201EBFC1F00005CEBFE3F017E90C7FCEB7F7FEB3F7E14FE6D5AA2
 
451
6D5AA26D5AA21303130780130F80131F80EB3F7E147F497E017E7F141F01FC7F140FD801
 
452
F87F14071203496C7E120701E07F3A7FFC0FFF8000FF15C06D5A497E007F1580222E7EAD
 
453
27>I<007FB512F8B612FCA46C14F81E067C7E27>95 D<3803FFC0000F13F04813FC4813
 
454
FF811380EC1FC0381F000F000480C71207A2EB0FFF137F0003B5FC120F5A383FFC07EA7F
 
455
C0130012FE5AA46C130F007F131FEBC0FF6CB612806C15C07E000313F1C69038807F8022
 
456
207C9F27>97 D<EA7FE0487EA3127F1203A914FF01F313C090B512F08181EC81FE49C67E
 
457
49EB3F8049131F16C049130FA216E01507A6150F16C07F151F6DEB3F80157F6DEBFF0090
 
458
38FF83FEECFFFC5D5D01F313C02601E0FEC7FC232E7FAD27>I<EB0FFF017F13C048B512
 
459
E04814F05A380FF807EA1FE0393FC003E0903880008048C8FC127EA212FE5AA67E127EA2
 
460
007F14F0393F8001F813C0381FE003390FF80FF06CB5FC6C14E06C14C06C6C1300EB0FF8
 
461
1D207B9F27>I<EC3FF04A7EA3143F1401A9EB0FE1EB7FFD48B5FC5A5A380FF83F381FE0
 
462
0F383FC007EB8003EA7F00007E1301A212FE5AA67E007E1303A2127F6C1307EB800F381F
 
463
E01F380FF03F6CB612C06C15E06C13FD38007FF9D91FE013C0232E7EAD27>I<EB0FF8EB
 
464
3FFE90B51280000314C04814E0390FFC0FF0391FE003F8EBC001D83F8013FC48C7FC127E
 
465
157E12FEB612FEA415FC00FCC8FC7E127E127F6C143C6D137E6C7E01F013FE390FFC07FC
 
466
6CB5FC000114F86C14F0013F13C0903807FE001F207D9F27>I<EC1FF0ECFFF84913FC49
 
467
13FE5BEB0FF014C0011F137CEC8000A6007FB512F0B612F8A36C14F039001F8000B3A400
 
468
3FB512C04814E0A36C14C01F2E7EAD27>I<153F90391FC0FF80D97FF313C048B612E05A
 
469
4814EF390FF07F873A1FC01FC3C0EDC000EB800F48486C7EA66C6C485AEBC01FA2390FF0
 
470
7F8090B5C7FC5C485BEB7FF0EB1FC090C9FCA27F6CB5FC15E015F84814FE4880EB800100
 
471
7EC7EA3F80007C140F00FC15C0481407A46C140F007C1580007F143F6C6CEB7F009038F8
 
472
07FF6CB55A000714F86C5CC614C0D90FFCC7FC23337EA027>I<EA7FE0487EA3127F1203
 
473
A9147F9038F1FFC001F713F090B5FC8114C1EC01FCEBFE005B5BA25BB03A7FFF83FFE0B5
 
474
00C713F0A36C018313E0242E7FAD27>I<130F497E497EA46D5A6DC7FC90C8FCA7383FFF
 
475
80487FA37EEA000FB3A4007FB512F0B6FC15F815F07E1D2F7BAE27>I<EA7FE07F12FF12
 
476
7FA21201A991383FFFC04A13E0A36E13C0913803F8004A5A4A5A4A5A4A5A02FFC7FCEBF1
 
477
FEEBF3FCEBF7F8EBFFFC8080143F496C7E496C7E01F87FEBF0076E7E6E7E816E7E157E3A
 
478
7FFFC1FFF002C313F8B512E36C13C316F0252E80AD27>107 D<387FFF80B57EA37EEA00
 
479
0FB3B2007FB512F8B612FCA36C14F81E2E7CAD27>I<397F07C01F3AFF9FF07FC09039FF
 
480
F9FFE091B57E7E3A0FFC7FF1F89038F03FC001E0138001C01300A3EB803EB03A7FF0FFC3
 
481
FF486C01E3138001F913E701F813E36C4801C313002920819F27>I<387FE07F39FFF1FF
 
482
C001F713F090B5FC6C80000313C1EC01FCEBFE005B5BA25BB03A7FFF83FFE0B500C713F0
 
483
A36C018313E024207F9F27>I<EB1FE0EB7FF83801FFFE487F481480390FF03FC0391FC0
 
484
0FE0393F8007F0EB00034814F8007E1301A248EB00FCA76C1301007E14F8A2007F130339
 
485
3F8007F0A2391FE01FE0390FF03FC06CB512806C14006C5B38007FF8EB1FE01E207C9F27
 
486
>I<387FE0FFD8FFF313C090B512F0816C800003EB81FE49C67E49EB3F8049131F16C049
 
487
130FA216E01507A6150F16C07F151F6DEB3F80157F6DEBFF009038FF83FEECFFFC5D5D01
 
488
F313C0D9F0FEC7FC91C8FCAC387FFF80B57EA36C5B23317F9F27>I<397FFC03FC39FFFE
 
489
0FFF023F13804A13C0007F90B5FC39007FFE1F14F89138F00F809138E002004AC7FC5CA2
 
490
91C8FCA2137EAD007FB57EB67EA36C5C22207E9F27>114 D<9038FFF3800007EBFFC012
 
491
1F5A5AEB803F38FC000F5AA2EC07806C90C7FCEA7F8013FC383FFFF06C13FC000713FF00
 
492
011480D8000F13C09038003FE014070078EB03F000FC1301A27E14036CEB07E0EBE01F90
 
493
B512C01580150000FB13FC38707FF01C207B9F27>I<133C137EA8007FB512F0B612F8A3
 
494
6C14F0D8007EC7FCAE1518157EA415FE6D13FC1483ECFFF86D13F06D13E0010313C00100
 
495
13001F297EA827>I<397FE01FF8486C487EA3007F131F00031300B21401A21403EBFC0F
 
496
6CB612E016F07EEB3FFE90390FF87FE024207F9F27>I<3A7FFE07FFE000FF15F06D5A49
 
497
7E007F15E03A0F80001F00A36D5B0007143EA414F0EBC1F83903E3FC7CA4EBE79EA20001
 
498
1478A301F713F8A2EBFF0F6C5CA3EBFE0790387C03E024207F9F27>119
 
499
D<393FFC1FFF486C5A168016006C487E3901F807E06C6C485A4A5A017E90C7FC6D5AEB1F
 
500
7E5C6D5A13076D5A5C80497E130F497E143EEB3E3FEB7E1F90387C0F8001F87F00016D7E
 
501
3803F0033A7FFE1FFF80A2B54813C06C486C1380A222207E9F27>I<3A7FFC0FFF80486C
 
502
4813C0A36C486C13803A07E000F800000313015D13F00001130301F85B1200A26D485A13
 
503
7CA290387E0F80133EA2011F90C7FC5CA2130F149E14BE130714FC1303A25C1301A25CA2
 
504
13035CA213075C1208EA3E0F007F5B131FD87E7FC8FCEA7FFE6C5A5B6C5AEA07C022317E
 
505
9F27>I<001FB512FE4814FFA490380001FEEC03FCEC07F8EC0FF0001EEB1FE0C7EA3FC0
 
506
EC7F80ECFF00495A495A495AEB1FE0495A495A49C7FC485A4848131E4848133F485A485A
 
507
485A485AB7FCA46C14FE20207E9F27>I E
 
508
%EndDVIPSBitmapFont
 
509
%DVIPSBitmapFont: Fj cmr9 9 63
 
510
/Fj 63 125 df<91393FE00FE0903A01FFF83FF8903A07E01EF83C903A1F800FF07E903A
 
511
3F001FE0FE017E133F4914C0485A1738484890381F8000ACB812C0A33B03F0001F8000B3
 
512
A7486C497EB50083B5FCA32F357FB42D>11 D<EC1FE0ECFFFC903803F01E90390FC00780
 
513
EB1F8090393F000FC0017E131F5BA2485AED0F8092C7FCA9ED0FC0B7FCA33901F8001F15
 
514
0FB3A6486CEB1FE0267FFFC1B5FCA328357FB42B>I<EC1FF891B512C0903803F00F9038
 
515
0FC01FEB1F80EB3F00137E5B150F485AACB7FCA33901F8000FB3A7486CEB1FE0267FFFE3
 
516
B5FCA328357FB42B>I<DA1FE013FF9126FFFC0713E0903B03F01E1F80F0903B0FC0077E
 
517
003CD91F805B90273F001FF8137E017E4A13FE495CA248485C030F147C95C7FCA9187EB9
 
518
12FEA33B01F8000FC000187EB3A6486C496C13FF297FFFC1FFFE0F13F8A33D357FB440>
 
519
I<123C127EB4FCA21380A2127F123D1201A412031300A25A1206120E120C121C5A5A1260
 
520
09177AB315>39 D<14C01301EB0380EB0F00130E5B133C5B5BA2485A485AA212075B120F
 
521
90C7FC5AA2121E123EA3123C127CA55AB0127CA5123C123EA3121E121FA27E7F12077F12
 
522
03A26C7E6C7EA213787F131C7F130FEB0380EB01C01300124A79B71E>I<12C07E127012
 
523
3C121C7E120F6C7E6C7EA26C7E6C7EA27F1378137C133C133EA2131E131FA37F1480A5EB
 
524
07C0B0EB0F80A514005BA3131E133EA2133C137C137813F85BA2485A485AA2485A48C7FC
 
525
120E5A123C12705A5A124A7CB71E>I<123C127EB4FCA21380A2127F123D1201A4120313
 
526
00A25A1206120E120C121C5A5A126009177A8715>44 D<B512F0A514057F921A>I<123C
 
527
127E12FFA4127E123C08087A8715>I<EB0FE0EB7FFCEBF83E3903E00F803907C007C0EB
 
528
8003000F14E0391F0001F0A24814F8A2003E1300007E14FCA500FE14FEB2007E14FCA56C
 
529
EB01F8A36C14F0A2390F8003E03907C007C0A23903E00F803900F83E00EB7FFCEB0FE01F
 
530
347DB126>48 D<13075B5B137FEA07FFB5FC13BFEAF83F1200B3B3A2497E007FB51280A3
 
531
19327AB126>I<EB3FC0EBFFF0000313FC380F80FF391E007F80001CEB3FC048EB1FE048
 
532
130F15F00060130712FC6C14F87E1403A3007E1307123CC7FC15F0A2140F15E0EC1FC0A2
 
533
EC3F801500147E5C495A5C495A495A495A49C7FC133E133C4913185B485A48481330485A
 
534
48C7FC001C1470001FB512F05A5AB612E0A31D327CB126>I<EB1FE0EBFFFC4813FF3907
 
535
E03F80390F001FC0001EEB0FE0001CEB07F0123F018013F8140313C01380A2381F0007C7
 
536
FC15F0A2EC0FE015C0141FEC3F80EC7E00EB01F8EB7FE014FCEB003FEC1FC0EC0FE0EC07
 
537
F015F8140315FC140115FEA3127EB4FCA415FC48130312780070EB07F86C14F0003C130F
 
538
001FEB1FE0390FE03F800003B51200C613FCEB1FE01F347DB126>I<EC01C0A214031407
 
539
A2140F141FA2143F147F146F14CF1301EB038F140F1307130E130C131C13381330137013
 
540
E013C0EA0180120313001206120E120C5A123812305A12E0B71280A3C7380FC000A94A7E
 
541
0107B51280A321337EB226>I<000C14C0380FC00F90B5128015005C5C14F014C0D80C18
 
542
C7FC90C8FCA9EB0FC0EB7FF8EBF07C380FC03F9038001F80EC0FC0120E000CEB07E0A2C7
 
543
13F01403A215F8A41218127E12FEA315F0140712F8006014E01270EC0FC06C131F003C14
 
544
806CEB7F00380F80FE3807FFF8000113E038003F801D347CB126>I<14FE903807FF8001
 
545
1F13E090383F00F0017C13703901F801F8EBF003EA03E01207EA0FC0EC01F04848C7FCA2
 
546
48C8FCA35A127EEB07F0EB1FFC38FE381F9038700F809038E007C039FFC003E0018013F0
 
547
EC01F8130015FC1400A24814FEA5127EA4127F6C14FCA26C1301018013F8000F14F0EBC0
 
548
030007EB07E03903E00FC03901F81F806CB51200EB3FFCEB0FE01F347DB126>I<123012
 
549
3C003FB6FCA34814FEA215FC0070C7123800601430157015E04814C01401EC0380C7EA07
 
550
001406140E5C141814385CA25CA2495A1303A3495AA2130FA3131F91C7FCA25BA55BA913
 
551
1C20347CB126>I<EB0FE0EB7FFC90B5FC3903F01F803907C007C0390F0003E0000EEB01
 
552
F0001E1300001C14F8003C1478A3123EA2003F14F86D13F0EBC001D81FF013E09038F803
 
553
C0390FFE07803907FF0F006C13DE6C13F87EEB3FFE8001F713C0D803E313E0D8078013F0
 
554
390F007FF8001E131F003EEB07FC003C1303481301EC007E12F848143EA2151EA37E153C
 
555
1278007C14787E6C14F0390F8003E03907F01FC00001B5120038007FFCEB1FE01F347DB1
 
556
26>I<EB0FE0EB7FF8EBFFFE3803F83F3907E00F80390FC007C0D81F8013E0EC03F0EA3F
 
557
0048EB01F8127EA200FE14FC1400A415FEA5007E1301A2127F7E1403EA1F80000F130738
 
558
07C00E3803E01C3801F03838007FF090381FC0FC90C7FC1401A215F8A215F01403001F14
 
559
E0383F800715C0140FEC1F809038003F00001C137E381F01FC380FFFF0000313C0C690C7
 
560
FC1F347DB126>I<123C127E12FFA4127E123C1200B0123C127E12FFA4127E123C08207A
 
561
9F15>I<15E0A34A7EA24A7EA34A7EA3EC0DFE140CA2EC187FA34A6C7EA202707FEC601F
 
562
A202E07FECC00FA2D901807F1507A249486C7EA301066D7EA2010E80010FB5FCA2498001
 
563
18C77EA24981163FA2496E7EA3496E7EA20001821607487ED81FF04A7ED8FFFE49B512E0
 
564
A333367DB53A>65 D<DA03FE130C91393FFF801C91B512E0903A03FE01F83C903A0FF000
 
565
3C7CD91FC0EB0EFCD97F80130701FEC7120348481401000315005B4848157C485A173C48
 
566
5A171C123F5B007F160CA390C9FC481600AB7E6D150CA3123F7F001F161C17186C7E1738
 
567
6C6C15306C6C15706D15E012016C6CEC01C0D97F80EB0380D91FC0EB0F00D90FF0131ED9
 
568
03FE13FC0100B512F0023F13C0DA03FEC7FC2E377CB437>67 D<B77E16F016FE3A01FE00
 
569
01FF00009138003FC0EE0FE0707E707E707E707E177E177FEF3F80A2EF1FC0A3EF0FE0A4
 
570
18F0AA18E0A3171F18C0A21880173F18005F17FE5F4C5AEE07F04C5AEE3FC000014AB45A
 
571
B748C7FC16F8168034337EB23B>I<B812C0A3D803FCC7127F0001150FEE03E01601A216
 
572
00A21760A403061330A41700150EA2151E157E90B512FEA39038FC007E151E150EA21506
 
573
170CA3171892C7FCA41738A21770A217F01601160316070003157FB812E0A32E337DB234
 
574
>I<B81280A3D803FCC7FC0001151FEE07C01603A21601A21600A41760150CA31700A215
 
575
1CA2153C15FC90B5FCA3EBFC00153C151CA2150CA592C8FCAB487EB512FEA32B337DB232
 
576
>I<B512FEA3000113006C5AB3B3A7487EB512FEA317337EB21C>73
 
577
D<B512FEA3D803FEC9FC6C5AB3A9EE0180A416031700A45EA25E5E5E5E16FE00031407B7
 
578
FCA329337DB230>76 D<D8FFFC923801FFF86D5DA20003EFFE00D801BFED06FCA3D99F80
 
579
140CA2D98FC01418A3D987E01430A2D983F01460A3D981F814C0A3D980FCEB0180A2027E
 
580
EB0300A36E1306A26E6C5AA36E6C5AA36E6C5AA26E6C5AA36E6C5AA3913800FD80A2037F
 
581
C7FCA3486C133ED80FF04B7EB5011C90387FFFF8A33D337CB246>I<D8FFFE91381FFFF8
 
582
7F80C6030013006E143CD9DFE01418EBCFF0A2EBC7F8EBC3FCA2EBC1FEEBC0FF6E7EA26E
 
583
7E6E7EA26E7E6E7E6E7EA26E7E6E7EA2ED7F80ED3FC0ED1FE0A2ED0FF0ED07F8A2ED03FC
 
584
ED01FEED00FFA2EE7F98EE3FD8A2EE1FF8160F1607A216031601A2486C1400D807F81578
 
585
B500C01438A2171835337EB23A>I<B612FEEDFFC016F03A03FC0007FC0001EC00FE167F
 
586
EE3F80EE1FC017E0160FA217F0A617E0A2EE1FC0A2EE3F80EE7F0016FEED07F890B65A16
 
587
8001FCC9FCB3A2487EB512F8A32C337DB234>80 D<B612FCEDFF8016F03A01FE0007FC00
 
588
00EC01FEED007F707E707E83160F83A65FA24C5AA24C5A047EC7FC4B5AED0FF090B612C0
 
589
93C8FC9039FE001FC0ED07F06F7E6F7E150082167E167FA583A5180C17C0A2043F131C48
 
590
6C1618B500FEEB1FE0040F1338933807F070C93801FFE09338003F8036357EB239>82
 
591
D<90381FE00390387FFC0748B5FC3907F01FCF390F8003FF48C7FC003E80814880A20078
 
592
8000F880A46C80A27E92C7FC127F13C0EA3FF013FF6C13F06C13FF6C14C06C14F0C68001
 
593
3F7F01037F9038003FFF140302001380157F153FED1FC0150F12C0A21507A37EA26CEC0F
 
594
80A26C15006C5C6C143E6C147E01C05B39F1FC03F800E0B512E0011F138026C003FEC7FC
 
595
22377CB42B>I<007FB712FEA390398007F001D87C00EC003E0078161E0070160EA20060
 
596
160600E01607A3481603A6C71500B3AB4A7E011FB512FCA330337DB237>I<B500FE9038
 
597
1FFFF8A3000190C813006C48153C1718B3AF1738017F1530A217706D6C1460011F15E06E
 
598
495A010F14036D6C495A6D6C49C7FCD901FC131E6DB413FC91383FFFF0020F13C0020190
 
599
C8FC35357EB23A>I<B5D8F007B539800FFFF0A3000390C7273FF000011300D801FC6E48
 
600
EB007C1A386D140F00001930836D020715706D1860A26E496C14E0013F60A26ED919FC13
 
601
01011F60A26ED930FE1303010F95C7FCA26ED9607F5B01071706A26E9039C03F800E0103
 
602
170CA2913BFC01801FC01C01011718A2913BFE03000FE03801001730A2DAFF06EB07F002
 
603
7F5EA2038CEB03F8023F5EA203D8EB01FC021FEDFD80A203F0EB00FF020F93C8FCA24B80
 
604
0207157EA24B143E0203153CA24B141C020115184C357FB24F>87
 
605
D<EB7F803803FFF0380F80FC381C003E003F133F6D6C7E6E7EA26E7EEA1F00C7FCA4EB01
 
606
FF131FEBFF873803FC07EA0FF0EA1FC0EA3F80127F13004815C05AA3140FA26C131F6C13
 
607
3B3A3F8071F180391FC1E1FF2607FFC013003900FE003C22237DA126>97
 
608
D<EA03F012FFA312071203AEEC3F80ECFFE09038F3C0F89038F7007E01FE7F49EB1F8049
 
609
EB0FC05BED07E016F0A2150316F8AA16F0150716E0A2ED0FC07F6DEB1F8001ECEB3F0001
 
610
CF137C90388381F8903801FFE0C76CC7FC25357EB32B>I<EB07F8EB3FFF9038FC07C039
 
611
01F000E03903E003F03807C007120FEA1F80123F90380003E04890C7FCA2127E12FEAA12
 
612
7FA26C14187F001F14386D1330000F14706C6C13E03903F001C03900FC0F8090383FFE00
 
613
EB07F01D237EA122>I<153FEC0FFFA3EC007F81AEEB07F0EB3FFCEBFC0F3901F003BF39
 
614
07E001FF48487E48487F8148C7FCA25A127E12FEAA127E127FA27E6C6C5BA26C6C5B6C6C
 
615
4813803A03F007BFFC3900F81E3FEB3FFCD90FE0130026357DB32B>I<EB0FE0EB7FFCEB
 
616
F83F3903F00F80D807E013C0390FC007E0381F800315F0EA3F0014014814F8127EA212FE
 
617
A2B6FCA248C8FCA5127E127FA26C1418A26C6C1338000F14306D13706C6C13E03901F003
 
618
C03900FC0F00EB3FFEEB07F01D237EA122>I<EB01FCEB07FF90381F078090383E0FC0EB
 
619
7C1F13FCEA01F8A20003EB070049C7FCACB512F0A3D803F0C7FCB3A7487E387FFFE0A31A
 
620
357FB417>I<151F90391FC07F809039FFF8E3C03901F07FC73907E03F033A0FC01F8380
 
621
9039800F8000001F80EB00074880A66C5CEB800F000F5CEBC01F6C6C48C7FCEBF07C380E
 
622
FFF8380C1FC0001CC9FCA3121EA2121F380FFFFEECFFC06C14F06C14FC4880381F000100
 
623
3EEB007F4880ED1F8048140FA56C141F007C15006C143E6C5C390FC001F83903F007E0C6
 
624
B51280D91FFCC7FC22337EA126>I<EA03F012FFA312071203AEEC1FC0EC7FF09038F1E0
 
625
FC9038F3807C9038F7007E13FE497FA25BA25BB3486CEB7F80B538C7FFFCA326347EB32B
 
626
>I<EA0780EA0FC0EA1FE0A4EA0FC0EA0780C7FCAAEA07E012FFA3120F1207B3A6EA0FF0
 
627
B5FCA310337EB215>I<EB03C0EB07E0EB0FF0A4EB07E0EB03C090C7FCAAEB03F013FFA3
 
628
13071303B3B01238127C00FE13E0130714C0130F007C138038381F00EA1FFCEA07F01443
 
629
84B217>I<EA03F012FFA312071203AF913803FFE0A36E1300EC00F8EC01E05D4A5A020F
 
630
C7FC141C5C5C14F0EBF3F8EBF7FC13FEEBFC7EEBF87F496C7E141F6E7E8114076E7E8114
 
631
016E7E81486CEBFF80B500C313F0A324347EB329>I<EA07E012FFA3120F1207B3B3A7EA
 
632
0FF0B5FCA310347EB315>I<2703F01FE013FF00FF90267FF80313C0903BF1E07C0F03E0
 
633
903BF3803E1C01F02807F7003F387FD803FE1470496D486C7EA2495CA2495CB3486C496C
 
634
487EB53BC7FFFE3FFFF0A33C217EA041>I<3903F01FC000FFEB7FF09038F1E0FC9038F3
 
635
807C3907F7007EEA03FE497FA25BA25BB3486CEB7F80B538C7FFFCA326217EA02B>I<EB
 
636
07F0EB3FFE9038FC1F803901F007C03903C001E000078048486C7E48C7127CA248147E00
 
637
3E143E007E143FA300FE1580A8007E1500A36C147EA26C147C6D13FC6C6C485A00075C39
 
638
03F007E03900FC1F80D93FFEC7FCEB07F021237EA126>I<3903F03F8000FFEBFFE09038
 
639
F3C0F89038F7007ED807FE7F6C48EB1F804914C049130F16E0ED07F0A3ED03F8A9150716
 
640
F0A216E0150F16C06D131F6DEB3F80160001FF13FC9038F381F89038F1FFE0D9F07FC7FC
 
641
91C8FCAA487EB512C0A325307EA02B>I<903807F00390383FFC07EBFC0F3901F8038F38
 
642
07E001000F14DF48486CB4FC497F123F90C77E5AA25A5AA9127FA36C6C5B121F6D5B000F
 
643
5B3907E003BF3903F0073F3800F81EEB3FF8EB0FE090C7FCAAED7F8091380FFFFCA32630
 
644
7DA029>I<3803E07C38FFE1FF9038E38F809038E71FC0EA07EEEA03ECA29038FC0F8049
 
645
C7FCA35BB2487EB512E0A31A217FA01E>I<EBFF06000713CE381F00FE003C133E48131E
 
646
140E5A1406A27EA200FE90C7FC6C7EEA7FFC383FFFC014F0000F7F6C7FC67FEB0FFF1300
 
647
EC3F8000C0131F140F6C1307A37E15006C5B6C130E6C5B38F7807838E1FFE038C07F8019
 
648
237EA11E>I<1330A51370A313F0A21201A212031207381FFFFEB5FCA23803F000AF1403
 
649
A814073801F806A23800FC0EEB7E1CEB1FF8EB07E0182F7FAD1E>I<D803F0133F00FFEB
 
650
0FFFA30007EB007F000380B35DA35D12016D4813800000903803BFFC90387E073FEB1FFE
 
651
D907F8130026227EA02B>I<B5EBFFF0A3D80FF0EB3F800007EC1F000003140E150C6D13
 
652
1C00011418A26C6C5BA26D1370017E1360137F6D5BA290381F8180A214C3010F90C7FCA2
 
653
EB07E6A214FE6D5AA26D5AA36D5AA2146024217E9F29>I<B53A1FFF81FFF0A33C07F801
 
654
FC003F8001F049EB1E0000030100141C816C6C017C1318A26D017E1338000002FE1330A2
 
655
90267E01FF5B159F168090263F030F5BA216C0903A1F8607C180A202C613E390260FCC03
 
656
90C7FCA2D907FC13F6ECF80116FE6D486C5AA36D481378A36D48133034217F9F37>I<B5
 
657
3801FFF8A32603FE0013806C48EB7C0000001478017E1370017F5B90383F81C090381F83
 
658
80D90FC3C7FCEB07E614FE6D5A6D5A6D7E80805B9038039F809038071FC09038060FE0EB
 
659
0C0790381C03F0496C7E01707FEBF000000180000FECFF8026FFFC0313FCA326207F9F29
 
660
>I<3A7FFF807FF8A33A07F8001FC00003EC0F800001EC070015066C6C5BA26D131C017E
 
661
1318A26D5BA2EC8070011F1360ECC0E0010F5BA2903807E180A214F3010390C7FC14FBEB
 
662
01FEA26D5AA31478A21430A25CA214E05CA2495A1278D8FC03C8FCA21306130EEA701CEA
 
663
7838EA1FF0EA0FC025307F9F29>I<003FB512F0A2EB000F003C14E00038EB1FC00030EB
 
664
3F800070137F1500006013FE495A13035CC6485A495AA2495A495A49C7FC153013FE485A
 
665
12035B48481370485A001F14604913E0485A387F000348130F90B5FCA21C207E9F22>I<
 
666
BC12F0A24C0280944D>124 D E
 
667
%EndDVIPSBitmapFont
 
668
%DVIPSBitmapFont: Fk cmsy7 7 3
 
669
/Fk 3 113 df<B712FEA327037A8F34>0 D<1338A50060130C00F8133E00FC137E00FE13
628
670
FE383FBBF83807FFC000011300EA007C48B4FC000713C0383FBBF838FE38FE00FC137E00
629
671
F8133E0060130C00001300A517197B9A22>3 D<186018E0170118C0170318801707EF0F
630
672
00170E171E171C173C17381778177017F05F16014C5A5F160794C7FC5E160E161E161C16
633
675
5B14E301035B14F76DB4C9FC5C13005C147C14781438333A7B8237>112
634
676
D E
635
677
%EndDVIPSBitmapFont
636
 
%DVIPSBitmapFont: Fk cmmi7 7 13
637
 
/Fk 13 116 df<48B61280000715C0481580481500263C0C06C7FC127012C0EB1C0EEA00
 
678
%DVIPSBitmapFont: Fl cmmi7 7 13
 
679
/Fl 13 116 df<48B61280000715C0481580481500263C0C06C7FC127012C0EB1C0EEA00
638
680
18A21338A2EB701EA313F013E01201141F120313C0000780A2380F800FA26C486CC7FC22
639
681
1A7D9827>25 D<EC0180140314071500A25C140E141E141CA2143C143814781470A214F0
640
682
5CA213015C13035CA2130791C7FC5B130EA2131E131C133C1338A21378137013F05BA212
668
710
1378A24813F05A387001E0EB03C0383C0F80381FFE00EA07F8171B7C991F>115
669
711
D E
670
712
%EndDVIPSBitmapFont
671
 
%DVIPSBitmapFont: Fl cmmi10 10.95 22
672
 
/Fl 22 121 df<18E00130ED03F80170ED07FC13F0485A5B12034915030007160148CAFC
673
 
187C120E121E001C173C003C021C14380038147EA20078177803FE147000705CA218F04A
674
 
4814E000F01601A24BEB03C0A24BEB07800203140F6C0107EC1F00173E6CD91FF0137E00
675
 
7C013F5C007E90397FF803F83B7F83FFFE1FF0263FFFFCB5FC4A14C06C496C5B6C01C091
676
 
C7FC6C9038001FFCD801FCEB07E036297FA739>33 D<121EEA7F80A2EAFFC0A4EA7F80A2
677
 
EA1E000A0A798919>58 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0
678
 
A312011380120313005A120E5A1218123812300B1C798919>I<180E183F18FFEF03FEEF
679
 
0FF8EF3FE0EFFF80933803FE00EE0FF8EE3FE0EEFF80DB03FEC7FCED1FF8ED7FE0913801
680
 
FF80DA07FEC8FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848CAFCEA07FCEA1FF0
681
 
EA7FC048CBFCA2EA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FCEB01FF9038007F
682
 
C0EC1FF0EC07FE913801FF809138007FE0ED1FF8ED03FE923800FF80EE3FE0EE0FF8EE03
683
 
FE933800FF80EF3FE0EF0FF8EF03FEEF00FF183F180E383679B147>I<ED0180ED03C015
684
 
07A21680150FA216005DA2151E153EA2153C157CA2157815F8A25D1401A25D1403A25D14
685
 
07A25D140FA24AC7FCA2141E143EA2143C147CA2147814F8A25C1301A25C1303A25C1307
686
 
A25C130FA291C8FC5BA2131E133EA25BA2137813F8A25B1201A25B1203A25B1207A25B12
687
 
0FA290C9FC5AA2121E123EA2123C127CA2127812F8A25A1260225B7BC32D>I<49B9FCA3
688
 
D9000190C7120718004B157F193F191E14035DA314075D191CA2140F5D17074D133C021F
689
 
020E13384B1500A2171E023F141C4B133C177C17FC027FEB03F892B5FCA39139FF8003F0
690
 
ED00011600A2495D5CA2160101035D5CA293C9FC13075CA3130F5CA3131F5CA2133FA25C
691
 
497EB612F8A3403E7DBD3A>70 D<49B612C05BA2D90001EB800093C7FC5DA314035DA314
692
 
075DA3140F5DA3141F5DA3143F5DA3147F5DA314FF92C8FCA35B5CA313035CA313075CA3
693
 
130F5CA3131F5CA2133FA25CEBFFE0B612E0A32A3E7DBD28>73 D<49B56C49B512F81BF0
694
 
A290C76D9039000FFE004AEE03F0705D735A03DF150302037F038F5E82190791380787FC
695
 
030793C7FC1503705C140F91260E01FF140EA26F151E021E80021C017F141C83193C023C
696
 
6D7E02381638161F711378147802706D6C1370A2040714F002F0804A01035C8318010101
697
 
EC01FF4A5E82188313034A91387FC380A2EF3FC7010716E791C8001F90C8FC18F718FF49
698
 
81010E5E1707A2131E011C6F5AA2013C1501137C01FE6F5AEA03FFB512FC187818704D3E
699
 
7DBD49>78 D<EE3FF00303B5FC92391FC03FC092397E0007E0DA01F8EB01F8DA07E06D7E
700
 
4A48147E023FC87E027EED1F804A16C0D903F8150F494816E0495A4948ED07F0A2494816
701
 
F849C9FC5B48481603A2484817FCA2485A000F17075B121FA25B123F19F84848160FA448
702
 
48EE1FF0A3F03FE0A390CAEA7FC0A2F0FF80A219004D5A1703604D5A6C7E4D5A4D5A003F
703
 
5F4D5A6C6C4BC7FC17FE6C6C4A5A4C5A6C6CEC07E06C6CEC1FC06C6C4A5A6C6C02FEC8FC
704
 
90393F8003F890390FE01FE00103B5C9FC9038007FF03E427BBF45>I<48B912FCA25A91
705
 
3A0003FE000F01F84A1301D807E0EE00F8491307491778000F5D90C7FC001E140FA2001C
706
 
4B1470123C0038141FA200785D1270033F15F000F018E0485DC81600157FA25EA215FFA2
707
 
93C9FCA25CA25DA21403A25DA21407A25DA2140FA25DA2141FA25DA2143FA25DA2147FA2
708
 
14FF497F001FB612FCA25E3E3D7FBC35>84 D<027FB5D88007B512C091B6FCA2020101F8
709
 
C7EBF8009126007FE0EC7F804C92C7FC033F157C701478616F6C495A4E5A6F6C495A4EC8
710
 
FC180E6F6C5B606F6C5B6017016F6C485A4D5A6F018FC9FC179E17BCEE7FF85F705AA370
711
 
7EA283163F167FEEF7FCED01E7EEC3FEED0383ED070392380E01FF151E4B6C7F5D5D4A48
712
 
6D7E4A5A4A486D7E92C7FC140E4A6E7E5C4A6E7E14F0495A49486E7E1307D91F806E7ED9
713
 
7FC014072603FFE0EC1FFF007F01FC49B512FEB55CA24A3E7EBD4B>88
714
 
D<B66C0103B51280A3000101E0C8387FF0006C49ED3F80017F94C7FC183C606D6C157060
715
 
6D6C4A5A17034D5A6D6C4AC8FC170E5F6D6C5C17785F6D6C495A5F6E495A6D4AC9FC160E
716
 
6DEB801E5E5E91387FC0705EEDC1C0EC3FE3EDE78003FFCAFC6E5A5D6E5AA25DA25D141F
717
 
A35D143FA35D147FA392CBFC5CA3495AA3497E0007B512FEA3413E7DBD35>I<EE07F0ED
718
 
03FF17E0A2ED000FA217C0A2161FA21780A2163FA21700A25EA2167EA216FEA25EEC1F80
719
 
ECFFE1903803F07190390FC039F890381F801D90383F000F137E495C00011407485A485A
720
 
5E485A001F140FA248485CA2151F127F495CA2153F12FF90C790C7FCA25DEE038048147E
721
 
A215FE1607007ED901FC130014035E6C0107130E140E3A1F801C7C1C000F13783A07C1F0
722
 
3E383A01FFC01FF03A007F0007C02C407DBE2F>100 D<EC1FE0ECFFFC903803F01E9038
723
 
0FC00F90393F800780D97E0013C0491303EA03F8120749130748481480121F49130F003F
724
 
EC1F00153E397F8001FCEC1FF0B6128002F8C7FC90C9FCA45AA616C01501007E1403ED07
725
 
806CEC0F00151E6C5C6C6C13F83907C003E03903E03F802600FFFEC7FCEB3FE022297CA7
726
 
2A>I<163EEEFFC0923803E1E0923807C0F0ED0F811687ED1F8F160F153FA217E092387E
727
 
038093C7FCA45DA514015DA30103B512FCA390260003F0C7FCA314075DA4140F5DA5141F
728
 
5DA4143F92C8FCA45C147EA414FE5CA413015CA4495AA35CEA1E07127F5C12FF495AA200
729
 
FE90C9FCEAF81EEA703EEA7878EA1FF0EA07C02C537CBF2D>I<143C14FEA21301A314FC
730
 
EB00701400AD137E3801FF803803C7C0EA0703000F13E0120E121C13071238A2EA780F00
731
 
7013C0A2EAF01F14801200133F14005B137EA213FE5BA212015B0003130E13F0A2000713
732
 
1EEBE01CA2143CEBC0381478147014E013C13803E3C03801FF00EA007C173E7EBC1F>
733
 
105 D<ED01C0ED07F0A2150FA316E0ED038092C7FCADEC03E0EC0FF8EC3C3EEC701EECE0
734
 
1FEB01C001031480EB0780140049133F010E1400131E131C013C5BA290C7127EA215FEA2
735
 
5DA21401A25DA21403A25DA21407A25DA2140FA25DA2141FA25DA2143FA292C7FCA25C14
736
 
7EA2001C13FE007F5BEAFF015C495A495A48485A38F81F80D8783EC8FCEA3FF8EA0FE024
737
 
5081BC25>I<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA2
738
 
91C9FC16FC49EB03FE92380F0780017EEB3C0FED703F01FE13E0913801C07F9038FC0380
739
 
EC07000001010E14004A131C494890C7FC5C00035BEBF9C0495A01FFC9FC5A14F0EBE3FE
740
 
9038E07F80000FEB1FC06E7EEBC00781001F1303160E1380A2003F151E0207131C010013
741
 
E0A2485DA2007E01031378167000FE01015B15F1489038007F800038023EC7FC29407CBE
742
 
2F>I<D801F0EB0FF0D807FCEB3FFED80F1FEBF01F000E903903C00F80271E0F87007F00
743
 
1C018E1307003C01DC80003813F85CEA781F00705B5CA200F049130F013F5D000090C7FC
744
 
A2161F495D137E163F94C7FC13FE495C167EA200019238FE03804914FCA2030113070003
745
 
03F813005B5FEEF00E0007161E49151C5F1778000F6E6C5A49EC7FC0D80380021FC7FC31
746
 
297EA737>110 D<D801F0EB3F80D807FCEBFFE03A0F1F03C0F0000E90380F00F8391E0F
747
 
9E03001C13BC003CEBF807003813F0A226781FE013F000709038C001C092C7FC5C12F013
748
 
3F000090C8FCA35B137EA313FE5BA312015BA312035BA312075BA3120F5BEA038025297E
749
 
A729>114 D<EC1FC0ECFFF8903803E03C903807800E90381E0007168049130F49131F15
750
 
3FA201F81400A2151C6D90C7FC7FEBFFE014FE90387FFFC06D7F6D13F86D7F1303903800
751
 
1FFE14031400157E000C143E123F487EA248C7123CA25D12FC00F05C0070495A0078495A
752
 
6C495A260F803EC7FC3803FFF838007FC021297CA72B>I<D901F8133FD907FEEBFFE090
753
 
3A1E0F83C0F0903A3807C780F890397003CF0301E013FED801C0EBFC071203018013F8D8
754
 
070015F0EE01C0000E4AC7FCA2001E1307A2C75BA2140F5DA3141F5DA3143F92380001C0
755
 
A34A1303001E1680003F017E1307267F80FE14005ED8FF81141ED901DF131CD8FE035C3A
756
 
7C078F80F03A3C0F07C1E03A1FFC03FF802707F0007EC7FC2D297EA734>120
 
713
%DVIPSBitmapFont: Fm cmmi10 10.95 22
 
714
/Fm 22 121 df<0120ED01C00178ED07F001F8150F000117F85B485A5B00071607491503
 
715
48C9EA01F0A2121E1700121C003C023814E0003814FCA200781601140100704A14C0A217
 
716
034B148000F0130317074B14005F5D0207141E6F133E6C010F5C4A7E6C013F5C007E9038
 
717
FFF8033B7F87FDFF0FF0D9FFF8EBFFE06C495C4A6C5B6C496C90C7FC00079038001FFCD8
 
718
01F8EB03F035297EA739>33 D<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>
 
719
58 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313
 
720
005A120E5A1218123812300B1C798919>I<183818FC1703EF0FF8EF3FE0EFFF80933803
 
721
FE00EE0FF8EE3FE0EEFF80DB03FEC7FCED0FF8ED3FE0EDFF80DA03FEC8FCEC0FF8EC3FE0
 
722
ECFF80D903FEC9FCEB0FF8EB3FE0EBFF80D803FECAFCEA0FF8EA3FE0EA7F8000FECBFCA2
 
723
EA7F80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC
 
724
03FE913800FF80ED3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF
 
725
3FE0EF0FF8EF03FC17001838363678B147>I<ED0180ED03C01507A21680150FA216005D
 
726
A2151E153EA2153C157CA2157815F8A25D1401A25D1403A25D1407A25D140FA24AC7FCA2
 
727
141E143EA2143C147CA2147814F8A25C1301A25C1303A25C1307A25C130FA291C8FC5BA2
 
728
131E133EA25BA2137813F8A25B1201A25B1203A25B1207A25B120FA290C9FC5AA2121E12
 
729
3EA2123C127CA2127812F8A25A1260225B7BC32D>I<49B9FCA3D9000190C7120718004B
 
730
157F193F191E14035DA314075D191CA2140F5D17074D133C021F020E13384B1500A2171E
 
731
023F141C4B133C177C17FC027FEB03F892B5FCA39139FF8003F0ED00011600A2495D5CA2
 
732
160101035D5CA293C9FC13075CA3130F5CA3131F5CA2133FA25C497EB612F8A3403E7DBD
 
733
3A>70 D<49B612C05BA2D90001EB800093C7FC5DA314035DA314075DA3140F5DA3141F5D
 
734
A3143F5DA3147F5DA314FF92C8FCA35B5CA313035CA313075CA3130F5CA3131F5CA2133F
 
735
A25CEBFFE0B612E0A32A3E7DBD28>73 D<49B56C49B512F81BF0A290C76D9039000FFE00
 
736
4AEE03F0705D735A03DF150302037F038F5E82190791380787FC030793C7FC1503705C14
 
737
0F91260E01FF140EA26F151E021E80021C017F141C83193C023C6D7E02381638161F7113
 
738
78147802706D6C1370A2040714F002F0804A01035C8318010101EC01FF4A5E8218831303
 
739
4A91387FC380A2EF3FC7010716E791C8001F90C8FC18F718FF4981010E5E1707A2131E01
 
740
1C6F5AA2013C1501137C01FE6F5AEA03FFB512FC187818704D3E7DBD49>78
 
741
D<EE3FF00303B5FC92391FC03FC092397E0007E0DA01F8EB01F8DA07E06D7E4A48147E02
 
742
3FC87E027EED1F804A16C0D903F8150F494816E0495A4948ED07F0A2494816F849C9FC5B
 
743
48481603A2484817FCA2485A000F17075B121FA25B123F19F84848160FA44848EE1FF0A3
 
744
F03FE0A390CAEA7FC0A2F0FF80A219004D5A1703604D5A6C7E4D5A4D5A003F5F4D5A6C6C
 
745
4BC7FC17FE6C6C4A5A4C5A6C6CEC07E06C6CEC1FC06C6C4A5A6C6C02FEC8FC90393F8003
 
746
F890390FE01FE00103B5C9FC9038007FF03E427BBF45>I<48B912FCA25A913A0003FE00
 
747
0F01F84A1301D807E0EE00F8491307491778000F5D90C7FC001E140FA2001C4B1470123C
 
748
0038141FA200785D1270033F15F000F018E0485DC81600157FA25EA215FFA293C9FCA25C
 
749
A25DA21403A25DA21407A25DA2140FA25DA2141FA25DA2143FA25DA2147FA214FF497F00
 
750
1FB612FCA25E3E3D7FBC35>84 D<027FB5D88007B512C091B6FCA2020101F8C7EBF80091
 
751
26007FE0EC7F804C92C7FC033F157C701478616F6C495A4E5A6F6C495A4EC8FC180E6F6C
 
752
5B606F6C5B6017016F6C485A4D5A6F018FC9FC179E17BCEE7FF85F705AA3707EA283163F
 
753
167FEEF7FCED01E7EEC3FEED0383ED070392380E01FF151E4B6C7F5D5D4A486D7E4A5A4A
 
754
486D7E92C7FC140E4A6E7E5C4A6E7E14F0495A49486E7E1307D91F806E7ED97FC0140726
 
755
03FFE0EC1FFF007F01FC49B512FEB55CA24A3E7EBD4B>88 D<B66C0103B51280A3000101
 
756
E0C8387FF0006C49ED3F80017F94C7FC183C606D6C1570606D6C4A5A17034D5A6D6C4AC8
 
757
FC170E5F6D6C5C17785F6D6C495A5F6E495A6D4AC9FC160E6DEB801E5E5E91387FC0705E
 
758
EDC1C0EC3FE3EDE78003FFCAFC6E5A5D6E5AA25DA25D141FA35D143FA35D147FA392CBFC
 
759
5CA3495AA3497E0007B512FEA3413E7DBD35>I<EE07F0ED03FF17E0A2ED000FA217C0A2
 
760
161FA21780A2163FA21700A25EA2167EA216FEA25EEC1F80ECFFE1903803F07190390FC0
 
761
39F890381F801D90383F000F137E495C00011407485A485A5E485A001F140FA248485CA2
 
762
151F127F495CA2153F12FF90C790C7FCA25DEE038048147EA215FE1607007ED901FC1300
 
763
14035E6C0107130E140E3A1F801C7C1C000F13783A07C1F03E383A01FFC01FF03A007F00
 
764
07C02C407DBE2F>100 D<EC1FE0ECFFFC903803F01E90380FC00F90393F800780D97E00
 
765
13C0491303EA03F8120749130748481480121F49130F003FEC1F00153E397F8001FCEC1F
 
766
F090B51280B500F8C7FC90C9FCA45AA616C01501007E1403ED07806CEC0F00151E6C5C6C
 
767
6C13F83907C003E03903E03F802600FFFEC7FCEB3FE022297CA72A>I<163EEEFFC09238
 
768
03E1E0923807C0F0ED0F811687ED1F8F160F153FA217E092387E038093C7FCA45DA51401
 
769
5DA30103B512FCA390260003F0C7FCA314075DA4140F5DA5141F5DA4143F92C8FCA45C14
 
770
7EA414FE5CA413015CA4495AA35CEA1E07127F5C12FF495AA200FE90C9FCEAF81EEA703E
 
771
EA7878EA1FF0EA07C02C537CBF2D>I<143C14FEA21301A314FCEB00701400AD137E3801
 
772
FF803803C7C0EA0703000F13E0120E121C13071238A2EA780F007013C0A2EAF01F148012
 
773
00133F14005B137EA213FE5BA212015B0003130E13F0A20007131EEBE01CA2143CEBC038
 
774
1478147014E013C13803E3C03801FF00EA007C173E7EBC1F>105
 
775
D<ED01C0ED07F0A2150FA316E0ED038092C7FCADEC03E0EC0FF8EC3C3EEC701EECE01FEB
 
776
01C001031480EB0780140049133F010E1400131E131C013C5BA290C7127EA215FEA25DA2
 
777
1401A25DA21403A25DA21407A25DA2140FA25DA2141FA25DA2143FA292C7FCA25C147EA2
 
778
001C13FE007F5BEAFF015C495A495A48485A38F81F80D8783EC8FCEA3FF8EA0FE0245081
 
779
BC25>I<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA291C9
 
780
FC16FC49EB03FE92380F0780017EEB3C0FED703F01FE13E0913801C07F9038FC0380EC07
 
781
000001010E14004A131C494890C7FC5C00035BEBF9C0495A01FFC9FC5A14F0EBE3FE9038
 
782
E07F80000FEB1FC06E7EEBC00781001F1303160E1380A2003F151E0207131C010013E0A2
 
783
485DA2007E01031378167000FE01015B15F1489038007F800038023EC7FC29407CBE2F>
 
784
I<01F8EB0FF0D803FEEB3FFC3A078F80F03E3A0F0F83C01F3B0E07C7800F80001CEBCF00
 
785
02FE80003C5B00385B495A127800705BA200F049131F011F5D00005BA2163F013F92C7FC
 
786
91C7FC5E167E5B017E14FE5EA201FE0101EB03804914F8A203031307000103F013005B17
 
787
0E16E000035E49153C17385F0007913801F1E0496DB45AD801C0023FC7FC31297EA737>
 
788
110 D<D801F0EB3F80D807FCEBFFE03A0F1F03C0F0000E90380F00F8391E0F9E03001C13
 
789
BC003CEBF807003813F0A226781FE013F000709038C001C092C7FC5C12F0133F000090C8
 
790
FCA35B137EA313FE5BA312015BA312035BA312075BA3120F5BEA038025297EA729>114
 
791
D<EC1FC0ECFFF8903803E03C903807800E90381E0007168049130F49131F153FA201F814
 
792
00A2151C6D90C7FC7FEBFFE014FE90387FFFC06D7F6D13F86D7F13039038001FFE140314
 
793
00157E000C143E123F487EA248C7123CA25D12FC00F05C0070495A0078495A6C495A260F
 
794
803EC7FC3803FFF838007FC021297CA72B>I<D901F8133FD907FEEBFFE0903A1E0F83C0
 
795
F0903A3807C780F890397003CF0301E013FED801C0EBFC071203018013F8D8070015F0EE
 
796
01C0000E4AC7FCA2001E1307A2C75BA2140F5DA3141F5DA3143F92380001C0A34A130300
 
797
1E1680003F017E1307267F80FE14005ED8FF81141ED901DF131CD8FE035C3A7C078F80F0
 
798
3A3C0F07C1E03A1FFC03FF802707F0007EC7FC2D297EA734>120
757
799
D E
758
800
%EndDVIPSBitmapFont
759
 
%DVIPSBitmapFont: Fm cmb10 10.95 11
760
 
/Fm 11 117 df<EB0FFC90383FFFC090B512F048803903F83FFC3907E00FFED80FC07F48
 
801
%DVIPSBitmapFont: Fn cmb10 10.95 11
 
802
/Fn 11 117 df<EB0FFC90383FFFC090B512F048803903F83FFC3907E00FFED80FC07F48
761
803
6C6C138013F801FC14C0123F13FEA5EA1FFC1680EA0FF8D803E01400C75A5D5D4A5A5DEC
762
804
7FE090381FFFC092C7FC15C015F09038003FF8EC0FFE816E1380A216C06E13E0A316F0EA
763
805
0FC0EA1FE0EA3FF0EA7FF8EAFFFCA416E0A2495A007F15C013F0263FC00F13801600391F
778
820
FE1F13FFA530297EA833>I<49B47E010F13F0013F13FC90B6FC48018113803A03FE007F
779
821
C04848EB3FE0000F15F049131F001F15F8A24848EB0FFCA2007F15FEA400FF15FFAB007F
780
822
15FEA3003F15FC6D131F001F15F8A26C6CEB3FF0000715E06C6CEB7FC03A01FF81FF806C
781
 
90B51200013F13FC010F13F001011380282B7EA92D>I<9038FF01FFB5000F13E0023F13
782
 
F891B57E9138FE0FFFDAF80313800003D9E00113C014C04A6C13E017F0167FA217F8A216
783
 
3F17FCACEE7FF8A317F016FF17E0804B13C06E481380DAF80713009138FE0FFE91B55A02
784
 
BF13F0029F13C0DA83FEC7FC0280C8FCACB512FEA52E3B7FA833>I<3901FE07F800FFEB
785
 
0FFE91383FFF804A13C0EC7C7F9138F8FFE03807FFF06C5B5CA2ED7FC09138803F80ED1F
786
 
0092C7FCA291C8FCB3A3B6FCA523297FA827>114 D<131FA65BA55BA25BA25A5A5A001F
787
 
EBFFC0B6FCA4000790C7FCB3EC03E0A97EEC87C0A26CEBCF806C13FF6D1300EB1FFEEB07
788
 
F81B3B7EB923>116 D E
 
823
90B51200013F13FC010F13F001011380282B7EA92D>I<9038FF03FEB5381FFFC0027F13
 
824
F091B57E9138FE1FFE9138F007FF0007497E6C01C014804A6C13C017E081A217F0A2167F
 
825
17F8ACEEFFF0A317E05D17C0A26E4813806E4813006E485A9138FC1FFC91B55A16E0029F
 
826
1380DA87FCC7FC0280C8FCACB512FEA52D3B7EA833>I<3901FE07F800FFEB0FFE91383F
 
827
FF804A13C0EC7C7F9138F8FFE03807FFF06C5B5CA2ED7FC09138803F80ED1F0092C7FCA2
 
828
91C8FCB3A3B6FCA523297FA827>114 D<131FA65BA55BA25BA25A5A5A001FEBFFC0B6FC
 
829
A4000790C7FCB3EC03E0A97EEC87C0A26CEBCF806C13FF6D1300EB1FFEEB07F81B3B7EB9
 
830
23>116 D E
789
831
%EndDVIPSBitmapFont
790
 
%DVIPSBitmapFont: Fn cmr7 7 10
791
 
/Fn 10 62 df<1306130C13181330136013E0EA01C0EA0380A2EA07005A120E121EA212
 
832
%DVIPSBitmapFont: Fo cmr7 7 10
 
833
/Fo 10 62 df<1306130C13181330136013E0EA01C0EA0380A2EA07005A120E121EA212
792
834
1C123CA35AA512F85AAB7E1278A57EA3121C121EA2120E120F7EEA0380A2EA01C0EA00E0
793
835
136013301318130C13060F3B7AAB1A>40 D<12C012607E7E7E120E7EEA0380A2EA01C013
794
836
E0120013F0A213701378A3133CA5133E131EAB133E133CA51378A3137013F0A213E01201
805
847
A2130313071306130C131C131813301370136013C012011380EA03005A120E120C121C5A
806
848
12305A12E0B612E0A2C7EAF800A7497E90383FFFE0A21B277EA621>I<EB0FE0EB3FF8EB
807
849
F81C3801E0063803C01F48485AEA0F005A121E003E131E91C7FC5AA21304EB3FC038FCFF
808
 
F038FDC078B4C67E143E48131E141FA2481480A4127CA4003C1400123E001E131E143E6C
809
 
133C6C6C5A3803C1F03801FFC06C6CC7FC19277DA521>54 D<B812E0A3CBFCABB812E0A3
810
 
2B117D9633>61 D E
 
850
F038FDC078EB003CB4133E48131E141FA2481480A4127CA4003C1400123E001E131E143E
 
851
6C133C6C6C5A3803C1F03801FFC06C6CC7FC19277DA521>54 D<B812E0A3CBFCABB812E0
 
852
A32B117D9633>61 D E
811
853
%EndDVIPSBitmapFont
812
 
%DVIPSBitmapFont: Fo cmtt10 10.95 87
813
 
/Fo 87 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00
 
854
%DVIPSBitmapFont: Fp cmtt10 10.95 87
 
855
/Fp 87 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00
814
856
A2121C09396DB830>33 D<00101304007C131F00FEEB3F80A26C137FA248133FB2007E14
815
857
00007C7F003C131E00101304191C75B830>I<903907C007C0A2496C487EA8011F131FA2
816
858
02C05BA3007FB7FCA2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F
868
910
FF80261FFC0F13006CB55A6C5C6C5C6C14E06C6C1380D90FFCC7FC25397BB730>I<EC0F
869
911
F8EC7FFF49B51280010714E0131F4914F090387FF80F9039FFC007F84813803803FE005B
870
912
485A4848EB03F0ED01E0484890C7FC5B123F5BA2127FEB000C903803FFE0010F13F8D8FF
871
 
3F13FE48B6FCB7128016C09039FE007FE001F8EB1FF001E0130F49EB07F8ED03FC5B90C7
872
 
120116FE1500A37EA46C7E15016D14FC121F6D1303000FEC07F86D130F6C6CEB1FF06DEB
873
 
3FE03A03FF81FFC06C90B512806C15006D5B011F13F8010713E001011380273A7CB830>
874
 
I<127CB712FC16FEA416FC48C7EA0FF816F0ED1FE0007CEC3FC0C8EA7F80EDFF00A24A5A
875
 
4A5A5D14075D140F5D4A5AA24A5AA24AC7FCA25C5C13015CA213035CA213075CA4495AA6
876
 
131F5CA96D5A6DC8FC273A7CB830>I<49B4FC011F13F0017F13FC90B57E0003ECFF8048
877
 
15C048010113E03A1FF8003FF049131FD83FC0EB07F8A24848EB03FC90C71201A56D1303
878
 
003F15F86D13076C6CEB0FF06C6CEB1FE0D807FCEB7FC03A03FF83FF806C90B512006C6C
879
 
13FC011F13F0497F90B512FE48802607FE0013C0D80FF8EB3FE0D81FE0EB0FF04848EB07
880
 
F8491303007F15FC90C712014815FE481400A66C14016C15FC6D1303003F15F86D1307D8
881
 
1FF0EB1FF06D133F3A0FFF01FFE06C90B512C06C1580C6ECFE006D5B011F13F0010190C7
882
 
FC273A7CB830>I<49B4FC010F13E0013F13F890B57E4880488048010113803A0FFC007F
883
 
C0D81FF0EB3FE04848131F49EB0FF048481307A290C7EA03F85A4815FC1501A416FEA37E
884
 
7E6D130315076C7E6C6C130F6D133FD80FFC13FF6CB6FC7E6C14FE6C14F9013FEBE1FC01
885
 
0F138190380060011400ED03F8A2150716F0150F000F15E0486C131F486CEB3FC0157FED
886
 
FF804A1300EC07FE391FF01FFC90B55A6C5C6C5C6C1480C649C7FCEB3FF0273A7CB830>
887
 
I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7FE0A2
888
 
EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>I<EA03C0EA0FF0EA1FF8A2EA3FFCA4EA
889
 
1FF8A2EA0FF0EA03C0C7FCAFEA03C0EA0FF0121F13F8123F13FCA3121FA2120F12031200
890
 
120113F8120313F01207EA1FE0123FEA7FC0EAFF80EA7F00127E12380E3470A630>I<16
891
 
F01503ED07F8151F157FEDFFF014034A13C0021F138091383FFE00ECFFF8495B010713C0
892
 
495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7FF87F
893
 
EA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91381F
894
 
FF80020713C06E13F01400ED7FF8151F1507ED03F01500252F7BB230>I<007FB7FCA2B8
895
 
1280A36C16006C5DCBFCA7003FB612FE4881B81280A36C1600A229157DA530>I<127812
896
 
7EB4FC13C07FEA7FF813FEEA1FFF6C13C000037F6C13F86C6C7EEB1FFF6D7F010313E06D
897
 
7F9038007FFC6E7E91380FFF806E13C0020113F080ED3FF8151F153FEDFFF05C020713C0
898
 
4A138091383FFE004A5A903801FFF0495B010F13804990C7FCEB7FFC48485A4813E0000F
899
 
5B4890C8FCEA7FFE13F8EAFFE05B90C9FC127E1278252F7BB230>I<EC1FE0ECFFF80103
900
 
13FE010F7F4914804914C090397FF03FE09038FF800F4890380007F0D803FC13033A07F8
901
 
01FBF89038F007FF380FE01F4A13FCEA1FC0495A003FEBFF0F903800FE07903901FC03FE
902
 
007FEBF801EA7E03ECF000A2EAFE0700FC49137EAA00FE6D13FED87E0314FCA2ECF801D8
903
 
7F0114F8003FEBFC03903900FE07F0903880FF0F001F90387FFFE06D6C13C0EA0FE06E13
904
 
803A07F007FE009038F801F86C6CC7127C6CB414FE6CEB800390387FF01F6DB512FC6D14
905
 
F86D14E0010314C00100EBFE00EC1FF0273A7CB830>64 D<147F4A7EA2497FA4497F14F7
906
 
A401077F14E3A3010F7FA314C1A2011F7FA490383F80FEA590387F007FA4498049133F90
907
 
B6FCA34881A39038FC001F00038149130FA4000781491307A2D87FFFEB7FFFB56CB51280
908
 
A46C496C130029397DB830>I<007FB512F0B612FE6F7E82826C813A03F8001FF815076F
909
 
7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E0829039F8
910
 
000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6FCB75A
911
 
5E16C05E6C02FCC7FC29387EB730>I<91387F803C903903FFF03E49EBFC7E011F13FE49
912
 
EBFFFE5B9038FFE07F48EB801F3903FE000F484813075B48481303A2484813015B123F49
913
 
1300A2127F90C8FC167C16005A5AAC7E7EA2167C6D14FE123FA27F121F6D13016C6C14FC
914
 
A26C6CEB03F86D13076C6CEB0FF03901FF801F6C9038E07FE06DB512C06D14806D140001
915
 
0713FC6D13F09038007FC0273A7CB830>I<003FB512E04814FCB67E6F7E6C816C813A03
916
 
F8007FF0ED1FF8150F6F7E6F7E15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC161F17
917
 
C0A3163F1780A2167F17005E4B5A15034B5A150F4B5AED7FF0003FB65A485DB75A93C7FC
918
 
6C14FC6C14E02B387FB730>I<007FB7FCB81280A47ED803F8C7123FA8EE1F0093C7FCA4
919
 
157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA46C16C0
920
 
2B387EB730>I<003FB712804816C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FCA5153E
921
 
157FA490B6FCA69038FC007FA4153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A387EB730
922
 
>I<02FF13F00103EBC0F8010F13F1013F13FD4913FF90B6FC4813C1EC007F4848133F48
923
 
48131F49130F485A491307121F5B123F491303A2127F90C7FC6F5A92C8FC5A5AA892B5FC
924
 
4A14805CA26C7F6C6D1400ED03F8A27F003F1407A27F121F6D130F120F7F6C6C131FA2D8
925
 
03FE133F6C6C137FECC1FF6C90B5FC7F6D13FB010F13F30103EBC1F0010090C8FC293A7D
926
 
B830>I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E0D803F8C7
927
 
EAFE00B290B6FCA601F8C7FCB3A23B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13
928
 
F06C496C13E02D387FB730>I<007FB6FCB71280A46C1500260007F0C7FCB3B3A8007FB6
929
 
FCB71280A46C1500213879B730>I<49B512F04914F85BA27F6D14F090C7EAFE00B3B312
930
 
3C127EB4FCA24A5A1403EB8007397FF01FF86CB55A5D6C5C00075C000149C7FC38003FF0
931
 
25397AB730>I<D83FFF90380FFF80486D4813C0B56C5AA26C497E6C496C1380D803F090
932
 
3803F8004B5A4B5A151F4B5A5E4BC7FC15FE14014A5A5D4A5A4A5A141F5D4A5A4AC8FC5C
933
 
13F18101F37F13F790B57E14EFECC7F01483EC03F8140101FE7F496C7E5B157F497F8215
934
 
1F82150F826F7EA26F7E1501821500D83FFF903803FFC0486D4813E0B56C5AA26C497E6C
935
 
496C13C02B387FB730>I<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80EE1F
936
 
C0A9003FB7FC5AB8FCA27E6C16802A387EB730>I<D83FF8ECFFE0486C4913F0486C4913
937
 
F8A2007F16F06C6C4913E00007160001EF14BFEC800FA39039E7C01F3FA4ECE03F01E313
938
 
3EA2ECF07EA201E1137CA2ECF8FCA201E013F8A214FDEC7DF0A3147FEC3FE0A3EC1FC0A2
939
 
EC070091C7FCADD83FFC903801FFE0486C4913F0B54913F8A26C486D13F06C486D13E02D
940
 
387FB730>I<D83FFC90381FFF80486C4913C0B54913E0A26C6D6C13C06C6E1380000391
941
 
3801F800EBF7C0A3EBF3E0A314F013F1A214F8A213F014FCA2147C147EA2143E143FA214
942
 
1FA21581A2140F15C1A2140715E1A2140315F1A21401A215F91400A3157DA3153FEA3FFF
943
 
481380B5EAC01FA26CEB800F6C496C5A2B387EB730>I<90383FFFE048B512FC000714FF
944
 
4815804815C04815E0EBF80001E0133FD87F80EB0FF0A290C71207A44815F8481403B3A9
945
 
6C1407A26C15F0A36D130FA26D131F6C6CEB3FE001F813FF90B6FC6C15C06C15806C1500
946
 
000114FCD8003F13E0253A7BB830>I<007FB512F0B612FE6F7E16E0826C813903F8003F
947
 
ED0FFCED03FE15016F7EA2821780163FA6167F17005EA24B5A1503ED0FFCED3FF890B6FC
948
 
5E5E16804BC7FC15F001F8C9FCB0387FFFC0B57EA46C5B29387EB730>I<003FB57E4814
949
 
F0B612FC15FF6C816C812603F8017F9138003FF0151F6F7E15071503821501A515035E15
950
 
07150F4B5A153F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507A817
951
 
F8EEF1FCA53A3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F00
952
 
2E397FB730>82 D<90390FF803C0D97FFF13E048B512C74814F74814FF5A381FF80F383F
953
 
E001497E4848137F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFE
954
 
EBFFF06C13FF6C14E0000114F86C80011F13FF01031480D9003F13C014019138007FE015
955
 
1FED0FF0A2ED07F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC001FF
956
 
13FF91B51280160000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>I<003FB712
957
 
C04816E0B8FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC4980A46D91C7FC
958
 
2B387EB730>I<3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3B16D14
959
 
7F00011600A36C6C14FE6D13016D5CEC800390393FE00FF890391FF83FF06DB55A6D5C6D
960
 
5C6D91C7FC9038007FFCEC1FF02F3980B730>I<D83FFC903801FFE0486C4913F000FF16
961
 
F8A2007F16F06C486D13E0D81FC09038001FC0000F1680A76D143F00071600A700039038
962
 
0F803E9039F01FC07EEC3FE0A3EC7FF0A2147D0001157CA29039F8FDF8FCA314F8A30000
963
 
5D01F913FCA2ECF07CA201FD137DA2017D5CECE03DA3017F133FA2ECC01FA2013F5CA2EC
964
 
800F6D486C5A2D397FB730>87 D<3A3FFF01FFF84801837F02C77FA202835B6C01015B3A
965
 
01FC007F806D91C7FC00005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F5B14FF6D
966
 
5BA26D5BA26D5BA26D90C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F8181EB7F
967
 
0081497F49800001143F49800003141F49800007140FD87FFEEB7FFFB590B5128080A25C
968
 
6C486D130029387DB730>I<D87FFF90381FFFC0B56C4813E0A46C496C13C0D803F89038
969
 
03F8006D1307A26C6C495AA26C6C5C151F6D5CEC803F013F5CECC07F011F91C7FCA29038
970
 
0FE0FEA214F101075BA2903803FBF8A201015B14FF6D5BA26E5AA36E5AB1903803FFF849
971
 
7F497FA26D5B6D5B2B387EB730>I<007FB5FCB61280A4150048C8FCB3B3B3A5B6FC1580
972
 
A46C140019476DBE30>91 D<127CA212FEA27EA26C7EA26C7EA26C7EA26C7EA26C7EA26C
973
 
7EA212017FA26C7EA26D7EA26D7EA26D7EA26D7EA26D7EA26D7EA2130180A26D7EA26E7E
974
 
A26E7EA26E7EA26E7EA26E7EA26E7EA2140181A26E7EA2ED7F80A2ED3FC0A2ED1FE0A2ED
975
 
0FF0A2ED07F8A21503A2ED01F0150025477BBE30>I<007FB5FCB61280A47EC7123FB3B3
976
 
B3A5007FB5FCB6FCA46C140019477DBE30>I<007FB612F0A2B712F8A36C15F0A225077B
977
 
7D30>95 D<EB3FFC48B57E4814E04880488048809038F00FFE9038E001FF806F7E6C4813
978
 
3F6C4880C8121FA491B5FC130F137F48B6FC12075A48EBC01F383FFC00EA7FE0138048C7
979
 
FC5AA46C143FA26C6C137F9038C001FF263FF80FEBFFC06CB712E0A2000714F76C14C3C6
980
 
020013C0D93FF090C7FC2B2A7CA830>97 D<EA3FFC487E12FFA2127F123F1200AAEC03FE
981
 
91381FFF80027F13E091B57E90B612FC82ECFE079138F001FF4A6C13804A137F4AEB3FC0
982
 
91C7121F4915E0160FA217F01607A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDA
983
 
F00313009138FC0FFE91B55A5E495CD97E7F13C0D93C1F90C7FC90380003FC2C3980B730
984
 
>I<ECFFE0010713FC011F7F017F7F90B612804815C048EB807F3907FC003F485A485A49
985
 
EB1F804848EB0F004990C7FC127F90C9FCA25A5AA87E7EA27F003FEC07C06DEB0FE06C7E
986
 
6D131F6C6C14C0D807FE133F9039FFC0FF806C90B5FCC615006D5B011F13F801075B0101
987
 
1380232A7AA830>I<913801FFE04A7F5CA28080EC0007AAEB03FE90381FFF874913E790
988
 
B6FC5A5A481303380FFC00D81FF0133F49131F485A150F4848130790C7FCA25AA25AA87E
989
 
6C140FA27F003F141F6D133F6C7E6D137F390FF801FF2607FE07EBFFC06CB712E06C16F0
990
 
6C14F76D01C713E0011F010313C0D907FCC8FC2C397DB730>I<49B4FC010713E0011F13
991
 
F8017F7F90B57E488048018113803A07FC007FC04848133FD81FE0EB1FE0150F484814F0
992
 
491307127F90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C7E
993
 
6C7E6D1307D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEBFE00010713F8
994
 
010013C0252A7CA830>I<EDFF80020713E0021F13F05C4A13F891B5FC491387903803FE
995
 
079138FC03F0903907F800C04A1300A8003FB612C04815E0B7FCA36C15C0260007F0C7FC
996
 
B3A9003FB512FE4880B71280A26C15006C5C25397DB830>I<D903FC13FF90261FFF8713
997
 
C04913DF90B712E05A5A2607FE07138F903AF801FE07C048486C6CC7FCA2497F001F8149
998
 
133FA56D137F000F92C7FC6D5BA26C6C485AEBFE0790B55A5D485C15C001DF5BD9C3FCC8
999
 
FC01C0C9FCA37F7F6CB512F015FF6C15C04815F0488148813A3FE0001FFE0180130148C8
1000
 
127F007E8100FE168048151FA56C153F007FED7F006D5C6C6C495A01F013076CB4EB7FFC
1001
 
6C90B55A6C5D000115C06C6C91C7FC011F13FC010113C02B3E7DA730>I<EA3FFC487E12
1002
 
FFA2127F123F1200AAEC01FE91380FFF80023F13E091B57E90B67EA29138FE07FCECF803
1003
 
9138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FCB500FE14FEA2
1004
 
6C01FC14FC6C496C13F82F3880B730>I<14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9
1005
 
381FFFF8487F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E6C15C023397AB830>
1006
 
I<EC01C0EC07F0A2EC0FF8A3EC07F0A2EC01C091C7FCA990B512F04814F8A47EEB0003B3
1007
 
B3A5EC07F0A2123C007EEB0FE0B4131FEC3FC0147F90B512806C14005C6C5B000F13F000
1008
 
0313C01D4E7CB830>I<EA7FF8487EA4127F1200AB0203B512804A14C017E0A217C06E14
1009
 
809139001FE0004B5A4B5A4BC7FC4A5A4A5AEC0FF84A5A4A5A4A5A4A5A01FD7F90B57E81
1010
 
14F7ECE3F8ECC1FCEC81FEEC00FF497F496D7E6F7E826F7E15076F7E6F7E3B7FFFF81FFF
1011
 
E0B56C4813F017F8A217F06C496C13E02D387FB730>I<387FFFF8B57EA47EEA0001B3B3
1012
 
A8007FB612F0B712F8A46C15F025387BB730>I<02FC137E3B7FC3FF01FF80D8FFEF0187
1013
 
7F90B500CF7F15DF92B57E6C010F13872607FE07EB03F801FC13FE9039F803FC01A201F0
1014
 
13F8A301E013F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C01071380322881A730
1015
 
>I<EC01FE3A3FFC0FFF80267FFE3F13E000FF90B57E90B67E7E6C9038FE07FCC6EBF803
1016
 
9138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FCB500FE14FEA2
1017
 
6C01FC14FC6C496C13F82F2880A730>I<49B4FC010F13E0013F13F8497F90B57E0003EC
1018
 
FF8014013A07FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8491303007F15FC90C7
1019
 
1201A300FEEC00FEA86C14016C15FCA26D1303003F15F86D13076D130F6C6CEB1FF06C6C
1020
 
EB3FE06D137F3A07FF01FFC06C90B512806C15006C6C13FC6D5B010F13E0010190C7FC27
1021
 
2A7CA830>I<EC03FE3A3FFC1FFF80267FFE7F13E000FF90B57E90B612FC6C816CEBFE07
1022
 
C69038F001FF4A6C13804A137F4AEB3FC091C7121F4915E0160FA217F01607A8160FA217
1023
 
E07F161F6EEB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E495C6E13C002
1024
 
1F90C7FCEC03FC91C9FCAD383FFFF8487FB57EA26C5B6C5B2C3C80A730>I<49B413F801
1025
 
0FEBC1FC013F13F14913FD48B6FC5A481381390FFC007F49131F4848130F491307485A49
1026
 
1303127F90C7FC15015A5AA77E7E15037FA26C6C1307150F6C6C131F6C6C133F01FC137F
1027
 
3907FF01FF6C90B5FC6C14FD6C14F9013F13F1010F13C1903803FE0190C7FCAD92B512F8
1028
 
4A14FCA46E14F82E3C7DA730>I<ED07F83A3FFF803FFF486DB51280B512C302CF14C06C
1029
 
13DF6C9038FFFC3FD8001F13E09238801F809238000F004A90C7FC5C5C5CA25CA45CAF00
1030
 
3FB512FC4880B7FCA26C5C6C5C2A287EA730>I<90381FFC1E48B5129F000714FF5A5A5A
1031
 
387FF007EB800100FEC7FC4880A46C143E007F91C7FC13E06CB4FC6C13FC6CEBFF806C14
1032
 
E0000114F86C6C7F01037F9038000FFF02001380007C147F00FEEC1FC0A2150F7EA27F15
1033
 
1F6DEB3F806D137F9039FC03FF0090B6FC5D5D00FC14F0D8F83F13C026780FFEC7FC222A
1034
 
79A830>I<EB0780497E131FA9003FB612E04815F0B7FCA36C15E026001FC0C7FCB216F8
1035
 
ED01FCA5ECE003010FEB07F814F09138FC1FF06DB512E06D14C016806D14009038007FFC
1036
 
EC1FF026337EB130>I<D83FFCEB3FFC486C497E00FF14FFA2007F147F003F143F000014
1037
 
00B3A41501A2150315076D130F903A7FC07FFFF891B612FC6D15FE7F6D4913FC6D9038F8
1038
 
7FF8010001C0C7FC2F2880A630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C49
1039
 
6C13803B01F80003F000A26D130700005DA26D130F017E5CA2017F131F6D5CA2EC803F01
1040
 
1F91C7FCA26E5A010F137EA2ECE0FE01075BA214F101035BA3903801FBF0A314FF6D5BA3
1041
 
6E5A6E5A2B277EA630>I<3B3FFFC01FFFE0486D4813F0B515F8A26C16F06C496C13E0D8
1042
 
07E0C7EA3F00A26D5C0003157EA56D14FE00015DEC0F80EC1FC0EC3FE0A33A00FC7FF1F8
1043
 
A2147DA2ECFDF9017C5C14F8A3017E13FBA290393FF07FE0A3ECE03FA2011F5C90390F80
1044
 
0F802D277FA630>I<3A3FFF81FFFC4801C37FB580A26C5D6C01815BC648C66CC7FC137F
1045
 
EC80FE90383F81FC90381FC3F8EB0FE3ECE7F06DB45A6D5B7F6D5B92C8FC147E147F5C49
1046
 
7F81903803F7E0EB07E790380FE3F0ECC1F890381F81FC90383F80FE90387F007E017E13
1047
 
7F01FE6D7E48486D7E267FFF80B5FCB500C1148014E3A214C16C0180140029277DA630>
1048
 
I<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01FC0003F000A2000014
1049
 
076D5C137E150F017F5C7F151FD91F805BA214C0010F49C7FCA214E00107137EA2EB03F0
1050
 
157C15FCEB01F85DA2EB00F9ECFDF0147D147FA26E5AA36E5AA35DA2143F92C8FCA25C14
1051
 
7EA2000F13FE486C5AEA3FC1EBC3F81387EB8FF0EBFFE06C5B5C6C90C9FC6C5AEA01F02B
1052
 
3C7EA630>I<001FB612FC4815FE5AA316FC90C7EA0FF8ED1FF0ED3FE0ED7FC0EDFF8000
1053
 
3E491300C7485A4A5A4A5A4A5A4A5A4A5A4A5A4990C7FC495A495A495A495A495A495A49
1054
 
48133E4890C7127F485A485A485A485A485A48B7FCB8FCA46C15FE28277DA630>I<ED3F
1055
 
F0913803FFF8140F5C147F16F09138FFF00092C7FC495A5CB3A21303495A133F383FFFF0
1056
 
B55A5C91C8FC14C080003F7F38003FF813076D7E1301B3A2806D7E15F091387FFFF016F8
1057
 
141F8014039138003FF025477BBE30>I<127CA212FEB3B3B3AD127CA207476CBE30>I<EA
1058
 
7FE0EAFFFE6D7E8014F07EC66C7E13076D7E1301B3A2806D7E15E091387FFFE06E13F880
1059
 
1407141F5C4A13E09138FFE00092C7FC495A5CB3A21303495A137F387FFFF0B5FC14C05C
1060
 
49C8FCEA7FE025477BBE30>I<017C133848B4137C48EB80FE4813C14813C348EBEFFC39
1061
 
7FEFFFF0D8FF8713E0010713C0486C1380D87C0113003838007C1F0C78B730>I
 
913
3F13FE48B6FCB7128016C09039FE007FE001F8EB1FF001E0130F49EB07F849EB03FCA290
 
914
C7120116FE1500A37EA46C7E15016D14FC121F6D1303000FEC07F86D130F6C6CEB1FF06D
 
915
EB3FE03A03FF81FFC06C90B512806C15006D5B011F13F8010713E001011380273A7CB830
 
916
>I<127CB712FC16FEA416FC48C7EA0FF816F0ED1FE0007CEC3FC0C8EA7F80EDFF00A24A
 
917
5A4A5A5D14075D140F5D4A5AA24A5AA24AC7FCA25C5C13015CA213035CA213075CA4495A
 
918
A6131F5CA96D5A6DC8FC273A7CB830>I<49B4FC011F13F0017F13FC90B57E0003ECFF80
 
919
4815C048010113E03A1FF8003FF049131FD83FC0EB07F8A24848EB03FC90C71201A56D13
 
920
03003F15F86D13076C6CEB0FF06C6CEB1FE0D807FCEB7FC03A03FF83FF806C90B512006C
 
921
6C13FC011F13F0497F90B512FE48802607FE0013C0D80FF8EB3FE0D81FE0EB0FF04848EB
 
922
07F8491303007F15FC90C712014815FE481400A66C14016C15FC6D1303003F15F86D1307
 
923
D81FF0EB1FF06D133F3A0FFF01FFE06C90B512C06C1580C6ECFE006D5B011F13F0010190
 
924
C7FC273A7CB830>I<49B4FC010F13E0013F13F890B57E4880488048010113803A0FFC00
 
925
7FC0D81FF0EB3FE04848131F49EB0FF048481307A290C7EA03F85A4815FC1501A416FEA3
 
926
7E7E6D1303A26C6C13076C6C130F6D133FD80FFC13FF6CB6FC7E6C14FE6C14F9013FEBE1
 
927
FC010F138190380060011400ED03F8A2150716F0150F000F15E0486C131F486CEB3FC015
 
928
7FEDFF804A1300EC07FE391FF01FFC90B55A6C5C6C5C6C1480C649C7FCEB3FF0273A7CB8
 
929
30>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7F
 
930
E0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>I<EA03C0EA0FF0EA1FF8A2EA3FFC
 
931
A4EA1FF8A2EA0FF0EA03C0C7FCAFEA03C0EA0FF0121F13F8123F13FCA3121FA2120F1203
 
932
1200120113F8120313F01207EA1FE0123FEA7FC0EAFF80EA7F00127E12380E3470A630>
 
933
I<16F01503ED07F8151F157FEDFFF014034A13C0021F138091383FFE00ECFFF8495B0107
 
934
13C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7F
 
935
F87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91
 
936
381FFF80020713C06E13F01400ED7FF8151F1507ED03F01500252F7BB230>I<007FB7FC
 
937
A2B81280A36C16006C5DCBFCA7003FB612FE4881B81280A36C1600A229157DA530>I<12
 
938
78127EB4FC13C07FEA7FF813FEEA1FFF6C13C000037F6C13F86C6C7EEB1FFF6D7F010313
 
939
E06D7F9038007FFC6E7E91380FFF806E13C0020113F080ED3FF8151F153FEDFFF05C0207
 
940
13C04A138091383FFE004A5A903801FFF0495B010F13804990C7FCEB7FFC48485A4813E0
 
941
000F5B4890C8FCEA7FFE13F8EAFFE05B90C9FC127E1278252F7BB230>I<EC1FE0ECFFF8
 
942
010313FE010F7F4914804914C090397FF03FE09038FF800F4890380007F0D803FC13033A
 
943
07F801FBF89038F007FF380FE01F4A13FCEA1FC0495A003FEBFF0F903800FE07903901FC
 
944
03FE007FEBF801EA7E03ECF000A2EAFE0700FC49137EAA00FE6D13FED87E0314FCA2ECF8
 
945
01D87F0114F8003FEBFC03903900FE07F0903880FF0F001F90387FFFE06D6C13C0EA0FE0
 
946
6E13803A07F007FE009038F801F86C6CC7127C6CB414FE6CEB800390387FF01F6DB512FC
 
947
6D14F86D14E0010314C00100EBFE00EC1FF0273A7CB830>64 D<147F4A7EA2497FA4497F
 
948
14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F80FEA590387F007FA449804913
 
949
3F90B6FCA34881A39038FC001F00038149130FA4000781491307A2D87FFFEB7FFFB56CB5
 
950
1280A46C496C130029397DB830>I<007FB512F0B612FE6F7E82826C813A03F8001FF815
 
951
076F7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E08290
 
952
39F8000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6FC
 
953
B75A5E16C05E6C02FCC7FC29387EB730>I<91387F803C903903FFF03E49EBFC7E011F13
 
954
FE49EBFFFE5B9038FFE07F48EB801F3903FE000F484813075B48481303A2484813015B12
 
955
3F491300A2127F90C8FC167C16005A5AAC7E7EA2167C6D14FE123FA27F121F6D13016C6C
 
956
14FCA26C6CEB03F86D13076C6CEB0FF03901FF801F6C9038E07FE06DB512C06D14806D14
 
957
00010713FC6D13F09038007FC0273A7CB830>I<003FB512E04814FCB67E6F7E6C816C81
 
958
3A03F8007FF0ED1FF8150F6F7E6F7E15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC16
 
959
1F17C0A3163F1780A2167F17005E4B5A15034B5A150F4B5AED7FF0003FB65A485DB75A93
 
960
C7FC6C14FC6C14E02B387FB730>I<007FB7FCB81280A47ED803F8C7123FA8EE1F0093C7
 
961
FCA4157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA46C
 
962
16C02B387EB730>I<003FB712804816C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FCA5
 
963
153E157FA490B6FCA69038FC007FA4153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A387E
 
964
B730>I<02FF13F00103EBC0F8010F13F1013F13FD4913FF90B6FC4813C1EC007F484813
 
965
3F4848131F49130F485A491307121F5B123F491303A2127F90C7FC6F5A92C8FC5A5AA892
 
966
B5FC4A14805CA26C7F6C6D1400ED03F8A27F003F1407A27F121F6D130F120F7F6C6C131F
 
967
A2D803FE133F6C6C137FECC1FF6C90B5FC7F6D13FB010F13F30103EBC1F0010090C8FC29
 
968
3A7DB830>I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E0D803
 
969
F8C7EAFE00B290B6FCA601F8C7FCB3A23B3FFF800FFFE0486D4813F0B56C4813F8A26C49
 
970
6C13F06C496C13E02D387FB730>I<007FB6FCB71280A46C1500260007F0C7FCB3B3A800
 
971
7FB6FCB71280A46C1500213879B730>I<49B512F04914F85BA27F6D14F090C7EAFE00B3
 
972
B3123C127EB4FCA24A5A1403EB8007397FF01FF86CB55A5D6C5C00075C000149C7FC3800
 
973
3FF025397AB730>I<D83FFF90380FFF80486D4813C0B56C5AA26C497E6C496C1380D803
 
974
F0903803F8004B5A4B5A151F4B5A5E4BC7FC15FE14014A5A5D4A5A4A5A141F5D4A5A4AC8
 
975
FC5C13F18101F37F13F790B57E14EFECC7F01483EC03F8140101FE7F496C7E5B157F497F
 
976
82151F82150F826F7EA26F7E1501821500D83FFF903803FFC0486D4813E0B56C5AA26C49
 
977
7E6C496C13C02B387FB730>I<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F80
 
978
EE1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730>I<D83FF8ECFFE0486C4913F0486C
 
979
4913F8A2007F16F06C6C4913E00007160001EF14BFEC800FA39039E7C01F3FA4ECE03F01
 
980
E3133EA2ECF07EA201E1137CA2ECF8FCA201E013F8A214FDEC7DF0A3147FEC3FE0A3EC1F
 
981
C0A2EC070091C7FCADD83FFC903801FFE0486C4913F0B54913F8A26C486D13F06C486D13
 
982
E02D387FB730>I<D83FFC90381FFF80486C4913C0B54913E0A26C6D6C13C06C6E138000
 
983
03913801F800EBF7C0A3EBF3E0A314F013F1A214F8A213F014FCA2147C147EA2143E143F
 
984
A2141FA21581A2140F15C1A2140715E1A2140315F1A21401A215F91400A3157DA3153FEA
 
985
3FFF481380B5EAC01FA26CEB800F6C496C5A2B387EB730>I<90383FFFE048B512FC0007
 
986
14FF4815804815C04815E0EBF80001E0133FD87F80EB0FF0A290C71207A44815F8481403
 
987
B3A96C1407A26C15F0A36D130FA26D131F6C6CEB3FE001F813FF90B6FC6C15C06C15806C
 
988
1500000114FCD8003F13E0253A7BB830>I<007FB512F0B612FE6F7E16E0826C813903F8
 
989
003FED0FFCED03FE15016F7EA2821780163FA6167F17005EA24B5A1503ED0FFCED3FF890
 
990
B6FC5E5E16804BC7FC15F001F8C9FCB0387FFFC0B57EA46C5B29387EB730>I<003FB57E
 
991
4814F0B612FC15FF6C816C812603F8017F9138003FF0151F6F7E15071503821501A51503
 
992
5E1507150F4B5A153F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507
 
993
A817F8EEF1FCA53A3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA
 
994
1F002E397FB730>82 D<90390FF803C0D97FFF13E048B512C74814F74814FF5A381FF80F
 
995
383FE001497E4848137F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA
 
996
1FFEEBFFF06C13FF6C14E0000114F86C80011F13FF01031480D9003F13C014019138007F
 
997
E0151FED0FF0A2ED07F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC0
 
998
01FF13FF91B51280160000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>I<003F
 
999
B712C04816E0B8FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC4980A46D91
 
1000
C7FC2B387EB730>I<3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3B1
 
1001
6D147F00011600A36C6C14FE6D13016D5CEC800390393FE00FF890391FF83FF06DB55A6D
 
1002
5C6D5C6D91C7FC9038007FFCEC1FF02F3980B730>I<D83FFC903801FFE0486C4913F000
 
1003
FF16F8A2007F16F06C486D13E0D81FC09038001FC0000F1680A76D143F00071600A70003
 
1004
90380F803E9039F01FC07EEC3FE0A3EC7FF0A2147D0001157CA29039F8FDF8FCA314F8A3
 
1005
00005D01F913FCA2ECF07CA201FD137DA2017D5CECE03DA3017F133FA2ECC01FA2013F5C
 
1006
A2EC800F6D486C5A2D397FB730>87 D<3A3FFF01FFF84801837F02C77FA202835B6C0101
 
1007
5B3A01FC007F806D91C7FC00005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F5B14
 
1008
FF6D5BA26D5BA26D5BA26D90C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F8181
 
1009
EB7F0081497F49800001143F49800003141F49800007140FD87FFEEB7FFFB590B5128080
 
1010
A25C6C486D130029387DB730>I<D87FFF90381FFFC0B56C4813E0A46C496C13C0D803F8
 
1011
903803F8006D1307A26C6C495AA26C6C5C151F6D5CEC803F013F5CECC07F011F91C7FCA2
 
1012
90380FE0FEA214F101075BA2903803FBF8A201015B14FF6D5BA26E5AA36E5AB1903803FF
 
1013
F8497F497FA26D5B6D5B2B387EB730>I<007FB5FCB61280A4150048C8FCB3B3B3A5B6FC
 
1014
1580A46C140019476DBE30>91 D<127CA212FEA27EA26C7EA26C7EA26C7EA26C7EA26C7E
 
1015
A26C7EA212017FA26C7EA26D7EA26D7EA26D7EA26D7EA26D7EA26D7EA2130180A26D7EA2
 
1016
6E7EA26E7EA26E7EA26E7EA26E7EA26E7EA2140181A26E7EA2ED7F80A2ED3FC0A2ED1FE0
 
1017
A2ED0FF0A2ED07F8A21503A2ED01F0150025477BBE30>I<007FB5FCB61280A47EC7123F
 
1018
B3B3B3A5007FB5FCB6FCA46C140019477DBE30>I<007FB612F0A2B712F8A36C15F0A225
 
1019
077B7D30>95 D<EB7FF80003B5FC4814C04880488048809038E01FFC9038C003FE14016E
 
1020
7E6C487F6CC77FC8123FA491B5FC130F137F48B6FC12075A48EB803F383FF800EA7FE013
 
1021
8048C7FC5AA4157F7E6C6C13FFEBC003263FF01FEBFF8090B712C07E6C14EF000314876C
 
1022
D9FE01138026003FE0C8FC2A2A7BA830>97 D<EA3FFC487E12FFA2127F123F1200AAEC03
 
1023
FE91381FFF80027F13E091B57E90B612FC82ECFE079138F001FF4A6C13804A137F4AEB3F
 
1024
C091C7121F17E049140FA217F01607A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FF
 
1025
DAF00313009138FC0FFE91B55A5E495CD97E7F13C0D93C1F90C7FC90380003FC2C3980B7
 
1026
30>I<ECFFE0010713FC011F7F017F7F90B612804815C048EB807F3907FC003F485A485A
 
1027
49EB1F804848EB0F004990C7FC127F90C9FCA25A5AA87E7EA27F003FEC07C06DEB0FE06C
 
1028
7E6D131F6C6C14C0D807FE133F9039FFC0FF806C90B5FCC615006D5B011F13F801075B01
 
1029
011380232A7AA830>I<913801FFE04A7F5CA28080EC0007AAEB03FE90381FFF874913E7
 
1030
90B6FC5A5A481303380FFC00D81FF0133F49131F485A150F4848130790C7FCA25AA25AA8
 
1031
7E6C140FA27F003F141F6D133F6C7E6D137F390FF801FF2607FE07EBFFC06CB712E06C16
 
1032
F06C14F76D01C713E0011F010313C0D907FCC8FC2C397DB730>I<49B4FC010713E0011F
 
1033
13F8017F7F90B57E488048018113803A07FC007FC04848133FD81FE0EB1FE0150F484814
 
1034
F0491307127F90C7FCED03F85A5AB7FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C
 
1035
7E6C7E6D1307D807FEEB1FF03A03FFC07FE06C90B5FC6C15C0013F14806DEBFE00010713
 
1036
F8010013C0252A7CA830>I<EDFF80020713E0021F13F05C4A13F891B5FC491387903803
 
1037
FE079138FC03F0903907F800C04A1300A8003FB612C04815E0B7FCA36C15C0260007F0C7
 
1038
FCB3A9003FB512FE4880B71280A26C15006C5C25397DB830>I<D903FC13FF90261FFF87
 
1039
13C04913DF90B712E05A5A2607FE07138F903AF801FE07C048486C6CC7FCA2497F001F81
 
1040
49133FA56D137F000F92C7FC6D5BA26C6C485AEBFE0790B55A5D485C15C001DF5BD9C3FC
 
1041
C8FC01C0C9FCA37F7F6CB512F015FF6C15C04815F0488148813A3FE0001FFE0180130148
 
1042
C8127F007E8100FE168048151FA56C153F007FED7F006D5C6C6C495A01F013076CB4EB7F
 
1043
FC6C90B55A6C5D000115C06C6C91C7FC011F13FC010113C02B3E7DA730>I<EA3FFC487E
 
1044
12FFA2127F123F1200AAEC01FE91380FFF80023F13E091B57E90B67EA29138FE07FCECF8
 
1045
039138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FCB500FE14FE
 
1046
A26C01FC14FC6C496C13F82F3880B730>I<14E0EB03F8A2497EA36D5AA2EB00E091C8FC
 
1047
A9381FFFF8487F5AA27E7EEA0001B3A9003FB612C04815E0B7FCA27E6C15C023397AB830
 
1048
>I<EC01C0EC07F0A2EC0FF8A3EC07F0A2EC01C091C7FCA990B512F04814F8A47EEB0003
 
1049
B3B3A5EC07F0A2123C007EEB0FE0B4131FEC3FC0147F90B512806C14005C6C5B000F13F0
 
1050
000313C01D4E7CB830>I<EA7FF8487EA4127F1200AB0203B512804A14C017E0A217C06E
 
1051
14809139001FE0004B5A4B5A4BC7FC4A5A4A5AEC0FF84A5A4A5A4A5A4A5A01FD7F90B57E
 
1052
8114F7ECE3F8ECC1FCEC81FEEC00FF497F496D7E6F7E826F7E15076F7E6F7E3B7FFFF81F
 
1053
FFE0B56C4813F017F8A217F06C496C13E02D387FB730>I<387FFFF8B57EA47EEA0001B3
 
1054
B3A8007FB612F0B712F8A46C15F025387BB730>I<02FC137E3B7FC3FF01FF80D8FFEF01
 
1055
877F90B500CF7F15DF92B57E6C010F13872607FE07EB03F801FC13FE9039F803FC01A201
 
1056
F013F8A301E013F0B3A23C7FFE0FFF07FF80B548018F13C0A46C486C01071380322881A7
 
1057
30>I<EC01FE3A3FFC0FFF80267FFE3F13E000FF90B57E90B67E7E6C9038FE07FCC6EBF8
 
1058
039138E001FE14C0EC8000A291C7FCA25BB3A23B3FFFF81FFFF8486D4813FCB500FE14FE
 
1059
A26C01FC14FC6C496C13F82F2880A730>I<49B4FC010F13E0013F13F8497F90B57E0003
 
1060
ECFF8014013A07FC007FC04848EB3FE0D81FE0EB0FF0A24848EB07F8491303007F15FC90
 
1061
C71201A300FEEC00FEA86C14016C15FCA26D1303003F15F86D13076D130F6C6CEB1FF06C
 
1062
6CEB3FE06D137F3A07FF01FFC06C90B512806C15006C6C13FC6D5B010F13E0010190C7FC
 
1063
272A7CA830>I<EC03FE3A3FFC1FFF80267FFE7F13E000FF90B57E90B612FC6C816CEBFE
 
1064
07C69038F001FF4A6C13804A137F4AEB3FC091C7121F17E049140FA217F01607A8160FA2
 
1065
17E07F161F6EEB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E495C6E13C0
 
1066
021F90C7FCEC03FC91C9FCAD383FFFF8487FB57EA26C5B6C5B2C3C80A730>I<49B413F8
 
1067
010FEBC1FC013F13F14913FD48B6FC5A481381390FFC007F49131F4848130F491307485A
 
1068
491303127F90C7FC15015A5AA77E7E15037FA26C6C1307150F6C6C131F6C6C133F01FC13
 
1069
7F3907FF01FF6C90B5FC6C14FD6C14F9013F13F1010F13C1903803FE0190C7FCAD92B512
 
1070
F84A14FCA46E14F82E3C7DA730>I<ED07F83A3FFF803FFF486DB51280B512C302CF14C0
 
1071
6C13DF6C9038FFFC3FD8001F13E09238801F809238000F004A90C7FC5C5C5CA25CA45CAF
 
1072
003FB512FC4880B7FCA26C5C6C5C2A287EA730>I<90381FFC1E48B5129F000714FF5A5A
 
1073
5A387FF007EB800100FEC7FC4880A46C143E007F91C7FC13E06CB4FC6C13FC6CEBFF806C
 
1074
14E0000114F86C6C7F01037F9038000FFF02001380007C147F00FEEC1FC0A2150F7EA27F
 
1075
151F6DEB3F806D137F9039FC03FF0090B6FC5D5D00FC14F0D8F83F13C026780FFEC7FC22
 
1076
2A79A830>I<EB0780497E131FA9003FB612E04815F0B7FCA36C15E026001FC0C7FCB216
 
1077
F8ED01FCA5ECE003010FEB07F814F09138FC1FF06DB512E06D14C016806D14009038007F
 
1078
FCEC1FF026337EB130>I<D83FFCEB3FFC486C497E00FF14FFA2007F147F003F143F0000
 
1079
1400B3A41501A2150315076D130F903A7FC07FFFF891B612FC6D15FE7F6D4913FC6D9038
 
1080
F87FF8010001C0C7FC2F2880A630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C
 
1081
496C13803B01F80003F000A26D130700005DA26D130F017E5CA2017F131F6D5CA2EC803F
 
1082
011F91C7FCA26E5A010F137EA2ECE0FE01075BA214F101035BA3903801FBF0A314FF6D5B
 
1083
A36E5A6E5A2B277EA630>I<3B3FFFC01FFFE0486D4813F0B515F8A26C16F06C496C13E0
 
1084
D807E0C7EA3F00A26D5C0003157EA56D14FE00015DEC0F80EC1FC0EC3FE0A33A00FC7FF1
 
1085
F8A2147DA2ECFDF9017C5C14F8A3017E13FBA290393FF07FE0A3ECE03FA2011F5C90390F
 
1086
800F802D277FA630>I<3A3FFF81FFFC4801C37FB580A26C5D6C01815BC648C66CC7FC13
 
1087
7FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F06DB45A6D5B7F6D5B92C8FC147E147F5C
 
1088
497F81903803F7E0EB07E790380FE3F0ECC1F890381F81FC90383F80FE90387F007E017E
 
1089
137F01FE6D7E48486D7E267FFF80B5FCB500C1148014E3A214C16C0180140029277DA630
 
1090
>I<3B3FFFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01FC0003F000A20000
 
1091
14076D5C137E150F017F5C7F151FD91F805BA214C0010F49C7FCA214E00107137EA2EB03
 
1092
F0157C15FCEB01F85DA2EB00F9ECFDF0147D147FA26E5AA36E5AA35DA2143F92C8FCA25C
 
1093
147EA2000F13FE486C5AEA3FC1EBC3F81387EB8FF0EBFFE06C5B5C6C90C9FC6C5AEA01F0
 
1094
2B3C7EA630>I<001FB612FC4815FE5AA316FC90C7EA0FF8ED1FF0ED3FE0ED7FC0EDFF80
 
1095
003E491300C7485A4A5A4A5A4A5A4A5A4A5A4A5A4990C7FC495A495A495A495A495A495A
 
1096
4948133E4890C7127F485A485A485A485A485A48B7FCB8FCA46C15FE28277DA630>I<ED
 
1097
3FF0913803FFF8140F5C147F16F09138FFF00092C7FC495A5CB3A21303495A133F383FFF
 
1098
F0B55A5C91C8FC14C080003F7F38003FF813076D7E1301B3A2806D7E15F091387FFFF016
 
1099
F8141F8014039138003FF025477BBE30>I<127CA212FEB3B3B3AD127CA207476CBE30>I<
 
1100
EA7FE0EAFFFE6D7E8014F07EC66C7E13076D7E1301B3A2806D7E15E091387FFFE06E13F8
 
1101
801407141F5C4A13E09138FFE00092C7FC495A5CB3A21303495A137F387FFFF0B5FC14C0
 
1102
5C49C8FCEA7FE025477BBE30>I<017C133848B4137C48EB80FE4813C14813C348EBEFFC
 
1103
397FEFFFF0D8FF8713E0010713C0486C1380D87C0113003838007C1F0C78B730>I
1062
1104
E
1063
1105
%EndDVIPSBitmapFont
1064
 
%DVIPSBitmapFont: Fp cmsl10 10.95 45
1065
 
/Fp 45 122 df<9339FFC003F8030F9038F01FFE923A3FC07C7E0F923BFE001FF81F80DA
 
1106
%DVIPSBitmapFont: Fq cmsl10 10.95 45
 
1107
/Fq 45 122 df<9339FFC003F8030F9038F01FFE923A3FC07C7E0F923BFE001FF81F80DA
1066
1108
03F890383FF07F4A48D9FFE013C0EC1FE04A4848EBC0FF03804A1380DA7F00157F4A9238
1067
1109
003E004A6D91C7FC8301015D4A5CA4160113034A5CA416030007B812FCA3290007F00003
1068
1110
F8C8FCA21607130F4A5CA4160F131F4A5CA4161F133F4A5CA4163F137F91C75BA4167F5B
1117
1159
D<013FB512FEA25E9026007FF8C8FCEC3FE0A25DA5147F5DA514FF92C9FCA55B5CA51303
1118
1160
5CA513075CA21838A21870130F5CA218E0A3011F15014A15C01703A21707EF0F80013F15
1119
1161
1F4A143F177FEFFF00017F140301FF143FB9FC5FA2353E7DBD39>76
1120
 
D<90263FFFF0933807FFFE5013FC629026007FF8EFFC00023F4D5AA2023BEF77F0A2DA39
1121
 
FC16E7A2F101CF0279EE038FDA70FE5FF1070FA2190E1A1FDAF07F151C02E06019381970
1122
 
6F7EF1E03F130102C0DB01C05BA26F6CEB0380A2953807007F0103160E4A6C6C93C7FC60
1123
 
A2606201076D6C5B02005F60A26F6C485A94380380015B010EDB07005BA2923801FC0EA2
1124
 
4D1303131E011C6D6C485C5FA25F1907013CEC7FC0013860013C5D137C01FE6EC7120F26
1125
 
07FF80013E4A7EB500FC031FB512F8043C5E4A131C573E7DBD53>I<90263FFFE0023FB5
1126
 
FC6F16FEA29026003FF8020313C0021F030013004A6C157C023B163C6F15381439810238
1127
 
167802787FDA707F157082153F82031F15F002F07FDAE00F5D8215078203031401010180
1128
 
DAC0015D82811780047F1303010315C04A013F5C17E0161F17F0040F1307010715F891C7
1129
 
000791C7FC17FC160317FE04015B4915FF010E6E130E188E177F18CEEF3FDE011E16FE01
1130
 
1C6F5AA2170FA21707133C01386F5A133C017C150113FE2607FF801400B512FC18705C48
1131
 
3E7DBD44>I<013FB612FEEFFFE018F8903B007FF0000FFC6E48EB01FF7113804BEC7FC0
1132
 
183F19E0F01FF0A2147F5D19F8A402FFED3FF092C8FCA219E0A2F07FC05B4AEDFF801900
1133
 
4D5A4D5AEF0FF80103ED3FE04A903801FF8091B648C7FC17F002FCCAFCA213075CA5130F
1134
 
5CA5131F5CA5133F5CA3137F497EB612E0A25D3D3E7DBD3E>80 D<013FB612F017FF18E0
1135
 
903B007FF0003FF86E48EB07FCEF01FE4B6D7EF07F8019C0183F19E0147F4B15F0A502FF
1136
 
ED7FE092C8FCA219C0F0FF80A2494B13004A5D4D5AEF0FF04D5AEF7F800103DA07FEC7FC
1137
 
91B612F017809139FC0007E0EE03F8EE00FC0107814A147F717EA284A2130F5CA484011F
1138
 
157F5CA41902013F17075CA2F0F00F017F170E496C143FB600E0011F131C94380FF83C4B
1139
 
01071378CA3801FFE09438003F8040407DBD43>82 D<9239FF8003800207EBF007021F90
1140
 
38FC0F0091387F00FE02FCEB1F1FD903F0EB07BF49486DB4FC49487F4A6D5A49C8FC4915
1141
 
7E133E137E173E49153CA57F1738A26D92C7FC808080EB7FFEECFFE06D13FEEDFFC06D14
1142
 
F06D14FC010380010080143F020380DA003F7F15031500707E163F161FA2160F121CA316
1143
 
07160F003C5EA35F003E151F94C7FC007E5D007F153E6D5C16FC01E0495AD87DF0495AD8
1144
 
FCFCEB0FC03AF87F803F8027F01FFFFEC8FCD8E00713F839C0007FC031427BBF33>I<00
1145
 
07B912F0A33C0FFE000FF8003F01F0160F01C04A13034848160190C7FC121EF000E04814
1146
 
1F5E1238A212781270153F5E5AA3C81600157F5EA515FF93C9FCA55C5DA514035DA51407
1147
 
5DA5140F5DA3141FEC7FFC0003B7FCA33C3D76BC42>I<EC7FC0903803FFF890380FC07E
1148
 
90383E003F496D7E01FF6D7E82A248140782A26C5A137890C7120FA25EA2EC03FF147F90
1149
 
3807FF1FEB1FE0D97F805B3801FE00EA03F8485A4848133F485A003F5D49EC81C048C7FC
1150
 
A2157F48ED03804814FFA2007F5B913903BF0700903880073F3A3FC00E1F8E260FE03C13
1151
 
FC3A03FFF00FF83A007FC003E02A2A7CA82D>97 D<EB3F80EA1FFFA3C6FC137FA291C9FC
1152
 
A55B5BA512015BA4EC07F80003EB3FFF9039F8F80FC09039FBE003E09039FF8001F891C7
1153
 
7E5B4848147E49147F5B821780A2120F5B17C0A3167F001F16805BA4EEFF00123F5B4B5A
1154
 
A24B5A5E007F4A5AA24B5A6D495A4BC7FCD87CE0137E39F87001F839F03C07E039E00FFF
1155
 
80260003FCC8FC2A4077BE33>I<EC1FF0ECFFFE903903F01F8090390FC003C0D93F0013
1156
 
E0017E130F49131F000115F04848EB3FE0485AA24848EB1FC0001FEC0F004990C7FC123F
1157
 
A2485AA412FF90C9FCA96CEC0380150716006C6C5B151E001F5C6C6C5B6C6C5B6C6C485A
1158
 
3901F80F8026007FFEC7FCEB0FF0242A7AA828>I<EE03F8ED01FFA3ED000F1607A217F0
1159
 
A4160FA217E0A4161FA217C0A491380FF03FECFFFC902603F81F138090390FC007BF9039
1160
 
1F8003FF90387E0001497F0001157F48481500485A120F5B001F5D485A5E5B127FA21501
1161
 
12FF90C75BA41503A25EA37E1507A26C4A5A7F001F141F6C6C133F6C6CEBFFF83B03F001
1162
 
EFFFC03900F80F8F90383FFE0FD90FF0EBE0002D407ABE33>I<EC3FE0903801FFF89038
1163
 
07E07E90380F801F90393F000F80017E14C049EB07E0485A12034848EB03F0485AA2121F
1164
 
5B123FA248481307A290B6FCA2D8FF80C8FC90C9FCA87EED01C015036C15806D1307001F
1165
 
EC0F006D131E000F5C6C6C5B6C6C485A3900FC07C0D93FFFC7FCEB07F8242A7BA828>I<
1166
 
ED07F0ED3FFCEDFC1E913803F03F4A48B4FC4A481380141FEC3F81DA7F0113008102FE13
1167
 
7C93C7FCA213015CA513035CA50007B512F8A3260007F0C8FCA3130F5CA5131F5CA5133F
1168
 
5CA5137F91C9FCA55B5BA4EA03FF007F13FEB5FCA229407DBF1C>I<177C913907F803FE
1169
 
91393FFE0F8F9139FC0F9C3F903901F007F8903907E003E0D90FC013F0011F903801F80C
1170
 
02801400133FD97F007FA315035B495CA3017E495A5E150F6D5C6D495A90263F803EC7FC
1171
 
ECC0FC903871FFF09038E07F8091C9FC485AA47FA27F90B512F8EDFF806C15E016F86D80
1172
 
48B6FC3A07E0000FFED80F801300003FC8127F003E815A00FC815AA25E163EA25E6C15FC
1173
 
007C4A5A6C4A5A6CEC0FC0D80FC0013FC7FC3903F801FCC6B512F0010F90C8FC303D7FA8
1174
 
2D>I<147FEB3FFFA313017FA25CA513015CA513035CA4ED07F80107EB1FFF9139F0781F
1175
 
C09138F1E00F9139F38007E0ECF70002FE14F0495A5CA25CA24A130F131F4A14E0A4161F
1176
 
133F4A14C0A4163F137F91C71380A4167F5B491500A300015D486C491380B5D8F87F13FC
1177
 
A32E3F7DBE33>I<1478EB01FE130314FFA25B14FE130314FCEB00F01400ACEB03F8EA01
1178
 
FF14F0A2EA001F130FA314E0A5131F14C0A5133F1480A5137F1400A55B5BA4EA03FF007F
1179
 
13F0A2B5FC183E7DBD1A>I<ED0780ED1FE0153F16F0157FA216E0153F16C0ED0F0092C7
1180
 
FCACED7F80EC3FFF1600A2140180A35DA41401A25DA41403A25DA41407A25DA4140FA25D
1181
 
A4141FA25DA4143F5DA4121E267F807FC7FCA200FF137E14FE5CEB01F8495A387C07E038
1182
 
3C0FC0D80FFFC8FCEA03F8245187BD1C>I<147FEB3FFFA313017FA25CA513015CA51303
1183
 
5CA501070103B5FC02F014FEA26F13F06F1380EEFE00010F14F84A485AED03C04B5A031F
1184
 
C7FC153E011F13784A5AECC3E0ECC7F0ECCFF814FF497F14F9ECE1FE14C04A7E4A7E4980
1185
 
017E133F82151F82150F01FE8049130782A2000181486C49B4FCB5D8F03F13F04B13E0A2
1186
 
303F7EBE30>I<143FEB1FFF5BA213017FA214FEA5130114FCA5130314F8A5130714F0A5
1187
 
130F14E0A5131F14C0A5133F1480A5137F1400A55B5BA4EA03FF007F13F8A2B5FC183F7D
1188
 
BE1A>I<902707F007F8EB03FCD803FFD91FFF90380FFF80913CE0781FC03C0FE09126E1
1189
 
E00FEBF0073E001FE38007E1C003F090260FE700EBE38002EEDAF70013F802FC14FE02D8
1190
 
5C14F84A5CA24A5C011F020F14074A4A14F0A5013F021F140F4A4A14E0A5017F023F141F
1191
 
91C74914C0A549027F143F4992C71380A300014B147F486C496DEBFFC0B5D8F87FD9FC3F
1192
 
13FEA347287DA74C>I<903907F007F8D803FFEB1FFF9139E0781FC09138E1E00F3B001F
1193
 
E38007E090380FE70002EE14F014FC14D814F85CA24A130F131F4A14E0A4161F133F4A14
1194
 
C0A4163F137F91C71380A4167F5B491500A300015D486C491380B5D8F87F13FCA32E287D
1195
 
A733>I<EC0FF0ECFFFE903903F01F8090390FC007C049C66C7E013E6D7E01FC6D7E4848
1196
 
8049147C0003157E485A000F157F5B121FA2485AA2007F1680A2170048C85AA54B5AA25E
1197
 
5A6C4A5A7E4B5A5E6C140F6C6C5C4B5A6C6C013EC7FC6C6C5B6C6C485A3900FC0FE09038
1198
 
3FFF80D90FF8C8FC292A7BA82D>I<91387F01FE903A7FFF0FFFC09139FE3E03F09238F8
1199
 
01F8903A01FFE000FE4B137F6D497F4990C713804A15C04A141FA218E0A20103150F5C18
1200
 
F0A3171F010716E05CA3173F18C0130F4A147F1880A2EFFF004C5A011F5D16034C5A6E49
1201
 
5AEE1FC06E495AD93FDC017EC7FC91388F01F8913883FFE0028090C8FC92C9FC137FA291
1202
 
CAFCA45BA25BA31201487EB512F8A3343A81A733>I<903907F01F80D803FFEB7FE09138
1203
 
E1E1F09138E387F839001FE707EB0FE614EE02FC13F002D813E09138F801804AC7FCA25C
1204
 
131FA25CA4133F5CA5137F91C8FCA55B5BA31201487EB512FEA325287EA724>114
1205
 
D<9138FF81C0010713E390381F807F90397C003F8049131F4848130F5B00031407A24848
1206
 
1400A27FA27F6D90C7FCEBFF8014FC6C13FF6C14C015F06C6C7F011F7F13079038007FFE
1207
 
1403140100381300157EA2123C153E157E007C147CA2007E147815F8007F495A4A5A486C
1208
 
485A26F9E01FC7FC38E0FFFC38C01FE0222A7DA824>I<EB0380A4130791C7FCA25BA25B
1209
 
A2133EA2137E13FE12011207001FB512C0B6FCA2D801FCC7FCA312035BA512075BA5120F
1210
 
5BA41407001F130E13C0A4141E141C1380A26D5AA2000F5B14F03807E1E03801FF80D800
1211
 
7EC7FC1A3978B723>I<01FE147F00FFEC7FFF4914FEA20007140300031401A34914FCA4
1212
 
150312074914F8A41507120F4914F0A4150F121F4914E0A2151FA3153F4914C0157F15FF
1213
 
EC01DF3A0FC003BFE09138073FFF3803F01E3801FFF826003FE01380282977A733>I<B5
1214
 
00C3B53803FFFCA204FE14F8290FFE003FE00013C0D807F86D48EB7F000003173E183C15
1215
 
0F18386D5E0001141F705B153F4D5A15776D4B5A0000ECE7F04DC7FCEC01C3170E9038FF
1216
 
0383017F5D91380703F85FEC0E01021E5CD93F9C14F002BC6D5A02B813FDDAF8005B4A13
1217
 
FF5F6D5A94C8FC5C4A137E167C6DC7FC1678010E14383E2878A642>119
1218
 
D<48B539C07FFFC0A33C000FFE003FF8006D48EB1FE0010315800101023EC7FC6E133C01
1219
 
005C027F5B6F5A91383F81C0EDC380DA1FC7C8FC15EFEC0FFE6E5A5D140381A24A7E140F
1220
 
EC1E7F023C7FEC383F02707FECE01F010180903803C00F49486C7ED90F007F491303017E
1221
 
80D801FE80D807FF497EB5D8803F13F8A332277FA630>I<90B539E007FFF05E18E09027
1222
 
07FE000313006D48EB01FC705A5F01014A5A5F16036E5C0100140794C7FC160E805E805E
1223
 
1678ED8070023F13F05EED81C015C191381FC38015C793C8FC15EF15EEEC0FFCA25DA26E
1224
 
5AA25DA26E5A5DA24AC9FC5C140E141E141C5C121C003F5B5A485B495A130300FE5B4848
1225
 
CAFCEA701EEA783CEA3FF0EA0FC0343A80A630>I E
 
1162
D<90263FFFF093381FFFF85013F0629026007FF8EFF000023F4D5AA2023B933801DFC0A2
 
1163
DA39FCED039FA2F1073F14790271040E5BEC70FE191C19381A7F02F01670DAE07F94C7FC
 
1164
19E0A2F001C06201016D6C495A02C05FF00700A2180E6F6C14010103161C028003385BA2
 
1165
18706F7EF0E00313070200DA01C05BA2923907F00380A294380700075B010E902603F80E
 
1166
5C5FA25F190F011E6D6C5A011C605FA2EEFDC0DB00FF141F013C5D013860013C92C7FC01
 
1167
7C5C01FE027E143F2607FF80017C4A7EB500FC037FB512E004785E4A1338553E7CBD53>
 
1168
I<90263FFFE0023FB5FC6F16FEA29026003FF8020313C0021F030013004A6C157C023B16
 
1169
3C6F15381439810238167802787FDA707F157082153F82031F15F002F07FDAE00F5D8215
 
1170
078203031401010180DAC0015D82811780047F1303010315C04A013F5C17E0161F17F004
 
1171
0F1307010715F891C7000791C7FC17FC160317FE04015B4915FF010E6E130E188E177F18
 
1172
CEEF3FDE011E16FE011C6F5AA2170FA21707133C01386F5A133C017C150113FE2607FF80
 
1173
1400B512FC18705C483E7DBD44>I<013FB612FEEFFFE018F8903B007FF0000FFC6E48EB
 
1174
01FF7113804BEC7FC0183F19E0F01FF0A2147F5D19F8A402FFED3FF092C8FCA219E0A2F0
 
1175
7FC05B4AEDFF8019004D5A4D5AEF0FF80103ED3FE04A903801FF8091B648C7FC17F002FC
 
1176
CAFCA213075CA5130F5CA5131F5CA5133F5CA3137F497EB612E0A25D3D3E7DBD3E>80
 
1177
D<013FB612F017FF18E0903B007FF0003FF86E48EB07FCEF01FE4B6D7EF07F8019C0183F
 
1178
19E0147F4B15F0A502FFED7FE092C8FCA219C0F0FF80A2494B13004A5D4D5AEF0FF04D5A
 
1179
EF7F800103DA07FEC7FC91B612F017809139FC0007E0EE03F8EE00FC0107814A147F717E
 
1180
A284A2130F5CA484011F157F5CA41902013F17075CA2F0F00F017F170E496C143FB600E0
 
1181
011F131C94380FF83C4B01071378CA3801FFE09438003F8040407DBD43>82
 
1182
D<9238FF80070207EBE00F021FEBF81E91387F00FE02FCEB1F3ED903F0EB0FFE49481307
 
1183
494813034AEB01FC49C7FC491400133E137E177C491578A57F1770A26D1500808080EB7F
 
1184
FEECFFE06D13FEEDFFC06D14F06D14FC010380010080143F02031480DA003F13C0150315
 
1185
00EE7FE0163F161FA2160F121CA31607160F003C16C0A31780003E151F1700007E5D007F
 
1186
153E6D5C16FC01E0495AD87DF0495AD8FCFCEB0FC03AF87F803F8027F01FFFFEC7FCD8E0
 
1187
0713F839C0007FC030427BBF33>I<0007B912F0A33C0FFE000FF8003F01F0160F01C04A
 
1188
13034848160190C7FC121EF000E048141F5E1238A212781270153F5E5AA3C81600157F5E
 
1189
A515FF93C9FCA55C5DA514035DA514075DA5140F5DA3141FEC7FFC0003B7FCA33C3D76BC
 
1190
42>I<EC7FC0903803FFF890380FC07E90383E003F496D7E01FF6D7E82A248140782A26C
 
1191
5A137890C7120FA25EA2EC03FF147F903807FF1FEB1FE0D97F805B3801FE00EA03F8485A
 
1192
4848133F485A003F5D49EC81C048C7FCA2157F48ED03804814FFA2007F5B913903BF0700
 
1193
903880073F3A3FC00E1F8E260FE03C13FC3A03FFF00FF83A007FC003E02A2A7CA82D>97
 
1194
D<EB3F80EA1FFFA3C6FC137FA291C9FCA55B5BA512015BA4EC07F80003EB3FFF9039F8F8
 
1195
0FC09039FBE003E09039FF8001F891C77E5B4848147E49147F5B821780A2120F5B17C0A3
 
1196
167F001F16805BA4EEFF00123F5B4B5AA24B5A5E007F4A5AA24B5A6D495A4BC7FCD87CE0
 
1197
137E39F87001F839F03C07E039E00FFF80260003FCC8FC2A4077BE33>I<EC1FF0ECFFFE
 
1198
903903F01F8090390FC003C0D93F0013E0017E130F49131F000115F04848EB3FE0485AA2
 
1199
4848EB1FC0001FEC0F004990C7FC123FA2485AA412FF90C9FCA96CEC0380150716006C6C
 
1200
5B151E001F5C6C6C5B6C6C5B6C6C485A3901F80F8026007FFEC7FCEB0FF0242A7AA828>
 
1201
I<EE03F8ED01FFA3ED000F1607A217F0A4160FA217E0A4161FA217C0A491380FF03FECFF
 
1202
FC902603F81F138090390FC007BF90391F8003FF90387E0001497F0001157F4848150048
 
1203
5A120F5B001F5D485A5E5B127FA2150112FF90C75BA41503A25EA37E1507A26C4A5A7F00
 
1204
1F141F6C6C133F6C6CEBFFF83B03F001EFFFC03900F80F8F90383FFE0FD90FF0EBE0002D
 
1205
407ABE33>I<EC3FE0903801FFF8903807E07E90380F801F90393F000F80017E14C049EB
 
1206
07E0485A12034848EB03F0485AA2121F5B123FA248481307A290B6FCA2D8FF80C8FC90C9
 
1207
FCA87EED01C015036C15806D1307001FEC0F006D131E000F5C6C6C5B6C6C485A3900FC07
 
1208
C0D93FFFC7FCEB07F8242A7BA828>I<ED07F0ED3FFCEDFC1E913803F03F4A48B4FC4A48
 
1209
1380141FEC3F81DA7F0113008102FE137C93C7FCA213015CA513035CA50007B512F8A326
 
1210
0007F0C8FCA3130F5CA5131F5CA5133F5CA5137F91C9FCA55B5BA4EA03FF007F13FEB5FC
 
1211
A229407DBF1C>I<177C913907F803FE91393FFE0F8F9139FC0F9C3F903901F007F89039
 
1212
07E003E0D90FC013F0011F903801F80C02801400133FD97F007FA315035B495CA3017E49
 
1213
5A5E150F6D5C6D495A90263F803EC7FCECC0FC903871FFF09038E07F8091C9FC485AA47F
 
1214
A27F90B512F8EDFF806C15E016F86D8048B6FC3A07E0000FFED80F801300003FC8127F00
 
1215
3E815A00FC815AA25E163EA25E6C15FC007C4A5A6C4A5A6CEC0FC0D80FC0013FC7FC3903
 
1216
F801FCC6B512F0010F90C8FC303D7FA82D>I<147FEB3FFFA313017FA25CA513015CA513
 
1217
035CA4ED07F80107EB1FFF9139F0781FC09138F1E00F9139F38007E0ECF70002FE14F049
 
1218
5A5CA25CA24A130F131F4A14E0A4161F133F4A14C0A4163F137F91C71380A4167F5B4915
 
1219
00A300015D486C491380B5D8F87F13FCA32E3F7DBE33>I<1478EB01FE130314FFA25B14
 
1220
FE130314FCEB00F01400ACEB03F8EA01FF14F0A2EA001F130FA314E0A5131F14C0A5133F
 
1221
1480A5137F1400A55B5BA4EA03FF007F13F0A2B5FC183E7DBD1A>I<ED0780ED1FE0153F
 
1222
16F0157FA216E0153F16C0ED0F0092C7FCACED7F80EC3FFF1600A2140180A35DA41401A2
 
1223
5DA41403A25DA41407A25DA4140FA25DA4141FA25DA4143F5DA4121E267F807FC7FCA200
 
1224
FF137E14FE5CEB01F8495A387C07E0383C0FC0D80FFFC8FCEA03F8245187BD1C>I<147F
 
1225
EB3FFFA313017FA25CA513015CA513035CA501070103B5FC02F014FEA26F13F06F1380EE
 
1226
FE00010F14F84A485AED03C04B5A031FC7FC153E011F13784A5AECC3E0ECC7F0ECCFF814
 
1227
FF497F14F9ECE1FE14C04A7E4A7E4980017E133F82151F82150F01FE8049130782A20001
 
1228
81486C49B4FCB5D8F03F13F04B13E0A2303F7EBE30>I<143FEB1FFF5BA213017FA214FE
 
1229
A5130114FCA5130314F8A5130714F0A5130F14E0A5131F14C0A5133F1480A5137F1400A5
 
1230
5B5BA4EA03FF007F13F8A2B5FC183F7DBE1A>I<902707F007F8EB03FCD803FFD91FFF90
 
1231
380FFF80913CE0781FC03C0FE09126E1E00FEBF0073E001FE38007E1C003F090260FE700
 
1232
EBE38002EEDAF70013F802FC14FE02D85C14F84A5CA24A5C011F020F14074A4A14F0A501
 
1233
3F021F140F4A4A14E0A5017F023F141F91C74914C0A549027F143F4992C71380A300014B
 
1234
147F486C496DEBFFC0B5D8F87FD9FC3F13FEA347287DA74C>I<903907F007F8D803FFEB
 
1235
1FFF9139E0781FC09138E1E00F3B001FE38007E090380FE70002EE14F014FC14D814F85C
 
1236
A24A130F131F4A14E0A4161F133F4A14C0A4163F137F91C71380A4167F5B491500A30001
 
1237
5D486C491380B5D8F87F13FCA32E287DA733>I<EC0FF0ECFFFE903903F01F8090390FC0
 
1238
07C049C66C7E013E6D7E01FC6D7E48488049147C0003157E485A000F157F5B121FA2485A
 
1239
A2007F1680A2170048C85AA54B5AA25E5A6C4A5A7E4B5A5E6C140F6C6C5C4B5A6C6C013E
 
1240
C7FC6C6C5B6C6C485A3900FC0FE090383FFF80D90FF8C8FC292A7BA82D>I<91387F01FE
 
1241
903A7FFF0FFFC09139FE3E03F09238F801F8903A03FFE000FE6D49137F4B7F92C713804A
 
1242
15C04A141FA218E0A20103150F5C18F0A3171F010716E05CA3173F18C0130F4A147F1880
 
1243
A2EFFF004C5A011F5D16034C5A6E495AEE1FC06E495AD93FDC017EC7FC91388F01F89138
 
1244
83FFE0028090C8FC92C9FC137FA291CAFCA45BA25BA31201487EB512F8A3343A81A733>
 
1245
I<903907F01F80D803FFEB7FE09138E1E1F09138E387F839001FE707EB0FE614EE02FC13
 
1246
F002D813E09138F801804AC7FCA25C131FA25CA4133F5CA5137F91C8FCA55B5BA3120148
 
1247
7EB512FEA325287EA724>114 D<9138FF81C0010713E390381F807F90397C003F804913
 
1248
1F4848130F5B00031407A248481400A27FA27F6D90C7FCEBFF8014FC6C13FF6C14C015F0
 
1249
6C6C7F011F7F13079038007FFE1403140100381300157EA2123C153E157E007C147CA200
 
1250
7E147815F8007F495A4A5A486C485A26F9E01FC7FC38E0FFFC38C01FE0222A7DA824>I<
 
1251
EB0380A4130791C7FCA25BA25BA2133EA2137E13FE12011207001FB512C0B6FCA2D801FC
 
1252
C7FCA312035BA512075BA5120F5BA41407001F130E13C0A4141E141C1380A26D5AA2000F
 
1253
5B14F03807E1E03801FF80D8007EC7FC1A3978B723>I<01FE147F00FFEC7FFF4914FEA2
 
1254
0007140300031401A34914FCA4150312074914F8A41507120F4914F0A4150F121F4914E0
 
1255
A2151FA3153F4914C0157F15FFEC01DF3A0FC003BFE09138073FFF3803F01E3801FFF826
 
1256
003FE01380282977A733>I<B500C3B53803FFFCA204FE14F8290FFE003FE00013C0D807
 
1257
F86D48EB7F000003173E183C150F18386D5E0001141F705B153F4D5A15776D4B5A0000EC
 
1258
E7F04DC7FCEC01C3170E9038FF0383017F5D91380703F85FEC0E01021E5CD93F9C14F002
 
1259
BC6D5A02B813FDDAF8005B4A13FF5F6D5A94C8FC5C4A137E167C6DC7FC1678010E14383E
 
1260
2878A642>119 D<48B539C07FFFC0A33C000FFE003FF8006D48EB1FE001031580010102
 
1261
3EC7FC6E133C01005C027F5B6F5A91383F81C0EDC380DA1FC7C8FC15EFEC0FFE6E5A5D14
 
1262
0381A24A7E140FEC1E7F023C7FEC383F02707FECE01F010180903803C00F49486C7ED90F
 
1263
007F491303017E80D801FE80D807FF497EB5D8803F13F8A332277FA630>I<90B539E007
 
1264
FFF05E18E0902707FE000313006D48EB01FC705A5F01014A5A5F16036E5C0100140794C7
 
1265
FC160E805E805E1678ED8070023F13F05EED81C015C191381FC38015C793C8FC15EF15EE
 
1266
EC0FFCA25DA26E5AA25DA26E5A5DA24AC9FC5C140E141E141C5C121C003F5B5A485B495A
 
1267
130300FE5B4848CAFCEA701EEA783CEA3FF0EA0FC0343A80A630>I
 
1268
E
1226
1269
%EndDVIPSBitmapFont
1227
 
%DVIPSBitmapFont: Fq cmti10 10.95 42
1228
 
/Fq 42 122 df<DC0FF0EB0F80DC7FFEEB3FE0922601FC0FEBF878923B03F00381F03C92
 
1270
%DVIPSBitmapFont: Fr cmti10 10.95 42
 
1271
/Fr 42 122 df<DC0FF0EB0F80DC7FFEEB3FE0922601FC0FEBF878923B03F00381F03C92
1229
1272
3B07C007C3E07C923B0F801FC7E1FC031F013F13C318CFED3F001983069F13F8037E9039
1230
1273
0E1F80E005001400183F03FE92C7FC5DA3600201157E5DA318FE02035D0103B9FCA26190
1231
1274
290003F00001FCC7FC14074B5CA41703020F5D5DA31707021F5D5DA3170F023F5D92C7FC
1248
1291
140315E0A2140715C0A2EC0F80A2141F15005C143EA25CA25CA2495A5C1303495A5C130F
1249
1292
49C7FC131E5B137C5B5B485A485A485A48C8FC121E5A12705A5A205A7FC325>I<EA01E0
1250
1293
EA07F8120FA2EA1FFCA4EA0FF8EA0798EA001813381330A21370136013E013C01201EA03
1251
 
80EA07001206120E5A5A5A5A5A0E1C7A891C>44 D<387FFFFEA3B5FCA21705799521>I<
 
1294
80EA07001206120E5A5A5A5A5A0E1C7A891C>44 D<387FFFFCA3B5FCA21605799521>I<
1252
1295
120FEA3FC0127FA212FFA31380EA7F00123C0A0A77891C>I<131EEB3F80137FEBFFC05A
1253
1296
A214806C13005B133C90C7FCB3120FEA3FC0127FA212FFA35B6CC7FC123C122777A61C>
1254
1297
58 D<171C173C177CA217FCA216011603A21607A24C7EA2161DA216391679167116E1A2
1295
1338
A25B147E3907F1FF809038F783E09038EF01F013FE390FF800F8A24913FC49137C485A15
1296
1339
7E5B15FE123FA290C7FCA248130115FC127EA2140300FE14F85AA2EC07F0A215E048130F
1297
1340
15C0141F15800078EB3F00127C147E003C5B383E01F8381E03E06C485A6CB4C7FCEA01F8
1298
 
1F4076BE2A>I<EC1FE0ECFFF8903803F03E903807C00F90381F8007D93F001380017E13
1299
 
1F49137F485A485A000715005B000F147E484890C7FCA2485AA3127F90C9FCA35A5AA648
1300
 
1403007E5C5D151E003E5C5D6C5CEC03E0390F800F802603E07EC7FC3801FFF838003FC0
1301
 
212977A72A>I<EE3F80ED1FFF1700A2ED007FA2167EA216FEA25EA21501A25EA21503A2
1302
 
5EA21507A25E147E903801FF8F903807C1CF90391F80EFC090383F00FF017E137F5B4848
1303
 
6D5A485AA2485A000F92C7FC5B001F5CA24848137EA215FE127F90C75AA214015A485CA2
1304
 
140316384814F0A21407167891380FE070127C021F13F0007E013F5B003E137FECF3E126
1305
 
1F01E35B3A0F8781E3802703FF00FFC7FCD800FC133E294077BE2E>I<EC3F80903801FF
1306
 
E0903807E0F890381F803CEB3E0001FC131E485A485A12074848133E49133C121F484813
1307
 
7C15F8EC03F0397F000FE0ECFF80B5EAFC0014C048C8FCA45AA61506150E151E007C143C
1308
 
15786C14F0EC01E06CEB07C0390F801F003807C0FC3801FFF038007F801F2976A72A>I<
1309
 
167C4BB4FC923807C78092380F83C0ED1F87161FED3F3FA2157EA21780EE0E004BC7FCA4
1310
 
14015DA414035DA30103B512F8A390260007E0C7FCA3140F5DA5141F5DA4143F92C8FCA4
1311
 
5C147EA414FE5CA413015CA4495AA4495AA4495A121E127F5C12FF49C9FCA2EAFE1EEAF8
1312
 
3C1270EA7878EA3FE0EA0F802A5383BF1C>I<EC03F0EC0FFC91383E0E1C9138FC077E90
1313
 
3901F003FE1303903807E001D90FC013FCEB1F80A2EB3F004914F8137E01FE1303A24848
1314
 
14F0A2150712034914E0A2150F12074914C0A2151FA216805B153F1203ED7F006D5BA200
1315
 
015B0000495A9038F80F7E90387C1EFEEB1FF8903807E0FC90C7FC1401A25DA21403A25D
1316
 
001C1307007F5C48130F5D4A5A4AC7FC48137E00F85B387C03F0381FFFC0D803FEC8FC27
1317
 
3B7CA72A>I<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA2
1318
 
91C8FCEC03F890387F0FFE91383E0F80D97E7813C0ECE007D9FFC013E014801400A2485A
1319
 
5BA25B0003140F16C05BA20007141F16805BA2000F143F16005B5D001F147EEDFE074913
1320
 
FCA2003F0101130FEDF80E1300161E48ECF01CA2007E1538A200FE1570020013E048EC7F
1321
 
C00038EC1F0028407ABE2E>I<1478EB01FCA21303A314F8EB00E01400AD137C48B4FC38
1322
 
038F80EA0707000E13C0121E121CEA3C0F1238A2EA781F00701380A2EAF03F140012005B
1323
 
137E13FE5BA212015BA212035B1438120713E0000F1378EBC070A214F0EB80E0A2EB81C0
1324
 
1383148038078700EA03FEEA00F8163E79BC1C>I<EB01FC13FF5CA21303A25CA21307A2
1325
 
5CA2130FA25CA2131FA25CA2133FA291C8FCED03E049EB0FF8ED3C3C017EEB707CEDE1FC
1326
 
9038FE01C1EC03839038FC0703140E0001011C13F891383800E0494813001460000313E0
1327
 
EBF9C0EBF78001FEC8FC1207EBFFE0EBE7F8EBE0FE000F137F6E7EEBC01F6E7E121F1670
1328
 
1380A2003F15F0021F13E001001380A248148116C0007EEB0F83168000FE14879138078F
1329
 
0048EB03FE0038EB00F826407ABE2A>107 D<EB07F0EA03FF14E0A2EA000FA214C0A213
1330
 
1FA21480A2133FA21400A25BA2137EA213FEA25BA21201A25BA21203A25BA21207A25BA2
1331
 
120FA25BA2121FA25BA2123FA290C7FCA25A1307127EA2EAFE0F130E12FCA2131E131CA2
1332
 
EA7C381378EA3C70EA1FE0EA0780144079BE17>I<D801F0D93F80137F3D07FC01FFE003
1333
 
FFC03D0F3E07C1F80F83F03D0E1F0F00FC1E01F8001E011C90387C3800001C49D97E707F
1334
 
003C01F05C0038157F4A5C26783FC05C12704A91C7FC91C7127E00F003FE1301494A5CEA
1335
 
007EA20301140301FE5F495CA203031407000160495C180F03075D0003051F13E0494A14
1336
 
80A2030FEC3F810007F001C0495CA2031F91383E0380120F494AEC0700A2033F150E001F
1337
 
EF1E1C4991C7EA0FF80007C7000EEC03E0432979A74A>I<D801F0EB3F803A07FC01FFE0
1338
 
3A0F3E07C1F83A0E1F0F00FC001E011C137C001C49137E003C13F012385C38783FC01270
1339
 
5C91C7FC00F015FE495CEA007EA2150101FE5C5BA2150300015D5B15075E0003020F1370
1340
 
4914C0A2031F13F00007ED80E05B1681EE01C0120F49EC0380A2EE0700001FEC0F0E49EB
1341
 
07FC0007C7EA01F02C2979A733>I<EC1FC0ECFFF8903803F07C90380FC01FEB1F809039
1342
 
3F000F80017E14C0491307484814E0485A12075B000F15F0485AA2485AA2ED0FE0127F90
1343
 
C7FCA2151F4815C05AA2ED3F80A2ED7F00A248147E007C5C007E13015D4A5A003E495A6C
1344
 
495A4A5A260F803EC7FC3807C0FC3801FFF038003F80242977A72E>I<903903E001F890
1345
 
390FF807FE903A1E7C1E0F80903A1C3E3C07C0013C137801389038E003E0EB783F017001
1346
 
C013F0ED80019038F07F0001E015F8147E1603000113FEA2C75AA20101140717F05CA201
1347
 
03140F17E05CA20107EC1FC0A24A1480163F010F15005E167E5E131F4B5A6E485A4B5A90
1348
 
393FB80F80DA9C1FC7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201A25BA21203A2
1349
 
387FFFE0B5FCA22D3A80A72E>I<027E1360903901FF81E0903807C1C390391F80E7C090
1350
 
383F00F7017E137F5B4848EB3F80485AA2485A000F15005B121F5D4848137EA3007F14FE
1351
 
90C75AA3481301485CA31403485CA314074A5A127C141F007E133F003E495A14FF381F01
1352
 
EF380F879F3903FF1F80EA00FC1300143F92C7FCA35C147EA314FE5CA21301130390B512
1353
 
F05AA2233A77A72A>I<D801F013FC3A07FC07FF803A0F3E0F03C0260E1F1C13E0001EEB
1354
 
380F001C1370003CEBE01F123814C0D8783F14C00070903880070092C7FC91C8FC12F05B
1355
 
EA007EA313FE5BA312015BA312035BA312075BA3120F5BA3121F5B0007C9FC232979A726
1356
 
>I<EC7F80903801FFE0903807C0F890381F003C013E131C013C131E017C133E49137E15
1357
 
FEA2000114FCA215706D13007FEBFFC014FC6C13FF15806D13C06D13E0010F13F0130014
1358
 
0F14071403120C123F387F80011403D8FF0013E0A300FCEB07C000F0EB0F8012700078EB
1359
 
1F006C133C381F01F83807FFE0C690C7FC1F297AA725>I<EB01C0EB03F01307A25CA213
1360
 
0FA25CA2131FA25CA2133FA291C7FCA2007FB51280B6FC1500D8007EC7FC13FEA25BA212
1361
 
01A25BA21203A25BA21207A25BA2120FA25BA2121F141C1380A2003F133C1438EB007814
1362
 
7014F05C495AEA1F03495A6C48C7FCEA07FCEA01F0193A78B81E>I<137C48B4141C2603
1363
 
8F80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA781F007001805BA2D8F03F
1364
 
1303140000005D5B017E1307A201FE5C5B150F1201495CA2151F0003EDC1C0491481A215
1365
 
3F1683EE0380A2ED7F07000102FF13005C01F8EBDF0F00009038079F0E90397C0F0F1C90
1366
 
391FFC07F8903907F001F02A2979A731>I<017CEB01C048B4EB07F038038F80EA070700
1367
 
0E01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F130000705BA2EAF03F91C712E0
1368
 
12005B017E130116C013FE5B1503000115805BA2ED07001203495B150EA25DA25D157800
1369
 
0114706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F0252979A72A>I<017C167048B4
1370
 
91387001FC3A038F8001F8EA0707000E01C015FE001E1403001CEDF000EA3C0F0038177C
1371
 
1507D8781F4A133C00701380A2D8F03F130F020049133812005B017E011F14784C137013
1372
 
FE5B033F14F0000192C712E05BA2170100034A14C049137E17031880A2EF070015FE170E
1373
 
00010101141E01F86D131C0000D9039F5BD9FC076D5A903A3E0F07C1E0903A1FFC03FFC0
1374
 
902703F0007FC7FC372979A73C>I<903903F001F890390FFC07FE90393C1E0E0F902678
1375
 
0F1C138001F0EBB83FD801E013F89039C007F07FEA0380000714E0D9000F140048151C00
1376
 
0E4AC7FCA2001E131FA2C75BA2143F92C8FCA35C147EA314FE4A131CA30101143C001E15
1377
 
38003F491378D87F811470018314F000FF5D9039077801C039FE0F7C033A7C0E3C078027
1378
 
783C1E1EC7FC391FF80FFC3907E003F029297CA72A>I<137C48B4143826038F8013FCEA
1379
 
0707000E7F001E1401001C15F8EA3C0F12381503D8781F14F000701380A2D8F03F130702
1380
 
0013E012005B017E130F16C013FE5B151F1201491480A2153F000315005BA25D157EA315
1381
 
FE5D00011301EBF8030000130790387C1FF8EB3FF9EB07E1EB00035DA21407000E5CEA3F
1382
 
80007F495AA24A5AD8FF0090C7FC143E007C137E00705B387801F0383803E0381E0FC06C
1383
 
B4C8FCEA03F8263B79A72C>I E
 
1341
1F4076BE2A>I<EC1FC0ECFFF0903803F03C903807C01E90381F800E90383F000F017E13
 
1342
3F4913FF485A485A000714FE5B000F14FC48481300A2485AA3127F90C8FCA35A5AA64814
 
1343
03007E1407150F151E003E143C15786C14F0EC03E0390F800F803903E07E003801FFF838
 
1344
003FC0202977A72A>I<EE3F80ED1FFF1700A2ED007FA2167EA216FEA25EA21501A25EA2
 
1345
1503A25EA21507A25E147E903801FF8F903807C1CF90391F80EFC090383F00FF017E137F
 
1346
5B48486D5A485AA2485A000F92C7FC5B001F5CA24848137EA215FE127F90C75AA214015A
 
1347
485CA2140316384814F0A21407167891380FE070127C021F13F0007E013F5B003E137FEC
 
1348
F3E1261F01E35B3A0F8781E3802703FF00FFC7FCD800FC133E294077BE2E>I<EC3F8090
 
1349
3801FFE0903807E0F890381F803CEB3E0001FC131E485A485A12074848133E49133C121F
 
1350
4848137C15F8EC03F0397F000FE0ECFF809038FFFC00B512C048C8FCA45AA61506150E15
 
1351
1E007C143C15786C14F0EC01E06CEB07C0390F801F003807C0FC3801FFF038007F801F29
 
1352
76A72A>I<167C4BB4FC923807C78092380F83C0ED1F87161FED3F3FA2157EA21780EE0E
 
1353
004BC7FCA414015DA414035DA30103B512F8A390260007E0C7FCA3140F5DA5141F5DA414
 
1354
3F92C8FCA45C147EA414FE5CA413015CA4495AA4495AA4495A121E127F5C12FF49C9FCA2
 
1355
EAFE1EEAF83C1270EA7878EA3FE0EA0F802A5383BF1C>I<EC03F0EC0FFC91383E0E1C91
 
1356
38FC077E903901F003FE1303903807E001D90FC013FCEB1F80A2EB3F004914F8137E01FE
 
1357
1303A2484814F0A2150712034914E0A2150F12074914C0A2151FA216805B153F1203ED7F
 
1358
006D5BA200015B0000495A9038F80F7E90387C1EFEEB1FF8903807E0FC90C7FC1401A25D
 
1359
A21403A25D001C1307007F5C48130F5D4A5A4AC7FC48137E00F85B387C03F0381FFFC0D8
 
1360
03FEC8FC273B7CA72A>I<EB01FC13FF5CA21303A25CA21307A25CA2130FA25CA2131FA2
 
1361
5CA2133FA291C8FCEC03F890387F0FFE91383E0F80D97E7813C0ECE007D9FFC013E01480
 
1362
1400A2485A5BA25B0003140F16C05BA20007141F16805BA2000F143F16005B5D001F147E
 
1363
EDFE074913FCA2003F0101130FEDF80E1300161E48ECF01CA2007E1538A200FE15700200
 
1364
13E048EC7FC00038EC1F0028407ABE2E>I<1478EB01FCA21303A314F8EB00E01400AD13
 
1365
7C48B4FC38038F80EA0707000E13C0121E121CEA3C0F1238A2EA781F00701380A2EAF03F
 
1366
140012005B137E13FE5BA212015BA212035B1438120713E0000F1378EBC070A214F0EB80
 
1367
E0A2EB81C01383148038078700EA03FEEA00F8163E79BC1C>I<EB01FC13FF5CA21303A2
 
1368
5CA21307A25CA2130FA25CA2131FA25CA2133FA291C8FCED03E049EB0FF8ED3C3C017EEB
 
1369
707CEDE1FC9038FE01C1EC03839038FC0703140E0001011C13F891383800E04948130014
 
1370
60000313E0EBF9C0EBF78001FEC8FC1207EBFFE0EBE7F8EBE0FE000F137F6E7EEBC01F81
 
1371
001F130F16701380A2003F15F0021F13E001001380A248148116C0007EEB0F83168000FE
 
1372
14879138078F0048EB03FE0038EB00F826407ABE2A>107 D<EB07F0EA03FF14E0A2EA00
 
1373
0FA214C0A2131FA21480A2133FA21400A25BA2137EA213FEA25BA21201A25BA21203A25B
 
1374
A21207A25BA2120FA25BA2121FA25BA2123FA290C7FCA25A1307127EA2EAFE0F130E12FC
 
1375
A2131E131CA2EA7C381378EA3C70EA1FE0EA0780144079BE17>I<D801F0D93F80137F3D
 
1376
07FC01FFE003FFC03D0F3E07C1F80F83F03D0E1F0F00FC1E01F8001E011C90387C380000
 
1377
1C49D97E707F003C01F05C0038157F4A5C26783FC05C12704A91C7FC91C7127E00F003FE
 
1378
1301494A5CEA007EA20301140301FE5F495CA203031407000160495C180F03075D000305
 
1379
1F13E0494A1480A2030FEC3F810007F001C0495CA2031F91383E0380120F494AEC0700A2
 
1380
033F150E001FEF1E1C4991C7EA0FF80007C7000EEC03E0432979A74A>I<D801F0EB3F80
 
1381
3A07FC01FFE03A0F3E07C1F83A0E1F0F00FC001E011C137C001C49137E003C13F012385C
 
1382
38783FC012705C91C7FC00F015FE495CEA007EA2150101FE5C5BA2150300015D5B15075E
 
1383
0003020F13704914C0A2031F13F00007ED80E05B1681EE01C0120F49EC0380A2EE070000
 
1384
1FEC0F0E49EB07FC0007C7EA01F02C2979A733>I<EC1FC0ECFFF8903803F07C90380FC0
 
1385
1FEB1F8090393F000F80017E14C0491307484814E0485A12075B000F15F0485AA2485AA2
 
1386
ED0FE0127F90C7FCA2151F4815C05AA2ED3F80A2ED7F00A248147E007C5C007E13015D4A
 
1387
5A003E495A6C495A4A5A260F803EC7FC3807C0FC3801FFF038003F80242977A72E>I<90
 
1388
3903E001F890390FF807FE903A1E7C1E0F80903A1C3E3C07C0013C137801389038E003E0
 
1389
EB783F017001C013F0ED80019038F07F0001E015F8147E1603000113FEA2C75AA2010114
 
1390
0717F05CA20103140F17E05CA20107EC1FC0A24A1480163F010F15005E167E5E131F4B5A
 
1391
6E485A4B5A90393FB80F80DA9C1FC7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201
 
1392
A25BA21203A2387FFFE0B5FCA22D3A80A72E>I<027E1360903901FF81E0903807C1C390
 
1393
391F80E7C090383F00F7017E137F5B4848EB3F80485AA2485A000F15005B121F5D484813
 
1394
7EA3007F14FE90C75AA3481301485CA31403485CA314074A5A127C141F007E133F003E49
 
1395
5A14FF381F01EF380F879F3903FF1F80EA00FC1300143F92C7FCA35C147EA314FE5CA213
 
1396
01130390B512F05AA2233A77A72A>I<D801F013FC3A07FC07FF803A0F3E0F03C0260E1F
 
1397
1C13E0001EEB380F001C1370003CEBE01F123814C0D8783F14C00070903880070092C7FC
 
1398
91C8FC12F05BEA007EA313FE5BA312015BA312035BA312075BA3120F5BA3121F5B0007C9
 
1399
FC232979A726>I<EC7F80903801FFE0903807C0F890381F003C013E131C013C131E017C
 
1400
133E49137E15FEA2000114FCA215706D13007FEBFFC014FC6C13FF15806D13C06D13E001
 
1401
0F13F01300140F14071403120C123F387F80011403D8FF0013E0A300FCEB07C000F0EB0F
 
1402
8012700078EB1F006C133C381F01F83807FFE0C690C7FC1F297AA725>I<EB01C0EB03F0
 
1403
1307A25CA2130FA25CA2131FA25CA2133FA291C7FCA2007FB51280B6FC1500D8007EC7FC
 
1404
13FEA25BA21201A25BA21203A25BA21207A25BA2120FA25BA2121F141C1380A2003F133C
 
1405
1438EB0078147014F05C495AEA1F03495A6C48C7FCEA07FCEA01F0193A78B81E>I<137C
 
1406
48B4141C26038F80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA781F007001
 
1407
805BA2D8F03F1303140000005D5B017E1307A201FE5C5B150F1201495CA2151F0003EDC1
 
1408
C0491481A2153F1683EE0380A2ED7F07000102FF13005C01F8EBDF0F00009038079F0E90
 
1409
397C0F0F1C90391FFC07F8903907F001F02A2979A731>I<017CEB01C048B4EB07F03803
 
1410
8F80EA0707000E01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F130000705BA2EA
 
1411
F03F91C712E012005B017E130116C013FE5B1503000115805BA2ED07001203495B150EA2
 
1412
5DA25D1578000114706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F0252979A72A>I<
 
1413
017C167048B491387001FC3A038F8001F8EA0707000E01C015FE001E1403001CEDF000EA
 
1414
3C0F0038177C1507D8781F4A133C00701380A2D8F03F130F020049133812005B017E011F
 
1415
14784C137013FE5B033F14F0000192C712E05BA2170100034A14C049137E17031880A2EF
 
1416
070015FE170E00010101141E01F86D131C0000D9039F5BD9FC076D5A903A3E0F07C1E090
 
1417
3A1FFC03FFC0902703F0007FC7FC372979A73C>I<903903F001F890390FFC07FE90393C
 
1418
1E0E0F9026780F1C138001F0EBB83FD801E013F89039C007F07FEA0380000714E0D9000F
 
1419
140048151C000E4AC7FCA2001E131FA2C75BA2143F92C8FCA35C147EA314FE4A131CA301
 
1420
01143C001E1538003F491378D87F811470018314F000FF5D9039077801C039FE0F7C033A
 
1421
7C0E3C078027783C1E1EC7FC391FF80FFC3907E003F029297CA72A>I<137C48B4143826
 
1422
038F8013FCEA0707000E7F001E1401001C15F8EA3C0F12381503D8781F14F000701380A2
 
1423
D8F03F1307020013E012005B017E130F16C013FE5B151F1201491480A2153F000315005B
 
1424
A25D157EA315FE5D00011301EBF8030000130790387C1FF8EB3FF9EB07E1EB00035DA214
 
1425
07000E5CEA3F80007F495AA24A5AD8FF0090C7FC143E007C137E00705B387801F0383803
 
1426
E0381E0FC06CB4C8FCEA03F8263B79A72C>I E
1384
1427
%EndDVIPSBitmapFont
1385
 
%DVIPSBitmapFont: Fr cmbx12 17.28 42
1386
 
/Fr 42 123 df<ED0FFF4AB512F8020F14FF023F15C091B712F049D9FC037F0107D9F000
 
1428
%DVIPSBitmapFont: Fs cmbx12 17.28 42
 
1429
/Fs 42 123 df<ED0FFF4AB512F8020F14FF023F15C091B712F049D9FC037F0107D9F000
1387
1430
13FE4901C0EB3FFF4990C7000F7F49486E7F017F8349486E7F4A80488448496E7FA24884
1388
1431
4A157F4884A3481980A34819C04A81A34819E0A7B518F0B3A86C19E0A76C19C0A26E5DA2
1389
1432
6C1980A36C1900A36C6D4B5AA26C60A26C6D4A5B6C606E5C6D6C4A5B6D6C4A5B6D6D495B
1419
1462
4A90C7EA1FE0DAFFFC6E7E494914074949EC7FF8494914FF49495B4949497F4990C7FC49
1420
1463
5D5C13FF485BA25A4A6E5B5A715B48496E5B725A4894C8FCA35AA35C48913801FFE0030F
1421
1464
13FE033F6D7E4B14E092B612F89126E1FE037FB53AE3F0007FFEDAE7E06D7EDAEFC06D7F
1422
 
4B6D7F02FFC76C7F4A82717F4A82A24A828385A24A1780A54A17C0A37EA77EA47E6E1780
 
1465
4B6D7F02FFC76C7F4A82717F4A82A2854A8085A24A1780A54A17C0A37EA77EA47E6E1780
1423
1466
A27EA21A007E4D5B7E6E5E7E6E5E6C4C5B6D7E013F4B5B6D6C4A5B6D01C0495B6D6D90B5
1424
1467
C7FC6DD9FC0713FC6D90B65A6D5E023F15C0020F92C8FC020114F8DA001F1380426079DD
1425
1468
51>I<EA07E0120F7F13FCEBFFFC91B912F8A45AA21AF01AE01AC01A801A00A248606161
1437
1480
FFFEC7FC6D90B65A010F16F001035E010093C8FC020F14F8DA007F90C9FC426079DD51>
1438
1481
I<ED3FFF0207B512F0023F14FC91B7FC010316C049D9F8077F49D9C00113F8013F496C6C
1439
1482
7E4948C76C7E49486E7E4884484980717F4849825A48707F855A5C855A8583A2B583A41A
1440
 
80A71AC0A35F7EA46C5EA27E806C5EA26C5E6C7F6C5E6C6D147D6D6C14FD6D6CEB01F96D
 
1483
80A71AC0A35F7EA46C5EA27E6E5C7EA26C5E6C7F6C5E6C6D147D6D6C14FD6D6CEB01F96D
1441
1484
90388003F16D9038F01FE16D90B500C11480010115816D6C1401021F13FC020113E091C8
1442
1485
FC1A00A25FA261A3D9FF805E487F486D4A5B487FA2486D5E5F61615F614A4A90C7FC4D5A
1443
1486
6C5B4A4A5A4A01035BD803FCC7485B6C6C021F13C0D9FFC0017F5B6CD9F803B5C8FC6DB6
1584
1627
494915E0495B5B5D4949140F90B55AA2484A141F485C4891C8123F187F484915FF48495C
1585
1628
48491407051F13C0484949B5FCBAFCA47E3C407CBF48>I E
1586
1629
%EndDVIPSBitmapFont
1587
 
%DVIPSBitmapFont: Fs cmsy10 10.95 9
1588
 
/Fs 9 104 df<007FB812FEBAFCA26C17FE3804799847>0 D<121EEA7F80A2EAFFC0A4EA
1589
 
7F80A2EA1E000A0A799B19>I<0060166000F816F06C1501007E15036CED07E06C6CEC0F
1590
 
C06C6CEC1F806C6CEC3F006C6C147E6C6C5C6C6C495A017E495A6D495A6D6C485A6D6C48
1591
 
5A6D6C48C7FC903803F07E6D6C5A903800FDF8EC7FF06E5A6E5AA24A7E4A7EECFDF89038
1592
 
01F8FC903803F07E49487E49486C7E49486C7E49486C7E017E6D7E496D7E48486D7E4848
1593
 
147E4848804848EC1F804848EC0FC048C8EA07E0007EED03F0481501481500006016602C
1594
 
2C73AC47>I<EE7FFE0307B512E0033F14FC92B7FC0203D9C00313C0DA0FFCC7EA3FF0DA
1595
 
3FE0EC07FCDA7F80EC01FED901FEC9EA7F80D903F8EE1FC0D907E0EE07E04948707E4948
1596
 
707E49CB7E017E187E498449844848F00F8000031AC04918074848F003E0A24848F001F0
1597
 
A248CD12F8A2001E1A78003E1A7CA2003C1A3C007C1A3EA200781A1EA300F81A1FA2481A
1598
 
0FAB6C1A1FA200781A1EA3007C1A3EA2003C1A3C003E1A7CA2001E1A78001F1AF8A26C6C
1599
 
F001F0A26C6CF003E0A26C6CF007C06D180F00011A806C6CF01F006D60017E187E6D606D
1600
 
6C4C5A6D6C4C5A6D6C4C5AD903F8EE1FC0D901FEEE7F809026007F80DA01FEC7FCDA3FE0
1601
 
EC07FCDA0FFCEC3FF0913B03FFC003FFC0020090B6C8FC033F14FC030714E09226007FFE
1602
 
C9FC50557BC05B>13 D<EB0FFCEB3FFF90B512C0000314F04880488048804880A2481580
1603
 
A3B712C0AA6C1580A36C1500A26C5C6C5C6C5C6C5CC614C0013F90C7FCEB0FFC22227BA7
1604
 
2D>15 D<180E183F18FFEF03FEEF0FF8EF3FE0EFFF80933803FE00EE0FF8EE3FE0EEFF80
1605
 
DB03FEC7FCED0FF8ED7FE0913801FF80DA07FEC8FCEC1FF8EC7FC04948C9FCEB07FCEB1F
1606
 
F0EB7FC04848CAFCEA07FCEA1FF0EA7FC048CBFCA2EA7FC0EA1FF0EA07FCEA01FF38007F
1607
 
C0EB1FF0EB07FCEB01FF9038007FC0EC1FF0EC07FE913801FF809138007FE0ED1FF8ED03
1608
 
FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FEEF00FF183F180E
1609
 
1800AE007FB812FEBAFCA26C17FE384879B947>20 D<0203B512F8023F14FC91B6FC0103
1610
 
15F8D90FFEC8FCEB1FE0EB7F8001FEC9FCEA01F8485A485A485A5B48CAFCA2123EA25AA2
1611
 
1278A212F8A25AA2B812F817FCA217F800F0CAFCA27EA21278A2127CA27EA27EA26C7E7F
1612
 
6C7E6C7E6C7EEA00FEEB7F80EB1FE0EB0FFE0103B612F8010015FC143F020314F82E3679
1613
 
B13D>50 D<153FEC03FFEC0FE0EC3F80EC7E00495A5C495AA2495AB3AA130F5C131F495A
1614
 
91C7FC13FEEA03F8EA7FE048C8FCEA7FE0EA03F8EA00FE133F806D7E130F801307B3AA6D
1615
 
7EA26D7E80EB007EEC3F80EC0FE0EC03FFEC003F205B7AC32D>102
1616
 
D<12FCEAFFC0EA07F0EA01FCEA007E6D7E131F6D7EA26D7EB3AA801303806D7E1300147F
1617
 
EC1FC0EC07FEEC00FFEC07FEEC1FC0EC7F0014FC1301495A5C13075CB3AA495AA2495A13
1618
 
3F017EC7FC485AEA07F0EAFFC000FCC8FC205B7AC32D>I E
 
1630
%DVIPSBitmapFont: Ft cmsy10 10.95 9
 
1631
/Ft 9 104 df<007FB812F8B912FCA26C17F83604789847>0 D<121EEA7F80A2EAFFC0A4
 
1632
EA7F80A2EA1E000A0A799B19>I<0060166000F816F06C1501007E15036CED07E06C6CEC
 
1633
0FC06C6CEC1F806C6CEC3F006C6C147E6C6C5C6C6C495A017E495A6D495A6D6C485A6D6C
 
1634
485A6D6C48C7FC903803F07E6D6C5A903800FDF8EC7FF06E5A6E5AA24A7E4A7EECFDF890
 
1635
3801F8FC903803F07E49487E49486C7E49486C7E49486C7E017E6D7E496D7E48486D7E48
 
1636
48147E4848804848EC1F804848EC0FC048C8EA07E0007EED03F048150148150000601660
 
1637
2C2C73AC47>I<EE7FFE0307B512E0033F14FC92B7FC0203D9C00313C0DA0FFCC7EA3FF0
 
1638
DA3FE0EC07FCDA7F80EC01FED901FEC9EA7F80D903F8EE1FC0D907E0EE07E04948707E49
 
1639
48707E49CB7E017E187E498449844848F00F8000031AC04918074848F003E0A24848F001
 
1640
F0A248CD12F8A2001E1A78003E1A7CA2003C1A3C007C1A3EA200781A1EA300F81A1FA248
 
1641
1A0FAB6C1A1FA200781A1EA3007C1A3EA2003C1A3C003E1A7CA2001E1A78001F1AF8A26C
 
1642
6CF001F0A26C6CF003E0A26C6CF007C06D180F00011A806C6CF01F006D60017E187E6D60
 
1643
6D6C4C5A6D6C4C5A6D6C4C5AD903F8EE1FC0D901FEEE7F809026007F80DA01FEC7FCDA3F
 
1644
E0EC07FCDA0FFCEC3FF0913B03FFC003FFC0020090B6C8FC033F14FC030714E09226007F
 
1645
FEC9FC50557BC05B>13 D<EB0FFCEB3FFF90B512C0000314F04880488048804880A24815
 
1646
80A3B712C0AA6C1580A36C1500A26C5C6C5C6C5C6C5CC614C0013F90C7FCEB0FFC22227B
 
1647
A72D>15 D<1818187CEF01FCEF07F8EF1FF0EF7FC0933801FF00EE07FCEE1FF0EE7FC04B
 
1648
48C7FCED07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB
 
1649
7FC04848CAFCEA07FCEA1FF0EA7FC048CBFC5AEA7F80EA3FE0EA0FF8EA03FEC66C7EEB3F
 
1650
E0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0ED0FF8ED03FE92
 
1651
3800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC170018381800AE007F
 
1652
B812F8B912FCA26C17F8364878B947>20 D<0207B512E0023F14F049B6FC4915E0D90FFC
 
1653
C8FCEB1FE0017FC9FC13FEEA01F8485A485A5B485A121F90CAFC123EA25AA21278A212F8
 
1654
A25AA2B812E017F0A217E000F0CAFCA27EA21278A2127CA27EA27E7F120F6C7E7F6C7E6C
 
1655
7EEA00FE137FEB1FE0EB0FFC0103B612E06D15F0EB003F020714E02C3678B13D>50
 
1656
D<153FEC03FFEC0FE0EC3F80EC7E00495A5C495AA2495AB3AA130F5C131F495A91C7FC13
 
1657
FEEA03F8EA7FE048C8FCEA7FE0EA03F8EA00FE133F806D7E130F801307B3AA6D7EA26D7E
 
1658
80EB007EEC3F80EC0FE0EC03FFEC003F205B7AC32D>102 D<12FCEAFFC0EA07F0EA01FC
 
1659
EA007E6D7E131F6D7EA26D7EB3AA801303806D7E1300147FEC1FC0EC07FEEC00FFEC07FE
 
1660
EC1FC0EC7F0014FC1301495A5C13075CB3AA495AA2495A133F017EC7FC485AEA07F0EAFF
 
1661
C000FCC8FC205B7AC32D>I E
1619
1662
%EndDVIPSBitmapFont
1620
 
%DVIPSBitmapFont: Ft cmbx12 14.4 56
1621
 
/Ft 56 123 df<B712F0AB240B7F9F2D>45 D<EA07F0487E487E487E487EB51280A76C13
 
1663
%DVIPSBitmapFont: Fu cmbx12 14.4 56
 
1664
/Fu 56 123 df<B712F0AB240B7F9F2D>45 D<EA07F0487E487E487E487EB51280A76C13
1622
1665
006C5A6C5A6C5A6C5A1111769025>I<913803FFC0023F13FC91B6FC010315C0010F0181
1623
1666
13F0903A1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0A24817E048
1624
1667
90C813F0A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FEA6003F17FC
1844
1887
4949EB0F805B495B5D495B49151F4949140092C7FC495A485E485B5C485E485B4A5C4849
1845
1888
5B4815074849495A91C712FFB8FCA37E31357CB43C>I E
1846
1889
%EndDVIPSBitmapFont
1847
 
%DVIPSBitmapFont: Fu cmr10 10.95 85
1848
 
/Fu 85 125 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907
 
1890
%DVIPSBitmapFont: Fv cmr10 10.95 85
 
1891
/Fv 85 125 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907
1849
1892
F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7
1850
1893
FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11
1851
 
D<4AB4FC021F13C091387F01F0903901FC0078D907F0131C4948133E494813FF49485A13
1852
 
7F1400A213FE6F5A163893C7FCAA167FB8FCA33900FE00018182B3AC486CECFF80007FD9
1853
 
FC3F13FEA32F407FBF33>I<4AB47E021F13F791387F00FFEB01F8903807F001EB0FE0EB
1854
 
1FC0EB3F80137F14008101FE80AEB8FCA3C648C77EB3AE486CECFF80007FD9FC3F13FEA3
1855
 
2F407FBF33>I<4AB4ECFF80021FD9C00F13E0913B7F01F03F80F8903C01F80078FE003C
1856
 
D907F0D93FF8130E49484948131F49484948EB7F804948484913FF137F02005CA201FE92
1857
 
C7FC6FED7F0070141C96C7FCAAF13F80BBFCA3C648C76CC7FC197F193FB3AC486C4A6CEB
1858
 
7FC0007FD9FC3FD9FE1FB5FCA348407FBF4C>I<121EEA7F80EAFFC0A9EA7F80ACEA3F00
1859
 
AC121EAB120CC7FCA8121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A4179C019>33
 
1894
D<EC03FE91383FFF809138FE03E0903903F800F0D90FE013384948137C90393F8001FE90
 
1895
387F00035B5BA2485A6F5AED007093C7FCAA16FEB7FCA33901FC000315011500B3AC486C
 
1896
497EB5D8F87F13FCA32E407EBF33>I<EC03FF023F13EE9138FE01FEEB03F090380FE003
 
1897
EB1FC0EB3F80EB7F005B5B150148481300AEB7FCA3D801FCC7FCB3AE486C497EB5D8F87F
 
1898
13FCA32E407EBF33>I<DA03FE49B4FC91273FFF801F13C0913BFE03E07F01F0903C03F0
 
1899
00F1FC0078D90FE0D97FF0131C49484948133E4948484913FF494848495A5B491500A248
 
1900
485C03016E5A0300153896C7FCAA197FBBFCA3D801FCC738FE00018485B3AC486C496CEC
 
1901
FF80B5D8F87FD9FC3F13FEA347407EBF4C>I<121EEA7F80EAFFC0A9EA7F80ACEA3F00AC
 
1902
121EAB120CC7FCA8121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A4179C019>33
1860
1903
D<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F133F391E600F30000013
1861
1904
00A401E01370491360A3000114E04913C00003130101001380481303000EEB070048130E
1862
1905
0018130C0038131C003013181C1C7DBE2D>I<121EEA7F8012FF13C0A213E0A3127FEA1E
1937
1980
E084717E717E170184717EA21980187F19C0A3F03FE0A519F0AB19E0A5F07FC0A21980A2
1938
1981
18FF19004D5AA24D5A6017074D5A4D5AEF7FC04DC7FCEE03FE48486CEB1FF8B85A178004
1939
1982
FCC8FC3C3E7DBD45>I<B912E0A300019038C000016C6C48EB001FEF0FF01703A2170117
1940
 
00A31870A41838161CA41800A2163CA2167C16FC150391B5FCA3EC80031500167C163CA2
1941
 
161CA21807A3180E93C7FCA4181E181CA2183CA2187CA218F8170117031707171F48486C
1942
 
EB01FFB912F0A3383E7DBD3E>I<B91280A300019038C000036C6C48EB007FEF1FC0170F
1943
 
1707A21703A31701A4EF00E0A21638A31800A31678A216F81501150791B5FCA3EC800715
1944
 
0115001678A21638A693C8FCAF3801FFE0B612F0A3333E7DBD3B>I<DB3FE0130C912603
1945
 
FFFE131C021F9038FF803C913A7FF00FC07C9139FF0001F0D903FC90380078FC4948143D
1946
 
D91FE0141F4948140F4948140701FF15034890C8FC491501485A000716005B000F177C5B
1947
 
001F173CA2485AA2181C127FA25B95C7FC12FFAB041FB512F0127FA26D9139000FFE00EF
1948
 
03FC123FA27F121FA26C7EA212077F12036C7E7F6C7F6D6C14076D7E6D6C140FD907F814
1949
 
1ED903FEEC3C7C902600FF80EBF83C913A7FF007F01C021FB5EAC00C020391C8FC913800
1950
 
3FF03C427BBF47>I<B6D8C01FB512F8A3000101E0C7383FFC0026007F80EC0FF0B3A691
1951
 
B7FCA30280C7120FB3A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44>I<B612F0A3
1952
 
C6EBF000EB3FC0B3B3B2EBFFF0B612F0A31C3E7EBD21>I<011FB512FCA3D9000713006E
1953
 
5A1401B3B3A6123FEA7F80EAFFC0A44A5A1380D87F005B007C130700385C003C495A6C49
1954
 
5A6C495A2603E07EC7FC3800FFF8EB3FC026407CBD2F>I<B600C090387FFFFCA3000101
1955
 
E0C7000F138026007F80913807FE0018F818E0604D5A4DC7FC173E5F5F4C5A4C5A4C5A4C
1956
 
5A4CC8FC163E5E5E4B5A4B5AED07804B7E151F4B7E4B7E15FF913881EFF8913883C7FCEC
1957
 
878791388F03FE91389E01FF14BCDAF8007F4A6D7E5C4A6D7E4A6D7EA2707E707EA2707E
1958
 
707EA2707F717E84173F717E717EA2717E848419802601FFE04A13C0B600C090B6FCA340
1959
 
3E7DBD47>I<B612F8A3000101E0C9FC38007F80B3B0EF0380A517071800A45FA35FA25F
1960
 
5F5F4C5A160748486C133FB8FCA3313E7DBD39>I<B500C093383FFFF0A300016D93387F
1961
 
F800D8007F18E0D977F016EFA3D973F8ED01CFA2D971FCED038FA3D970FEED070FA26E15
1962
 
0E80A26E6C141CA36E6C1438A26E6C1470A36E6C14E0A26E6CEB01C0A36E6CEB0380A36E
1963
 
6CEB0700A2037F130EA36F6C5AA26F6C5AA36F6C5AA25FED07F0A2923803F9C0A36FB45A
1964
 
A26F90C7FCA213F8486C147ED807FFEF3FF8B500F8013C011FB512F0A34C3E7DBD53>I<
1965
 
B56C91B512F88080D8007F030713006EEC01FC6E6E5A1870EB77FCEB73FEA2EB71FF0170
1966
 
7FA26E7E6E7EA26E7E6E7EA26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7E
1967
 
A26F7E6F1380A2EE7FC0EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A217
1968
 
7F173FA2171F170FA2170701F81503487ED807FF1501B500F81400A218703D3E7DBD44>
1969
 
I<ED7FE0913807FFFE91391FC03F8091397E0007E04948EB03F8D907F0EB00FE4948147F
1970
 
49486E7E49486E7E49C86C7E01FE6F7E00018349150300038348486F7EA248486F7EA200
1971
 
1F188049167F003F18C0A3007F18E049163FA300FF18F0AC007F18E06D167FA4003F18C0
1972
 
A26C6CEEFF80A36C6C4B1300A26C6C4B5A00035F6D150700015F6C6C4B5A6D5E6D6C4A5A
1973
 
6D6C4A5A6D6C4AC7FC6D6C14FED901FCEB03F8D9007FEB0FE091391FC03F80912607FFFE
1974
 
C8FC9138007FE03C427BBF47>I<B712F8EEFF8017E000019039C0003FF86C6C48EB07FC
1975
 
EE01FE707EEF7F80EF3FC018E0A2EF1FF0A218F8A818F0A2EF3FE0A218C0EF7F80EFFF00
1976
 
4C5AEE07FCEE3FF091B612C04CC7FC0280C9FCB3A73801FFE0B612C0A3353E7DBD3E>I<
1977
 
ED7FE0913807FFFE91391FC03F8091397F000FE0D901FCEB03F8D907F0EB00FE4948147F
1978
 
49486E7E49486E7E49C86C7E498248486F7E49150300038348486F7EA2000F834981001F
1979
 
1880A24848EE7FC0A3007F18E0A249163FA200FF18F0AC007F18E0A26D167FA3003F18C0
1980
 
A26C6CEEFF80A3000F18006D5D0007DA0F805B6C6C90393FE003FCED70706C6C496C485A
1981
 
6C6C48486C485A017FD9800E5BD93F819038061FC0D91FC19038073F80D90FE14AC7FCD9
1982
 
07F1EB03FE902601FDC013F8903A007EE007E091271FF03FC013180207B5FC9139007FE1
1983
 
E0DB0001143883711378A2706C13F0EFFF0318FFA27113E0A37113C0711380711300715A
1984
 
EF01F83D527BBF47>I<B712C016FCEEFF800001D9C00013E06C6C48EB1FF0EE07FCEE01
1985
 
FE707E84717EA2717EA284A760177F606017FF95C7FCEE01FCEE07F8EE1FE0EEFF8091B5
1986
 
00FCC8FC16F091388001FCED003FEE1FC0707E707E83160383160183A383A484A4F0C004
1987
 
190EA28218E0057F131E2601FFE0161CB600C0EB3FF094381FF83805071370CA3801FFE0
1988
 
9438003F803F407DBD43>I<D907FC130C90391FFF801C017FEBF03C3901FC03F83A03F0
1989
 
007E7CD807C0EB1FFC4848130F001F140748C71203003E1401007E1400A2007C157C12FC
1990
 
A2163CA36C151CA27EA26C6C14007F7FEA3FF8EBFF806C13F86CEBFF806C14F06C14FC6C
1991
 
14FF6C15C0013F14E0010714F0EB007F020713F89138007FFC150FED07FE15031501ED00
1992
 
FFA200E0157FA3163FA27EA3163E7E167E6C157C6C15FC6C15F86D13016DEB03F06DEB07
1993
 
E0D8F9FCEB0FC03AF07F803F8090391FFFFE00D8E00713F839C0007FC028427BBF33>I<
1994
 
003FB91280A3903AF0007FE001018090393FC0003F48C7ED1FC0007E1707127C00781703
1995
 
A300701701A548EF00E0A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42>I<B600C0
1996
 
90B512F8A3000101E0C70007130026007F80EC01FC715A1870B3B3A4013F16F06E5DA217
1997
 
01011F5E80010F15036E4A5A010793C7FC6D6C5C6D6C141E6D6C5C027F14F86E6C485A91
1998
 
390FF00FE00203B51280020049C8FCED1FF03D407DBD44>I<B691380FFFFEA3000301E0
1999
 
020113E06C01809138007F806CEF3F00017F163E181C6E153C013F1638A26E1578011F16
2000
 
70A26D6C5DA26E140101075EA26E140301035EA26D6C4AC7FCA2806D150EA26F131E027F
2001
 
141CA26F133C023F1438A26E6C5BA26F13F0020F5CA2EDF80102075CA26E6C485AA2EDFE
2002
 
07020191C8FCA26F5A6E130EA2ED7F9CA216DCED3FF8A36F5AA36F5AA26F5AA36F5A3F40
2003
 
7EBD44>I<B500FE017FB5D88007B5FCA3000301C0010101E0C713F86C90C849EC3FE071
2004
 
48EC0F807E7215006E143F017F190E84A26D6C60A24D7E6D6C60A2EFE7F86D6C60A29338
2005
 
01C3FC6E18F001076104037F6E0281140101036104077F17006D6C4D5AA2040EEB7F806D
2006
 
6C4DC7FCA24CEB3FC0DA7F80160EA24CEB1FE003C0161E023F171C047814F0DBE070010F
2007
 
133C021F173804F014F84C1307DA0FF05EA2DBF1C0EB03FCDA07F95EA2DBFB80EB01FEDA
2008
 
03FF6F5AA293C8FCA26E5FA24B157F020094C8FCA24B81037C153EA20378151E0338151C
2009
 
58407EBD5D>I<007FB5D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48EC1F806D6C
2010
 
92C7FC171E6D6C141C6D6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F13036F485ADA
2011
 
1FF090C8FC020F5BEDF81E913807FC1C163C6E6C5A913801FF7016F06E5B6F5AA26F7E6F
2012
 
7EA28282153FED3BFEED71FF15F103E07F913801C07F0203804B6C7EEC07004A6D7E020E
2013
 
6D7E5C023C6D7E02386D7E14784A6D7E4A6D7F130149486E7E4A6E7E130749C86C7E496F
2014
 
7E497ED9FFC04A7E00076DEC7FFFB500FC0103B512FEA33F3E7EBD44>I<B66C0103B512
2015
 
80A3000101F0C8EBF8006C6C48ED3FC0725A013F041EC7FC6D7E606D6C15386D6C157860
2016
 
6D6C5D6E14016D5E6D6D1303606E6C49C8FC6E6C5B170E6E6C131E171C6E6C5B6E6C1378
2017
 
17706E6C13F06F5B6E13016EEB83C05FED7FC7DB3FE7C9FC16EFED1FFE5E150F6F5AB3A4
2018
 
ED1FFC020FB512FCA3413E7FBD44>I<EAFFFCA4EAF000B3B3B3B3ABEAFFFCA40E5B77C3
2019
 
19>91 D<486C13C00003130101001380481303000EEB070048130E0018130C0038131C00
2020
 
3013180070133800601330A300E01370481360A400CFEB678039FFC07FE001E013F0A300
2021
 
7F133FA2003F131F01C013E0390F0007801C1C73BE2D>I<EAFFFCA4EA003CB3B3B3B3AB
2022
 
EAFFFCA40E5B7FC319>I<EA0180120313005A120E5A12181238123012701260A312E05A
2023
 
A412CFEAFFC013E0A3127FA2123F13C0EA0F000B1C7ABE19>96 D<EB0FF8EBFFFE3903F0
2024
 
1F8039078007E0000F6D7E9038E001F8D81FF07F6E7EA3157F6C5AEA0380C8FCA4EC1FFF
2025
 
0103B5FC90381FF87FEB7F803801FC00EA07F8EA0FE0485A485AA248C7FCEE038012FEA3
2026
 
15FFA3007F5BEC03BF3B3F80071F8700261FC00E13CF3A07F03C0FFE3A01FFF807FC3A00
2027
 
3FC001F0292A7DA82D>I<EA01FC12FFA3120712031201B1EC03FC91381FFF8091387C07
2028
 
E09039FDE001F09039FFC000FC4A137E91C77E49158049141F17C0EE0FE0A217F0A21607
2029
 
17F8AA17F0A2160FA217E0161F17C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E0
2030
 
03F09039E0780FC09026C03FFFC7FCC7EA07F82D407EBE33>I<49B4FC010F13E090383F
2031
 
00F8017C131E4848131F4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7
2032
 
FCA290C9FC5AAB6C7EA3003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C
2033
 
131E6C6C137890383F01F090380FFFC0D901FEC7FC222A7DA828>I<ED01FC15FFA31507
2034
 
15031501B114FF010713E190381F80F990387E003D49131FD803F81307485A4913034848
2035
 
1301121F123F5B127FA290C7FCA25AAA7E7FA2123FA26C7E000F14037F000714076C6C49
2036
 
7E6C6C497ED8007C017913F890383F01F190380FFFC1903A01FE01FC002D407DBE33>I<
2037
 
EB01FE90380FFFC090383F03F09038FC01F848486C7E4848137E48487F000F158049131F
2038
 
001F15C04848130FA2127F16E090C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E
2039
 
1501000F15C06C6C13036DEB07806C6C1400C66C131E017E5B90381F80F8903807FFE001
2040
 
0090C7FC232A7EA828>I<EC1FC0EC7FF8903801F83C903807E07E90380FC0FFEB1FC1EB
2041
 
3F811401137FEC00FE01FE137C1500AEB6FCA3C648C7FCB3AE487E007F13FFA320407EBF
2042
 
1C>I<167C903903F801FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07
2043
 
E000FC0600000F6EC7FC49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F8
2044
 
03E03903FE0FC026071FFFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E
2045
 
7E6C15E06C810003813A0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C15
2046
 
3E007E157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313
2047
 
C0293D7EA82D>I<EA01FC12FFA3120712031201B1EC01FE913807FFC091381E07E09138
2048
 
7803F09138E001F8D9FDC07F148001FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13
2049
 
FCA32E3F7DBE33>I<EA01E0EA07F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA31207
2050
 
12031201B3AC487EB512F0A3143E7DBD1A>I<1478EB01FEA2EB03FFA4EB01FEA2EB0078
2051
 
1400AC147FEB7FFFA313017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01
2052
 
387C03F0381E07C0380FFF803801FC00185185BD1C>I<EA01FC12FFA3120712031201B2
2053
 
92B51280A392383FFC0016E0168093C7FC153C5D5D4A5AEC07C04A5A4AC8FC143E147F4A
2054
 
7E13FD9038FFDFC0EC9FE0140F496C7E01FC7F496C7E1401816E7E81826F7E151F826F7E
2055
 
A282486C14FEB539F07FFFE0A32B3F7EBE30>I<EA01FC12FFA3120712031201B3B3B148
2056
 
7EB512F8A3153F7DBE1A>I<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03
2057
 
F0913B7803F03C01F80007903BE001F87000FC2603F9C06D487F000101805C01FBD900FF
2058
 
147F91C75B13FF4992C7FCA2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287D
2059
 
A74C>I<3901F801FE00FF903807FFC091381E07E091387803F000079038E001F82603F9
2060
 
C07F0001138001FB6D7E91C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733
2061
 
>I<14FF010713E090381F81F890387E007E01F8131F4848EB0F804848EB07C04848EB03
2062
 
E0000F15F04848EB01F8A2003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA300
2063
 
1F15F86C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90
2064
 
380FFFF0010090C7FC282A7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FD
2065
 
E003F03A03FFC001FC6C496C7E91C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AA
2066
 
EE0FF0A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC78
2067
 
0FC0DA3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C
2068
 
90381F80F090397F00387C01FC131CD803F8130E4848EB0FFC150748481303121F485A15
2069
 
01485AA448C7FCAA6C7EA36C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E13
2070
 
7990383F81F190380FFFC1903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901
2071
 
F807E000FFEB1FF8EC787CECE1FE3807F9C100031381EA01FB1401EC00FC01FF13304913
2072
 
00A35BB3A5487EB512FEA31F287EA724>I<90383FC0603901FFF8E03807C03F381F000F
2073
 
003E1307003C1303127C0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13
2074
 
FE6C7F6C1480000114C0D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A2
2075
 
7E15F07E14016C14E06CEB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824
2076
 
>I<131CA6133CA4137CA213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215
2077
 
E0A912009038FE01C0A2EB7F03013F138090381F8700EB07FEEB01F81B397EB723>I<D8
2078
 
01FC14FE00FF147FA3000714030003140100011400B3A51501A31503120015076DEB06FF
2079
 
017E010E13806D4913FC90381FC078903807FFE00100903880FE002E297DA733>I<B539
2080
 
E00FFFE0A32707FE000313006C48EB00FC5E00015D7F00005DA26D13016D5CA26D6C485A
2081
 
A2ECC007011F91C7FCA290380FE00EA2ECF01E0107131CA26D6C5AA2ECFC7801011370A2
2082
 
ECFEF001005BA2EC7FC0A36E5AA26EC8FCA3140E2B287EA630>I<B53BC3FFFE03FFF8A3
2083
 
290FFE003FE00013C06C486D48EB3F806C4817006D010F141E00016F131C15076D163C00
2084
 
004A6C1338A2017F5E4B7E151DD93F805DED3DFC1538D91FC04A5AED78FE9238707E03D9
2085
 
0FE0017F5BEDE03F02F0140701070387C7FC9138F1C01F02F9148F010315CE9138FB800F
2086
 
02FF14DE6D15FCED00076D5DA24A1303027E5CA2027C1301023C5C023813003D287EA642
2087
 
>I<B539F01FFFE0A30003D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F
2088
 
49C7FC90380FE00EECF01E6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81
2089
 
147BECF1FC903801E1FEECC0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01
2090
 
FC80486C80000F4A7EB539803FFFF8A32D277FA630>I<B539E00FFFE0A32707FE000313
2091
 
006C48EB01FC6F5A00015D7F00005DA2017F495AA2EC8003013F5CA26D6C48C7FCA26E5A
2092
 
010F130EA26D6C5AA2ECF83C01031338A26D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36E
2093
 
C8FCA2140EA2141E141C143C1438A2147800181370127EB45BA2495AA248485AD87E07C9
2094
 
FCEA780EEA3C3CEA1FF8EA07E02B3A7EA630>I<001FB61280A2EBE0000180140049485A
2095
 
001E495A121C4A5A003C495A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C
2096
 
495A90393FC00380A2EB7F80EBFF005A5B484813071207491400485A48485BA248485B48
2097
 
48137F00FF495A90B6FCA221277EA628>I<B812F0A22C0280982D>I<BE12C0A25A028098
2098
 
5B>I E
 
1983
00A31870A418381638A41800A21678A216F81501150791B5FCA3EC8007150115001678A2
 
1984
1638A2180EA3181C93C7FCA4183C1838A21878A318F8EF01F0A21707170F173F48486CEB
 
1985
03FFB912E0A3373E7DBD3E>I<B91280A300019038C000036C6C48EB007FEF1FC0170F17
 
1986
07A21703A31701A4EF00E0A21638A31800A31678A216F81501150791B5FCA3EC80071501
 
1987
15001678A21638A693C8FCAF3801FFE0B612F0A3333E7DBD3B>I<DB3FE0130C912603FF
 
1988
FE131C021F9038FF803C913A7FF00FC07C9139FF0001F0D903FC90380078FC4948143DD9
 
1989
1FE0141F4948140F4948140701FF15034890C8FC491501485A000716005B000F177C5B00
 
1990
1F173CA2485AA2181C127FA25B95C7FC12FFAB041FB512F0127FA26D9139000FFE00EF03
 
1991
FC123FA27F121FA26C7EA212077F12036C7E7F6C7F6D6C14076D7E6D6C140FD907F8141E
 
1992
D903FEEC3C7C902600FF80EBF83C913A7FF007F01C021FB5EAC00C020391C8FC9138003F
 
1993
F03C427BBF47>I<B6D8C01FB512F8A3000101E0C7383FFC0026007F80EC0FF0B3A691B7
 
1994
FCA30280C7120FB3A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44>I<B612F0A3C6
 
1995
EBF000EB3FC0B3B3B2EBFFF0B612F0A31C3E7EBD21>I<011FB512FCA3D9000713006E5A
 
1996
1401B3B3A6123FEA7F80EAFFC0A44A5A1380D87F005B007C130700385C003C495A6C495A
 
1997
6C495A2603E07EC7FC3800FFF8EB3FC026407CBD2F>I<B600C090387FFFFCA3000101E0
 
1998
C7000F138026007F80913807FE0018F818E0604D5A4DC7FC173E5F5F4C5A4C5A4C5A4C5A
 
1999
4CC8FC163E5E5E4B5A4B5AED07804B7E151F4B7E4B7E15FF913881EFF8913883C7FCEC87
 
2000
8791388F03FE91389E01FF14BCDAF8007F4A6D7E5C4A6D7E4A6D7EA2707E707EA2707E70
 
2001
7EA2707F717E84173F717E717EA2717E848419802601FFE04A13C0B600C090B6FCA3403E
 
2002
7DBD47>I<B612F8A3000101E0C9FC38007F80B3B0EF0380A517071800A45FA35FA25F5F
 
2003
5F4C5A160748486C133FB8FCA3313E7DBD39>I<B500C093B512C0A300016D4BEBE000D8
 
2004
007F1880D977F0ED03BFA3D973F8ED073FA3D971FC150EA2D970FE151CA3027F1538A36E
 
2005
6C1470A36E6C14E0A26E6CEB01C0A36E6CEB0380A36E6CEB0700A26E6C130EA36E6C5BA3
 
2006
037F5BA26F6C5AA36F6C5AA392380FE1C0A3923807F380A26FB4C7FCA36F5AA213F8486C
 
2007
6D5AD807FFEFFFE0B500F80178017FEBFFC0A34A3E7CBD53>I<B56C91B512F88080D800
 
2008
7F030713006EEC01FC6E6E5A1870EB77FCEB73FEA2EB71FF01707FA26E7E6E7EA26E7E6E
 
2009
7EA26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2EE7FC0
 
2010
EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A2177F173FA2171F170FA217
 
2011
0701F81503487ED807FF1501B500F81400A218703D3E7DBD44>I<ED7FE0913807FFFE91
 
2012
391FC03F8091397E0007E04948EB03F8D907F0EB00FE4948147F49486E7E49486E7E49C8
 
2013
6C7E01FE6F7E00018349150300038348486F7EA248486F7EA2001F188049167F003F18C0
 
2014
A3007F18E049163FA300FF18F0AC007F18E06D167FA4003F18C0A26C6CEEFF80A36C6C4B
 
2015
1300A26C6C4B5A00035F6D150700015F6C6C4B5A6D5E6D6C4A5A6D6C4A5A6D6C4AC7FC6D
 
2016
6C14FED901FCEB03F8D9007FEB0FE091391FC03F80912607FFFEC8FC9138007FE03C427B
 
2017
BF47>I<B712F8EEFF8017E000019039C0003FF86C6C48EB07FCEE01FE707EEF7F80EF3F
 
2018
C018E0A2EF1FF0A218F8A818F0A2EF3FE0A218C0EF7F80EFFF004C5AEE07FCEE3FF091B6
 
2019
12C04CC7FC0280C9FCB3A73801FFE0B612C0A3353E7DBD3E>I<ED7FE0913807FFFE9139
 
2020
1FC03F8091397F000FE0D901FCEB03F8D907F0EB00FE4948147F49486E7E49486E7E49C8
 
2021
6C7E498248486F7E49150300038348486F7EA2000F834981001F1880A24848EE7FC0A300
 
2022
7F18E0A249163FA200FF18F0AC007F18E0A26D167FA3003F18C0A26C6CEEFF80A3000F18
 
2023
006D5D0007DA0F805B6C6C90393FE003FCED70706C6C496C485A6C6C48486C485A017FD9
 
2024
800E5BD93F819038061FC0D91FC19038073F80D90FE14AC7FCD907F1EB03FE902601FDC0
 
2025
13F8903A007EE007E091271FF03FC013180207B5FC9139007FE1E0DB0001143883711378
 
2026
A2706C13F0EFFF0318FFA27113E0A37113C0711380711300715AEF01F83D527BBF47>I<
 
2027
B712C016FCEEFF800001D9C00013E06C6C48EB1FF0EE07FCEE01FE707E84717EA2717EA2
 
2028
84A760177F606017FF95C7FCEE01FCEE07F8EE1FE0EEFF8091B500FCC8FC16F091388001
 
2029
FCED003FEE1FC0707E707E83160383160183A383A484A4F0C004190EA28218E0057F131E
 
2030
2601FFE0161CB600C0EB3FF094381FF83805071370CA3801FFE09438003F803F407DBD43
 
2031
>I<D907FC131890391FFF8038017FEBE0783901FC03F83A03F0007CF8D807C0133F4848
 
2032
130F001F140748C7FC003E1403007E1401A2007C140012FC1678A46C1538A27EA26C6C14
 
2033
007F7FEA3FF8EBFF806C13F86CEBFF806C14F06C14FC6C14FF6C15C0013F14E0010714F0
 
2034
EB007F020713F89138007FFC150FED07FE15031501ED00FFA200E0157FA3163FA27EA316
 
2035
3E7E167E6C157C6C15FC6C15F86D13016DEB03F06DEB07E0D8F9FCEB0FC03AF07F803F80
 
2036
90391FFFFE00D8E00713F839C0007FC028427BBF33>I<003FB91280A3903AF0007FE001
 
2037
018090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00E0A5C816
 
2038
00B3B14B7E4B7E0107B612FEA33B3D7DBC42>I<B600C090B512F8A3000101E0C7000713
 
2039
0026007F80EC01FC715A1870B3B3A4013F16F06E5DA21701011F5E80010F15036E4A5A01
 
2040
0793C7FC6D6C5C6D6C141E6D6C5C027F14F86E6C485A91390FF00FE00203B51280020049
 
2041
C8FCED1FF03D407DBD44>I<B691380FFFFEA3000301E0020113E06C01809138007F806C
 
2042
EF3F00017F163E181C6E153C013F1638A26E1578011F1670A26D6C5DA26E140101075EA2
 
2043
6E140301035EA26D6C4AC7FCA2806D150EA26F131E027F141CA26F133C023F1438A26E6C
 
2044
5BA26F13F0020F5CA2EDF80102075CA26E6C485AA2EDFE07020191C8FCA26F5A6E130EA2
 
2045
ED7F9CA216DCED3FF8A36F5AA36F5AA26F5AA36F5A3F407EBD44>I<B500FE017FB5D880
 
2046
07B5FCA3000301C0010101E0C713F86C90C849EC3FE07148EC0F807E7215006E143F017F
 
2047
190E84A26D6C60A24D7E6D6C60A2EFE7F86D6C60A2933801C3FC6E18F001076104037F6E
 
2048
0281140101036104077F17006D6C4D5AA2040EEB7F806D6C4DC7FCA24CEB3FC0DA7F8016
 
2049
0EA24CEB1FE003C0161E023F171C047814F0DBE070010F133C021F173804F014F84C1307
 
2050
DA0FF05EA2DBF1C0EB03FCDA07F95EA2DBFB80EB01FEDA03FF6F5AA293C8FCA26E5FA24B
 
2051
157F020094C8FCA24B81037C153EA20378151E0338151C58407EBD5D>I<007FB5D8C003
 
2052
B512E0A3C649C7EBFC00D93FF8EC3FE06D48EC1F806D6C92C7FC171E6D6C141C6D6C143C
 
2053
5F6D6C14706D6D13F04C5ADA7FC05B023F13036F485ADA1FF090C8FC020F5BEDF81E9138
 
2054
07FC1C163C6E6C5A913801FF7016F06E5B6F5AA26F7E6F7EA28282153FED3BFEED71FF15
 
2055
F103E07F913801C07F0203804B6C7EEC07004A6D7E020E6D7E5C023C6D7E02386D7E1478
 
2056
4A6D7E4A6D7F130149486E7E4A6E7E130749C86C7E496F7E497ED9FFC04A7E00076DEC7F
 
2057
FFB500FC0103B512FEA33F3E7EBD44>I<B66C0103B51280A3000101F0C8EBF8006C6C48
 
2058
ED3FC0725A013F041EC7FC6D7E606D6C15386D6C1578606D6C5D6E14016D5E6D6D130360
 
2059
6E6C49C8FC6E6C5B170E6E6C131E171C6E6C5B6E6C137817706E6C13F06F5B6E13016EEB
 
2060
83C05FED7FC7DB3FE7C9FC16EFED1FFE5E150F6F5AB3A4ED1FFC020FB512FCA3413E7FBD
 
2061
44>I<EAFFFCA4EAF000B3B3B3B3ABEAFFFCA40E5B77C319>91 D<486C13C00003130101
 
2062
001380481303000EEB070048130E0018130C0038131C003013180070133800601330A300
 
2063
E01370481360A400CFEB678039FFC07FE001E013F0A3007F133FA2003F131F01C013E039
 
2064
0F0007801C1C73BE2D>I<EAFFFCA4EA003CB3B3B3B3ABEAFFFCA40E5B7FC319>I<EA0180
 
2065
120313005A120E5A12181238123012701260A312E05AA412CFEAFFC013E0A3127FA2123F
 
2066
13C0EA0F000B1C7ABE19>96 D<EB0FF8EBFFFE3903F01F8039078007E0000F6D7E9038E0
 
2067
01F8D81FF07F6E7EA3157F6C5AEA0380C8FCA4EC1FFF0103B5FC90381FF87FEB7F803801
 
2068
FC00EA07F8EA0FE0485A485AA248C7FCEE038012FEA315FFA3007F5BEC03BF3B3F80071F
 
2069
8700261FC00E13CF3A07F03C0FFE3A01FFF807FC3A003FC001F0292A7DA82D>I<EA01FC
 
2070
12FFA3120712031201B1EC03FC91381FFF8091387C07E09039FDE001F09039FFC000FC4A
 
2071
137E91C77E49158049141F17C0EE0FE0A217F0A2160717F8AA17F0A2160FA217E0161F17
 
2072
C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E003F09039E0780FC09026C03FFFC7
 
2073
FCC7EA07F82D407EBE33>I<49B4FC010F13E090383F00F8017C131E4848131F4848137F
 
2074
0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3003FEC01
 
2075
C07F001F140316806C6C13076C6C14000003140E6C6C131E6C6C137890383F01F090380F
 
2076
FFC0D901FEC7FC222A7DA828>I<ED01FC15FFA3150715031501B114FF010713E190381F
 
2077
80F990387E003D49131FD803F81307485A49130348481301121F123F5B127FA290C7FCA2
 
2078
5AAA7E7FA2123FA26C7E000F14037F000714076C6C497E6C6C497ED8007C017913F89038
 
2079
3F01F190380FFFC1903A01FE01FC002D407DBE33>I<EB01FE90380FFFC090383F03F090
 
2080
38FC01F848486C7E4848137E48487F000F158049131F001F15C04848130FA2127F16E090
 
2081
C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E1501000F15C06C6C13036DEB0780
 
2082
6C6C1400C66C131E017E5B90381F80F8903807FFE0010090C7FC232A7EA828>I<EC1FC0
 
2083
EC7FF8903801F83C903807E07E90380FC0FFEB1FC1EB3F811401137FEC00FE01FE137C15
 
2084
00AEB6FCA3C648C7FCB3AE487E007F13FFA320407EBF1C>I<167C903903F801FF903A1F
 
2085
FF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC0600000F6EC7FC49137E00
 
2086
1F147FA8000F147E6D13FE00075C6C6C485AA23901F803E03903FE0FC026071FFFC8FCEB
 
2087
03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15E06C810003813A0FC0001F
 
2088
FC48C7EA01FE003E140048157E825A82A46C5D007C153E007E157E6C5D6C6C495A6C6C49
 
2089
5AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D7EA82D>I<EA01FC12FFA3
 
2090
120712031201B1EC01FE913807FFC091381E07E091387803F09138E001F8D9FDC07F1480
 
2091
01FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13FCA32E3F7DBE33>I<EA01E0EA07
 
2092
F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA3120712031201B3AC487EB512F0A3143E
 
2093
7DBD1A>I<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC147FEB7FFFA313017F147F
 
2094
B3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03F0381E07C0380FFF803801
 
2095
FC00185185BD1C>I<EA01FC12FFA3120712031201B292B51280A392383FFC0016E01680
 
2096
93C7FC153C5D5D4A5AEC07C04A5A4AC8FC143E147F4A7E13FD9038FFDFC0EC9FE0140F49
 
2097
6C7E01FC7F496C7E1401816E7E81826F7E151F826F7EA282486C14FEB539F07FFFE0A32B
 
2098
3F7EBE30>I<EA01FC12FFA3120712031201B3B3B1487EB512F8A3153F7DBE1A>I<2701F8
 
2099
01FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B7803F03C01F80007903BE001
 
2100
F87000FC2603F9C06D487F000101805C01FBD900FF147F91C75B13FF4992C7FCA2495CB3
 
2101
A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C>I<3901F801FE00FF903807FF
 
2102
C091381E07E091387803F000079038E001F82603F9C07F0001138001FB6D7E91C7FC13FF
 
2103
5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14FF010713E090381F81F89038
 
2104
7E007E01F8131F4848EB0F804848EB07C04848EB03E0000F15F04848EB01F8A2003F15FC
 
2105
A248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6CEB07E06C
 
2106
6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFFF0010090C7FC282A7EA82D>
 
2107
I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F03A07FFC001FC6C496C7E6C90
 
2108
C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1FE0A2EE3FC06D1580
 
2109
EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0DA3FFFC7FCEC07F891C9FCAD
 
2110
487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C90381F80F090397F00387C01FC13
 
2111
1CD803F8130E4848EB0FFC150748481303121F485A1501485AA448C7FCAA6C7EA36C7EA2
 
2112
001F14036C7E15076C6C130F6C7E6C6C133DD8007E137990383F81F190380FFFC1903801
 
2113
FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807E000FFEB1FF8EC787CECE1FE
 
2114
3807F9C100031381EA01FB1401EC00FC01FF1330491300A35BB3A5487EB512FEA31F287E
 
2115
A724>I<90383FC0603901FFF8E03807C03F381F000F003E1307003C1303127C00781301
 
2116
12F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F6C1480000114C0D8003F13
 
2117
E0010313F0EB001FEC0FF800E01303A214017E1400A27E15F07E14016C14E06CEB03C090
 
2118
3880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<131CA6133CA4137CA213FCA2
 
2119
120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A912009038FE01C0A2EB7F0301
 
2120
3F138090381F8700EB07FEEB01F81B397EB723>I<D801FC14FE00FF147FA30007140300
 
2121
03140100011400B3A51501A31503120015076DEB06FF017E010E13806D4913FC90381FC0
 
2122
78903807FFE00100903880FE002E297DA733>I<B539E00FFFE0A32707FE000313006C48
 
2123
EB00FC5E00015D7F00005DA26D13016D5CA26D6C485AA2ECC007011F91C7FCA290380FE0
 
2124
0EA2ECF01E0107131CA26D6C5AA2ECFC7801011370A2ECFEF001005BA2EC7FC0A36E5AA2
 
2125
6EC8FCA3140E2B287EA630>I<B53BC3FFFE03FFF8A3290FFE003FE00013C06C486D48EB
 
2126
3F806C4817006D010F141E00016F131C15076D163C00004A6C1338A2017F5E4B7E151DD9
 
2127
3F805DED3DFC1538D91FC04A5AED78FE9238707E03D90FE0017F5BEDE03F02F014070107
 
2128
0387C7FC9138F1C01F02F9148F010315CE9138FB800F02FF14DE6D15FCED00076D5DA24A
 
2129
1303027E5CA2027C1301023C5C023813003D287EA642>I<B539F01FFFE0A30003D9C00F
 
2130
1300C690388007F8D97F0013E002805BD93FC05B011F49C7FC90380FE00EECF01E6D6C5A
 
2131
01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147BECF1FC903801E1FEECC0FF01
 
2132
037F49486C7ED90F007F011E6D7E013E130F496D7E01FC80486C80000F4A7EB539803FFF
 
2133
F8A32D277FA630>I<B539E00FFFE0A32707FE000313006C48EB01FC6F5A00015D7F0000
 
2134
5DA2017F495AA2EC8003013F5CA26D6C48C7FCA26E5A010F130EA26D6C5AA2ECF83C0103
 
2135
1338A26D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36EC8FCA2140EA2141E141C143C1438
 
2136
A2147800181370127EB45BA2495AA248485AD87E07C9FCEA780EEA3C3CEA1FF8EA07E02B
 
2137
3A7EA630>I<001FB61280A2EBE0000180140049485A001E495A121C4A5A003C495A141F
 
2138
00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A90393FC00380A2EB7F80EBFF
 
2139
005A5B484813071207491400485A48485BA248485B4848137F00FF495A90B6FCA221277E
 
2140
A628>I<B812F0A22C0280982D>I<BE12C0A25A0280985B>I E
2099
2141
%EndDVIPSBitmapFont
2100
 
%DVIPSBitmapFont: Fv cmbx12 20.736 13
2101
 
/Fv 13 118 df<13FF000313E0487F001F13FC487F805A1580B612C0A315E0A315F0A37E
 
2142
%DVIPSBitmapFont: Fw cmbx12 20.736 13
 
2143
/Fw 13 118 df<13FF000313E0487F001F13FC487F805A1580B612C0A315E0A315F0A37E
2102
2144
A27EA27E000713F36C13E3C61383EB00031407A215E0A3140FA215C0141FA2EC3F80A214
2103
2145
7F15005C5C1301495A5C1307495A495A133F495A495A4890C7FC485A485A485A5B6C5AEA
2104
2146
01801C3A72F736>39 D<BF12FCA48AA4C7003F0280C8123F1B01F3003F1C07767F1C0089
2169
2211
%%Feature: *Resolution 600dpi
2170
2212
TeXDict begin
2171
2213
%%PaperSize: A4
2172
 
 
 
2214
 end
2173
2215
%%EndSetup
2174
2216
%%Page: 1 1
2175
 
1 0 bop 150 2414 a Fv(FFTW)64 b(User's)h(Man)-5 b(ual)p
2176
 
150 2481 3600 34 v 2348 2577 a Fu(F)d(or)32 b(v)m(ersion)d(2.1.3,)k(7)e
2177
 
(No)m(v)m(em)m(b)s(er)g(1999)150 4958 y Ft(Matteo)46
 
2217
TeXDict begin 1 0 bop 150 2414 a Fw(FFTW)64 b(User's)h(Man)-5
 
2218
b(ual)p 150 2481 3600 34 v 2449 2577 a Fv(F)d(or)32 b(v)m(ersion)d
 
2219
(2.1.5,)k(16)e(Marc)m(h)g(2003)150 4958 y Fu(Matteo)46
2178
2220
b(F)-11 b(rigo)150 5091 y(Stev)l(en)46 b(G.)e(Johnson)p
2179
 
150 5141 3600 17 v eop
 
2221
150 5141 3600 17 v eop end
2180
2222
%%Page: 2 2
2181
 
2 1 bop 150 4371 a Fu(Cop)m(yrigh)m(t)602 4368 y(c)577
2182
 
4371 y Fs(\015)30 b Fu(1997{1999)35 b(Massac)m(h)m(usetts)d(Institute)e
2183
 
(of)g(T)-8 b(ec)m(hnology)g(.)150 4505 y(P)m(ermission)30
 
2223
TeXDict begin 2 1 bop 150 4371 a Fv(Cop)m(yrigh)m(t)602
 
2224
4368 y(c)577 4371 y Ft(\015)30 b Fv(1997{1999)35 b(Massac)m(h)m(usetts)
 
2225
d(Institute)e(of)g(T)-8 b(ec)m(hnology)g(.)150 4505 y(P)m(ermission)30
2184
2226
b(is)i(gran)m(ted)h(to)f(mak)m(e)i(and)d(distribute)f(v)m(erbatim)i
2185
2227
(copies)g(of)g(this)f(man)m(ual)h(pro)m(vided)f(the)150
2186
2228
4615 y(cop)m(yrigh)m(t)g(notice)f(and)g(this)f(p)s(ermission)f(notice)i
2197
2239
(di\014ed)d(v)m(ersions,)j(except)g(that)h(this)d(p)s(ermission)f
2198
2240
(notice)150 5322 y(ma)m(y)31 b(b)s(e)f(stated)h(in)e(a)i(translation)e
2199
2241
(appro)m(v)m(ed)i(b)m(y)f(the)h(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8
2200
 
b(oundation.)p eop
 
2242
b(oundation.)p eop end
2201
2243
%%Page: 1 3
2202
 
1 2 bop 150 -116 a Fu(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2591
2203
 
b(1)150 299 y Fr(1)80 b(In)l(tro)t(duction)275 518 y
2204
 
Fu(This)33 b(man)m(ual)i(do)s(cumen)m(ts)h(v)m(ersion)f(2.1.3)j(of)d
2205
 
(FFTW,)i(the)f Fq(F)-7 b(astest)39 b(F)-7 b(ourier)38
2206
 
b(T)-7 b(r)i(ansform)40 b(in)e(the)150 628 y(West)p Fu(.)56
2207
 
b(FFTW)36 b(is)e(a)i(comprehensiv)m(e)f(collection)g(of)h(fast)g(C)f
2208
 
(routines)f(for)h(computing)g(the)g(discrete)150 737
2209
 
y(F)-8 b(ourier)34 b(transform)g(\(DFT\))i(in)d(one)i(or)g(more)g
 
2244
TeXDict begin 1 2 bop 150 -116 a Fv(Chapter)30 b(1:)41
 
2245
b(In)m(tro)s(duction)2591 b(1)150 299 y Fs(1)80 b(In)l(tro)t(duction)
 
2246
275 518 y Fv(This)33 b(man)m(ual)i(do)s(cumen)m(ts)h(v)m(ersion)f
 
2247
(2.1.5)j(of)d(FFTW,)i(the)f Fr(F)-7 b(astest)39 b(F)-7
 
2248
b(ourier)38 b(T)-7 b(r)i(ansform)40 b(in)e(the)150 628
 
2249
y(West)p Fv(.)56 b(FFTW)36 b(is)e(a)i(comprehensiv)m(e)f(collection)g
 
2250
(of)h(fast)g(C)f(routines)f(for)h(computing)g(the)g(discrete)150
 
2251
737 y(F)-8 b(ourier)34 b(transform)g(\(DFT\))i(in)d(one)i(or)g(more)g
2210
2252
(dimensions,)e(of)i(b)s(oth)f(real)g(and)g(complex)h(data,)i(and)150
2211
2253
847 y(of)47 b(arbitrary)e(input)f(size.)89 b(FFTW)47
2212
2254
b(also)f(includes)e(parallel)g(transforms)i(for)g(b)s(oth)g(shared-)g
2215
2257
(familiar)d(with)150 1066 y(the)28 b(prop)s(erties)d(and)i(uses)g(of)g
2216
2258
(the)h(DFT)g(that)g(are)f(relev)-5 b(an)m(t)28 b(to)g(her)f
2217
2259
(application.)38 b(Otherwise,)27 b(see)h(e.g.)150 1176
2218
 
y Fp(The)f(F)-8 b(ast)29 b(F)-8 b(ourier)27 b(T)-8 b(ransform)27
2219
 
b Fu(b)m(y)g(E.)g(O.)h(Brigham)f(\(Pren)m(tice-Hall,)h(Englew)m(o)s(o)s
 
2260
y Fq(The)f(F)-8 b(ast)29 b(F)-8 b(ourier)27 b(T)-8 b(ransform)27
 
2261
b Fv(b)m(y)g(E.)g(O.)h(Brigham)f(\(Pren)m(tice-Hall,)h(Englew)m(o)s(o)s
2220
2262
(d)f(Cli\013s,)f(NJ,)i(1974\).)150 1285 y(Our)h(w)m(eb)h(page)i(\()p
2221
 
Fo(http://www.fftw.org)p Fu(\))25 b(also)31 b(has)f(links)e(to)j
 
2263
Fp(http://www.fftw.org)p Fv(\))25 b(also)31 b(has)f(links)e(to)j
2222
2264
(FFT-related)g(information)e(online.)275 1417 y(FFTW)46
2223
2265
b(is)e(usually)f(faster)j(\(and)f(sometimes)h(m)m(uc)m(h)f(faster\))i
2224
2266
(than)e(all)f(other)i(freely-a)m(v)-5 b(ailable)150 1526
2228
2270
(the)i(FFT)g(co)s(des)g(in)e(Sun's)g(P)m(erformance)i(Library)e(and)h
2229
2271
(IBM's)150 1745 y(ESSL)k(library)-8 b(,)41 b(whic)m(h)f(are)h(targeted)
2230
2272
h(at)f(sp)s(eci\014c)e(mac)m(hines.)71 b(Moreo)m(v)m(er,)45
2231
 
b(FFTW's)d(p)s(erformance)150 1855 y(is)e Fq(p)-5 b(ortable)p
2232
 
Fu(.)73 b(Indeed,)43 b(FFTW)e(is)f(unique)e(in)i(that)h(it)f
 
2273
b(FFTW's)d(p)s(erformance)150 1855 y(is)e Fr(p)-5 b(ortable)p
 
2274
Fv(.)73 b(Indeed,)43 b(FFTW)e(is)f(unique)e(in)i(that)h(it)f
2233
2275
(automatically)g(adapts)h(itself)f(to)h(y)m(our)f(ma-)150
2234
2276
1965 y(c)m(hine,)47 b(y)m(our)c(cac)m(he,)49 b(the)43
2235
2277
b(size)h(of)f(y)m(our)h(memory)-8 b(,)47 b(the)d(n)m(um)m(b)s(er)e(of)i
2241
2283
b(transform)150 2293 y(co)s(des)35 b(has)f(b)s(een)g(made.)53
2242
2284
b(The)34 b(results)f(are)i(a)m(v)-5 b(ailable)34 b(on)g(the)h(W)-8
2243
2285
b(eb)35 b(at)g(the)g(b)s(enc)m(hFFT)f(home)g(page)150
2244
 
2403 y(\()p Fo(http://theory.lcs.mit.edu/)o(~be)o(nchf)o(ft)p
2245
 
Fu(\).)275 2534 y(In)27 b(order)g(to)i(use)e(FFTW)i(e\013ectiv)m(ely)-8
 
2286
2403 y(\()p Fp(http://theory.lcs.mit.edu/)o(~be)o(nchf)o(ft)p
 
2287
Fv(\).)275 2534 y(In)27 b(order)g(to)i(use)e(FFTW)i(e\013ectiv)m(ely)-8
2246
2288
b(,)30 b(y)m(ou)e(need)f(to)i(understand)d(one)i(basic)f(concept)i(of)f
2247
2289
(FFTW's)150 2644 y(in)m(ternal)35 b(structure.)60 b(FFTW)37
2248
2290
b(do)s(es)f(not)h(used)f(a)h(\014xed)f(algorithm)g(for)h(computing)e
2251
2293
(order)g(to)150 2863 y(ac)m(hiev)m(e)27 b(b)s(est)e(p)s(erformance.)38
2252
2294
b(Hence,)27 b(the)f(computation)f(of)h(the)f(transform)g(is)g(split)e
2253
2295
(in)m(to)i(t)m(w)m(o)i(phases.)150 2973 y(First,)k(FFTW's)h
2254
 
Fp(planner)j Fu(is)c(called,)f(whic)m(h)g(\\learns")h(the)g(fastest)h
 
2296
Fq(planner)j Fv(is)c(called,)f(whic)m(h)g(\\learns")h(the)g(fastest)h
2255
2297
(w)m(a)m(y)g(to)g(compute)f(the)h(transform)150 3082
2256
2298
y(on)j(y)m(our)f(mac)m(hine.)54 b(The)34 b(planner)f(pro)s(duces)g(a)i
2257
 
(data)g(structure)g(called)e(a)j Fp(plan)d Fu(that)i(con)m(tains)g
 
2299
(data)g(structure)g(called)e(a)j Fq(plan)d Fv(that)i(con)m(tains)g
2258
2300
(this)150 3192 y(information.)61 b(Subsequen)m(tly)-8
2259
 
b(,)38 b(the)g(plan)f(is)g(passed)g(to)h(FFTW's)h Fp(executor)p
2260
 
Fu(,)i(along)c(with)g(an)g(arra)m(y)150 3302 y(of)c(input)d(data.)48
 
2301
b(,)38 b(the)g(plan)f(is)g(passed)g(to)h(FFTW's)h Fq(executor)p
 
2302
Fv(,)i(along)c(with)g(an)g(arra)m(y)150 3302 y(of)c(input)d(data.)48
2261
2303
b(The)32 b(executor)i(computes)f(the)f(actual)h(transform,)g(as)g
2262
2304
(dictated)f(b)m(y)h(the)g(plan.)45 b(The)150 3411 y(plan)39
2263
2305
b(can)h(b)s(e)g(reused)f(as)i(man)m(y)f(times)g(as)g(needed.)70
2291
2333
s(duce)e(fast)h(C)g(programs)f(for)h(an)m(y)h(particular)d(arra)m(y)j
2292
2334
(size)f(y)m(ou)150 4989 y(ma)m(y)25 b(care)g(ab)s(out.)38
2293
2335
b(F)-8 b(or)25 b(example,)g(if)e(y)m(ou)i(need)f(transforms)f(of)h
2294
 
(size)g(513)j(=)e(19)8 b Fs(\001)g Fu(3)2946 4956 y Fn(3)2984
2295
 
4989 y Fu(,)26 b(y)m(ou)e(can)h(customize)150 5099 y(FFTW)31
 
2336
(size)g(513)j(=)e(19)8 b Ft(\001)g Fv(3)2946 4956 y Fo(3)2984
 
2337
4989 y Fv(,)26 b(y)m(ou)e(can)h(customize)150 5099 y(FFTW)31
2296
2338
b(to)g(supp)s(ort)e(the)h(factor)i(19)f(e\016cien)m(tly)-8
2297
2339
b(.)275 5230 y(FFTW)33 b(can)f(exploit)g(m)m(ultiple)e(pro)s(cessors)i
2298
2340
(if)f(y)m(ou)i(ha)m(v)m(e)g(them.)47 b(FFTW)33 b(comes)g(with)f(a)g
2299
2341
(shared-)150 5340 y(memory)i(implemen)m(tation)f(on)h(top)g(of)g(POSIX)
2300
2342
g(\(and)f(similar\))f(threads,)j(as)g(w)m(ell)e(as)h(a)h(distributed-)p
2301
 
eop
 
2343
eop end
2302
2344
%%Page: 2 4
2303
 
2 3 bop 150 -116 a Fu(2)3277 b(FFTW)150 299 y(memory)23
2304
 
b(implemen)m(tation)e(based)i(on)g(MPI.)g(W)-8 b(e)24
2305
 
b(also)e(pro)m(vide)g(an)h(exp)s(erimen)m(tal)f(parallel)f(implemen-)
2306
 
150 408 y(tation)34 b(written)f(in)g(Cilk,)g Fq(the)j(sup)-5
2307
 
b(erior)37 b(pr)-5 b(o)g(gr)g(amming)40 b(to)-5 b(ol)37
2308
 
b(of)f(choic)-5 b(e)37 b(for)f(discriminating)h(hackers)150
2309
 
518 y Fu(\(Olin)28 b(Shiv)m(ers\).)40 b(\(See)31 b(the)g(Cilk)d(home)i
2310
 
(page)h(\()p Fo(http://supertech.lcs.mit.ed)o(u/ci)o(lk)p
2311
 
Fu(\).\))275 653 y(F)-8 b(or)31 b(more)g(information)e(regarding)g
2312
 
(FFTW,)j(see)f(the)g(pap)s(er,)f(\\The)g(F)-8 b(astest)33
2313
 
b(F)-8 b(ourier)30 b(T)-8 b(ransform)150 762 y(in)29
2314
 
b(the)i(W)-8 b(est,")33 b(b)m(y)e(M.)g(F)-8 b(rigo)32
2315
 
b(and)e(S.)g(G.)i(Johnson,)e(whic)m(h)f(is)h(the)h(tec)m(hnical)g(rep)s
2316
 
(ort)f(MIT-LCS-TR-)150 872 y(728)f(\(Sep.)40 b('97\).)i(See)28
2317
 
b(also,)h(\\FFTW:)g(An)f(Adaptiv)m(e)g(Soft)m(w)m(are)h(Arc)m
2318
 
(hitecture)g(for)f(the)g(FFT,")h(b)m(y)f(M.)150 981 y(F)-8
2319
 
b(rigo)24 b(and)f(S.)g(G.)h(Johnson,)g(whic)m(h)e(app)s(eared)h(in)f
2320
 
(the)i(23rd)g(In)m(ternational)e(Conference)i(on)f(Acoustics,)150
2321
 
1091 y(Sp)s(eec)m(h,)40 b(and)d(Signal)f(Pro)s(cessing)h(\()p
2322
 
Fp(Pro)s(c.)63 b(ICASSP)36 b(1998)47 b Fm(3)p Fu(,)40
2323
 
b(p.)63 b(1381\).)i(The)37 b(co)s(de)h(generator)h(is)150
 
2345
TeXDict begin 2 3 bop 150 -116 a Fv(2)3277 b(FFTW)150
 
2346
299 y(memory)23 b(implemen)m(tation)e(based)i(on)g(MPI.)g(W)-8
 
2347
b(e)24 b(also)e(pro)m(vide)g(an)h(exp)s(erimen)m(tal)f(parallel)f
 
2348
(implemen-)150 408 y(tation)34 b(written)f(in)g(Cilk,)g
 
2349
Fr(the)j(sup)-5 b(erior)37 b(pr)-5 b(o)g(gr)g(amming)40
 
2350
b(to)-5 b(ol)37 b(of)f(choic)-5 b(e)37 b(for)f(discriminating)h
 
2351
(hackers)150 518 y Fv(\(Olin)28 b(Shiv)m(ers\).)40 b(\(See)31
 
2352
b(the)g(Cilk)d(home)i(page)h(\()p Fp(http://supertech.lcs.mit.ed)o
 
2353
(u/ci)o(lk)p Fv(\).\))275 653 y(F)-8 b(or)31 b(more)g(information)e
 
2354
(regarding)g(FFTW,)j(see)f(the)g(pap)s(er,)f(\\The)g(F)-8
 
2355
b(astest)33 b(F)-8 b(ourier)30 b(T)-8 b(ransform)150
 
2356
762 y(in)29 b(the)i(W)-8 b(est,")33 b(b)m(y)e(M.)g(F)-8
 
2357
b(rigo)32 b(and)e(S.)g(G.)i(Johnson,)e(whic)m(h)f(is)h(the)h(tec)m
 
2358
(hnical)g(rep)s(ort)f(MIT-LCS-TR-)150 872 y(728)f(\(Sep.)40
 
2359
b('97\).)i(See)28 b(also,)h(\\FFTW:)g(An)f(Adaptiv)m(e)g(Soft)m(w)m
 
2360
(are)h(Arc)m(hitecture)g(for)f(the)g(FFT,")h(b)m(y)f(M.)150
 
2361
981 y(F)-8 b(rigo)24 b(and)f(S.)g(G.)h(Johnson,)g(whic)m(h)e(app)s
 
2362
(eared)h(in)f(the)i(23rd)g(In)m(ternational)e(Conference)i(on)f
 
2363
(Acoustics,)150 1091 y(Sp)s(eec)m(h,)40 b(and)d(Signal)f(Pro)s(cessing)
 
2364
h(\()p Fq(Pro)s(c.)63 b(ICASSP)36 b(1998)47 b Fn(3)p
 
2365
Fv(,)40 b(p.)63 b(1381\).)i(The)37 b(co)s(de)h(generator)h(is)150
2324
2366
1200 y(describ)s(ed)d(in)g(the)i(pap)s(er)e(\\A)i(F)-8
2325
2367
b(ast)39 b(F)-8 b(ourier)37 b(T)-8 b(ransform)37 b(Compiler",)h(b)m(y)g
2326
2368
(M.)g(F)-8 b(rigo,)40 b(to)e(app)s(ear)f(in)150 1310
2327
 
y(the)25 b Fp(Pro)s(ceedings)f(of)h(the)g(1999)h(A)m(CM)g(SIGPLAN)e
 
2369
y(the)25 b Fq(Pro)s(ceedings)f(of)h(the)g(1999)h(A)m(CM)g(SIGPLAN)e
2328
2370
(Conference)h(on)f(Programming)g(Language)i(Design)150
2329
2371
1420 y(and)36 b(Implemen)m(tation)h(\(PLDI\),)h(A)m(tlan)m(ta,)i
2330
 
(Georgia,)g(Ma)m(y)e(1999)p Fu(.)62 b(These)37 b(pap)s(ers,)h(along)f
 
2372
(Georgia,)g(Ma)m(y)e(1999)p Fv(.)62 b(These)37 b(pap)s(ers,)h(along)f
2331
2373
(with)f(the)150 1529 y(latest)28 b(v)m(ersion)e(of)h(FFTW,)h(the)f(F)
2332
2374
-10 b(A)m(Q,)28 b(b)s(enc)m(hmarks,)f(and)g(other)g(links,)e(are)j(a)m
2333
2375
(v)-5 b(ailable)26 b(at)i(the)f(FFTW)150 1639 y(home)22
2334
 
b(page)h(\()p Fo(http://www.fftw.org)p Fu(\).)33 b(The)21
 
2376
b(page)h(\()p Fp(http://www.fftw.org)p Fv(\).)33 b(The)21
2335
2377
b(curren)m(t)h(v)m(ersion)f(of)h(FFTW)h(incorp)s(orates)e(man)m(y)h(go)
2336
2378
s(o)s(d)150 1748 y(ideas)30 b(from)f(the)i(past)f(thirt)m(y)g(y)m(ears)
2337
2379
h(of)f(FFT)g(literature.)40 b(In)30 b(one)g(w)m(a)m(y)h(or)f(another,)h
2370
2412
(Chapter)g(8)h([License)g(and)f(Cop)m(yrigh)m(t],)i(page)g(63.)52
2371
2413
b(Finally)-8 b(,)33 b(w)m(e)h(thank)g(all)150 3527 y(the)d(p)s(eople)e
2372
2414
(who)h(help)s(ed)e(us)i(in)f(Chapter)h(7)h([Ac)m(kno)m(wledgmen)m(ts],)
2373
 
h(page)f(61.)p eop
 
2415
h(page)f(61.)p eop end
2374
2416
%%Page: 3 5
2375
 
3 4 bop 150 -116 a Fu(Chapter)30 b(2:)41 b(T)-8 b(utorial)2768
2376
 
b(3)150 299 y Fr(2)80 b(T)-13 b(utorial)275 535 y Fu(This)24
2377
 
b(c)m(hapter)i(describ)s(es)f(the)h(basic)f(usage)i(of)f(FFTW,)h(i.e.,)
2378
 
g(ho)m(w)f(to)h(compute)f(the)g(F)-8 b(ourier)26 b(trans-)150
2379
 
645 y(form)33 b(of)h(a)h(single)d(arra)m(y)-8 b(.)52
2380
 
b(This)32 b(c)m(hapter)i(tells)f(the)h(truth,)g(but)g(not)g(the)g
2381
 
Fq(whole)42 b Fu(truth.)50 b(Sp)s(eci\014cally)-8 b(,)150
 
2417
TeXDict begin 3 4 bop 150 -116 a Fv(Chapter)30 b(2:)41
 
2418
b(T)-8 b(utorial)2768 b(3)150 299 y Fs(2)80 b(T)-13 b(utorial)275
 
2419
535 y Fv(This)24 b(c)m(hapter)i(describ)s(es)f(the)h(basic)f(usage)i
 
2420
(of)f(FFTW,)h(i.e.,)g(ho)m(w)f(to)h(compute)f(the)g(F)-8
 
2421
b(ourier)26 b(trans-)150 645 y(form)33 b(of)h(a)h(single)d(arra)m(y)-8
 
2422
b(.)52 b(This)32 b(c)m(hapter)i(tells)f(the)h(truth,)g(but)g(not)g(the)
 
2423
g Fr(whole)42 b Fv(truth.)50 b(Sp)s(eci\014cally)-8 b(,)150
2382
2424
754 y(FFTW)26 b(implemen)m(ts)f(additional)e(routines)i(and)g(\015ags,)
2383
2425
i(pro)m(viding)d(extra)i(functionalit)m(y)-8 b(,)26 b(that)h(are)f(not)
2384
2426
150 864 y(do)s(cumen)m(ted)32 b(here.)45 b(See)33 b(Chapter)e(3)h
2391
2433
(installation)f(of)j(FFTW.)h(In)d(some)i(installations)d(\(particulary)
2392
2434
h(from)150 1328 y(binary)e(pac)m(k)-5 b(ages\),)28 b(the)d(FFTW)g
2393
2435
(header)g(\014les)e(and)i(libraries)c(are)k(pre\014xed)f(with)f(`)p
2394
 
Fo(d)p Fu(')i(or)g(`)p Fo(s)p Fu(')f(to)i(indicate)150
 
2436
Fp(d)p Fv(')i(or)g(`)p Fp(s)p Fv(')f(to)i(indicate)150
2395
2437
1438 y(v)m(ersions)k(in)f(double)g(or)i(single)e(precision,)g(resp)s
2396
2438
(ectiv)m(ely)-8 b(.)42 b(The)30 b(usage)h(of)g(FFTW)g(in)e(that)i(case)
2397
 
h(is)e(the)150 1547 y(same,)e(except)h(that)e Fo(#include)e
2398
 
Fu(directiv)m(es)i(and)f(link)g(commands)g(m)m(ust)h(use)g(the)h
 
2439
h(is)e(the)150 1547 y(same,)e(except)h(that)e Fp(#include)e
 
2440
Fv(directiv)m(es)i(and)f(link)g(commands)g(m)m(ust)h(use)g(the)h
2399
2441
(appropriate)e(pre\014x.)150 1657 y(See)35 b(Section)g(6.3)i
2400
2442
([Installing)c(FFTW)j(in)e(b)s(oth)g(single)g(and)h(double)e
2401
2443
(precision],)i(page)h(57,)i(for)d(more)150 1766 y(information.)275
2423
2465
(ulti-dimensional)d(arra)m(ys)k(in)e(memory)-8 b(.)39
2424
2466
b(Section)27 b(2.6)150 2997 y([W)-8 b(ords)31 b(of)f(Wisdom],)g(page)i
2425
2467
(13)f(sho)m(ws)f(ho)m(w)g(y)m(ou)h(can)g(sa)m(v)m(e)h(FFTW's)f(plans)e
2426
 
(for)h(future)f(use.)150 3257 y Ft(2.1)68 b(Complex)46
 
2468
(for)h(future)f(use.)150 3257 y Fu(2.1)68 b(Complex)46
2427
2469
b(One-dimensional)g(T)-11 b(ransforms)45 b(T)-11 b(utorial)275
2428
 
3450 y Fu(The)29 b(basic)h(usage)h(of)g(FFTW)g(is)e(simple.)39
 
2470
3450 y Fv(The)29 b(basic)h(usage)h(of)g(FFTW)g(is)e(simple.)39
2429
2471
b(A)30 b(t)m(ypical)g(call)g(to)h(FFTW)g(lo)s(oks)f(lik)m(e:)390
2430
 
3579 y Fo(#include)46 b(<fftw.h>)390 3683 y(...)390 3787
 
2472
3579 y Fp(#include)46 b(<fftw.h>)390 3683 y(...)390 3787
2431
2473
y({)629 3891 y(fftw_complex)e(in[N],)i(out[N];)629 3994
2432
2474
y(fftw_plan)f(p;)629 4098 y(...)629 4202 y(p)i(=)h
2433
2475
(fftw_create_plan\(N,)42 b(FFTW_FORWARD,)i(FFTW_ESTIMATE\);)629
2434
2476
4306 y(...)629 4410 y(fftw_one\(p,)g(in,)j(out\);)629
2435
2477
4513 y(...)629 4617 y(fftw_destroy_plan\(p\);)390 4721
2436
 
y(})275 4856 y Fu(The)33 b(\014rst)g(thing)g(w)m(e)h(do)g(is)f(to)i
2437
 
(create)g(a)f Fp(plan)p Fu(,)g(whic)m(h)e(is)h(an)h(ob)5
 
2478
y(})275 4856 y Fv(The)33 b(\014rst)g(thing)g(w)m(e)h(do)g(is)f(to)i
 
2479
(create)g(a)f Fq(plan)p Fv(,)g(whic)m(h)e(is)h(an)h(ob)5
2438
2480
b(ject)35 b(that)f(con)m(tains)g(all)f(the)h(data)150
2439
2481
4966 y(that)d(FFTW)g(needs)f(to)h(compute)g(the)f(FFT,)h(using)e(the)i
2440
 
(follo)m(wing)e(function:)390 5095 y Fo(fftw_plan)45
 
2482
(follo)m(wing)e(function:)390 5095 y Fp(fftw_plan)45
2441
2483
b(fftw_create_plan\(int)e(n,)k(fftw_direction)d(dir,)i(int)h(flags\);)
2442
 
275 5230 y Fu(The)26 b(\014rst)h(argumen)m(t,)i Fo(n)p
2443
 
Fu(,)e(is)g(the)g(size)h(of)f(the)h(transform)e(y)m(ou)i(are)g(trying)e
2444
 
(to)i(compute.)40 b(The)27 b(size)g Fo(n)150 5340 y Fu(can)c(b)s(e)f
 
2484
275 5230 y Fv(The)26 b(\014rst)h(argumen)m(t,)i Fp(n)p
 
2485
Fv(,)e(is)g(the)g(size)h(of)f(the)h(transform)e(y)m(ou)i(are)g(trying)e
 
2486
(to)i(compute.)40 b(The)27 b(size)g Fp(n)150 5340 y Fv(can)c(b)s(e)f
2445
2487
(an)m(y)h(p)s(ositiv)m(e)e(in)m(teger,)k(but)d(sizes)g(that)h(are)g
2446
2488
(pro)s(ducts)f(of)g(small)f(factors)j(are)f(transformed)f(most)p
2447
 
eop
 
2489
eop end
2448
2490
%%Page: 4 6
2449
 
4 5 bop 150 -116 a Fu(4)3277 b(FFTW)150 299 y(e\016cien)m(tly)-8
2450
 
b(.)40 b(The)26 b(second)h(argumen)m(t,)i Fo(dir)p Fu(,)e(can)g(b)s(e)f
2451
 
(either)h Fo(FFTW_FORWARD)c Fu(or)k Fo(FFTW_BACKWARD)p
2452
 
Fu(,)e(and)150 408 y(indicates)35 b(the)i(direction)e(of)h(the)h
2453
 
(transform)f(y)m(ou)g(are)h(in)m(terested)g(in.)57 b(Alternativ)m(ely)
2454
 
-8 b(,)38 b(y)m(ou)f(can)f(use)150 518 y(the)c(sign)g(of)g(the)g(exp)s
2455
 
(onen)m(t)h(in)d(the)j(transform,)f Fs(\000)p Fu(1)g(or)h(+)o(1,)h
2456
 
(whic)m(h)d(corresp)s(onds)f(to)j Fo(FFTW_FORWARD)150
2457
 
628 y Fu(or)43 b Fo(FFTW_BACKWARD)c Fu(resp)s(ectiv)m(ely)-8
2458
 
b(.)78 b(The)42 b Fo(flags)g Fu(argumen)m(t)h(is)f(either)g
2459
 
Fo(FFTW_MEASURE)e Fu(or)i Fo(FFTW_)150 737 y(ESTIMATE)p
2460
 
Fu(.)68 b Fo(FFTW_MEASURE)37 b Fu(means)j(that)h(FFTW)f(actually)g
2461
 
(runs)f(and)g(measures)h(the)h(execution)150 847 y(time)f(of)g(sev)m
2462
 
(eral)g(FFTs)h(in)d(order)i(to)h(\014nd)d(the)i(b)s(est)g(w)m(a)m(y)h
2463
 
(to)g(compute)f(the)h(transform)e(of)h(size)g Fo(n)p
2464
 
Fu(.)150 956 y(This)27 b(ma)m(y)j(tak)m(e)h(some)e(time,)g(dep)s
2465
 
(ending)e(on)i(y)m(our)g(installation)e(and)i(on)g(the)g(precision)e
2466
 
(of)i(the)h(timer)150 1066 y(in)39 b(y)m(our)h(mac)m(hine.)71
2467
 
b Fo(FFTW_ESTIMATE)p Fu(,)39 b(on)h(the)h(con)m(trary)-8
 
2491
TeXDict begin 4 5 bop 150 -116 a Fv(4)3277 b(FFTW)150
 
2492
299 y(e\016cien)m(tly)-8 b(.)40 b(The)26 b(second)h(argumen)m(t,)i
 
2493
Fp(dir)p Fv(,)e(can)g(b)s(e)f(either)h Fp(FFTW_FORWARD)c
 
2494
Fv(or)k Fp(FFTW_BACKWARD)p Fv(,)e(and)150 408 y(indicates)35
 
2495
b(the)i(direction)e(of)h(the)h(transform)f(y)m(ou)g(are)h(in)m
 
2496
(terested)g(in.)57 b(Alternativ)m(ely)-8 b(,)38 b(y)m(ou)f(can)f(use)
 
2497
150 518 y(the)c(sign)g(of)g(the)g(exp)s(onen)m(t)h(in)d(the)j
 
2498
(transform,)f Ft(\000)p Fv(1)g(or)h(+)o(1,)h(whic)m(h)d(corresp)s(onds)
 
2499
f(to)j Fp(FFTW_FORWARD)150 628 y Fv(or)43 b Fp(FFTW_BACKWARD)c
 
2500
Fv(resp)s(ectiv)m(ely)-8 b(.)78 b(The)42 b Fp(flags)g
 
2501
Fv(argumen)m(t)h(is)f(either)g Fp(FFTW_MEASURE)e Fv(or)i
 
2502
Fp(FFTW_)150 737 y(ESTIMATE)p Fv(.)68 b Fp(FFTW_MEASURE)37
 
2503
b Fv(means)j(that)h(FFTW)f(actually)g(runs)f(and)g(measures)h(the)h
 
2504
(execution)150 847 y(time)f(of)g(sev)m(eral)g(FFTs)h(in)d(order)i(to)h
 
2505
(\014nd)d(the)i(b)s(est)g(w)m(a)m(y)h(to)g(compute)f(the)h(transform)e
 
2506
(of)h(size)g Fp(n)p Fv(.)150 956 y(This)27 b(ma)m(y)j(tak)m(e)h(some)e
 
2507
(time,)g(dep)s(ending)e(on)i(y)m(our)g(installation)e(and)i(on)g(the)g
 
2508
(precision)e(of)i(the)h(timer)150 1066 y(in)39 b(y)m(our)h(mac)m(hine.)
 
2509
71 b Fp(FFTW_ESTIMATE)p Fv(,)39 b(on)h(the)h(con)m(trary)-8
2468
2510
b(,)44 b(do)s(es)c(not)h(run)e(an)m(y)i(computation,)i(and)150
2469
2511
1176 y(just)31 b(builds)e(a)j(reasonable)g(plan,)f(whic)m(h)g(ma)m(y)h
2470
2512
(b)s(e)g(sub-optimal.)43 b(In)31 b(other)h(w)m(ords,)g(if)f(y)m(our)h
2471
2513
(program)150 1285 y(p)s(erforms)37 b(man)m(y)i(transforms)f(of)h(the)g
2472
2514
(same)g(size)f(and)g(initialization)e(time)i(is)g(not)h(imp)s(ortan)m
2473
 
(t,)h(use)150 1395 y Fo(FFTW_MEASURE)p Fu(;)h(otherwise)d(use)h(the)h
 
2515
(t,)h(use)150 1395 y Fp(FFTW_MEASURE)p Fv(;)h(otherwise)d(use)h(the)h
2474
2516
(estimate.)68 b(\(A)40 b(compromise)f(b)s(et)m(w)m(een)h(these)g(t)m(w)
2475
2517
m(o)g(extremes)150 1504 y(exists.)g(See)31 b(Section)f(2.6)i([W)-8
2476
2518
b(ords)30 b(of)h(Wisdom],)f(page)h(13.\))275 1639 y(Once)d(the)g(plan)f
2478
2520
(times)e(as)i(y)m(ou)f(lik)m(e)g(for)g(transforms)150
2479
2521
1749 y(on)k(arra)m(ys)h(of)f(the)g(same)h(size.)46 b(When)32
2480
2522
b(y)m(ou)g(are)h(done)f(with)f(the)h(plan,)g(y)m(ou)g(deallo)s(cate)h
2481
 
(it)e(b)m(y)h(calling)150 1858 y Fo(fftw_destroy_plan\(plan\))p
2482
 
Fu(.)275 1993 y(The)g(transform)h(itself)g(is)f(computed)h(b)m(y)h
 
2523
(it)e(b)m(y)h(calling)150 1858 y Fp(fftw_destroy_plan\(plan\))p
 
2524
Fv(.)275 1993 y(The)g(transform)h(itself)g(is)f(computed)h(b)m(y)h
2483
2525
(passing)e(the)i(plan)e(along)h(with)f(the)i(input)d(and)i(output)150
2484
 
2102 y(arra)m(ys)e(to)g Fo(fftw_one)p Fu(:)390 2231 y
2485
 
Fo(void)47 b(fftw_one\(fftw_plan)42 b(plan,)47 b(fftw_complex)d(*in,)j
2486
 
(fftw_complex)d(*out\);)275 2366 y Fu(Note)h(that)f(the)g(transform)f
2487
 
(is)f(out)i(of)g(place:)68 b Fo(in)43 b Fu(and)g Fo(out)g
2488
 
Fu(m)m(ust)g(p)s(oin)m(t)g(to)h(distinct)e(arra)m(ys.)150
 
2526
2102 y(arra)m(ys)e(to)g Fp(fftw_one)p Fv(:)390 2231 y
 
2527
Fp(void)47 b(fftw_one\(fftw_plan)42 b(plan,)47 b(fftw_complex)d(*in,)j
 
2528
(fftw_complex)d(*out\);)275 2366 y Fv(Note)h(that)f(the)g(transform)f
 
2529
(is)f(out)i(of)g(place:)68 b Fp(in)43 b Fv(and)g Fp(out)g
 
2530
Fv(m)m(ust)g(p)s(oin)m(t)g(to)h(distinct)e(arra)m(ys.)150
2489
2531
2475 y(It)i(op)s(erates)h(on)f(data)h(of)g(t)m(yp)s(e)f
2490
 
Fo(fftw_complex)p Fu(,)h(a)f(data)h(structure)f(with)f(real)h(\()p
2491
 
Fo(in[i].re)p Fu(\))f(and)150 2585 y(imaginary)31 b(\()p
2492
 
Fo(in[i].im)p Fu(\))g(\015oating-p)s(oin)m(t)h(comp)s(onen)m(ts.)47
2493
 
b(The)32 b Fo(in)g Fu(and)g Fo(out)g Fu(arra)m(ys)g(should)f(ha)m(v)m
 
2532
Fp(fftw_complex)p Fv(,)h(a)f(data)h(structure)f(with)f(real)h(\()p
 
2533
Fp(in[i].re)p Fv(\))f(and)150 2585 y(imaginary)31 b(\()p
 
2534
Fp(in[i].im)p Fv(\))g(\015oating-p)s(oin)m(t)h(comp)s(onen)m(ts.)47
 
2535
b(The)32 b Fp(in)g Fv(and)g Fp(out)g Fv(arra)m(ys)g(should)f(ha)m(v)m
2494
2536
(e)j(the)150 2694 y(length)h(sp)s(eci\014ed)e(when)i(the)g(plan)f(w)m
2495
2537
(as)i(created.)56 b(An)35 b(alternativ)m(e)h(function,)f
2496
 
Fo(fftw)p Fu(,)h(allo)m(ws)f(y)m(ou)g(to)150 2804 y(e\016cien)m(tly)g
 
2538
Fp(fftw)p Fv(,)h(allo)m(ws)f(y)m(ou)g(to)150 2804 y(e\016cien)m(tly)g
2497
2539
(p)s(erform)f(m)m(ultiple)g(and/or)h(strided)f(transforms)h(\(see)h
2498
2540
(Chapter)f(3)h([FFTW)h(Reference],)150 2914 y(page)31
2499
2541
b(17\).)275 3048 y(The)39 b(DFT)i(results)e(are)i(stored)g(in-order)e
2500
 
(in)g(the)h(arra)m(y)h Fo(out)p Fu(,)h(with)e(the)g(zero-frequency)h
2501
 
(\(DC\))150 3158 y(comp)s(onen)m(t)46 b(in)e Fo(out[0])p
2502
 
Fu(.)84 b(The)45 b(arra)m(y)h Fo(in)f Fu(is)f(not)i(mo)s(di\014ed.)83
 
2542
(in)g(the)h(arra)m(y)h Fp(out)p Fv(,)h(with)e(the)g(zero-frequency)h
 
2543
(\(DC\))150 3158 y(comp)s(onen)m(t)46 b(in)e Fp(out[0])p
 
2544
Fv(.)84 b(The)45 b(arra)m(y)h Fp(in)f Fv(is)f(not)i(mo)s(di\014ed.)83
2503
2545
b(Users)46 b(should)d(note)j(that)g(FFTW)150 3267 y(computes)27
2504
2546
b(an)h(unnormalized)c(DFT,)k(the)g(sign)e(of)h(whose)h(exp)s(onen)m(t)f
2505
 
(is)f(giv)m(en)h(b)m(y)h(the)f Fo(dir)f Fu(parameter)150
2506
 
3377 y(of)35 b Fo(fftw_create_plan)p Fu(.)50 b(Th)m(us,)35
 
2547
(is)f(giv)m(en)h(b)m(y)h(the)f Fp(dir)f Fv(parameter)150
 
2548
3377 y(of)35 b Fp(fftw_create_plan)p Fv(.)50 b(Th)m(us,)35
2507
2549
b(computing)f(a)h(forw)m(ard)f(follo)m(w)m(ed)g(b)m(y)h(a)g(bac)m(kw)m
2508
2550
(ard)g(transform)g(\(or)150 3486 y(vice)29 b(v)m(ersa\))i(results)d(in)
2509
 
g(the)h(original)f(arra)m(y)h(scaled)h(b)m(y)f Fo(n)p
2510
 
Fu(.)40 b(See)29 b(Section)g(3.2.5)j([What)e(FFTW)g(Really)150
 
2551
g(the)h(original)f(arra)m(y)h(scaled)h(b)m(y)f Fp(n)p
 
2552
Fv(.)40 b(See)29 b(Section)g(3.2.5)j([What)e(FFTW)g(Really)150
2511
2553
3596 y(Computes],)g(page)h(21,)h(for)e(the)h(de\014nition)d(of)i(DFT.)
2512
2554
275 3731 y(A)37 b(program)g(using)f(FFTW)h(should)f(b)s(e)g(link)m(ed)g
2513
 
(with)g Fo(-lfftw)28 b(-lm)37 b Fu(on)g(Unix)f(systems,)j(or)e(with)150
 
2555
(with)g Fp(-lfftw)28 b(-lm)37 b Fv(on)g(Unix)f(systems,)j(or)e(with)150
2514
2556
3840 y(the)31 b(FFTW)g(and)e(standard)h(math)g(libraries)e(in)h
2515
 
(general.)150 4098 y Ft(2.2)68 b(Complex)46 b(Multi-dimensional)g(T)-11
2516
 
b(ransforms)45 b(T)-11 b(utorial)275 4290 y Fu(FFTW)34
 
2557
(general.)150 4098 y Fu(2.2)68 b(Complex)46 b(Multi-dimensional)g(T)-11
 
2558
b(ransforms)45 b(T)-11 b(utorial)275 4290 y Fv(FFTW)34
2517
2559
b(can)h(also)f(compute)g(transforms)f(of)i(an)m(y)f(n)m(um)m(b)s(er)f
2518
 
(of)h(dimensions)d(\()p Fp(rank)6 b Fu(\).)52 b(The)33
 
2560
(of)h(dimensions)d(\()p Fq(rank)6 b Fv(\).)52 b(The)33
2519
2561
b(syn)m(tax)150 4400 y(is)i(similar)e(to)j(that)g(for)f(the)h
2520
 
(one-dimensional)e(transforms,)i(with)e(`)p Fo(fftw_)p
2521
 
Fu(')h(replaced)g(b)m(y)g(`)p Fo(fftwnd_)p Fu(')150 4510
2522
 
y(\(whic)m(h)29 b(stands)h(for)g(\\)p Fo(fftw)g Fu(in)f
2523
 
Fo(N)h Fu(dimensions"\).)275 4644 y(As)24 b(b)s(efore,)i(w)m(e)g
2524
 
Fo(#include)i(<fftw.h>)22 b Fu(and)j(create)h(a)f(plan)f(for)h(the)g
 
2562
(one-dimensional)e(transforms,)i(with)e(`)p Fp(fftw_)p
 
2563
Fv(')h(replaced)g(b)m(y)g(`)p Fp(fftwnd_)p Fv(')150 4510
 
2564
y(\(whic)m(h)29 b(stands)h(for)g(\\)p Fp(fftw)g Fv(in)f
 
2565
Fp(N)h Fv(dimensions"\).)275 4644 y(As)24 b(b)s(efore,)i(w)m(e)g
 
2566
Fp(#include)i(<fftw.h>)22 b Fv(and)j(create)h(a)f(plan)f(for)h(the)g
2525
2567
(transforms,)g(this)f(time)h(of)g(t)m(yp)s(e)150 4754
2526
 
y Fo(fftwnd_plan)p Fu(:)390 4882 y Fo(fftwnd_plan)45
 
2568
y Fp(fftwnd_plan)p Fv(:)390 4882 y Fp(fftwnd_plan)45
2527
2569
b(fftwnd_create_plan\(int)c(rank,)47 b(const)f(int)h(*n,)1870
2528
2570
4986 y(fftw_direction)c(dir,)k(int)g(flags\);)275 5121
2529
 
y(rank)30 b Fu(is)g(the)h(dimensionalit)m(y)d(of)k(the)f(arra)m(y)-8
 
2571
y(rank)30 b Fv(is)g(the)h(dimensionalit)m(y)d(of)k(the)f(arra)m(y)-8
2530
2572
b(,)33 b(and)d(can)i(b)s(e)e(an)m(y)i(non-negativ)m(e)g(in)m(teger.)43
2531
 
b(The)31 b(next)150 5230 y(argumen)m(t,)i Fo(n)p Fu(,)f(is)f(a)h(p)s
 
2573
b(The)31 b(next)150 5230 y(argumen)m(t,)i Fp(n)p Fv(,)f(is)f(a)h(p)s
2532
2574
(oin)m(ter)f(to)h(an)g(in)m(teger)g(arra)m(y)h(of)f(length)f
2533
 
Fo(rank)f Fu(con)m(taining)i(the)g(\(p)s(ositiv)m(e\))f(sizes)150
 
2575
Fp(rank)f Fv(con)m(taining)i(the)g(\(p)s(ositiv)m(e\))f(sizes)150
2534
2576
5340 y(of)e(eac)m(h)g(dimension)d(of)i(the)h(arra)m(y)-8
2535
2577
b(.)41 b(\(Note)30 b(that)f(the)f(arra)m(y)h(will)d(b)s(e)i(stored)g
2536
 
(in)f(ro)m(w-ma)5 b(jor)29 b(order.)40 b(See)p eop
 
2578
(in)f(ro)m(w-ma)5 b(jor)29 b(order.)40 b(See)p eop end
2537
2579
%%Page: 5 7
2538
 
5 6 bop 150 -116 a Fu(Chapter)30 b(2:)41 b(T)-8 b(utorial)2768
2539
 
b(5)150 299 y(Section)21 b(2.5)i([Multi-dimensional)17
2540
 
b(Arra)m(y)22 b(F)-8 b(ormat],)25 b(page)d(11,)i(for)d(information)f
2541
 
(on)h(ro)m(w-ma)5 b(jor)22 b(order.\))150 408 y(The)27
2542
 
b(last)h(t)m(w)m(o)h(parameters)f(are)g(the)f(same)h(as)g(in)f
2543
 
Fo(fftw_create_plan)p Fu(.)35 b(W)-8 b(e)29 b(no)m(w,)f(ho)m(w)m(ev)m
2544
 
(er,)i(ha)m(v)m(e)f(an)150 518 y(additional)35 b(p)s(ossible)g(\015ag,)
2545
 
k Fo(FFTW_IN_PLACE)p Fu(,)d(since)g Fo(fftwnd)g Fu(supp)s(orts)f(true)i
2546
 
(in-place)g(transforms.)150 628 y(Multiple)25 b(\015ags)j(are)f(com)m
2547
 
(bined)g(using)f(a)h(bit)m(wise)f Fp(or)34 b Fu(\(`)p
2548
 
Fo(|)p Fu('\).)41 b(\(An)27 b Fp(in-place)32 b Fu(transform)26
 
2580
TeXDict begin 5 6 bop 150 -116 a Fv(Chapter)30 b(2:)41
 
2581
b(T)-8 b(utorial)2768 b(5)150 299 y(Section)21 b(2.5)i
 
2582
([Multi-dimensional)17 b(Arra)m(y)22 b(F)-8 b(ormat],)25
 
2583
b(page)d(11,)i(for)d(information)f(on)h(ro)m(w-ma)5 b(jor)22
 
2584
b(order.\))150 408 y(The)27 b(last)h(t)m(w)m(o)h(parameters)f(are)g
 
2585
(the)f(same)h(as)g(in)f Fp(fftw_create_plan)p Fv(.)35
 
2586
b(W)-8 b(e)29 b(no)m(w,)f(ho)m(w)m(ev)m(er,)i(ha)m(v)m(e)f(an)150
 
2587
518 y(additional)35 b(p)s(ossible)g(\015ag,)k Fp(FFTW_IN_PLACE)p
 
2588
Fv(,)d(since)g Fp(fftwnd)g Fv(supp)s(orts)f(true)i(in-place)g
 
2589
(transforms.)150 628 y(Multiple)25 b(\015ags)j(are)f(com)m(bined)g
 
2590
(using)f(a)h(bit)m(wise)f Fq(or)34 b Fv(\(`)p Fp(|)p
 
2591
Fv('\).)41 b(\(An)27 b Fq(in-place)32 b Fv(transform)26
2549
2592
b(is)h(one)g(in)f(whic)m(h)150 737 y(the)i(output)g(data)g(o)m(v)m
2550
2593
(erwrite)h(the)f(input)e(data.)40 b(It)29 b(th)m(us)e(requires)g(half)f
2551
2594
(as)j(m)m(uc)m(h)f(memory)f(as|and)h(is)150 847 y(often)j(faster)g
2552
 
(than|its)e(opp)s(osite,)h(an)g Fp(out-of-place)37 b
2553
 
Fu(transform.\))275 1005 y(F)-8 b(or)25 b(t)m(w)m(o-)g(and)f
 
2595
(than|its)e(opp)s(osite,)h(an)g Fq(out-of-place)37 b
 
2596
Fv(transform.\))275 1005 y(F)-8 b(or)25 b(t)m(w)m(o-)g(and)f
2554
2597
(three-dimensional)e(transforms,)j(FFTWND)g(pro)m(vides)f(alternativ)m
2555
2598
(e)g(routines)f(that)150 1114 y(accept)37 b(the)e(sizes)h(of)f(eac)m(h)
2556
2599
i(dimension)c(directly)-8 b(,)36 b(rather)f(than)g(indirectly)e
2557
2600
(through)i(a)g(rank)g(and)g(an)150 1224 y(arra)m(y)h(of)f(sizes.)55
2558
 
b(These)35 b(are)h(otherwise)f(iden)m(tical)f(to)i Fo
2559
 
(fftwnd_create_plan)p Fu(,)c(and)i(are)i(sometimes)150
2560
 
1333 y(more)31 b(con)m(v)m(enien)m(t:)390 1485 y Fo(fftwnd_plan)45
 
2601
b(These)35 b(are)h(otherwise)f(iden)m(tical)f(to)i Fp
 
2602
(fftwnd_create_plan)p Fv(,)c(and)i(are)i(sometimes)150
 
2603
1333 y(more)31 b(con)m(v)m(enien)m(t:)390 1485 y Fp(fftwnd_plan)45
2561
2604
b(fftw2d_create_plan\(int)c(nx,)47 b(int)g(ny,)1870 1589
2562
2605
y(fftw_direction)c(dir,)k(int)g(flags\);)390 1693 y(fftwnd_plan)e
2563
2606
(fftw3d_create_plan\(int)c(nx,)47 b(int)g(ny,)g(int)g(nz,)1870
2564
2607
1797 y(fftw_direction)c(dir,)k(int)g(flags\);)275 1954
2565
 
y Fu(Once)24 b(the)h(plan)f(has)g(b)s(een)g(created,)j(y)m(ou)f(can)f
 
2608
y Fv(Once)24 b(the)h(plan)f(has)g(b)s(een)g(created,)j(y)m(ou)f(can)f
2566
2609
(use)f(it)g(an)m(y)i(n)m(um)m(b)s(er)d(of)i(times)f(for)h(transforms)f
2567
2610
(of)h(the)150 2064 y(same)33 b(size.)49 b(When)33 b(y)m(ou)g(do)g(not)g
2568
2611
(need)g(a)g(plan)f(an)m(ymore,)j(y)m(ou)e(can)g(deallo)s(cate)h(the)f
2569
 
(plan)f(b)m(y)g(calling)150 2174 y Fo(fftwnd_destroy_plan\(plan)o(\))p
2570
 
Fu(.)275 2331 y(Giv)m(en)e(a)h(plan,)e(y)m(ou)i(can)f(compute)h(the)f
 
2612
(plan)f(b)m(y)g(calling)150 2174 y Fp(fftwnd_destroy_plan\(plan)o(\))p
 
2613
Fv(.)275 2331 y(Giv)m(en)e(a)h(plan,)e(y)m(ou)i(can)f(compute)h(the)f
2571
2614
(transform)g(of)h(an)f(arra)m(y)h(of)f(data)h(b)m(y)g(calling:)390
2572
 
2483 y Fo(void)47 b(fftwnd_one\(fftwnd_plan)41 b(plan,)47
 
2615
2483 y Fp(void)47 b(fftwnd_one\(fftwnd_plan)41 b(plan,)47
2573
2616
b(fftw_complex)d(*in,)j(fftw_complex)d(*out\);)275 2641
2574
 
y Fu(Here,)k Fo(in)43 b Fu(and)h Fo(out)f Fu(p)s(oin)m(t)g(to)i(m)m
 
2617
y Fv(Here,)k Fp(in)43 b Fv(and)h Fp(out)f Fv(p)s(oin)m(t)g(to)i(m)m
2575
2618
(ulti-dimensional)40 b(arra)m(ys)45 b(in)e(ro)m(w-ma)5
2576
2619
b(jor)44 b(order,)j(of)e(the)f(size)150 2751 y(sp)s(eci\014ed)22
2577
2620
b(when)g(the)h(plan)f(w)m(as)i(created.)40 b(In)22 b(the)i(case)g(of)g
2578
 
(an)f(in-place)f(transform,)i(the)g Fo(out)e Fu(parameter)150
 
2621
(an)f(in-place)f(transform,)i(the)g Fp(out)e Fv(parameter)150
2579
2622
2860 y(is)31 b(ignored)g(and)g(the)h(output)g(data)g(are)h(stored)f(in)
2580
 
e(the)i Fo(in)g Fu(arra)m(y)-8 b(.)46 b(The)31 b(results)g(are)h
 
2623
e(the)i Fp(in)g Fv(arra)m(y)-8 b(.)46 b(The)31 b(results)g(are)h
2581
2624
(stored)g(in-order,)150 2970 y(unnormalized,)44 b(with)d(the)i
2582
 
(zero-frequency)g(comp)s(onen)m(t)g(in)f Fo(out[0])p
2583
 
Fu(.)76 b(A)42 b(forw)m(ard)h(follo)m(w)m(ed)f(b)m(y)h(a)150
 
2625
(zero-frequency)g(comp)s(onen)m(t)g(in)f Fp(out[0])p
 
2626
Fv(.)76 b(A)42 b(forw)m(ard)h(follo)m(w)m(ed)f(b)m(y)h(a)150
2584
2627
3079 y(bac)m(kw)m(ard)c(transform)g(\(or)g(vice-v)m(ersa\))h(yields)d
2585
2628
(the)j(original)d(data)i(m)m(ultiplied)d(b)m(y)j(the)g(size)g(of)g(the)
2586
2629
150 3189 y(arra)m(y)k(\(i.e.)79 b(the)43 b(pro)s(duct)f(of)h(the)h
2589
2632
(what)g(FFTWND)i(computes.)275 3456 y(F)-8 b(or)31 b(example,)h(co)s
2590
2633
(de)f(to)h(p)s(erform)e(an)h(in-place)f(FFT)h(of)g(a)h
2591
2634
(three-dimensional)d(arra)m(y)i(migh)m(t)g(lo)s(ok)150
2592
 
3566 y(lik)m(e:)390 3718 y Fo(#include)46 b(<fftw.h>)390
 
2635
3566 y(lik)m(e:)390 3718 y Fp(#include)46 b(<fftw.h>)390
2593
2636
3822 y(...)390 3925 y({)629 4029 y(fftw_complex)e(in[L][M][N];)629
2594
2637
4133 y(fftwnd_plan)g(p;)629 4237 y(...)629 4340 y(p)j(=)h
2595
2638
(fftw3d_create_plan\(L,)42 b(M,)47 b(N,)g(FFTW_FORWARD,)1726
2596
2639
4444 y(FFTW_MEASURE)e(|)i(FFTW_IN_PLACE\);)629 4548 y(...)629
2597
2640
4652 y(fftwnd_one\(p,)d(&in[0][0][0],)g(NULL\);)629 4755
2598
2641
y(...)629 4859 y(fftwnd_destroy_plan\(p\);)390 4963 y(})275
2599
 
5121 y Fu(Note)36 b(that)f Fo(in)g Fu(is)f(a)h(statically-declared)f
 
2642
5121 y Fv(Note)36 b(that)f Fp(in)g Fv(is)f(a)h(statically-declared)f
2600
2643
(arra)m(y)-8 b(,)38 b(whic)m(h)33 b(is)h(automatically)h(in)f(ro)m
2601
2644
(w-ma)5 b(jor)35 b(order,)150 5230 y(but)42 b(w)m(e)h(m)m(ust)f(tak)m
2602
2645
(e)i(the)f(address)e(of)i(the)g(\014rst)e(elemen)m(t)i(in)e(order)h(to)
2603
2646
i(\014t)e(the)h(t)m(yp)s(e)f(exp)s(ected)h(b)m(y)150
2604
 
5340 y Fo(fftwnd_one)p Fu(.)38 b(\(See)31 b(Section)f(2.5)i
 
2647
5340 y Fp(fftwnd_one)p Fv(.)38 b(\(See)31 b(Section)f(2.5)i
2605
2648
([Multi-dimensional)26 b(Arra)m(y)31 b(F)-8 b(ormat],)32
2606
 
b(page)f(11.\))p eop
 
2649
b(page)f(11.\))p eop end
2607
2650
%%Page: 6 8
2608
 
6 7 bop 150 -116 a Fu(6)3277 b(FFTW)150 299 y Ft(2.3)68
2609
 
b(Real)46 b(One-dimensional)g(T)-11 b(ransforms)45 b(T)-11
2610
 
b(utorial)275 497 y Fu(If)29 b(the)h(input)e(data)j(are)g(purely)d
2611
 
(real,)i(y)m(ou)g(can)g(sa)m(v)m(e)i(roughly)d(a)h(factor)h(of)f(t)m(w)
2612
 
m(o)i(in)d(b)s(oth)g(time)h(and)150 606 y(storage)d(b)m(y)e(using)f
2613
 
(the)h Fp(r\013t)m(w)33 b Fu(transforms,)26 b(whic)m(h)e(are)i(FFTs)f
2614
 
(sp)s(ecialized)f(for)h(real)g(data.)40 b(The)24 b(output)150
2615
 
716 y(of)h(a)f(suc)m(h)h(a)f(transform)g(is)g(a)g Fp(halfcomplex)30
2616
 
b Fu(arra)m(y)-8 b(,)27 b(whic)m(h)c(consists)h(of)g(only)g(half)f(of)i
2617
 
(the)f(complex)h(DFT)150 826 y(amplitudes)20 b(\(since)j(the)g(negativ)
2618
 
m(e-frequency)h(amplitudes)c(for)j(real)f(data)h(are)g(the)g(complex)g
2619
 
(conjugate)150 935 y(of)31 b(the)f(p)s(ositiv)m(e-frequency)f
2620
 
(amplitudes\).)275 1075 y(In)k(exc)m(hange)j(for)e(these)h(sp)s(eed)e
2621
 
(and)h(space)h(adv)-5 b(an)m(tages,)37 b(the)e(user)e(sacri\014ces)h
2622
 
(some)h(of)f(the)h(sim-)150 1184 y(plicit)m(y)g(of)h(FFTW's)h(complex)f
2623
 
(transforms.)58 b(First)35 b(of)i(all,)g(to)g(allo)m(w)e(maxim)m(um)g
2624
 
(p)s(erformance,)j(the)150 1294 y(output)i(format)g(of)g(the)h
2625
 
(one-dimensional)d(real)h(transforms)h(is)f(di\013eren)m(t)g(from)h
2626
 
(that)g(used)g(b)m(y)g(the)150 1404 y(m)m(ulti-dimensional)27
2627
 
b(transforms.)42 b(Second,)32 b(the)f(in)m(v)m(erse)g(transform)g
2628
 
(\(halfcomplex)f(to)i(real\))f(has)g(the)150 1513 y(side-e\013ect)22
2629
 
b(of)g(destro)m(ying)f(its)g(input)e(arra)m(y)-8 b(.)39
2630
 
b(Neither)21 b(of)h(these)g(incon)m(v)m(eniences)f(should)e(p)s(ose)i
2631
 
(a)h(serious)150 1623 y(problem)29 b(for)h(users,)g(but)f(it)h(is)g
2632
 
(imp)s(ortan)m(t)f(to)i(b)s(e)f(a)m(w)m(are)i(of)e(them.)41
2633
 
b(\(Both)32 b(the)e(incon)m(v)m(enien)m(t)g(output)150
2634
 
1732 y(format)h(and)g(the)g(side-e\013ect)h(of)f(the)g(in)m(v)m(erse)g
2635
 
(transform)g(can)g(b)s(e)f(ameliorated)h(for)g(one-dimensional)150
2636
 
1842 y(transforms,)40 b(at)f(the)g(exp)s(ense)f(of)g(some)h(p)s
2637
 
(erformance,)h(b)m(y)f(using)e(instead)g(the)i(m)m(ulti-dimensional)150
2638
 
1952 y(transform)30 b(routines)f(with)g(a)i(rank)f(of)g(one.\))275
2639
 
2091 y(The)k(computation)g(of)h(the)g(plan)e(is)h(similar)e(to)j(that)g
2640
 
(for)g(the)f(complex)h(transforms.)52 b(First,)36 b(y)m(ou)150
2641
 
2201 y Fo(#include)28 b(<rfftw.h>)p Fu(.)38 b(Then,)30
2642
 
b(y)m(ou)h(create)h(a)e(plan)f(\(of)i(t)m(yp)s(e)g Fo(rfftw_plan)p
2643
 
Fu(\))d(b)m(y)i(calling:)390 2335 y Fo(rfftw_plan)45
 
2651
TeXDict begin 6 7 bop 150 -116 a Fv(6)3277 b(FFTW)150
 
2652
299 y Fu(2.3)68 b(Real)46 b(One-dimensional)g(T)-11 b(ransforms)45
 
2653
b(T)-11 b(utorial)275 498 y Fv(If)29 b(the)h(input)e(data)j(are)g
 
2654
(purely)d(real,)i(y)m(ou)g(can)g(sa)m(v)m(e)i(roughly)d(a)h(factor)h
 
2655
(of)f(t)m(w)m(o)i(in)d(b)s(oth)g(time)h(and)150 607 y(storage)d(b)m(y)e
 
2656
(using)f(the)h Fq(r\013t)m(w)33 b Fv(transforms,)26 b(whic)m(h)e(are)i
 
2657
(FFTs)f(sp)s(ecialized)f(for)h(real)g(data.)40 b(The)24
 
2658
b(output)150 717 y(of)h(a)f(suc)m(h)h(a)f(transform)g(is)g(a)g
 
2659
Fq(halfcomplex)30 b Fv(arra)m(y)-8 b(,)27 b(whic)m(h)c(consists)h(of)g
 
2660
(only)g(half)f(of)i(the)f(complex)h(DFT)150 827 y(amplitudes)20
 
2661
b(\(since)j(the)g(negativ)m(e-frequency)h(amplitudes)c(for)j(real)f
 
2662
(data)h(are)g(the)g(complex)g(conjugate)150 936 y(of)31
 
2663
b(the)f(p)s(ositiv)m(e-frequency)f(amplitudes\).)275
 
2664
1077 y(In)k(exc)m(hange)j(for)e(these)h(sp)s(eed)e(and)h(space)h(adv)-5
 
2665
b(an)m(tages,)37 b(the)e(user)e(sacri\014ces)h(some)h(of)f(the)h(sim-)
 
2666
150 1187 y(plicit)m(y)g(of)h(FFTW's)h(complex)f(transforms.)58
 
2667
b(First)35 b(of)i(all,)g(to)g(allo)m(w)e(maxim)m(um)g(p)s(erformance,)j
 
2668
(the)150 1296 y(output)i(format)g(of)g(the)h(one-dimensional)d(real)h
 
2669
(transforms)h(is)f(di\013eren)m(t)g(from)h(that)g(used)g(b)m(y)g(the)
 
2670
150 1406 y(m)m(ulti-dimensional)27 b(transforms.)42 b(Second,)32
 
2671
b(the)f(in)m(v)m(erse)g(transform)g(\(halfcomplex)f(to)i(real\))f(has)g
 
2672
(the)150 1515 y(side-e\013ect)22 b(of)g(destro)m(ying)f(its)g(input)e
 
2673
(arra)m(y)-8 b(.)39 b(Neither)21 b(of)h(these)g(incon)m(v)m(eniences)f
 
2674
(should)e(p)s(ose)i(a)h(serious)150 1625 y(problem)29
 
2675
b(for)h(users,)g(but)f(it)h(is)g(imp)s(ortan)m(t)f(to)i(b)s(e)f(a)m(w)m
 
2676
(are)i(of)e(them.)41 b(\(Both)32 b(the)e(incon)m(v)m(enien)m(t)g
 
2677
(output)150 1735 y(format)h(and)g(the)g(side-e\013ect)h(of)f(the)g(in)m
 
2678
(v)m(erse)g(transform)g(can)g(b)s(e)f(ameliorated)h(for)g
 
2679
(one-dimensional)150 1844 y(transforms,)40 b(at)f(the)g(exp)s(ense)f
 
2680
(of)g(some)h(p)s(erformance,)h(b)m(y)f(using)e(instead)g(the)i(m)m
 
2681
(ulti-dimensional)150 1954 y(transform)30 b(routines)f(with)g(a)i(rank)
 
2682
f(of)g(one.\))275 2095 y(The)k(computation)g(of)h(the)g(plan)e(is)h
 
2683
(similar)e(to)j(that)g(for)g(the)f(complex)h(transforms.)52
 
2684
b(First,)36 b(y)m(ou)150 2204 y Fp(#include)28 b(<rfftw.h>)p
 
2685
Fv(.)38 b(Then,)30 b(y)m(ou)h(create)h(a)e(plan)f(\(of)i(t)m(yp)s(e)g
 
2686
Fp(rfftw_plan)p Fv(\))d(b)m(y)i(calling:)390 2339 y Fp(rfftw_plan)45
2644
2687
b(rfftw_create_plan\(int)d(n,)47 b(fftw_direction)d(dir,)j(int)g
2645
 
(flags\);)275 2475 y(n)37 b Fu(is)g(the)h(length)f(of)h(the)h
2646
 
Fq(r)-5 b(e)g(al)48 b Fu(arra)m(y)39 b(in)d(the)i(transform)g(\(ev)m
2647
 
(en)h(for)e(halfcomplex-to-real)h(trans-)150 2584 y(forms\),)32
 
2688
(flags\);)275 2480 y(n)37 b Fv(is)g(the)h(length)f(of)h(the)h
 
2689
Fr(r)-5 b(e)g(al)48 b Fv(arra)m(y)39 b(in)d(the)i(transform)g(\(ev)m
 
2690
(en)h(for)e(halfcomplex-to-real)h(trans-)150 2590 y(forms\),)32
2648
2691
b(and)f(can)i(b)s(e)e(an)m(y)h(p)s(ositiv)m(e)f(in)m(teger)h
2649
2692
(\(although)f(sizes)h(with)f(small)f(factors)j(are)f(transformed)150
2650
 
2694 y(more)39 b(e\016cien)m(tly\).)65 b Fo(dir)37 b
2651
 
Fu(is)h(either)g Fo(FFTW_REAL_TO_COMPLEX)33 b Fu(or)38
2652
 
b Fo(FFTW_COMPLEX_TO_REAL)p Fu(.)59 b(The)150 2803 y
2653
 
Fo(flags)29 b Fu(parameter)i(is)e(the)i(same)g(as)f(in)f
2654
 
Fo(fftw_create_plan)p Fu(.)275 2943 y(Once)d(created,)j(a)e(plan)f(can)
 
2693
2699 y(more)39 b(e\016cien)m(tly\).)65 b Fp(dir)37 b
 
2694
Fv(is)h(either)g Fp(FFTW_REAL_TO_COMPLEX)33 b Fv(or)38
 
2695
b Fp(FFTW_COMPLEX_TO_REAL)p Fv(.)59 b(The)150 2809 y
 
2696
Fp(flags)29 b Fv(parameter)i(is)e(the)i(same)g(as)f(in)f
 
2697
Fp(fftw_create_plan)p Fv(.)275 2950 y(Once)d(created,)j(a)e(plan)f(can)
2655
2698
h(b)s(e)f(used)g(for)g(an)m(y)h(n)m(um)m(b)s(er)f(of)g(transforms,)h
2656
 
(and)g(is)e(deallo)s(cated)i(when)150 3053 y(y)m(ou)k(are)f(done)h
2657
 
(with)e(it)h(b)m(y)g(calling)f Fo(rfftw_destroy_plan\(plan)o(\))p
2658
 
Fu(.)275 3192 y(Giv)m(en)h(a)h(plan,)e(a)i(real-to-complex)g(or)f
 
2699
(and)g(is)e(deallo)s(cated)i(when)150 3060 y(y)m(ou)k(are)f(done)h
 
2700
(with)e(it)h(b)m(y)g(calling)f Fp(rfftw_destroy_plan\(plan)o(\))p
 
2701
Fv(.)275 3200 y(Giv)m(en)h(a)h(plan,)e(a)i(real-to-complex)g(or)f
2659
2702
(complex-to-real)h(transform)f(is)f(computed)i(b)m(y)f(calling:)390
2660
 
3326 y Fo(void)47 b(rfftw_one\(rfftw_plan)42 b(plan,)k(fftw_real)g
2661
 
(*in,)g(fftw_real)f(*out\);)275 3466 y Fu(\(Note)31 b(that)g
2662
 
Fo(fftw_real)d Fu(is)h(an)i(alias)e(for)h(the)g(\015oating-p)s(oin)m(t)
 
2703
3335 y Fp(void)47 b(rfftw_one\(rfftw_plan)42 b(plan,)k(fftw_real)g
 
2704
(*in,)g(fftw_real)f(*out\);)275 3476 y Fv(\(Note)31 b(that)g
 
2705
Fp(fftw_real)d Fv(is)h(an)i(alias)e(for)h(the)g(\015oating-p)s(oin)m(t)
2663
2706
g(t)m(yp)s(e)g(for)g(whic)m(h)f(FFTW)i(w)m(as)g(com-)150
2664
 
3576 y(piled.\))52 b(Dep)s(ending)34 b(up)s(on)f(the)i(direction)e(of)i
 
2707
3586 y(piled.\))52 b(Dep)s(ending)34 b(up)s(on)f(the)i(direction)e(of)i
2665
2708
(the)g(plan,)g(either)f(the)h(input)e(or)i(the)g(output)g(arra)m(y)g
2666
 
(is)150 3685 y(halfcomplex,)29 b(and)h(is)f(stored)i(in)e(the)i(follo)m
2667
 
(wing)d(format:)1222 3943 y Fl(r)1263 3957 y Fn(0)1301
2668
 
3943 y Fl(;)15 b(r)1382 3957 y Fn(1)1419 3943 y Fl(;)g(r)1500
2669
 
3957 y Fn(2)1538 3943 y Fl(;)g(:)g(:)g(:)h(;)f(r)1780
2670
 
3957 y Fk(n=)p Fn(2)1893 3943 y Fl(;)g(i)1964 3957 y
2671
 
Fn(\()p Fk(n)p Fn(+1\))p Fk(=)p Fn(2)p Fj(\000)p Fn(1)2298
2672
 
3943 y Fl(;)g(:)g(:)g(:)i(;)e(i)2531 3957 y Fn(2)2569
2673
 
3943 y Fl(;)g(i)2640 3957 y Fn(1)275 4148 y Fu(Here,)28
2674
 
b Fl(r)553 4162 y Fk(k)621 4148 y Fu(is)e(the)h(real)g(part)g(of)g(the)
2675
 
g Fl(k)s Fu(th)g(output,)g(and)g Fl(i)2171 4162 y Fk(k)2239
2676
 
4148 y Fu(is)f(the)h(imaginary)f(part.)39 b(\(W)-8 b(e)29
2677
 
b(follo)m(w)d(here)150 4258 y(the)33 b(C)g(con)m(v)m(en)m(tion)h(that)g
 
2709
(is)150 3696 y(halfcomplex,)29 b(and)h(is)f(stored)i(in)e(the)i(follo)m
 
2710
(wing)d(format:)1222 3956 y Fm(r)1263 3970 y Fo(0)1301
 
2711
3956 y Fm(;)15 b(r)1382 3970 y Fo(1)1419 3956 y Fm(;)g(r)1500
 
2712
3970 y Fo(2)1538 3956 y Fm(;)g(:)g(:)g(:)h(;)f(r)1780
 
2713
3970 y Fl(n=)p Fo(2)1893 3956 y Fm(;)g(i)1964 3970 y
 
2714
Fo(\()p Fl(n)p Fo(+1\))p Fl(=)p Fo(2)p Fk(\000)p Fo(1)2298
 
2715
3956 y Fm(;)g(:)g(:)g(:)i(;)e(i)2531 3970 y Fo(2)2569
 
2716
3956 y Fm(;)g(i)2640 3970 y Fo(1)275 4164 y Fv(Here,)28
 
2717
b Fm(r)553 4178 y Fl(k)621 4164 y Fv(is)e(the)h(real)g(part)g(of)g(the)
 
2718
g Fm(k)s Fv(th)g(output,)g(and)g Fm(i)2171 4178 y Fl(k)2239
 
2719
4164 y Fv(is)f(the)h(imaginary)f(part.)39 b(\(W)-8 b(e)29
 
2720
b(follo)m(w)d(here)150 4274 y(the)33 b(C)g(con)m(v)m(en)m(tion)h(that)g
2678
2721
(in)m(teger)f(division)d(is)i(rounded)f(do)m(wn,)j(e.g.)49
2679
 
b(7)p Fl(=)p Fu(2)31 b(=)f(3.\))49 b(F)-8 b(or)34 b(a)f(halfcomplex)150
2680
 
4367 y(arra)m(y)f Fo(hc[])p Fu(,)f(the)g Fl(k)s Fu(th)h(comp)s(onen)m
2681
 
(t)g(has)f(its)g(real)g(part)g(in)f Fo(hc[k])g Fu(and)h(its)g
2682
 
(imaginary)f(part)h(in)f Fo(hc[n-)150 4477 y(k])p Fu(,)35
2683
 
b(with)e(the)i(exception)f(of)h Fo(k)f(==)g(0)g Fu(or)g
2684
 
Fo(n/2)f Fu(\(the)i(latter)g(only)f(if)f(n)h(is)f(ev)m(en\)|in)h(these)
2685
 
h(t)m(w)m(o)h(cases,)150 4587 y(the)k(imaginary)f(part)h(is)f(zero)i
 
2722
b(7)p Fm(=)p Fv(2)31 b(=)f(3.\))49 b(F)-8 b(or)34 b(a)f(halfcomplex)150
 
2723
4383 y(arra)m(y)f Fp(hc[])p Fv(,)f(the)g Fm(k)s Fv(th)h(comp)s(onen)m
 
2724
(t)g(has)f(its)g(real)g(part)g(in)f Fp(hc[k])g Fv(and)h(its)g
 
2725
(imaginary)f(part)h(in)f Fp(hc[n-)150 4493 y(k])p Fv(,)35
 
2726
b(with)e(the)i(exception)f(of)h Fp(k)f(==)g(0)g Fv(or)g
 
2727
Fp(n/2)f Fv(\(the)i(latter)g(only)f(if)f(n)h(is)f(ev)m(en\)|in)h(these)
 
2728
h(t)m(w)m(o)h(cases,)150 4603 y(the)k(imaginary)f(part)h(is)f(zero)i
2686
2729
(due)e(to)i(symmetries)f(of)g(the)g(real-complex)g(transform,)i(and)e
2687
 
(is)f(not)150 4696 y(stored.)58 b(Th)m(us,)37 b(the)f(transform)g(of)g
2688
 
Fo(n)g Fu(real)g(v)-5 b(alues)35 b(is)g(a)i(halfcomplex)d(arra)m(y)j
2689
 
(of)f(length)g Fo(n)p Fu(,)h(and)f(vice)150 4806 y(v)m(ersa.)377
2690
 
4773 y Fn(1)475 4806 y Fu(This)f(is)g(actually)i(only)f(half)f(of)i
 
2730
(is)f(not)150 4712 y(stored.)58 b(Th)m(us,)37 b(the)f(transform)g(of)g
 
2731
Fp(n)g Fv(real)g(v)-5 b(alues)35 b(is)g(a)i(halfcomplex)d(arra)m(y)j
 
2732
(of)f(length)g Fp(n)p Fv(,)h(and)f(vice)150 4822 y(v)m(ersa.)377
 
2733
4789 y Fo(1)475 4822 y Fv(This)f(is)g(actually)i(only)f(half)f(of)i
2691
2734
(the)g(DFT)g(sp)s(ectrum)f(of)h(the)f(data.)61 b(Although)36
2692
 
b(the)h(other)150 4915 y(half)29 b(can)i(b)s(e)f(obtained)g(b)m(y)g
 
2735
b(the)h(other)150 4931 y(half)29 b(can)i(b)s(e)f(obtained)g(b)m(y)g
2693
2736
(complex)h(conjugation,)f(it)h(is)e(not)i(required)e(b)m(y)h(man)m(y)h
2694
 
(applications)d(suc)m(h)150 5025 y(as)j(con)m(v)m(olution)f(and)g
2695
 
(\014ltering.)p 150 5131 1200 4 v 192 5197 a Fn(1)275
2696
 
5230 y Fu(The)21 b(output)g(for)g(the)h(m)m(ulti-dimensional)17
2697
 
b(r\013t)m(w)22 b(is)f(a)h(more-con)m(v)m(en)m(tional)h(arra)m(y)f(of)f
2698
 
Fo(fftw_complex)275 5340 y Fu(v)-5 b(alues,)29 b(but)h(the)h(format)f
2699
 
(here)h(p)s(ermitted)e(us)g(greater)j(e\016ciency)e(in)f(one)i
2700
 
(dimension.)p eop
 
2737
(applications)d(suc)m(h)150 5041 y(as)j(con)m(v)m(olution)f(and)g
 
2738
(\014ltering.)p 150 5149 1200 4 v 199 5217 a Fo(1)275
 
2739
5249 y Fj(The)22 b(output)f(for)h(the)g(m)n(ulti-dimensional)e(r\013t)n
 
2740
(w)i(is)h(a)f(more-con)n(v)n(en)n(tional)f(arra)n(y)h(of)h
 
2741
Fi(fftw_complex)h Fj(v)l(alues,)f(but)e(the)275 5340
 
2742
y(format)k(here)h(p)r(ermitted)e(us)i(greater)h(e\016ciency)e(in)h(one)
 
2743
g(dimension.)p eop end
2701
2744
%%Page: 7 9
2702
 
7 8 bop 150 -116 a Fu(Chapter)30 b(2:)41 b(T)-8 b(utorial)2768
2703
 
b(7)275 299 y(Lik)m(e)36 b(the)g(complex)g(transforms,)h(the)f(RFFTW)h
2704
 
(transforms)e(are)i(unnormalized,)e(so)i(a)f(forw)m(ard)150
2705
 
408 y(follo)m(w)m(ed)42 b(b)m(y)g(a)h(bac)m(kw)m(ard)f(transform)g
2706
 
(\(or)h(vice-v)m(ersa\))g(yields)e(the)h(original)f(data)i(scaled)f(b)m
2707
 
(y)g(the)150 518 y(length)30 b(of)g(the)h(arra)m(y)-8
2708
 
b(,)31 b Fo(n)p Fu(.)275 646 y(Let)41 b(us)f(reiterate)h(here)f(our)g
2709
 
(w)m(arning)g(that)h(an)f Fo(FFTW_COMPLEX_TO_REAL)c Fu(transform)j(has)
 
2745
TeXDict begin 7 8 bop 150 -116 a Fv(Chapter)30 b(2:)41
 
2746
b(T)-8 b(utorial)2768 b(7)275 299 y(Lik)m(e)36 b(the)g(complex)g
 
2747
(transforms,)h(the)f(RFFTW)h(transforms)e(are)i(unnormalized,)e(so)i(a)
 
2748
f(forw)m(ard)150 408 y(follo)m(w)m(ed)42 b(b)m(y)g(a)h(bac)m(kw)m(ard)f
 
2749
(transform)g(\(or)h(vice-v)m(ersa\))g(yields)e(the)h(original)f(data)i
 
2750
(scaled)f(b)m(y)g(the)150 518 y(length)30 b(of)g(the)h(arra)m(y)-8
 
2751
b(,)31 b Fp(n)p Fv(.)275 646 y(Let)41 b(us)f(reiterate)h(here)f(our)g
 
2752
(w)m(arning)g(that)h(an)f Fp(FFTW_COMPLEX_TO_REAL)c Fv(transform)j(has)
2710
2753
i(the)150 756 y(side-e\013ect)d(of)g(destro)m(ying)f(its)f
2711
 
(\(halfcomplex\))h(input.)60 b(The)37 b Fo(FFTW_REAL_TO_COMPLEX)31
2712
 
b Fu(transform,)150 865 y(ho)m(w)m(ev)m(er,)h(lea)m(v)m(es)g(its)d
 
2754
(\(halfcomplex\))h(input.)60 b(The)37 b Fp(FFTW_REAL_TO_COMPLEX)31
 
2755
b Fv(transform,)150 865 y(ho)m(w)m(ev)m(er,)h(lea)m(v)m(es)g(its)d
2713
2756
(\(real\))i(input)e(un)m(touc)m(hed,)h(just)g(as)h(y)m(ou)f(w)m(ould)f
2714
2757
(hop)s(e.)275 994 y(As)g(an)h(example,)f(here)h(is)e(an)i(outline)e(of)
2715
2758
i(ho)m(w)f(y)m(ou)h(migh)m(t)f(use)h(RFFTW)g(to)g(compute)g(the)g(p)s
2716
2759
(o)m(w)m(er)150 1103 y(sp)s(ectrum)f(of)i(a)g(real)f(arra)m(y)g(\(i.e.)
2717
2760
41 b(the)31 b(squares)f(of)g(the)h(absolute)f(v)-5 b(alues)30
2718
 
b(of)g(the)h(DFT)g(amplitudes\):)390 1225 y Fo(#include)46
 
2761
b(of)g(the)h(DFT)g(amplitudes\):)390 1225 y Fp(#include)46
2719
2762
b(<rfftw.h>)390 1329 y(...)390 1433 y({)629 1537 y(fftw_real)f(in[N],)h
2720
2763
(out[N],)g(power_spectrum[N/2+1];)629 1641 y(rfftw_plan)f(p;)629
2721
2764
1744 y(int)i(k;)629 1848 y(...)629 1952 y(p)g(=)h
2729
2772
h(is)f(even)g(*/)867 2678 y(power_spectrum[N/2])c(=)k
2730
2773
(out[N/2]*out[N/2];)91 b(/*)47 b(Nyquist)f(freq.)g(*/)629
2731
2774
2782 y(...)629 2886 y(rfftw_destroy_plan\(p\);)390 2990
2732
 
y(})275 3118 y Fu(Programs)39 b(using)f(RFFTW)i(should)e(link)f(with)i
2733
 
Fo(-lrfftw)28 b(-lfftw)h(-lm)38 b Fu(on)i(Unix,)h(or)e(with)g(the)150
 
2775
y(})275 3118 y Fv(Programs)39 b(using)f(RFFTW)i(should)e(link)f(with)i
 
2776
Fp(-lrfftw)28 b(-lfftw)h(-lm)38 b Fv(on)i(Unix,)h(or)e(with)g(the)150
2734
2777
3227 y(FFTW,)31 b(RFFTW,)h(and)d(math)i(libraries)c(in)i(general.)150
2735
 
3466 y Ft(2.4)68 b(Real)46 b(Multi-dimensional)h(T)-11
2736
 
b(ransforms)44 b(T)-11 b(utorial)275 3652 y Fu(FFTW)39
 
2778
3466 y Fu(2.4)68 b(Real)46 b(Multi-dimensional)h(T)-11
 
2779
b(ransforms)44 b(T)-11 b(utorial)275 3652 y Fv(FFTW)39
2737
2780
b(includes)d(m)m(ulti-dimensional)e(transforms)k(for)g(real)g(data)h
2738
2781
(of)g(an)m(y)g(rank.)64 b(As)39 b(with)e(the)150 3762
2739
2782
y(one-dimensional)j(real)j(transforms,)i(they)d(sa)m(v)m(e)j(roughly)c
2747
2790
4200 y(\(complex)e(to)i(real\))e(transforms)f(ha)m(v)m(e)j(the)f
2748
2791
(side-e\013ect)g(of)f(o)m(v)m(erwriting)g(their)g(input)e(data.)275
2749
2792
4328 y(T)-8 b(o)35 b(use)g(the)g(real)f(m)m(ulti-dimensional)d
2750
 
(transforms,)36 b(y)m(ou)f(\014rst)f Fo(#include)28 b(<rfftw.h>)33
2751
 
b Fu(and)h(then)150 4438 y(create)e(a)f(plan)e(for)h(the)g(size)h(and)e
 
2793
(transforms,)36 b(y)m(ou)f(\014rst)f Fp(#include)28 b(<rfftw.h>)33
 
2794
b Fv(and)h(then)150 4438 y(create)e(a)f(plan)e(for)h(the)g(size)h(and)e
2752
2795
(direction)g(of)i(transform)f(that)h(y)m(ou)f(are)h(in)m(terested)g
2753
 
(in:)390 4560 y Fo(rfftwnd_plan)44 b(rfftwnd_create_plan\(int)e(rank,)k
 
2796
(in:)390 4560 y Fp(rfftwnd_plan)44 b(rfftwnd_create_plan\(int)e(rank,)k
2754
2797
(const)h(int)g(*n,)1965 4664 y(fftw_direction)d(dir,)j(int)f(flags\);)
2755
 
275 4792 y Fu(The)35 b(\014rst)f(t)m(w)m(o)j(parameters)f(describ)s(e)e
 
2798
275 4792 y Fv(The)35 b(\014rst)f(t)m(w)m(o)j(parameters)f(describ)s(e)e
2756
2799
(the)i(size)g(of)f(the)h(real)f(data)i(\(not)f(the)g(halfcomplex)e
2757
2800
(data,)150 4902 y(whic)m(h)f(will)f(ha)m(v)m(e)k(di\013eren)m(t)e
2758
2801
(dimensions\).)51 b(The)34 b(last)h(t)m(w)m(o)h(parameters)e(are)h(the)
2759
 
g(same)g(as)g(those)g(for)150 5011 y Fo(rfftw_create_plan)p
2760
 
Fu(.)55 b(Just)36 b(as)h(for)g(\013t)m(wnd,)h(there)f(are)g(t)m(w)m(o)h
 
2802
g(same)g(as)g(those)g(for)150 5011 y Fp(rfftw_create_plan)p
 
2803
Fv(.)55 b(Just)36 b(as)h(for)g(\013t)m(wnd,)h(there)f(are)g(t)m(w)m(o)h
2761
2804
(alternate)g(v)m(ersions)e(of)h(this)f(routine,)150 5121
2762
 
y Fo(rfftw2d_create_plan)19 b Fu(and)k Fo(rfftw3d_create_plan)p
2763
 
Fu(,)d(that)k(are)g(sometimes)g(more)g(con)m(v)m(enien)m(t)h(for)150
 
2805
y Fp(rfftw2d_create_plan)19 b Fv(and)k Fp(rfftw3d_create_plan)p
 
2806
Fv(,)d(that)k(are)g(sometimes)g(more)g(con)m(v)m(enien)m(t)h(for)150
2764
2807
5230 y(t)m(w)m(o-)38 b(and)d(three-dimensional)f(transforms.)58
2765
2808
b(Also)36 b(as)g(in)f(\013t)m(wnd,)i(r\013t)m(wnd)f(supp)s(orts)e(true)
2766
2809
i(in-place)150 5340 y(transforms,)30 b(sp)s(eci\014ed)e(b)m(y)j
2767
 
(including)c Fo(FFTW_IN_PLACE)f Fu(in)j(the)i(\015ags.)p
2768
 
eop
 
2810
(including)c Fp(FFTW_IN_PLACE)f Fv(in)j(the)i(\015ags.)p
 
2811
eop end
2769
2812
%%Page: 8 10
2770
 
8 9 bop 150 -116 a Fu(8)3277 b(FFTW)275 299 y(Once)34
2771
 
b(created,)i(a)e(plan)f(can)i(b)s(e)e(used)g(for)h(an)m(y)h(n)m(um)m(b)
2772
 
s(er)e(of)h(transforms,)g(and)g(is)f(deallo)s(cated)h(b)m(y)150
2773
 
408 y(calling)29 b Fo(rfftwnd_destroy_plan\(pla)o(n\))p
2774
 
Fu(.)275 545 y(Giv)m(en)h(a)h(plan,)e(the)h(transform)g(is)f(computed)i
 
2813
TeXDict begin 8 9 bop 150 -116 a Fv(8)3277 b(FFTW)275
 
2814
299 y(Once)34 b(created,)i(a)e(plan)f(can)i(b)s(e)e(used)g(for)h(an)m
 
2815
(y)h(n)m(um)m(b)s(er)e(of)h(transforms,)g(and)g(is)f(deallo)s(cated)h
 
2816
(b)m(y)150 408 y(calling)29 b Fp(rfftwnd_destroy_plan\(pla)o(n\))p
 
2817
Fv(.)275 545 y(Giv)m(en)h(a)h(plan,)e(the)h(transform)g(is)f(computed)i
2775
2818
(b)m(y)f(calling)f(one)h(of)h(the)g(follo)m(wing)d(t)m(w)m(o)k
2776
 
(routines:)390 676 y Fo(void)47 b(rfftwnd_one_real_to_com)o(plex)o
 
2819
(routines:)390 676 y Fp(void)47 b(rfftwnd_one_real_to_com)o(plex)o
2777
2820
(\(rf)o(ftwn)o(d_pl)o(an)41 b(plan,)1965 779 y(fftw_real)k(*in,)i
2778
2821
(fftw_complex)d(*out\);)390 883 y(void)j(rfftwnd_one_complex_to_)o
2779
2822
(real)o(\(rf)o(ftwn)o(d_pl)o(an)41 b(plan,)1965 987 y(fftw_complex)j
2780
 
(*in,)j(fftw_real)e(*out\);)275 1124 y Fu(As)25 b(is)g(clear)g(from)g
 
2823
(*in,)j(fftw_real)e(*out\);)275 1124 y Fv(As)25 b(is)g(clear)g(from)g
2781
2824
(their)g(names)g(and)g(parameter)h(t)m(yp)s(es,)h(the)f(former)f
2782
 
(function)f(is)g(for)i Fo(FFTW_REAL_)150 1233 y(TO_COMPLEX)c
2783
 
Fu(transforms)i(and)h(the)g(latter)g(is)f(for)h Fo
2784
 
(FFTW_COMPLEX_TO_REAL)19 b Fu(transforms.)38 b(\(W)-8
 
2825
(function)f(is)g(for)i Fp(FFTW_REAL_)150 1233 y(TO_COMPLEX)c
 
2826
Fv(transforms)i(and)h(the)g(latter)g(is)f(for)h Fp
 
2827
(FFTW_COMPLEX_TO_REAL)19 b Fv(transforms.)38 b(\(W)-8
2785
2828
b(e)27 b(could)150 1343 y(ha)m(v)m(e)j(used)e(only)g(a)i(single)d
2786
2829
(routine,)i(since)f(the)h(direction)f(of)h(the)g(transform)g(is)f(enco)
2787
2830
s(ded)g(in)g(the)h(plan,)150 1452 y(but)34 b(w)m(e)h(w)m(an)m(ted)g(to)
2790
2833
y(as)e(w)m(e)g(discuss)e(elsewhere,)i(has)g(the)g(side-e\013ect)g(of)g
2791
2834
(o)m(v)m(erwriting)g(its)f(input)f(\(except)j(when)d(the)i(rank)150
2792
2835
1672 y(of)e(the)f(arra)m(y)h(is)e(one\).)42 b(In)29 b(b)s(oth)h(cases,)
2793
 
i(the)e Fo(out)g Fu(parameter)g(is)g(ignored)f(for)i(in-place)e
 
2836
i(the)e Fp(out)g Fv(parameter)g(is)g(ignored)f(for)i(in-place)e
2794
2837
(transforms.)275 1808 y(The)d(format)i(of)f(the)h(complex)f(arra)m(ys)g
2795
2838
(deserv)m(es)h(careful)f(atten)m(tion.)40 b(Supp)s(ose)26
2796
2839
b(that)i(the)f(real)g(data)150 1918 y(has)41 b(dimensions)e
2797
 
Fl(n)855 1932 y Fn(1)919 1918 y Fs(\002)28 b Fl(n)1073
2798
 
1932 y Fn(2)1137 1918 y Fs(\002)f(\001)15 b(\001)g(\001)29
2799
 
b(\002)e Fl(n)1522 1932 y Fk(d)1602 1918 y Fu(\(in)40
 
2840
Fm(n)855 1932 y Fo(1)919 1918 y Ft(\002)28 b Fm(n)1073
 
2841
1932 y Fo(2)1137 1918 y Ft(\002)f(\001)15 b(\001)g(\001)29
 
2842
b(\002)e Fm(n)1522 1932 y Fl(d)1602 1918 y Fv(\(in)40
2800
2843
b(ro)m(w-ma)5 b(jor)42 b(order\).)74 b(Then,)43 b(after)f(a)g
2801
2844
(real-to-complex)150 2027 y(transform,)28 b(the)f(output)h(is)e(an)i
2802
 
Fl(n)1307 2041 y Fn(1)1358 2027 y Fs(\002)15 b Fl(n)1499
2803
 
2041 y Fn(2)1550 2027 y Fs(\002)g(\001)g(\001)g(\001)f(\002)h
2804
 
Fu(\()p Fl(n)1931 2041 y Fk(d)1969 2027 y Fl(=)p Fu(2)g(+)g(1\))28
2805
 
b(arra)m(y)g(of)g Fo(fftw_complex)c Fu(v)-5 b(alues)27
 
2845
Fm(n)1307 2041 y Fo(1)1358 2027 y Ft(\002)15 b Fm(n)1499
 
2846
2041 y Fo(2)1550 2027 y Ft(\002)g(\001)g(\001)g(\001)f(\002)h
 
2847
Fv(\()p Fm(n)1931 2041 y Fl(d)1969 2027 y Fm(=)p Fv(2)g(+)g(1\))28
 
2848
b(arra)m(y)g(of)g Fp(fftw_complex)c Fv(v)-5 b(alues)27
2806
2849
b(in)g(ro)m(w-)150 2137 y(ma)5 b(jor)27 b(order,)g(corresp)s(onding)e
2807
2850
(to)j(sligh)m(tly)d(o)m(v)m(er)j(half)e(of)h(the)g(output)f(of)h(the)g
2808
2851
(corresp)s(onding)e(complex)150 2246 y(transform.)39
2825
2868
(data|t)m(w)m(o)h(extra)g(if)e(the)h(last)g(dimension)d(is)150
2826
2869
3260 y(ev)m(en)k(and)f(one)h(if)f(it)g(is)g(o)s(dd.)37
2827
2870
b(That)24 b(is,)g(the)g(last)f(dimension)e(of)j(the)g(real)f(data)i(m)m
2828
 
(ust)e(ph)m(ysically)f(con)m(tain)150 3369 y(2\()p Fl(n)285
2829
 
3383 y Fk(d)324 3369 y Fl(=)p Fu(2)j(+)g(1\))37 b Fo(fftw_real)d
2830
 
Fu(v)-5 b(alues)36 b(\(exactly)i(enough)f(to)g(hold)e(the)i(complex)g
 
2871
(ust)e(ph)m(ysically)f(con)m(tain)150 3369 y(2\()p Fm(n)285
 
2872
3383 y Fl(d)324 3369 y Fm(=)p Fv(2)j(+)g(1\))37 b Fp(fftw_real)d
 
2873
Fv(v)-5 b(alues)36 b(\(exactly)i(enough)f(to)g(hold)e(the)i(complex)g
2831
2874
(data\).)60 b(This)35 b(ph)m(ysical)150 3479 y(arra)m(y)42
2832
2875
b(size)g(do)s(es)f(not,)k(ho)m(w)m(ev)m(er,)i(c)m(hange)c(the)e
2833
 
Fq(lo)-5 b(gic)g(al)53 b Fu(arra)m(y)42 b(size|only)f
2834
 
Fl(n)2909 3493 y Fk(d)2989 3479 y Fu(v)-5 b(alues)41
 
2876
Fr(lo)-5 b(gic)g(al)53 b Fv(arra)m(y)42 b(size|only)f
 
2877
Fm(n)2909 3493 y Fl(d)2989 3479 y Fv(v)-5 b(alues)41
2835
2878
b(are)h(actually)150 3588 y(stored)27 b(in)e(the)i(last)g(dimension,)e
2836
 
(and)h Fl(n)1524 3602 y Fk(d)1589 3588 y Fu(is)g(the)h(last)g
2837
 
(dimension)d(passed)i(to)i Fo(rfftwnd_create_plan)p Fu(.)275
 
2879
(and)h Fm(n)1524 3602 y Fl(d)1589 3588 y Fv(is)g(the)h(last)g
 
2880
(dimension)d(passed)i(to)i Fp(rfftwnd_create_plan)p Fv(.)275
2838
2881
3725 y(F)-8 b(or)37 b(example,)h(consider)d(the)i(transform)f(of)g(a)h
2839
2882
(t)m(w)m(o-dimensional)f(real)g(arra)m(y)h(of)g(size)f
2840
 
Fo(nx)g Fu(b)m(y)g Fo(ny)p Fu(.)150 3835 y(The)28 b(output)h(of)g(the)g
2841
 
Fo(rfftwnd)e Fu(transform)i(is)f(a)h(t)m(w)m(o-dimensional)f(real)h
2842
 
(arra)m(y)g(of)g(size)g Fo(nx)g Fu(b)m(y)f Fo(ny/2+1)p
2843
 
Fu(,)150 3944 y(where)k(the)h Fo(y)g Fu(dimension)d(has)j(b)s(een)f
2844
 
(cut)h(nearly)f(in)f(half)h(b)s(ecause)h(of)g(redundancies)e(in)g(the)i
2845
 
(output.)150 4054 y(Because)j Fo(fftw_complex)c Fu(is)i(t)m(wice)h(the)
2846
 
g(size)g(of)g Fo(fftw_real)p Fu(,)f(the)h(output)g(arra)m(y)g(is)f
2847
 
(sligh)m(tly)f(bigger)150 4163 y(than)27 b(the)h(input)d(arra)m(y)-8
2848
 
b(.)40 b(Th)m(us,)28 b(if)e(w)m(e)i(w)m(an)m(t)g(to)g(compute)f(the)h
2849
 
(transform)e(in)g(place,)i(w)m(e)g(m)m(ust)f Fq(p)-5
2850
 
b(ad)39 b Fu(the)150 4273 y(input)25 b(arra)m(y)i(so)g(that)h(it)e(is)g
2851
 
(of)h(size)g Fo(nx)f Fu(b)m(y)h Fo(2*\(ny/2+1\))p Fu(.)37
2852
 
b(If)26 b Fo(ny)g Fu(is)g(ev)m(en,)j(then)d(there)h(are)h(t)m(w)m(o)g
2853
 
(padding)150 4382 y(elemen)m(ts)36 b(at)g(the)f(end)g(of)g(eac)m(h)i
2854
 
(ro)m(w)e(\(whic)m(h)g(need)g(not)g(b)s(e)g(initialized,)e(as)j(they)g
2855
 
(are)f(only)g(used)f(for)150 4492 y(output\).)275 4629
2856
 
y(Figure)h(1)h(depicts)f(the)h(input)e(and)h(output)g(arra)m(ys)i(just)
2857
 
e(describ)s(ed,)g(for)h(b)s(oth)f(the)h(out-of-place)150
 
2883
Fp(nx)g Fv(b)m(y)g Fp(ny)p Fv(.)150 3835 y(The)k(output)g(of)h(the)g
 
2884
Fp(rfftwnd)d Fv(transform)i(is)g(a)g(t)m(w)m(o-dimensional)g(complex)g
 
2885
(arra)m(y)h(of)g(size)f Fp(nx)g Fv(b)m(y)150 3944 y Fp(ny/2+1)p
 
2886
Fv(,)30 b(where)h(the)h Fp(y)f Fv(dimension)e(has)j(b)s(een)f(cut)g
 
2887
(nearly)g(in)f(half)h(b)s(ecause)g(of)h(redundancies)d(in)i(the)150
 
2888
4054 y(output.)40 b(Because)32 b Fp(fftw_complex)27 b
 
2889
Fv(is)j(t)m(wice)g(the)h(size)f(of)h Fp(fftw_real)p Fv(,)d(the)i
 
2890
(output)g(arra)m(y)h(is)f(sligh)m(tly)150 4163 y(bigger)g(than)h(the)g
 
2891
(input)e(arra)m(y)-8 b(.)43 b(Th)m(us,)30 b(if)g(w)m(e)h(w)m(an)m(t)h
 
2892
(to)g(compute)f(the)g(transform)f(in)g(place,)h(w)m(e)g(m)m(ust)150
 
2893
4273 y Fr(p)-5 b(ad)39 b Fv(the)28 b(input)e(arra)m(y)j(so)f(that)g(it)
 
2894
g(is)f(of)h(size)g Fp(nx)f Fv(b)m(y)h Fp(2*\(ny/2+1\))p
 
2895
Fv(.)37 b(If)28 b Fp(ny)f Fv(is)g(ev)m(en,)i(then)f(there)g(are)h(t)m
 
2896
(w)m(o)150 4382 y(padding)34 b(elemen)m(ts)h(at)i(the)e(end)g(of)h(eac)
 
2897
m(h)h(ro)m(w)e(\(whic)m(h)g(need)g(not)h(b)s(e)f(initialized,)e(as)j
 
2898
(they)g(are)g(only)150 4492 y(used)30 b(for)g(output\).)275
 
2899
4629 y(Figure)35 b(1)h(depicts)f(the)h(input)e(and)h(output)g(arra)m
 
2900
(ys)i(just)e(describ)s(ed,)g(for)h(b)s(oth)f(the)h(out-of-place)150
2858
2901
4738 y(and)30 b(in-place)f(transforms)h(\(with)f(the)i(arro)m(ws)f
2859
2902
(indicating)e(consecutiv)m(e)k(memory)e(lo)s(cations\).)275
2860
2903
4875 y(The)41 b(RFFTWND)i(transforms)e(are)h(unnormalized,)h(so)f(a)g
2866
2909
(illustrate)f(the)i(use)f(of)g(RFFTWND)i(b)m(y)e(sho)m(wing)g(ho)m(w)g
2867
2910
(y)m(ou)h(migh)m(t)f(use)g(it)g(to)i(compute)150 5340
2868
2911
y(the)35 b(\(cyclic\))h(con)m(v)m(olution)f(of)h(t)m(w)m(o-dimensional)
2869
 
e(real)h(arra)m(ys)g Fo(a)g Fu(and)g Fo(b)g Fu(\(using)f(the)h(iden)m
2870
 
(tit)m(y)g(that)h(a)p eop
 
2912
e(real)h(arra)m(ys)g Fp(a)g Fv(and)g Fp(b)g Fv(\(using)f(the)h(iden)m
 
2913
(tit)m(y)g(that)h(a)p eop end
2871
2914
%%Page: 9 11
2872
 
9 10 bop 150 -116 a Fu(Chapter)30 b(2:)41 b(T)-8 b(utorial)2768
2873
 
b(9)607 4188 y @beginspecial @setspecial
 
2915
TeXDict begin 9 10 bop 150 -116 a Fv(Chapter)30 b(2:)41
 
2916
b(T)-8 b(utorial)2768 b(9)607 4188 y @beginspecial @setspecial
2874
2917
%%BeginDocument: rfftwnd.eps
2875
2918
%!PS-Adobe-2.0 EPSF-2.0
2876
2919
%%Title: rfftwnd.fig
2877
2920
%%Creator: fig2dev Version 3.2 Patchlevel 1
2878
 
%%CreationDate: Sun Nov  7 20:50:16 1999
 
2921
%%CreationDate: Wed Jul 28 13:17:30 1999
2879
2922
%%For: stevenj@superjdj (Steven G. Johnson)
2880
2923
%%Orientation: Portrait
2881
2924
%%BoundingBox: 0 0 268 405
4610
4653
%%EndDocument
4611
4654
 @endspecial 275 4522 a(Figure)29 b(1:)42 b(Illustration)27
4612
4655
b(of)k(the)g(data)g(la)m(y)m(out)g(for)f(real)g(to)h(complex)f
4613
 
(transforms.)p eop
 
4656
(transforms.)p eop end
4614
4657
%%Page: 10 12
4615
 
10 11 bop 150 -116 a Fu(10)3232 b(FFTW)150 299 y(con)m(v)m(olution)41
4616
 
b(corresp)s(onds)e(to)i(a)g(p)s(oin)m(t)m(wise)e(pro)s(duct)h(of)h(the)
4617
 
f(F)-8 b(ourier)41 b(transforms\).)71 b(F)-8 b(or)41
4618
 
b(v)-5 b(ariet)m(y)d(,)150 408 y(in-place)25 b(transforms)h(are)g(used)
4619
 
g(for)g(the)g(forw)m(ard)g(FFTs)h(and)e(an)h(out-of-place)i(transform)d
4620
 
(is)h(used)f(for)150 518 y(the)31 b(in)m(v)m(erse)f(transform.)390
4621
 
692 y Fo(#include)46 b(<rfftw.h>)390 796 y(...)390 900
4622
 
y({)629 1003 y(fftw_real)f(a[M][2*\(N/2+1\)],)e(b[M][2*\(N/2+1\)],)h
4623
 
(c[M][N];)629 1107 y(fftw_complex)g(*A,)j(*B,)g(C[M][N/2+1];)629
4624
 
1211 y(rfftwnd_plan)d(p,)j(pinv;)629 1315 y(fftw_real)e(scale)h(=)i
4625
 
(1.0)f(/)g(\(M)g(*)h(N\);)629 1418 y(int)f(i,)g(j;)629
4626
 
1522 y(...)629 1626 y(p)190 b(=)48 b(rfftw2d_create_plan\(M,)41
4627
 
b(N,)48 b(FFTW_REAL_TO_COMPLEX,)1917 1730 y(FFTW_ESTIMATE)c(|)k
 
4658
TeXDict begin 10 11 bop 150 -116 a Fv(10)3232 b(FFTW)150
 
4659
299 y(con)m(v)m(olution)41 b(corresp)s(onds)e(to)i(a)g(p)s(oin)m(t)m
 
4660
(wise)e(pro)s(duct)h(of)h(the)f(F)-8 b(ourier)41 b(transforms\).)71
 
4661
b(F)-8 b(or)41 b(v)-5 b(ariet)m(y)d(,)150 408 y(in-place)25
 
4662
b(transforms)h(are)g(used)g(for)g(the)g(forw)m(ard)g(FFTs)h(and)e(an)h
 
4663
(out-of-place)i(transform)d(is)h(used)f(for)150 518 y(the)31
 
4664
b(in)m(v)m(erse)f(transform.)390 692 y Fp(#include)46
 
4665
b(<rfftw.h>)390 796 y(...)390 900 y({)629 1003 y(fftw_real)f
 
4666
(a[M][2*\(N/2+1\)],)e(b[M][2*\(N/2+1\)],)h(c[M][N];)629
 
4667
1107 y(fftw_complex)g(*A,)j(*B,)g(C[M][N/2+1];)629 1211
 
4668
y(rfftwnd_plan)d(p,)j(pinv;)629 1315 y(fftw_real)e(scale)h(=)i(1.0)f(/)
 
4669
g(\(M)g(*)h(N\);)629 1418 y(int)f(i,)g(j;)629 1522 y(...)629
 
4670
1626 y(p)190 b(=)48 b(rfftw2d_create_plan\(M,)41 b(N,)48
 
4671
b(FFTW_REAL_TO_COMPLEX,)1917 1730 y(FFTW_ESTIMATE)c(|)k
4628
4672
(FFTW_IN_PLACE\);)629 1834 y(pinv)e(=)i(rfftw2d_create_plan\(M,)41
4629
4673
b(N,)48 b(FFTW_COMPLEX_TO_REAL,)1917 1937 y(FFTW_ESTIMATE\);)629
4630
4674
2145 y(/*)f(aliases)f(for)h(accessing)e(complex)h(transform)f(outputs:)
4648
4692
o(real)o(\(pi)o(nv,)41 b(&C[0][0],)46 b(&c[0][0]\);)629
4649
4693
4739 y(...)629 4843 y(rfftwnd_destroy_plan\(p\))o(;)629
4650
4694
4947 y(rfftwnd_destroy_plan\(pi)o(nv\);)390 5051 y(})275
4651
 
5230 y Fu(W)-8 b(e)27 b(access)h(the)f(complex)f(outputs)g(of)g(the)h
 
4695
5230 y Fv(W)-8 b(e)27 b(access)h(the)f(complex)f(outputs)g(of)g(the)h
4652
4696
(in-place)e(transforms)h(b)m(y)g(casting)h(eac)m(h)g(real)f(arra)m(y)h
4653
 
(to)h(a)150 5340 y Fo(fftw_complex)d Fu(p)s(oin)m(ter.)39
 
4697
(to)h(a)150 5340 y Fp(fftw_complex)d Fv(p)s(oin)m(ter.)39
4654
4698
b(Because)30 b(this)d(is)g(a)i(\\\015at")h(p)s(oin)m(ter,)e(w)m(e)h(ha)
4655
4699
m(v)m(e)g(to)g(compute)g(the)f(ro)m(w-ma)5 b(jor)p eop
 
4700
end
4656
4701
%%Page: 11 13
4657
 
11 12 bop 150 -116 a Fu(Chapter)30 b(2:)41 b(T)-8 b(utorial)2722
4658
 
b(11)150 299 y(index)28 b Fo(ij)i Fu(explicitly)d(in)i(the)h(con)m(v)m
4659
 
(olution)f(pro)s(duct)g(lo)s(op.)40 b(In)29 b(order)g(to)i(normalize)e
4660
 
(the)h(con)m(v)m(olution,)150 408 y(w)m(e)23 b(m)m(ust)f(m)m(ultiply)d
4661
 
(b)m(y)k(a)f(scale)h(factor|w)m(e)h(can)e(do)g(so)h(either)f(b)s(efore)
4662
 
g(or)g(after)h(the)f(in)m(v)m(erse)g(transform,)150 518
4663
 
y(and)34 b(c)m(ho)s(ose)h(the)g(former)f(b)s(ecause)g(it)g(ob)m(viates)
4664
 
h(the)g(necessit)m(y)f(of)h(an)f(additional)e(lo)s(op.)52
4665
 
b(Notice)36 b(the)150 628 y(limits)28 b(of)j(the)f(lo)s(ops)f(and)h
4666
 
(the)h(dimensions)c(of)k(the)g(v)-5 b(arious)29 b(arra)m(ys.)275
4667
 
765 y(As)38 b(with)g(the)h(one-dimensional)e(RFFTW,)j(an)f
4668
 
(out-of-place)h Fo(FFTW_COMPLEX_TO_REAL)33 b Fu(trans-)150
 
4702
TeXDict begin 11 12 bop 150 -116 a Fv(Chapter)30 b(2:)41
 
4703
b(T)-8 b(utorial)2722 b(11)150 299 y(index)28 b Fp(ij)i
 
4704
Fv(explicitly)d(in)i(the)h(con)m(v)m(olution)f(pro)s(duct)g(lo)s(op.)40
 
4705
b(In)29 b(order)g(to)i(normalize)e(the)h(con)m(v)m(olution,)150
 
4706
408 y(w)m(e)23 b(m)m(ust)f(m)m(ultiply)d(b)m(y)k(a)f(scale)h(factor|w)m
 
4707
(e)h(can)e(do)g(so)h(either)f(b)s(efore)g(or)g(after)h(the)f(in)m(v)m
 
4708
(erse)g(transform,)150 518 y(and)34 b(c)m(ho)s(ose)h(the)g(former)f(b)s
 
4709
(ecause)g(it)g(ob)m(viates)h(the)g(necessit)m(y)f(of)h(an)f(additional)
 
4710
e(lo)s(op.)52 b(Notice)36 b(the)150 628 y(limits)28 b(of)j(the)f(lo)s
 
4711
(ops)f(and)h(the)h(dimensions)c(of)k(the)g(v)-5 b(arious)29
 
4712
b(arra)m(ys.)275 765 y(As)38 b(with)g(the)h(one-dimensional)e(RFFTW,)j
 
4713
(an)f(out-of-place)h Fp(FFTW_COMPLEX_TO_REAL)33 b Fv(trans-)150
4669
4714
875 y(form)e(has)h(the)g(side-e\013ect)h(of)f(o)m(v)m(erwriting)g(its)f
4670
4715
(input)f(arra)m(y)-8 b(.)47 b(\(The)31 b(real-to-complex)i(transform,)f
4671
4716
(on)150 984 y(the)k(other)f(hand,)h(lea)m(v)m(es)h(its)e(input)e(arra)m
4679
4724
b(RFFTWND)d(in)e(one)h(dimension)d(is)i(sligh)m(tly)g(slo)m(w)m(er)150
4680
4725
1423 y(than)d(RFFTW)h(b)s(ecause)f(RFFTWND)i(uses)e(an)g(extra)h
4681
4726
(bu\013er)f(arra)m(y)h(in)m(ternally)-8 b(.)150 1688
4682
 
y Ft(2.5)68 b(Multi-dimensional)46 b(Arra)l(y)f(F)-11
4683
 
b(ormat)275 1883 y Fu(This)28 b(section)i(describ)s(es)f(the)h(format)h
 
4727
y Fu(2.5)68 b(Multi-dimensional)46 b(Arra)l(y)f(F)-11
 
4728
b(ormat)275 1883 y Fv(This)28 b(section)i(describ)s(es)f(the)h(format)h
4684
4729
(in)e(whic)m(h)g(m)m(ulti-dimensional)d(arra)m(ys)k(are)h(stored.)41
4685
4730
b(W)-8 b(e)31 b(felt)150 1993 y(that)f(a)h(detailed)d(discussion)f(of)j
4686
4731
(this)f(topic)h(w)m(as)g(necessary)-8 b(,)31 b(since)e(it)g(is)g(often)
4687
4732
h(a)g(source)g(of)g(confusion)150 2103 y(among)c(users)e(and)g(sev)m
4688
4733
(eral)h(di\013eren)m(t)g(formats)g(are)h(common.)39 b(Although)24
4689
4734
b(the)h(commen)m(ts)h(b)s(elo)m(w)e(refer)150 2212 y(to)31
4690
 
b Fo(fftwnd)p Fu(,)e(they)i(are)f(also)h(applicable)d(to)j(the)g
4691
 
Fo(rfftwnd)d Fu(routines.)150 2443 y Fi(2.5.1)63 b(Ro)m(w-ma)7
4692
 
b(jor)38 b(F)-10 b(ormat)275 2638 y Fu(The)38 b(m)m(ulti-dimensional)d
4693
 
(arra)m(ys)k(passed)f(to)h Fo(fftwnd)e Fu(are)j(exp)s(ected)f(to)g(b)s
 
4735
b Fp(fftwnd)p Fv(,)e(they)i(are)f(also)h(applicable)d(to)j(the)g
 
4736
Fp(rfftwnd)d Fv(routines.)150 2443 y Fh(2.5.1)63 b(Ro)m(w-ma)7
 
4737
b(jor)38 b(F)-10 b(ormat)275 2638 y Fv(The)38 b(m)m(ulti-dimensional)d
 
4738
(arra)m(ys)k(passed)f(to)h Fp(fftwnd)e Fv(are)j(exp)s(ected)f(to)g(b)s
4694
4739
(e)f(stored)h(as)g(a)g(single)150 2748 y(con)m(tiguous)c(blo)s(c)m(k)f
4695
 
(in)g Fp(ro)m(w-ma)5 b(jor)42 b Fu(order)34 b(\(sometimes)i(called)e
 
4740
(in)g Fq(ro)m(w-ma)5 b(jor)42 b Fv(order)34 b(\(sometimes)i(called)e
4696
4741
(\\C)h(order"\).)54 b(Basically)-8 b(,)36 b(this)e(means)150
4697
4742
2857 y(that)26 b(as)f(y)m(ou)h(step)f(through)f(adjacen)m(t)j(memory)e
4698
4743
(lo)s(cations,)h(the)f(\014rst)g(dimension's)d(index)i(v)-5
4699
4744
b(aries)25 b(most)150 2967 y(slo)m(wly)k(and)h(the)h(last)f
4700
4745
(dimension's)e(index)h(v)-5 b(aries)29 b(most)i(quic)m(kly)-8
4701
4746
b(.)275 3105 y(T)g(o)31 b(b)s(e)g(more)g(explicit,)f(let)i(us)e
4702
 
(consider)g(an)i(arra)m(y)f(of)h(rank)f Fl(d)g Fu(whose)g(dimensions)e
4703
 
(are)j Fl(n)3418 3119 y Fn(1)3475 3105 y Fs(\002)21 b
4704
 
Fl(n)3622 3119 y Fn(2)3679 3105 y Fs(\002)150 3214 y
4705
 
Fl(n)205 3228 y Fn(3)256 3214 y Fs(\002)15 b(\001)g(\001)g(\001)g(\002)
4706
 
g Fl(n)603 3228 y Fk(d)641 3214 y Fu(.)39 b(No)m(w,)29
 
4747
(consider)g(an)i(arra)m(y)f(of)h(rank)f Fm(d)g Fv(whose)g(dimensions)e
 
4748
(are)j Fm(n)3418 3119 y Fo(1)3475 3105 y Ft(\002)21 b
 
4749
Fm(n)3622 3119 y Fo(2)3679 3105 y Ft(\002)150 3214 y
 
4750
Fm(n)205 3228 y Fo(3)256 3214 y Ft(\002)15 b(\001)g(\001)g(\001)g(\002)
 
4751
g Fm(n)603 3228 y Fl(d)641 3214 y Fv(.)39 b(No)m(w,)29
4707
4752
b(w)m(e)f(sp)s(ecify)f(a)g(lo)s(cation)h(in)e(the)i(arra)m(y)g(b)m(y)f
4708
4753
(a)h(sequence)g(of)f(\(zero-based\))j(indices,)150 3324
4709
 
y(one)36 b(for)g(eac)m(h)i(dimension:)49 b(\()p Fl(i)1220
4710
 
3338 y Fn(1)1258 3324 y Fl(;)15 b(i)1329 3338 y Fn(2)1367
4711
 
3324 y Fl(;)g(i)1438 3338 y Fn(3)1476 3324 y Fl(;)g(:)g(:)g(:)i(;)e(i)
4712
 
1709 3338 y Fk(d)1748 3324 y Fu(\).)58 b(If)36 b(the)g(arra)m(y)h(is)e
 
4754
y(one)36 b(for)g(eac)m(h)i(dimension:)49 b(\()p Fm(i)1220
 
4755
3338 y Fo(1)1258 3324 y Fm(;)15 b(i)1329 3338 y Fo(2)1367
 
4756
3324 y Fm(;)g(i)1438 3338 y Fo(3)1476 3324 y Fm(;)g(:)g(:)g(:)i(;)e(i)
 
4757
1709 3338 y Fl(d)1748 3324 y Fv(\).)58 b(If)36 b(the)g(arra)m(y)h(is)e
4713
4758
(stored)h(in)f(ro)m(w-ma)5 b(jor)37 b(order,)g(then)150
4714
4759
3433 y(this)29 b(elemen)m(t)i(is)f(lo)s(cated)g(at)h(the)g(p)s(osition)
4715
 
d Fl(i)1715 3447 y Fk(d)1775 3433 y Fu(+)19 b Fl(n)1920
4716
 
3447 y Fk(d)1959 3433 y Fu(\()p Fl(i)2025 3447 y Fk(d)p
4717
 
Fj(\000)p Fn(1)2169 3433 y Fu(+)h Fl(n)2315 3447 y Fk(d)p
4718
 
Fj(\000)p Fn(1)2439 3433 y Fu(\()p Fl(:)15 b(:)g(:)21
4719
 
b Fu(+)f Fl(n)2746 3447 y Fn(2)2783 3433 y Fl(i)2814
4720
 
3447 y Fn(1)2851 3433 y Fu(\)\).)275 3571 y(Note)32 b(that)g(eac)m(h)h
 
4760
d Fm(i)1715 3447 y Fl(d)1775 3433 y Fv(+)19 b Fm(n)1920
 
4761
3447 y Fl(d)1959 3433 y Fv(\()p Fm(i)2025 3447 y Fl(d)p
 
4762
Fk(\000)p Fo(1)2169 3433 y Fv(+)h Fm(n)2315 3447 y Fl(d)p
 
4763
Fk(\000)p Fo(1)2439 3433 y Fv(\()p Fm(:)15 b(:)g(:)21
 
4764
b Fv(+)f Fm(n)2746 3447 y Fo(2)2783 3433 y Fm(i)2814
 
4765
3447 y Fo(1)2851 3433 y Fv(\)\).)275 3571 y(Note)32 b(that)g(eac)m(h)h
4721
4766
(elemen)m(t)f(of)f(the)h(arra)m(y)g(m)m(ust)f(b)s(e)g(of)g(t)m(yp)s(e)h
4722
 
Fo(fftw_complex)p Fu(;)c(i.e.)44 b(a)32 b(\(real,)g(imagi-)150
 
4767
Fp(fftw_complex)p Fv(;)c(i.e.)44 b(a)32 b(\(real,)g(imagi-)150
4723
4768
3681 y(nary\))g(pair)f(of)h(\(double-precision\))e(n)m(um)m(b)s(ers.)44
4724
 
b(Note)34 b(also)e(that,)h(in)e Fo(fftwnd)p Fu(,)g(the)h(expression)f
 
4769
b(Note)34 b(also)e(that,)h(in)e Fp(fftwnd)p Fv(,)g(the)h(expression)f
4725
4770
(ab)s(o)m(v)m(e)150 3790 y(is)g(m)m(ultiplied)d(b)m(y)k(the)g(stride)f
4726
4771
(to)h(get)h(the)f(actual)h(arra)m(y)f(index|this)d(is)i(useful)f(in)h
4727
4772
(situations)f(where)150 3900 y(eac)m(h)35 b(elemen)m(t)f(of)f(the)h(m)m
4729
4774
(or)f(another)h(arra)m(y)-8 b(,)150 4009 y(and)28 b(y)m(ou)g(just)g(w)m
4730
4775
(an)m(t)h(to)g(transform)e(a)i(single)e(\014eld.)39 b(In)27
4731
4776
b(most)i(cases,)g(ho)m(w)m(ev)m(er,)i(y)m(ou)d(use)g(a)h(stride)e(of)h
4732
 
(1.)150 4349 y Fi(2.5.2)63 b(Column-ma)7 b(jor)39 b(F)-10
4733
 
b(ormat)275 4545 y Fu(Readers)27 b(from)g(the)h(F)-8
 
4777
(1.)150 4349 y Fh(2.5.2)63 b(Column-ma)7 b(jor)39 b(F)-10
 
4778
b(ormat)275 4545 y Fv(Readers)27 b(from)g(the)h(F)-8
4734
4779
b(ortran)28 b(w)m(orld)f(are)h(used)e(to)j(arra)m(ys)f(stored)f(in)g
4735
 
Fp(column-ma)5 b(jor)33 b Fu(order)27 b(\(some-)150 4654
 
4780
Fq(column-ma)5 b(jor)33 b Fv(order)27 b(\(some-)150 4654
4736
4781
y(times)k(called)g(\\F)-8 b(ortran)33 b(order"\).)45
4737
4782
b(This)30 b(is)h(essen)m(tially)g(the)h(exact)h(opp)s(osite)e(of)h(ro)m
4738
4783
(w-ma)5 b(jor)32 b(order)f(in)150 4764 y(that,)g(here,)g(the)f
4739
 
Fq(\014rst)40 b Fu(dimension's)28 b(index)h(v)-5 b(aries)30
 
4784
Fr(\014rst)40 b Fv(dimension's)28 b(index)h(v)-5 b(aries)30
4740
4785
b(most)g(quic)m(kly)-8 b(.)275 4902 y(If)22 b(y)m(ou)h(ha)m(v)m(e)h(an)
4741
4786
e(arra)m(y)h(stored)g(in)f(column-ma)5 b(jor)21 b(order)i(and)f(wish)f
4742
 
(to)i(transform)f(it)g(using)f Fo(fftwnd)p Fu(,)150 5011
 
4787
(to)i(transform)f(it)g(using)f Fp(fftwnd)p Fv(,)150 5011
4743
4788
y(it)31 b(is)g(quite)g(easy)i(to)f(do.)45 b(When)32 b(creating)g(the)g
4744
4789
(plan,)f(simply)e(pass)j(the)g(dimensions)d(of)j(the)g(arra)m(y)g(to)
4745
 
150 5121 y Fo(fftwnd_create_plan)d Fu(in)k Fq(r)-5 b(everse)37
4746
 
b(or)-5 b(der)p Fu(.)54 b(F)-8 b(or)35 b(example,)g(if)e(y)m(our)h
4747
 
(arra)m(y)h(is)e(a)i(rank)f(three)g Fo(N)c(x)g(M)g(x)150
4748
 
5230 y(L)i Fu(matrix)f(in)g(column-ma)5 b(jor)32 b(order,)g(y)m(ou)h
 
4790
150 5121 y Fp(fftwnd_create_plan)d Fv(in)k Fr(r)-5 b(everse)37
 
4791
b(or)-5 b(der)p Fv(.)54 b(F)-8 b(or)35 b(example,)g(if)e(y)m(our)h
 
4792
(arra)m(y)h(is)e(a)i(rank)f(three)g Fp(N)c(x)g(M)g(x)150
 
4793
5230 y(L)i Fv(matrix)f(in)g(column-ma)5 b(jor)32 b(order,)g(y)m(ou)h
4749
4794
(should)d(pass)i(the)g(dimensions)e(of)i(the)g(arra)m(y)h(as)g(if)e(it)
4750
 
g(w)m(ere)150 5340 y(an)39 b Fo(L)30 b(x)g(M)g(x)g(N)39
4751
 
b Fu(matrix)f(\(whic)m(h)g(it)h(is,)i(from)d(the)h(p)s(ersp)s(ectiv)m
4752
 
(e)g(of)g Fo(fftwnd)p Fu(\).)65 b(This)38 b(is)g(done)h(for)g(y)m(ou)p
4753
 
eop
 
4795
g(w)m(ere)150 5340 y(an)39 b Fp(L)30 b(x)g(M)g(x)g(N)39
 
4796
b Fv(matrix)f(\(whic)m(h)g(it)h(is,)i(from)d(the)h(p)s(ersp)s(ectiv)m
 
4797
(e)g(of)g Fp(fftwnd)p Fv(\).)65 b(This)38 b(is)g(done)h(for)g(y)m(ou)p
 
4798
eop end
4754
4799
%%Page: 12 14
4755
 
12 13 bop 150 -116 a Fu(12)3232 b(FFTW)150 299 y(automatically)27
4756
 
b(b)m(y)f(the)h(FFTW)h(F)-8 b(ortran)27 b(wrapp)s(er)e(routines)h
4757
 
(\(see)i(Chapter)e(5)h([Calling)e(FFTW)i(from)150 408
4758
 
y(F)-8 b(ortran],)32 b(page)f(51\).)150 635 y Fi(2.5.3)63
4759
 
b(Static)39 b(Arra)m(ys)i(in)g(C)275 829 y Fu(Multi-dimensional)35
4760
 
b(arra)m(ys)k(declared)f(statically)h(\(that)h(is,)g(at)g(compile)e
4761
 
(time,)j(not)e(necessarily)150 938 y(with)29 b(the)h
4762
 
Fo(static)e Fu(k)m(eyw)m(ord\))j(in)d(C)i(are)g Fq(alr)-5
4763
 
b(e)g(ady)41 b Fu(in)29 b(ro)m(w-ma)5 b(jor)30 b(order.)40
4764
 
b(Y)-8 b(ou)31 b(don't)f(ha)m(v)m(e)h(to)f(do)g(an)m(y-)150
 
4800
TeXDict begin 12 13 bop 150 -116 a Fv(12)3232 b(FFTW)150
 
4801
299 y(automatically)27 b(b)m(y)f(the)h(FFTW)h(F)-8 b(ortran)27
 
4802
b(wrapp)s(er)e(routines)h(\(see)i(Chapter)e(5)h([Calling)e(FFTW)i(from)
 
4803
150 408 y(F)-8 b(ortran],)32 b(page)f(51\).)150 635 y
 
4804
Fh(2.5.3)63 b(Static)39 b(Arra)m(ys)i(in)g(C)275 829
 
4805
y Fv(Multi-dimensional)35 b(arra)m(ys)k(declared)f(statically)h(\(that)
 
4806
h(is,)g(at)g(compile)e(time,)j(not)e(necessarily)150
 
4807
938 y(with)29 b(the)h Fp(static)e Fv(k)m(eyw)m(ord\))j(in)d(C)i(are)g
 
4808
Fr(alr)-5 b(e)g(ady)41 b Fv(in)29 b(ro)m(w-ma)5 b(jor)30
 
4809
b(order.)40 b(Y)-8 b(ou)31 b(don't)f(ha)m(v)m(e)h(to)f(do)g(an)m(y-)150
4765
4810
1048 y(thing)g(sp)s(ecial)f(to)j(transform)e(them.)42
4766
4811
b(\(See)31 b(Section)g(2.2)h([Complex)e(Multi-dimensional)d(T)-8
4767
4812
b(ransforms)150 1157 y(T)g(utorial],)30 b(page)h(4,)g(for)f(an)g
4768
4813
(example)g(of)h(this)e(sort)i(of)f(co)s(de.\))150 1384
4769
 
y Fi(2.5.4)63 b(Dynamic)39 b(Arra)m(ys)h(in)i(C)275 1578
4770
 
y Fu(Often,)49 b(esp)s(ecially)43 b(for)j(large)f(arra)m(ys,)50
 
4814
y Fh(2.5.4)63 b(Dynamic)39 b(Arra)m(ys)h(in)i(C)275 1578
 
4815
y Fv(Often,)49 b(esp)s(ecially)43 b(for)j(large)f(arra)m(ys,)50
4771
4816
b(it)45 b(is)f(desirable)g(to)i(allo)s(cate)g(the)g(arra)m(ys)g
4772
4817
(dynamically)-8 b(,)150 1687 y(at)44 b(run)m(time.)76
4773
4818
b(This)41 b(isn't)h(to)s(o)i(hard)e(to)h(do,)j(although)d(it)f(is)g
4775
4820
1797 y(dimensional)28 b(arra)m(ys)i(as)h(it)f(is)f(for)h
4776
4821
(one-dimensional)e(arra)m(ys.)275 1932 y(Creating)35
4777
4822
b(the)i(arra)m(y)g(is)e(simple:)51 b(using)35 b(a)h(dynamic-allo)s
4778
 
(cation)f(routine)g(lik)m(e)h Fo(malloc)p Fu(,)g(allo)s(cate)150
 
4823
(cation)f(routine)g(lik)m(e)h Fp(malloc)p Fv(,)g(allo)s(cate)150
4779
4824
2042 y(an)27 b(arra)m(y)h(big)e(enough)h(to)h(store)g(N)g
4780
 
Fo(fftw_complex)23 b Fu(v)-5 b(alues,)28 b(where)f(N)g(is)f(the)i(pro)s
 
4825
Fp(fftw_complex)23 b Fv(v)-5 b(alues,)28 b(where)f(N)g(is)f(the)i(pro)s
4781
4826
(duct)e(of)h(the)h(sizes)f(of)150 2152 y(the)32 b(arra)m(y)h
4782
4827
(dimensions)c(\(i.e.)45 b(the)32 b(total)h(n)m(um)m(b)s(er)e(of)h
4783
4828
(complex)f(v)-5 b(alues)31 b(in)g(the)h(arra)m(y\).)46
4784
4829
b(F)-8 b(or)33 b(example,)150 2261 y(here)d(is)g(co)s(de)g(to)h(allo)s
4785
4830
(cate)g(a)g(5x12x27)h(rank)e(3)h(arra)m(y:)390 2391 y
4786
 
Fo(fftw_complex)44 b(*an_array;)390 2598 y(an_array)i(=)h
 
4831
Fp(fftw_complex)44 b(*an_array;)390 2598 y(an_array)i(=)h
4787
4832
(\(fftw_complex)d(*\))j(malloc\(5)f(*)h(12)h(*)f(27)g(*)h
4788
 
(sizeof\(fftw_complex\)\);)275 2734 y Fu(Accessing)38
 
4833
(sizeof\(fftw_complex\)\);)275 2734 y Fv(Accessing)38
4789
4834
b(the)f(arra)m(y)i(elemen)m(ts,)h(ho)m(w)m(ev)m(er,)h(is)c(more)h(tric)
4790
4835
m(ky|y)m(ou)g(can't)h(simply)c(use)i(m)m(ultiple)150
4791
 
2844 y(applications)k(of)i(the)h(`)p Fo([])p Fu(')f(op)s(erator)g(lik)m
 
4836
2844 y(applications)k(of)i(the)h(`)p Fp([])p Fv(')f(op)s(erator)g(lik)m
4792
4837
(e)f(y)m(ou)i(could)e(for)h(static)g(arra)m(ys.)79 b(Instead,)47
4793
4838
b(y)m(ou)c(ha)m(v)m(e)h(to)150 2953 y(explicitly)33 b(compute)j(the)g
4794
4839
(o\013set)h(in)m(to)f(the)f(arra)m(y)i(using)d(the)i(form)m(ula)f(giv)m
4795
4840
(en)g(earlier)g(for)g(ro)m(w-ma)5 b(jor)150 3063 y(arra)m(ys.)48
4796
4841
b(F)-8 b(or)33 b(example,)h(to)f(reference)g(the)g(\()p
4797
 
Fl(i;)15 b(j;)g(k)s Fu(\)-th)35 b(elemen)m(t)e(of)g(the)g(arra)m(y)g
 
4842
Fm(i;)15 b(j;)g(k)s Fv(\)-th)35 b(elemen)m(t)e(of)g(the)g(arra)m(y)g
4798
4843
(allo)s(cated)g(ab)s(o)m(v)m(e,)i(y)m(ou)150 3172 y(w)m(ould)29
4799
 
b(use)h(the)h(expression)e Fo(an_array[k)e(+)k(27)e(*)h(\(j)g(+)g(12)g
4800
 
(*)g(i\)])p Fu(.)275 3308 y(This)h(pain)h(can)h(b)s(e)g(alleviated)f
 
4844
b(use)h(the)h(expression)e Fp(an_array[k)e(+)k(27)e(*)h(\(j)g(+)g(12)g
 
4845
(*)g(i\)])p Fv(.)275 3308 y(This)h(pain)h(can)h(b)s(e)g(alleviated)f
4801
4846
(somewhat)i(b)m(y)f(de\014ning)e(appropriate)h(macros,)j(or,)f(in)e(C)p
4802
 
Fo(++)p Fu(,)h(cre-)150 3418 y(ating)d(a)h(class)f(and)g(o)m(v)m
4803
 
(erloading)h(the)f(`)p Fo(\(\))p Fu(')g(op)s(erator.)150
4804
 
3644 y Fi(2.5.5)63 b(Dynamic)39 b(Arra)m(ys)h(in)i(C|The)e(W)-10
4805
 
b(rong)42 b(W)-10 b(a)m(y)275 3838 y Fu(A)31 b(di\013eren)m(t)h(metho)s
 
4847
Fp(++)p Fv(,)h(cre-)150 3418 y(ating)d(a)h(class)f(and)g(o)m(v)m
 
4848
(erloading)h(the)f(`)p Fp(\(\))p Fv(')g(op)s(erator.)150
 
4849
3644 y Fh(2.5.5)63 b(Dynamic)39 b(Arra)m(ys)h(in)i(C|The)e(W)-10
 
4850
b(rong)42 b(W)-10 b(a)m(y)275 3838 y Fv(A)31 b(di\013eren)m(t)h(metho)s
4806
4851
(d)f(for)h(allo)s(cating)f(m)m(ulti-dimensional)d(arra)m(ys)k(in)e(C)i
4807
4852
(is)f(often)h(suggested)g(that)150 3947 y(is)e(incompatible)g(with)g
4808
 
Fo(fftwnd)p Fu(:)41 b Fq(using)33 b(it)g(wil)5 b(l)34
 
4853
Fp(fftwnd)p Fv(:)41 b Fr(using)33 b(it)g(wil)5 b(l)34
4809
4854
b(c)-5 b(ause)34 b(FFTW)g(to)g(die)g(a)f(p)-5 b(ainful)35
4810
 
b(de)-5 b(ath)p Fu(.)45 b(W)-8 b(e)33 b(discuss)150 4057
 
4855
b(de)-5 b(ath)p Fv(.)45 b(W)-8 b(e)33 b(discuss)150 4057
4811
4856
y(the)h(tec)m(hnique)g(here,)i(ho)m(w)m(ev)m(er,)g(b)s(ecause)f(it)e
4812
4857
(is)h(so)g(commonly)g(kno)m(wn)g(and)f(used.)52 b(This)32
4813
4858
b(metho)s(d)i(is)150 4167 y(to)d(create)g(arra)m(ys)g(of)f(p)s(oin)m
4814
4859
(ters)f(of)h(arra)m(ys)h(of)f(p)s(oin)m(ters)f(of)36
4815
4860
b(.)22 b(.)g(.)11 b(etcetera.)43 b(F)-8 b(or)31 b(example,)f(the)h
4816
4861
(analogue)150 4276 y(in)e(this)g(metho)s(d)h(to)h(the)g(example)f(ab)s
4817
 
(o)m(v)m(e)h(is:)390 4406 y Fo(int)47 b(i,j;)390 4510
 
4862
(o)m(v)m(e)h(is:)390 4406 y Fp(int)47 b(i,j;)390 4510
4818
4863
y(fftw_complex)d(***a_bad_array;)92 b(/*)47 b(another)f(way)h(to)g
4819
4864
(make)g(a)g(5x12x27)f(array)g(*/)390 4717 y(a_bad_array)f(=)i
4820
4865
(\(fftw_complex)d(***\))j(malloc\(5)f(*)h(sizeof\(fftw_complex)c
4823
4868
(malloc\(12)e(*)j(sizeof\(fftw_complex)42 b(*\)\);)629
4824
4869
5132 y(for)47 b(\(j)g(=)g(0;)g(j)h(<)f(12;)g(++j\))867
4825
4870
5236 y(a_bad_array[i][j])c(=)1154 5340 y(\(fftw_complex)h(*\))j
4826
 
(malloc\(27)e(*)j(sizeof\(fftw_complex\)\);)p eop
 
4871
(malloc\(27)e(*)j(sizeof\(fftw_complex\)\);)p eop end
4827
4872
%%Page: 13 15
4828
 
13 14 bop 150 -116 a Fu(Chapter)30 b(2:)41 b(T)-8 b(utorial)2722
4829
 
b(13)390 299 y Fo(})275 443 y Fu(As)34 b(y)m(ou)i(can)f(see,)i(this)d
4830
 
(sort)h(of)g(arra)m(y)g(is)f(incon)m(v)m(enien)m(t)h(to)h(allo)s(cate)f
4831
 
(\(and)g(deallo)s(cate\).)55 b(On)34 b(the)150 552 y(other)g(hand,)h
4832
 
(it)f(has)g(the)g(adv)-5 b(an)m(tage)36 b(that)f(the)f(\()p
4833
 
Fl(i;)15 b(j;)g(k)s Fu(\)-th)37 b(elemen)m(t)e(can)g(b)s(e)e
4834
 
(referenced)h(simply)e(b)m(y)150 662 y Fo(a_bad_array[i][j][k])p
4835
 
Fu(.)275 806 y(If)e(y)m(ou)g(lik)m(e)g(this)f(tec)m(hnique)i(and)e(w)m
4836
 
(an)m(t)j(to)f(maximize)f(con)m(v)m(enience)h(in)e(accessing)i(the)g
4837
 
(arra)m(y)-8 b(,)32 b(but)150 915 y(still)39 b(w)m(an)m(t)k(to)f(pass)f
4838
 
(the)h(arra)m(y)g(to)g(FFTW,)h(y)m(ou)e(can)h(use)f(a)h(h)m(ybrid)e
4839
 
(metho)s(d.)73 b(Allo)s(cate)42 b(the)g(ar-)150 1025
4840
 
y(ra)m(y)36 b(as)f(one)h(con)m(tiguous)f(blo)s(c)m(k,)i(but)d(also)i
4841
 
(declare)f(an)g(arra)m(y)h(of)g(arra)m(ys)f(of)h(p)s(oin)m(ters)e(that)
4842
 
i(p)s(oin)m(t)e(to)150 1134 y(appropriate)h(places)i(in)e(the)h(blo)s
4843
 
(c)m(k.)58 b(That)37 b(sort)f(of)h(tric)m(k)f(is)f(b)s(ey)m(ond)h(the)g
4844
 
(scop)s(e)h(of)f(this)g(do)s(cumen-)150 1244 y(tation;)f(for)e(more)h
4845
 
(information)d(on)i(m)m(ulti-dimensional)c(arra)m(ys)34
4846
 
b(in)e(C,)h(see)h(the)f Fo(comp.lang.c)d Fu(F)-10 b(A)m(Q)150
4847
 
1354 y(\()p Fo(http://www.eskimo.com/~scs)o(/C-)o(faq/)o(s6.h)o(tml)o
4848
 
Fu(\).)150 1634 y Ft(2.6)68 b(W)-11 b(ords)45 b(of)g(Wisdom)275
4849
 
1836 y Fu(FFTW)29 b(implemen)m(ts)f(a)h(metho)s(d)g(for)f(sa)m(ving)h
 
4873
TeXDict begin 13 14 bop 150 -116 a Fv(Chapter)30 b(2:)41
 
4874
b(T)-8 b(utorial)2722 b(13)390 299 y Fp(})275 443 y Fv(As)34
 
4875
b(y)m(ou)i(can)f(see,)i(this)d(sort)h(of)g(arra)m(y)g(is)f(incon)m(v)m
 
4876
(enien)m(t)h(to)h(allo)s(cate)f(\(and)g(deallo)s(cate\).)55
 
4877
b(On)34 b(the)150 552 y(other)g(hand,)h(it)f(has)g(the)g(adv)-5
 
4878
b(an)m(tage)36 b(that)f(the)f(\()p Fm(i;)15 b(j;)g(k)s
 
4879
Fv(\)-th)37 b(elemen)m(t)e(can)g(b)s(e)e(referenced)h(simply)e(b)m(y)
 
4880
150 662 y Fp(a_bad_array[i][j][k])p Fv(.)275 806 y(If)e(y)m(ou)g(lik)m
 
4881
(e)g(this)f(tec)m(hnique)i(and)e(w)m(an)m(t)j(to)f(maximize)f(con)m(v)m
 
4882
(enience)h(in)e(accessing)i(the)g(arra)m(y)-8 b(,)32
 
4883
b(but)150 915 y(still)39 b(w)m(an)m(t)k(to)f(pass)f(the)h(arra)m(y)g
 
4884
(to)g(FFTW,)h(y)m(ou)e(can)h(use)f(a)h(h)m(ybrid)e(metho)s(d.)73
 
4885
b(Allo)s(cate)42 b(the)g(ar-)150 1025 y(ra)m(y)36 b(as)f(one)h(con)m
 
4886
(tiguous)f(blo)s(c)m(k,)i(but)d(also)i(declare)f(an)g(arra)m(y)h(of)g
 
4887
(arra)m(ys)f(of)h(p)s(oin)m(ters)e(that)i(p)s(oin)m(t)e(to)150
 
4888
1134 y(appropriate)h(places)i(in)e(the)h(blo)s(c)m(k.)58
 
4889
b(That)37 b(sort)f(of)h(tric)m(k)f(is)f(b)s(ey)m(ond)h(the)g(scop)s(e)h
 
4890
(of)f(this)g(do)s(cumen-)150 1244 y(tation;)f(for)e(more)h(information)
 
4891
d(on)i(m)m(ulti-dimensional)c(arra)m(ys)34 b(in)e(C,)h(see)h(the)f
 
4892
Fp(comp.lang.c)d Fv(F)-10 b(A)m(Q)150 1354 y(\()p Fp
 
4893
(http://www.eskimo.com/~scs)o(/C-)o(faq/)o(s6.h)o(tml)o
 
4894
Fv(\).)150 1634 y Fu(2.6)68 b(W)-11 b(ords)45 b(of)g(Wisdom)275
 
4895
1836 y Fv(FFTW)29 b(implemen)m(ts)f(a)h(metho)s(d)g(for)f(sa)m(ving)h
4850
4896
(plans)f(to)i(disk)d(and)i(restoring)f(them.)40 b(In)29
4851
4897
b(fact,)h(what)150 1946 y(FFTW)k(do)s(es)e(is)h(more)g(general)g(than)g
4852
4898
(just)f(sa)m(ving)h(and)g(loading)e(plans.)48 b(The)32
4853
 
b(mec)m(hanism)h(is)f(called)150 2055 y Fo(wisdom)p Fu(.)47
 
4899
b(mec)m(hanism)h(is)f(called)150 2055 y Fp(wisdom)p Fv(.)47
4854
4900
b(Here,)35 b(w)m(e)e(describ)s(e)f(this)g(feature)h(at)h(a)g(high)e
4855
4901
(lev)m(el.)48 b(See)34 b(Chapter)e(3)i([FFTW)g(Reference],)150
4856
4902
2165 y(page)d(17,)h(for)e(a)g(less)g(casual)g(\(but)g(more)h
4857
 
(complete\))g(discussion)d(of)i(ho)m(w)h(to)g(use)f Fo(wisdom)f
4858
 
Fu(in)g(FFTW.)275 2309 y(Plans)34 b(created)i(with)f(the)g
4859
 
Fo(FFTW_MEASURE)e Fu(option)h(pro)s(duce)h(near-optimal)g(FFT)g(p)s
 
4903
(complete\))g(discussion)d(of)i(ho)m(w)h(to)g(use)f Fp(wisdom)f
 
4904
Fv(in)g(FFTW.)275 2309 y(Plans)34 b(created)i(with)f(the)g
 
4905
Fp(FFTW_MEASURE)e Fv(option)h(pro)s(duce)h(near-optimal)g(FFT)g(p)s
4860
4906
(erformance,)150 2418 y(but)d(it)h(can)h(tak)m(e)h(a)e(long)g(time)g
4861
4907
(to)h(compute)f(a)h(plan)e(b)s(ecause)h(FFTW)h(m)m(ust)f(actually)g
4862
4908
(measure)g(the)150 2528 y(run)m(time)c(of)i(man)m(y)f(p)s(ossible)e
4866
4912
f(computed)h(that)g(the)g(start-up)f(time)h(is)150 2747
4867
4913
y(irrelev)-5 b(an)m(t.)55 b(F)-8 b(or)36 b(short)f(initialization)d
4868
4914
(times)j(but)g(sligh)m(tly)e(slo)m(w)m(er)j(transforms,)g(w)m(e)g(ha)m
4869
 
(v)m(e)g(pro)m(vided)150 2857 y Fo(FFTW_ESTIMATE)p Fu(.)f(The)25
4870
 
b Fo(wisdom)e Fu(mec)m(hanism)i(is)f(a)h(w)m(a)m(y)h(to)g(get)g(the)g
 
4915
(v)m(e)g(pro)m(vided)150 2857 y Fp(FFTW_ESTIMATE)p Fv(.)f(The)25
 
4916
b Fp(wisdom)e Fv(mec)m(hanism)i(is)f(a)h(w)m(a)m(y)h(to)g(get)g(the)g
4871
4917
(b)s(est)e(of)i(b)s(oth)e(w)m(orlds.)38 b(There)24 b(are,)150
4872
4918
2966 y(ho)m(w)m(ev)m(er,)35 b(certain)d(ca)m(v)m(eats)j(that)e(the)g
4873
4919
(user)e(m)m(ust)i(b)s(e)e(a)m(w)m(are)j(of)f(in)e(using)g
4874
 
Fo(wisdom)p Fu(.)45 b(F)-8 b(or)33 b(this)e(reason,)150
4875
 
3076 y Fo(wisdom)e Fu(is)g(an)h(optional)g(feature)h(whic)m(h)e(is)g
 
4920
Fp(wisdom)p Fv(.)45 b(F)-8 b(or)33 b(this)e(reason,)150
 
4921
3076 y Fp(wisdom)e Fv(is)g(an)h(optional)g(feature)h(whic)m(h)e(is)g
4876
4922
(not)i(enabled)e(b)m(y)h(default.)275 3220 y(A)m(t)c(its)g(simplest,)f
4877
 
Fo(wisdom)f Fu(pro)m(vides)h(a)h(w)m(a)m(y)h(of)f(sa)m(ving)g(plans)e
 
4923
Fp(wisdom)f Fv(pro)m(vides)h(a)h(w)m(a)m(y)h(of)f(sa)m(ving)g(plans)e
4878
4924
(to)i(disk)f(so)h(that)g(they)g(can)h(b)s(e)e(reused)150
4879
4925
3329 y(in)38 b(other)i(program)g(runs.)67 b(Y)-8 b(ou)41
4880
 
b(create)g(a)f(plan)e(with)h(the)h(\015ags)g Fo(FFTW_MEASURE)c
4881
 
Fu(and)j Fo(FFTW_USE_)150 3439 y(WISDOM)p Fu(,)29 b(and)h(then)g(sa)m
4882
 
(v)m(e)i(the)e Fo(wisdom)f Fu(using)g Fo(fftw_export_wisdom)p
4883
 
Fu(:)629 3577 y Fo(plan)46 b(=)i(fftw_create_plan\(...,)42
 
4926
b(create)g(a)f(plan)e(with)h(the)h(\015ags)g Fp(FFTW_MEASURE)c
 
4927
Fv(and)j Fp(FFTW_USE_)150 3439 y(WISDOM)p Fv(,)29 b(and)h(then)g(sa)m
 
4928
(v)m(e)i(the)e Fp(wisdom)f Fv(using)g Fp(fftw_export_wisdom)p
 
4929
Fv(:)629 3577 y Fp(plan)46 b(=)i(fftw_create_plan\(...,)42
4884
4930
b(...)47 b(|)g(FFTW_MEASURE)e(|)i(FFTW_USE_WISDOM\);)629
4885
 
3681 y(fftw_export_wisdom\(...\))o(;)275 3824 y Fu(The)37
 
4931
3681 y(fftw_export_wisdom\(...\))o(;)275 3824 y Fv(The)37
4886
4932
b(next)h(time)g(y)m(ou)h(run)d(the)i(program,)i(y)m(ou)f(can)f(restore)
4887
 
h(the)f Fo(wisdom)f Fu(with)f Fo(fftw_import_)150 3934
4888
 
y(wisdom)p Fu(,)28 b(and)g(then)h(recreate)i(the)e(plan)f(using)f(the)i
 
4933
h(the)f Fp(wisdom)f Fv(with)f Fp(fftw_import_)150 3934
 
4934
y(wisdom)p Fv(,)28 b(and)g(then)h(recreate)i(the)e(plan)f(using)f(the)i
4889
4935
(same)h(\015ags)f(as)g(b)s(efore.)40 b(This)28 b(time,)h(ho)m(w)m(ev)m
4890
4936
(er,)i(the)150 4044 y(same)g(optimal)f(plan)g(will)e(b)s(e)j(created)h
4891
4937
(v)m(ery)f(quic)m(kly)f(without)g(measuremen)m(ts.)42
4892
4938
b(\(FFTW)32 b(still)d(needs)150 4153 y(some)i(time)f(to)h(compute)g
4893
4939
(trigonometric)f(tables,)g(ho)m(w)m(ev)m(er.\))43 b(The)30
4894
 
b(basic)f(outline)g(is:)629 4291 y Fo(fftw_import_wisdom\(...\))o(;)629
 
4940
b(basic)f(outline)g(is:)629 4291 y Fp(fftw_import_wisdom\(...\))o(;)629
4895
4941
4395 y(plan)46 b(=)i(fftw_create_plan\(...,)42 b(...)47
4896
 
b(|)g(FFTW_USE_WISDOM\);)275 4539 y Fu(Wisdom)30 b(is)h(more)h(than)f
 
4942
b(|)g(FFTW_USE_WISDOM\);)275 4539 y Fv(Wisdom)30 b(is)h(more)h(than)f
4897
4943
(mere)h(rote)g(memorization,)g(ho)m(w)m(ev)m(er.)46 b(FFTW's)33
4898
 
b Fo(wisdom)d Fu(encompasses)150 4648 y(all)i(of)g(the)h(kno)m(wledge)g
 
4944
b Fp(wisdom)d Fv(encompasses)150 4648 y(all)i(of)g(the)h(kno)m(wledge)g
4899
4945
(and)f(measuremen)m(ts)h(that)g(w)m(ere)g(used)f(to)h(create)i(the)d
4900
4946
(plan)g(for)g(a)h(giv)m(en)g(size.)150 4758 y(Therefore,)d(existing)g
4901
 
Fo(wisdom)e Fu(is)i(also)g(applied)e(to)j(the)g(creation)g(of)f(other)h
 
4947
Fp(wisdom)e Fv(is)i(also)g(applied)e(to)j(the)g(creation)g(of)f(other)h
4902
4948
(plans)e(of)h(di\013eren)m(t)g(sizes.)275 4902 y(Whenev)m(er)c(a)g
4903
 
(plan)f(is)g(created)i(with)e(the)h Fo(FFTW_MEASURE)c
4904
 
Fu(and)k Fo(FFTW_USE_WISDOM)21 b Fu(\015ags,)28 b Fo(wisdom)150
4905
 
5011 y Fu(is)j(generated.)46 b(Thereafter,)33 b(plans)d(for)i(an)m(y)g
 
4949
(plan)f(is)g(created)i(with)e(the)h Fp(FFTW_MEASURE)c
 
4950
Fv(and)k Fp(FFTW_USE_WISDOM)21 b Fv(\015ags,)28 b Fp(wisdom)150
 
4951
5011 y Fv(is)j(generated.)46 b(Thereafter,)33 b(plans)d(for)i(an)m(y)g
4906
4952
(transform)f(with)g(a)h(similar)d(factorization)k(will)c(b)s(e)i(com-)
4907
4953
150 5121 y(puted)f(more)i(quic)m(kly)-8 b(,)30 b(so)i(long)e(as)i(they)
4908
 
f(use)g(the)g Fo(FFTW_USE_WISDOM)c Fu(\015ag.)43 b(In)30
 
4954
f(use)g(the)g Fp(FFTW_USE_WISDOM)c Fv(\015ag.)43 b(In)30
4909
4955
b(fact,)j(for)e(transforms)150 5230 y(with)g(the)h(same)g(factors)h
4910
4956
(and)e(of)h(equal)g(or)g(lesser)f(size,)i(no)e(measuremen)m(ts)i(at)f
4911
4957
(all)f(need)h(to)h(b)s(e)e(made)150 5340 y(and)f(an)g(optimal)f(plan)g
4912
4958
(can)i(b)s(e)f(created)h(with)e(negligible)f(dela)m(y!)p
4913
 
eop
 
4959
eop end
4914
4960
%%Page: 14 16
4915
 
14 15 bop 150 -116 a Fu(14)3232 b(FFTW)275 299 y(F)-8
4916
 
b(or)26 b(example,)h(supp)s(ose)e(that)i(y)m(ou)f(create)i(a)f(plan)e
4917
 
(for)h Fl(N)35 b Fu(=)25 b(2)2427 266 y Fn(16)2498 299
4918
 
y Fu(.)39 b(Then,)26 b(for)g(an)m(y)h(equal)e(or)h(smaller)150
 
4961
TeXDict begin 14 15 bop 150 -116 a Fv(14)3232 b(FFTW)275
 
4962
299 y(F)-8 b(or)26 b(example,)h(supp)s(ose)e(that)i(y)m(ou)f(create)i
 
4963
(a)f(plan)e(for)h Fm(N)35 b Fv(=)25 b(2)2427 266 y Fo(16)2498
 
4964
299 y Fv(.)39 b(Then,)26 b(for)g(an)m(y)h(equal)e(or)h(smaller)150
4919
4965
408 y(p)s(o)m(w)m(er)e(of)f(t)m(w)m(o,)k(FFTW)d(can)g(create)h(a)f
4920
4966
(plan)e(\(with)h(the)g(same)h(direction)e(and)h(\015ags\))h(quic)m(kly)
4921
 
-8 b(,)25 b(using)d(the)150 518 y(precomputed)28 b Fo(wisdom)p
4922
 
Fu(.)39 b(Ev)m(en)29 b(for)f(larger)h(p)s(o)m(w)m(ers)g(of)g(t)m(w)m
 
4967
-8 b(,)25 b(using)d(the)150 518 y(precomputed)28 b Fp(wisdom)p
 
4968
Fv(.)39 b(Ev)m(en)29 b(for)f(larger)h(p)s(o)m(w)m(ers)g(of)g(t)m(w)m
4923
4969
(o,)i(or)e(sizes)f(that)i(are)f(a)g(p)s(o)m(w)m(er)g(of)g(t)m(w)m(o)h
4924
4970
(times)150 628 y(some)h(other)g(prime)f(factors,)i(plans)d(will)f(b)s
4925
4971
(e)i(computed)h(more)g(quic)m(kly)e(than)i(they)g(w)m(ould)f(otherwise)
4926
4972
150 737 y(\(although)g(some)h(measuremen)m(ts)g(still)d(ha)m(v)m(e)j
4927
 
(to)h(b)s(e)d(made\).)275 876 y(The)38 b Fo(wisdom)g
4928
 
Fu(is)g(cum)m(ulativ)m(e,)k(and)c(is)h(stored)g(in)f(a)i(global,)h
4929
 
(priv)-5 b(ate)39 b(data)h(structure)e(managed)150 986
 
4973
(to)h(b)s(e)d(made\).)275 879 y(The)38 b Fp(wisdom)g
 
4974
Fv(is)g(cum)m(ulativ)m(e,)k(and)c(is)h(stored)g(in)f(a)i(global,)h
 
4975
(priv)-5 b(ate)39 b(data)h(structure)e(managed)150 989
4930
4976
y(in)m(ternally)27 b(b)m(y)i(FFTW.)h(The)f(storage)i(space)e(required)f
4931
4977
(is)g(minimal,)f(prop)s(ortional)g(to)j(the)f(logarithm)150
4932
 
1096 y(of)23 b(the)g(sizes)g(the)g Fo(wisdom)e Fu(w)m(as)i(generated)h
4933
 
(from.)38 b(The)22 b Fo(wisdom)f Fu(can)i(b)s(e)f(forgotten)j(\(and)d
4934
 
(its)g(asso)s(ciated)150 1205 y(memory)33 b(freed\))f(b)m(y)h(a)g(call)
4935
 
f(to)h Fo(fftw_forget_wisdom\(\))p Fu(;)c(otherwise,)k(it)f(is)g(remem)
4936
 
m(b)s(ered)g(un)m(til)f(the)150 1315 y(program)f(terminates.)42
 
4978
1099 y(of)23 b(the)g(sizes)g(the)g Fp(wisdom)e Fv(w)m(as)i(generated)h
 
4979
(from.)38 b(The)22 b Fp(wisdom)f Fv(can)i(b)s(e)f(forgotten)j(\(and)d
 
4980
(its)g(asso)s(ciated)150 1208 y(memory)33 b(freed\))f(b)m(y)h(a)g(call)
 
4981
f(to)h Fp(fftw_forget_wisdom\(\))p Fv(;)c(otherwise,)k(it)f(is)g(remem)
 
4982
m(b)s(ered)g(un)m(til)f(the)150 1318 y(program)f(terminates.)42
4937
4983
b(It)31 b(can)g(also)f(b)s(e)g(exp)s(orted)h(to)g(a)g(\014le,)f(a)h
4938
 
(string,)f(or)h(an)m(y)g(other)g(medium)d(using)150 1424
4939
 
y Fo(fftw_export_wisdom)37 b Fu(and)42 b(restored)h(during)d(a)i
 
4984
(string,)f(or)h(an)m(y)g(other)g(medium)d(using)150 1427
 
4985
y Fp(fftw_export_wisdom)37 b Fv(and)42 b(restored)h(during)d(a)i
4940
4986
(subsequen)m(t)g(execution)h(of)f(the)h(program)f(\(or)h(a)150
4941
 
1534 y(di\013eren)m(t)30 b(program\))g(using)f Fo(fftw_import_wisdom)d
4942
 
Fu(\(these)31 b(functions)e(are)h(describ)s(ed)f(b)s(elo)m(w\).)275
4943
 
1673 y(Because)f Fo(wisdom)d Fu(is)h(incorp)s(orated)g(in)m(to)h(FFTW)h
 
4987
1537 y(di\013eren)m(t)30 b(program\))g(using)f Fp(fftw_import_wisdom)d
 
4988
Fv(\(these)31 b(functions)e(are)h(describ)s(ed)f(b)s(elo)m(w\).)275
 
4989
1679 y(Because)f Fp(wisdom)d Fv(is)h(incorp)s(orated)g(in)m(to)h(FFTW)h
4944
4990
(at)f(a)h(v)m(ery)f(lo)m(w)g(lev)m(el,)g(the)h(same)f
4945
 
Fo(wisdom)e Fu(can)j(b)s(e)150 1783 y(used)35 b(for)h(one-dimensional)e
 
4991
Fp(wisdom)e Fv(can)j(b)s(e)150 1789 y(used)35 b(for)h(one-dimensional)e
4946
4992
(transforms,)j(m)m(ulti-dimensional)32 b(transforms,)37
4947
 
b(and)f(ev)m(en)h(the)f(parallel)150 1892 y(extensions)h(to)h(FFTW.)g
4948
 
(Just)e(include)f Fo(FFTW_USE_WISDOM)e Fu(in)j(the)i(\015ags)f(for)g
4949
 
(whatev)m(er)h(plans)e(y)m(ou)150 2002 y(create)c(\(i.e.,)f(alw)m(a)m
4950
 
(ys)g(plan)e(wisely\).)275 2141 y(Plans)22 b(created)i(with)e(the)i
4951
 
Fo(FFTW_ESTIMATE)19 b Fu(plan)j(can)i(use)f Fo(wisdom)p
4952
 
Fu(,)g(but)g(cannot)h(generate)g(it;)i(only)150 2251
4953
 
y Fo(FFTW_MEASURE)j Fu(plans)h(actually)i(pro)s(duce)f
4954
 
Fo(wisdom)p Fu(.)44 b(Also,)33 b(plans)d(can)j(only)e(use)h
4955
 
Fo(wisdom)e Fu(generated)150 2360 y(from)22 b(plans)g(created)h(with)f
 
4993
b(and)f(ev)m(en)h(the)f(parallel)150 1898 y(extensions)h(to)h(FFTW.)g
 
4994
(Just)e(include)f Fp(FFTW_USE_WISDOM)e Fv(in)j(the)i(\015ags)f(for)g
 
4995
(whatev)m(er)h(plans)e(y)m(ou)150 2008 y(create)c(\(i.e.,)f(alw)m(a)m
 
4996
(ys)g(plan)e(wisely\).)275 2150 y(Plans)22 b(created)i(with)e(the)i
 
4997
Fp(FFTW_ESTIMATE)19 b Fv(plan)j(can)i(use)f Fp(wisdom)p
 
4998
Fv(,)g(but)g(cannot)h(generate)g(it;)i(only)150 2260
 
4999
y Fp(FFTW_MEASURE)j Fv(plans)h(actually)i(pro)s(duce)f
 
5000
Fp(wisdom)p Fv(.)44 b(Also,)33 b(plans)d(can)j(only)e(use)h
 
5001
Fp(wisdom)e Fv(generated)150 2369 y(from)22 b(plans)g(created)h(with)f
4956
5002
(the)h(same)g(direction)e(and)i(\015ags.)38 b(F)-8 b(or)23
4957
 
b(example,)i(a)e(size)f Fo(42)h(FFTW_BACKWARD)150 2470
4958
 
y Fu(transform)34 b(will)e(not)j(use)g Fo(wisdom)e Fu(pro)s(duced)g(b)m
4959
 
(y)i(a)g(size)g Fo(42)f(FFTW_FORWARD)d Fu(transform.)54
4960
 
b(The)34 b(only)150 2579 y(exception)40 b(to)h(this)e(rule)g(is)h(that)
4961
 
g Fo(FFTW_ESTIMATE)d Fu(plans)i(can)h(use)g Fo(wisdom)f
4962
 
Fu(from)g Fo(FFTW_MEASURE)150 2689 y Fu(plans.)150 2923
4963
 
y Fi(2.6.1)63 b(Ca)m(v)m(eats)39 b(in)i(Using)h(Wisdom)390
4964
 
3114 y Fu(F)-8 b(or)27 b(in)e(m)m(uc)m(h)h(wisdom)f(is)g(m)m(uc)m(h)i
 
5003
b(example,)i(a)e(size)f Fp(42)h(FFTW_BACKWARD)150 2479
 
5004
y Fv(transform)34 b(will)e(not)j(use)g Fp(wisdom)e Fv(pro)s(duced)g(b)m
 
5005
(y)i(a)g(size)g Fp(42)f(FFTW_FORWARD)d Fv(transform.)54
 
5006
b(The)34 b(only)150 2588 y(exception)40 b(to)h(this)e(rule)g(is)h(that)
 
5007
g Fp(FFTW_ESTIMATE)d Fv(plans)i(can)h(use)g Fp(wisdom)f
 
5008
Fv(from)g Fp(FFTW_MEASURE)150 2698 y Fv(plans.)150 2937
 
5009
y Fh(2.6.1)63 b(Ca)m(v)m(eats)39 b(in)i(Using)h(Wisdom)390
 
5010
3132 y Fv(F)-8 b(or)27 b(in)e(m)m(uc)m(h)h(wisdom)f(is)g(m)m(uc)m(h)i
4965
5011
(grief,)f(and)g(he)g(that)h(increaseth)f(kno)m(wledge)g(increaseth)390
4966
 
3218 y(sorro)m(w.)41 b([Ecclesiastes)31 b(1:18])275 3357
4967
 
y(There)37 b(are)i(pitfalls)d(to)i(using)f Fo(wisdom)p
4968
 
Fu(,)i(in)e(that)h(it)g(can)h(negate)g(FFTW's)g(abilit)m(y)e(to)i
4969
 
(adapt)f(to)150 3467 y(c)m(hanging)g(hardw)m(are)g(and)g(other)h
 
5012
3236 y(sorro)m(w.)41 b([Ecclesiastes)31 b(1:18])275 3378
 
5013
y(There)37 b(are)i(pitfalls)d(to)i(using)f Fp(wisdom)p
 
5014
Fv(,)i(in)e(that)h(it)g(can)h(negate)g(FFTW's)g(abilit)m(y)e(to)i
 
5015
(adapt)f(to)150 3487 y(c)m(hanging)g(hardw)m(are)g(and)g(other)h
4970
5016
(conditions.)63 b(F)-8 b(or)39 b(example,)h(it)e(w)m(ould)f(b)s(e)h(p)s
4971
 
(erfectly)f(p)s(ossible)f(to)150 3576 y(exp)s(ort)41
4972
 
b Fo(wisdom)e Fu(from)i(a)g(program)g(running)d(on)j(one)g(pro)s
 
5017
(erfectly)f(p)s(ossible)f(to)150 3597 y(exp)s(ort)41
 
5018
b Fp(wisdom)e Fv(from)i(a)g(program)g(running)d(on)j(one)g(pro)s
4973
5019
(cessor)g(and)f(imp)s(ort)f(it)i(in)m(to)g(a)g(program)150
4974
 
3686 y(running)35 b(on)i(another)h(pro)s(cessor.)61 b(Doing)38
 
5020
3706 y(running)35 b(on)i(another)h(pro)s(cessor.)61 b(Doing)38
4975
5021
b(so,)h(ho)m(w)m(ev)m(er,)i(w)m(ould)36 b(mean)i(that)g(the)g(second)f
4976
 
(program)150 3795 y(w)m(ould)29 b(use)h(plans)f(optimized)g(for)h(the)h
 
5022
(program)150 3816 y(w)m(ould)29 b(use)h(plans)f(optimized)g(for)h(the)h
4977
5023
(\014rst)f(pro)s(cessor,)g(instead)f(of)i(the)g(one)f(it)g(is)g
4978
 
(running)d(on.)275 3934 y(It)j(should)e(b)s(e)i(safe)g(to)h(reuse)f
4979
 
Fo(wisdom)f Fu(as)h(long)g(as)g(the)h(hardw)m(are)e(and)h(program)g
4980
 
(binaries)e(remain)150 4044 y(unc)m(hanged.)40 b(\(Actually)-8
 
5024
(running)d(on.)275 3958 y(It)j(should)e(b)s(e)i(safe)g(to)h(reuse)f
 
5025
Fp(wisdom)f Fv(as)h(long)g(as)g(the)h(hardw)m(are)e(and)h(program)g
 
5026
(binaries)e(remain)150 4068 y(unc)m(hanged.)40 b(\(Actually)-8
4981
5027
b(,)31 b(the)f(optimal)f(plan)g(ma)m(y)i(c)m(hange)g(ev)m(en)g(b)s(et)m
4982
 
(w)m(een)g(runs)d(of)j(the)f(same)h(binary)150 4154 y(on)22
 
5028
(w)m(een)g(runs)d(of)j(the)f(same)h(binary)150 4177 y(on)22
4983
5029
b(iden)m(tical)e(hardw)m(are,)k(due)d(to)i(di\013erences)e(in)f(the)i
4984
5030
(virtual)f(memory)g(en)m(vironmen)m(t,)j(etcetera.)40
4985
 
b(Users)150 4263 y(seriously)26 b(in)m(terested)i(in)e(p)s(erformance)h
 
5031
b(Users)150 4287 y(seriously)26 b(in)m(terested)i(in)e(p)s(erformance)h
4986
5032
(should)f(w)m(orry)i(ab)s(out)f(this)g(problem,)g(to)s(o.\))41
4987
 
b(It)28 b(is)f(lik)m(ely)f(that,)150 4373 y(if)35 b(the)i(same)g
4988
 
Fo(wisdom)e Fu(is)g(used)h(for)g(t)m(w)m(o)i(di\013eren)m(t)e(program)g
 
5033
b(It)28 b(is)f(lik)m(ely)f(that,)150 4397 y(if)35 b(the)i(same)g
 
5034
Fp(wisdom)e Fv(is)g(used)h(for)g(t)m(w)m(o)i(di\013eren)m(t)e(program)g
4989
5035
(binaries,)g(ev)m(en)h(running)d(on)i(the)h(same)150
4990
 
4482 y(mac)m(hine,)28 b(the)f(plans)f(ma)m(y)i(b)s(e)f(sub-optimal)e(b)
 
5036
4506 y(mac)m(hine,)28 b(the)f(plans)f(ma)m(y)i(b)s(e)f(sub-optimal)e(b)
4991
5037
s(ecause)j(of)f(di\013ering)e(co)s(de)j(alignmen)m(ts.)39
4992
 
b(It)27 b(is)f(therefore)150 4592 y(wise)k(to)i(recreate)g
4993
 
Fo(wisdom)d Fu(ev)m(ery)j(time)f(an)f(application)g(is)g(recompiled.)40
4994
 
b(The)31 b(more)g(the)g(underlying)150 4702 y(hardw)m(are)40
 
5038
b(It)27 b(is)f(therefore)150 4616 y(wise)k(to)i(recreate)g
 
5039
Fp(wisdom)d Fv(ev)m(ery)j(time)f(an)f(application)g(is)g(recompiled.)40
 
5040
b(The)31 b(more)g(the)g(underlying)150 4725 y(hardw)m(are)40
4995
5041
b(and)g(soft)m(w)m(are)i(c)m(hanges)g(b)s(et)m(w)m(een)f(the)g
4996
 
(creation)g(of)g Fo(wisdom)e Fu(and)h(its)g(use,)j(the)e(greater)150
4997
 
4811 y(gro)m(ws)31 b(the)f(risk)f(of)i(sub-optimal)d(plans.)150
4998
 
5045 y Fi(2.6.2)63 b(Imp)s(orting)41 b(and)g(Exp)s(orting)h(Wisdom)390
4999
 
5236 y Fo(void)47 b(fftw_export_wisdom_to_f)o(ile\()o(FIL)o(E)42
 
5042
(creation)g(of)g Fp(wisdom)e Fv(and)h(its)g(use,)j(the)e(greater)150
 
5043
4835 y(gro)m(ws)31 b(the)f(risk)f(of)i(sub-optimal)d(plans.)150
 
5044
5074 y Fh(2.6.2)63 b(Imp)s(orting)41 b(and)g(Exp)s(orting)h(Wisdom)390
 
5045
5236 y Fp(void)47 b(fftw_export_wisdom_to_f)o(ile\()o(FIL)o(E)42
5000
5046
b(*output_file\);)390 5340 y(fftw_status)j(fftw_import_wisdom_from)o
5001
 
(_fil)o(e\(FI)o(LE)c(*input_file\);)p eop
 
5047
(_fil)o(e\(FI)o(LE)c(*input_file\);)p eop end
5002
5048
%%Page: 15 17
5003
 
15 16 bop 150 -116 a Fu(Chapter)30 b(2:)41 b(T)-8 b(utorial)2722
5004
 
b(15)275 299 y Fo(fftw_export_wisdom_to_f)o(ile)21 b
5005
 
Fu(writes)26 b(the)i Fo(wisdom)d Fu(to)j Fo(output_file)p
5006
 
Fu(,)d(whic)m(h)h(m)m(ust)h(b)s(e)g(a)h(\014le)150 408
5007
 
y(op)s(en)39 b(for)h(writing.)68 b Fo(fftw_import_wisdom_from_f)o(ile)
5008
 
33 b Fu(reads)40 b(the)h Fo(wisdom)d Fu(from)h Fo(input_file)p
5009
 
Fu(,)150 518 y(whic)m(h)33 b(m)m(ust)h(b)s(e)g(a)g(\014le)g(op)s(en)f
5010
 
(for)h(reading,)h(and)f(returns)f Fo(FFTW_SUCCESS)d Fu(if)k(successful)
5011
 
f(and)g Fo(FFTW_)150 628 y(FAILURE)c Fu(otherwise.)43
 
5049
TeXDict begin 15 16 bop 150 -116 a Fv(Chapter)30 b(2:)41
 
5050
b(T)-8 b(utorial)2722 b(15)275 299 y Fp(fftw_export_wisdom_to_f)o(ile)
 
5051
21 b Fv(writes)26 b(the)i Fp(wisdom)d Fv(to)j Fp(output_file)p
 
5052
Fv(,)d(whic)m(h)h(m)m(ust)h(b)s(e)g(a)h(\014le)150 408
 
5053
y(op)s(en)39 b(for)h(writing.)68 b Fp(fftw_import_wisdom_from_f)o(ile)
 
5054
33 b Fv(reads)40 b(the)h Fp(wisdom)d Fv(from)h Fp(input_file)p
 
5055
Fv(,)150 518 y(whic)m(h)33 b(m)m(ust)h(b)s(e)g(a)g(\014le)g(op)s(en)f
 
5056
(for)h(reading,)h(and)f(returns)f Fp(FFTW_SUCCESS)d Fv(if)k(successful)
 
5057
f(and)g Fp(FFTW_)150 628 y(FAILURE)c Fv(otherwise.)43
5012
5058
b(In)30 b(b)s(oth)h(cases,)h(the)g(\014le)e(is)g(left)h(op)s(en)g(and)f
5013
5059
(m)m(ust)h(b)s(e)g(closed)g(b)m(y)g(the)g(caller.)43
5014
5060
b(It)150 737 y(is)30 b(p)s(erfectly)h(\014ne)g(if)f(other)i(data)g(lie)
5015
 
e(b)s(efore)h(or)g(after)h(the)g Fo(wisdom)d Fu(in)h(the)i(\014le,)f
 
5061
e(b)s(efore)h(or)g(after)h(the)g Fp(wisdom)d Fv(in)h(the)i(\014le,)f
5016
5062
(as)g(long)g(as)h(the)f(\014le)g(is)150 847 y(p)s(ositioned)d(at)j(the)
5017
 
g(b)s(eginning)d(of)i(the)h Fo(wisdom)d Fu(data)k(b)s(efore)e(imp)s
5018
 
(ort.)390 975 y Fo(char)47 b(*fftw_export_wisdom_to_)o(stri)o(ng\()o
 
5063
g(b)s(eginning)d(of)i(the)h Fp(wisdom)d Fv(data)k(b)s(efore)e(imp)s
 
5064
(ort.)390 975 y Fp(char)47 b(*fftw_export_wisdom_to_)o(stri)o(ng\()o
5019
5065
(void)o(\);)390 1079 y(fftw_status)e(fftw_import_wisdom_from)o(_str)o
5020
5066
(ing\()o(con)o(st)d(char)k(*input_string\))275 1212 y
5021
 
(fftw_export_wisdom_to_s)o(tri)o(ng)29 b Fu(allo)s(cates)36
5022
 
b(a)g(string,)f(exp)s(orts)g(the)h Fo(wisdom)e Fu(to)i(it)f(in)f
5023
 
Fo(NULL)p Fu(-)150 1322 y(terminated)j(format,)i(and)e(returns)e(a)j(p)
 
5067
(fftw_export_wisdom_to_s)o(tri)o(ng)29 b Fv(allo)s(cates)36
 
5068
b(a)g(string,)f(exp)s(orts)g(the)h Fp(wisdom)e Fv(to)i(it)f(in)f
 
5069
Fp(NULL)p Fv(-)150 1322 y(terminated)j(format,)i(and)e(returns)e(a)j(p)
5024
5070
s(oin)m(ter)e(to)i(the)f(string.)60 b(If)37 b(there)g(is)f(an)h(error)g
5025
5071
(in)f(allo)s(cating)150 1432 y(or)h(writing)e(the)i(data,)i(it)d
5026
 
(returns)g Fo(NULL)p Fu(.)58 b(The)37 b(caller)f(is)g(resp)s(onsible)d
 
5072
(returns)g Fp(NULL)p Fv(.)58 b(The)37 b(caller)f(is)g(resp)s(onsible)d
5027
5073
(for)k(deallo)s(cating)f(the)h(string)150 1541 y(\(with)e
5028
 
Fo(fftw_free)p Fu(\))e(when)i(she)g(is)g(done)g(with)f(it.)56
5029
 
b Fo(fftw_import_wisdom_from_st)o(rin)o(g)30 b Fu(imp)s(orts)150
5030
 
1651 y(the)k Fo(wisdom)f Fu(from)h Fo(input_string)p
5031
 
Fu(,)e(returning)g Fo(FFTW_SUCCESS)f Fu(if)i(successful)g(and)g
5032
 
Fo(FFTW_FAILURE)150 1760 y Fu(otherwise.)275 1894 y(Exp)s(orting)h
5033
 
Fo(wisdom)h Fu(do)s(es)h(not)g(a\013ect)i(the)f(store)g(of)f
5034
 
Fo(wisdom)p Fu(.)57 b(Imp)s(orted)35 b Fo(wisdom)g Fu(supplemen)m(ts)
 
5074
Fp(fftw_free)p Fv(\))e(when)i(she)g(is)g(done)g(with)f(it.)56
 
5075
b Fp(fftw_import_wisdom_from_st)o(rin)o(g)30 b Fv(imp)s(orts)150
 
5076
1651 y(the)k Fp(wisdom)f Fv(from)h Fp(input_string)p
 
5077
Fv(,)e(returning)g Fp(FFTW_SUCCESS)f Fv(if)i(successful)g(and)g
 
5078
Fp(FFTW_FAILURE)150 1760 y Fv(otherwise.)275 1894 y(Exp)s(orting)h
 
5079
Fp(wisdom)h Fv(do)s(es)h(not)g(a\013ect)i(the)f(store)g(of)f
 
5080
Fp(wisdom)p Fv(.)57 b(Imp)s(orted)35 b Fp(wisdom)g Fv(supplemen)m(ts)
5035
5081
150 2004 y(the)26 b(curren)m(t)g(store)h(rather)e(than)h(replacing)f
5036
5082
(it)g(\(except)j(when)d(there)h(is)f(con\015icting)g
5037
 
Fo(wisdom)p Fu(,)h(in)e(whic)m(h)150 2113 y(case)30 b(the)e(older)g
5038
 
Fo(wisdom)f Fu(is)h(discarded\).)39 b(The)28 b(format)h(of)g(the)f(exp)
5039
 
s(orted)h Fo(wisdom)e Fu(is)g(\\nerd-readable")150 2223
 
5083
Fp(wisdom)p Fv(,)h(in)e(whic)m(h)150 2113 y(case)30 b(the)e(older)g
 
5084
Fp(wisdom)f Fv(is)h(discarded\).)39 b(The)28 b(format)h(of)g(the)f(exp)
 
5085
s(orted)h Fp(wisdom)e Fv(is)g(\\nerd-readable")150 2223
5040
5086
y(LISP-lik)m(e)k(ASCI)s(I)f(text;)35 b(w)m(e)d(will)e(not)i(do)s(cumen)
5041
5087
m(t)g(it)g(here)g(except)h(to)g(note)g(that)g(it)f(is)f(insensitiv)m(e)
5042
5088
f(to)150 2333 y(white)f(space)i(\(in)m(terested)g(users)f(can)g(con)m
5043
5089
(tact)j(us)d(for)g(more)g(details\).)275 2466 y(See)h(Chapter)g(3)h
5044
5090
([FFTW)h(Reference],)g(page)g(17,)g(for)e(more)h(information,)e(and)h
5045
5091
(for)h(a)g(description)150 2576 y(of)e(ho)m(w)g(y)m(ou)h(can)f
5046
 
(implemen)m(t)f Fo(wisdom)f Fu(imp)s(ort/exp)s(ort)h(for)h(other)g
 
5092
(implemen)m(t)f Fp(wisdom)f Fv(imp)s(ort/exp)s(ort)h(for)h(other)g
5047
5093
(media)g(b)s(esides)e(\014les)h(and)h(strings.)275 2710
5048
5094
y(The)25 b(follo)m(wing)f(is)h(a)h(brief)e(example)i(in)e(whic)m(h)h
5049
 
(the)h Fo(wisdom)e Fu(is)h(read)h(from)f(a)h(\014le,)g(a)h(plan)d(is)h
 
5095
(the)h Fp(wisdom)e Fv(is)h(read)h(from)f(a)h(\014le,)g(a)h(plan)d(is)h
5050
5096
(created)150 2819 y(\(p)s(ossibly)e(generating)i(more)h
5051
 
Fo(wisdom)p Fu(\),)f(and)g(then)g(the)h Fo(wisdom)d Fu(is)i(exp)s
 
5097
Fp(wisdom)p Fv(\),)f(and)g(then)g(the)h Fp(wisdom)d Fv(is)i(exp)s
5052
5098
(orted)g(to)h(a)f(string)g(and)f(prin)m(ted)150 2929
5053
 
y(to)31 b Fo(stdout)p Fu(.)390 3057 y Fo({)629 3161 y(fftw_plan)45
 
5099
y(to)31 b Fp(stdout)p Fv(.)390 3057 y Fp({)629 3161 y(fftw_plan)45
5054
5100
b(plan;)629 3264 y(char)h(*wisdom_string;)629 3368 y(FILE)g
5055
5101
(*input_file;)629 3576 y(/*)h(open)f(file)h(to)g(read)g(wisdom)f(from)h
5056
5102
(*/)629 3680 y(input_file)e(=)i(fopen\("sample.wisdom",)42
5067
5113
4925 y(fftw_destroy_plan\(plan\))o(;)629 5132 y(/*)h(write)f(the)h
5068
5114
(wisdom)f(to)h(a)h(string)e(*/)629 5236 y(wisdom_string)e(=)j
5069
5115
(fftw_export_wisdom_to_str)o(ing\()o(\);)629 5340 y(if)g
5070
 
(\(wisdom_string)d(!=)j(NULL\))f({)p eop
 
5116
(\(wisdom_string)d(!=)j(NULL\))f({)p eop end
5071
5117
%%Page: 16 18
5072
 
16 17 bop 150 -116 a Fu(16)3232 b(FFTW)867 299 y Fo
5073
 
(printf\("Accumulated)43 b(wisdom:)j(\045s\\n",wisdom_string\);)867
5074
 
506 y(/*)h(Just)g(for)g(fun,)g(destroy)e(and)i(restore)f(the)h(wisdom)f
5075
 
(*/)867 610 y(fftw_forget_wisdom\(\);)c(/*)47 b(all)g(gone!)g(*/)867
5076
 
714 y(fftw_import_wisdom_from_s)o(trin)o(g\(wi)o(sdo)o(m_st)o(ring)o
5077
 
(\);)867 818 y(/*)g(wisdom)g(is)g(back!)f(*/)867 1025
5078
 
y(fftw_free\(wisdom_string\);)41 b(/*)47 b(deallocate)e(it)j(since)e
5079
 
(we're)g(done)h(*/)629 1129 y(})390 1233 y(})p eop
 
5118
TeXDict begin 16 17 bop 150 -116 a Fv(16)3232 b(FFTW)867
 
5119
299 y Fp(printf\("Accumulated)43 b(wisdom:)j
 
5120
(\045s\\n",wisdom_string\);)867 506 y(/*)h(Just)g(for)g(fun,)g(destroy)
 
5121
e(and)i(restore)f(the)h(wisdom)f(*/)867 610 y(fftw_forget_wisdom\(\);)c
 
5122
(/*)47 b(all)g(gone!)g(*/)867 714 y(fftw_import_wisdom_from_s)o(trin)o
 
5123
(g\(wi)o(sdo)o(m_st)o(ring)o(\);)867 818 y(/*)g(wisdom)g(is)g(back!)f
 
5124
(*/)867 1025 y(fftw_free\(wisdom_string\);)41 b(/*)47
 
5125
b(deallocate)e(it)j(since)e(we're)g(done)h(*/)629 1129
 
5126
y(})390 1233 y(})p eop end
5080
5127
%%Page: 17 19
5081
 
17 18 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
5082
 
b(Reference)2354 b(17)150 299 y Fr(3)80 b(FFTW)55 b(Reference)275
5083
 
526 y Fu(This)25 b(c)m(hapter)j(pro)m(vides)e(a)i(complete)f(reference)
5084
 
h(for)f(all)f(sequen)m(tial)h(\(i.e.,)h(one-pro)s(cessor\))g(FFTW)150
5085
 
636 y(functions.)52 b(W)-8 b(e)35 b(\014rst)f(de\014ne)g(the)g(data)i
5086
 
(t)m(yp)s(es)e(up)s(on)f(whic)m(h)g(FFTW)i(op)s(erates,)i(that)e(is,)g
5087
 
(real,)g(com-)150 746 y(plex,)24 b(and)f(\\halfcomplex")g(n)m(um)m(b)s
5088
 
(ers)f(\(see)i(Section)g(3.1)g([Data)i(T)m(yp)s(es],)e(page)g(17\).)40
 
5128
TeXDict begin 17 18 bop 150 -116 a Fv(Chapter)30 b(3:)41
 
5129
b(FFTW)31 b(Reference)2354 b(17)150 299 y Fs(3)80 b(FFTW)55
 
5130
b(Reference)275 526 y Fv(This)25 b(c)m(hapter)j(pro)m(vides)e(a)i
 
5131
(complete)f(reference)h(for)f(all)f(sequen)m(tial)h(\(i.e.,)h(one-pro)s
 
5132
(cessor\))g(FFTW)150 636 y(functions.)52 b(W)-8 b(e)35
 
5133
b(\014rst)f(de\014ne)g(the)g(data)i(t)m(yp)s(es)e(up)s(on)f(whic)m(h)g
 
5134
(FFTW)i(op)s(erates,)i(that)e(is,)g(real,)g(com-)150
 
5135
746 y(plex,)24 b(and)f(\\halfcomplex")g(n)m(um)m(b)s(ers)f(\(see)i
 
5136
(Section)g(3.1)g([Data)i(T)m(yp)s(es],)e(page)g(17\).)40
5089
5137
b(Then,)24 b(in)e(four)h(sec-)150 855 y(tions,)i(w)m(e)g(explain)e(the)
5090
5138
i(FFTW)g(program)f(in)m(terface)h(for)g(complex)f(one-dimensional)e
5091
5139
(transforms)i(\(see)150 965 y(Section)32 b(3.2)i([One-dimensional)c(T)
5098
5146
(ulti-dimensional)c(transforms)k(\(see)h(Section)e(3.5)j([Real)e
5099
5147
(Multi-dimensional)c(T)-8 b(rans-)150 1403 y(forms)30
5100
5148
b(Reference],)j(page)e(29\).)44 b(Section)30 b(3.6)i([Wisdom)f
5101
 
(Reference],)h(page)g(34)f(describ)s(es)f(the)h Fo(wisdom)150
5102
 
1513 y Fu(mec)m(hanism)c(for)g(exp)s(orting)g(and)g(imp)s(orting)e
 
5149
(Reference],)h(page)g(34)f(describ)s(es)f(the)h Fp(wisdom)150
 
5150
1513 y Fv(mec)m(hanism)c(for)g(exp)s(orting)g(and)g(imp)s(orting)e
5103
5151
(plans.)38 b(Finally)-8 b(,)27 b(Section)g(3.7)i([Memory)f(Allo)s
5104
 
(cator)g(Ref-)150 1622 y(erence],)36 b(page)f(36)g(describ)s(es)e(ho)m
 
5152
(cator)g(Ref-)150 1622 y(erence],)36 b(page)f(35)g(describ)s(es)e(ho)m
5105
5153
(w)h(to)h(c)m(hange)h(FFTW's)f(default)e(memory)h(allo)s(cator.)53
5106
5154
b(F)-8 b(or)35 b(parallel)150 1732 y(transforms,)30 b(See)g(Chapter)g
5107
 
(4)h([P)m(arallel)f(FFTW],)h(page)g(37.)150 1985 y Ft(3.1)68
5108
 
b(Data)46 b(T)l(yp)t(es)275 2177 y Fu(The)e(routines)f(in)g(the)i(FFTW)
 
5155
(4)h([P)m(arallel)f(FFTW],)h(page)g(37.)150 1985 y Fu(3.1)68
 
5156
b(Data)46 b(T)l(yp)t(es)275 2177 y Fv(The)e(routines)f(in)g(the)i(FFTW)
5109
5157
h(pac)m(k)-5 b(age)46 b(use)f(three)f(main)g(kinds)f(of)h(data)i(t)m
5110
 
(yp)s(es.)83 b Fp(Real)49 b Fu(and)150 2286 y Fp(complex)31
5111
 
b Fu(n)m(um)m(b)s(ers)23 b(should)f(b)s(e)j(already)f(kno)m(wn)g(to)h
 
5158
(yp)s(es.)83 b Fq(Real)49 b Fv(and)150 2286 y Fq(complex)31
 
5159
b Fv(n)m(um)m(b)s(ers)23 b(should)f(b)s(e)j(already)f(kno)m(wn)g(to)h
5112
5160
(the)g(reader.)39 b(W)-8 b(e)26 b(also)e(use)h(the)g(term)f
5113
 
Fp(halfcomplex)150 2396 y Fu(to)41 b(describ)s(e)e(complex)h(arra)m(ys)
 
5161
Fq(halfcomplex)150 2396 y Fv(to)41 b(describ)s(e)e(complex)h(arra)m(ys)
5114
5162
g(in)f(a)i(sp)s(ecial)e(pac)m(k)m(ed)i(format)g(used)f(b)m(y)g(the)g
5115
5163
(one-dimensional)e(real)150 2505 y(transforms)30 b(\(taking)g(adv)-5
5116
 
b(an)m(tage)32 b(of)f(the)g Fp(hermitian)d Fu(symmetry)i(that)h(arises)
5117
 
f(in)f(those)i(cases\).)275 2638 y(By)f(including)d Fo(<fftw.h>)h
5118
 
Fu(or)j Fo(<rfftw.h>)p Fu(,)d(y)m(ou)i(will)e(ha)m(v)m(e)k(access)f(to)
5119
 
h(the)e(follo)m(wing)f(de\014nitions:)390 2766 y Fo(typedef)46
 
5164
b(an)m(tage)32 b(of)f(the)g Fq(hermitian)d Fv(symmetry)i(that)h(arises)
 
5165
f(in)f(those)i(cases\).)275 2638 y(By)f(including)d Fp(<fftw.h>)h
 
5166
Fv(or)j Fp(<rfftw.h>)p Fv(,)d(y)m(ou)i(will)e(ha)m(v)m(e)k(access)f(to)
 
5167
h(the)e(follo)m(wing)f(de\014nitions:)390 2766 y Fp(typedef)46
5120
5168
b(double)g(fftw_real;)390 2973 y(typedef)g(struct)g({)629
5121
5169
3077 y(fftw_real)f(re,)i(im;)390 3181 y(})g(fftw_complex;)390
5122
5170
3388 y(#define)f(c_re\(c\))93 b(\(\(c\).re\))390 3492
5123
5171
y(#define)46 b(c_im\(c\))93 b(\(\(c\).im\))275 3625 y
5124
 
Fu(All)31 b(FFTW)i(op)s(erations)f(are)h(p)s(erformed)e(on)h(the)h
5125
 
Fo(fftw_real)d Fu(and)i Fo(fftw_complex)d Fu(data)34
5126
 
b(t)m(yp)s(es.)150 3735 y(F)-8 b(or)32 b Fo(fftw_complex)c
5127
 
Fu(n)m(um)m(b)s(ers,)j(the)h(t)m(w)m(o)h(macros)f Fo(c_re)e
5128
 
Fu(and)h Fo(c_im)f Fu(retriev)m(e,)j(resp)s(ectiv)m(ely)-8
 
5172
Fv(All)31 b(FFTW)i(op)s(erations)f(are)h(p)s(erformed)e(on)h(the)h
 
5173
Fp(fftw_real)d Fv(and)i Fp(fftw_complex)d Fv(data)34
 
5174
b(t)m(yp)s(es.)150 3735 y(F)-8 b(or)32 b Fp(fftw_complex)c
 
5175
Fv(n)m(um)m(b)s(ers,)j(the)h(t)m(w)m(o)h(macros)f Fp(c_re)e
 
5176
Fv(and)h Fp(c_im)f Fv(retriev)m(e,)j(resp)s(ectiv)m(ely)-8
5129
5177
b(,)32 b(the)f(real)150 3845 y(and)f(imaginary)f(parts)h(of)g(the)h(n)m
5130
 
(um)m(b)s(er.)275 3978 y(A)43 b Fp(real)g(arra)m(y)51
5131
 
b Fu(is)42 b(an)h(arra)m(y)h(of)g(real)e(n)m(um)m(b)s(ers.)78
5132
 
b(A)43 b Fp(complex)g(arra)m(y)52 b Fu(is)42 b(an)h(arra)m(y)h(of)f
 
5178
(um)m(b)s(er.)275 3978 y(A)43 b Fq(real)g(arra)m(y)51
 
5179
b Fv(is)42 b(an)h(arra)m(y)h(of)g(real)e(n)m(um)m(b)s(ers.)78
 
5180
b(A)43 b Fq(complex)g(arra)m(y)52 b Fv(is)42 b(an)h(arra)m(y)h(of)f
5133
5181
(complex)150 4087 y(n)m(um)m(b)s(ers.)53 b(A)36 b(one-dimensional)d
5134
 
(arra)m(y)i Fl(X)43 b Fu(of)35 b Fl(n)f Fu(complex)h(n)m(um)m(b)s(ers)f
5135
 
(is)g Fp(hermitian)f Fu(if)h(the)h(follo)m(wing)150 4197
 
5182
(arra)m(y)i Fm(X)43 b Fv(of)35 b Fm(n)f Fv(complex)h(n)m(um)m(b)s(ers)f
 
5183
(is)g Fq(hermitian)f Fv(if)h(the)h(follo)m(wing)150 4197
5136
5184
y(prop)s(ert)m(y)40 b(holds:)60 b(for)41 b(all)f(0)j
5137
 
Fs(\024)g Fl(i)g(<)f(n)p Fu(,)h(w)m(e)f(ha)m(v)m(e)g
5138
 
Fl(X)2065 4211 y Fk(i)2136 4197 y Fu(=)g Fl(X)2331 4164
5139
 
y Fj(\003)2324 4219 y Fk(n)p Fj(\000)p Fk(i)2445 4197
5140
 
y Fu(,)i(where)c Fl(x)2839 4164 y Fj(\003)2918 4197 y
5141
 
Fu(denotes)h(the)g(complex)150 4307 y(conjugate)30 b(of)e
5142
 
Fl(x)p Fu(.)40 b(Hermitian)27 b(arra)m(ys)i(are)f(relev)-5
 
5185
Ft(\024)g Fm(i)g(<)f(n)p Fv(,)h(w)m(e)f(ha)m(v)m(e)g
 
5186
Fm(X)2065 4211 y Fl(i)2136 4197 y Fv(=)g Fm(X)2331 4164
 
5187
y Fk(\003)2324 4219 y Fl(n)p Fk(\000)p Fl(i)2445 4197
 
5188
y Fv(,)i(where)c Fm(x)2839 4164 y Fk(\003)2918 4197 y
 
5189
Fv(denotes)h(the)g(complex)150 4307 y(conjugate)30 b(of)e
 
5190
Fm(x)p Fv(.)40 b(Hermitian)27 b(arra)m(ys)i(are)f(relev)-5
5143
5191
b(an)m(t)29 b(to)g(FFTW)g(b)s(ecause)f(the)h(F)-8 b(ourier)27
5144
5192
b(transform)h(of)h(a)150 4416 y(real)h(arra)m(y)h(is)e(hermitian.)275
5145
5193
4549 y(Because)h(of)e(its)g(symmetry)-8 b(,)30 b(a)f(hermitian)d(arra)m
5146
5194
(y)k(can)f(b)s(e)f(stored)g(in)g(half)f(the)i(space)g(of)g(a)g(complex)
5147
5195
150 4659 y(arra)m(y)i(of)g(the)h(same)f(size.)42 b(FFTW's)32
5148
5196
b(one-dimensional)c(real)j(transforms)f(store)i(hermitian)c(arra)m(ys)k
5149
 
(as)150 4768 y Fp(halfcomplex)40 b Fu(arra)m(ys.)56 b(A)35
5150
 
b(halfcomplex)f(arra)m(y)i(of)g(size)f Fl(n)f Fu(is)h(a)g
5151
 
(one-dimensional)e(arra)m(y)j(of)g Fl(n)e Fo(fftw_)150
5152
 
4878 y(real)e Fu(n)m(um)m(b)s(ers.)47 b(A)33 b(hermitian)e(arra)m(y)i
5153
 
Fl(X)41 b Fu(in)31 b(stored)i(in)m(to)g(a)h(halfcomplex)d(arra)m(y)j
5154
 
Fl(Y)52 b Fu(as)34 b(follo)m(ws.)47 b(F)-8 b(or)150 4988
5155
 
y(all)36 b(in)m(tegers)h Fl(i)h Fu(suc)m(h)f(that)g(0)g
5156
 
Fs(\024)f Fl(i)h Fs(\024)f Fl(n=)p Fu(2,)k(w)m(e)d(ha)m(v)m(e)i
5157
 
Fl(Y)2094 5002 y Fk(i)2158 4988 y Fu(:=)d(Re\()p Fl(X)2507
5158
 
5002 y Fk(i)2536 4988 y Fu(\).)61 b(F)-8 b(or)38 b(all)e(in)m(tegers)h
5159
 
Fl(i)h Fu(suc)m(h)e(that)150 5097 y(0)26 b Fl(<)f(i)g(<)g(n=)p
5160
 
Fu(2,)31 b(w)m(e)g(ha)m(v)m(e)h Fl(Y)1067 5111 y Fk(n)p
5161
 
Fj(\000)p Fk(i)1212 5097 y Fu(:=)25 b(Im\()p Fl(X)1552
5162
 
5111 y Fk(i)1580 5097 y Fu(\).)275 5230 y(W)-8 b(e)27
 
5197
(as)150 4768 y Fq(halfcomplex)40 b Fv(arra)m(ys.)56 b(A)35
 
5198
b(halfcomplex)f(arra)m(y)i(of)g(size)f Fm(n)f Fv(is)h(a)g
 
5199
(one-dimensional)e(arra)m(y)j(of)g Fm(n)e Fp(fftw_)150
 
5200
4878 y(real)e Fv(n)m(um)m(b)s(ers.)47 b(A)33 b(hermitian)e(arra)m(y)i
 
5201
Fm(X)41 b Fv(in)31 b(stored)i(in)m(to)g(a)h(halfcomplex)d(arra)m(y)j
 
5202
Fm(Y)52 b Fv(as)34 b(follo)m(ws.)47 b(F)-8 b(or)150 4988
 
5203
y(all)36 b(in)m(tegers)h Fm(i)h Fv(suc)m(h)f(that)g(0)g
 
5204
Ft(\024)f Fm(i)h Ft(\024)f Fm(n=)p Fv(2,)k(w)m(e)d(ha)m(v)m(e)i
 
5205
Fm(Y)2094 5002 y Fl(i)2158 4988 y Fv(:=)d(Re\()p Fm(X)2507
 
5206
5002 y Fl(i)2536 4988 y Fv(\).)61 b(F)-8 b(or)38 b(all)e(in)m(tegers)h
 
5207
Fm(i)h Fv(suc)m(h)e(that)150 5097 y(0)26 b Fm(<)f(i)g(<)g(n=)p
 
5208
Fv(2,)31 b(w)m(e)g(ha)m(v)m(e)h Fm(Y)1067 5111 y Fl(n)p
 
5209
Fk(\000)p Fl(i)1212 5097 y Fv(:=)25 b(Im\()p Fm(X)1552
 
5210
5111 y Fl(i)1580 5097 y Fv(\).)275 5230 y(W)-8 b(e)27
5163
5211
b(no)m(w)f(illustrate)e(halfcomplex)h(storage)i(for)f
5164
 
Fl(n)f Fu(=)g(4)h(and)f Fl(n)g Fu(=)g(5,)j(since)d(the)h(sc)m(heme)h
5165
 
(dep)s(ends)d(on)150 5340 y(the)g(parit)m(y)g(of)h Fl(n)p
5166
 
Fu(.)38 b(Let)25 b Fl(n)f Fu(=)h(4.)39 b(In)24 b(this)f(case,)k(w)m(e)e
5167
 
(ha)m(v)m(e)g Fl(Y)2095 5354 y Fn(0)2157 5340 y Fu(:=)h(Re\()p
5168
 
Fl(X)2496 5354 y Fn(0)2534 5340 y Fu(\),)g Fl(Y)2673
5169
 
5354 y Fn(1)2735 5340 y Fu(:=)f(Re)q(\()p Fl(X)3074 5354
5170
 
y Fn(1)3112 5340 y Fu(\),)h Fl(Y)3251 5354 y Fn(2)3313
5171
 
5340 y Fu(:=)f(Re\()p Fl(X)3651 5354 y Fn(2)3689 5340
5172
 
y Fu(\),)p eop
 
5212
Fm(n)f Fv(=)g(4)h(and)f Fm(n)g Fv(=)g(5,)j(since)d(the)h(sc)m(heme)h
 
5213
(dep)s(ends)d(on)150 5340 y(the)g(parit)m(y)g(of)h Fm(n)p
 
5214
Fv(.)38 b(Let)25 b Fm(n)f Fv(=)h(4.)39 b(In)24 b(this)f(case,)k(w)m(e)e
 
5215
(ha)m(v)m(e)g Fm(Y)2095 5354 y Fo(0)2157 5340 y Fv(:=)h(Re\()p
 
5216
Fm(X)2496 5354 y Fo(0)2534 5340 y Fv(\),)g Fm(Y)2673
 
5217
5354 y Fo(1)2735 5340 y Fv(:=)f(Re)q(\()p Fm(X)3074 5354
 
5218
y Fo(1)3112 5340 y Fv(\),)h Fm(Y)3251 5354 y Fo(2)3313
 
5219
5340 y Fv(:=)f(Re\()p Fm(X)3651 5354 y Fo(2)3689 5340
 
5220
y Fv(\),)p eop end
5173
5221
%%Page: 18 20
5174
 
18 19 bop 150 -116 a Fu(18)3232 b(FFTW)150 299 y(and)37
5175
 
b Fl(Y)387 313 y Fn(3)461 299 y Fu(:=)g(Im)o(\()p Fl(X)812
5176
 
313 y Fn(1)850 299 y Fu(\).)62 b(Let)38 b(no)m(w)g Fl(n)e
5177
 
Fu(=)h(5.)62 b(In)37 b(this)f(case,)41 b(w)m(e)d(ha)m(v)m(e)g
5178
 
Fl(Y)2612 313 y Fn(0)2686 299 y Fu(:=)f(Re)q(\()p Fl(X)3037
5179
 
313 y Fn(0)3074 299 y Fu(\),)j Fl(Y)3227 313 y Fn(1)3301
5180
 
299 y Fu(:=)d(Re\()p Fl(X)3651 313 y Fn(1)3689 299 y
5181
 
Fu(\),)150 408 y Fl(Y)203 422 y Fn(2)265 408 y Fu(:=)25
5182
 
b(Re)q(\()p Fl(X)604 422 y Fn(2)642 408 y Fu(\),)31 b
5183
 
Fl(Y)786 422 y Fn(3)848 408 y Fu(:=)25 b(Im\()p Fl(X)1188
5184
 
422 y Fn(2)1226 408 y Fu(\),)31 b(and)e Fl(Y)1546 422
5185
 
y Fn(4)1609 408 y Fu(:=)c(Im)o(\()p Fl(X)1948 422 y Fn(1)1986
5186
 
408 y Fu(\).)275 546 y(By)32 b(default,)g(the)h(t)m(yp)s(e)f
5187
 
Fo(fftw_real)e Fu(equals)i(the)g(C)g(t)m(yp)s(e)h Fo(double)p
5188
 
Fu(.)45 b(T)-8 b(o)32 b(w)m(ork)h(in)e(single)g(precision)150
5189
 
655 y(rather)c(than)g(double)f(precision,)g Fo(#define)g
5190
 
Fu(the)h(sym)m(b)s(ol)f Fo(FFTW_ENABLE_FLOAT)d Fu(in)j
5191
 
Fo(fftw.h)g Fu(and)g(then)150 765 y(recompile)32 b(the)i(library)-8
 
5222
TeXDict begin 18 19 bop 150 -116 a Fv(18)3232 b(FFTW)150
 
5223
299 y(and)37 b Fm(Y)387 313 y Fo(3)461 299 y Fv(:=)g(Im)o(\()p
 
5224
Fm(X)812 313 y Fo(1)850 299 y Fv(\).)62 b(Let)38 b(no)m(w)g
 
5225
Fm(n)e Fv(=)h(5.)62 b(In)37 b(this)f(case,)41 b(w)m(e)d(ha)m(v)m(e)g
 
5226
Fm(Y)2612 313 y Fo(0)2686 299 y Fv(:=)f(Re)q(\()p Fm(X)3037
 
5227
313 y Fo(0)3074 299 y Fv(\),)j Fm(Y)3227 313 y Fo(1)3301
 
5228
299 y Fv(:=)d(Re\()p Fm(X)3651 313 y Fo(1)3689 299 y
 
5229
Fv(\),)150 408 y Fm(Y)203 422 y Fo(2)265 408 y Fv(:=)25
 
5230
b(Re)q(\()p Fm(X)604 422 y Fo(2)642 408 y Fv(\),)31 b
 
5231
Fm(Y)786 422 y Fo(3)848 408 y Fv(:=)25 b(Im\()p Fm(X)1188
 
5232
422 y Fo(2)1226 408 y Fv(\),)31 b(and)e Fm(Y)1546 422
 
5233
y Fo(4)1609 408 y Fv(:=)c(Im)o(\()p Fm(X)1948 422 y Fo(1)1986
 
5234
408 y Fv(\).)275 542 y(By)32 b(default,)g(the)h(t)m(yp)s(e)f
 
5235
Fp(fftw_real)e Fv(equals)i(the)g(C)g(t)m(yp)s(e)h Fp(double)p
 
5236
Fv(.)45 b(T)-8 b(o)32 b(w)m(ork)h(in)e(single)g(precision)150
 
5237
652 y(rather)c(than)g(double)f(precision,)g Fp(#define)g
 
5238
Fv(the)h(sym)m(b)s(ol)f Fp(FFTW_ENABLE_FLOAT)d Fv(in)j
 
5239
Fp(fftw.h)g Fv(and)g(then)150 761 y(recompile)32 b(the)i(library)-8
5192
5240
b(.)48 b(On)32 b(Unix)g(systems,)j(y)m(ou)f(can)f(instead)g(use)g
5193
 
Fo(configure)28 b(--enable-float)150 875 y Fu(at)j(installation)d(time)
 
5241
Fp(configure)28 b(--enable-float)150 871 y Fv(at)j(installation)d(time)
5194
5242
i(\(see)i(Chapter)e(6)g([Installation)f(and)h(Customization],)g(page)h
5195
 
(55\).)275 1012 y(In)j(v)m(ersion)g(1)h(of)g(FFTW,)h(the)f(data)h(t)m
5196
 
(yp)s(es)f(w)m(ere)g(called)f Fo(FFTW_REAL)f Fu(and)h
5197
 
Fo(FFTW_COMPLEX)p Fu(.)51 b(W)-8 b(e)150 1122 y(c)m(hanged)35
 
5243
(55\).)275 1004 y(In)j(v)m(ersion)g(1)h(of)g(FFTW,)h(the)f(data)h(t)m
 
5244
(yp)s(es)f(w)m(ere)g(called)f Fp(FFTW_REAL)f Fv(and)h
 
5245
Fp(FFTW_COMPLEX)p Fv(.)51 b(W)-8 b(e)150 1114 y(c)m(hanged)35
5198
5246
b(the)g(capitalization)f(for)h(consistency)g(with)e(the)i(rest)g(of)g
5199
5247
(FFTW's)h(con)m(v)m(en)m(tions.)55 b(The)34 b(old)150
5200
 
1231 y(names)c(are)h(still)d(supp)s(orted,)h(but)h(their)f(use)h(is)g
5201
 
(deprecated.)150 1496 y Ft(3.2)68 b(One-dimensional)46
5202
 
b(T)-11 b(ransforms)45 b(Reference)275 1692 y Fu(The)d(one-dimensional)
 
5248
1223 y(names)c(are)h(still)d(supp)s(orted,)h(but)h(their)f(use)h(is)g
 
5249
(deprecated.)150 1478 y Fu(3.2)68 b(One-dimensional)46
 
5250
b(T)-11 b(ransforms)45 b(Reference)275 1669 y Fv(The)d(one-dimensional)
5203
5251
f(complex)i(routines)e(are)j(generally)e(pre\014xed)g(with)g
5204
 
Fo(fftw_)p Fu(.)77 b(Programs)150 1801 y(using)31 b(FFTW)j(should)d(b)s
5205
 
(e)h(link)m(ed)g(with)f Fo(-lfftw)e(-lm)j Fu(on)h(Unix)e(systems,)j(or)
5206
 
f(with)f(the)h(FFTW)h(and)150 1911 y(standard)c(math)g(libraries)d(in)i
5207
 
(general.)150 2141 y Fi(3.2.1)63 b(Plan)40 b(Creation)h(for)g
5208
 
(One-dimensional)h(T)-10 b(ransforms)390 2330 y Fo(#include)46
5209
 
b(<fftw.h>)390 2538 y(fftw_plan)f(fftw_create_plan\(int)e(n,)k
5210
 
(fftw_direction)d(dir,)1679 2642 y(int)j(flags\);)390
5211
 
2849 y(fftw_plan)e(fftw_create_plan_specific)o(\(int)c(n,)47
5212
 
b(fftw_direction)d(dir,)2108 2953 y(int)j(flags,)2108
5213
 
3057 y(fftw_complex)e(*in,)h(int)h(istride,)2108 3161
5214
 
y(fftw_complex)e(*out,)h(int)h(ostride\);)275 3298 y
5215
 
Fu(The)27 b(function)f Fo(fftw_create_plan)e Fu(creates)29
 
5252
Fp(fftw_)p Fv(.)77 b(Programs)150 1779 y(using)31 b(FFTW)j(should)d(b)s
 
5253
(e)h(link)m(ed)g(with)f Fp(-lfftw)e(-lm)j Fv(on)h(Unix)e(systems,)j(or)
 
5254
f(with)f(the)h(FFTW)h(and)150 1889 y(standard)c(math)g(libraries)d(in)i
 
5255
(general.)150 2110 y Fh(3.2.1)63 b(Plan)40 b(Creation)h(for)g
 
5256
(One-dimensional)h(T)-10 b(ransforms)390 2272 y Fp(#include)46
 
5257
b(<fftw.h>)390 2479 y(fftw_plan)f(fftw_create_plan\(int)e(n,)k
 
5258
(fftw_direction)d(dir,)1679 2583 y(int)j(flags\);)390
 
5259
2791 y(fftw_plan)e(fftw_create_plan_specific)o(\(int)c(n,)47
 
5260
b(fftw_direction)d(dir,)2108 2894 y(int)j(flags,)2108
 
5261
2998 y(fftw_complex)e(*in,)h(int)h(istride,)2108 3102
 
5262
y(fftw_complex)e(*out,)h(int)h(ostride\);)275 3235 y
 
5263
Fv(The)27 b(function)f Fp(fftw_create_plan)e Fv(creates)29
5216
5264
b(a)f(plan,)f(whic)m(h)g(is)g(a)h(data)g(structure)g(con)m(taining)f
5217
 
(all)150 3408 y(the)35 b(information)e(that)i Fo(fftw)e
5218
 
Fu(needs)i(in)e(order)h(to)h(compute)g(the)g(1D)h(F)-8
 
5265
(all)150 3345 y(the)35 b(information)e(that)i Fp(fftw)e
 
5266
Fv(needs)i(in)e(order)h(to)h(compute)g(the)g(1D)h(F)-8
5219
5267
b(ourier)34 b(transform.)53 b(Y)-8 b(ou)35 b(can)150
5220
 
3517 y(create)i(as)e(man)m(y)h(plans)d(as)j(y)m(ou)f(need,)i(but)d
 
5268
3455 y(create)i(as)e(man)m(y)h(plans)d(as)j(y)m(ou)f(need,)i(but)d
5221
5269
(only)h(one)g(plan)f(for)h(a)h(giv)m(en)f(arra)m(y)g(size)h(is)e
5222
 
(required)f(\(a)150 3627 y(plan)c(can)i(b)s(e)e(reused)h(man)m(y)g
5223
 
(times\).)275 3764 y Fo(fftw_create_plan)f Fu(returns)j(a)i(v)-5
5224
 
b(alid)32 b(plan,)i(or)f Fo(NULL)g Fu(if,)g(for)h(some)g(reason,)h(the)
5225
 
f(plan)e(can't)j(b)s(e)150 3874 y(created.)78 b(In)42
 
5270
(required)f(\(a)150 3564 y(plan)c(can)i(b)s(e)e(reused)h(man)m(y)g
 
5271
(times\).)275 3698 y Fp(fftw_create_plan)f Fv(returns)j(a)i(v)-5
 
5272
b(alid)32 b(plan,)i(or)f Fp(NULL)g Fv(if,)g(for)h(some)g(reason,)h(the)
 
5273
f(plan)e(can't)j(b)s(e)150 3807 y(created.)78 b(In)42
5226
5274
b(the)h(default)e(installation,)j(this)d(cannot)i(happ)s(en,)i(but)c
5227
 
(it)h(is)g(p)s(ossible)e(to)j(con\014gure)150 3983 y(FFTW)27
 
5275
(it)h(is)g(p)s(ossible)e(to)j(con\014gure)150 3917 y(FFTW)27
5228
5276
b(in)e(suc)m(h)h(a)h(w)m(a)m(y)h(that)f(some)g(input)d(sizes)i(are)h
5229
5277
(forbidden,)e(and)h(FFTW)h(cannot)g(create)h(a)f(plan.)275
5230
 
4121 y(The)44 b Fo(fftw_create_plan_specific)38 b Fu(v)-5
 
5278
4050 y(The)44 b Fp(fftw_create_plan_specific)38 b Fv(v)-5
5231
5279
b(arian)m(t)46 b(tak)m(es)g(as)f(additional)f(argumen)m(ts)h(sp)s
5232
 
(eci\014c)f(in-)150 4230 y(put/output)f(arra)m(ys)g(and)f(their)h
 
5280
(eci\014c)f(in-)150 4160 y(put/output)f(arra)m(ys)g(and)f(their)h
5233
5281
(strides.)77 b(F)-8 b(or)44 b(the)f(last)g(four)g(argumen)m(ts,)k(y)m
5234
 
(ou)c(should)e(pass)i(the)150 4340 y(arra)m(ys)31 b(and)g(strides)f
 
5282
(ou)c(should)e(pass)i(the)150 4270 y(arra)m(ys)31 b(and)g(strides)f
5235
5283
(that)h(y)m(ou)g(will)e(ev)m(en)m(tually)i(b)s(e)f(passing)g(to)i
5236
 
Fo(fftw)p Fu(.)41 b(The)31 b(resulting)e(plans)g(will)g(b)s(e)150
5237
 
4450 y(optimized)g(for)h(those)h(arra)m(ys)g(and)e(strides,)h(although)
 
5284
Fp(fftw)p Fv(.)41 b(The)31 b(resulting)e(plans)g(will)g(b)s(e)150
 
5285
4379 y(optimized)g(for)h(those)h(arra)m(ys)g(and)e(strides,)h(although)
5238
5286
f(they)i(ma)m(y)g(b)s(e)e(used)h(on)g(other)h(arra)m(ys)f(as)h(w)m
5239
 
(ell.)150 4559 y(Note:)40 b(the)27 b(con)m(ten)m(ts)i(of)e(the)g(in)e
5240
 
(and)h(out)h(arra)m(ys)g(are)h Fq(destr)-5 b(oye)g(d)38
5241
 
b Fu(b)m(y)27 b(the)g(sp)s(eci\014c)e(planner)g(\(the)j(initial)150
5242
 
4669 y(con)m(ten)m(ts)k(are)f(ignored,)f(so)g(the)h(arra)m(ys)g(need)f
5243
 
(not)g(ha)m(v)m(e)i(b)s(een)d(initialized\).)150 4899
5244
 
y Fi(Argumen)m(ts)225 5094 y Fs(\017)60 b Fo(n)30 b Fu(is)f(the)i(size)
 
5287
(ell.)150 4489 y(Note:)40 b(the)27 b(con)m(ten)m(ts)i(of)e(the)g(in)e
 
5288
(and)h(out)h(arra)m(ys)g(are)h Fr(destr)-5 b(oye)g(d)38
 
5289
b Fv(b)m(y)27 b(the)g(sp)s(eci\014c)e(planner)g(\(the)j(initial)150
 
5290
4598 y(con)m(ten)m(ts)k(are)f(ignored,)f(so)g(the)h(arra)m(ys)g(need)f
 
5291
(not)g(ha)m(v)m(e)i(b)s(een)d(initialized\).)150 4820
 
5292
y Fh(Argumen)m(ts)225 4987 y Ft(\017)60 b Fp(n)30 b Fv(is)f(the)i(size)
5245
5293
f(of)h(the)f(transform.)40 b(It)31 b(can)g(b)s(e)e(an)m(y)i(p)s(ositiv)
5246
 
m(e)e(in)m(teger.)379 5230 y Fs(\000)60 b Fu(FFTW)22
 
5294
m(e)e(in)m(teger.)379 5121 y Ft(\000)60 b Fv(FFTW)22
5247
5295
b(is)f(b)s(est)g(at)h(handling)c(sizes)k(of)f(the)h(form)f(2)2237
5248
 
5197 y Fk(a)2277 5230 y Fu(3)2322 5197 y Fk(b)2356 5230
5249
 
y Fu(5)2401 5197 y Fk(c)2435 5230 y Fu(7)2480 5197 y
5250
 
Fk(d)2519 5230 y Fu(11)2609 5197 y Fk(e)2646 5230 y Fu(13)2736
5251
 
5197 y Fk(f)2780 5230 y Fu(,)i(where)e Fl(e)p Fu(+)p
5252
 
Fl(f)31 b Fu(is)20 b(either)h(0)h(or)510 5340 y(1,)30
 
5296
5088 y Fl(a)2277 5121 y Fv(3)2322 5088 y Fl(b)2356 5121
 
5297
y Fv(5)2401 5088 y Fl(c)2435 5121 y Fv(7)2480 5088 y
 
5298
Fl(d)2519 5121 y Fv(11)2609 5088 y Fl(e)2646 5121 y Fv(13)2736
 
5299
5088 y Fl(f)2780 5121 y Fv(,)i(where)e Fm(e)p Fv(+)p
 
5300
Fm(f)31 b Fv(is)20 b(either)h(0)h(or)510 5230 y(1,)30
5253
5301
b(and)e(the)h(other)g(exp)s(onen)m(ts)f(are)i(arbitrary)-8
5254
 
b(.)39 b(Other)28 b(sizes)h(are)g(computed)f(b)m(y)h(means)g(of)g(a)p
5255
 
eop
 
5302
b(.)39 b(Other)28 b(sizes)h(are)g(computed)f(b)m(y)h(means)g(of)g(a)510
 
5303
5340 y(slo)m(w,)h(general-purp)s(ose)f(routine)h(\(whic)m(h)f(nev)m
 
5304
(ertheless)i(retains)f Fm(O)s Fv(\()p Fm(n)15 b Fv(log)h
 
5305
Fm(n)p Fv(\))30 b(p)s(erformance,)p eop end
5256
5306
%%Page: 19 21
5257
 
19 20 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
5258
 
b(Reference)2354 b(19)510 299 y(slo)m(w,)30 b(general-purp)s(ose)f
5259
 
(routine)h(\(whic)m(h)f(nev)m(ertheless)i(retains)f Fl(O)s
5260
 
Fu(\()p Fl(n)15 b Fu(log)h Fl(n)p Fu(\))30 b(p)s(erformance,)510
5261
 
408 y(ev)m(en)i(for)f(prime)e(sizes\).)44 b(\(It)31 b(is)g(p)s(ossible)
5262
 
d(to)k(customize)g(FFTW)g(for)f(di\013eren)m(t)f(arra)m(y)i(sizes.)510
5263
 
518 y(See)k(Chapter)g(6)g([Installation)f(and)g(Customization],)i(page)
5264
 
g(55,)h(for)e(more)g(information.\))510 628 y(T)-8 b(ransforms)29
 
5307
TeXDict begin 19 20 bop 150 -116 a Fv(Chapter)30 b(3:)41
 
5308
b(FFTW)31 b(Reference)2354 b(19)510 299 y(ev)m(en)32
 
5309
b(for)f(prime)e(sizes\).)44 b(\(It)31 b(is)g(p)s(ossible)d(to)k
 
5310
(customize)g(FFTW)g(for)f(di\013eren)m(t)f(arra)m(y)i(sizes.)510
 
5311
408 y(See)k(Chapter)g(6)g([Installation)f(and)g(Customization],)i(page)
 
5312
g(55,)h(for)e(more)g(information.\))510 518 y(T)-8 b(ransforms)29
5265
5313
b(whose)h(sizes)h(are)f(p)s(o)m(w)m(ers)h(of)f(2)h(are)g(esp)s(ecially)
5266
 
d(fast.)225 761 y Fs(\017)60 b Fo(dir)34 b Fu(is)g(the)h(sign)f(of)h
 
5314
d(fast.)225 646 y Ft(\017)60 b Fp(dir)34 b Fv(is)g(the)h(sign)f(of)h
5267
5315
(the)g(exp)s(onen)m(t)f(in)g(the)h(form)m(ula)f(that)h(de\014nes)f(the)
5268
 
h(F)-8 b(ourier)34 b(transform.)54 b(It)330 871 y(can)31
5269
 
b(b)s(e)f Fs(\000)p Fu(1)h(or)g(+)o(1.)43 b(The)30 b(aliases)g
5270
 
Fo(FFTW_FORWARD)d Fu(and)j Fo(FFTW_BACKWARD)e Fu(are)j(pro)m(vided,)e
5271
 
(where)330 981 y Fo(FFTW_FORWARD)e Fu(stands)j(for)g
5272
 
Fs(\000)p Fu(1.)225 1114 y Fs(\017)60 b Fo(flags)29 b
5273
 
Fu(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p Fo(|)p Fu('\))i(of)e(zero)h(or)g
5274
 
(more)f(of)h(the)f(follo)m(wing:)379 1248 y Fs(\000)60
5275
 
b Fo(FFTW_MEASURE)p Fu(:)33 b(this)19 b(\015ag)j(tells)e(FFTW)h(to)h
5276
 
(\014nd)d(the)i(optimal)f(plan)g(b)m(y)g(actually)h Fq(c)-5
5277
 
b(omputing)510 1358 y Fu(sev)m(eral)31 b(FFTs)g(and)f(measuring)f
 
5316
h(F)-8 b(ourier)34 b(transform.)54 b(It)330 755 y(can)31
 
5317
b(b)s(e)f Ft(\000)p Fv(1)h(or)g(+)o(1.)43 b(The)30 b(aliases)g
 
5318
Fp(FFTW_FORWARD)d Fv(and)j Fp(FFTW_BACKWARD)e Fv(are)j(pro)m(vided,)e
 
5319
(where)330 865 y Fp(FFTW_FORWARD)e Fv(stands)j(for)g
 
5320
Ft(\000)p Fv(1.)225 992 y Ft(\017)60 b Fp(flags)29 b
 
5321
Fv(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p Fp(|)p Fv('\))i(of)e(zero)h(or)g
 
5322
(more)f(of)h(the)f(follo)m(wing:)379 1120 y Ft(\000)60
 
5323
b Fp(FFTW_MEASURE)p Fv(:)33 b(this)19 b(\015ag)j(tells)e(FFTW)h(to)h
 
5324
(\014nd)d(the)i(optimal)f(plan)g(b)m(y)g(actually)h Fr(c)-5
 
5325
b(omputing)510 1230 y Fv(sev)m(eral)31 b(FFTs)g(and)f(measuring)f
5278
5326
(their)h(execution)h(time.)41 b(Dep)s(ending)29 b(on)i(the)g
5279
 
(installation,)510 1467 y(this)e(can)i(tak)m(e)h(some)f(time.)1481
5280
 
1434 y Fn(1)379 1601 y Fs(\000)60 b Fo(FFTW_ESTIMATE)p
5281
 
Fu(:)34 b(do)25 b(not)g(run)f(an)m(y)h(FFT)h(and)e(pro)m(vide)g(a)h
5282
 
(\\reasonable")h(plan)e(\(for)h(a)g(RISC)510 1711 y(pro)s(cessor)37
 
5327
(installation,)510 1339 y(this)e(can)i(tak)m(e)h(some)f(time.)1481
 
5328
1306 y Fo(1)379 1467 y Ft(\000)60 b Fp(FFTW_ESTIMATE)p
 
5329
Fv(:)34 b(do)25 b(not)g(run)f(an)m(y)h(FFT)h(and)e(pro)m(vide)g(a)h
 
5330
(\\reasonable")h(plan)e(\(for)h(a)g(RISC)510 1576 y(pro)s(cessor)37
5283
5331
b(with)g(man)m(y)h(registers\).)62 b(If)38 b(neither)e
5284
 
Fo(FFTW_ESTIMATE)e Fu(nor)k Fo(FFTW_MEASURE)c Fu(is)510
5285
 
1820 y(pro)m(vided,)29 b(the)i(default)e(is)h Fo(FFTW_ESTIMATE)p
5286
 
Fu(.)379 1954 y Fs(\000)60 b Fo(FFTW_OUT_OF_PLACE)p Fu(:)41
 
5332
Fp(FFTW_ESTIMATE)e Fv(nor)k Fp(FFTW_MEASURE)c Fv(is)510
 
5333
1686 y(pro)m(vided,)29 b(the)i(default)e(is)h Fp(FFTW_ESTIMATE)p
 
5334
Fv(.)379 1813 y Ft(\000)60 b Fp(FFTW_OUT_OF_PLACE)p Fv(:)41
5287
5335
b(pro)s(duce)32 b(a)i(plan)e(assuming)f(that)j(the)f(input)e(and)i
5288
 
(output)g(arra)m(ys)510 2063 y(will)28 b(b)s(e)h(distinct)g(\(this)h
5289
 
(is)f(the)i(default\).)379 2197 y Fs(\000)60 b Fo(FFTW_IN_PLACE)p
5290
 
Fu(:)39 b(pro)s(duce)31 b(a)h(plan)e(assuming)g(that)i(y)m(ou)g(w)m(an)
5291
 
m(t)g(the)g(output)f(in)f(the)i(input)510 2307 y(arra)m(y)-8
 
5336
(output)g(arra)m(ys)510 1923 y(will)28 b(b)s(e)h(distinct)g(\(this)h
 
5337
(is)f(the)i(default\).)379 2051 y Ft(\000)60 b Fp(FFTW_IN_PLACE)p
 
5338
Fv(:)39 b(pro)s(duce)31 b(a)h(plan)e(assuming)g(that)i(y)m(ou)g(w)m(an)
 
5339
m(t)g(the)g(output)f(in)f(the)i(input)510 2160 y(arra)m(y)-8
5292
5340
b(.)50 b(The)33 b(algorithm)f(used)g(is)g(not)i(necessarily)e(in)g
5293
 
(place:)46 b(FFTW)34 b(is)e(able)h(to)h(compute)510 2416
 
5341
(place:)46 b(FFTW)34 b(is)e(able)h(to)h(compute)510 2270
5294
5342
y(true)23 b(in-place)f(transforms)h(only)f(for)h(small)f(v)-5
5295
 
b(alues)23 b(of)g Fo(n)p Fu(.)38 b(If)23 b(FFTW)h(is)e(not)i(able)f(to)
5296
 
h(compute)510 2526 y(the)31 b(transform)g(in-place,)f(it)h(will)e(allo)
 
5343
b(alues)23 b(of)g Fp(n)p Fv(.)38 b(If)23 b(FFTW)h(is)e(not)i(able)f(to)
 
5344
h(compute)510 2379 y(the)31 b(transform)g(in-place,)f(it)h(will)e(allo)
5297
5345
s(cate)i(a)h(temp)s(orary)e(arra)m(y)i(\(unless)e(y)m(ou)h(pro)m(vide)g
5298
 
(one)510 2636 y(y)m(ourself)7 b(\),)27 b(compute)e(the)h(transform)f
 
5346
(one)510 2489 y(y)m(ourself)7 b(\),)27 b(compute)e(the)h(transform)f
5299
5347
(out)h(of)g(place,)h(and)e(cop)m(y)h(the)g(result)f(bac)m(k.)40
5300
 
b Fq(Warning:)510 2745 y(This)f(option)i(changes)e(the)h(me)-5
 
5348
b Fr(Warning:)510 2599 y(This)f(option)i(changes)e(the)h(me)-5
5301
5349
b(aning)40 b(of)f(some)g(p)-5 b(ar)g(ameters)42 b(of)e
5302
 
Fo(fftw)c Fu(\(see)i(Section)f(3.2.3)510 2855 y([Computing)29
 
5350
Fp(fftw)c Fv(\(see)i(Section)f(3.2.3)510 2708 y([Computing)29
5303
5351
b(the)i(One-dimensional)c(T)-8 b(ransform],)30 b(page)h(20\).)510
5304
 
2988 y(The)d(in-place)f(option)h(is)f(mainly)g(pro)m(vided)f(for)j(p)s
 
5352
2836 y(The)d(in-place)f(option)h(is)f(mainly)g(pro)m(vided)f(for)j(p)s
5305
5353
(eople)e(who)h(w)m(an)m(t)h(to)g(write)e(their)h(o)m(wn)g(in-)510
5306
 
3098 y(place)k(m)m(ulti-dimensional)d(F)-8 b(ourier)32
 
5354
2945 y(place)k(m)m(ulti-dimensional)d(F)-8 b(ourier)32
5307
5355
b(transform,)g(using)f(FFTW)i(as)f(a)h(base.)47 b(F)-8
5308
 
b(or)33 b(example,)510 3208 y(consider)f(a)i(three-dimensional)e
5309
 
Fo(n)e(*)g(n)g(*)g(n)j Fu(transform.)49 b(An)33 b(out-of-place)i
5310
 
(algorithm)e(will)510 3317 y(need)45 b(another)g(arra)m(y)g(\(whic)m(h)
 
5356
b(or)33 b(example,)510 3055 y(consider)f(a)i(three-dimensional)e
 
5357
Fp(n)e(*)g(n)g(*)g(n)j Fv(transform.)49 b(An)33 b(out-of-place)i
 
5358
(algorithm)e(will)510 3164 y(need)45 b(another)g(arra)m(y)g(\(whic)m(h)
5311
5359
f(ma)m(y)i(b)s(e)e(h)m(uge\).)86 b(Ho)m(w)m(ev)m(er,)50
5312
 
b(FFTW)c(can)f(compute)h(the)510 3427 y(in-place)35 b(transform)f
 
5360
b(FFTW)c(can)f(compute)h(the)510 3274 y(in-place)35 b(transform)f
5313
5361
(along)i(eac)m(h)h(dimension)c(using)h(only)h(a)h(temp)s(orary)f(arra)m
5314
 
(y)h(of)g(size)f Fo(n)p Fu(.)510 3536 y(Moreo)m(v)m(er,)h(if)31
 
5362
(y)h(of)g(size)f Fp(n)p Fv(.)510 3384 y(Moreo)m(v)m(er,)h(if)31
5315
5363
b(FFTW)j(happ)s(ens)c(to)k(b)s(e)e(able)g(to)i(compute)f(the)f
5316
 
(transform)g(truly)g(in-place,)510 3646 y(no)k(temp)s(orary)g(arra)m(y)
 
5364
(transform)g(truly)g(in-place,)510 3493 y(no)k(temp)s(orary)g(arra)m(y)
5317
5365
h(and)e(no)i(cop)m(ying)f(are)g(needed.)58 b(As)37 b(distributed,)e
5318
 
(FFTW)i(`kno)m(ws')510 3756 y(ho)m(w)32 b(to)h(compute)f(in-place)g
 
5366
(FFTW)i(`kno)m(ws')510 3603 y(ho)m(w)32 b(to)h(compute)f(in-place)g
5319
5367
(transforms)f(of)h(size)g(1,)h(2,)h(3,)f(4,)g(5,)g(6,)g(7,)g(8,)h(9,)f
5320
 
(10,)h(11,)f(12,)h(13,)510 3865 y(14,)d(15,)h(16,)f(32)h(and)d(64.)510
5321
 
3999 y(The)h(default)f(mo)s(de)h(of)h(op)s(eration)f(is)f
5322
 
Fo(FFTW_OUT_OF_PLACE)p Fu(.)379 4133 y Fs(\000)60 b Fo(FFTW_USE_WISDOM)
5323
 
p Fu(:)37 b(use)30 b(an)m(y)h Fo(wisdom)e Fu(that)i(is)e(a)m(v)-5
 
5368
(10,)h(11,)f(12,)h(13,)510 3712 y(14,)d(15,)h(16,)f(32)h(and)d(64.)510
 
5369
3840 y(The)h(default)f(mo)s(de)h(of)h(op)s(eration)f(is)f
 
5370
Fp(FFTW_OUT_OF_PLACE)p Fv(.)379 3968 y Ft(\000)60 b Fp(FFTW_USE_WISDOM)
 
5371
p Fv(:)37 b(use)30 b(an)m(y)h Fp(wisdom)e Fv(that)i(is)e(a)m(v)-5
5324
5372
b(ailable)30 b(to)h(help)e(in)h(the)g(creation)h(of)g(the)510
5325
 
4242 y(plan.)50 b(\(See)34 b(Section)g(2.6)h([W)-8 b(ords)34
 
5373
4077 y(plan.)50 b(\(See)34 b(Section)g(2.6)h([W)-8 b(ords)34
5326
5374
b(of)h(Wisdom],)f(page)h(13.\))52 b(This)32 b(can)i(greatly)h(sp)s(eed)
5327
 
e(the)510 4352 y(creation)27 b(of)g(plans,)g(esp)s(ecially)e(with)g
5328
 
(the)j Fo(FFTW_MEASURE)23 b Fu(option.)39 b Fo(FFTW_ESTIMATE)23
5329
 
b Fu(plans)510 4461 y(can)28 b(also)g(tak)m(e)i(adv)-5
5330
 
b(an)m(tage)30 b(of)e Fo(wisdom)e Fu(to)j(pro)s(duce)e(a)h(more)g
5331
 
(optimal)f(plan)g(\(based)h(on)g(past)510 4571 y(measuremen)m(ts\))i
 
5375
e(the)510 4187 y(creation)27 b(of)g(plans,)g(esp)s(ecially)e(with)g
 
5376
(the)j Fp(FFTW_MEASURE)23 b Fv(option.)39 b Fp(FFTW_ESTIMATE)23
 
5377
b Fv(plans)510 4296 y(can)28 b(also)g(tak)m(e)i(adv)-5
 
5378
b(an)m(tage)30 b(of)e Fp(wisdom)e Fv(to)j(pro)s(duce)e(a)h(more)g
 
5379
(optimal)f(plan)g(\(based)h(on)g(past)510 4406 y(measuremen)m(ts\))i
5332
5380
(than)g(the)g(estimation)f(heuristic)f(w)m(ould)g(normally)g(generate.)
5333
 
42 b(When)30 b(the)510 4681 y Fo(FFTW_MEASURE)36 b Fu(option)j(is)f
5334
 
(used,)j(new)d Fo(wisdom)g Fu(will)f(also)i(b)s(e)f(generated)j(if)d
5335
 
(the)h(curren)m(t)510 4790 y(transform)30 b(size)g(is)f(not)i
5336
 
(completely)f(understo)s(o)s(d)f(b)m(y)h(existing)f Fo(wisdom)p
5337
 
Fu(.)225 4924 y Fs(\017)60 b Fo(in)p Fu(,)35 b Fo(out)p
5338
 
Fu(,)f Fo(istride)p Fu(,)g Fo(ostride)e Fu(\(only)i(for)g
5339
 
Fo(fftw_create_plan_specifi)o(c)p Fu(\):)43 b(see)35
5340
 
b(corresp)s(ond-)330 5033 y(ing)41 b(argumen)m(ts)h(in)e(the)i
5341
 
(description)d(of)j Fo(fftw)p Fu(.)73 b(\(See)42 b(Section)g(3.2.3)h
5342
 
([Computing)d(the)i(One-)p 150 5131 1200 4 v 192 5197
5343
 
a Fn(1)275 5230 y Fu(The)28 b(basic)h(problem)f(is)g(the)i(resolution)e
5344
 
(of)i(the)f(clo)s(c)m(k:)41 b(FFTW)30 b(needs)f(to)h(run)e(for)h(a)h
5345
 
(certain)f(time)275 5340 y(for)h(the)g(clo)s(c)m(k)h(to)g(b)s(e)f
5346
 
(reliable.)p eop
 
5381
42 b(When)30 b(the)510 4515 y Fp(FFTW_MEASURE)36 b Fv(option)j(is)f
 
5382
(used,)j(new)d Fp(wisdom)g Fv(will)f(also)i(b)s(e)f(generated)j(if)d
 
5383
(the)h(curren)m(t)510 4625 y(transform)30 b(size)g(is)f(not)i
 
5384
(completely)f(understo)s(o)s(d)f(b)m(y)h(existing)f Fp(wisdom)p
 
5385
Fv(.)225 4753 y Ft(\017)60 b Fp(in)p Fv(,)35 b Fp(out)p
 
5386
Fv(,)f Fp(istride)p Fv(,)g Fp(ostride)e Fv(\(only)i(for)g
 
5387
Fp(fftw_create_plan_specifi)o(c)p Fv(\):)43 b(see)35
 
5388
b(corresp)s(ond-)330 4862 y(ing)41 b(argumen)m(ts)h(in)e(the)i
 
5389
(description)d(of)j Fp(fftw)p Fv(.)73 b(\(See)42 b(Section)g(3.2.3)h
 
5390
([Computing)d(the)i(One-)330 4972 y(dimensional)e(T)-8
 
5391
b(ransform],)45 b(page)f(20.\))79 b(In)42 b(particular,)i(the)f
 
5392
Fp(out)f Fv(and)g Fp(ostride)f Fv(parameters)330 5081
 
5393
y(ha)m(v)m(e)32 b(the)e(same)h(sp)s(ecial)e(meaning)h(for)g
 
5394
Fp(FFTW_IN_PLACE)c Fv(transforms)k(as)h(they)f(ha)m(v)m(e)i(for)e
 
5395
Fp(fftw)p Fv(.)p 150 5149 1200 4 v 199 5217 a Fo(1)275
 
5396
5249 y Fj(The)25 b(basic)h(problem)e(is)i(the)e(resolution)j(of)e(the)g
 
5397
(clo)r(c)n(k:)35 b(FFTW)26 b(needs)e(to)i(run)e(for)i(a)g(certain)f
 
5398
(time)g(for)g(the)g(clo)r(c)n(k)h(to)275 5340 y(b)r(e)f(reliable.)p
 
5399
eop end
5347
5400
%%Page: 20 22
5348
 
20 21 bop 150 -116 a Fu(20)3232 b(FFTW)330 299 y(dimensional)40
5349
 
b(T)-8 b(ransform],)45 b(page)f(20.\))79 b(In)42 b(particular,)i(the)f
5350
 
Fo(out)f Fu(and)g Fo(ostride)f Fu(parameters)330 408
5351
 
y(ha)m(v)m(e)32 b(the)e(same)h(sp)s(ecial)e(meaning)h(for)g
5352
 
Fo(FFTW_IN_PLACE)c Fu(transforms)k(as)h(they)f(ha)m(v)m(e)i(for)e
5353
 
Fo(fftw)p Fu(.)150 636 y Fi(3.2.2)63 b(Discussion)42
5354
 
b(on)g(Sp)s(eci\014c)f(Plans)275 830 y Fu(W)-8 b(e)22
5355
 
b(recommend)f(the)g(use)g(of)h(the)f(sp)s(eci\014c)f(planners,)i(ev)m
5356
 
(en)g(in)e(cases)i(where)e(y)m(ou)i(will)d(b)s(e)h(transform-)150
5357
 
939 y(ing)30 b(arra)m(ys)h(di\013eren)m(t)f(from)g(those)h(passed)f(to)
5358
 
i(the)f(sp)s(eci\014c)e(planners,)g(as)i(they)g(confer)g(the)f(follo)m
5359
 
(wing)150 1049 y(adv)-5 b(an)m(tages:)225 1185 y Fs(\017)60
5360
 
b Fu(The)36 b(resulting)f(plans)g(will)f(b)s(e)i(optimized)g(for)g(y)m
5361
 
(our)h(sp)s(eci\014c)e(arra)m(ys)i(and)f(strides.)58
5362
 
b(This)35 b(ma)m(y)330 1294 y(or)d(ma)m(y)h(not)g(mak)m(e)g(a)f
5363
 
(signi\014can)m(t)g(di\013erence,)g(but)g(it)f(certainly)h(do)s(esn't)g
5364
 
(h)m(urt.)46 b(\(The)32 b(ordinary)330 1404 y(planner)d(do)s(es)h(its)f
5365
 
(planning)f(based)i(up)s(on)f(a)i(stride-one)f(temp)s(orary)g(arra)m(y)
5366
 
g(that)h(it)f(allo)s(cates.\))225 1539 y Fs(\017)60 b
5367
 
Fu(Less)27 b(in)m(termediate)g(storage)i(is)e(required)e(during)g(the)j
5368
 
(planning)d(pro)s(cess.)39 b(\(The)27 b(ordinary)f(plan-)330
5369
 
1649 y(ner)32 b(uses)g(O\()p Fo(N)p Fu(\))h(temp)s(orary)f(storage,)j
5370
 
(where)d Fo(N)g Fu(is)g(the)h(maxim)m(um)e(dimension,)g(while)g(it)h
5371
 
(is)f(cre-)330 1758 y(ating)f(the)h(plan.\))225 1894
5372
 
y Fs(\017)60 b Fu(F)-8 b(or)32 b(m)m(ulti-dimensional)27
5373
 
b(transforms,)j(new)h(parameters)g(b)s(ecome)h(accessible)e(for)h
5374
 
(optimization)330 2003 y(b)m(y)36 b(the)h(planner.)58
5375
 
b(\(Since)36 b(m)m(ulti-dimensional)c(arra)m(ys)37 b(can)g(b)s(e)f(v)m
5376
 
(ery)h(large,)h(w)m(e)f(don't)g(dare)f(to)330 2113 y(allo)s(cate)30
5377
 
b(one)g(in)f(the)g(ordinary)f(planner)g(for)i(exp)s(erimen)m(tation.)39
5378
 
b(This)28 b(prev)m(en)m(ts)j(us)e(from)g(doing)330 2222
 
5401
TeXDict begin 20 21 bop 150 -116 a Fv(20)3232 b(FFTW)150
 
5402
299 y Fh(3.2.2)63 b(Discussion)42 b(on)g(Sp)s(eci\014c)f(Plans)275
 
5403
499 y Fv(W)-8 b(e)22 b(recommend)f(the)g(use)g(of)h(the)f(sp)s
 
5404
(eci\014c)f(planners,)i(ev)m(en)g(in)e(cases)i(where)e(y)m(ou)i(will)d
 
5405
(b)s(e)h(transform-)150 608 y(ing)30 b(arra)m(ys)h(di\013eren)m(t)f
 
5406
(from)g(those)h(passed)f(to)i(the)f(sp)s(eci\014c)e(planners,)g(as)i
 
5407
(they)g(confer)g(the)f(follo)m(wing)150 718 y(adv)-5
 
5408
b(an)m(tages:)225 860 y Ft(\017)60 b Fv(The)36 b(resulting)f(plans)g
 
5409
(will)f(b)s(e)i(optimized)g(for)g(y)m(our)h(sp)s(eci\014c)e(arra)m(ys)i
 
5410
(and)f(strides.)58 b(This)35 b(ma)m(y)330 969 y(or)d(ma)m(y)h(not)g
 
5411
(mak)m(e)g(a)f(signi\014can)m(t)g(di\013erence,)g(but)g(it)f(certainly)
 
5412
h(do)s(esn't)g(h)m(urt.)46 b(\(The)32 b(ordinary)330
 
5413
1079 y(planner)d(do)s(es)h(its)f(planning)f(based)i(up)s(on)f(a)i
 
5414
(stride-one)f(temp)s(orary)g(arra)m(y)g(that)h(it)f(allo)s(cates.\))225
 
5415
1217 y Ft(\017)60 b Fv(Less)27 b(in)m(termediate)g(storage)i(is)e
 
5416
(required)e(during)g(the)j(planning)d(pro)s(cess.)39
 
5417
b(\(The)27 b(ordinary)f(plan-)330 1327 y(ner)32 b(uses)g(O\()p
 
5418
Fp(N)p Fv(\))h(temp)s(orary)f(storage,)j(where)d Fp(N)g
 
5419
Fv(is)g(the)h(maxim)m(um)e(dimension,)g(while)g(it)h(is)f(cre-)330
 
5420
1436 y(ating)f(the)h(plan.\))225 1574 y Ft(\017)60 b
 
5421
Fv(F)-8 b(or)32 b(m)m(ulti-dimensional)27 b(transforms,)j(new)h
 
5422
(parameters)g(b)s(ecome)h(accessible)e(for)h(optimization)330
 
5423
1684 y(b)m(y)36 b(the)h(planner.)58 b(\(Since)36 b(m)m
 
5424
(ulti-dimensional)c(arra)m(ys)37 b(can)g(b)s(e)f(v)m(ery)h(large,)h(w)m
 
5425
(e)f(don't)g(dare)f(to)330 1794 y(allo)s(cate)30 b(one)g(in)f(the)g
 
5426
(ordinary)f(planner)g(for)i(exp)s(erimen)m(tation.)39
 
5427
b(This)28 b(prev)m(en)m(ts)j(us)e(from)g(doing)330 1903
5379
5428
y(certain)h(optimizations)f(that)i(can)g(yield)e(dramatic)h(impro)m(v)m
5380
 
(emen)m(ts)g(in)f(some)i(cases.\))275 2384 y(On)36 b(the)h(other)g
5381
 
(hand,)h(note)g(that)f Fq(the)i(sp)-5 b(e)g(ci\014c)40
 
5429
(emen)m(ts)g(in)f(some)i(cases.\))275 2073 y(On)36 b(the)h(other)g
 
5430
(hand,)h(note)g(that)f Fr(the)i(sp)-5 b(e)g(ci\014c)40
5382
5431
b(planner)g(destr)-5 b(oys)41 b(the)e(c)-5 b(ontents)40
5383
 
b(of)f(the)g Fo(in)f Fq(and)150 2494 y Fo(out)32 b Fq(arr)-5
5384
 
b(ays)p Fu(.)150 2721 y Fi(3.2.3)63 b(Computing)41 b(the)f
5385
 
(One-dimensional)i(T)-10 b(ransform)390 2909 y Fo(#include)46
5386
 
b(<fftw.h>)390 3117 y(void)h(fftw\(fftw_plan)d(plan,)i(int)h(howmany,)
5387
 
867 3220 y(fftw_complex)e(*in,)h(int)h(istride,)f(int)h(idist,)867
5388
 
3324 y(fftw_complex)e(*out,)h(int)h(ostride,)f(int)g(odist\);)390
5389
 
3532 y(void)h(fftw_one\(fftw_plan)42 b(plan,)47 b(fftw_complex)d(*in,)
5390
 
867 3636 y(fftw_complex)h(*out\);)275 3772 y Fu(The)22
5391
 
b(function)g Fo(fftw)g Fu(computes)h(the)g(one-dimensional)e(F)-8
 
5432
b(of)f(the)g Fp(in)f Fr(and)150 2183 y Fp(out)32 b Fr(arr)-5
 
5433
b(ays)p Fv(.)150 2422 y Fh(3.2.3)63 b(Computing)41 b(the)f
 
5434
(One-dimensional)i(T)-10 b(ransform)390 2584 y Fp(#include)46
 
5435
b(<fftw.h>)390 2791 y(void)h(fftw\(fftw_plan)d(plan,)i(int)h(howmany,)
 
5436
867 2895 y(fftw_complex)e(*in,)h(int)h(istride,)f(int)h(idist,)867
 
5437
2999 y(fftw_complex)e(*out,)h(int)h(ostride,)f(int)g(odist\);)390
 
5438
3206 y(void)h(fftw_one\(fftw_plan)42 b(plan,)47 b(fftw_complex)d(*in,)
 
5439
867 3310 y(fftw_complex)h(*out\);)275 3452 y Fv(The)22
 
5440
b(function)g Fp(fftw)g Fv(computes)h(the)g(one-dimensional)e(F)-8
5392
5441
b(ourier)23 b(transform,)h(using)e(a)h(plan)f(created)150
5393
 
3881 y(b)m(y)31 b Fo(fftw_create_plan)c Fu(\(See)k(Section)g(3.2.1)i
 
5442
3561 y(b)m(y)31 b Fp(fftw_create_plan)c Fv(\(See)k(Section)g(3.2.1)i
5394
5443
([Plan)e(Creation)f(for)h(One-dimensional)e(T)-8 b(ransforms],)150
5395
 
3991 y(page)38 b(18.\))62 b(The)37 b(function)f Fo(fftw_one)f
5396
 
Fu(pro)m(vides)h(a)i(simpli\014ed)33 b(in)m(terface)38
5397
 
b(for)f(the)g(common)h(case)g(of)150 4100 y(single)29
5398
 
b(input)f(arra)m(y)j(of)g(stride)e(1.)150 4327 y Fi(Argumen)m(ts)225
5399
 
4522 y Fs(\017)60 b Fo(plan)35 b Fu(is)g(the)i(plan)e(created)i(b)m(y)f
5400
 
Fo(fftw_create_plan)c Fu(\(see)38 b(Section)e(3.2.1)i([Plan)d(Creation)
5401
 
h(for)330 4631 y(One-dimensional)27 b(T)-8 b(ransforms],)30
5402
 
b(page)h(18\).)225 4766 y Fs(\017)60 b Fo(howmany)30
5403
 
b Fu(is)h(the)h(n)m(um)m(b)s(er)e(of)i(transforms)f Fo(fftw)g
5404
 
Fu(will)e(compute.)46 b(It)32 b(is)f(faster)h(to)h(tell)e(FFTW)h(to)330
5405
 
4876 y(compute)f(man)m(y)f(transforms,)g(instead)g(of)g(simply)e
5406
 
(calling)h Fo(fftw)g Fu(man)m(y)i(times.)225 5011 y Fs(\017)60
5407
 
b Fo(in)p Fu(,)33 b Fo(istride)e Fu(and)i Fo(idist)e
5408
 
Fu(describ)s(e)h(the)h(input)e(arra)m(y\(s\).)50 b(There)33
5409
 
b(are)g Fo(howmany)e Fu(input)g(arra)m(ys;)330 5121 y(the)26
5410
 
b(\014rst)f(one)h(is)f(p)s(oin)m(ted)g(to)h(b)m(y)g Fo(in)p
5411
 
Fu(,)g(the)g(second)g(one)g(is)f(p)s(oin)m(ted)g(to)h(b)m(y)g
5412
 
Fo(in)k(+)g(idist)p Fu(,)c(and)f(so)h(on,)330 5230 y(up)f(to)h
5413
 
Fo(in)k(+)g(\(howmany)e(-)i(1\))g(*)g(idist)p Fu(.)37
 
5444
3671 y(page)38 b(18.\))62 b(The)37 b(function)f Fp(fftw_one)f
 
5445
Fv(pro)m(vides)h(a)i(simpli\014ed)33 b(in)m(terface)38
 
5446
b(for)f(the)g(common)h(case)g(of)150 3781 y(single)29
 
5447
b(input)f(arra)m(y)j(of)g(stride)e(1.)150 4019 y Fh(Argumen)m(ts)225
 
5448
4187 y Ft(\017)60 b Fp(plan)35 b Fv(is)g(the)i(plan)e(created)i(b)m(y)f
 
5449
Fp(fftw_create_plan)c Fv(\(see)38 b(Section)e(3.2.1)i([Plan)d(Creation)
 
5450
h(for)330 4297 y(One-dimensional)27 b(T)-8 b(ransforms],)30
 
5451
b(page)h(18\).)225 4435 y Ft(\017)60 b Fp(howmany)30
 
5452
b Fv(is)h(the)h(n)m(um)m(b)s(er)e(of)i(transforms)f Fp(fftw)g
 
5453
Fv(will)e(compute.)46 b(It)32 b(is)f(faster)h(to)h(tell)e(FFTW)h(to)330
 
5454
4544 y(compute)f(man)m(y)f(transforms,)g(instead)g(of)g(simply)e
 
5455
(calling)h Fp(fftw)g Fv(man)m(y)i(times.)225 4682 y Ft(\017)60
 
5456
b Fp(in)p Fv(,)33 b Fp(istride)e Fv(and)i Fp(idist)e
 
5457
Fv(describ)s(e)h(the)h(input)e(arra)m(y\(s\).)50 b(There)33
 
5458
b(are)g Fp(howmany)e Fv(input)g(arra)m(ys;)330 4792 y(the)26
 
5459
b(\014rst)f(one)h(is)f(p)s(oin)m(ted)g(to)h(b)m(y)g Fp(in)p
 
5460
Fv(,)g(the)g(second)g(one)g(is)f(p)s(oin)m(ted)g(to)h(b)m(y)g
 
5461
Fp(in)k(+)g(idist)p Fv(,)c(and)f(so)h(on,)330 4902 y(up)f(to)h
 
5462
Fp(in)k(+)g(\(howmany)e(-)i(1\))g(*)g(idist)p Fv(.)37
5414
5463
b(Eac)m(h)27 b(input)c(arra)m(y)k(consists)e(of)g(complex)h(n)m(um)m(b)
5415
 
s(ers)e(\(see)330 5340 y(Section)35 b(3.1)i([Data)g(T)m(yp)s(es],)g
 
5464
s(ers)e(\(see)330 5011 y(Section)35 b(3.1)i([Data)g(T)m(yp)s(es],)g
5416
5465
(page)g(17\),)h(whic)m(h)c(are)i(not)g(necessarily)e(con)m(tiguous)i
5417
 
(in)e(memory)-8 b(.)p eop
 
5466
(in)e(memory)-8 b(.)330 5121 y(Sp)s(eci\014cally)g(,)39
 
5467
b Fp(in[0])f Fv(is)g(the)h(\014rst)g(elemen)m(t)g(of)g(the)h(\014rst)e
 
5468
(arra)m(y)-8 b(,)42 b Fp(in[istride])36 b Fv(is)j(the)g(second)330
 
5469
5230 y(elemen)m(t)f(of)f(the)g(\014rst)g(arra)m(y)-8
 
5470
b(,)40 b(and)c(so)i(on.)61 b(In)36 b(general,)j(the)f
 
5471
Fp(i)p Fv(-th)f(elemen)m(t)g(of)h(the)f Fp(j)p Fv(-th)g(input)330
 
5472
5340 y(arra)m(y)31 b(will)d(b)s(e)h(in)g(p)s(osition)g
 
5473
Fp(in[i)g(*)h(istride)e(+)j(j)f(*)g(idist])p Fv(.)p eop
 
5474
end
5418
5475
%%Page: 21 23
5419
 
21 22 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
5420
 
b(Reference)2354 b(21)330 299 y(Sp)s(eci\014cally)-8
5421
 
b(,)39 b Fo(in[0])f Fu(is)g(the)h(\014rst)g(elemen)m(t)g(of)g(the)h
5422
 
(\014rst)e(arra)m(y)-8 b(,)42 b Fo(in[istride])36 b Fu(is)j(the)g
5423
 
(second)330 408 y(elemen)m(t)f(of)f(the)g(\014rst)g(arra)m(y)-8
5424
 
b(,)40 b(and)c(so)i(on.)61 b(In)36 b(general,)j(the)f
5425
 
Fo(i)p Fu(-th)f(elemen)m(t)g(of)h(the)f Fo(j)p Fu(-th)g(input)330
5426
 
518 y(arra)m(y)31 b(will)d(b)s(e)h(in)g(p)s(osition)g
5427
 
Fo(in[i)g(*)h(istride)e(+)j(j)f(*)g(idist])p Fu(.)225
5428
 
652 y Fs(\017)60 b Fo(out)p Fu(,)33 b Fo(ostride)f Fu(and)g
5429
 
Fo(odist)g Fu(describ)s(e)g(the)h(output)g(arra)m(y\(s\).)50
5430
 
b(The)33 b(format)g(is)g(the)g(same)h(as)f(for)330 762
5431
 
y(the)e(input)d(arra)m(y)-8 b(.)379 895 y Fs(\000)60
5432
 
b Fq(In-plac)-5 b(e)46 b(tr)-5 b(ansforms)7 b Fu(:)73
5433
 
b(If)44 b(the)h Fo(plan)e Fu(sp)s(eci\014es)g(an)i(in-place)e
5434
 
(transform,)48 b Fo(ostride)43 b Fu(and)510 1005 y Fo(odist)33
5435
 
b Fu(are)h(alw)m(a)m(ys)h(ignored.)51 b(If)33 b Fo(out)g
5436
 
Fu(is)h Fo(NULL)p Fu(,)g Fo(out)f Fu(is)g(ignored,)h(to)s(o.)53
5437
 
b(Otherwise,)34 b Fo(out)f Fu(is)510 1115 y(in)m(terpreted)h(as)h(a)g
5438
 
(p)s(oin)m(ter)f(to)i(an)e(arra)m(y)i(of)f Fo(n)f Fu(complex)h(n)m(um)m
5439
 
(b)s(ers,)f(that)i(FFTW)f(will)d(use)510 1224 y(as)j(temp)s(orary)f
5440
 
(space)h(to)h(p)s(erform)d(the)i(in-place)e(computation.)54
5441
 
b Fo(out)34 b Fu(is)f(used)h(as)h(scratc)m(h)510 1334
5442
 
y(space)41 b(and)g(its)f(con)m(ten)m(ts)j(destro)m(y)m(ed.)73
5443
 
b(In)40 b(this)g(case,)k Fo(out)c Fu(m)m(ust)h(b)s(e)f(an)h(ordinary)e
5444
 
(arra)m(y)510 1443 y(whose)30 b(elemen)m(ts)h(are)g(con)m(tiguous)f(in)
5445
 
f(memory)i(\(no)f(striding\).)275 1602 y(The)45 b(function)f
5446
 
Fo(fftw_one)f Fu(transforms)i(a)h(single,)i(con)m(tiguous)e(input)d
5447
 
(arra)m(y)k(to)f(a)g(con)m(tiguous)150 1711 y(output)30
5448
 
b(arra)m(y)-8 b(.)42 b(By)30 b(de\014nition,)f(the)h(call)390
5449
 
1839 y Fo(fftw_one\(plan,)44 b(in,)j(out\))275 1973 y
5450
 
Fu(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 2101 y Fo(fftw\(plan,)45
5451
 
b(1,)i(in,)g(1,)g(1,)g(out,)g(1,)g(1\))150 2324 y Fi(3.2.4)63
5452
 
b(Destro)m(ying)41 b(a)g(One-dimensional)g(Plan)390 2510
5453
 
y Fo(#include)46 b(<fftw.h>)390 2718 y(void)h(fftw_destroy_plan\(fftw_)
5454
 
o(plan)41 b(plan\);)275 2852 y Fu(The)27 b(function)f
5455
 
Fo(fftw_destroy_plan)d Fu(frees)28 b(the)f(plan)g Fo(plan)f
5456
 
Fu(and)h(releases)h(all)f(the)h(memory)f(asso-)150 2961
5457
 
y(ciated)k(with)e(it.)40 b(After)31 b(destruction,)e(a)i(plan)e(is)h
5458
 
(no)g(longer)g(v)-5 b(alid.)150 3184 y Fi(3.2.5)63 b(What)40
5459
 
b(FFTW)h(Really)f(Computes)275 3376 y Fu(In)26 b(this)g(section,)i(w)m
5460
 
(e)g(de\014ne)e(precisely)g(what)h(FFTW)h(computes.)40
5461
 
b(Please)27 b(b)s(e)f(w)m(arned)h(that)h(di\013er-)150
5462
 
3485 y(en)m(t)j(authors)f(and)g(soft)m(w)m(are)i(pac)m(k)-5
 
5476
TeXDict begin 21 22 bop 150 -116 a Fv(Chapter)30 b(3:)41
 
5477
b(FFTW)31 b(Reference)2354 b(21)225 299 y Ft(\017)60
 
5478
b Fp(out)p Fv(,)33 b Fp(ostride)f Fv(and)g Fp(odist)g
 
5479
Fv(describ)s(e)g(the)h(output)g(arra)m(y\(s\).)50 b(The)33
 
5480
b(format)g(is)g(the)g(same)h(as)f(for)330 408 y(the)e(input)d(arra)m(y)
 
5481
-8 b(.)379 540 y Ft(\000)60 b Fr(In-plac)-5 b(e)46 b(tr)-5
 
5482
b(ansforms)7 b Fv(:)73 b(If)44 b(the)h Fp(plan)e Fv(sp)s(eci\014es)g
 
5483
(an)i(in-place)e(transform,)48 b Fp(ostride)43 b Fv(and)510
 
5484
649 y Fp(odist)33 b Fv(are)h(alw)m(a)m(ys)h(ignored.)51
 
5485
b(If)33 b Fp(out)g Fv(is)h Fp(NULL)p Fv(,)g Fp(out)f
 
5486
Fv(is)g(ignored,)h(to)s(o.)53 b(Otherwise,)34 b Fp(out)f
 
5487
Fv(is)510 759 y(in)m(terpreted)h(as)h(a)g(p)s(oin)m(ter)f(to)i(an)e
 
5488
(arra)m(y)i(of)f Fp(n)f Fv(complex)h(n)m(um)m(b)s(ers,)f(that)i(FFTW)f
 
5489
(will)d(use)510 868 y(as)j(temp)s(orary)f(space)h(to)h(p)s(erform)d
 
5490
(the)i(in-place)e(computation.)54 b Fp(out)34 b Fv(is)f(used)h(as)h
 
5491
(scratc)m(h)510 978 y(space)41 b(and)g(its)f(con)m(ten)m(ts)j(destro)m
 
5492
(y)m(ed.)73 b(In)40 b(this)g(case,)k Fp(out)c Fv(m)m(ust)h(b)s(e)f(an)h
 
5493
(ordinary)e(arra)m(y)510 1088 y(whose)30 b(elemen)m(ts)h(are)g(con)m
 
5494
(tiguous)f(in)f(memory)i(\(no)f(striding\).)275 1240
 
5495
y(The)45 b(function)f Fp(fftw_one)f Fv(transforms)i(a)h(single,)i(con)m
 
5496
(tiguous)e(input)d(arra)m(y)k(to)f(a)g(con)m(tiguous)150
 
5497
1350 y(output)30 b(arra)m(y)-8 b(.)42 b(By)30 b(de\014nition,)f(the)h
 
5498
(call)390 1475 y Fp(fftw_one\(plan,)44 b(in,)j(out\))275
 
5499
1607 y Fv(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 1732
 
5500
y Fp(fftw\(plan,)45 b(1,)i(in,)g(1,)g(0,)g(out,)g(1,)g(0\))150
 
5501
1946 y Fh(3.2.4)63 b(Destro)m(ying)41 b(a)g(One-dimensional)g(Plan)390
 
5502
2108 y Fp(#include)46 b(<fftw.h>)390 2316 y(void)h
 
5503
(fftw_destroy_plan\(fftw_)o(plan)41 b(plan\);)275 2447
 
5504
y Fv(The)27 b(function)f Fp(fftw_destroy_plan)d Fv(frees)28
 
5505
b(the)f(plan)g Fp(plan)f Fv(and)h(releases)h(all)f(the)h(memory)f
 
5506
(asso-)150 2557 y(ciated)k(with)e(it.)40 b(After)31 b(destruction,)e(a)
 
5507
i(plan)e(is)h(no)g(longer)g(v)-5 b(alid.)150 2771 y Fh(3.2.5)63
 
5508
b(What)40 b(FFTW)h(Really)f(Computes)275 2960 y Fv(In)26
 
5509
b(this)g(section,)i(w)m(e)g(de\014ne)e(precisely)g(what)h(FFTW)h
 
5510
(computes.)40 b(Please)27 b(b)s(e)f(w)m(arned)h(that)h(di\013er-)150
 
5511
3070 y(en)m(t)j(authors)f(and)g(soft)m(w)m(are)i(pac)m(k)-5
5463
5512
b(ages)32 b(migh)m(t)e(emplo)m(y)g(di\013eren)m(t)g(con)m(v)m(en)m
5464
 
(tions)h(than)g(FFTW)g(do)s(es.)275 3619 y(The)e(forw)m(ard)h
5465
 
(transform)g(of)g(a)h(complex)f(arra)m(y)h Fl(X)38 b
5466
 
Fu(of)30 b(size)h Fl(n)f Fu(computes)g(an)g(arra)m(y)h
5467
 
Fl(Y)20 b Fu(,)31 b(where)1475 3892 y Fl(Y)1528 3906
5468
 
y Fk(i)1581 3892 y Fu(=)1677 3786 y Fk(n)p Fj(\000)p
5469
 
Fn(1)1680 3811 y Fh(X)1682 3988 y Fk(j)s Fn(=0)1818 3892
5470
 
y Fl(X)1893 3906 y Fk(j)1928 3892 y Fl(e)1970 3854 y
5471
 
Fj(\000)p Fn(2)p Fk(\031)r(ij)2149 3809 y Fj(p)p 2205
5472
 
3809 85 3 v 2205 3854 a(\000)p Fn(1)p Fk(=n)2400 3892
5473
 
y Fl(:)275 4198 y Fu(The)e(bac)m(kw)m(ard)i(transform)f(computes)1501
5474
 
4471 y Fl(Y)1554 4485 y Fk(i)1607 4471 y Fu(=)1703 4365
5475
 
y Fk(n)p Fj(\000)p Fn(1)1706 4390 y Fh(X)1708 4567 y
5476
 
Fk(j)s Fn(=0)1844 4471 y Fl(X)1919 4485 y Fk(j)1954 4471
5477
 
y Fl(e)1996 4434 y Fn(2)p Fk(\031)r(ij)2123 4389 y Fj(p)p
5478
 
2179 4389 V 2179 4434 a(\000)p Fn(1)p Fk(=n)2374 4471
5479
 
y Fl(:)275 4877 y Fu(FFTW)h(computes)g(an)f(unnormalized)f(transform,)h
5480
 
(that)h(is,)f(the)h(equation)g Fl(I)7 b(F)13 b(F)g(T)g
5481
 
Fu(\()p Fl(F)g(F)g(T)g Fu(\()p Fl(X)7 b Fu(\)\))27 b(=)150
5482
 
4987 y Fl(nX)47 b Fu(holds.)70 b(In)40 b(other)g(w)m(ords,)j(applying)c
 
5513
(tions)h(than)g(FFTW)g(do)s(es.)275 3201 y(The)e(forw)m(ard)h
 
5514
(transform)g(of)g(a)h(complex)f(arra)m(y)h Fm(X)38 b
 
5515
Fv(of)30 b(size)h Fm(n)f Fv(computes)g(an)g(arra)m(y)h
 
5516
Fm(Y)20 b Fv(,)31 b(where)1475 3449 y Fm(Y)1528 3463
 
5517
y Fl(i)1581 3449 y Fv(=)1677 3344 y Fl(n)p Fk(\000)p
 
5518
Fo(1)1680 3369 y Fg(X)1682 3545 y Fl(j)s Fo(=0)1818 3449
 
5519
y Fm(X)1893 3463 y Fl(j)1928 3449 y Fm(e)1970 3412 y
 
5520
Fk(\000)p Fo(2)p Fl(\031)r(ij)2149 3367 y Fk(p)p 2205
 
5521
3367 85 3 v 2205 3412 a(\000)p Fo(1)p Fl(=n)2400 3449
 
5522
y Fm(:)275 3729 y Fv(The)e(bac)m(kw)m(ard)i(transform)f(computes)1501
 
5523
3977 y Fm(Y)1554 3991 y Fl(i)1607 3977 y Fv(=)1703 3872
 
5524
y Fl(n)p Fk(\000)p Fo(1)1706 3897 y Fg(X)1708 4073 y
 
5525
Fl(j)s Fo(=0)1844 3977 y Fm(X)1919 3991 y Fl(j)1954 3977
 
5526
y Fm(e)1996 3940 y Fo(2)p Fl(\031)r(ij)2123 3895 y Fk(p)p
 
5527
2179 3895 V 2179 3940 a(\000)p Fo(1)p Fl(=n)2374 3977
 
5528
y Fm(:)275 4332 y Fv(FFTW)h(computes)g(an)f(unnormalized)f(transform,)h
 
5529
(that)h(is,)f(the)h(equation)g Fm(I)7 b(F)13 b(F)g(T)g
 
5530
Fv(\()p Fm(F)g(F)g(T)g Fv(\()p Fm(X)7 b Fv(\)\))27 b(=)150
 
5531
4442 y Fm(nX)47 b Fv(holds.)70 b(In)40 b(other)g(w)m(ords,)j(applying)c
5483
5532
(the)h(forw)m(ard)g(and)g(then)g(the)h(bac)m(kw)m(ard)g(transform)f
5484
 
(will)150 5096 y(m)m(ultiply)28 b(the)i(input)f(b)m(y)h
5485
 
Fl(n)p Fu(.)275 5230 y(An)j Fo(FFTW_FORWARD)e Fu(transform)i(corresp)s
5486
 
(onds)f(to)j(a)f(sign)f(of)h Fs(\000)p Fu(1)g(in)e(the)i(exp)s(onen)m
5487
 
(t)g(of)g(the)g(DFT.)150 5340 y(Note)23 b(also)g(that)f(w)m(e)h(use)f
 
5533
(will)150 4551 y(m)m(ultiply)28 b(the)i(input)f(b)m(y)h
 
5534
Fm(n)p Fv(.)275 4682 y(An)j Fp(FFTW_FORWARD)e Fv(transform)i(corresp)s
 
5535
(onds)f(to)j(a)f(sign)f(of)h Ft(\000)p Fv(1)g(in)e(the)i(exp)s(onen)m
 
5536
(t)g(of)g(the)g(DFT.)150 4792 y(Note)23 b(also)g(that)f(w)m(e)h(use)f
5488
5537
(the)g(standard)g(\\in-order")f(output)h(ordering|the)f
5489
 
Fl(k)s Fu(-th)i(output)e(corresp)s(onds)p eop
5490
 
%%Page: 22 24
5491
 
22 23 bop 150 -116 a Fu(22)3232 b(FFTW)150 299 y(to)26
5492
 
b(the)g(frequency)f Fl(k)s(=n)h Fu(\(or)g Fl(k)s(=T)13
5493
 
b Fu(,)27 b(where)e Fl(T)38 b Fu(is)25 b(y)m(our)h(total)g(sampling)e
 
5538
Fm(k)s Fv(-th)i(output)e(corresp)s(onds)150 4902 y(to)26
 
5539
b(the)g(frequency)f Fm(k)s(=n)h Fv(\(or)g Fm(k)s(=T)13
 
5540
b Fv(,)27 b(where)e Fm(T)38 b Fv(is)25 b(y)m(our)h(total)g(sampling)e
5494
5541
(p)s(erio)s(d\).)37 b(F)-8 b(or)26 b(those)g(who)f(lik)m(e)g(to)150
5495
 
408 y(think)g(in)h(terms)h(of)f(p)s(ositiv)m(e)g(and)g(negativ)m(e)i
 
5542
5011 y(think)g(in)h(terms)h(of)f(p)s(ositiv)m(e)g(and)g(negativ)m(e)i
5496
5543
(frequencies,)f(this)f(means)h(that)g(the)g(p)s(ositiv)m(e)f
5497
 
(frequencies)150 518 y(are)e(stored)f(in)f(the)h(\014rst)g(half)f(of)i
 
5544
(frequencies)150 5121 y(are)e(stored)f(in)f(the)h(\014rst)g(half)f(of)i
5498
5545
(the)f(output)g(and)f(the)i(negativ)m(e)g(frequencies)f(are)g(stored)h
5499
 
(in)e(bac)m(kw)m(ards)150 628 y(order)31 b(in)f(the)i(second)g(half)e
5500
 
(of)i(the)g(output.)44 b(\(The)32 b(frequency)f Fs(\000)p
5501
 
Fl(k)s(=n)g Fu(is)g(the)h(same)g(as)g(the)f(frequency)150
5502
 
737 y(\()p Fl(n)20 b Fs(\000)g Fl(k)s Fu(\))p Fl(=n)p
5503
 
Fu(.\))150 1042 y Ft(3.3)68 b(Multi-dimensional)46 b(T)-11
5504
 
b(ransforms)45 b(Reference)275 1253 y Fu(The)26 b(m)m(ulti-dimensional)
5505
 
d(complex)j(routines)g(are)h(generally)f(pre\014xed)g(with)f
5506
 
Fo(fftwnd_)p Fu(.)38 b(Programs)150 1363 y(using)d(FFTWND)i(should)d(b)
5507
 
s(e)h(link)m(ed)g(with)g Fo(-lfftw)28 b(-lm)35 b Fu(on)h(Unix)f
5508
 
(systems,)j(or)e(with)f(the)h(FFTW)150 1473 y(and)30
5509
 
b(standard)f(math)i(libraries)c(in)i(general.)150 1735
5510
 
y Fi(3.3.1)63 b(Plan)40 b(Creation)h(for)g(Multi-dimensional)h(T)-10
5511
 
b(ransforms)390 1940 y Fo(#include)46 b(<fftw.h>)390
5512
 
2148 y(fftwnd_plan)f(fftwnd_create_plan\(int)c(rank,)47
5513
 
b(const)f(int)h(*n,)1870 2252 y(fftw_direction)c(dir,)k(int)g(flags\);)
5514
 
390 2459 y(fftwnd_plan)e(fftw2d_create_plan\(int)c(nx,)47
5515
 
b(int)g(ny,)1870 2563 y(fftw_direction)c(dir,)k(int)g(flags\);)390
5516
 
2771 y(fftwnd_plan)e(fftw3d_create_plan\(int)c(nx,)47
5517
 
b(int)g(ny,)g(int)g(nz,)1870 2874 y(fftw_direction)c(dir,)k(int)g
5518
 
(flags\);)390 3082 y(fftwnd_plan)e(fftwnd_create_plan_spec)o(ific)o
5519
 
(\(int)c(rank,)46 b(const)h(int)g(*n,)2299 3186 y(fftw_direction)d
5520
 
(dir,)2299 3289 y(int)j(flags,)2299 3393 y(fftw_complex)e(*in,)h(int)h
5521
 
(istride,)2299 3497 y(fftw_complex)e(*out,)h(int)h(ostride\);)390
5522
 
3705 y(fftwnd_plan)e(fftw2d_create_plan_spec)o(ific)o(\(int)c(nx,)47
5523
 
b(int)g(ny,)2299 3808 y(fftw_direction)d(dir,)2299 3912
5524
 
y(int)j(flags,)2299 4016 y(fftw_complex)e(*in,)h(int)h(istride,)2299
5525
 
4120 y(fftw_complex)e(*out,)h(int)h(ostride\);)390 4327
 
5546
(in)e(bac)m(kw)m(ards)150 5230 y(order)31 b(in)f(the)i(second)g(half)e
 
5547
(of)i(the)g(output.)44 b(\(The)32 b(frequency)f Ft(\000)p
 
5548
Fm(k)s(=n)g Fv(is)g(the)h(same)g(as)g(the)f(frequency)150
 
5549
5340 y(\()p Fm(n)20 b Ft(\000)g Fm(k)s Fv(\))p Fm(=n)p
 
5550
Fv(.\))p eop end
 
5551
%%Page: 22 24
 
5552
TeXDict begin 22 23 bop 150 -116 a Fv(22)3232 b(FFTW)150
 
5553
299 y Fu(3.3)68 b(Multi-dimensional)46 b(T)-11 b(ransforms)45
 
5554
b(Reference)275 499 y Fv(The)26 b(m)m(ulti-dimensional)d(complex)j
 
5555
(routines)g(are)h(generally)f(pre\014xed)g(with)f Fp(fftwnd_)p
 
5556
Fv(.)38 b(Programs)150 609 y(using)d(FFTWND)i(should)d(b)s(e)h(link)m
 
5557
(ed)g(with)g Fp(-lfftw)28 b(-lm)35 b Fv(on)h(Unix)f(systems,)j(or)e
 
5558
(with)f(the)h(FFTW)150 718 y(and)30 b(standard)f(math)i(libraries)c(in)
 
5559
i(general.)150 958 y Fh(3.3.1)63 b(Plan)40 b(Creation)h(for)g
 
5560
(Multi-dimensional)h(T)-10 b(ransforms)390 1120 y Fp(#include)46
 
5561
b(<fftw.h>)390 1327 y(fftwnd_plan)f(fftwnd_create_plan\(int)c(rank,)47
 
5562
b(const)f(int)h(*n,)1870 1431 y(fftw_direction)c(dir,)k(int)g(flags\);)
 
5563
390 1638 y(fftwnd_plan)e(fftw2d_create_plan\(int)c(nx,)47
 
5564
b(int)g(ny,)1870 1742 y(fftw_direction)c(dir,)k(int)g(flags\);)390
 
5565
1950 y(fftwnd_plan)e(fftw3d_create_plan\(int)c(nx,)47
 
5566
b(int)g(ny,)g(int)g(nz,)1870 2054 y(fftw_direction)c(dir,)k(int)g
 
5567
(flags\);)390 2261 y(fftwnd_plan)e(fftwnd_create_plan_spec)o(ific)o
 
5568
(\(int)c(rank,)46 b(const)h(int)g(*n,)2299 2365 y(fftw_direction)d
 
5569
(dir,)2299 2469 y(int)j(flags,)2299 2572 y(fftw_complex)e(*in,)h(int)h
 
5570
(istride,)2299 2676 y(fftw_complex)e(*out,)h(int)h(ostride\);)390
 
5571
2884 y(fftwnd_plan)e(fftw2d_create_plan_spec)o(ific)o(\(int)c(nx,)47
 
5572
b(int)g(ny,)2299 2988 y(fftw_direction)d(dir,)2299 3091
 
5573
y(int)j(flags,)2299 3195 y(fftw_complex)e(*in,)h(int)h(istride,)2299
 
5574
3299 y(fftw_complex)e(*out,)h(int)h(ostride\);)390 3506
5526
5575
y(fftwnd_plan)e(fftw3d_create_plan_spec)o(ific)o(\(int)c(nx,)47
5527
 
b(int)g(ny,)g(int)g(nz,)2299 4431 y(fftw_direction)d(dir,)j(int)g
5528
 
(flags,)2299 4535 y(fftw_complex)e(*in,)h(int)h(istride,)2299
5529
 
4639 y(fftw_complex)e(*out,)h(int)h(ostride\);)275 4792
5530
 
y Fu(The)29 b(function)h Fo(fftwnd_create_plan)25 b Fu(creates)32
 
5576
b(int)g(ny,)g(int)g(nz,)2299 3610 y(fftw_direction)d(dir,)j(int)g
 
5577
(flags,)2299 3714 y(fftw_complex)e(*in,)h(int)h(istride,)2299
 
5578
3818 y(fftw_complex)e(*out,)h(int)h(ostride\);)275 3960
 
5579
y Fv(The)29 b(function)h Fp(fftwnd_create_plan)25 b Fv(creates)32
5531
5580
b(a)f(plan,)e(whic)m(h)g(is)h(a)g(data)h(structure)f(con)m(taining)150
5532
 
4902 y(all)41 b(the)h(information)e(that)j Fo(fftwnd)d
5533
 
Fu(needs)h(in)g(order)g(to)i(compute)f(a)g(m)m(ulti-dimensional)c(F)-8
5534
 
b(ourier)150 5011 y(transform.)42 b(Y)-8 b(ou)32 b(can)f(create)i(as)e
 
5581
4069 y(all)41 b(the)h(information)e(that)j Fp(fftwnd)d
 
5582
Fv(needs)h(in)g(order)g(to)i(compute)f(a)g(m)m(ulti-dimensional)c(F)-8
 
5583
b(ourier)150 4179 y(transform.)42 b(Y)-8 b(ou)32 b(can)f(create)i(as)e
5535
5584
(man)m(y)g(plans)f(as)h(y)m(ou)g(need,)h(but)e(only)g(one)h(plan)f(for)
5536
 
h(a)g(giv)m(en)g(arra)m(y)150 5121 y(size)37 b(is)f(required)f(\(a)j
 
5585
h(a)g(giv)m(en)g(arra)m(y)150 4289 y(size)37 b(is)f(required)f(\(a)j
5537
5586
(plan)e(can)h(b)s(e)g(reused)f(man)m(y)h(times\).)61
5538
 
b(The)36 b(functions)g Fo(fftw2d_create_plan)150 5230
5539
 
y Fu(and)e Fo(fftw3d_create_plan)29 b Fu(are)35 b(optional,)g
5540
 
(alternativ)m(e)g(in)m(terfaces)g(to)h Fo(fftwnd_create_plan)29
5541
 
b Fu(for)150 5340 y(t)m(w)m(o)j(and)d(three)i(dimensions,)d(resp)s
5542
 
(ectiv)m(ely)-8 b(.)p eop
5543
 
%%Page: 23 25
5544
 
23 24 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
5545
 
b(Reference)2354 b(23)275 299 y Fo(fftwnd_create_plan)21
5546
 
b Fu(returns)26 b(a)h(v)-5 b(alid)25 b(plan,)i(or)g Fo(NULL)f
5547
 
Fu(if,)g(for)h(some)g(reason,)h(the)f(plan)f(can't)i(b)s(e)150
5548
 
408 y(created.)46 b(This)30 b(can)i(happ)s(en)e(if)h(memory)h(runs)e
 
5587
b(The)36 b(functions)g Fp(fftw2d_create_plan)150 4398
 
5588
y Fv(and)e Fp(fftw3d_create_plan)29 b Fv(are)35 b(optional,)g
 
5589
(alternativ)m(e)g(in)m(terfaces)g(to)h Fp(fftwnd_create_plan)29
 
5590
b Fv(for)150 4508 y(t)m(w)m(o)j(and)d(three)i(dimensions,)d(resp)s
 
5591
(ectiv)m(ely)-8 b(.)275 4650 y Fp(fftwnd_create_plan)21
 
5592
b Fv(returns)26 b(a)h(v)-5 b(alid)25 b(plan,)i(or)g Fp(NULL)f
 
5593
Fv(if,)g(for)h(some)g(reason,)h(the)f(plan)f(can't)i(b)s(e)150
 
5594
4760 y(created.)46 b(This)30 b(can)i(happ)s(en)e(if)h(memory)h(runs)e
5549
5595
(out)i(or)g(if)f(the)h(argumen)m(ts)g(are)g(in)m(v)-5
5550
 
b(alid)29 b(in)i(some)h(w)m(a)m(y)150 518 y(\(e.g.)42
5551
 
b(if)29 b Fo(rank)h(<)g Fu(0\).)275 654 y(The)22 b Fo
5552
 
(create_plan_specific)17 b Fu(v)-5 b(arian)m(ts)22 b(tak)m(e)i(as)f
 
5596
b(alid)29 b(in)i(some)h(w)m(a)m(y)150 4869 y(\(e.g.)42
 
5597
b(if)29 b Fp(rank)h(<)g Fv(0\).)275 5011 y(The)22 b Fp
 
5598
(create_plan_specific)17 b Fv(v)-5 b(arian)m(ts)22 b(tak)m(e)i(as)f
5553
5599
(additional)e(argumen)m(ts)h(sp)s(eci\014c)g(input/output)150
5554
 
763 y(arra)m(ys)k(and)f(their)g(strides.)38 b(F)-8 b(or)26
 
5600
5121 y(arra)m(ys)k(and)f(their)g(strides.)38 b(F)-8 b(or)26
5555
5601
b(the)g(last)g(four)f(argumen)m(ts,)i(y)m(ou)f(should)e(pass)h(the)h
5556
 
(arra)m(ys)g(and)f(strides)150 873 y(that)37 b(y)m(ou)g(will)c(ev)m(en)
5557
 
m(tually)k(b)s(e)f(passing)f(to)i Fo(fftwnd)p Fu(.)57
 
5602
(arra)m(ys)g(and)f(strides)150 5230 y(that)37 b(y)m(ou)g(will)c(ev)m
 
5603
(en)m(tually)k(b)s(e)f(passing)f(to)i Fp(fftwnd)p Fv(.)57
5558
5604
b(The)36 b(resulting)f(plans)f(will)g(b)s(e)i(optimized)f(for)150
5559
 
982 y(those)j(arra)m(ys)g(and)g(strides,)g(although)g(they)f(ma)m(y)i
 
5605
5340 y(those)j(arra)m(ys)g(and)g(strides,)g(although)g(they)f(ma)m(y)i
5560
5606
(b)s(e)e(used)g(on)h(other)g(arra)m(ys)g(as)g(w)m(ell.)62
5561
 
b(Note:)57 b(the)150 1092 y(con)m(ten)m(ts)32 b(of)e(the)h(in)d(and)i
5562
 
(out)g(arra)m(ys)h(are)f Fq(destr)-5 b(oye)g(d)42 b Fu(b)m(y)30
5563
 
b(the)h(sp)s(eci\014c)e(planner)f(\(the)j(initial)c(con)m(ten)m(ts)150
5564
 
1202 y(are)k(ignored,)f(so)h(the)g(arra)m(ys)h(need)e(not)h(ha)m(v)m(e)
5565
 
h(b)s(een)e(initialized\).)39 b(See)31 b(Section)g(3.2.2)i([Discussion)
5566
 
c(on)150 1311 y(Sp)s(eci\014c)g(Plans],)h(page)h(20,)g(for)f(a)h
5567
 
(discussion)d(on)i(sp)s(eci\014c)f(plans.)150 1537 y
5568
 
Fi(Argumen)m(ts)225 1731 y Fs(\017)60 b Fo(rank)27 b
5569
 
Fu(is)g(the)h(dimensionalit)m(y)d(of)j(the)g(arra)m(ys)g(to)g(b)s(e)f
5570
 
(transformed.)40 b(It)27 b(can)i(b)s(e)e(an)m(y)h(non-negativ)m(e)330
5571
 
1841 y(in)m(teger.)225 1976 y Fs(\017)60 b Fo(n)38 b
5572
 
Fu(is)f(a)h(p)s(oin)m(ter)f(to)i(an)f(arra)m(y)h(of)f
5573
 
Fo(rank)f Fu(in)m(tegers,)j(giving)d(the)i(size)f(of)g(eac)m(h)h
5574
 
(dimension)c(of)k(the)330 2085 y(arra)m(ys)h(to)h(b)s(e)f(transformed.)
5575
 
69 b(These)40 b(sizes,)i(whic)m(h)d(m)m(ust)h(b)s(e)f(p)s(ositiv)m(e)g
5576
 
(in)m(tegers,)k(corresp)s(ond)330 2195 y(to)37 b(the)f(dimensions)d(of)
5577
 
j(ro)m(w-ma)5 b(jor)36 b(arra)m(ys|i.e.)58 b Fo(n[0])35
5578
 
b Fu(is)g(the)h(size)g(of)g(the)g(dimension)d(whose)330
5579
 
2304 y(indices)21 b(v)-5 b(ary)23 b(most)g(slo)m(wly)-8
 
5607
b(Note:)57 b(the)p eop end
 
5608
%%Page: 23 25
 
5609
TeXDict begin 23 24 bop 150 -116 a Fv(Chapter)30 b(3:)41
 
5610
b(FFTW)31 b(Reference)2354 b(23)150 299 y(con)m(ten)m(ts)32
 
5611
b(of)e(the)h(in)d(and)i(out)g(arra)m(ys)h(are)f Fr(destr)-5
 
5612
b(oye)g(d)42 b Fv(b)m(y)30 b(the)h(sp)s(eci\014c)e(planner)f(\(the)j
 
5613
(initial)c(con)m(ten)m(ts)150 408 y(are)k(ignored,)f(so)h(the)g(arra)m
 
5614
(ys)h(need)e(not)h(ha)m(v)m(e)h(b)s(een)e(initialized\).)39
 
5615
b(See)31 b(Section)g(3.2.2)i([Discussion)c(on)150 518
 
5616
y(Sp)s(eci\014c)g(Plans],)h(page)h(20,)g(for)f(a)h(discussion)d(on)i
 
5617
(sp)s(eci\014c)f(plans.)150 736 y Fh(Argumen)m(ts)225
 
5618
903 y Ft(\017)60 b Fp(rank)27 b Fv(is)g(the)h(dimensionalit)m(y)d(of)j
 
5619
(the)g(arra)m(ys)g(to)g(b)s(e)f(transformed.)40 b(It)27
 
5620
b(can)i(b)s(e)e(an)m(y)h(non-negativ)m(e)330 1013 y(in)m(teger.)225
 
5621
1145 y Ft(\017)60 b Fp(n)38 b Fv(is)f(a)h(p)s(oin)m(ter)f(to)i(an)f
 
5622
(arra)m(y)h(of)f Fp(rank)f Fv(in)m(tegers,)j(giving)d(the)i(size)f(of)g
 
5623
(eac)m(h)h(dimension)c(of)k(the)330 1255 y(arra)m(ys)h(to)h(b)s(e)f
 
5624
(transformed.)69 b(These)40 b(sizes,)i(whic)m(h)d(m)m(ust)h(b)s(e)f(p)s
 
5625
(ositiv)m(e)g(in)m(tegers,)k(corresp)s(ond)330 1365 y(to)37
 
5626
b(the)f(dimensions)d(of)j(ro)m(w-ma)5 b(jor)36 b(arra)m(ys|i.e.)58
 
5627
b Fp(n[0])35 b Fv(is)g(the)h(size)g(of)g(the)g(dimension)d(whose)330
 
5628
1474 y(indices)21 b(v)-5 b(ary)23 b(most)g(slo)m(wly)-8
5580
5629
b(,)24 b(and)f(so)g(on.)38 b(\(See)24 b(Section)e(2.5)j
5581
5630
([Multi-dimensional)19 b(Arra)m(y)k(F)-8 b(ormat],)330
5582
 
2414 y(page)29 b(11,)g(for)f(more)g(information)e(on)i(ro)m(w-ma)5
 
5631
1584 y(page)29 b(11,)g(for)f(more)g(information)e(on)i(ro)m(w-ma)5
5583
5632
b(jor)28 b(storage.\))42 b(See)28 b(Section)g(3.2.1)h([Plan)e(Creation)
5584
 
330 2524 y(for)44 b(One-dimensional)e(T)-8 b(ransforms],)48
 
5633
330 1693 y(for)44 b(One-dimensional)e(T)-8 b(ransforms],)48
5585
5634
b(page)d(18,)50 b(for)44 b(more)h(information)e(regarding)h(optimal)330
5586
 
2633 y(arra)m(y)31 b(sizes.)225 2768 y Fs(\017)60 b Fo(nx)35
5587
 
b Fu(and)f Fo(ny)h Fu(in)f Fo(fftw2d_create_plan)c Fu(are)36
 
5635
1803 y(arra)m(y)31 b(sizes.)225 1935 y Ft(\017)60 b Fp(nx)35
 
5636
b Fv(and)f Fp(ny)h Fv(in)f Fp(fftw2d_create_plan)c Fv(are)36
5588
5637
b(p)s(ositiv)m(e)e(in)m(tegers)i(sp)s(ecifying)d(the)i(dimensions)e(of)
5589
 
330 2878 y(the)h(rank)f(2)h(arra)m(y)g(to)h(b)s(e)e(transformed.)50
 
5638
330 2045 y(the)h(rank)f(2)h(arra)m(y)g(to)h(b)s(e)e(transformed.)50
5590
5639
b(i.e.)h(they)34 b(sp)s(ecify)e(that)i(the)g(transform)f(will)e(op)s
5591
 
(erate)330 2987 y(on)k Fo(nx)30 b(x)g(ny)35 b Fu(arra)m(ys)g(in)f(ro)m
5592
 
(w-ma)5 b(jor)36 b(order,)g(where)f Fo(nx)g Fu(is)f(the)h(n)m(um)m(b)s
5593
 
(er)f(of)i(ro)m(ws)f(and)g Fo(ny)f Fu(is)h(the)330 3097
5594
 
y(n)m(um)m(b)s(er)29 b(of)i(columns.)225 3232 y Fs(\017)60
5595
 
b Fo(nx)p Fu(,)31 b Fo(ny)f Fu(and)g Fo(nz)h Fu(in)e
5596
 
Fo(fftw3d_create_plan)d Fu(are)32 b(p)s(ositiv)m(e)e(in)m(tegers)h(sp)s
5597
 
(ecifying)e(the)i(dimensions)330 3342 y(of)c(the)h(rank)e(3)i(arra)m(y)
 
5640
(erate)330 2154 y(on)k Fp(nx)30 b(x)g(ny)35 b Fv(arra)m(ys)g(in)f(ro)m
 
5641
(w-ma)5 b(jor)36 b(order,)g(where)f Fp(nx)g Fv(is)f(the)h(n)m(um)m(b)s
 
5642
(er)f(of)i(ro)m(ws)f(and)g Fp(ny)f Fv(is)h(the)330 2264
 
5643
y(n)m(um)m(b)s(er)29 b(of)i(columns.)225 2396 y Ft(\017)60
 
5644
b Fp(nx)p Fv(,)31 b Fp(ny)f Fv(and)g Fp(nz)h Fv(in)e
 
5645
Fp(fftw3d_create_plan)d Fv(are)32 b(p)s(ositiv)m(e)e(in)m(tegers)h(sp)s
 
5646
(ecifying)e(the)i(dimensions)330 2506 y(of)c(the)h(rank)e(3)i(arra)m(y)
5598
5647
g(to)g(b)s(e)e(transformed.)39 b(i.e.)h(they)27 b(sp)s(ecify)f(that)i
5599
 
(the)f(transform)g(will)d(op)s(erate)330 3451 y(on)30
5600
 
b Fo(nx)g(x)g(ny)g(x)g(nz)g Fu(arra)m(ys)g(in)f(ro)m(w-ma)5
5601
 
b(jor)31 b(order.)225 3586 y Fs(\017)60 b Fo(dir)34 b
5602
 
Fu(is)g(the)h(sign)f(of)h(the)g(exp)s(onen)m(t)f(in)g(the)h(form)m(ula)
 
5648
(the)f(transform)g(will)d(op)s(erate)330 2616 y(on)30
 
5649
b Fp(nx)g(x)g(ny)g(x)g(nz)g Fv(arra)m(ys)g(in)f(ro)m(w-ma)5
 
5650
b(jor)31 b(order.)225 2748 y Ft(\017)60 b Fp(dir)34 b
 
5651
Fv(is)g(the)h(sign)f(of)h(the)g(exp)s(onen)m(t)f(in)g(the)h(form)m(ula)
5603
5652
f(that)h(de\014nes)f(the)h(F)-8 b(ourier)34 b(transform.)54
5604
 
b(It)330 3696 y(can)31 b(b)s(e)f Fs(\000)p Fu(1)h(or)g(+)o(1.)43
5605
 
b(The)30 b(aliases)g Fo(FFTW_FORWARD)d Fu(and)j Fo(FFTW_BACKWARD)e
5606
 
Fu(are)j(pro)m(vided,)e(where)330 3805 y Fo(FFTW_FORWARD)e
5607
 
Fu(stands)j(for)g Fs(\000)p Fu(1.)225 3940 y Fs(\017)60
5608
 
b Fo(flags)29 b Fu(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p
5609
 
Fo(|)p Fu('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m(wing:)379
5610
 
4075 y Fs(\000)60 b Fo(FFTW_MEASURE)p Fu(:)33 b(this)19
 
5653
b(It)330 2857 y(can)31 b(b)s(e)f Ft(\000)p Fv(1)h(or)g(+)o(1.)43
 
5654
b(The)30 b(aliases)g Fp(FFTW_FORWARD)d Fv(and)j Fp(FFTW_BACKWARD)e
 
5655
Fv(are)j(pro)m(vided,)e(where)330 2967 y Fp(FFTW_FORWARD)e
 
5656
Fv(stands)j(for)g Ft(\000)p Fv(1.)225 3099 y Ft(\017)60
 
5657
b Fp(flags)29 b Fv(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p
 
5658
Fp(|)p Fv('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m(wing:)379
 
5659
3232 y Ft(\000)60 b Fp(FFTW_MEASURE)p Fv(:)33 b(this)19
5611
5660
b(\015ag)j(tells)e(FFTW)h(to)h(\014nd)d(the)i(optimal)f(plan)g(b)m(y)g
5612
 
(actually)h Fq(c)-5 b(omputing)510 4185 y Fu(sev)m(eral)31
 
5661
(actually)h Fr(c)-5 b(omputing)510 3341 y Fv(sev)m(eral)31
5613
5662
b(FFTs)f(and)g(measuring)f(their)h(execution)g(time.)379
5614
 
4320 y Fs(\000)60 b Fo(FFTW_ESTIMATE)p Fu(:)34 b(do)25
 
5663
3474 y Ft(\000)60 b Fp(FFTW_ESTIMATE)p Fv(:)34 b(do)25
5615
5664
b(not)g(run)f(an)m(y)h(FFT)h(and)e(pro)m(vide)g(a)h(\\reasonable")h
5616
 
(plan)e(\(for)h(a)g(RISC)510 4430 y(pro)s(cessor)37 b(with)g(man)m(y)h
5617
 
(registers\).)62 b(If)38 b(neither)e Fo(FFTW_ESTIMATE)e
5618
 
Fu(nor)k Fo(FFTW_MEASURE)c Fu(is)510 4539 y(pro)m(vided,)29
5619
 
b(the)i(default)e(is)h Fo(FFTW_ESTIMATE)p Fu(.)379 4674
5620
 
y Fs(\000)60 b Fo(FFTW_OUT_OF_PLACE)p Fu(:)41 b(pro)s(duce)32
 
5665
(plan)e(\(for)h(a)g(RISC)510 3583 y(pro)s(cessor)37 b(with)g(man)m(y)h
 
5666
(registers\).)62 b(If)38 b(neither)e Fp(FFTW_ESTIMATE)e
 
5667
Fv(nor)k Fp(FFTW_MEASURE)c Fv(is)510 3693 y(pro)m(vided,)29
 
5668
b(the)i(default)e(is)h Fp(FFTW_ESTIMATE)p Fv(.)379 3825
 
5669
y Ft(\000)60 b Fp(FFTW_OUT_OF_PLACE)p Fv(:)41 b(pro)s(duce)32
5621
5670
b(a)i(plan)e(assuming)f(that)j(the)f(input)e(and)i(output)g(arra)m(ys)
5622
 
510 4784 y(will)28 b(b)s(e)h(distinct)g(\(this)h(is)f(the)i(default\).)
5623
 
379 4919 y Fs(\000)60 b Fo(FFTW_IN_PLACE)p Fu(:)54 b(pro)s(duce)37
 
5671
510 3935 y(will)28 b(b)s(e)h(distinct)g(\(this)h(is)f(the)i(default\).)
 
5672
379 4067 y Ft(\000)60 b Fp(FFTW_IN_PLACE)p Fv(:)54 b(pro)s(duce)37
5624
5673
b(a)i(plan)e(assuming)h(that)h(y)m(ou)g(w)m(an)m(t)g(to)h(p)s(erform)d
5625
 
(the)i(trans-)510 5028 y(form)30 b(in-place.)40 b(\(Unlik)m(e)30
 
5674
(the)i(trans-)510 4177 y(form)30 b(in-place.)40 b(\(Unlik)m(e)30
5626
5675
b(the)h(one-dimensional)d(transform,)j(this)e(\\really")3176
5627
 
4995 y Fn(2)3244 5028 y Fu(p)s(erforms)g(the)p 150 5131
5628
 
1200 4 v 192 5197 a Fn(2)275 5230 y Fo(fftwnd)e Fu(actually)i(ma)m(y)h
5629
 
(use)f(some)h(temp)s(orary)e(storage)j(\(hidden)c(in)h(the)i(plan\),)f
5630
 
(but)f(this)g(storage)275 5340 y(space)40 b(is)e(only)h(the)h(size)f
5631
 
(of)h(the)g(largest)g(dimension)d(of)j(the)g(arra)m(y)-8
5632
 
b(,)43 b(rather)c(than)h(b)s(eing)e(as)i(big)p eop
 
5676
4144 y Fo(2)3244 4177 y Fv(p)s(erforms)g(the)510 4286
 
5677
y(transform)36 b(in-place.\))58 b(Note)37 b(that,)i(if)c(y)m(ou)i(w)m
 
5678
(an)m(t)g(to)g(p)s(erform)e(in-place)g(transforms,)j(y)m(ou)510
 
5679
4396 y Fr(must)h Fv(use)31 b(a)f(plan)f(created)j(with)d(this)g
 
5680
(option.)510 4528 y(The)h(default)f(mo)s(de)h(of)h(op)s(eration)f(is)f
 
5681
Fp(FFTW_OUT_OF_PLACE)p Fv(.)379 4661 y Ft(\000)60 b Fp(FFTW_USE_WISDOM)
 
5682
p Fv(:)h(use)42 b(an)m(y)h Fp(wisdom)e Fv(that)i(is)f(a)m(v)-5
 
5683
b(ailable)41 b(to)j(help)d(in)g(the)i(creation)g(of)510
 
5684
4770 y(the)34 b(plan.)50 b(\(See)35 b(Section)e(2.6)i([W)-8
 
5685
b(ords)35 b(of)f(Wisdom],)g(page)h(13.\))52 b(This)32
 
5686
b(can)i(greatly)h(sp)s(eed)510 4880 y(the)g(creation)h(of)f(plans,)g
 
5687
(esp)s(ecially)e(with)h(the)h Fp(FFTW_MEASURE)d Fv(option.)55
 
5688
b Fp(FFTW_ESTIMATE)p 150 4967 1200 4 v 199 5034 a Fo(2)275
 
5689
5066 y Fi(fftwnd)32 b Fj(actually)f(ma)n(y)f(use)g(some)h(temp)r(orary)
 
5690
f(storage)i(\(hidden)e(in)h(the)f(plan\),)i(but)e(this)h(storage)h
 
5691
(space)g(is)f(only)275 5157 y(the)26 b(size)j(of)f(the)f(largest)h
 
5692
(dimension)f(of)h(the)f(arra)n(y)-6 b(,)28 b(rather)f(than)g(b)r(eing)g
 
5693
(as)h(big)g(as)g(the)f(en)n(tire)g(arra)n(y)-6 b(.)39
 
5694
b(\(Unless)28 b(y)n(ou)275 5249 y(use)k Fi(fftwnd)i Fj(to)f(p)r(erform)
 
5695
f(one-dimensional)h(transforms,)i(in)d(whic)n(h)h(case)g(the)f(temp)r
 
5696
(orary)g(storage)i(required)e(for)275 5340 y(in-place)25
 
5697
b(transforms)h Ff(is)32 b Fj(as)26 b(big)g(as)h(the)e(en)n(tire)h(arra)
 
5698
n(y)-6 b(.\))p eop end
5633
5699
%%Page: 24 26
5634
 
24 25 bop 150 -116 a Fu(24)3232 b(FFTW)510 299 y(transform)36
5635
 
b(in-place.\))58 b(Note)37 b(that,)i(if)c(y)m(ou)i(w)m(an)m(t)g(to)g(p)
5636
 
s(erform)e(in-place)g(transforms,)j(y)m(ou)510 408 y
5637
 
Fq(must)h Fu(use)31 b(a)f(plan)f(created)j(with)d(this)g(option.)510
5638
 
546 y(The)h(default)f(mo)s(de)h(of)h(op)s(eration)f(is)f
5639
 
Fo(FFTW_OUT_OF_PLACE)p Fu(.)379 684 y Fs(\000)60 b Fo(FFTW_USE_WISDOM)p
5640
 
Fu(:)h(use)42 b(an)m(y)h Fo(wisdom)e Fu(that)i(is)f(a)m(v)-5
5641
 
b(ailable)41 b(to)j(help)d(in)g(the)i(creation)g(of)510
5642
 
793 y(the)34 b(plan.)50 b(\(See)35 b(Section)e(2.6)i([W)-8
5643
 
b(ords)35 b(of)f(Wisdom],)g(page)h(13.\))52 b(This)32
5644
 
b(can)i(greatly)h(sp)s(eed)510 903 y(the)g(creation)h(of)f(plans,)g
5645
 
(esp)s(ecially)e(with)h(the)h Fo(FFTW_MEASURE)d Fu(option.)55
5646
 
b Fo(FFTW_ESTIMATE)510 1012 y Fu(plans)33 b(can)i(also)f(tak)m(e)i(adv)
5647
 
-5 b(an)m(tage)36 b(of)f Fo(wisdom)e Fu(to)i(pro)s(duce)e(a)i(more)f
5648
 
(optimal)g(plan)f(\(based)510 1122 y(on)42 b(past)g(measuremen)m(ts\))g
5649
 
(than)f(the)h(estimation)g(heuristic)e(w)m(ould)g(normally)g(generate.)
5650
 
510 1232 y(When)30 b(the)h Fo(FFTW_MEASURE)c Fu(option)j(is)g(used,)g
5651
 
(new)g Fo(wisdom)f Fu(will)f(also)j(b)s(e)f(generated)h(if)f(the)510
5652
 
1341 y(curren)m(t)42 b(transform)g(size)g(is)g(not)g(completely)g
5653
 
(understo)s(o)s(d)f(b)m(y)h(existing)g Fo(wisdom)p Fu(.)75
5654
 
b(Note)510 1451 y(that)37 b(the)g(same)g Fo(wisdom)e
5655
 
Fu(is)h(shared)g(b)s(et)m(w)m(een)h(one-dimensional)e(and)h(m)m
5656
 
(ulti-dimensional)510 1560 y(transforms.)225 1698 y Fs(\017)60
5657
 
b Fo(in)p Fu(,)34 b Fo(out)p Fu(,)g Fo(istride)p Fu(,)f
5658
 
Fo(ostride)f Fu(\(only)h(for)g(the)h Fo(_create_plan_specific)28
5659
 
b Fu(v)-5 b(arian)m(ts\):)48 b(see)34 b(cor-)330 1808
5660
 
y(resp)s(onding)25 b(argumen)m(ts)j(in)f(the)g(description)f(of)i
5661
 
Fo(fftwnd)p Fu(.)38 b(\(See)28 b(Section)g(3.3.2)h([Computing)e(the)330
5662
 
1917 y(Multi-dimensional)g(T)-8 b(ransform],)29 b(page)j(24.\))150
5663
 
2154 y Fi(3.3.2)63 b(Computing)41 b(the)f(Multi-dimensional)i(T)-10
5664
 
b(ransform)390 2347 y Fo(#include)46 b(<fftw.h>)390 2554
5665
 
y(void)h(fftwnd\(fftwnd_plan)42 b(plan,)47 b(int)g(howmany,)963
5666
 
2658 y(fftw_complex)d(*in,)j(int)g(istride,)e(int)i(idist,)963
5667
 
2762 y(fftw_complex)d(*out,)j(int)f(ostride,)g(int)h(odist\);)390
5668
 
2969 y(void)g(fftwnd_one\(fftwnd_plan)41 b(p,)48 b(fftw_complex)c(*in,)
5669
 
1154 3073 y(fftw_complex)g(*out\);)275 3214 y Fu(The)33
5670
 
b(function)f Fo(fftwnd)g Fu(computes)h(one)h(or)g(more)f(m)m
5671
 
(ulti-dimensional)d(F)-8 b(ourier)33 b(T)-8 b(ransforms,)33
5672
 
b(us-)150 3324 y(ing)39 b(a)i(plan)e(created)i(b)m(y)f
5673
 
Fo(fftwnd_create_plan)35 b Fu(\(see)41 b(Section)f(3.3.1)i([Plan)d
5674
 
(Creation)h(for)g(Multi-)150 3433 y(dimensional)20 b(T)-8
 
5700
TeXDict begin 24 25 bop 150 -116 a Fv(24)3232 b(FFTW)510
 
5701
299 y(plans)33 b(can)i(also)f(tak)m(e)i(adv)-5 b(an)m(tage)36
 
5702
b(of)f Fp(wisdom)e Fv(to)i(pro)s(duce)e(a)i(more)f(optimal)g(plan)f
 
5703
(\(based)510 408 y(on)42 b(past)g(measuremen)m(ts\))g(than)f(the)h
 
5704
(estimation)g(heuristic)e(w)m(ould)g(normally)g(generate.)510
 
5705
518 y(When)30 b(the)h Fp(FFTW_MEASURE)c Fv(option)j(is)g(used,)g(new)g
 
5706
Fp(wisdom)f Fv(will)f(also)j(b)s(e)f(generated)h(if)f(the)510
 
5707
628 y(curren)m(t)42 b(transform)g(size)g(is)g(not)g(completely)g
 
5708
(understo)s(o)s(d)f(b)m(y)h(existing)g Fp(wisdom)p Fv(.)75
 
5709
b(Note)510 737 y(that)37 b(the)g(same)g Fp(wisdom)e Fv(is)h(shared)g(b)
 
5710
s(et)m(w)m(een)h(one-dimensional)e(and)h(m)m(ulti-dimensional)510
 
5711
847 y(transforms.)225 982 y Ft(\017)60 b Fp(in)p Fv(,)34
 
5712
b Fp(out)p Fv(,)g Fp(istride)p Fv(,)f Fp(ostride)f Fv(\(only)h(for)g
 
5713
(the)h Fp(_create_plan_specific)28 b Fv(v)-5 b(arian)m(ts\):)48
 
5714
b(see)34 b(cor-)330 1092 y(resp)s(onding)25 b(argumen)m(ts)j(in)f(the)g
 
5715
(description)f(of)i Fp(fftwnd)p Fv(.)38 b(\(See)28 b(Section)g(3.3.2)h
 
5716
([Computing)e(the)330 1202 y(Multi-dimensional)g(T)-8
 
5717
b(ransform],)29 b(page)j(24.\))150 1430 y Fh(3.3.2)63
 
5718
b(Computing)41 b(the)f(Multi-dimensional)i(T)-10 b(ransform)390
 
5719
1592 y Fp(#include)46 b(<fftw.h>)390 1799 y(void)h(fftwnd\(fftwnd_plan)
 
5720
42 b(plan,)47 b(int)g(howmany,)963 1903 y(fftw_complex)d(*in,)j(int)g
 
5721
(istride,)e(int)i(idist,)963 2007 y(fftw_complex)d(*out,)j(int)f
 
5722
(ostride,)g(int)h(odist\);)390 2215 y(void)g(fftwnd_one\(fftwnd_plan)41
 
5723
b(p,)48 b(fftw_complex)c(*in,)1154 2318 y(fftw_complex)g(*out\);)275
 
5724
2455 y Fv(The)33 b(function)f Fp(fftwnd)g Fv(computes)h(one)h(or)g
 
5725
(more)f(m)m(ulti-dimensional)d(F)-8 b(ourier)33 b(T)-8
 
5726
b(ransforms,)33 b(us-)150 2565 y(ing)39 b(a)i(plan)e(created)i(b)m(y)f
 
5727
Fp(fftwnd_create_plan)35 b Fv(\(see)41 b(Section)f(3.3.1)i([Plan)d
 
5728
(Creation)h(for)g(Multi-)150 2674 y(dimensional)20 b(T)-8
5675
5729
b(ransforms],)24 b(page)g(22\).)40 b(\(Note)24 b(that)g(the)f(plan)f
5676
 
(determines)g(the)i(rank)e(and)h(dimensions)150 3543
 
5730
(determines)g(the)i(rank)e(and)h(dimensions)150 2784
5677
5731
y(of)34 b(the)h(arra)m(y)g(to)g(b)s(e)e(transformed.\))52
5678
 
b(The)34 b(function)f Fo(fftwnd_one)e Fu(pro)m(vides)i(a)i
5679
 
(simpli\014ed)30 b(in)m(terface)150 3652 y(for)g(the)h(common)f(case)i
 
5732
b(The)34 b(function)f Fp(fftwnd_one)e Fv(pro)m(vides)i(a)i
 
5733
(simpli\014ed)30 b(in)m(terface)150 2893 y(for)g(the)h(common)f(case)i
5680
5734
(of)e(single)f(input)g(arra)m(y)i(of)f(stride)f(1.)150
5681
 
3889 y Fi(Argumen)m(ts)225 4088 y Fs(\017)60 b Fo(plan)35
5682
 
b Fu(is)h(the)h(plan)e(created)i(b)m(y)g Fo(fftwnd_create_plan)p
5683
 
Fu(.)54 b(\(see)37 b(Section)f(3.3.1)j([Plan)c(Creation)330
5684
 
4197 y(for)28 b(Multi-dimensional)d(T)-8 b(ransforms],)28
5685
 
b(page)i(22\).)41 b(In)28 b(the)h(case)g(of)g(t)m(w)m(o)h(and)e
5686
 
(three-dimensional)330 4307 y(transforms,)57 b(it)51
5687
 
b(could)g(also)h(ha)m(v)m(e)i(b)s(een)d(created)i(b)m(y)f
5688
 
Fo(fftw2d_create_plan)47 b Fu(or)52 b Fo(fftw3d_)330
5689
 
4417 y(create_plan)p Fu(,)28 b(resp)s(ectiv)m(ely)-8
5690
 
b(.)225 4554 y Fs(\017)60 b Fo(howmany)28 b Fu(is)i(the)g(n)m(um)m(b)s
5691
 
(er)f(of)i(m)m(ulti-dimensional)26 b(transforms)k Fo(fftwnd)f
5692
 
Fu(will)e(compute.)225 4692 y Fs(\017)60 b Fo(in)p Fu(,)f
5693
 
Fo(istride)52 b Fu(and)h Fo(idist)f Fu(describ)s(e)g(the)i(input)e
5694
 
(arra)m(y\(s\).)112 b(There)53 b(are)h Fo(howmany)e Fu(m)m(ulti-)330
5695
 
4801 y(dimensional)24 b(input)g(arra)m(ys;)29 b(the)e(\014rst)f(one)h
5696
 
(is)e(p)s(oin)m(ted)h(to)h(b)m(y)g Fo(in)p Fu(,)g(the)f(second)h(one)g
5697
 
(is)f(p)s(oin)m(ted)f(to)330 4911 y(b)m(y)i Fo(in)j(+)g(idist)p
5698
 
Fu(,)d(and)f(so)i(on,)g(up)e(to)i Fo(in)i(+)g(\(howmany)e(-)i(1\))g(*)g
5699
 
(idist)p Fu(.)38 b(Eac)m(h)28 b(m)m(ulti-dimensional)p
5700
 
150 5022 1200 4 v 275 5121 a(as)33 b(the)h(en)m(tire)f(arra)m(y)-8
5701
 
b(.)51 b(\(Unless)32 b(y)m(ou)i(use)f Fo(fftwnd)f Fu(to)i(p)s(erform)e
5702
 
(one-dimensional)f(transforms,)i(in)275 5230 y(whic)m(h)26
5703
 
b(case)i(the)g(temp)s(orary)f(storage)i(required)d(for)i(in-place)e
5704
 
(transforms)h Fq(is)35 b Fu(as)28 b(big)e(as)i(the)g(en)m(tire)275
5705
 
5340 y(arra)m(y)-8 b(.\))p eop
 
5735
3122 y Fh(Argumen)m(ts)225 3289 y Ft(\017)60 b Fp(plan)67
 
5736
b Fv(is)g(the)i(plan)d(created)k(b)m(y)e Fp(fftwnd_create_plan)p
 
5737
Fv(.)149 b(\(see)69 b(Section)f(3.3.1)i([Plan)330 3399
 
5738
y(Creation)56 b(for)g(Multi-dimensional)c(T)-8 b(ransforms],)62
 
5739
b(page)57 b(22\).)119 b(In)55 b(the)i(case)g(of)f(t)m(w)m(o)i(and)330
 
5740
3509 y(three-dimensional)24 b(transforms,)j(it)e(could)h(also)g(ha)m(v)
 
5741
m(e)i(b)s(een)d(created)j(b)m(y)e Fp(fftw2d_create_plan)330
 
5742
3618 y Fv(or)k Fp(fftw3d_create_plan)p Fv(,)c(resp)s(ectiv)m(ely)-8
 
5743
b(.)225 3754 y Ft(\017)60 b Fp(howmany)28 b Fv(is)i(the)g(n)m(um)m(b)s
 
5744
(er)f(of)i(m)m(ulti-dimensional)26 b(transforms)k Fp(fftwnd)f
 
5745
Fv(will)e(compute.)225 3889 y Ft(\017)60 b Fp(in)p Fv(,)f
 
5746
Fp(istride)52 b Fv(and)h Fp(idist)f Fv(describ)s(e)g(the)i(input)e
 
5747
(arra)m(y\(s\).)112 b(There)53 b(are)h Fp(howmany)e Fv(m)m(ulti-)330
 
5748
3999 y(dimensional)24 b(input)g(arra)m(ys;)29 b(the)e(\014rst)f(one)h
 
5749
(is)e(p)s(oin)m(ted)h(to)h(b)m(y)g Fp(in)p Fv(,)g(the)f(second)h(one)g
 
5750
(is)f(p)s(oin)m(ted)f(to)330 4109 y(b)m(y)i Fp(in)j(+)g(idist)p
 
5751
Fv(,)d(and)f(so)i(on,)g(up)e(to)i Fp(in)i(+)g(\(howmany)e(-)i(1\))g(*)g
 
5752
(idist)p Fv(.)38 b(Eac)m(h)28 b(m)m(ulti-dimensional)330
 
5753
4218 y(input)44 b(arra)m(y)j(consists)f(of)g(complex)g(n)m(um)m(b)s
 
5754
(ers)f(\(see)j(Section)e(3.1)h([Data)h(T)m(yp)s(es],)i(page)d(17\),)330
 
5755
4328 y(stored)62 b(in)e(ro)m(w-ma)5 b(jor)62 b(format)g(\(see)h
 
5756
(Section)e(2.5)i([Multi-dimensional)58 b(Arra)m(y)k(F)-8
 
5757
b(ormat],)330 4437 y(page)49 b(11\),)54 b(whic)m(h)47
 
5758
b(are)h(not)g(necessarily)f(con)m(tiguous)i(in)d(memory)-8
 
5759
b(.)95 b(Sp)s(eci\014cally)-8 b(,)50 b Fp(in[0])d Fv(is)330
 
5760
4547 y(the)d(\014rst)e(elemen)m(t)i(of)g(the)g(\014rst)e(arra)m(y)-8
 
5761
b(,)48 b Fp(in[istride])41 b Fv(is)h(the)i(second)f(elemen)m(t)h(of)g
 
5762
(the)g(\014rst)330 4656 y(arra)m(y)-8 b(,)50 b(and)44
 
5763
b(so)h(on.)85 b(In)44 b(general,)49 b(the)c Fp(i)p Fv(-th)g(elemen)m(t)
 
5764
g(of)g(the)g Fp(j)p Fv(-th)g(input)e(arra)m(y)j(will)c(b)s(e)i(in)330
 
5765
4766 y(p)s(osition)g Fp(in[i)30 b(*)g(istride)e(+)i(j)g(*)g(idist])p
 
5766
Fv(.)87 b(Note)48 b(that,)j(here,)f Fp(i)c Fv(refers)g(to)h(an)f(index)
 
5767
f(in)m(to)330 4876 y(the)c(ro)m(w-ma)5 b(jor)42 b(format)g(for)e(the)i
 
5768
(m)m(ulti-dimensional)37 b(arra)m(y)-8 b(,)45 b(rather)c(than)g(an)g
 
5769
(index)f(in)g(an)m(y)330 4985 y(particular)29 b(dimension.)379
 
5770
5121 y Ft(\000)60 b Fr(In-plac)-5 b(e)30 b(tr)-5 b(ansforms)7
 
5771
b Fv(:)42 b(F)-8 b(or)28 b(plans)d(created)j(with)d(the)i
 
5772
Fp(FFTW_IN_PLACE)c Fv(option,)k(the)g(trans-)510 5230
 
5773
y(form)g(is)g(computed)g(in-place|the)g(output)g(is)g(returned)f(in)h
 
5774
(the)g Fp(in)g Fv(arra)m(y)-8 b(,)30 b(using)c(the)i(same)510
 
5775
5340 y(strides,)h(etcetera,)k(as)e(w)m(ere)g(used)e(in)g(the)i(input.)p
 
5776
eop end
5706
5777
%%Page: 25 27
5707
 
25 26 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
5708
 
b(Reference)2354 b(25)330 299 y(input)22 b(arra)m(y)j(consists)f(of)g
5709
 
(complex)g(n)m(um)m(b)s(ers)e(\(see)k(Section)e(3.1)h([Data)h(T)m(yp)s
5710
 
(es],)f(page)g(17\),)i(stored)330 408 y(in)20 b(ro)m(w-ma)5
5711
 
b(jor)21 b(format)h(\(see)g(Section)f(2.5)h([Multi-dimensional)17
5712
 
b(Arra)m(y)k(F)-8 b(ormat],)25 b(page)d(11\),)i(whic)m(h)330
5713
 
518 y(are)38 b(not)h(necessarily)e(con)m(tiguous)h(in)f(memory)-8
5714
 
b(.)64 b(Sp)s(eci\014cally)-8 b(,)38 b Fo(in[0])f Fu(is)g(the)h
5715
 
(\014rst)f(elemen)m(t)i(of)330 628 y(the)g(\014rst)f(arra)m(y)-8
5716
 
b(,)43 b Fo(in[istride])36 b Fu(is)i(the)h(second)g(elemen)m(t)h(of)f
5717
 
(the)g(\014rst)f(arra)m(y)-8 b(,)43 b(and)38 b(so)h(on.)67
5718
 
b(In)330 737 y(general,)38 b(the)f Fo(i)p Fu(-th)f(elemen)m(t)h(of)f
5719
 
(the)h Fo(j)p Fu(-th)f(input)e(arra)m(y)j(will)d(b)s(e)h(in)g(p)s
5720
 
(osition)g Fo(in[i)29 b(*)h(istride)330 847 y(+)g(j)g(*)g(idist])p
5721
 
Fu(.)43 b(Note)33 b(that,)g(here,)f Fo(i)f Fu(refers)g(to)i(an)e(index)
5722
 
g(in)m(to)g(the)h(ro)m(w-ma)5 b(jor)32 b(format)g(for)g(the)330
5723
 
956 y(m)m(ulti-dimensional)26 b(arra)m(y)-8 b(,)32 b(rather)e(than)g
5724
 
(an)h(index)e(in)g(an)m(y)h(particular)f(dimension.)379
5725
 
1093 y Fs(\000)60 b Fq(In-plac)-5 b(e)30 b(tr)-5 b(ansforms)7
5726
 
b Fu(:)42 b(F)-8 b(or)28 b(plans)d(created)j(with)d(the)i
5727
 
Fo(FFTW_IN_PLACE)c Fu(option,)k(the)g(trans-)510 1203
5728
 
y(form)g(is)g(computed)g(in-place|the)g(output)g(is)g(returned)f(in)h
5729
 
(the)g Fo(in)g Fu(arra)m(y)-8 b(,)30 b(using)c(the)i(same)510
5730
 
1312 y(strides,)h(etcetera,)k(as)e(w)m(ere)g(used)e(in)g(the)i(input.)
5731
 
225 1449 y Fs(\017)60 b Fo(out)p Fu(,)33 b Fo(ostride)f
5732
 
Fu(and)g Fo(odist)g Fu(describ)s(e)g(the)h(output)g(arra)m(y\(s\).)50
5733
 
b(The)33 b(format)g(is)g(the)g(same)h(as)f(for)330 1559
5734
 
y(the)e(input)d(arra)m(y)-8 b(.)379 1695 y Fs(\000)60
5735
 
b Fq(In-plac)-5 b(e)47 b(tr)-5 b(ansforms)7 b Fu(:)73
5736
 
b(These)45 b(parameters)g(are)h(ignored)e(for)g(plans)g(created)i(with)
5737
 
e(the)510 1805 y Fo(FFTW_IN_PLACE)27 b Fu(option.)275
5738
 
1971 y(The)36 b(function)g Fo(fftwnd_one)e Fu(transforms)i(a)i(single,)
5739
 
g(con)m(tiguous)f(input)e(arra)m(y)i(to)h(a)g(con)m(tiguous)150
5740
 
2080 y(output)30 b(arra)m(y)-8 b(.)42 b(By)30 b(de\014nition,)f(the)h
5741
 
(call)390 2213 y Fo(fftwnd_one\(plan,)43 b(in,)k(out\))275
5742
 
2352 y Fu(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 2485
5743
 
y Fo(fftwnd\(plan,)44 b(1,)k(in,)f(1,)g(1,)g(out,)g(1,)g(1\))150
5744
 
2718 y Fi(3.3.3)63 b(Destro)m(ying)41 b(a)g(Multi-dimensional)h(Plan)
5745
 
390 2910 y Fo(#include)k(<fftw.h>)390 3117 y(void)h
 
5778
TeXDict begin 25 26 bop 150 -116 a Fv(Chapter)30 b(3:)41
 
5779
b(FFTW)31 b(Reference)2354 b(25)225 299 y Ft(\017)60
 
5780
b Fp(out)p Fv(,)33 b Fp(ostride)f Fv(and)g Fp(odist)g
 
5781
Fv(describ)s(e)g(the)h(output)g(arra)m(y\(s\).)50 b(The)33
 
5782
b(format)g(is)g(the)g(same)h(as)f(for)330 408 y(the)e(input)d(arra)m(y)
 
5783
-8 b(.)379 551 y Ft(\000)60 b Fr(In-plac)-5 b(e)47 b(tr)-5
 
5784
b(ansforms)7 b Fv(:)73 b(These)45 b(parameters)g(are)h(ignored)e(for)g
 
5785
(plans)g(created)i(with)e(the)510 661 y Fp(FFTW_IN_PLACE)27
 
5786
b Fv(option.)275 844 y(The)36 b(function)g Fp(fftwnd_one)e
 
5787
Fv(transforms)i(a)i(single,)g(con)m(tiguous)f(input)e(arra)m(y)i(to)h
 
5788
(a)g(con)m(tiguous)150 954 y(output)30 b(arra)m(y)-8
 
5789
b(.)42 b(By)30 b(de\014nition,)f(the)h(call)390 1099
 
5790
y Fp(fftwnd_one\(plan,)43 b(in,)k(out\))275 1250 y Fv(is)29
 
5791
b(equiv)-5 b(alen)m(t)30 b(to)390 1395 y Fp(fftwnd\(plan,)44
 
5792
b(1,)k(in,)f(1,)g(0,)g(out,)g(1,)g(0\))150 1651 y Fh(3.3.3)63
 
5793
b(Destro)m(ying)41 b(a)g(Multi-dimensional)h(Plan)390
 
5794
1813 y Fp(#include)k(<fftw.h>)390 2021 y(void)h
5746
5795
(fftwnd_destroy_plan\(fft)o(wnd_)o(pla)o(n)42 b(plan\);)275
5747
 
3256 y Fu(The)c(function)g Fo(fftwnd_destroy_plan)c Fu(frees)39
5748
 
b(the)g(plan)e Fo(plan)h Fu(and)h(releases)g(all)f(the)h(memory)150
5749
 
3366 y(asso)s(ciated)31 b(with)e(it.)40 b(After)31 b(destruction,)f(a)g
5750
 
(plan)f(is)h(no)g(longer)g(v)-5 b(alid.)150 3599 y Fi(3.3.4)63
5751
 
b(What)40 b(FFTWND)h(Really)f(Computes)275 3796 y Fu(The)e(con)m(v)m
 
5796
2172 y Fv(The)c(function)g Fp(fftwnd_destroy_plan)c Fv(frees)39
 
5797
b(the)g(plan)e Fp(plan)h Fv(and)h(releases)g(all)f(the)h(memory)150
 
5798
2281 y(asso)s(ciated)31 b(with)e(it.)40 b(After)31 b(destruction,)f(a)g
 
5799
(plan)f(is)h(no)g(longer)g(v)-5 b(alid.)150 2538 y Fh(3.3.4)63
 
5800
b(What)40 b(FFTWND)h(Really)f(Computes)275 2747 y Fv(The)e(con)m(v)m
5752
5801
(en)m(tions)j(that)f(w)m(e)g(follo)m(w)e(for)h(the)h(m)m
5753
5802
(ulti-dimensional)35 b(transform)k(are)h(analogous)f(to)150
5754
 
3905 y(those)23 b(for)f(the)h(one-dimensional)e(transform.)37
 
5803
2856 y(those)23 b(for)f(the)h(one-dimensional)e(transform.)37
5755
5804
b(In)22 b(particular,)h(the)f(forw)m(ard)h(transform)e(has)i(a)g
5756
 
(negativ)m(e)150 4015 y(sign)j(in)f(the)i(exp)s(onen)m(t)f(and)g
 
5805
(negativ)m(e)150 2966 y(sign)j(in)f(the)i(exp)s(onen)m(t)f(and)g
5757
5806
(neither)g(the)h(forw)m(ard)f(nor)g(the)h(bac)m(kw)m(ard)g(transforms)e
5758
 
(will)f(p)s(erform)i(an)m(y)150 4124 y(normalization.)43
 
5807
(will)f(p)s(erform)i(an)m(y)150 3075 y(normalization.)43
5759
5808
b(Computing)30 b(the)i(bac)m(kw)m(ard)h(transform)e(of)g(the)h(forw)m
5760
 
(ard)g(transform)f(will)e(m)m(ultiply)150 4234 y(the)h(arra)m(y)g(b)m
 
5809
(ard)g(transform)f(will)e(m)m(ultiply)150 3185 y(the)h(arra)m(y)g(b)m
5761
5810
(y)f(the)h(pro)s(duct)e(of)i(its)f(dimensions.)37 b(The)29
5762
5811
b(output)h(is)e(in-order,)h(and)g(the)g(zeroth)h(elemen)m(t)150
5763
 
4344 y(of)h(the)f(output)g(is)f(the)i(amplitude)d(of)j(the)f(zero)i
5764
 
(frequency)d(comp)s(onen)m(t.)275 4482 y(The)35 b(exact)j(mathematical)
 
5812
3295 y(of)h(the)f(output)g(is)f(the)i(amplitude)d(of)j(the)f(zero)i
 
5813
(frequency)d(comp)s(onen)m(t.)275 3445 y(The)35 b(exact)j(mathematical)
5765
5814
f(de\014nition)d(of)i(our)g(m)m(ulti-dimensional)c(transform)k(follo)m
5766
 
(ws.)58 b(Let)37 b Fl(X)150 4592 y Fu(b)s(e)d(a)g Fl(d)p
5767
 
Fu(-dimensional)e(complex)i(arra)m(y)h(whose)f(elemen)m(ts)h(are)g
5768
 
Fl(X)7 b Fu([)p Fl(j)2489 4606 y Fn(1)2527 4592 y Fl(;)15
5769
 
b(j)2604 4606 y Fn(2)2642 4592 y Fl(;)g(:)g(:)g(:)i(;)e(j)2881
5770
 
4606 y Fk(d)2920 4592 y Fu(],)36 b(where)e(0)e Fs(\024)g
5771
 
Fl(j)3490 4606 y Fk(s)3557 4592 y Fl(<)g(n)3715 4606
5772
 
y Fk(s)150 4702 y Fu(for)e(all)f Fl(s)c Fs(2)g(f)p Fu(1)p
5773
 
Fl(;)15 b Fu(2)p Fl(;)g(:)g(:)g(:)k(;)c(d)p Fs(g)p Fu(.)41
5774
 
b(Let)31 b(also)g Fl(!)1509 4716 y Fk(s)1569 4702 y Fu(=)25
5775
 
b Fl(e)1707 4669 y Fn(2)p Fk(\031)1781 4624 y Fj(p)p
5776
 
1836 4624 85 3 v 45 x(\000)p Fn(1)p Fk(=n)1996 4677 y
5777
 
Fg(s)2032 4702 y Fu(,)30 b(for)h(all)59 b Fl(s)25 b Fs(2)g(f)p
5778
 
Fu(1)p Fl(;)15 b Fu(2)p Fl(;)g(:)g(:)g(:)j(;)d(d)p Fs(g)p
5779
 
Fu(.)275 4840 y(The)24 b(forw)m(ard)g(transform)g(computes)h(a)g
5780
 
(complex)f(arra)m(y)i Fl(Y)20 b Fu(,)26 b(whose)e(structure)h(is)e(the)
5781
 
i(same)g(as)g(that)150 4950 y(of)31 b Fl(X)7 b Fu(,)31
5782
 
b(de\014ned)e(b)m(y)534 5258 y Fl(Y)20 b Fu([)p Fl(i)663
5783
 
5272 y Fn(1)701 5258 y Fl(;)15 b(i)772 5272 y Fn(2)810
5784
 
5258 y Fl(;)g(:)g(:)g(:)i(;)e(i)1043 5272 y Fk(d)1082
5785
 
5258 y Fu(])26 b(=)1229 5151 y Fk(n)1270 5159 y Ff(1)1302
5786
 
5151 y Fj(\000)p Fn(1)1248 5177 y Fh(X)1236 5354 y Fk(j)1263
5787
 
5362 y Ff(1)1296 5354 y Fn(=0)1402 5151 y Fk(n)1443 5159
5788
 
y Ff(2)1476 5151 y Fj(\000)p Fn(1)1421 5177 y Fh(X)1409
5789
 
5354 y Fk(j)1436 5362 y Ff(2)1469 5354 y Fn(=0)1576 5258
5790
 
y Fs(\001)15 b(\001)g(\001)1697 5150 y Fk(n)1738 5159
5791
 
y Fg(d)1773 5150 y Fj(\000)p Fn(1)1717 5177 y Fh(X)1704
5792
 
5354 y Fk(j)1731 5363 y Fg(d)1767 5354 y Fn(=0)1873 5258
5793
 
y Fl(X)7 b Fu([)p Fl(j)2017 5272 y Fn(1)2055 5258 y Fl(;)15
5794
 
b(j)2132 5272 y Fn(2)2170 5258 y Fl(;)g(:)g(:)g(:)i(;)e(j)2409
5795
 
5272 y Fk(d)2449 5258 y Fu(])p Fl(!)2534 5215 y Fj(\000)p
5796
 
Fk(i)2609 5223 y Ff(1)2642 5215 y Fk(j)2669 5223 y Ff(1)2531
5797
 
5277 y Fn(1)2706 5258 y Fl(!)2766 5215 y Fj(\000)p Fk(i)2841
5798
 
5223 y Ff(2)2873 5215 y Fk(j)2900 5223 y Ff(2)2763 5277
5799
 
y Fn(2)2952 5258 y Fs(\001)g(\001)g(\001)i Fl(!)3134
5800
 
5215 y Fj(\000)p Fk(i)3209 5224 y Fg(d)3244 5215 y Fk(j)3271
5801
 
5224 y Fg(d)3131 5280 y Fk(d)3340 5258 y Fl(:)p eop
 
5815
(ws.)58 b(Let)37 b Fm(X)150 3555 y Fv(b)s(e)d(a)g Fm(d)p
 
5816
Fv(-dimensional)e(complex)i(arra)m(y)h(whose)f(elemen)m(ts)h(are)g
 
5817
Fm(X)7 b Fv([)p Fm(j)2489 3569 y Fo(1)2527 3555 y Fm(;)15
 
5818
b(j)2604 3569 y Fo(2)2642 3555 y Fm(;)g(:)g(:)g(:)i(;)e(j)2881
 
5819
3569 y Fl(d)2920 3555 y Fv(],)36 b(where)e(0)e Ft(\024)g
 
5820
Fm(j)3490 3569 y Fl(s)3557 3555 y Fm(<)g(n)3715 3569
 
5821
y Fl(s)150 3665 y Fv(for)e(all)f Fm(s)c Ft(2)g(f)p Fv(1)p
 
5822
Fm(;)15 b Fv(2)p Fm(;)g(:)g(:)g(:)k(;)c(d)p Ft(g)p Fv(.)41
 
5823
b(Let)31 b(also)g Fm(!)1509 3679 y Fl(s)1569 3665 y Fv(=)25
 
5824
b Fm(e)1707 3632 y Fo(2)p Fl(\031)1781 3587 y Fk(p)p
 
5825
1836 3587 85 3 v 45 x(\000)p Fo(1)p Fl(=n)1996 3640 y
 
5826
Fe(s)2032 3665 y Fv(,)30 b(for)h(all)59 b Fm(s)25 b Ft(2)g(f)p
 
5827
Fv(1)p Fm(;)15 b Fv(2)p Fm(;)g(:)g(:)g(:)j(;)d(d)p Ft(g)p
 
5828
Fv(.)275 3815 y(The)24 b(forw)m(ard)g(transform)g(computes)h(a)g
 
5829
(complex)f(arra)m(y)i Fm(Y)20 b Fv(,)26 b(whose)e(structure)h(is)e(the)
 
5830
i(same)g(as)g(that)150 3925 y(of)31 b Fm(X)7 b Fv(,)31
 
5831
b(de\014ned)e(b)m(y)534 4262 y Fm(Y)20 b Fv([)p Fm(i)663
 
5832
4276 y Fo(1)701 4262 y Fm(;)15 b(i)772 4276 y Fo(2)810
 
5833
4262 y Fm(;)g(:)g(:)g(:)i(;)e(i)1043 4276 y Fl(d)1082
 
5834
4262 y Fv(])26 b(=)1229 4155 y Fl(n)1270 4163 y Fd(1)1302
 
5835
4155 y Fk(\000)p Fo(1)1248 4181 y Fg(X)1236 4358 y Fl(j)1263
 
5836
4366 y Fd(1)1296 4358 y Fo(=0)1402 4155 y Fl(n)1443 4163
 
5837
y Fd(2)1476 4155 y Fk(\000)p Fo(1)1421 4181 y Fg(X)1409
 
5838
4358 y Fl(j)1436 4366 y Fd(2)1469 4358 y Fo(=0)1576 4262
 
5839
y Ft(\001)15 b(\001)g(\001)1697 4155 y Fl(n)1738 4164
 
5840
y Fe(d)1773 4155 y Fk(\000)p Fo(1)1717 4181 y Fg(X)1704
 
5841
4358 y Fl(j)1731 4367 y Fe(d)1767 4358 y Fo(=0)1873 4262
 
5842
y Fm(X)7 b Fv([)p Fm(j)2017 4276 y Fo(1)2055 4262 y Fm(;)15
 
5843
b(j)2132 4276 y Fo(2)2170 4262 y Fm(;)g(:)g(:)g(:)i(;)e(j)2409
 
5844
4276 y Fl(d)2449 4262 y Fv(])p Fm(!)2534 4219 y Fk(\000)p
 
5845
Fl(i)2609 4227 y Fd(1)2642 4219 y Fl(j)2669 4227 y Fd(1)2531
 
5846
4282 y Fo(1)2706 4262 y Fm(!)2766 4219 y Fk(\000)p Fl(i)2841
 
5847
4227 y Fd(2)2873 4219 y Fl(j)2900 4227 y Fd(2)2763 4282
 
5848
y Fo(2)2952 4262 y Ft(\001)g(\001)g(\001)i Fm(!)3134
 
5849
4219 y Fk(\000)p Fl(i)3209 4228 y Fe(d)3244 4219 y Fl(j)3271
 
5850
4228 y Fe(d)3131 4284 y Fl(d)3340 4262 y Fm(:)275 4574
 
5851
y Fv(The)29 b(bac)m(kw)m(ard)i(transform)f(computes)612
 
5852
4877 y Fm(Y)20 b Fv([)p Fm(i)741 4891 y Fo(1)779 4877
 
5853
y Fm(;)15 b(i)850 4891 y Fo(2)888 4877 y Fm(;)g(:)g(:)g(:)i(;)e(i)1121
 
5854
4891 y Fl(d)1160 4877 y Fv(])25 b(=)1306 4771 y Fl(n)1347
 
5855
4779 y Fd(1)1380 4771 y Fk(\000)p Fo(1)1326 4797 y Fg(X)1314
 
5856
4973 y Fl(j)1341 4981 y Fd(1)1374 4973 y Fo(=0)1480 4771
 
5857
y Fl(n)1521 4779 y Fd(2)1553 4771 y Fk(\000)p Fo(1)1499
 
5858
4797 y Fg(X)1487 4973 y Fl(j)1514 4981 y Fd(2)1547 4973
 
5859
y Fo(=0)1654 4877 y Ft(\001)15 b(\001)g(\001)1775 4770
 
5860
y Fl(n)1816 4779 y Fe(d)1851 4770 y Fk(\000)p Fo(1)1795
 
5861
4797 y Fg(X)1782 4973 y Fl(j)1809 4982 y Fe(d)1844 4973
 
5862
y Fo(=0)1951 4877 y Fm(X)7 b Fv([)p Fm(j)2095 4891 y
 
5863
Fo(1)2133 4877 y Fm(;)15 b(j)2210 4891 y Fo(2)2248 4877
 
5864
y Fm(;)g(:)g(:)g(:)i(;)e(j)2487 4891 y Fl(d)2526 4877
 
5865
y Fv(])p Fm(!)2611 4835 y Fl(i)2634 4843 y Fd(1)2667
 
5866
4835 y Fl(j)2694 4843 y Fd(1)2608 4897 y Fo(1)2731 4877
 
5867
y Fm(!)2791 4835 y Fl(i)2814 4843 y Fd(2)2847 4835 y
 
5868
Fl(j)2874 4843 y Fd(2)2788 4897 y Fo(2)2926 4877 y Ft(\001)g(\001)g
 
5869
(\001)i Fm(!)3108 4835 y Fl(i)3131 4844 y Fe(d)3166 4835
 
5870
y Fl(j)3193 4844 y Fe(d)3105 4900 y Fl(d)3263 4877 y
 
5871
Fm(:)275 5230 y Fv(Computing)26 b(the)i(forw)m(ard)f(transform)g(follo)
 
5872
m(w)m(ed)h(b)m(y)g(the)g(bac)m(kw)m(ard)g(transform)f(will)f(m)m
 
5873
(ultiply)f(the)150 5340 y(arra)m(y)31 b(b)m(y)514 5276
 
5874
y Fg(Q)593 5296 y Fl(d)593 5363 y(s)p Fo(=1)727 5340
 
5875
y Fm(n)782 5354 y Fl(d)821 5340 y Fv(.)p eop end
5802
5876
%%Page: 26 28
5803
 
26 27 bop 150 -116 a Fu(26)3232 b(FFTW)275 299 y(The)29
5804
 
b(bac)m(kw)m(ard)i(transform)f(computes)612 583 y Fl(Y)20
5805
 
b Fu([)p Fl(i)741 597 y Fn(1)779 583 y Fl(;)15 b(i)850
5806
 
597 y Fn(2)888 583 y Fl(;)g(:)g(:)g(:)i(;)e(i)1121 597
5807
 
y Fk(d)1160 583 y Fu(])25 b(=)1306 477 y Fk(n)1347 485
5808
 
y Ff(1)1380 477 y Fj(\000)p Fn(1)1326 502 y Fh(X)1314
5809
 
679 y Fk(j)1341 687 y Ff(1)1374 679 y Fn(=0)1480 477
5810
 
y Fk(n)1521 485 y Ff(2)1553 477 y Fj(\000)p Fn(1)1499
5811
 
502 y Fh(X)1487 679 y Fk(j)1514 687 y Ff(2)1547 679 y
5812
 
Fn(=0)1654 583 y Fs(\001)15 b(\001)g(\001)1775 476 y
5813
 
Fk(n)1816 485 y Fg(d)1851 476 y Fj(\000)p Fn(1)1795 502
5814
 
y Fh(X)1782 679 y Fk(j)1809 688 y Fg(d)1844 679 y Fn(=0)1951
5815
 
583 y Fl(X)7 b Fu([)p Fl(j)2095 597 y Fn(1)2133 583 y
5816
 
Fl(;)15 b(j)2210 597 y Fn(2)2248 583 y Fl(;)g(:)g(:)g(:)i(;)e(j)2487
5817
 
597 y Fk(d)2526 583 y Fu(])p Fl(!)2611 541 y Fk(i)2634
5818
 
549 y Ff(1)2667 541 y Fk(j)2694 549 y Ff(1)2608 603 y
5819
 
Fn(1)2731 583 y Fl(!)2791 541 y Fk(i)2814 549 y Ff(2)2847
5820
 
541 y Fk(j)2874 549 y Ff(2)2788 603 y Fn(2)2926 583 y
5821
 
Fs(\001)g(\001)g(\001)i Fl(!)3108 541 y Fk(i)3131 550
5822
 
y Fg(d)3166 541 y Fk(j)3193 550 y Fg(d)3105 606 y Fk(d)3263
5823
 
583 y Fl(:)275 904 y Fu(Computing)26 b(the)i(forw)m(ard)f(transform)g
5824
 
(follo)m(w)m(ed)h(b)m(y)g(the)g(bac)m(kw)m(ard)g(transform)f(will)f(m)m
5825
 
(ultiply)f(the)150 1013 y(arra)m(y)31 b(b)m(y)514 949
5826
 
y Fh(Q)593 970 y Fk(d)593 1036 y(s)p Fn(=1)727 1013 y
5827
 
Fl(n)782 1027 y Fk(d)821 1013 y Fu(.)150 1279 y Ft(3.4)68
5828
 
b(Real)46 b(One-dimensional)g(T)-11 b(ransforms)45 b(Reference)275
5829
 
1475 y Fu(The)29 b(one-dimensional)f(real)h(routines)g(are)h(generally)
5830
 
f(pre\014xed)g(with)f Fo(rfftw_)p Fu(.)3055 1442 y Fn(3)3132
5831
 
1475 y Fu(Programs)h(using)150 1585 y(RFFTW)c(should)d(b)s(e)i(link)m
5832
 
(ed)e(with)h Fo(-lrfftw)29 b(-lfftw)f(-lm)c Fu(on)g(Unix)f(systems,)i
5833
 
(or)g(with)e(the)h(RFFTW,)150 1694 y(the)31 b(FFTW,)g(and)f(the)g
5834
 
(standard)g(math)g(libraries)e(in)h(general.)150 1925
5835
 
y Fi(3.4.1)63 b(Plan)40 b(Creation)h(for)g(Real)f(One-dimensional)i(T)
5836
 
-10 b(ransforms)390 2115 y Fo(#include)46 b(<rfftw.h>)390
5837
 
2323 y(rfftw_plan)f(rfftw_create_plan\(int)d(n,)47 b(fftw_direction)d
5838
 
(dir,)j(int)g(flags\);)390 2530 y(rfftw_plan)e
 
5877
TeXDict begin 26 27 bop 150 -116 a Fv(26)3232 b(FFTW)150
 
5878
299 y Fu(3.4)68 b(Real)46 b(One-dimensional)g(T)-11 b(ransforms)45
 
5879
b(Reference)275 489 y Fv(The)29 b(one-dimensional)f(real)h(routines)g
 
5880
(are)h(generally)f(pre\014xed)g(with)f Fp(rfftw_)p Fv(.)3055
 
5881
457 y Fo(3)3132 489 y Fv(Programs)h(using)150 599 y(RFFTW)c(should)d(b)
 
5882
s(e)i(link)m(ed)e(with)h Fp(-lrfftw)29 b(-lfftw)f(-lm)c
 
5883
Fv(on)g(Unix)f(systems,)i(or)g(with)e(the)h(RFFTW,)150
 
5884
709 y(the)31 b(FFTW,)g(and)f(the)g(standard)g(math)g(libraries)e(in)h
 
5885
(general.)150 927 y Fh(3.4.1)63 b(Plan)40 b(Creation)h(for)g(Real)f
 
5886
(One-dimensional)i(T)-10 b(ransforms)390 1089 y Fp(#include)46
 
5887
b(<rfftw.h>)390 1296 y(rfftw_plan)f(rfftw_create_plan\(int)d(n,)47
 
5888
b(fftw_direction)d(dir,)j(int)g(flags\);)390 1504 y(rfftw_plan)e
5839
5889
(rfftw_create_plan_specif)o(ic\(i)o(nt)d(n,)47 b(fftw_direction)d(dir,)
5840
 
581 2634 y(int)j(flags,)f(fftw_real)f(*in,)i(int)g(istride,)581
5841
 
2738 y(fftw_real)e(*out,)i(int)f(ostride\);)275 2875
5842
 
y Fu(The)23 b(function)f Fo(rfftw_create_plan)d Fu(creates)25
 
5890
581 1608 y(int)j(flags,)f(fftw_real)f(*in,)i(int)g(istride,)581
 
5891
1711 y(fftw_real)e(*out,)i(int)f(ostride\);)275 1844
 
5892
y Fv(The)23 b(function)f Fp(rfftw_create_plan)d Fv(creates)25
5843
5893
b(a)g(plan,)f(whic)m(h)e(is)h(a)h(data)g(structure)g(con)m(taining)f
5844
 
(all)150 2985 y(the)31 b(information)e(that)j Fo(rfftw)e
5845
 
Fu(needs)g(in)g(order)g(to)i(compute)f(the)h(1D)f(real)g(F)-8
5846
 
b(ourier)31 b(transform.)41 b(Y)-8 b(ou)150 3095 y(can)32
 
5894
(all)150 1953 y(the)31 b(information)e(that)j Fp(rfftw)e
 
5895
Fv(needs)g(in)g(order)g(to)i(compute)f(the)h(1D)f(real)g(F)-8
 
5896
b(ourier)31 b(transform.)41 b(Y)-8 b(ou)150 2063 y(can)32
5847
5897
b(create)i(as)f(man)m(y)f(plans)f(as)h(y)m(ou)g(need,)h(but)f(only)f
5848
5898
(one)h(plan)f(for)h(a)h(giv)m(en)f(arra)m(y)h(size)f(is)f(required)150
5849
 
3204 y(\(a)g(plan)e(can)i(b)s(e)f(reused)f(man)m(y)i(times\).)275
5850
 
3342 y Fo(rfftw_create_plan)j Fu(returns)k(a)i(v)-5 b(alid)38
5851
 
b(plan,)j(or)e Fo(NULL)f Fu(if,)j(for)e(some)h(reason,)i(the)e(plan)e
5852
 
(can't)150 3452 y(b)s(e)c(created.)53 b(In)34 b(the)g(default)f
 
5899
2173 y(\(a)g(plan)e(can)i(b)s(e)f(reused)f(man)m(y)i(times\).)275
 
5900
2305 y Fp(rfftw_create_plan)j Fv(returns)k(a)i(v)-5 b(alid)38
 
5901
b(plan,)j(or)e Fp(NULL)f Fv(if,)j(for)e(some)h(reason,)i(the)e(plan)e
 
5902
(can't)150 2415 y(b)s(e)c(created.)53 b(In)34 b(the)g(default)f
5853
5903
(installation,)h(this)f(cannot)i(happ)s(en,)f(but)f(it)h(is)f(p)s
5854
 
(ossible)f(to)j(con\014gure)150 3561 y(RFFTW)e(in)e(suc)m(h)h(a)h(w)m
 
5904
(ossible)f(to)j(con\014gure)150 2524 y(RFFTW)e(in)e(suc)m(h)h(a)h(w)m
5855
5905
(a)m(y)h(that)f(some)f(input)f(sizes)h(are)h(forbidden,)e(and)g(RFFTW)i
5856
 
(cannot)h(create)g(a)150 3671 y(plan.)275 3809 y(The)k
5857
 
Fo(rfftw_create_plan_specifi)o(c)33 b Fu(v)-5 b(arian)m(t)39
 
5906
(cannot)h(create)g(a)150 2634 y(plan.)275 2766 y(The)k
 
5907
Fp(rfftw_create_plan_specifi)o(c)33 b Fv(v)-5 b(arian)m(t)39
5858
5908
b(tak)m(es)i(as)e(additional)e(argumen)m(ts)j(sp)s(eci\014c)e(in-)150
5859
 
3918 y(put/output)43 b(arra)m(ys)g(and)f(their)h(strides.)77
 
5909
2876 y(put/output)43 b(arra)m(ys)g(and)f(their)h(strides.)77
5860
5910
b(F)-8 b(or)44 b(the)f(last)g(four)g(argumen)m(ts,)k(y)m(ou)c(should)e
5861
 
(pass)i(the)150 4028 y(arra)m(ys)36 b(and)f(strides)g(that)h(y)m(ou)g
5862
 
(will)e(ev)m(en)m(tually)h(b)s(e)g(passing)g(to)i Fo(rfftw)p
5863
 
Fu(.)55 b(The)35 b(resulting)f(plans)h(will)150 4137
 
5911
(pass)i(the)150 2986 y(arra)m(ys)36 b(and)f(strides)g(that)h(y)m(ou)g
 
5912
(will)e(ev)m(en)m(tually)h(b)s(e)g(passing)g(to)i Fp(rfftw)p
 
5913
Fv(.)55 b(The)35 b(resulting)f(plans)h(will)150 3095
5864
5914
y(b)s(e)g(optimized)g(for)h(those)g(arra)m(ys)g(and)g(strides,)g
5865
5915
(although)f(they)h(ma)m(y)h(b)s(e)e(used)g(on)h(other)g(arra)m(ys)h(as)
5866
 
150 4247 y(w)m(ell.)i(Note:)j(the)30 b(con)m(ten)m(ts)h(of)f(the)f(in)g
5867
 
(and)f(out)i(arra)m(ys)g(are)g Fq(destr)-5 b(oye)g(d)41
5868
 
b Fu(b)m(y)30 b(the)f(sp)s(eci\014c)g(planner)e(\(the)150
5869
 
4356 y(initial)f(con)m(ten)m(ts)31 b(are)e(ignored,)g(so)g(the)g(arra)m
 
5916
150 3205 y(w)m(ell.)i(Note:)j(the)30 b(con)m(ten)m(ts)h(of)f(the)f(in)g
 
5917
(and)f(out)i(arra)m(ys)g(are)g Fr(destr)-5 b(oye)g(d)41
 
5918
b Fv(b)m(y)30 b(the)f(sp)s(eci\014c)g(planner)e(\(the)150
 
5919
3314 y(initial)f(con)m(ten)m(ts)31 b(are)e(ignored,)g(so)g(the)g(arra)m
5870
5920
(ys)g(need)g(not)g(ha)m(v)m(e)i(b)s(een)d(initialized\).)37
5871
 
b(See)29 b(Section)g(3.2.2)150 4466 y([Discussion)g(on)h(Sp)s(eci\014c)
 
5921
b(See)29 b(Section)g(3.2.2)150 3424 y([Discussion)g(on)h(Sp)s(eci\014c)
5872
5922
f(Plans],)h(page)h(20,)g(for)f(a)h(discussion)d(on)i(sp)s(eci\014c)f
5873
 
(plans.)150 4697 y Fi(Argumen)m(ts)225 4893 y Fs(\017)60
5874
 
b Fo(n)30 b Fu(is)f(the)i(size)f(of)h(the)f(transform.)40
 
5923
(plans.)150 3642 y Fh(Argumen)m(ts)225 3810 y Ft(\017)60
 
5924
b Fp(n)30 b Fv(is)f(the)i(size)f(of)h(the)f(transform.)40
5875
5925
b(It)31 b(can)g(b)s(e)e(an)m(y)i(p)s(ositiv)m(e)e(in)m(teger.)379
5876
 
5029 y Fs(\000)60 b Fu(RFFTW)30 b(is)e(b)s(est)h(at)i(handling)26
5877
 
b(sizes)j(of)h(the)f(form)g(2)2375 4996 y Fk(a)2416 5029
5878
 
y Fu(3)2461 4996 y Fk(b)2495 5029 y Fu(5)2540 4996 y
5879
 
Fk(c)2574 5029 y Fu(7)2619 4996 y Fk(d)2658 5029 y Fu(11)2748
5880
 
4996 y Fk(e)2785 5029 y Fu(13)2875 4996 y Fk(f)2919 5029
5881
 
y Fu(,)h(where)e Fl(e)p Fu(+)p Fl(f)39 b Fu(is)28 b(either)510
5882
 
5138 y(0)h(or)f(1,)h(and)e(the)i(other)f(exp)s(onen)m(ts)g(are)h
 
5926
3942 y Ft(\000)60 b Fv(RFFTW)30 b(is)e(b)s(est)h(at)i(handling)26
 
5927
b(sizes)j(of)h(the)f(form)g(2)2375 3909 y Fl(a)2416 3942
 
5928
y Fv(3)2461 3909 y Fl(b)2495 3942 y Fv(5)2540 3909 y
 
5929
Fl(c)2574 3942 y Fv(7)2619 3909 y Fl(d)2658 3942 y Fv(11)2748
 
5930
3909 y Fl(e)2785 3942 y Fv(13)2875 3909 y Fl(f)2919 3942
 
5931
y Fv(,)h(where)e Fm(e)p Fv(+)p Fm(f)39 b Fv(is)28 b(either)510
 
5932
4052 y(0)h(or)f(1,)h(and)e(the)i(other)f(exp)s(onen)m(ts)g(are)h
5883
5933
(arbitrary)-8 b(.)39 b(Other)28 b(sizes)f(are)i(computed)f(b)m(y)g
5884
 
(means)p 150 5241 1200 4 v 192 5307 a Fn(3)275 5340 y
5885
 
Fu(The)h(et)m(ymologically-correct)j(sp)s(elling)c(w)m(ould)h(b)s(e)h
5886
 
Fo(frftw_)p Fu(,)f(but)g(it)h(is)g(hard)f(to)i(remem)m(b)s(er.)p
5887
 
eop
 
5934
(means)510 4162 y(of)c(a)g(slo)m(w,)i(general-purp)s(ose)c(routine)h
 
5935
(\(reducing)g(to)i Fm(O)s Fv(\()p Fm(n)2517 4129 y Fo(2)2554
 
5936
4162 y Fv(\))f(p)s(erformance)f(for)h(prime)f(sizes\).)510
 
5937
4271 y(\(It)35 b(is)e(p)s(ossible)f(to)j(customize)f(RFFTW)h(for)f
 
5938
(di\013eren)m(t)g(arra)m(y)g(sizes.)52 b(See)35 b(Chapter)f(6)g([In-)
 
5939
510 4381 y(stallation)c(and)g(Customization],)g(page)i(55,)g(for)e
 
5940
(more)h(information.\))41 b(T)-8 b(ransforms)29 b(whose)510
 
5941
4490 y(sizes)36 b(are)g(p)s(o)m(w)m(ers)g(of)g(2)g(are)h(esp)s(ecially)
 
5942
d(fast.)58 b(If)35 b(y)m(ou)i(ha)m(v)m(e)g(large)f(prime)e(factors,)39
 
5943
b(it)c(ma)m(y)510 4600 y(b)s(e)j(faster)h(to)h(switc)m(h)e(o)m(v)m(er)i
 
5944
(to)g(the)f(complex)f(FFTW)i(routines,)g(whic)m(h)e(ha)m(v)m(e)i
 
5945
Fm(O)s Fv(\()p Fm(n)15 b Fv(log)h Fm(n)p Fv(\))510 4709
 
5946
y(p)s(erformance)25 b(ev)m(en)i(for)f(prime)f(sizes)g(\(w)m(e)i(don't)f
 
5947
(kno)m(w)g(of)h(a)f(similar)e(algorithm)h(sp)s(ecialized)510
 
5948
4819 y(for)30 b(real)g(data,)h(unfortunately\).)225 4952
 
5949
y Ft(\017)60 b Fp(dir)31 b Fv(is)g(the)g(direction)g(of)h(the)g
 
5950
(desired)e(transform,)h(either)h Fp(FFTW_REAL_TO_COMPLEX)26
 
5951
b Fv(or)31 b Fp(FFTW_)330 5061 y(COMPLEX_TO_REAL)p Fv(,)h(corresp)s
 
5952
(onding)g(to)j Fp(FFTW_FORWARD)c Fv(or)k Fp(FFTW_BACKWARD)p
 
5953
Fv(,)d(resp)s(ectiv)m(ely)-8 b(.)p 150 5241 1200 4 v
 
5954
199 5308 a Fo(3)275 5340 y Fj(The)25 b(et)n(ymologically-correct)i(sp)r
 
5955
(elling)g(w)n(ould)f(b)r(e)g Fi(frftw_)p Fj(,)h(but)e(it)h(is)g(hard)f
 
5956
(to)h(remem)n(b)r(er.)p eop end
5888
5957
%%Page: 27 29
5889
 
27 28 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
5890
 
b(Reference)2354 b(27)510 299 y(of)24 b(a)g(slo)m(w,)i(general-purp)s
5891
 
(ose)c(routine)h(\(reducing)g(to)i Fl(O)s Fu(\()p Fl(n)2517
5892
 
266 y Fn(2)2554 299 y Fu(\))f(p)s(erformance)f(for)h(prime)f(sizes\).)
5893
 
510 408 y(\(It)35 b(is)e(p)s(ossible)f(to)j(customize)f(RFFTW)h(for)f
5894
 
(di\013eren)m(t)g(arra)m(y)g(sizes.)52 b(See)35 b(Chapter)f(6)g([In-)
5895
 
510 518 y(stallation)c(and)g(Customization],)g(page)i(55,)g(for)e(more)
5896
 
h(information.\))41 b(T)-8 b(ransforms)29 b(whose)510
5897
 
628 y(sizes)h(are)h(p)s(o)m(w)m(ers)f(of)h(2)f(are)h(esp)s(ecially)e
5898
 
(fast.)225 766 y Fs(\017)60 b Fo(dir)31 b Fu(is)g(the)g(direction)g(of)
5899
 
h(the)g(desired)e(transform,)h(either)h Fo(FFTW_REAL_TO_COMPLEX)26
5900
 
b Fu(or)31 b Fo(FFTW_)330 876 y(COMPLEX_TO_REAL)p Fu(,)h(corresp)s
5901
 
(onding)g(to)j Fo(FFTW_FORWARD)c Fu(or)k Fo(FFTW_BACKWARD)p
5902
 
Fu(,)d(resp)s(ectiv)m(ely)-8 b(.)225 1123 y Fs(\017)60
5903
 
b Fo(flags)29 b Fu(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p
5904
 
Fo(|)p Fu('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m(wing:)379
5905
 
1262 y Fs(\000)60 b Fo(FFTW_MEASURE)p Fu(:)43 b(this)32
 
5958
TeXDict begin 27 28 bop 150 -116 a Fv(Chapter)30 b(3:)41
 
5959
b(FFTW)31 b(Reference)2354 b(27)225 299 y Ft(\017)60
 
5960
b Fp(flags)29 b Fv(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p
 
5961
Fp(|)p Fv('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m(wing:)379
 
5962
439 y Ft(\000)60 b Fp(FFTW_MEASURE)p Fv(:)43 b(this)32
5906
5963
b(\015ag)i(tells)e(RFFTW)i(to)g(\014nd)e(the)h(optimal)g(plan)e(b)m(y)j
5907
 
(actually)e Fq(c)-5 b(om-)510 1371 y(puting)45 b Fu(sev)m(eral)37
 
5964
(actually)e Fr(c)-5 b(om-)510 548 y(puting)45 b Fv(sev)m(eral)37
5908
5965
b(FFTs)g(and)f(measuring)g(their)g(execution)g(time.)60
5909
 
b(Dep)s(ending)35 b(on)i(the)g(in-)510 1481 y(stallation,)30
5910
 
b(this)f(can)i(tak)m(e)h(some)e(time.)379 1619 y Fs(\000)60
5911
 
b Fo(FFTW_ESTIMATE)p Fu(:)34 b(do)25 b(not)g(run)f(an)m(y)h(FFT)h(and)e
 
5966
b(Dep)s(ending)35 b(on)i(the)g(in-)510 658 y(stallation,)30
 
5967
b(this)f(can)i(tak)m(e)h(some)e(time.)379 798 y Ft(\000)60
 
5968
b Fp(FFTW_ESTIMATE)p Fv(:)34 b(do)25 b(not)g(run)f(an)m(y)h(FFT)h(and)e
5912
5969
(pro)m(vide)g(a)h(\\reasonable")h(plan)e(\(for)h(a)g(RISC)510
5913
 
1729 y(pro)s(cessor)37 b(with)g(man)m(y)h(registers\).)62
5914
 
b(If)38 b(neither)e Fo(FFTW_ESTIMATE)e Fu(nor)k Fo(FFTW_MEASURE)c
5915
 
Fu(is)510 1838 y(pro)m(vided,)29 b(the)i(default)e(is)h
5916
 
Fo(FFTW_ESTIMATE)p Fu(.)379 1977 y Fs(\000)60 b Fo(FFTW_OUT_OF_PLACE)p
5917
 
Fu(:)41 b(pro)s(duce)32 b(a)i(plan)e(assuming)f(that)j(the)f(input)e
5918
 
(and)i(output)g(arra)m(ys)510 2086 y(will)28 b(b)s(e)h(distinct)g
5919
 
(\(this)h(is)f(the)i(default\).)379 2225 y Fs(\000)60
5920
 
b Fo(FFTW_IN_PLACE)p Fu(:)39 b(pro)s(duce)31 b(a)h(plan)e(assuming)g
 
5970
908 y(pro)s(cessor)37 b(with)g(man)m(y)h(registers\).)62
 
5971
b(If)38 b(neither)e Fp(FFTW_ESTIMATE)e Fv(nor)k Fp(FFTW_MEASURE)c
 
5972
Fv(is)510 1017 y(pro)m(vided,)29 b(the)i(default)e(is)h
 
5973
Fp(FFTW_ESTIMATE)p Fv(.)379 1157 y Ft(\000)60 b Fp(FFTW_OUT_OF_PLACE)p
 
5974
Fv(:)41 b(pro)s(duce)32 b(a)i(plan)e(assuming)f(that)j(the)f(input)e
 
5975
(and)i(output)g(arra)m(ys)510 1267 y(will)28 b(b)s(e)h(distinct)g
 
5976
(\(this)h(is)f(the)i(default\).)379 1407 y Ft(\000)60
 
5977
b Fp(FFTW_IN_PLACE)p Fv(:)39 b(pro)s(duce)31 b(a)h(plan)e(assuming)g
5921
5978
(that)i(y)m(ou)g(w)m(an)m(t)g(the)g(output)f(in)f(the)i(input)510
5922
 
2334 y(arra)m(y)-8 b(.)41 b(The)28 b(algorithm)g(used)f(is)h(not)g
 
5979
1516 y(arra)m(y)-8 b(.)41 b(The)28 b(algorithm)g(used)f(is)h(not)g
5923
5980
(necessarily)g(in)f(place:)40 b(RFFTW)29 b(is)e(able)h(to)i(compute)510
5924
 
2444 y(true)43 b(in-place)f(transforms)g(only)g(for)g(small)g(v)-5
5925
 
b(alues)42 b(of)h Fo(n)p Fu(.)78 b(If)42 b(RFFTW)i(is)e(not)h(able)f
5926
 
(to)510 2553 y(compute)g(the)h(transform)e(in-place,)j(it)e(will)d
 
5981
1626 y(true)43 b(in-place)f(transforms)g(only)g(for)g(small)g(v)-5
 
5982
b(alues)42 b(of)h Fp(n)p Fv(.)78 b(If)42 b(RFFTW)i(is)e(not)h(able)f
 
5983
(to)510 1735 y(compute)g(the)h(transform)e(in-place,)j(it)e(will)d
5927
5984
(allo)s(cate)j(a)h(temp)s(orary)e(arra)m(y)i(\(unless)e(y)m(ou)510
5928
 
2663 y(pro)m(vide)d(one)i(y)m(ourself)7 b(\),)41 b(compute)f(the)g
 
5985
1845 y(pro)m(vide)d(one)i(y)m(ourself)7 b(\),)41 b(compute)f(the)g
5929
5986
(transform)e(out)i(of)f(place,)j(and)c(cop)m(y)j(the)e(result)510
5930
 
2773 y(bac)m(k.)60 b Fq(Warning:)54 b(This)39 b(option)h(changes)f(the)
 
5987
1955 y(bac)m(k.)60 b Fr(Warning:)54 b(This)39 b(option)h(changes)f(the)
5931
5988
g(me)-5 b(aning)39 b(of)g(some)g(p)-5 b(ar)g(ameters)42
5932
 
b(of)c Fo(rfftw)510 2882 y Fu(\(see)31 b(Section)g(3.4.2)h([Computing)d
 
5989
b(of)c Fp(rfftw)510 2064 y Fv(\(see)31 b(Section)g(3.4.2)h([Computing)d
5933
5990
(the)h(Real)h(One-dimensional)c(T)-8 b(ransform],)30
5934
 
b(page)h(27\).)510 3021 y(The)f(default)f(mo)s(de)h(of)h(op)s(eration)f
5935
 
(is)f Fo(FFTW_OUT_OF_PLACE)p Fu(.)379 3159 y Fs(\000)60
5936
 
b Fo(FFTW_USE_WISDOM)p Fu(:)37 b(use)30 b(an)m(y)h Fo(wisdom)e
5937
 
Fu(that)i(is)e(a)m(v)-5 b(ailable)30 b(to)h(help)e(in)h(the)g(creation)
5938
 
h(of)g(the)510 3268 y(plan.)50 b(\(See)34 b(Section)g(2.6)h([W)-8
 
5991
b(page)h(27\).)510 2204 y(The)f(default)f(mo)s(de)h(of)h(op)s(eration)f
 
5992
(is)f Fp(FFTW_OUT_OF_PLACE)p Fv(.)379 2344 y Ft(\000)60
 
5993
b Fp(FFTW_USE_WISDOM)p Fv(:)37 b(use)30 b(an)m(y)h Fp(wisdom)e
 
5994
Fv(that)i(is)e(a)m(v)-5 b(ailable)30 b(to)h(help)e(in)h(the)g(creation)
 
5995
h(of)g(the)510 2454 y(plan.)50 b(\(See)34 b(Section)g(2.6)h([W)-8
5939
5996
b(ords)34 b(of)h(Wisdom],)f(page)h(13.\))52 b(This)32
5940
 
b(can)i(greatly)h(sp)s(eed)e(the)510 3378 y(creation)27
5941
 
b(of)g(plans,)g(esp)s(ecially)e(with)g(the)j Fo(FFTW_MEASURE)23
5942
 
b Fu(option.)39 b Fo(FFTW_ESTIMATE)23 b Fu(plans)510
5943
 
3488 y(can)28 b(also)g(tak)m(e)i(adv)-5 b(an)m(tage)30
5944
 
b(of)e Fo(wisdom)e Fu(to)j(pro)s(duce)e(a)h(more)g(optimal)f(plan)g
5945
 
(\(based)h(on)g(past)510 3597 y(measuremen)m(ts\))i(than)g(the)g
 
5997
b(can)i(greatly)h(sp)s(eed)e(the)510 2563 y(creation)27
 
5998
b(of)g(plans,)g(esp)s(ecially)e(with)g(the)j Fp(FFTW_MEASURE)23
 
5999
b Fv(option.)39 b Fp(FFTW_ESTIMATE)23 b Fv(plans)510
 
6000
2673 y(can)28 b(also)g(tak)m(e)i(adv)-5 b(an)m(tage)30
 
6001
b(of)e Fp(wisdom)e Fv(to)j(pro)s(duce)e(a)h(more)g(optimal)f(plan)g
 
6002
(\(based)h(on)g(past)510 2783 y(measuremen)m(ts\))i(than)g(the)g
5946
6003
(estimation)f(heuristic)f(w)m(ould)g(normally)g(generate.)42
5947
 
b(When)30 b(the)510 3707 y Fo(FFTW_MEASURE)36 b Fu(option)j(is)f(used,)
5948
 
j(new)d Fo(wisdom)g Fu(will)f(also)i(b)s(e)f(generated)j(if)d(the)h
5949
 
(curren)m(t)510 3816 y(transform)30 b(size)g(is)f(not)i(completely)f
5950
 
(understo)s(o)s(d)f(b)m(y)h(existing)f Fo(wisdom)p Fu(.)225
5951
 
3955 y Fs(\017)60 b Fo(in)p Fu(,)29 b Fo(out)p Fu(,)f
5952
 
Fo(istride)p Fu(,)g Fo(ostride)f Fu(\(only)h(for)h Fo
5953
 
(rfftw_create_plan_specifi)o(c)p Fu(\):)34 b(see)c(corresp)s(ond-)330
5954
 
4064 y(ing)38 b(argumen)m(ts)i(in)e(the)h(description)e(of)i
5955
 
Fo(rfftw)p Fu(.)66 b(\(See)40 b(Section)f(3.4.2)i([Computing)d(the)h
5956
 
(Real)330 4174 y(One-dimensional)23 b(T)-8 b(ransform],)27
5957
 
b(page)g(27.\))40 b(In)26 b(particular,)f(the)i Fo(out)e
5958
 
Fu(and)g Fo(ostride)g Fu(parameters)330 4283 y(ha)m(v)m(e)31
5959
 
b(the)f(same)h(sp)s(ecial)d(meaning)h(for)h Fo(FFTW_IN_PLACE)c
5960
 
Fu(transforms)j(as)h(they)g(ha)m(v)m(e)h(for)f Fo(rfftw)p
5961
 
Fu(.)150 4523 y Fi(3.4.2)63 b(Computing)41 b(the)f(Real)h
5962
 
(One-dimensional)g(T)-10 b(ransform)390 4717 y Fo(#include)46
5963
 
b(<rfftw.h>)390 4925 y(void)h(rfftw\(rfftw_plan)c(plan,)j(int)h
5964
 
(howmany,)915 5029 y(fftw_real)e(*in,)i(int)g(istride,)e(int)i(idist,)
5965
 
915 5132 y(fftw_real)e(*out,)i(int)g(ostride,)e(int)i(odist\);)390
5966
 
5340 y(void)g(rfftw_one\(rfftw_plan)42 b(plan,)k(fftw_real)g(*in,)g
5967
 
(fftw_real)f(*out\);)p eop
5968
 
%%Page: 28 30
5969
 
28 29 bop 150 -116 a Fu(28)3232 b(FFTW)275 299 y(The)23
5970
 
b(function)h Fo(rfftw)f Fu(computes)h(the)h(Real)f(One-dimensional)e(F)
5971
 
-8 b(ourier)24 b(T)-8 b(ransform,)25 b(using)d(a)j(plan)150
5972
 
408 y(created)k(b)m(y)e Fo(rfftw_create_plan)c Fu(\(see)29
 
6004
b(When)30 b(the)510 2892 y Fp(FFTW_MEASURE)36 b Fv(option)j(is)f(used,)
 
6005
j(new)d Fp(wisdom)g Fv(will)f(also)i(b)s(e)f(generated)j(if)d(the)h
 
6006
(curren)m(t)510 3002 y(transform)30 b(size)g(is)f(not)i(completely)f
 
6007
(understo)s(o)s(d)f(b)m(y)h(existing)f Fp(wisdom)p Fv(.)225
 
6008
3142 y Ft(\017)60 b Fp(in)p Fv(,)29 b Fp(out)p Fv(,)f
 
6009
Fp(istride)p Fv(,)g Fp(ostride)f Fv(\(only)h(for)h Fp
 
6010
(rfftw_create_plan_specifi)o(c)p Fv(\):)34 b(see)c(corresp)s(ond-)330
 
6011
3251 y(ing)38 b(argumen)m(ts)i(in)e(the)h(description)e(of)i
 
6012
Fp(rfftw)p Fv(.)66 b(\(See)40 b(Section)f(3.4.2)i([Computing)d(the)h
 
6013
(Real)330 3361 y(One-dimensional)23 b(T)-8 b(ransform],)27
 
6014
b(page)g(27.\))40 b(In)26 b(particular,)f(the)i Fp(out)e
 
6015
Fv(and)g Fp(ostride)g Fv(parameters)330 3470 y(ha)m(v)m(e)31
 
6016
b(the)f(same)h(sp)s(ecial)d(meaning)h(for)h Fp(FFTW_IN_PLACE)c
 
6017
Fv(transforms)j(as)h(they)g(ha)m(v)m(e)h(for)f Fp(rfftw)p
 
6018
Fv(.)150 3717 y Fh(3.4.2)63 b(Computing)41 b(the)f(Real)h
 
6019
(One-dimensional)g(T)-10 b(ransform)390 3878 y Fp(#include)46
 
6020
b(<rfftw.h>)390 4086 y(void)h(rfftw\(rfftw_plan)c(plan,)j(int)h
 
6021
(howmany,)915 4190 y(fftw_real)e(*in,)i(int)g(istride,)e(int)i(idist,)
 
6022
915 4294 y(fftw_real)e(*out,)i(int)g(ostride,)e(int)i(odist\);)390
 
6023
4501 y(void)g(rfftw_one\(rfftw_plan)42 b(plan,)k(fftw_real)g(*in,)g
 
6024
(fftw_real)f(*out\);)275 4647 y Fv(The)23 b(function)h
 
6025
Fp(rfftw)f Fv(computes)h(the)h(Real)f(One-dimensional)e(F)-8
 
6026
b(ourier)24 b(T)-8 b(ransform,)25 b(using)d(a)j(plan)150
 
6027
4756 y(created)k(b)m(y)e Fp(rfftw_create_plan)c Fv(\(see)29
5973
6028
b(Section)f(3.4.1)h([Plan)e(Creation)h(for)f(Real)h(One-dimensional)150
5974
 
518 y(T)-8 b(ransforms],)47 b(page)f(26\).)84 b(The)44
5975
 
b(function)f Fo(rfftw_one)f Fu(pro)m(vides)i(a)h(simpli\014ed)40
5976
 
b(in)m(terface)45 b(for)g(the)150 628 y(common)31 b(case)g(of)g(single)
5977
 
e(input)f(arra)m(y)j(of)f(stride)g(1.)275 777 y Fq(Imp)-5
5978
 
b(ortant:)63 b Fu(When)37 b(in)m(v)m(ok)m(ed)h(for)g(an)g
5979
 
(out-of-place,)i Fo(FFTW_COMPLEX_TO_REAL)33 b Fu(transform,)39
5980
 
b(the)150 886 y(input)d(arra)m(y)j(is)e(o)m(v)m(erwritten)h(with)f
 
6029
4866 y(T)-8 b(ransforms],)47 b(page)f(26\).)84 b(The)44
 
6030
b(function)f Fp(rfftw_one)f Fv(pro)m(vides)i(a)h(simpli\014ed)40
 
6031
b(in)m(terface)45 b(for)g(the)150 4975 y(common)31 b(case)g(of)g
 
6032
(single)e(input)f(arra)m(y)j(of)f(stride)g(1.)275 5121
 
6033
y Fr(Imp)-5 b(ortant:)63 b Fv(When)37 b(in)m(v)m(ok)m(ed)h(for)g(an)g
 
6034
(out-of-place,)i Fp(FFTW_COMPLEX_TO_REAL)33 b Fv(transform,)39
 
6035
b(the)150 5230 y(input)d(arra)m(y)j(is)e(o)m(v)m(erwritten)h(with)f
5981
6036
(scratc)m(h)i(v)-5 b(alues)37 b(b)m(y)h(these)h(routines.)62
5982
 
b(The)38 b(input)e(arra)m(y)j(is)e(not)150 996 y(mo)s(di\014ed)28
5983
 
b(for)i Fo(FFTW_REAL_TO_COMPLEX)25 b Fu(transforms.)150
5984
 
1250 y Fi(Argumen)m(ts)225 1457 y Fs(\017)60 b Fo(plan)31
5985
 
b Fu(is)h(the)g(plan)f(created)i(b)m(y)g Fo(rfftw_create_plan)27
5986
 
b Fu(\(see)33 b(Section)g(3.4.1)h([Plan)d(Creation)h(for)330
5987
 
1567 y(Real)e(One-dimensional)e(T)-8 b(ransforms],)30
5988
 
b(page)h(26\).)225 1709 y Fs(\017)60 b Fo(howmany)30
5989
 
b Fu(is)h(the)g(n)m(um)m(b)s(er)g(of)h(transforms)f Fo(rfftw)f
5990
 
Fu(will)f(compute.)45 b(It)32 b(is)f(faster)h(to)g(tell)f(RFFTW)330
5991
 
1818 y(to)g(compute)g(man)m(y)f(transforms,)g(instead)g(of)g(simply)e
5992
 
(calling)h Fo(rfftw)g Fu(man)m(y)h(times.)225 1960 y
5993
 
Fs(\017)60 b Fo(in)p Fu(,)49 b Fo(istride)43 b Fu(and)i
5994
 
Fo(idist)f Fu(describ)s(e)g(the)i(input)e(arra)m(y\(s\).)87
5995
 
b(There)45 b(are)h(t)m(w)m(o)h(cases.)87 b(If)45 b(the)330
5996
 
2070 y Fo(plan)36 b Fu(de\014nes)h(a)h Fo(FFTW_REAL_TO_COMPLEX)32
5997
 
b Fu(transform,)39 b Fo(in)e Fu(is)g(a)g(real)h(arra)m(y)-8
5998
 
b(.)63 b(Otherwise,)38 b(for)330 2179 y Fo(FFTW_COMPLEX_TO_REAL)30
5999
 
b Fu(transforms,)35 b Fo(in)g Fu(is)f(a)h(halfcomplex)f(arra)m(y)i
6000
 
Fq(whose)i(c)-5 b(ontents)38 b(wil)5 b(l)37 b(b)-5 b(e)330
6001
 
2289 y(destr)g(oye)g(d)p Fu(.)225 2431 y Fs(\017)60 b
6002
 
Fo(out)p Fu(,)32 b Fo(ostride)d Fu(and)j Fo(odist)e Fu(describ)s(e)g
 
6037
b(The)38 b(input)e(arra)m(y)j(is)e(not)150 5340 y(mo)s(di\014ed)28
 
6038
b(for)i Fp(FFTW_REAL_TO_COMPLEX)25 b Fv(transforms.)p
 
6039
eop end
 
6040
%%Page: 28 30
 
6041
TeXDict begin 28 29 bop 150 -116 a Fv(28)3232 b(FFTW)150
 
6042
299 y Fh(Argumen)m(ts)225 467 y Ft(\017)60 b Fp(plan)31
 
6043
b Fv(is)h(the)g(plan)f(created)i(b)m(y)g Fp(rfftw_create_plan)27
 
6044
b Fv(\(see)33 b(Section)g(3.4.1)h([Plan)d(Creation)h(for)330
 
6045
576 y(Real)e(One-dimensional)e(T)-8 b(ransforms],)30
 
6046
b(page)h(26\).)225 713 y Ft(\017)60 b Fp(howmany)30 b
 
6047
Fv(is)h(the)g(n)m(um)m(b)s(er)g(of)h(transforms)f Fp(rfftw)f
 
6048
Fv(will)f(compute.)45 b(It)32 b(is)f(faster)h(to)g(tell)f(RFFTW)330
 
6049
822 y(to)g(compute)g(man)m(y)f(transforms,)g(instead)g(of)g(simply)e
 
6050
(calling)h Fp(rfftw)g Fv(man)m(y)h(times.)225 959 y Ft(\017)60
 
6051
b Fp(in)p Fv(,)49 b Fp(istride)43 b Fv(and)i Fp(idist)f
 
6052
Fv(describ)s(e)g(the)i(input)e(arra)m(y\(s\).)87 b(There)45
 
6053
b(are)h(t)m(w)m(o)h(cases.)87 b(If)45 b(the)330 1069
 
6054
y Fp(plan)36 b Fv(de\014nes)h(a)h Fp(FFTW_REAL_TO_COMPLEX)32
 
6055
b Fv(transform,)39 b Fp(in)e Fv(is)g(a)g(real)h(arra)m(y)-8
 
6056
b(.)63 b(Otherwise,)38 b(for)330 1178 y Fp(FFTW_COMPLEX_TO_REAL)30
 
6057
b Fv(transforms,)35 b Fp(in)g Fv(is)f(a)h(halfcomplex)f(arra)m(y)i
 
6058
Fr(whose)i(c)-5 b(ontents)38 b(wil)5 b(l)37 b(b)-5 b(e)330
 
6059
1288 y(destr)g(oye)g(d)p Fv(.)225 1424 y Ft(\017)60 b
 
6060
Fp(out)p Fv(,)32 b Fp(ostride)d Fv(and)j Fp(odist)e Fv(describ)s(e)g
6003
6061
(the)i(output)g(arra)m(y\(s\),)h(and)e(ha)m(v)m(e)i(the)f(same)h
6004
 
(meaning)e(as)330 2540 y(the)g(corresp)s(onding)d(parameters)j(for)f
6005
 
(the)g(input)f(arra)m(y)-8 b(.)379 2682 y Fs(\000)60
6006
 
b Fq(In-plac)-5 b(e)46 b(tr)-5 b(ansforms)7 b Fu(:)73
6007
 
b(If)44 b(the)h Fo(plan)e Fu(sp)s(eci\014es)g(an)i(in-place)e
6008
 
(transform,)48 b Fo(ostride)43 b Fu(and)510 2792 y Fo(odist)33
6009
 
b Fu(are)h(alw)m(a)m(ys)h(ignored.)51 b(If)33 b Fo(out)g
6010
 
Fu(is)h Fo(NULL)p Fu(,)g Fo(out)f Fu(is)g(ignored,)h(to)s(o.)53
6011
 
b(Otherwise,)34 b Fo(out)f Fu(is)510 2901 y(in)m(terpreted)h(as)h(a)g
6012
 
(p)s(oin)m(ter)f(to)i(an)e(arra)m(y)i(of)f Fo(n)f Fu(complex)h(n)m(um)m
6013
 
(b)s(ers,)f(that)i(FFTW)f(will)d(use)510 3011 y(as)j(temp)s(orary)f
 
6062
(meaning)e(as)330 1534 y(the)g(corresp)s(onding)d(parameters)j(for)f
 
6063
(the)g(input)f(arra)m(y)-8 b(.)379 1671 y Ft(\000)60
 
6064
b Fr(In-plac)-5 b(e)46 b(tr)-5 b(ansforms)7 b Fv(:)73
 
6065
b(If)44 b(the)h Fp(plan)e Fv(sp)s(eci\014es)g(an)i(in-place)e
 
6066
(transform,)48 b Fp(ostride)43 b Fv(and)510 1780 y Fp(odist)33
 
6067
b Fv(are)h(alw)m(a)m(ys)h(ignored.)51 b(If)33 b Fp(out)g
 
6068
Fv(is)h Fp(NULL)p Fv(,)g Fp(out)f Fv(is)g(ignored,)h(to)s(o.)53
 
6069
b(Otherwise,)34 b Fp(out)f Fv(is)510 1890 y(in)m(terpreted)h(as)h(a)g
 
6070
(p)s(oin)m(ter)f(to)i(an)e(arra)m(y)i(of)f Fp(n)f Fv(complex)h(n)m(um)m
 
6071
(b)s(ers,)f(that)i(FFTW)f(will)d(use)510 2000 y(as)j(temp)s(orary)f
6014
6072
(space)h(to)h(p)s(erform)d(the)i(in-place)e(computation.)54
6015
 
b Fo(out)34 b Fu(is)f(used)h(as)h(scratc)m(h)510 3120
 
6073
b Fp(out)34 b Fv(is)f(used)h(as)h(scratc)m(h)510 2109
6016
6074
y(space)41 b(and)g(its)f(con)m(ten)m(ts)j(destro)m(y)m(ed.)73
6017
 
b(In)40 b(this)g(case,)k Fo(out)c Fu(m)m(ust)h(b)s(e)f(an)h(ordinary)e
6018
 
(arra)m(y)510 3230 y(whose)30 b(elemen)m(ts)h(are)g(con)m(tiguous)f(in)
6019
 
f(memory)i(\(no)f(striding\).)275 3412 y(The)40 b(function)g
6020
 
Fo(rfftw_one)f Fu(transforms)i(a)g(single,)i(con)m(tiguous)f(input)d
6021
 
(arra)m(y)j(to)g(a)g(con)m(tiguous)150 3521 y(output)30
 
6075
b(In)40 b(this)g(case,)k Fp(out)c Fv(m)m(ust)h(b)s(e)f(an)h(ordinary)e
 
6076
(arra)m(y)510 2219 y(whose)30 b(elemen)m(ts)h(are)g(con)m(tiguous)f(in)
 
6077
f(memory)i(\(no)f(striding\).)275 2385 y(The)40 b(function)g
 
6078
Fp(rfftw_one)f Fv(transforms)i(a)g(single,)i(con)m(tiguous)f(input)d
 
6079
(arra)m(y)j(to)g(a)g(con)m(tiguous)150 2494 y(output)30
6022
6080
b(arra)m(y)-8 b(.)42 b(By)30 b(de\014nition,)f(the)h(call)390
6023
 
3665 y Fo(rfftw_one\(plan,)44 b(in,)j(out\))275 3814
6024
 
y Fu(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 3957 y Fo(rfftw\(plan,)45
6025
 
b(1,)i(in,)g(1,)g(1,)g(out,)g(1,)g(1\))150 4211 y Fi(3.4.3)63
 
6081
2627 y Fp(rfftw_one\(plan,)44 b(in,)j(out\))275 2766
 
6082
y Fv(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 2899 y Fp(rfftw\(plan,)45
 
6083
b(1,)i(in,)g(1,)g(0,)g(out,)g(1,)g(0\))150 3132 y Fh(3.4.3)63
6026
6084
b(Destro)m(ying)41 b(a)g(Real)f(One-dimensional)i(Plan)390
6027
 
4413 y Fo(#include)k(<rfftw.h>)390 4620 y(void)h
 
6085
3294 y Fp(#include)k(<rfftw.h>)390 3501 y(void)h
6028
6086
(rfftw_destroy_plan\(rfft)o(w_pl)o(an)41 b(plan\);)275
6029
 
4769 y Fu(The)h(function)g Fo(rfftw_destroy_plan)d Fu(frees)k(the)h
6030
 
(plan)e Fo(plan)g Fu(and)h(releases)g(all)f(the)i(memory)150
6031
 
4879 y(asso)s(ciated)31 b(with)e(it.)40 b(After)31 b(destruction,)f(a)g
6032
 
(plan)f(is)h(no)g(longer)g(v)-5 b(alid.)150 5133 y Fi(3.4.4)63
6033
 
b(What)40 b(RFFTW)h(Really)f(Computes)275 5340 y Fu(In)29
 
6087
3640 y Fv(The)h(function)g Fp(rfftw_destroy_plan)d Fv(frees)k(the)h
 
6088
(plan)e Fp(plan)g Fv(and)h(releases)g(all)f(the)i(memory)150
 
6089
3750 y(asso)s(ciated)31 b(with)e(it.)40 b(After)31 b(destruction,)f(a)g
 
6090
(plan)f(is)h(no)g(longer)g(v)-5 b(alid.)150 3982 y Fh(3.4.4)63
 
6091
b(What)40 b(RFFTW)h(Really)f(Computes)275 4179 y Fv(In)29
6034
6092
b(this)g(section,)i(w)m(e)g(de\014ne)f(precisely)f(what)h(RFFTW)h
6035
 
(computes.)p eop
 
6093
(computes.)275 4318 y(The)40 b(real)g(to)h(complex)g(\()p
 
6094
Fp(FFTW_REAL_TO_COMPLEX)p Fv(\))36 b(transform)k(of)g(a)i(real)e(arra)m
 
6095
(y)h Fm(X)48 b Fv(of)41 b(size)f Fm(n)150 4428 y Fv(computes)31
 
6096
b(an)f(hermitian)e(arra)m(y)j Fm(Y)20 b Fv(,)31 b(where)1503
 
6097
4712 y Fm(Y)1556 4726 y Fl(i)1608 4712 y Fv(=)1704 4606
 
6098
y Fl(n)p Fk(\000)p Fo(1)1707 4631 y Fg(X)1710 4808 y
 
6099
Fl(j)s Fo(=0)1846 4712 y Fm(X)1921 4726 y Fl(j)1956 4712
 
6100
y Fm(e)1998 4675 y Fk(\000)p Fo(2)p Fl(\031)r(ij)2177
 
6101
4630 y Fk(p)p 2233 4630 85 3 v 2233 4675 a(\000)p Fo(1)p
 
6102
Fl(=n)150 5011 y Fv(\(That)26 b Fm(Y)45 b Fv(is)24 b(a)i(hermitian)d
 
6103
(arra)m(y)j(is)e(not)h(in)m(tended)g(to)h(b)s(e)e(ob)m(vious,)i
 
6104
(although)f(the)g(pro)s(of)g(is)f(easy)-8 b(.\))40 b(The)150
 
6105
5121 y(hermitian)32 b(arra)m(y)i Fm(Y)54 b Fv(is)32 b(stored)i(in)f
 
6106
(halfcomplex)f(order)h(\(see)i(Section)e(3.1)i([Data)h(T)m(yp)s(es],)e
 
6107
(page)g(17\).)150 5230 y(Curren)m(tly)-8 b(,)24 b(RFFTW)h(pro)m(vides)f
 
6108
(no)g(w)m(a)m(y)h(to)g(compute)g(a)g(real)f(to)h(complex)f(transform)f
 
6109
(with)g(a)i(p)s(ositiv)m(e)150 5340 y(sign)k(in)g(the)i(exp)s(onen)m
 
6110
(t.)p eop end
6036
6111
%%Page: 29 31
6037
 
29 30 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
6038
 
b(Reference)2354 b(29)275 299 y(The)40 b(real)g(to)h(complex)g(\()p
6039
 
Fo(FFTW_REAL_TO_COMPLEX)p Fu(\))36 b(transform)k(of)g(a)i(real)e(arra)m
6040
 
(y)h Fl(X)48 b Fu(of)41 b(size)f Fl(n)150 408 y Fu(computes)31
6041
 
b(an)f(hermitian)e(arra)m(y)j Fl(Y)20 b Fu(,)31 b(where)1503
6042
 
692 y Fl(Y)1556 706 y Fk(i)1608 692 y Fu(=)1704 586 y
6043
 
Fk(n)p Fj(\000)p Fn(1)1707 611 y Fh(X)1710 788 y Fk(j)s
6044
 
Fn(=0)1846 692 y Fl(X)1921 706 y Fk(j)1956 692 y Fl(e)1998
6045
 
654 y Fj(\000)p Fn(2)p Fk(\031)r(ij)2177 609 y Fj(p)p
6046
 
2233 609 85 3 v 2233 654 a(\000)p Fn(1)p Fk(=n)150 990
6047
 
y Fu(\(That)26 b Fl(Y)45 b Fu(is)24 b(a)i(hermitian)d(arra)m(y)j(is)e
6048
 
(not)h(in)m(tended)g(to)h(b)s(e)e(ob)m(vious,)i(although)f(the)g(pro)s
6049
 
(of)g(is)f(easy)-8 b(.\))40 b(The)150 1100 y(hermitian)32
6050
 
b(arra)m(y)i Fl(Y)54 b Fu(is)32 b(stored)i(in)f(halfcomplex)f(order)h
6051
 
(\(see)i(Section)e(3.1)i([Data)h(T)m(yp)s(es],)e(page)g(17\).)150
6052
 
1209 y(Curren)m(tly)-8 b(,)24 b(RFFTW)h(pro)m(vides)f(no)g(w)m(a)m(y)h
6053
 
(to)g(compute)g(a)g(real)f(to)h(complex)f(transform)f(with)g(a)i(p)s
6054
 
(ositiv)m(e)150 1319 y(sign)k(in)g(the)i(exp)s(onen)m(t.)275
6055
 
1457 y(The)d(complex)g(to)i(real)e(\()p Fo(FFTW_COMPLEX_TO_REAL)p
6056
 
Fu(\))c(transform)29 b(of)g(a)g(hermitian)e(arra)m(y)i
6057
 
Fl(X)36 b Fu(of)29 b(size)150 1567 y Fl(n)h Fu(computes)g(a)h(real)f
6058
 
(arra)m(y)h Fl(Y)20 b Fu(,)31 b(where)1529 1850 y Fl(Y)1582
6059
 
1864 y Fk(i)1634 1850 y Fu(=)1730 1745 y Fk(n)p Fj(\000)p
6060
 
Fn(1)1733 1769 y Fh(X)1736 1946 y Fk(j)s Fn(=0)1872 1850
6061
 
y Fl(X)1947 1864 y Fk(j)1982 1850 y Fl(e)2024 1813 y
6062
 
Fn(2)p Fk(\031)r(ij)2151 1768 y Fj(p)p 2207 1768 V 2207
6063
 
1813 a(\000)p Fn(1)p Fk(=n)150 2148 y Fu(\(That)39 b
6064
 
Fl(Y)58 b Fu(is)37 b(a)i(real)f(arra)m(y)h(is)f(not)g(in)m(tended)g(to)
6065
 
h(b)s(e)f(ob)m(vious,)i(although)d(the)i(pro)s(of)f(is)f(easy)-8
6066
 
b(.\))66 b(The)150 2258 y(hermitian)43 b(input)g(arra)m(y)i
6067
 
Fl(X)53 b Fu(is)44 b(stored)h(in)e(halfcomplex)h(order)h(\(see)g
6068
 
(Section)g(3.1)h([Data)h(T)m(yp)s(es],)150 2368 y(page)40
6069
 
b(17\).)68 b(Curren)m(tly)-8 b(,)40 b(RFFTW)f(pro)m(vides)f(no)h(w)m(a)
6070
 
m(y)h(to)g(compute)f(a)h(complex)e(to)i(real)f(transform)150
6071
 
2477 y(with)29 b(a)i(negativ)m(e)g(sign)f(in)f(the)h(exp)s(onen)m(t.)
6072
 
275 2615 y(Lik)m(e)j(FFTW,)i(RFFTW)f(computes)g(an)g(unnormalized)d
6073
 
(transform.)50 b(In)33 b(other)h(w)m(ords,)g(applying)150
6074
 
2725 y(the)44 b(real)f(to)i(complex)e(\(forw)m(ard\))h(and)f(then)h
6075
 
(the)f(complex)h(to)g(real)g(\(bac)m(kw)m(ard\))h(transform)e(will)150
6076
 
2835 y(m)m(ultiply)28 b(the)i(input)f(b)m(y)h Fl(n)p
6077
 
Fu(.)150 3101 y Ft(3.5)68 b(Real)46 b(Multi-dimensional)h(T)-11
6078
 
b(ransforms)44 b(Reference)275 3298 y Fu(The)39 b(m)m(ulti-dimensional)
6079
 
c(real)40 b(routines)e(are)i(generally)f(pre\014xed)f(with)h
6080
 
Fo(rfftwnd_)p Fu(.)66 b(Programs)150 3407 y(using)25
6081
 
b(RFFTWND)i(should)e(b)s(e)g(link)m(ed)g(with)g Fo(-lrfftw)j(-lfftw)h
6082
 
(-lm)d Fu(on)g(Unix)f(systems,)i(or)g(with)e(the)150
6083
 
3517 y(FFTW,)31 b(RFFTW,)h(and)d(standard)h(math)g(libraries)e(in)h
6084
 
(general.)150 3748 y Fi(3.5.1)63 b(Plan)40 b(Creation)h(for)g(Real)f
6085
 
(Multi-dimensional)i(T)-10 b(ransforms)390 3939 y Fo(#include)46
6086
 
b(<rfftw.h>)390 4147 y(rfftwnd_plan)e(rfftwnd_create_plan\(int)e(rank,)
6087
 
k(const)h(int)g(*n,)1965 4250 y(fftw_direction)d(dir,)j(int)f(flags\);)
6088
 
390 4458 y(rfftwnd_plan)e(rfftw2d_create_plan\(int)e(nx,)47
6089
 
b(int)g(ny,)1965 4562 y(fftw_direction)d(dir,)j(int)f(flags\);)390
6090
 
4769 y(rfftwnd_plan)e(rfftw3d_create_plan\(int)e(nx,)47
6091
 
b(int)g(ny,)g(int)g(nz,)1965 4873 y(fftw_direction)d(dir,)j(int)f
6092
 
(flags\);)275 5011 y Fu(The)25 b(function)g Fo(rfftwnd_create_plan)20
6093
 
b Fu(creates)28 b(a)e(plan,)g(whic)m(h)f(is)g(a)h(data)h(structure)e
6094
 
(con)m(taining)150 5121 y(all)e(the)h(information)e(that)i
6095
 
Fo(rfftwnd)e Fu(needs)h(in)f(order)i(to)g(compute)g(a)g(m)m
6096
 
(ulti-dimensional)c(real)j(F)-8 b(ourier)150 5230 y(transform.)42
 
6112
TeXDict begin 29 30 bop 150 -116 a Fv(Chapter)30 b(3:)41
 
6113
b(FFTW)31 b(Reference)2354 b(29)275 299 y(The)28 b(complex)g(to)i(real)
 
6114
e(\()p Fp(FFTW_COMPLEX_TO_REAL)p Fv(\))c(transform)29
 
6115
b(of)g(a)g(hermitian)e(arra)m(y)i Fm(X)36 b Fv(of)29
 
6116
b(size)150 408 y Fm(n)h Fv(computes)g(a)h(real)f(arra)m(y)h
 
6117
Fm(Y)20 b Fv(,)31 b(where)1529 688 y Fm(Y)1582 702 y
 
6118
Fl(i)1634 688 y Fv(=)1730 583 y Fl(n)p Fk(\000)p Fo(1)1733
 
6119
607 y Fg(X)1736 784 y Fl(j)s Fo(=0)1872 688 y Fm(X)1947
 
6120
702 y Fl(j)1982 688 y Fm(e)2024 651 y Fo(2)p Fl(\031)r(ij)2151
 
6121
606 y Fk(p)p 2207 606 85 3 v 2207 651 a(\000)p Fo(1)p
 
6122
Fl(=n)150 983 y Fv(\(That)39 b Fm(Y)58 b Fv(is)37 b(a)i(real)f(arra)m
 
6123
(y)h(is)f(not)g(in)m(tended)g(to)h(b)s(e)f(ob)m(vious,)i(although)d
 
6124
(the)i(pro)s(of)f(is)f(easy)-8 b(.\))66 b(The)150 1092
 
6125
y(hermitian)43 b(input)g(arra)m(y)i Fm(X)53 b Fv(is)44
 
6126
b(stored)h(in)e(halfcomplex)h(order)h(\(see)g(Section)g(3.1)h([Data)h
 
6127
(T)m(yp)s(es],)150 1202 y(page)40 b(17\).)68 b(Curren)m(tly)-8
 
6128
b(,)40 b(RFFTW)f(pro)m(vides)f(no)h(w)m(a)m(y)h(to)g(compute)f(a)h
 
6129
(complex)e(to)i(real)f(transform)150 1311 y(with)29 b(a)i(negativ)m(e)g
 
6130
(sign)f(in)f(the)h(exp)s(onen)m(t.)275 1447 y(Lik)m(e)j(FFTW,)i(RFFTW)f
 
6131
(computes)g(an)g(unnormalized)d(transform.)50 b(In)33
 
6132
b(other)h(w)m(ords,)g(applying)150 1557 y(the)44 b(real)f(to)i(complex)
 
6133
e(\(forw)m(ard\))h(and)f(then)h(the)f(complex)h(to)g(real)g(\(bac)m(kw)
 
6134
m(ard\))h(transform)e(will)150 1666 y(m)m(ultiply)28
 
6135
b(the)i(input)f(b)m(y)h Fm(n)p Fv(.)150 1927 y Fu(3.5)68
 
6136
b(Real)46 b(Multi-dimensional)h(T)-11 b(ransforms)44
 
6137
b(Reference)275 2121 y Fv(The)39 b(m)m(ulti-dimensional)c(real)40
 
6138
b(routines)e(are)i(generally)f(pre\014xed)f(with)h Fp(rfftwnd_)p
 
6139
Fv(.)66 b(Programs)150 2230 y(using)25 b(RFFTWND)i(should)e(b)s(e)g
 
6140
(link)m(ed)g(with)g Fp(-lrfftw)j(-lfftw)h(-lm)d Fv(on)g(Unix)f
 
6141
(systems,)i(or)g(with)e(the)150 2340 y(FFTW,)31 b(RFFTW,)h(and)d
 
6142
(standard)h(math)g(libraries)e(in)h(general.)150 2566
 
6143
y Fh(3.5.1)63 b(Plan)40 b(Creation)h(for)g(Real)f(Multi-dimensional)i
 
6144
(T)-10 b(ransforms)390 2728 y Fp(#include)46 b(<rfftw.h>)390
 
6145
2936 y(rfftwnd_plan)e(rfftwnd_create_plan\(int)e(rank,)k(const)h(int)g
 
6146
(*n,)1965 3040 y(fftw_direction)d(dir,)j(int)f(flags\);)390
 
6147
3247 y(rfftwnd_plan)e(rfftw2d_create_plan\(int)e(nx,)47
 
6148
b(int)g(ny,)1965 3351 y(fftw_direction)d(dir,)j(int)f(flags\);)390
 
6149
3559 y(rfftwnd_plan)e(rfftw3d_create_plan\(int)e(nx,)47
 
6150
b(int)g(ny,)g(int)g(nz,)1965 3662 y(fftw_direction)d(dir,)j(int)f
 
6151
(flags\);)275 3798 y Fv(The)25 b(function)g Fp(rfftwnd_create_plan)20
 
6152
b Fv(creates)28 b(a)e(plan,)g(whic)m(h)f(is)g(a)h(data)h(structure)e
 
6153
(con)m(taining)150 3908 y(all)e(the)h(information)e(that)i
 
6154
Fp(rfftwnd)e Fv(needs)h(in)f(order)i(to)g(compute)g(a)g(m)m
 
6155
(ulti-dimensional)c(real)j(F)-8 b(ourier)150 4017 y(transform.)42
6097
6156
b(Y)-8 b(ou)32 b(can)f(create)i(as)e(man)m(y)g(plans)f(as)h(y)m(ou)g
6098
6157
(need,)h(but)e(only)g(one)h(plan)f(for)h(a)g(giv)m(en)g(arra)m(y)150
6099
 
5340 y(size)j(is)e(required)g(\(a)i(plan)f(can)h(b)s(e)f(reused)g(man)m
6100
 
(y)g(times\).)51 b(The)33 b(functions)f Fo(rfftw2d_create_plan)p
6101
 
eop
 
6158
4127 y(size)j(is)e(required)g(\(a)i(plan)f(can)h(b)s(e)f(reused)g(man)m
 
6159
(y)g(times\).)51 b(The)33 b(functions)f Fp(rfftw2d_create_plan)150
 
6160
4236 y Fv(and)41 b Fp(rfftw3d_create_plan)35 b Fv(are)42
 
6161
b(optional,)h(alternativ)m(e)f(in)m(terfaces)f(to)h Fp
 
6162
(rfftwnd_create_plan)150 4346 y Fv(for)30 b(t)m(w)m(o)i(and)e(three)g
 
6163
(dimensions,)e(resp)s(ectiv)m(ely)-8 b(.)275 4482 y Fp
 
6164
(rfftwnd_create_plan)27 b Fv(returns)k(a)i(v)-5 b(alid)31
 
6165
b(plan,)h(or)g Fp(NULL)f Fv(if,)i(for)f(some)h(reason,)g(the)g(plan)e
 
6166
(can't)150 4591 y(b)s(e)f(created.)42 b(This)28 b(can)j(happ)s(en)d(if)
 
6167
i(the)g(argumen)m(ts)h(are)g(in)m(v)-5 b(alid)28 b(in)h(some)i(w)m(a)m
 
6168
(y)g(\(e.g.)42 b(if)29 b Fp(rank)h(<)g Fv(0\).)150 4818
 
6169
y Fh(Argumen)m(ts)225 4986 y Ft(\017)60 b Fp(rank)27
 
6170
b Fv(is)g(the)h(dimensionalit)m(y)d(of)j(the)g(arra)m(ys)g(to)g(b)s(e)f
 
6171
(transformed.)40 b(It)27 b(can)i(b)s(e)e(an)m(y)h(non-negativ)m(e)330
 
6172
5095 y(in)m(teger.)225 5230 y Ft(\017)60 b Fp(n)22 b
 
6173
Fv(is)g(a)g(p)s(oin)m(ter)g(to)h(an)f(arra)m(y)h(of)g
 
6174
Fp(rank)e Fv(in)m(tegers,)k(giving)c(the)i(size)f(of)h(eac)m(h)g
 
6175
(dimension)d(of)j(the)g(arra)m(ys)330 5340 y(to)35 b(b)s(e)e
 
6176
(transformed.)51 b(Note)36 b(that)e(these)h(are)f(alw)m(a)m(ys)h(the)f
 
6177
(dimensions)e(of)i(the)g Fr(r)-5 b(e)g(al)45 b Fv(arra)m(ys;)37
 
6178
b(the)p eop end
6102
6179
%%Page: 30 32
6103
 
30 31 bop 150 -116 a Fu(30)3232 b(FFTW)150 299 y(and)41
6104
 
b Fo(rfftw3d_create_plan)35 b Fu(are)42 b(optional,)h(alternativ)m(e)f
6105
 
(in)m(terfaces)f(to)h Fo(rfftwnd_create_plan)150 408
6106
 
y Fu(for)30 b(t)m(w)m(o)i(and)e(three)g(dimensions,)e(resp)s(ectiv)m
6107
 
(ely)-8 b(.)275 546 y Fo(rfftwnd_create_plan)27 b Fu(returns)k(a)i(v)-5
6108
 
b(alid)31 b(plan,)h(or)g Fo(NULL)f Fu(if,)i(for)f(some)h(reason,)g(the)
6109
 
g(plan)e(can't)150 655 y(b)s(e)f(created.)42 b(This)28
6110
 
b(can)j(happ)s(en)d(if)i(the)g(argumen)m(ts)h(are)g(in)m(v)-5
6111
 
b(alid)28 b(in)h(some)i(w)m(a)m(y)g(\(e.g.)42 b(if)29
6112
 
b Fo(rank)h(<)g Fu(0\).)150 885 y Fi(Argumen)m(ts)225
6113
 
1080 y Fs(\017)60 b Fo(rank)27 b Fu(is)g(the)h(dimensionalit)m(y)d(of)j
6114
 
(the)g(arra)m(ys)g(to)g(b)s(e)f(transformed.)40 b(It)27
6115
 
b(can)i(b)s(e)e(an)m(y)h(non-negativ)m(e)330 1190 y(in)m(teger.)225
6116
 
1325 y Fs(\017)60 b Fo(n)22 b Fu(is)g(a)g(p)s(oin)m(ter)g(to)h(an)f
6117
 
(arra)m(y)h(of)g Fo(rank)e Fu(in)m(tegers,)k(giving)c(the)i(size)f(of)h
6118
 
(eac)m(h)g(dimension)d(of)j(the)g(arra)m(ys)330 1435
6119
 
y(to)35 b(b)s(e)e(transformed.)51 b(Note)36 b(that)e(these)h(are)f(alw)
6120
 
m(a)m(ys)h(the)f(dimensions)e(of)i(the)g Fq(r)-5 b(e)g(al)45
6121
 
b Fu(arra)m(ys;)37 b(the)330 1545 y(complex)26 b(arra)m(ys)g(ha)m(v)m
6122
 
(e)h(di\013eren)m(t)e(dimensions)f(\(see)i(Section)g(3.5.3)i([Arra)m(y)
6123
 
e(Dimensions)e(for)i(Real)330 1654 y(Multi-dimensional)d(T)-8
6124
 
b(ransforms],)26 b(page)h(32\).)41 b(These)26 b(sizes,)i(whic)m(h)d(m)m
6125
 
(ust)h(b)s(e)g(p)s(ositiv)m(e)f(in)m(tegers,)330 1764
6126
 
y(corresp)s(ond)20 b(to)i(the)g(dimensions)c(of)k(ro)m(w-ma)5
6127
 
b(jor)22 b(arra)m(ys|i.e.)37 b Fo(n[0])21 b Fu(is)f(the)h(size)h(of)f
6128
 
(the)h(dimension)330 1873 y(whose)32 b(indices)d(v)-5
6129
 
b(ary)32 b(most)g(slo)m(wly)-8 b(,)32 b(and)f(so)h(on.)45
6130
 
b(\(See)32 b(Section)g(2.5)h([Multi-dimensional)28 b(Arra)m(y)330
6131
 
1983 y(F)-8 b(ormat],)32 b(page)f(11,)h(for)e(more)g(information.\))379
6132
 
2119 y Fs(\000)60 b Fu(See)34 b(Section)g(3.4.1)h([Plan)e(Creation)h
6133
 
(for)f(Real)h(One-dimensional)d(T)-8 b(ransforms],)34
6134
 
b(page)h(26,)510 2228 y(for)30 b(more)h(information)d(regarding)i
6135
 
(optimal)f(arra)m(y)i(sizes.)225 2364 y Fs(\017)60 b
6136
 
Fo(nx)30 b Fu(and)h Fo(ny)f Fu(in)g Fo(rfftw2d_create_plan)25
6137
 
b Fu(are)32 b(p)s(ositiv)m(e)d(in)m(tegers)j(sp)s(ecifying)c(the)k
6138
 
(dimensions)c(of)330 2474 y(the)34 b(rank)f(2)h(arra)m(y)g(to)h(b)s(e)e
6139
 
(transformed.)50 b(i.e.)h(they)34 b(sp)s(ecify)e(that)i(the)g
6140
 
(transform)f(will)e(op)s(erate)330 2583 y(on)k Fo(nx)30
6141
 
b(x)g(ny)35 b Fu(arra)m(ys)g(in)f(ro)m(w-ma)5 b(jor)36
6142
 
b(order,)g(where)f Fo(nx)g Fu(is)f(the)h(n)m(um)m(b)s(er)f(of)i(ro)m
6143
 
(ws)f(and)g Fo(ny)f Fu(is)h(the)330 2693 y(n)m(um)m(b)s(er)29
6144
 
b(of)i(columns.)225 2829 y Fs(\017)60 b Fo(nx)p Fu(,)27
6145
 
b Fo(ny)f Fu(and)g Fo(nz)g Fu(in)f Fo(rfftw3d_create_plan)c
6146
 
Fu(are)27 b(p)s(ositiv)m(e)f(in)m(tegers)h(sp)s(ecifying)d(the)j
6147
 
(dimensions)330 2938 y(of)g(the)h(rank)e(3)i(arra)m(y)g(to)g(b)s(e)e
6148
 
(transformed.)39 b(i.e.)h(they)27 b(sp)s(ecify)f(that)i(the)f
6149
 
(transform)g(will)d(op)s(erate)330 3048 y(on)30 b Fo(nx)g(x)g(ny)g(x)g
6150
 
(nz)g Fu(arra)m(ys)g(in)f(ro)m(w-ma)5 b(jor)31 b(order.)225
6151
 
3184 y Fs(\017)60 b Fo(dir)31 b Fu(is)g(the)g(direction)g(of)h(the)g
6152
 
(desired)e(transform,)h(either)h Fo(FFTW_REAL_TO_COMPLEX)26
6153
 
b Fu(or)31 b Fo(FFTW_)330 3293 y(COMPLEX_TO_REAL)p Fu(,)26
6154
 
b(corresp)s(onding)j(to)i Fo(FFTW_FORWARD)c Fu(or)j Fo(FFTW_BACKWARD)p
6155
 
Fu(,)d(resp)s(ectiv)m(ely)-8 b(.)225 3429 y Fs(\017)60
6156
 
b Fo(flags)29 b Fu(is)g(a)i(b)s(o)s(olean)e(OR)h(\(`)p
6157
 
Fo(|)p Fu('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m(wing:)379
6158
 
3565 y Fs(\000)60 b Fo(FFTW_MEASURE)p Fu(:)33 b(this)19
6159
 
b(\015ag)j(tells)e(FFTW)h(to)h(\014nd)d(the)i(optimal)f(plan)g(b)m(y)g
6160
 
(actually)h Fq(c)-5 b(omputing)510 3675 y Fu(sev)m(eral)31
 
6180
TeXDict begin 30 31 bop 150 -116 a Fv(30)3232 b(FFTW)330
 
6181
299 y(complex)26 b(arra)m(ys)g(ha)m(v)m(e)h(di\013eren)m(t)e
 
6182
(dimensions)f(\(see)i(Section)g(3.5.3)i([Arra)m(y)e(Dimensions)e(for)i
 
6183
(Real)330 408 y(Multi-dimensional)d(T)-8 b(ransforms],)26
 
6184
b(page)h(32\).)41 b(These)26 b(sizes,)i(whic)m(h)d(m)m(ust)h(b)s(e)g(p)
 
6185
s(ositiv)m(e)f(in)m(tegers,)330 518 y(corresp)s(ond)20
 
6186
b(to)i(the)g(dimensions)c(of)k(ro)m(w-ma)5 b(jor)22 b(arra)m(ys|i.e.)37
 
6187
b Fp(n[0])21 b Fv(is)f(the)h(size)h(of)f(the)h(dimension)330
 
6188
628 y(whose)32 b(indices)d(v)-5 b(ary)32 b(most)g(slo)m(wly)-8
 
6189
b(,)32 b(and)f(so)h(on.)45 b(\(See)32 b(Section)g(2.5)h
 
6190
([Multi-dimensional)28 b(Arra)m(y)330 737 y(F)-8 b(ormat],)32
 
6191
b(page)f(11,)h(for)e(more)g(information.\))379 872 y
 
6192
Ft(\000)60 b Fv(See)34 b(Section)g(3.4.1)h([Plan)e(Creation)h(for)f
 
6193
(Real)h(One-dimensional)d(T)-8 b(ransforms],)34 b(page)h(26,)510
 
6194
982 y(for)30 b(more)h(information)d(regarding)i(optimal)f(arra)m(y)i
 
6195
(sizes.)225 1116 y Ft(\017)60 b Fp(nx)30 b Fv(and)h Fp(ny)f
 
6196
Fv(in)g Fp(rfftw2d_create_plan)25 b Fv(are)32 b(p)s(ositiv)m(e)d(in)m
 
6197
(tegers)j(sp)s(ecifying)c(the)k(dimensions)c(of)330 1226
 
6198
y(the)34 b(rank)f(2)h(arra)m(y)g(to)h(b)s(e)e(transformed.)50
 
6199
b(i.e.)h(they)34 b(sp)s(ecify)e(that)i(the)g(transform)f(will)e(op)s
 
6200
(erate)330 1335 y(on)k Fp(nx)30 b(x)g(ny)35 b Fv(arra)m(ys)g(in)f(ro)m
 
6201
(w-ma)5 b(jor)36 b(order,)g(where)f Fp(nx)g Fv(is)f(the)h(n)m(um)m(b)s
 
6202
(er)f(of)i(ro)m(ws)f(and)g Fp(ny)f Fv(is)h(the)330 1445
 
6203
y(n)m(um)m(b)s(er)29 b(of)i(columns.)225 1580 y Ft(\017)60
 
6204
b Fp(nx)p Fv(,)27 b Fp(ny)f Fv(and)g Fp(nz)g Fv(in)f
 
6205
Fp(rfftw3d_create_plan)c Fv(are)27 b(p)s(ositiv)m(e)f(in)m(tegers)h(sp)
 
6206
s(ecifying)d(the)j(dimensions)330 1689 y(of)g(the)h(rank)e(3)i(arra)m
 
6207
(y)g(to)g(b)s(e)e(transformed.)39 b(i.e.)h(they)27 b(sp)s(ecify)f(that)
 
6208
i(the)f(transform)g(will)d(op)s(erate)330 1799 y(on)30
 
6209
b Fp(nx)g(x)g(ny)g(x)g(nz)g Fv(arra)m(ys)g(in)f(ro)m(w-ma)5
 
6210
b(jor)31 b(order.)225 1934 y Ft(\017)60 b Fp(dir)31 b
 
6211
Fv(is)g(the)g(direction)g(of)h(the)g(desired)e(transform,)h(either)h
 
6212
Fp(FFTW_REAL_TO_COMPLEX)26 b Fv(or)31 b Fp(FFTW_)330
 
6213
2043 y(COMPLEX_TO_REAL)p Fv(,)26 b(corresp)s(onding)j(to)i
 
6214
Fp(FFTW_FORWARD)c Fv(or)j Fp(FFTW_BACKWARD)p Fv(,)d(resp)s(ectiv)m(ely)
 
6215
-8 b(.)225 2178 y Ft(\017)60 b Fp(flags)29 b Fv(is)g(a)i(b)s(o)s(olean)
 
6216
e(OR)h(\(`)p Fp(|)p Fv('\))i(of)e(zero)h(or)g(more)f(of)h(the)f(follo)m
 
6217
(wing:)379 2313 y Ft(\000)60 b Fp(FFTW_MEASURE)p Fv(:)33
 
6218
b(this)19 b(\015ag)j(tells)e(FFTW)h(to)h(\014nd)d(the)i(optimal)f(plan)
 
6219
g(b)m(y)g(actually)h Fr(c)-5 b(omputing)510 2422 y Fv(sev)m(eral)31
6161
6220
b(FFTs)f(and)g(measuring)f(their)h(execution)g(time.)379
6162
 
3810 y Fs(\000)60 b Fo(FFTW_ESTIMATE)p Fu(:)34 b(do)25
 
6221
2557 y Ft(\000)60 b Fp(FFTW_ESTIMATE)p Fv(:)34 b(do)25
6163
6222
b(not)g(run)f(an)m(y)h(FFT)h(and)e(pro)m(vide)g(a)h(\\reasonable")h
6164
 
(plan)e(\(for)h(a)g(RISC)510 3920 y(pro)s(cessor)37 b(with)g(man)m(y)h
6165
 
(registers\).)62 b(If)38 b(neither)e Fo(FFTW_ESTIMATE)e
6166
 
Fu(nor)k Fo(FFTW_MEASURE)c Fu(is)510 4030 y(pro)m(vided,)29
6167
 
b(the)i(default)e(is)h Fo(FFTW_ESTIMATE)p Fu(.)379 4165
6168
 
y Fs(\000)60 b Fo(FFTW_OUT_OF_PLACE)p Fu(:)41 b(pro)s(duce)32
 
6223
(plan)e(\(for)h(a)g(RISC)510 2667 y(pro)s(cessor)37 b(with)g(man)m(y)h
 
6224
(registers\).)62 b(If)38 b(neither)e Fp(FFTW_ESTIMATE)e
 
6225
Fv(nor)k Fp(FFTW_MEASURE)c Fv(is)510 2776 y(pro)m(vided,)29
 
6226
b(the)i(default)e(is)h Fp(FFTW_ESTIMATE)p Fv(.)379 2911
 
6227
y Ft(\000)60 b Fp(FFTW_OUT_OF_PLACE)p Fv(:)41 b(pro)s(duce)32
6169
6228
b(a)i(plan)e(assuming)f(that)j(the)f(input)e(and)i(output)g(arra)m(ys)
6170
 
510 4275 y(will)28 b(b)s(e)h(distinct)g(\(this)h(is)f(the)i(default\).)
6171
 
379 4411 y Fs(\000)60 b Fo(FFTW_IN_PLACE)p Fu(:)54 b(pro)s(duce)37
 
6229
510 3020 y(will)28 b(b)s(e)h(distinct)g(\(this)h(is)f(the)i(default\).)
 
6230
379 3155 y Ft(\000)60 b Fp(FFTW_IN_PLACE)p Fv(:)54 b(pro)s(duce)37
6172
6231
b(a)i(plan)e(assuming)h(that)h(y)m(ou)g(w)m(an)m(t)g(to)h(p)s(erform)d
6173
 
(the)i(trans-)510 4520 y(form)33 b(in-place.)51 b(\(Unlik)m(e)33
 
6232
(the)i(trans-)510 3265 y(form)33 b(in-place.)51 b(\(Unlik)m(e)33
6174
6233
b(the)h(one-dimensional)e(transform,)i(this)f(\\really")g(p)s(erforms)g
6175
 
(the)510 4630 y(transform)j(in-place.\))58 b(Note)37
 
6234
(the)510 3374 y(transform)j(in-place.\))58 b(Note)37
6176
6235
b(that,)i(if)c(y)m(ou)i(w)m(an)m(t)g(to)g(p)s(erform)e(in-place)g
6177
 
(transforms,)j(y)m(ou)510 4740 y Fq(must)45 b Fu(use)35
 
6236
(transforms,)j(y)m(ou)510 3484 y Fr(must)45 b Fv(use)35
6178
6237
b(a)h(plan)f(created)i(with)d(this)h(option.)56 b(The)35
6179
6238
b(use)h(of)f(this)g(option)g(has)h(imp)s(ortan)m(t)510
6180
 
4849 y(implications)29 b(for)j(the)h(size)f(of)g(the)h(input/output)d
 
6239
3594 y(implications)29 b(for)j(the)h(size)f(of)g(the)h(input/output)d
6181
6240
(arra)m(y)j(\(see)g(Section)f(3.5.2)i([Computing)510
6182
 
4959 y(the)d(Real)f(Multi-dimensional)c(T)-8 b(ransform],)30
6183
 
b(page)h(31\).)510 5095 y(The)f(default)f(mo)s(de)h(of)h(op)s(eration)f
6184
 
(is)f Fo(FFTW_OUT_OF_PLACE)p Fu(.)379 5230 y Fs(\000)60
6185
 
b Fo(FFTW_USE_WISDOM)p Fu(:)h(use)42 b(an)m(y)h Fo(wisdom)e
6186
 
Fu(that)i(is)f(a)m(v)-5 b(ailable)41 b(to)j(help)d(in)g(the)i(creation)
6187
 
g(of)510 5340 y(the)34 b(plan.)50 b(\(See)35 b(Section)e(2.6)i([W)-8
 
6241
3703 y(the)d(Real)f(Multi-dimensional)c(T)-8 b(ransform],)30
 
6242
b(page)h(30\).)510 3838 y(The)f(default)f(mo)s(de)h(of)h(op)s(eration)f
 
6243
(is)f Fp(FFTW_OUT_OF_PLACE)p Fv(.)379 3973 y Ft(\000)60
 
6244
b Fp(FFTW_USE_WISDOM)p Fv(:)h(use)42 b(an)m(y)h Fp(wisdom)e
 
6245
Fv(that)i(is)f(a)m(v)-5 b(ailable)41 b(to)j(help)d(in)g(the)i(creation)
 
6246
g(of)510 4082 y(the)34 b(plan.)50 b(\(See)35 b(Section)e(2.6)i([W)-8
6188
6247
b(ords)35 b(of)f(Wisdom],)g(page)h(13.\))52 b(This)32
6189
 
b(can)i(greatly)h(sp)s(eed)p eop
 
6248
b(can)i(greatly)h(sp)s(eed)510 4192 y(the)g(creation)h(of)f(plans,)g
 
6249
(esp)s(ecially)e(with)h(the)h Fp(FFTW_MEASURE)d Fv(option.)55
 
6250
b Fp(FFTW_ESTIMATE)510 4301 y Fv(plans)33 b(can)i(also)f(tak)m(e)i(adv)
 
6251
-5 b(an)m(tage)36 b(of)f Fp(wisdom)e Fv(to)i(pro)s(duce)e(a)i(more)f
 
6252
(optimal)g(plan)f(\(based)510 4411 y(on)42 b(past)g(measuremen)m(ts\))g
 
6253
(than)f(the)h(estimation)g(heuristic)e(w)m(ould)g(normally)g(generate.)
 
6254
510 4520 y(When)30 b(the)h Fp(FFTW_MEASURE)c Fv(option)j(is)g(used,)g
 
6255
(new)g Fp(wisdom)f Fv(will)f(also)j(b)s(e)f(generated)h(if)f(the)510
 
6256
4630 y(curren)m(t)42 b(transform)g(size)g(is)g(not)g(completely)g
 
6257
(understo)s(o)s(d)f(b)m(y)h(existing)g Fp(wisdom)p Fv(.)75
 
6258
b(Note)510 4740 y(that)37 b(the)g(same)g Fp(wisdom)e
 
6259
Fv(is)h(shared)g(b)s(et)m(w)m(een)h(one-dimensional)e(and)h(m)m
 
6260
(ulti-dimensional)510 4849 y(transforms.)150 5074 y Fh(3.5.2)63
 
6261
b(Computing)41 b(the)f(Real)h(Multi-dimensional)g(T)-10
 
6262
b(ransform)390 5236 y Fp(#include)46 b(<rfftw.h>)p eop
 
6263
end
6190
6264
%%Page: 31 33
6191
 
31 32 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
6192
 
b(Reference)2354 b(31)510 299 y(the)35 b(creation)h(of)f(plans,)g(esp)s
6193
 
(ecially)e(with)h(the)h Fo(FFTW_MEASURE)d Fu(option.)55
6194
 
b Fo(FFTW_ESTIMATE)510 408 y Fu(plans)33 b(can)i(also)f(tak)m(e)i(adv)
6195
 
-5 b(an)m(tage)36 b(of)f Fo(wisdom)e Fu(to)i(pro)s(duce)e(a)i(more)f
6196
 
(optimal)g(plan)f(\(based)510 518 y(on)42 b(past)g(measuremen)m(ts\))g
6197
 
(than)f(the)h(estimation)g(heuristic)e(w)m(ould)g(normally)g(generate.)
6198
 
510 628 y(When)30 b(the)h Fo(FFTW_MEASURE)c Fu(option)j(is)g(used,)g
6199
 
(new)g Fo(wisdom)f Fu(will)f(also)j(b)s(e)f(generated)h(if)f(the)510
6200
 
737 y(curren)m(t)42 b(transform)g(size)g(is)g(not)g(completely)g
6201
 
(understo)s(o)s(d)f(b)m(y)h(existing)g Fo(wisdom)p Fu(.)75
6202
 
b(Note)510 847 y(that)37 b(the)g(same)g Fo(wisdom)e Fu(is)h(shared)g(b)
6203
 
s(et)m(w)m(een)h(one-dimensional)e(and)h(m)m(ulti-dimensional)510
6204
 
956 y(transforms.)150 1179 y Fi(3.5.2)63 b(Computing)41
6205
 
b(the)f(Real)h(Multi-dimensional)g(T)-10 b(ransform)390
6206
 
1366 y Fo(#include)46 b(<rfftw.h>)390 1573 y(void)h
6207
 
(rfftwnd_real_to_complex)o(\(rff)o(twn)o(d_pl)o(an)42
6208
 
b(plan,)k(int)h(howmany,)1774 1677 y(fftw_real)e(*in,)i(int)g(istride,)
6209
 
e(int)i(idist,)1774 1781 y(fftw_complex)e(*out,)h(int)h(ostride,)e(int)
6210
 
i(odist\);)390 1884 y(void)g(rfftwnd_complex_to_real)o(\(rff)o(twn)o
6211
 
(d_pl)o(an)42 b(plan,)k(int)h(howmany,)1774 1988 y(fftw_complex)e(*in,)
6212
 
h(int)h(istride,)f(int)h(idist,)1774 2092 y(fftw_real)e(*out,)i(int)g
6213
 
(ostride,)e(int)i(odist\);)390 2300 y(void)g(rfftwnd_one_real_to_com)o
 
6265
TeXDict begin 31 32 bop 150 -116 a Fv(Chapter)30 b(3:)41
 
6266
b(FFTW)31 b(Reference)2354 b(31)390 299 y Fp(void)47
 
6267
b(rfftwnd_real_to_complex)o(\(rff)o(twn)o(d_pl)o(an)42
 
6268
b(plan,)k(int)h(howmany,)1774 403 y(fftw_real)e(*in,)i(int)g(istride,)e
 
6269
(int)i(idist,)1774 506 y(fftw_complex)e(*out,)h(int)h(ostride,)e(int)i
 
6270
(odist\);)390 610 y(void)g(rfftwnd_complex_to_real)o(\(rff)o(twn)o
 
6271
(d_pl)o(an)42 b(plan,)k(int)h(howmany,)1774 714 y(fftw_complex)e(*in,)h
 
6272
(int)h(istride,)f(int)h(idist,)1774 818 y(fftw_real)e(*out,)i(int)g
 
6273
(ostride,)e(int)i(odist\);)390 1025 y(void)g(rfftwnd_one_real_to_com)o
6214
6274
(plex)o(\(rf)o(ftwn)o(d_pl)o(an)41 b(p,)48 b(fftw_real)d(*in,)1965
6215
 
2403 y(fftw_complex)f(*out\);)390 2507 y(void)j
 
6275
1129 y(fftw_complex)f(*out\);)390 1233 y(void)j
6216
6276
(rfftwnd_one_complex_to_)o(real)o(\(rf)o(ftwn)o(d_pl)o(an)41
6217
 
b(p,)48 b(fftw_complex)c(*in,)1965 2611 y(fftw_real)h(*out\);)275
6218
 
2745 y Fu(These)24 b(functions)f(compute)h(the)h(real)f(m)m
 
6277
b(p,)48 b(fftw_complex)c(*in,)1965 1337 y(fftw_real)h(*out\);)275
 
6278
1464 y Fv(These)24 b(functions)f(compute)h(the)h(real)f(m)m
6219
6279
(ulti-dimensional)c(F)-8 b(ourier)24 b(T)-8 b(ransform,)25
6220
 
b(using)e(a)h(plan)f(cre-)150 2855 y(ated)i(b)m(y)f Fo
6221
 
(rfftwnd_create_plan)18 b Fu(\(see)25 b(Section)f(3.5.1)i([Plan)d
6222
 
(Creation)h(for)g(Real)g(Multi-dimensional)150 2964 y(T)-8
 
6280
b(using)e(a)h(plan)f(cre-)150 1574 y(ated)i(b)m(y)f Fp
 
6281
(rfftwnd_create_plan)18 b Fv(\(see)25 b(Section)f(3.5.1)i([Plan)d
 
6282
(Creation)h(for)g(Real)g(Multi-dimensional)150 1683 y(T)-8
6223
6283
b(ransforms],)31 b(page)h(29\).)46 b(\(Note)33 b(that)f(the)f(plan)g
6224
6284
(determines)f(the)i(rank)f(and)g(dimensions)d(of)k(the)g(ar-)150
6225
 
3074 y(ra)m(y)27 b(to)g(b)s(e)e(transformed.\))39 b(The)26
6226
 
b(`)p Fo(rfftwnd_one_)p Fu(')d(functions)i(pro)m(vide)h(a)g
6227
 
(simpli\014ed)d(in)m(terface)k(for)f(the)150 3183 y(common)33
 
6285
1793 y(ra)m(y)27 b(to)g(b)s(e)e(transformed.\))39 b(The)26
 
6286
b(`)p Fp(rfftwnd_one_)p Fv(')d(functions)i(pro)m(vide)h(a)g
 
6287
(simpli\014ed)d(in)m(terface)k(for)f(the)150 1903 y(common)33
6228
6288
b(case)h(of)f(single)f(input)f(arra)m(y)i(of)g(stride)f(1.)48
6229
6289
b(Unlik)m(e)32 b(other)h(transform)g(routines)e(in)h(FFTW,)150
6230
 
3293 y(w)m(e)f(here)f(use)g(separate)h(functions)e(for)h(the)h(t)m(w)m
 
6290
2012 y(w)m(e)f(here)f(use)g(separate)h(functions)e(for)h(the)h(t)m(w)m
6231
6291
(o)g(directions)e(of)i(the)f(transform)g(in)f(order)g(to)j(correctly)
6232
 
150 3402 y(express)e(the)g(datat)m(yp)s(es)i(of)e(the)h(parameters.)275
6233
 
3537 y Fq(Imp)-5 b(ortant:)58 b Fu(When)35 b(in)m(v)m(ok)m(ed)g(for)g
6234
 
(an)g(out-of-place,)j Fo(FFTW_COMPLEX_TO_REAL)30 b Fu(transform)k(with)
6235
 
150 3646 y Fo(rank)29 b(>)h(1)p Fu(,)35 b(the)f(input)e(arra)m(y)j(is)e
 
6292
150 2122 y(express)e(the)g(datat)m(yp)s(es)i(of)e(the)h(parameters.)275
 
6293
2249 y Fr(Imp)-5 b(ortant:)58 b Fv(When)35 b(in)m(v)m(ok)m(ed)g(for)g
 
6294
(an)g(out-of-place,)j Fp(FFTW_COMPLEX_TO_REAL)30 b Fv(transform)k(with)
 
6295
150 2359 y Fp(rank)29 b(>)h(1)p Fv(,)35 b(the)f(input)e(arra)m(y)j(is)e
6236
6296
(o)m(v)m(erwritten)h(with)f(scratc)m(h)i(v)-5 b(alues)33
6237
 
b(b)m(y)h(these)g(routines.)50 b(The)34 b(input)150 3756
6238
 
y(arra)m(y)26 b(is)e(not)i(mo)s(di\014ed)d(for)i Fo
6239
 
(FFTW_REAL_TO_COMPLEX)20 b Fu(transforms)25 b(or)g(for)g
6240
 
Fo(FFTW_COMPLEX_TO_REAL)150 3865 y Fu(with)k Fo(rank)g(==)h(1)p
6241
 
Fu(.)150 4088 y Fi(Argumen)m(ts)225 4280 y Fs(\017)60
6242
 
b Fo(plan)20 b Fu(is)g(the)h(plan)e(created)j(b)m(y)f
6243
 
Fo(rfftwnd_create_plan)p Fu(.)32 b(\(see)22 b(Section)f(3.5.1)i([Plan)d
6244
 
(Creation)g(for)330 4390 y(Real)i(Multi-dimensional)c(T)-8
 
6297
b(b)m(y)h(these)g(routines.)50 b(The)34 b(input)150 2468
 
6298
y(arra)m(y)26 b(is)e(not)i(mo)s(di\014ed)d(for)i Fp
 
6299
(FFTW_REAL_TO_COMPLEX)20 b Fv(transforms)25 b(or)g(for)g
 
6300
Fp(FFTW_COMPLEX_TO_REAL)150 2578 y Fv(with)k Fp(rank)g(==)h(1)p
 
6301
Fv(.)150 2781 y Fh(Argumen)m(ts)225 2949 y Ft(\017)60
 
6302
b Fp(plan)20 b Fv(is)g(the)h(plan)e(created)j(b)m(y)f
 
6303
Fp(rfftwnd_create_plan)p Fv(.)32 b(\(see)22 b(Section)f(3.5.1)i([Plan)d
 
6304
(Creation)g(for)330 3059 y(Real)i(Multi-dimensional)c(T)-8
6245
6305
b(ransforms],)23 b(page)f(29\).)39 b(In)21 b(the)h(case)h(of)f(t)m(w)m
6246
 
(o)h(and)e(three-dimensional)330 4499 y(transforms,)45
 
6306
(o)h(and)e(three-dimensional)330 3168 y(transforms,)45
6247
6307
b(it)d(could)g(also)h(ha)m(v)m(e)h(b)s(een)e(created)h(b)m(y)g
6248
 
Fo(rfftw2d_create_plan)37 b Fu(or)43 b Fo(rfftw3d_)330
6249
 
4609 y(create_plan)p Fu(,)28 b(resp)s(ectiv)m(ely)-8
6250
 
b(.)330 4743 y Fo(FFTW_REAL_TO_COMPLEX)15 b Fu(plans)20
6251
 
b(m)m(ust)h(b)s(e)f(used)g(with)g(the)h(`)p Fo(real_to_complex)p
6252
 
Fu(')c(functions,)22 b(and)330 4853 y Fo(FFTW_COMPLEX_TO_REAL)h
6253
 
Fu(plans)k(m)m(ust)i(b)s(e)e(used)h(with)f(the)i(`)p
6254
 
Fo(complex_to_real)p Fu(')c(functions.)39 b(It)330 4962
 
6308
Fp(rfftw2d_create_plan)37 b Fv(or)43 b Fp(rfftw3d_)330
 
6309
3278 y(create_plan)p Fv(,)28 b(resp)s(ectiv)m(ely)-8
 
6310
b(.)330 3405 y Fp(FFTW_REAL_TO_COMPLEX)15 b Fv(plans)20
 
6311
b(m)m(ust)h(b)s(e)f(used)g(with)g(the)h(`)p Fp(real_to_complex)p
 
6312
Fv(')c(functions,)22 b(and)330 3515 y Fp(FFTW_COMPLEX_TO_REAL)h
 
6313
Fv(plans)k(m)m(ust)i(b)s(e)e(used)h(with)f(the)i(`)p
 
6314
Fp(complex_to_real)p Fv(')c(functions.)39 b(It)330 3624
6255
6315
y(is)29 b(an)i(error)f(to)h(mismatc)m(h)f(the)g(plan)f(direction)h(and)
6256
 
f(the)i(transform)f(function.)225 5096 y Fs(\017)60 b
6257
 
Fo(howmany)28 b Fu(is)i(the)g(n)m(um)m(b)s(er)f(of)i(transforms)f(to)h
6258
 
(b)s(e)e(computed.)225 5230 y Fs(\017)60 b Fo(in)p Fu(,)33
6259
 
b Fo(istride)e Fu(and)i Fo(idist)e Fu(describ)s(e)h(the)h(input)e(arra)
6260
 
m(y\(s\).)50 b(There)33 b(are)g Fo(howmany)e Fu(input)g(arra)m(ys;)330
6261
 
5340 y(the)42 b(\014rst)e(one)i(is)f(p)s(oin)m(ted)f(to)i(b)m(y)g
6262
 
Fo(in)p Fu(,)h(the)f(second)g(one)f(is)g(p)s(oin)m(ted)f(to)i(b)m(y)g
6263
 
Fo(in)29 b(+)h(idist)p Fu(,)44 b(and)p eop
6264
 
%%Page: 32 34
6265
 
32 33 bop 150 -116 a Fu(32)3232 b(FFTW)330 299 y(so)40
6266
 
b(on,)i(up)d(to)i Fo(in)30 b(+)g(\(howmany)e(-)i(1\))g(*)g(idist)p
6267
 
Fu(.)67 b(Eac)m(h)41 b(input)d(arra)m(y)i(is)f(stored)h(in)e(ro)m(w-ma)
6268
 
5 b(jor)330 408 y(format)31 b(\(see)h(Section)f(2.5)i
 
6316
f(the)i(transform)f(function.)225 3752 y Ft(\017)60 b
 
6317
Fp(howmany)28 b Fv(is)i(the)g(n)m(um)m(b)s(er)f(of)i(transforms)f(to)h
 
6318
(b)s(e)e(computed.)225 3879 y Ft(\017)60 b Fp(in)p Fv(,)33
 
6319
b Fp(istride)e Fv(and)i Fp(idist)e Fv(describ)s(e)h(the)h(input)e(arra)
 
6320
m(y\(s\).)50 b(There)33 b(are)g Fp(howmany)e Fv(input)g(arra)m(ys;)330
 
6321
3989 y(the)42 b(\014rst)e(one)i(is)f(p)s(oin)m(ted)f(to)i(b)m(y)g
 
6322
Fp(in)p Fv(,)h(the)f(second)g(one)f(is)g(p)s(oin)m(ted)f(to)i(b)m(y)g
 
6323
Fp(in)29 b(+)h(idist)p Fv(,)44 b(and)330 4099 y(so)c(on,)i(up)d(to)i
 
6324
Fp(in)30 b(+)g(\(howmany)e(-)i(1\))g(*)g(idist)p Fv(.)67
 
6325
b(Eac)m(h)41 b(input)d(arra)m(y)i(is)f(stored)h(in)e(ro)m(w-ma)5
 
6326
b(jor)330 4208 y(format)31 b(\(see)h(Section)f(2.5)i
6269
6327
([Multi-dimensional)27 b(Arra)m(y)k(F)-8 b(ormat],)34
6270
 
b(page)d(11\),)i(and)e(is)f(not)h(neces-)330 518 y(sarily)g(con)m
 
6328
b(page)d(11\),)i(and)e(is)f(not)h(neces-)330 4318 y(sarily)g(con)m
6271
6329
(tiguous)h(in)f(memory)-8 b(.)47 b(Sp)s(eci\014cally)-8
6272
 
b(,)31 b Fo(in[0])g Fu(is)h(the)g(\014rst)g(elemen)m(t)h(of)g(the)f
6273
 
(\014rst)g(arra)m(y)-8 b(,)330 628 y Fo(in[istride])31
6274
 
b Fu(is)i(the)h(second)g(elemen)m(t)g(of)g(the)g(\014rst)f(arra)m(y)-8
 
6330
b(,)31 b Fp(in[0])g Fv(is)h(the)g(\014rst)g(elemen)m(t)h(of)g(the)f
 
6331
(\014rst)g(arra)m(y)-8 b(,)330 4427 y Fp(in[istride])31
 
6332
b Fv(is)i(the)h(second)g(elemen)m(t)g(of)g(the)g(\014rst)f(arra)m(y)-8
6275
6333
b(,)36 b(and)e(so)g(on.)51 b(In)33 b(general,)i(the)f
6276
 
Fo(i)p Fu(-th)330 737 y(elemen)m(t)27 b(of)g(the)g Fo(j)p
6277
 
Fu(-th)g(input)d(arra)m(y)k(will)c(b)s(e)i(in)f(p)s(osition)g
6278
 
Fo(in[i)k(*)h(istride)f(+)h(j)g(*)g(idist])p Fu(.)38
6279
 
b(Note)330 847 y(that,)h(here,)g Fo(i)d Fu(refers)h(to)g(an)g(index)e
 
6334
Fp(i)p Fv(-th)330 4537 y(elemen)m(t)27 b(of)g(the)g Fp(j)p
 
6335
Fv(-th)g(input)d(arra)m(y)k(will)c(b)s(e)i(in)f(p)s(osition)g
 
6336
Fp(in[i)k(*)h(istride)f(+)h(j)g(*)g(idist])p Fv(.)38
 
6337
b(Note)330 4647 y(that,)h(here,)g Fp(i)d Fv(refers)h(to)g(an)g(index)e
6280
6338
(in)m(to)i(the)g(ro)m(w-ma)5 b(jor)37 b(format)g(for)g(the)g(m)m
6281
 
(ulti-dimensional)330 956 y(arra)m(y)-8 b(,)32 b(rather)e(than)g(an)g
6282
 
(index)f(in)g(an)m(y)i(particular)e(dimension.)330 1089
 
6339
(ulti-dimensional)330 4756 y(arra)m(y)-8 b(,)32 b(rather)e(than)g(an)g
 
6340
(index)f(in)g(an)m(y)i(particular)e(dimension.)330 4884
6283
6341
y(The)d(dimensions)e(of)j(the)g(arra)m(ys)g(are)g(di\013eren)m(t)f(for)
6284
6342
g(real)g(and)g(complex)h(data,)h(and)e(are)h(discussed)330
6285
 
1199 y(in)k(more)h(detail)g(b)s(elo)m(w)f(\(see)i(Section)f(3.5.3)i
 
6343
4993 y(in)k(more)h(detail)g(b)s(elo)m(w)f(\(see)i(Section)f(3.5.3)i
6286
6344
([Arra)m(y)f(Dimensions)e(for)h(Real)g(Multi-dimensional)330
6287
 
1309 y(T)-8 b(ransforms],)30 b(page)h(32\).)379 1442
6288
 
y Fs(\000)60 b Fq(In-plac)-5 b(e)30 b(tr)-5 b(ansforms)7
6289
 
b Fu(:)42 b(F)-8 b(or)28 b(plans)d(created)j(with)d(the)i
6290
 
Fo(FFTW_IN_PLACE)c Fu(option,)k(the)g(trans-)510 1551
 
6345
5103 y(T)-8 b(ransforms],)30 b(page)h(32\).)379 5230
 
6346
y Ft(\000)60 b Fr(In-plac)-5 b(e)30 b(tr)-5 b(ansforms)7
 
6347
b Fv(:)42 b(F)-8 b(or)28 b(plans)d(created)j(with)d(the)i
 
6348
Fp(FFTW_IN_PLACE)c Fv(option,)k(the)g(trans-)510 5340
6291
6349
y(form)32 b(is)f(computed)h(in-place|the)g(output)f(is)h(returned)f(in)
6292
 
g(the)h Fo(in)g Fu(arra)m(y)-8 b(.)47 b(The)32 b(meaning)510
6293
 
1661 y(of)j(the)h Fo(stride)d Fu(and)i Fo(dist)f Fu(parameters)i(in)e
 
6350
g(the)h Fp(in)g Fv(arra)m(y)-8 b(.)47 b(The)32 b(meaning)p
 
6351
eop end
 
6352
%%Page: 32 34
 
6353
TeXDict begin 32 33 bop 150 -116 a Fv(32)3232 b(FFTW)510
 
6354
299 y(of)35 b(the)h Fp(stride)d Fv(and)i Fp(dist)f Fv(parameters)i(in)e
6294
6355
(this)g(case)i(is)e(subtle)g(and)h(is)f(discussed)g(b)s(elo)m(w)510
6295
 
1770 y(\(see)d(Section)g(3.5.4)h([Strides)d(in)g(In-place)h(RFFTWND],)i
6296
 
(page)f(33\).)225 1904 y Fs(\017)60 b Fo(out)p Fu(,)29
6297
 
b Fo(ostride)f Fu(and)g Fo(odist)g Fu(describ)s(e)g(the)i(output)f
 
6356
408 y(\(see)d(Section)g(3.5.4)h([Strides)d(in)g(In-place)h(RFFTWND],)i
 
6357
(page)f(32\).)225 545 y Ft(\017)60 b Fp(out)p Fv(,)29
 
6358
b Fp(ostride)f Fv(and)g Fp(odist)g Fv(describ)s(e)g(the)i(output)f
6298
6359
(arra)m(y\(s\).)42 b(The)29 b(format)g(is)g(the)h(same)g(as)f(that)330
6299
 
2013 y(for)34 b(the)g(input)f(arra)m(y)-8 b(.)53 b(See)34
 
6360
654 y(for)34 b(the)g(input)f(arra)m(y)-8 b(.)53 b(See)34
6300
6361
b(b)s(elo)m(w)g(for)g(a)g(discussion)e(of)i(the)g(dimensions)e(of)i
6301
 
(the)h(output)e(arra)m(y)330 2123 y(for)d(real)g(and)g(complex)g(data.)
6302
 
379 2256 y Fs(\000)60 b Fq(In-plac)-5 b(e)47 b(tr)-5
6303
 
b(ansforms)7 b Fu(:)73 b(These)45 b(parameters)g(are)h(ignored)e(for)g
6304
 
(plans)g(created)i(with)e(the)510 2365 y Fo(FFTW_IN_PLACE)27
6305
 
b Fu(option.)275 2522 y(The)32 b(function)f Fo(rfftwnd_one)f
6306
 
Fu(transforms)i(a)h(single,)g(con)m(tiguous)g(input)e(arra)m(y)i(to)h
6307
 
(a)f(con)m(tiguous)150 2631 y(output)d(arra)m(y)-8 b(.)42
6308
 
b(By)30 b(de\014nition,)f(the)h(call)390 2759 y Fo
6309
 
(rfftwnd_one_...\(plan,)42 b(in,)47 b(out\))275 2892
6310
 
y Fu(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 3019 y Fo
6311
 
(rfftwnd_...\(plan,)43 b(1,)k(in,)g(1,)g(1,)h(out,)e(1,)h(1\))150
6312
 
3239 y Fi(3.5.3)63 b(Arra)m(y)39 b(Dimensions)j(for)f(Real)g
6313
 
(Multi-dimensional)g(T)-10 b(ransforms)275 3430 y Fu(The)32
 
6362
(the)h(output)e(arra)m(y)330 764 y(for)d(real)g(and)g(complex)g(data.)
 
6363
379 900 y Ft(\000)60 b Fr(In-plac)-5 b(e)47 b(tr)-5 b(ansforms)7
 
6364
b Fv(:)73 b(These)45 b(parameters)g(are)h(ignored)e(for)g(plans)g
 
6365
(created)i(with)e(the)510 1010 y Fp(FFTW_IN_PLACE)27
 
6366
b Fv(option.)275 1175 y(The)32 b(function)f Fp(rfftwnd_one)f
 
6367
Fv(transforms)i(a)h(single,)g(con)m(tiguous)g(input)e(arra)m(y)i(to)h
 
6368
(a)f(con)m(tiguous)150 1284 y(output)d(arra)m(y)-8 b(.)42
 
6369
b(By)30 b(de\014nition,)f(the)h(call)390 1417 y Fp
 
6370
(rfftwnd_one_...\(plan,)42 b(in,)47 b(out\))275 1555
 
6371
y Fv(is)29 b(equiv)-5 b(alen)m(t)30 b(to)390 1687 y Fp
 
6372
(rfftwnd_...\(plan,)43 b(1,)k(in,)g(1,)g(0,)h(out,)e(1,)h(0\))150
 
6373
1919 y Fh(3.5.3)63 b(Arra)m(y)39 b(Dimensions)j(for)f(Real)g
 
6374
(Multi-dimensional)g(T)-10 b(ransforms)275 2115 y Fv(The)32
6314
6375
b(output)h(of)g(a)g(m)m(ulti-dimensional)c(transform)k(of)g(real)g
6315
 
(data)g(con)m(tains)h(symmetries)e(that,)i(in)150 3540
 
6376
(data)g(con)m(tains)h(symmetries)e(that,)i(in)150 2225
6316
6377
y(principle,)27 b(mak)m(e)j(half)f(of)h(the)f(outputs)h(redundan)m(t)e
6317
6378
(\(see)i(Section)g(3.5.6)h([What)g(RFFTWND)g(Really)150
6318
 
3649 y(Computes],)36 b(page)f(33\).)55 b(In)34 b(practice,)i(it)f(is)e
 
6379
2334 y(Computes],)36 b(page)f(33\).)55 b(In)34 b(practice,)i(it)f(is)e
6319
6380
(not)i(p)s(ossible)d(to)k(en)m(tirely)e(realize)g(these)h(sa)m(vings)g
6320
 
(in)e(an)150 3759 y(e\016cien)m(t)24 b(and)e(understandable)f(format.)
 
6381
(in)e(an)150 2444 y(e\016cien)m(t)24 b(and)e(understandable)f(format.)
6321
6382
39 b(Instead,)25 b(the)e(output)g(of)g(the)h(r\013t)m(wnd)e(transforms)
6322
 
h(is)f Fq(slightly)150 3868 y Fu(o)m(v)m(er)27 b(half)e(of)h(the)g
 
6383
h(is)f Fr(slightly)150 2554 y Fv(o)m(v)m(er)27 b(half)e(of)h(the)g
6323
6384
(output)f(of)h(the)g(corresp)s(onding)d(complex)j(transform.)38
6324
6385
b(W)-8 b(e)27 b(do)f(not)g(\\pac)m(k")h(the)f(data)150
6325
 
3978 y(in)k(an)m(y)i(w)m(a)m(y)-8 b(,)33 b(but)e(store)h(it)f(as)h(an)f
6326
 
(ordinary)f(arra)m(y)i(of)f Fo(fftw_complex)e Fu(v)-5
6327
 
b(alues.)43 b(In)31 b(fact,)h(this)f(data)h(is)150 4088
 
6386
2663 y(in)k(an)m(y)i(w)m(a)m(y)-8 b(,)33 b(but)e(store)h(it)f(as)h(an)f
 
6387
(ordinary)f(arra)m(y)i(of)f Fp(fftw_complex)e Fv(v)-5
 
6388
b(alues.)43 b(In)31 b(fact,)h(this)f(data)h(is)150 2773
6328
6389
y(simply)c(a)j(subsection)e(of)i(what)f(w)m(ould)f(b)s(e)h(the)g(arra)m
6329
6390
(y)h(in)e(the)i(corresp)s(onding)d(complex)i(transform.)275
6330
 
4221 y(Sp)s(eci\014cally)-8 b(,)32 b(for)i(a)g(real)f(transform)g(of)h
6331
 
(dimensions)d Fl(n)2225 4235 y Fn(1)2284 4221 y Fs(\002)22
6332
 
b Fl(n)2432 4235 y Fn(2)2491 4221 y Fs(\002)h(\001)15
6333
 
b(\001)g(\001)23 b(\002)f Fl(n)2861 4235 y Fk(d)2899
6334
 
4221 y Fu(,)35 b(the)f(complex)f(data)i(is)150 4330 y(an)e
6335
 
Fl(n)334 4344 y Fn(1)393 4330 y Fs(\002)21 b Fl(n)540
6336
 
4344 y Fn(2)599 4330 y Fs(\002)h(\001)15 b(\001)g(\001)23
6337
 
b(\002)f Fu(\()p Fl(n)1003 4344 y Fk(d)1041 4330 y Fl(=)p
6338
 
Fu(2)h(+)f(1\))34 b(arra)m(y)f(of)h Fo(fftw_complex)29
6339
 
b Fu(v)-5 b(alues)33 b(in)e(ro)m(w-ma)5 b(jor)34 b(order)f(\(with)f
6340
 
(the)150 4440 y(division)j(rounded)h(do)m(wn\).)63 b(That)38
 
6391
2911 y(Sp)s(eci\014cally)-8 b(,)32 b(for)i(a)g(real)f(transform)g(of)h
 
6392
(dimensions)d Fm(n)2225 2925 y Fo(1)2284 2911 y Ft(\002)22
 
6393
b Fm(n)2432 2925 y Fo(2)2491 2911 y Ft(\002)h(\001)15
 
6394
b(\001)g(\001)23 b(\002)f Fm(n)2861 2925 y Fl(d)2899
 
6395
2911 y Fv(,)35 b(the)f(complex)f(data)i(is)150 3021 y(an)e
 
6396
Fm(n)334 3035 y Fo(1)393 3021 y Ft(\002)21 b Fm(n)540
 
6397
3035 y Fo(2)599 3021 y Ft(\002)h(\001)15 b(\001)g(\001)23
 
6398
b(\002)f Fv(\()p Fm(n)1003 3035 y Fl(d)1041 3021 y Fm(=)p
 
6399
Fv(2)h(+)f(1\))34 b(arra)m(y)f(of)h Fp(fftw_complex)29
 
6400
b Fv(v)-5 b(alues)33 b(in)e(ro)m(w-ma)5 b(jor)34 b(order)f(\(with)f
 
6401
(the)150 3130 y(division)j(rounded)h(do)m(wn\).)63 b(That)38
6341
6402
b(is,)h(w)m(e)g(only)e(store)h(the)g(lo)m(w)m(er)h(half)d(\(plus)h(one)
6342
 
h(elemen)m(t\))h(of)f(the)150 4549 y(last)c(dimension)e(of)i(the)g
 
6403
h(elemen)m(t\))h(of)f(the)150 3240 y(last)c(dimension)e(of)i(the)g
6343
6404
(data)h(from)f(the)g(ordinary)e(complex)i(transform.)51
6344
 
b(\(W)-8 b(e)36 b(could)d(ha)m(v)m(e)j(instead)150 4659
 
6405
b(\(W)-8 b(e)36 b(could)d(ha)m(v)m(e)j(instead)150 3349
6345
6406
y(tak)m(en)d(half)f(of)g(an)m(y)h(other)f(dimension,)f(but)g(implemen)m
6346
6407
(tation)g(turns)g(out)i(to)g(b)s(e)e(simpler)f(if)h(the)i(last,)150
6347
 
4769 y(con)m(tiguous,)e(dimension)d(is)h(used.\))275
6348
 
4902 y(Since)c(the)i(complex)g(data)h(is)d(sligh)m(tly)h(larger)g(than)
 
6408
3459 y(con)m(tiguous,)e(dimension)d(is)h(used.\))275
 
6409
3597 y(Since)c(the)i(complex)g(data)h(is)d(sligh)m(tly)h(larger)g(than)
6349
6410
h(the)g(real)f(data,)j(some)e(complications)f(arise)g(for)150
6350
 
5011 y(in-place)j(transforms.)39 b(In)29 b(this)f(case,)j(the)f
 
6411
3707 y(in-place)j(transforms.)39 b(In)29 b(this)f(case,)j(the)f
6351
6412
(\014nal)e(dimension)f(of)j(the)f(real)g(data)i(m)m(ust)e(b)s(e)g
6352
 
(padded)f(with)150 5121 y(extra)c(v)-5 b(alues)22 b(to)h(accommo)s
 
6413
(padded)f(with)150 3816 y(extra)c(v)-5 b(alues)22 b(to)h(accommo)s
6353
6414
(date)i(the)e(size)g(of)g(the)g(complex)g(data|t)m(w)m(o)h(extra)g(if)e
6354
 
(the)h(last)g(dimension)d(is)150 5230 y(ev)m(en)k(and)f(one)h(if)f(it)g
 
6415
(the)h(last)g(dimension)d(is)150 3926 y(ev)m(en)k(and)f(one)h(if)f(it)g
6355
6416
(is)g(o)s(dd.)37 b(That)24 b(is,)g(the)g(last)f(dimension)e(of)j(the)g
6356
6417
(real)f(data)i(m)m(ust)e(ph)m(ysically)f(con)m(tain)150
6357
 
5340 y(2\()p Fl(n)285 5354 y Fk(d)324 5340 y Fl(=)p Fu(2)j(+)g(1\))37
6358
 
b Fo(fftw_real)d Fu(v)-5 b(alues)36 b(\(exactly)i(enough)f(to)g(hold)e
6359
 
(the)i(complex)g(data\).)60 b(This)35 b(ph)m(ysical)p
6360
 
eop
 
6418
4035 y(2\()p Fm(n)285 4049 y Fl(d)324 4035 y Fm(=)p Fv(2)j(+)g(1\))37
 
6419
b Fp(fftw_real)d Fv(v)-5 b(alues)36 b(\(exactly)i(enough)f(to)g(hold)e
 
6420
(the)i(complex)g(data\).)60 b(This)35 b(ph)m(ysical)150
 
6421
4145 y(arra)m(y)42 b(size)g(do)s(es)f(not,)k(ho)m(w)m(ev)m(er,)i(c)m
 
6422
(hange)c(the)e Fr(lo)-5 b(gic)g(al)53 b Fv(arra)m(y)42
 
6423
b(size|only)f Fm(n)2909 4159 y Fl(d)2989 4145 y Fv(v)-5
 
6424
b(alues)41 b(are)h(actually)150 4255 y(stored)27 b(in)e(the)i(last)g
 
6425
(dimension,)e(and)h Fm(n)1524 4269 y Fl(d)1589 4255 y
 
6426
Fv(is)g(the)h(last)g(dimension)d(passed)i(to)i Fp(rfftwnd_create_plan)p
 
6427
Fv(.)150 4486 y Fh(3.5.4)63 b(Strides)41 b(in)g(In-place)g(RFFTWND)275
 
6428
4682 y Fv(The)32 b(fact)i(that)g(the)f(input)f(and)g(output)h(datat)m
 
6429
(yp)s(es)h(are)g(di\013eren)m(t)e(for)h(r\013t)m(wnd)g(complicates)g
 
6430
(the)150 4792 y(meaning)i(of)h(the)g Fp(stride)e Fv(and)i
 
6431
Fp(dist)e Fv(parameters)j(of)f(in-place)e(transforms|are)i(they)g(in)e
 
6432
(units)h(of)150 4902 y Fp(fftw_real)g Fv(or)i Fp(fftw_complex)c
 
6433
Fv(elemen)m(ts?)61 b(When)37 b(reading)f(the)h(input,)g(they)g(are)h
 
6434
(in)m(terpreted)e(in)150 5011 y(units)28 b(of)i(the)g(datat)m(yp)s(e)h
 
6435
(of)f(the)g(input)d(data.)42 b(When)29 b(writing)f(the)i(output,)g(the)
 
6436
f Fp(istride)f Fv(and)h Fp(idist)150 5121 y Fv(are)36
 
6437
b(translated)g(to)g(the)g(output)f(datat)m(yp)s(e's)i(\\units")e(in)f
 
6438
(one)i(of)g(t)m(w)m(o)h(w)m(a)m(ys,)i(corresp)s(onding)33
 
6439
b(to)k(the)150 5230 y(t)m(w)m(o)d(most)e(common)h(situations)e(in)g
 
6440
(whic)m(h)g Fp(stride)g Fv(and)g Fp(dist)h Fv(parameters)g(are)h
 
6441
(useful.)45 b(Belo)m(w,)33 b(w)m(e)150 5340 y(refer)k(to)h(these)g
 
6442
(\\translated")h(parameters)e(as)h Fp(ostride_t)d Fv(and)i
 
6443
Fp(odist_t)p Fv(.)60 b(\(Note)39 b(that)g(these)f(are)p
 
6444
eop end
6361
6445
%%Page: 33 35
6362
 
33 34 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
6363
 
b(Reference)2354 b(33)150 299 y(arra)m(y)42 b(size)g(do)s(es)f(not,)k
6364
 
(ho)m(w)m(ev)m(er,)i(c)m(hange)c(the)e Fq(lo)-5 b(gic)g(al)53
6365
 
b Fu(arra)m(y)42 b(size|only)f Fl(n)2909 313 y Fk(d)2989
6366
 
299 y Fu(v)-5 b(alues)41 b(are)h(actually)150 408 y(stored)27
6367
 
b(in)e(the)i(last)g(dimension,)e(and)h Fl(n)1524 422
6368
 
y Fk(d)1589 408 y Fu(is)g(the)h(last)g(dimension)d(passed)i(to)i
6369
 
Fo(rfftwnd_create_plan)p Fu(.)150 647 y Fi(3.5.4)63 b(Strides)41
6370
 
b(in)g(In-place)g(RFFTWND)275 847 y Fu(The)32 b(fact)i(that)g(the)f
6371
 
(input)f(and)g(output)h(datat)m(yp)s(es)h(are)g(di\013eren)m(t)e(for)h
6372
 
(r\013t)m(wnd)g(complicates)g(the)150 956 y(meaning)i(of)h(the)g
6373
 
Fo(stride)e Fu(and)i Fo(dist)e Fu(parameters)j(of)f(in-place)e
6374
 
(transforms|are)i(they)g(in)e(units)h(of)150 1066 y Fo(fftw_real)g
6375
 
Fu(or)i Fo(fftw_complex)c Fu(elemen)m(ts?)61 b(When)37
6376
 
b(reading)f(the)h(input,)g(they)g(are)h(in)m(terpreted)e(in)150
6377
 
1175 y(units)28 b(of)i(the)g(datat)m(yp)s(e)h(of)f(the)g(input)d(data.)
6378
 
42 b(When)29 b(writing)f(the)i(output,)g(the)f Fo(istride)f
6379
 
Fu(and)h Fo(idist)150 1285 y Fu(are)36 b(translated)g(to)g(the)g
6380
 
(output)f(datat)m(yp)s(e's)i(\\units")e(in)f(one)i(of)g(t)m(w)m(o)h(w)m
6381
 
(a)m(ys,)i(corresp)s(onding)33 b(to)k(the)150 1394 y(t)m(w)m(o)d(most)e
6382
 
(common)h(situations)e(in)g(whic)m(h)g Fo(stride)g Fu(and)g
6383
 
Fo(dist)h Fu(parameters)g(are)h(useful.)45 b(Belo)m(w,)33
6384
 
b(w)m(e)150 1504 y(refer)k(to)h(these)g(\\translated")h(parameters)e
6385
 
(as)h Fo(ostride_t)d Fu(and)i Fo(odist_t)p Fu(.)60 b(\(Note)39
6386
 
b(that)g(these)f(are)150 1614 y(computed)31 b(in)m(ternally)e(b)m(y)i
6387
 
(r\013t)m(wnd;)f(the)h(actual)h Fo(ostride)d Fu(and)h
6388
 
Fo(odist)f Fu(parameters)j(are)f(ignored)f(for)150 1723
6389
 
y(in-place)f(transforms.\))275 1865 y(First,)24 b(there)g(is)f(the)h
6390
 
(case)h(where)e(y)m(ou)h(are)g(transforming)e(a)i(n)m(um)m(b)s(er)f(of)
6391
 
h(con)m(tiguous)g(arra)m(ys)g(lo)s(cated)150 1974 y(one)34
6392
 
b(after)g(another)g(in)f(memory)-8 b(.)51 b(In)33 b(this)g(situation,)h
6393
 
Fo(istride)e Fu(is)g Fo(1)i Fu(and)f Fo(idist)f Fu(is)h(the)h(pro)s
6394
 
(duct)f(of)150 2084 y(the)f(ph)m(ysical)e(dimensions)e(of)k(the)g(arra)
6395
 
m(y)-8 b(.)45 b Fo(ostride_t)29 b Fu(and)h Fo(odist_t)g
6396
 
Fu(are)i(then)f(c)m(hosen)h(so)g(that)g(the)150 2194
6397
 
y(output)38 b(arra)m(ys)g(are)h(con)m(tiguous)f(and)f(lie)g(on)h(top)h
6398
 
(of)f(the)g(input)e(arra)m(ys.)65 b Fo(ostride_t)35 b
6399
 
Fu(is)i(therefore)150 2303 y Fo(1)p Fu(.)50 b(F)-8 b(or)34
6400
 
b(a)g(real-to-complex)g(transform,)g Fo(odist_t)e Fu(is)g
6401
 
Fo(idist/2)p Fu(;)i(for)f(a)h(complex-to-real)g(transform,)150
6402
 
2413 y Fo(odist_t)28 b Fu(is)i Fo(idist*2)p Fu(.)275
6403
 
2554 y(The)k(second)g(case)i(is)e(when)f(y)m(ou)i(ha)m(v)m(e)h(an)f
6404
 
(arra)m(y)g(in)e(whic)m(h)g(eac)m(h)j(elemen)m(t)f(has)g
6405
 
Fo(nc)f Fu(comp)s(onen)m(ts)150 2664 y(\(e.g.)42 b(a)30
6406
 
b(structure)g(with)e Fo(nc)i Fu(n)m(umeric)e(\014elds\),)i(and)f(y)m
 
6446
TeXDict begin 33 34 bop 150 -116 a Fv(Chapter)30 b(3:)41
 
6447
b(FFTW)31 b(Reference)2354 b(33)150 299 y(computed)31
 
6448
b(in)m(ternally)e(b)m(y)i(r\013t)m(wnd;)f(the)h(actual)h
 
6449
Fp(ostride)d Fv(and)h Fp(odist)f Fv(parameters)j(are)f(ignored)f(for)
 
6450
150 408 y(in-place)f(transforms.\))275 548 y(First,)24
 
6451
b(there)g(is)f(the)h(case)h(where)e(y)m(ou)h(are)g(transforming)e(a)i
 
6452
(n)m(um)m(b)s(er)f(of)h(con)m(tiguous)g(arra)m(ys)g(lo)s(cated)150
 
6453
658 y(one)34 b(after)g(another)g(in)f(memory)-8 b(.)51
 
6454
b(In)33 b(this)g(situation,)h Fp(istride)e Fv(is)g Fp(1)i
 
6455
Fv(and)f Fp(idist)f Fv(is)h(the)h(pro)s(duct)f(of)150
 
6456
768 y(the)f(ph)m(ysical)e(dimensions)e(of)k(the)g(arra)m(y)-8
 
6457
b(.)45 b Fp(ostride_t)29 b Fv(and)h Fp(odist_t)g Fv(are)i(then)f(c)m
 
6458
(hosen)h(so)g(that)g(the)150 877 y(output)38 b(arra)m(ys)g(are)h(con)m
 
6459
(tiguous)f(and)f(lie)g(on)h(top)h(of)f(the)g(input)e(arra)m(ys.)65
 
6460
b Fp(ostride_t)35 b Fv(is)i(therefore)150 987 y Fp(1)p
 
6461
Fv(.)50 b(F)-8 b(or)34 b(a)g(real-to-complex)g(transform,)g
 
6462
Fp(odist_t)e Fv(is)g Fp(idist/2)p Fv(;)i(for)f(a)h(complex-to-real)g
 
6463
(transform,)150 1096 y Fp(odist_t)28 b Fv(is)i Fp(idist*2)p
 
6464
Fv(.)275 1236 y(The)k(second)g(case)i(is)e(when)f(y)m(ou)i(ha)m(v)m(e)h
 
6465
(an)f(arra)m(y)g(in)e(whic)m(h)g(eac)m(h)j(elemen)m(t)f(has)g
 
6466
Fp(nc)f Fv(comp)s(onen)m(ts)150 1346 y(\(e.g.)42 b(a)30
 
6467
b(structure)g(with)e Fp(nc)i Fv(n)m(umeric)e(\014elds\),)i(and)f(y)m
6407
6468
(ou)h(w)m(an)m(t)h(to)g(transform)e(all)g(of)h(the)g(comp)s(onen)m(ts)
6408
 
150 2774 y(at)f(once.)40 b(Here,)29 b Fo(istride)d Fu(is)h
6409
 
Fo(nc)h Fu(and)f Fo(idist)g Fu(is)g Fo(1)p Fu(.)39 b(F)-8
 
6469
150 1456 y(at)f(once.)40 b(Here,)29 b Fp(istride)d Fv(is)h
 
6470
Fp(nc)h Fv(and)f Fp(idist)g Fv(is)g Fp(1)p Fv(.)39 b(F)-8
6410
6471
b(or)29 b(this)e(case,)i(it)f(is)f(natural)g(to)h(w)m(an)m(t)h(the)f
6411
 
(output)150 2883 y(to)j(also)g(ha)m(v)m(e)g Fo(nc)f Fu(consecutiv)m(e)i
 
6472
(output)150 1565 y(to)j(also)g(ha)m(v)m(e)g Fp(nc)f Fv(consecutiv)m(e)i
6412
6473
(comp)s(onen)m(ts,)f(no)m(w)f(of)h(the)g(output)f(data)h(t)m(yp)s(e;)g
6413
 
(this)e(is)h(exactly)h(what)150 2993 y(r\013t)m(wnd)k(do)s(es.)58
6414
 
b(Sp)s(eci\014cally)-8 b(,)35 b(it)h(uses)f(an)h Fo(ostride_t)e
6415
 
Fu(equal)i(to)g Fo(istride)p Fu(,)g(and)g(an)g Fo(odist_t)e
6416
 
Fu(of)i Fo(1)p Fu(.)150 3102 y(\(Astute)26 b(readers)e(will)e(realize)j
 
6474
(this)e(is)h(exactly)h(what)150 1675 y(r\013t)m(wnd)k(do)s(es.)58
 
6475
b(Sp)s(eci\014cally)-8 b(,)35 b(it)h(uses)f(an)h Fp(ostride_t)e
 
6476
Fv(equal)i(to)g Fp(istride)p Fv(,)g(and)g(an)g Fp(odist_t)e
 
6477
Fv(of)i Fp(1)p Fv(.)150 1784 y(\(Astute)26 b(readers)e(will)e(realize)j
6417
6478
(that)g(some)g(extra)g(bu\013er)f(space)h(is)f(required)f(in)g(order)i
6418
 
(to)g(p)s(erform)e(suc)m(h)150 3212 y(a)31 b(transform;)f(this)f(is)g
 
6479
(to)g(p)s(erform)e(suc)m(h)150 1894 y(a)31 b(transform;)f(this)f(is)g
6419
6480
(handled)g(automatically)h(b)m(y)g(r\013t)m(wnd.\))275
6420
 
3353 y(The)k(general)h(rule)e(is)h(as)h(follo)m(ws.)53
6421
 
b Fo(ostride_t)33 b Fu(equals)h Fo(istride)p Fu(.)52
6422
 
b(If)34 b Fo(idist)g Fu(is)g Fo(1)g Fu(and)g Fo(idist)g
6423
 
Fu(is)150 3463 y(less)29 b(than)g Fo(istride)p Fu(,)e(then)i
6424
 
Fo(odist_t)f Fu(is)g Fo(1)p Fu(.)40 b(Otherwise,)28 b(for)i(a)f
6425
 
(real-to-complex)h(transform)f Fo(odist_t)150 3573 y
6426
 
Fu(is)g Fo(idist/2)g Fu(and)h(for)g(a)g(complex-to-real)i(transform)d
6427
 
Fo(odist_t)g Fu(is)g Fo(idist*2)p Fu(.)150 3811 y Fi(3.5.5)63
 
6481
2034 y(The)k(general)h(rule)e(is)h(as)h(follo)m(ws.)53
 
6482
b Fp(ostride_t)33 b Fv(equals)h Fp(istride)p Fv(.)52
 
6483
b(If)34 b Fp(idist)g Fv(is)g Fp(1)g Fv(and)g Fp(idist)g
 
6484
Fv(is)150 2144 y(less)29 b(than)g Fp(istride)p Fv(,)e(then)i
 
6485
Fp(odist_t)f Fv(is)g Fp(1)p Fv(.)40 b(Otherwise,)28 b(for)i(a)f
 
6486
(real-to-complex)h(transform)f Fp(odist_t)150 2253 y
 
6487
Fv(is)g Fp(idist/2)g Fv(and)h(for)g(a)g(complex-to-real)i(transform)d
 
6488
Fp(odist_t)g Fv(is)g Fp(idist*2)p Fv(.)150 2488 y Fh(3.5.5)63
6428
6489
b(Destro)m(ying)41 b(a)g(Multi-dimensional)h(Plan)390
6429
 
4005 y Fo(#include)k(<rfftw.h>)390 4212 y(void)h
 
6490
2650 y Fp(#include)k(<rfftw.h>)390 2858 y(void)h
6430
6491
(rfftwnd_destroy_plan\(rf)o(ftwn)o(d_p)o(lan)41 b(plan\);)275
6431
 
4354 y Fu(The)34 b(function)f Fo(rfftwnd_destroy_plan)c
6432
 
Fu(frees)35 b(the)g(plan)e Fo(plan)h Fu(and)g(releases)h(all)e(the)i
6433
 
(memory)150 4464 y(asso)s(ciated)c(with)e(it.)40 b(After)31
 
6492
2998 y Fv(The)34 b(function)f Fp(rfftwnd_destroy_plan)c
 
6493
Fv(frees)35 b(the)g(plan)e Fp(plan)h Fv(and)g(releases)h(all)e(the)i
 
6494
(memory)150 3107 y(asso)s(ciated)c(with)e(it.)40 b(After)31
6434
6495
b(destruction,)f(a)g(plan)f(is)h(no)g(longer)g(v)-5 b(alid.)150
6435
 
4702 y Fi(3.5.6)63 b(What)40 b(RFFTWND)h(Really)f(Computes)275
6436
 
4902 y Fu(The)23 b(con)m(v)m(en)m(tions)i(that)f(w)m(e)h(follo)m(w)e
 
6496
3343 y Fh(3.5.6)63 b(What)40 b(RFFTWND)h(Really)f(Computes)275
 
6497
3541 y Fv(The)23 b(con)m(v)m(en)m(tions)i(that)f(w)m(e)h(follo)m(w)e
6437
6498
(for)g(the)h(real)g(m)m(ulti-dimensional)c(transform)j(are)h(analogous)
6438
 
g(to)150 5011 y(those)f(for)f(the)g(complex)g(m)m(ulti-dimensional)d
 
6499
g(to)150 3650 y(those)f(for)f(the)g(complex)g(m)m(ulti-dimensional)d
6439
6500
(transform.)37 b(In)22 b(particular,)g(the)h(forw)m(ard)f(transform)f
6440
 
(has)150 5121 y(a)33 b(negativ)m(e)g(sign)f(in)f(the)i(exp)s(onen)m(t)f
 
6501
(has)150 3760 y(a)33 b(negativ)m(e)g(sign)f(in)f(the)i(exp)s(onen)m(t)f
6441
6502
(and)g(neither)f(the)i(forw)m(ard)f(nor)g(the)g(bac)m(kw)m(ard)h
6442
 
(transforms)f(will)150 5230 y(p)s(erform)g(an)m(y)i(normalization.)48
 
6503
(transforms)f(will)150 3870 y(p)s(erform)g(an)m(y)i(normalization.)48
6443
6504
b(Computing)32 b(the)h(bac)m(kw)m(ard)h(transform)f(of)g(the)h(forw)m
6444
 
(ard)f(transform)150 5340 y(will)c(m)m(ultiply)g(the)j(arra)m(y)h(b)m
 
6505
(ard)f(transform)150 3979 y(will)c(m)m(ultiply)g(the)j(arra)m(y)h(b)m
6445
6506
(y)f(the)g(pro)s(duct)e(of)i(its)g(dimensions)d(\(that)k(is,)e(the)h
6446
 
(logical)g(dimensions)d(of)p eop
 
6507
(logical)g(dimensions)d(of)150 4089 y(the)37 b(real)g(data\).)63
 
6508
b(The)36 b(forw)m(ard)h(transform)f(is)h(real-to-complex)h(and)e(the)i
 
6509
(bac)m(kw)m(ard)f(transform)g(is)150 4198 y(complex-to-real.)275
 
6510
4338 y(The)29 b(exact)j(mathematical)f(de\014nition)d(of)j(our)e(real)h
 
6511
(m)m(ulti-dimensional)d(transform)j(follo)m(ws.)150 4478
 
6512
y Fr(R)-5 b(e)g(al)35 b(to)e(c)-5 b(omplex)35 b(\(forwar)-5
 
6513
b(d\))36 b(tr)-5 b(ansform.)44 b Fv(Let)32 b Fm(X)38
 
6514
b Fv(b)s(e)30 b(a)h Fm(d)p Fv(-dimensional)e(real)i(arra)m(y)g(whose)g
 
6515
(elemen)m(ts)150 4588 y(are)g Fm(X)7 b Fv([)p Fm(j)446
 
6516
4602 y Fo(1)484 4588 y Fm(;)15 b(j)561 4602 y Fo(2)599
 
6517
4588 y Fm(;)g(:)g(:)g(:)i(;)e(j)838 4602 y Fl(d)877 4588
 
6518
y Fv(],)31 b(where)f(0)c Ft(\024)f Fm(j)1425 4602 y Fl(s)1486
 
6519
4588 y Fm(<)g(n)1637 4602 y Fl(s)1703 4588 y Fv(for)30
 
6520
b(all)f Fm(s)c Ft(2)g(f)p Fv(1)p Fm(;)15 b Fv(2)p Fm(;)g(:)g(:)g(:)k(;)
 
6521
c(d)p Ft(g)p Fv(.)42 b(Let)31 b(also)f Fm(!)3062 4602
 
6522
y Fl(s)3122 4588 y Fv(=)c Fm(e)3261 4555 y Fo(2)p Fl(\031)3335
 
6523
4510 y Fk(p)p 3389 4510 85 3 v 3389 4555 a(\000)p Fo(1)p
 
6524
Fl(=n)3549 4563 y Fe(s)3586 4588 y Fv(,)k(for)150 4698
 
6525
y(all)60 b Fm(s)24 b Ft(2)h(f)p Fv(1)p Fm(;)15 b Fv(2)p
 
6526
Fm(;)g(:)g(:)g(:)k(;)c(d)p Ft(g)p Fv(.)275 4838 y(The)24
 
6527
b(real)g(to)h(complex)g(transform)e(computes)i(a)g(complex)f(arra)m(y)i
 
6528
Fm(Y)20 b Fv(,)26 b(whose)e(structure)g(is)g(the)h(same)150
 
6529
4947 y(as)31 b(that)g(of)f Fm(X)7 b Fv(,)31 b(de\014ned)e(b)m(y)534
 
6530
5258 y Fm(Y)20 b Fv([)p Fm(i)663 5272 y Fo(1)701 5258
 
6531
y Fm(;)15 b(i)772 5272 y Fo(2)810 5258 y Fm(;)g(:)g(:)g(:)i(;)e(i)1043
 
6532
5272 y Fl(d)1082 5258 y Fv(])26 b(=)1229 5151 y Fl(n)1270
 
6533
5159 y Fd(1)1302 5151 y Fk(\000)p Fo(1)1248 5177 y Fg(X)1236
 
6534
5354 y Fl(j)1263 5362 y Fd(1)1296 5354 y Fo(=0)1402 5151
 
6535
y Fl(n)1443 5159 y Fd(2)1476 5151 y Fk(\000)p Fo(1)1421
 
6536
5177 y Fg(X)1409 5354 y Fl(j)1436 5362 y Fd(2)1469 5354
 
6537
y Fo(=0)1576 5258 y Ft(\001)15 b(\001)g(\001)1697 5150
 
6538
y Fl(n)1738 5159 y Fe(d)1773 5150 y Fk(\000)p Fo(1)1717
 
6539
5177 y Fg(X)1704 5354 y Fl(j)1731 5363 y Fe(d)1767 5354
 
6540
y Fo(=0)1873 5258 y Fm(X)7 b Fv([)p Fm(j)2017 5272 y
 
6541
Fo(1)2055 5258 y Fm(;)15 b(j)2132 5272 y Fo(2)2170 5258
 
6542
y Fm(;)g(:)g(:)g(:)i(;)e(j)2409 5272 y Fl(d)2449 5258
 
6543
y Fv(])p Fm(!)2534 5215 y Fk(\000)p Fl(i)2609 5223 y
 
6544
Fd(1)2642 5215 y Fl(j)2669 5223 y Fd(1)2531 5277 y Fo(1)2706
 
6545
5258 y Fm(!)2766 5215 y Fk(\000)p Fl(i)2841 5223 y Fd(2)2873
 
6546
5215 y Fl(j)2900 5223 y Fd(2)2763 5277 y Fo(2)2952 5258
 
6547
y Ft(\001)g(\001)g(\001)i Fm(!)3134 5215 y Fk(\000)p
 
6548
Fl(i)3209 5224 y Fe(d)3244 5215 y Fl(j)3271 5224 y Fe(d)3131
 
6549
5280 y Fl(d)3340 5258 y Fm(:)p eop end
6447
6550
%%Page: 34 36
6448
 
34 35 bop 150 -116 a Fu(34)3232 b(FFTW)150 299 y(the)37
6449
 
b(real)g(data\).)63 b(The)36 b(forw)m(ard)h(transform)f(is)h
6450
 
(real-to-complex)h(and)e(the)i(bac)m(kw)m(ard)f(transform)g(is)150
6451
 
408 y(complex-to-real.)275 541 y(The)29 b(exact)j(mathematical)f
6452
 
(de\014nition)d(of)j(our)e(real)h(m)m(ulti-dimensional)d(transform)j
6453
 
(follo)m(ws.)150 674 y Fq(R)-5 b(e)g(al)35 b(to)e(c)-5
6454
 
b(omplex)35 b(\(forwar)-5 b(d\))36 b(tr)-5 b(ansform.)44
6455
 
b Fu(Let)32 b Fl(X)38 b Fu(b)s(e)30 b(a)h Fl(d)p Fu(-dimensional)e
6456
 
(real)i(arra)m(y)g(whose)g(elemen)m(ts)150 784 y(are)g
6457
 
Fl(X)7 b Fu([)p Fl(j)446 798 y Fn(1)484 784 y Fl(;)15
6458
 
b(j)561 798 y Fn(2)599 784 y Fl(;)g(:)g(:)g(:)i(;)e(j)838
6459
 
798 y Fk(d)877 784 y Fu(],)31 b(where)f(0)c Fs(\024)f
6460
 
Fl(j)1425 798 y Fk(s)1486 784 y Fl(<)g(n)1637 798 y Fk(s)1703
6461
 
784 y Fu(for)30 b(all)f Fl(s)c Fs(2)g(f)p Fu(1)p Fl(;)15
6462
 
b Fu(2)p Fl(;)g(:)g(:)g(:)k(;)c(d)p Fs(g)p Fu(.)42 b(Let)31
6463
 
b(also)f Fl(!)3062 798 y Fk(s)3122 784 y Fu(=)c Fl(e)3261
6464
 
751 y Fn(2)p Fk(\031)3335 706 y Fj(p)p 3389 706 85 3
6465
 
v 3389 751 a(\000)p Fn(1)p Fk(=n)3549 759 y Fg(s)3586
6466
 
784 y Fu(,)k(for)150 893 y(all)60 b Fl(s)24 b Fs(2)h(f)p
6467
 
Fu(1)p Fl(;)15 b Fu(2)p Fl(;)g(:)g(:)g(:)k(;)c(d)p Fs(g)p
6468
 
Fu(.)275 1026 y(The)24 b(real)g(to)h(complex)g(transform)e(computes)i
6469
 
(a)g(complex)f(arra)m(y)i Fl(Y)20 b Fu(,)26 b(whose)e(structure)g(is)g
6470
 
(the)h(same)150 1136 y(as)31 b(that)g(of)f Fl(X)7 b Fu(,)31
6471
 
b(de\014ned)e(b)m(y)534 1430 y Fl(Y)20 b Fu([)p Fl(i)663
6472
 
1444 y Fn(1)701 1430 y Fl(;)15 b(i)772 1444 y Fn(2)810
6473
 
1430 y Fl(;)g(:)g(:)g(:)i(;)e(i)1043 1444 y Fk(d)1082
6474
 
1430 y Fu(])26 b(=)1229 1324 y Fk(n)1270 1332 y Ff(1)1302
6475
 
1324 y Fj(\000)p Fn(1)1248 1350 y Fh(X)1236 1526 y Fk(j)1263
6476
 
1534 y Ff(1)1296 1526 y Fn(=0)1402 1324 y Fk(n)1443 1332
6477
 
y Ff(2)1476 1324 y Fj(\000)p Fn(1)1421 1350 y Fh(X)1409
6478
 
1526 y Fk(j)1436 1534 y Ff(2)1469 1526 y Fn(=0)1576 1430
6479
 
y Fs(\001)15 b(\001)g(\001)1697 1323 y Fk(n)1738 1332
6480
 
y Fg(d)1773 1323 y Fj(\000)p Fn(1)1717 1350 y Fh(X)1704
6481
 
1526 y Fk(j)1731 1535 y Fg(d)1767 1526 y Fn(=0)1873 1430
6482
 
y Fl(X)7 b Fu([)p Fl(j)2017 1444 y Fn(1)2055 1430 y Fl(;)15
6483
 
b(j)2132 1444 y Fn(2)2170 1430 y Fl(;)g(:)g(:)g(:)i(;)e(j)2409
6484
 
1444 y Fk(d)2449 1430 y Fu(])p Fl(!)2534 1388 y Fj(\000)p
6485
 
Fk(i)2609 1396 y Ff(1)2642 1388 y Fk(j)2669 1396 y Ff(1)2531
6486
 
1450 y Fn(1)2706 1430 y Fl(!)2766 1388 y Fj(\000)p Fk(i)2841
6487
 
1396 y Ff(2)2873 1388 y Fk(j)2900 1396 y Ff(2)2763 1450
6488
 
y Fn(2)2952 1430 y Fs(\001)g(\001)g(\001)i Fl(!)3134
6489
 
1388 y Fj(\000)p Fk(i)3209 1397 y Fg(d)3244 1388 y Fk(j)3271
6490
 
1397 y Fg(d)3131 1453 y Fk(d)3340 1430 y Fl(:)275 1693
6491
 
y Fu(The)26 b(output)g(arra)m(y)h Fl(Y)46 b Fu(enjo)m(ys)27
 
6551
TeXDict begin 34 35 bop 150 -116 a Fv(34)3232 b(FFTW)275
 
6552
299 y(The)26 b(output)g(arra)m(y)h Fm(Y)46 b Fv(enjo)m(ys)27
6492
6553
b(a)g(m)m(ultidimensional)22 b(hermitian)j(symmetry)-8
6493
 
b(,)27 b(that)g(is,)g(the)f(iden)m(tit)m(y)150 1802 y
6494
 
Fl(Y)20 b Fu([)p Fl(i)279 1816 y Fn(1)317 1802 y Fl(;)15
6495
 
b(i)388 1816 y Fn(2)426 1802 y Fl(;)g(:)g(:)g(:)h(;)f(i)658
6496
 
1816 y Fk(d)698 1802 y Fu(])28 b(=)g Fl(Y)20 b Fu([)p
6497
 
Fl(n)1003 1816 y Fn(1)1062 1802 y Fs(\000)h Fl(i)1185
6498
 
1816 y Fn(1)1223 1802 y Fl(;)15 b(n)1318 1816 y Fn(2)1376
6499
 
1802 y Fs(\000)21 b Fl(i)1499 1816 y Fn(2)1537 1802 y
6500
 
Fl(;)15 b(:)g(:)g(:)h(;)f(n)1793 1816 y Fk(d)1854 1802
6501
 
y Fs(\000)21 b Fl(i)1977 1816 y Fk(d)2016 1802 y Fu(])2041
6502
 
1769 y Fj(\003)2111 1802 y Fu(holds)31 b(for)h(all)f(0)e
6503
 
Fs(\024)f Fl(i)2824 1816 y Fk(s)2888 1802 y Fl(<)g(n)3042
6504
 
1816 y Fk(s)3077 1802 y Fu(.)46 b(Because)34 b(of)e(this)150
6505
 
1912 y(symmetry)-8 b(,)29 b Fl(Y)48 b Fu(is)28 b(stored)g(in)g(the)g(p)
6506
 
s(eculiar)e(w)m(a)m(y)k(describ)s(ed)c(in)h(Section)h(3.5.3)j([Arra)m
6507
 
(y)e(Dimensions)d(for)150 2021 y(Real)k(Multi-dimensional)d(T)-8
6508
 
b(ransforms],)30 b(page)h(32.)150 2154 y Fq(Complex)44
6509
 
b(to)f(r)-5 b(e)g(al)44 b(\(b)-5 b(ackwar)g(d\))45 b(tr)-5
6510
 
b(ansform.)74 b Fu(Let)42 b Fl(X)48 b Fu(b)s(e)41 b(a)g
6511
 
Fl(d)p Fu(-dimensional)e(complex)i(arra)m(y)g(whose)150
6512
 
2264 y(elemen)m(ts)f(are)h Fl(X)7 b Fu([)p Fl(j)837 2278
6513
 
y Fn(1)875 2264 y Fl(;)15 b(j)952 2278 y Fn(2)990 2264
6514
 
y Fl(;)g(:)g(:)g(:)i(;)e(j)1229 2278 y Fk(d)1268 2264
6515
 
y Fu(],)43 b(where)c(0)j Fs(\024)f Fl(j)1869 2278 y Fk(s)1946
6516
 
2264 y Fl(<)g(n)2113 2278 y Fk(s)2188 2264 y Fu(for)e(all)g
6517
 
Fl(s)i Fs(2)g(f)p Fu(1)p Fl(;)15 b Fu(2)p Fl(;)g(:)g(:)g(:)j(;)d(d)p
6518
 
Fs(g)p Fu(.)71 b(The)39 b(arra)m(y)i Fl(X)150 2373 y
6519
 
Fu(m)m(ust)33 b(b)s(e)f(hermitian,)f(that)i(is,)g(the)g(iden)m(tit)m(y)
6520
 
f Fl(X)7 b Fu([)p Fl(j)1906 2387 y Fn(1)1944 2373 y Fl(;)15
6521
 
b(j)2021 2387 y Fn(2)2059 2373 y Fl(;)g(:)g(:)g(:)i(;)e(j)2298
6522
 
2387 y Fk(d)2337 2373 y Fu(])30 b(=)f Fl(X)7 b Fu([)p
6523
 
Fl(n)2654 2387 y Fn(1)2713 2373 y Fs(\000)21 b Fl(j)2842
6524
 
2387 y Fn(1)2880 2373 y Fl(;)15 b(n)2975 2387 y Fn(2)3034
6525
 
2373 y Fs(\000)21 b Fl(j)3163 2387 y Fn(2)3201 2373 y
6526
 
Fl(;)15 b(:)g(:)g(:)i(;)e(n)3458 2387 y Fk(d)3518 2373
6527
 
y Fs(\000)21 b Fl(j)3647 2387 y Fk(d)3687 2373 y Fu(])3712
6528
 
2340 y Fj(\003)150 2483 y Fu(m)m(ust)39 b(hold)e(for)i(all)f(0)i
6529
 
Fs(\024)f Fl(j)1109 2497 y Fk(s)1184 2483 y Fl(<)g(n)1349
6530
 
2497 y Fk(s)1384 2483 y Fu(.)66 b(Moreo)m(v)m(er,)44
6531
 
b Fl(X)i Fu(m)m(ust)39 b(b)s(e)f(stored)h(in)f(memory)g(in)g(the)h(p)s
6532
 
(eculiar)150 2593 y(w)m(a)m(y)32 b(describ)s(ed)d(in)h(Section)h(3.5.3)
6533
 
i([Arra)m(y)e(Dimensions)e(for)i(Real)g(Multi-dimensional)d(T)-8
6534
 
b(ransforms],)150 2702 y(page)31 b(32.)275 2835 y(Let)f
6535
 
Fl(!)494 2849 y Fk(s)554 2835 y Fu(=)25 b Fl(e)692 2802
6536
 
y Fn(2)p Fk(\031)766 2757 y Fj(p)p 821 2757 V 45 x(\000)p
6537
 
Fn(1)p Fk(=n)981 2810 y Fg(s)1017 2835 y Fu(,)30 b(for)f(all)58
6538
 
b Fl(s)25 b Fs(2)g(f)p Fu(1)p Fl(;)15 b Fu(2)p Fl(;)g(:)g(:)g(:)j(;)d
6539
 
(d)p Fs(g)p Fu(.)42 b(The)29 b(complex)g(to)i(real)e(transform)g
6540
 
(computes)h(a)150 2944 y(real)g(arra)m(y)h Fl(Y)20 b
6541
 
Fu(,)30 b(whose)h(structure)f(is)f(the)h(same)h(as)g(that)g(of)f
6542
 
Fl(X)7 b Fu(,)31 b(de\014ned)f(b)m(y)612 3239 y Fl(Y)20
6543
 
b Fu([)p Fl(i)741 3253 y Fn(1)779 3239 y Fl(;)15 b(i)850
6544
 
3253 y Fn(2)888 3239 y Fl(;)g(:)g(:)g(:)i(;)e(i)1121
6545
 
3253 y Fk(d)1160 3239 y Fu(])25 b(=)1306 3133 y Fk(n)1347
6546
 
3141 y Ff(1)1380 3133 y Fj(\000)p Fn(1)1326 3158 y Fh(X)1314
6547
 
3335 y Fk(j)1341 3343 y Ff(1)1374 3335 y Fn(=0)1480 3133
6548
 
y Fk(n)1521 3141 y Ff(2)1553 3133 y Fj(\000)p Fn(1)1499
6549
 
3158 y Fh(X)1487 3335 y Fk(j)1514 3343 y Ff(2)1547 3335
6550
 
y Fn(=0)1654 3239 y Fs(\001)15 b(\001)g(\001)1775 3132
6551
 
y Fk(n)1816 3141 y Fg(d)1851 3132 y Fj(\000)p Fn(1)1795
6552
 
3158 y Fh(X)1782 3335 y Fk(j)1809 3344 y Fg(d)1844 3335
6553
 
y Fn(=0)1951 3239 y Fl(X)7 b Fu([)p Fl(j)2095 3253 y
6554
 
Fn(1)2133 3239 y Fl(;)15 b(j)2210 3253 y Fn(2)2248 3239
6555
 
y Fl(;)g(:)g(:)g(:)i(;)e(j)2487 3253 y Fk(d)2526 3239
6556
 
y Fu(])p Fl(!)2611 3197 y Fk(i)2634 3205 y Ff(1)2667
6557
 
3197 y Fk(j)2694 3205 y Ff(1)2608 3259 y Fn(1)2731 3239
6558
 
y Fl(!)2791 3197 y Fk(i)2814 3205 y Ff(2)2847 3197 y
6559
 
Fk(j)2874 3205 y Ff(2)2788 3259 y Fn(2)2926 3239 y Fs(\001)g(\001)g
6560
 
(\001)i Fl(!)3108 3197 y Fk(i)3131 3206 y Fg(d)3166 3197
6561
 
y Fk(j)3193 3206 y Fg(d)3105 3262 y Fk(d)3263 3239 y
6562
 
Fl(:)275 3507 y Fu(\(That)30 b Fl(Y)50 b Fu(is)30 b(real)g(is)f(not)i
6563
 
(mean)m(t)g(to)g(b)s(e)f(ob)m(vious,)g(although)g(the)g(pro)s(of)g(is)f
6564
 
(easy)-8 b(.\))275 3639 y(Computing)26 b(the)i(forw)m(ard)f(transform)g
6565
 
(follo)m(w)m(ed)h(b)m(y)g(the)g(bac)m(kw)m(ard)g(transform)f(will)f(m)m
6566
 
(ultiply)f(the)150 3749 y(arra)m(y)31 b(b)m(y)514 3685
6567
 
y Fh(Q)593 3705 y Fk(d)593 3772 y(s)p Fn(=1)727 3749
6568
 
y Fl(n)782 3763 y Fk(d)821 3749 y Fu(.)150 4001 y Ft(3.6)68
6569
 
b(Wisdom)45 b(Reference)150 4278 y Fi(3.6.1)63 b(Exp)s(orting)41
6570
 
b(Wisdom)390 4463 y Fo(#include)46 b(<fftw.h>)390 4671
 
6554
b(,)27 b(that)g(is,)g(the)f(iden)m(tit)m(y)150 408 y
 
6555
Fm(Y)20 b Fv([)p Fm(i)279 422 y Fo(1)317 408 y Fm(;)15
 
6556
b(i)388 422 y Fo(2)426 408 y Fm(;)g(:)g(:)g(:)h(;)f(i)658
 
6557
422 y Fl(d)698 408 y Fv(])28 b(=)g Fm(Y)20 b Fv([)p Fm(n)1003
 
6558
422 y Fo(1)1062 408 y Ft(\000)h Fm(i)1185 422 y Fo(1)1223
 
6559
408 y Fm(;)15 b(n)1318 422 y Fo(2)1376 408 y Ft(\000)21
 
6560
b Fm(i)1499 422 y Fo(2)1537 408 y Fm(;)15 b(:)g(:)g(:)h(;)f(n)1793
 
6561
422 y Fl(d)1854 408 y Ft(\000)21 b Fm(i)1977 422 y Fl(d)2016
 
6562
408 y Fv(])2041 375 y Fk(\003)2111 408 y Fv(holds)31
 
6563
b(for)h(all)f(0)e Ft(\024)f Fm(i)2824 422 y Fl(s)2888
 
6564
408 y Fm(<)g(n)3042 422 y Fl(s)3077 408 y Fv(.)46 b(Because)34
 
6565
b(of)e(this)150 518 y(symmetry)-8 b(,)29 b Fm(Y)48 b
 
6566
Fv(is)28 b(stored)g(in)g(the)g(p)s(eculiar)e(w)m(a)m(y)k(describ)s(ed)c
 
6567
(in)h(Section)h(3.5.3)j([Arra)m(y)e(Dimensions)d(for)150
 
6568
628 y(Real)k(Multi-dimensional)d(T)-8 b(ransforms],)30
 
6569
b(page)h(32.)150 761 y Fr(Complex)44 b(to)f(r)-5 b(e)g(al)44
 
6570
b(\(b)-5 b(ackwar)g(d\))45 b(tr)-5 b(ansform.)74 b Fv(Let)42
 
6571
b Fm(X)48 b Fv(b)s(e)41 b(a)g Fm(d)p Fv(-dimensional)e(complex)i(arra)m
 
6572
(y)g(whose)150 870 y(elemen)m(ts)f(are)h Fm(X)7 b Fv([)p
 
6573
Fm(j)837 884 y Fo(1)875 870 y Fm(;)15 b(j)952 884 y Fo(2)990
 
6574
870 y Fm(;)g(:)g(:)g(:)i(;)e(j)1229 884 y Fl(d)1268 870
 
6575
y Fv(],)43 b(where)c(0)j Ft(\024)f Fm(j)1869 884 y Fl(s)1946
 
6576
870 y Fm(<)g(n)2113 884 y Fl(s)2188 870 y Fv(for)e(all)g
 
6577
Fm(s)i Ft(2)g(f)p Fv(1)p Fm(;)15 b Fv(2)p Fm(;)g(:)g(:)g(:)j(;)d(d)p
 
6578
Ft(g)p Fv(.)71 b(The)39 b(arra)m(y)i Fm(X)150 980 y Fv(m)m(ust)33
 
6579
b(b)s(e)f(hermitian,)f(that)i(is,)g(the)g(iden)m(tit)m(y)f
 
6580
Fm(X)7 b Fv([)p Fm(j)1906 994 y Fo(1)1944 980 y Fm(;)15
 
6581
b(j)2021 994 y Fo(2)2059 980 y Fm(;)g(:)g(:)g(:)i(;)e(j)2298
 
6582
994 y Fl(d)2337 980 y Fv(])30 b(=)f Fm(X)7 b Fv([)p Fm(n)2654
 
6583
994 y Fo(1)2713 980 y Ft(\000)21 b Fm(j)2842 994 y Fo(1)2880
 
6584
980 y Fm(;)15 b(n)2975 994 y Fo(2)3034 980 y Ft(\000)21
 
6585
b Fm(j)3163 994 y Fo(2)3201 980 y Fm(;)15 b(:)g(:)g(:)i(;)e(n)3458
 
6586
994 y Fl(d)3518 980 y Ft(\000)21 b Fm(j)3647 994 y Fl(d)3687
 
6587
980 y Fv(])3712 947 y Fk(\003)150 1090 y Fv(m)m(ust)39
 
6588
b(hold)e(for)i(all)f(0)i Ft(\024)f Fm(j)1109 1104 y Fl(s)1184
 
6589
1090 y Fm(<)g(n)1349 1104 y Fl(s)1384 1090 y Fv(.)66
 
6590
b(Moreo)m(v)m(er,)44 b Fm(X)i Fv(m)m(ust)39 b(b)s(e)f(stored)h(in)f
 
6591
(memory)g(in)g(the)h(p)s(eculiar)150 1199 y(w)m(a)m(y)32
 
6592
b(describ)s(ed)d(in)h(Section)h(3.5.3)i([Arra)m(y)e(Dimensions)e(for)i
 
6593
(Real)g(Multi-dimensional)d(T)-8 b(ransforms],)150 1309
 
6594
y(page)31 b(32.)275 1442 y(Let)f Fm(!)494 1456 y Fl(s)554
 
6595
1442 y Fv(=)25 b Fm(e)692 1409 y Fo(2)p Fl(\031)766 1364
 
6596
y Fk(p)p 821 1364 85 3 v 45 x(\000)p Fo(1)p Fl(=n)981
 
6597
1417 y Fe(s)1017 1442 y Fv(,)30 b(for)f(all)58 b Fm(s)25
 
6598
b Ft(2)g(f)p Fv(1)p Fm(;)15 b Fv(2)p Fm(;)g(:)g(:)g(:)j(;)d(d)p
 
6599
Ft(g)p Fv(.)42 b(The)29 b(complex)g(to)i(real)e(transform)g(computes)h
 
6600
(a)150 1552 y(real)g(arra)m(y)h Fm(Y)20 b Fv(,)30 b(whose)h(structure)f
 
6601
(is)f(the)h(same)h(as)g(that)g(of)f Fm(X)7 b Fv(,)31
 
6602
b(de\014ned)f(b)m(y)612 1847 y Fm(Y)20 b Fv([)p Fm(i)741
 
6603
1861 y Fo(1)779 1847 y Fm(;)15 b(i)850 1861 y Fo(2)888
 
6604
1847 y Fm(;)g(:)g(:)g(:)i(;)e(i)1121 1861 y Fl(d)1160
 
6605
1847 y Fv(])25 b(=)1306 1740 y Fl(n)1347 1748 y Fd(1)1380
 
6606
1740 y Fk(\000)p Fo(1)1326 1766 y Fg(X)1314 1943 y Fl(j)1341
 
6607
1951 y Fd(1)1374 1943 y Fo(=0)1480 1740 y Fl(n)1521 1748
 
6608
y Fd(2)1553 1740 y Fk(\000)p Fo(1)1499 1766 y Fg(X)1487
 
6609
1943 y Fl(j)1514 1951 y Fd(2)1547 1943 y Fo(=0)1654 1847
 
6610
y Ft(\001)15 b(\001)g(\001)1775 1740 y Fl(n)1816 1749
 
6611
y Fe(d)1851 1740 y Fk(\000)p Fo(1)1795 1766 y Fg(X)1782
 
6612
1943 y Fl(j)1809 1952 y Fe(d)1844 1943 y Fo(=0)1951 1847
 
6613
y Fm(X)7 b Fv([)p Fm(j)2095 1861 y Fo(1)2133 1847 y Fm(;)15
 
6614
b(j)2210 1861 y Fo(2)2248 1847 y Fm(;)g(:)g(:)g(:)i(;)e(j)2487
 
6615
1861 y Fl(d)2526 1847 y Fv(])p Fm(!)2611 1804 y Fl(i)2634
 
6616
1812 y Fd(1)2667 1804 y Fl(j)2694 1812 y Fd(1)2608 1866
 
6617
y Fo(1)2731 1847 y Fm(!)2791 1804 y Fl(i)2814 1812 y
 
6618
Fd(2)2847 1804 y Fl(j)2874 1812 y Fd(2)2788 1866 y Fo(2)2926
 
6619
1847 y Ft(\001)g(\001)g(\001)i Fm(!)3108 1804 y Fl(i)3131
 
6620
1813 y Fe(d)3166 1804 y Fl(j)3193 1813 y Fe(d)3105 1869
 
6621
y Fl(d)3263 1847 y Fm(:)275 2117 y Fv(\(That)30 b Fm(Y)50
 
6622
b Fv(is)30 b(real)g(is)f(not)i(mean)m(t)g(to)g(b)s(e)f(ob)m(vious,)g
 
6623
(although)g(the)g(pro)s(of)g(is)f(easy)-8 b(.\))275 2250
 
6624
y(Computing)26 b(the)i(forw)m(ard)f(transform)g(follo)m(w)m(ed)h(b)m(y)
 
6625
g(the)g(bac)m(kw)m(ard)g(transform)f(will)f(m)m(ultiply)f(the)150
 
6626
2359 y(arra)m(y)31 b(b)m(y)514 2295 y Fg(Q)593 2316 y
 
6627
Fl(d)593 2382 y(s)p Fo(=1)727 2359 y Fm(n)782 2373 y
 
6628
Fl(d)821 2359 y Fv(.)150 2613 y Fu(3.6)68 b(Wisdom)45
 
6629
b(Reference)150 2891 y Fh(3.6.1)63 b(Exp)s(orting)41
 
6630
b(Wisdom)390 3053 y Fp(#include)46 b(<fftw.h>)390 3261
6571
6631
y(void)h(fftw_export_wisdom\(void)41 b(\(*emitter\)\(char)j(c,)j(void)g
6572
 
(*\),)f(void)h(*data\);)390 4775 y(void)g(fftw_export_wisdom_to_f)o
6573
 
(ile\()o(FIL)o(E)42 b(*output_file\);)390 4878 y(char)47
 
6632
(*\),)f(void)h(*data\);)390 3365 y(void)g(fftw_export_wisdom_to_f)o
 
6633
(ile\()o(FIL)o(E)42 b(*output_file\);)390 3468 y(char)47
6574
6634
b(*fftw_export_wisdom_to_)o(stri)o(ng\()o(void)o(\);)275
6575
 
5011 y Fu(These)35 b(functions)g(allo)m(w)g(y)m(ou)i(to)f(exp)s(ort)g
6576
 
(all)f(curren)m(tly)g(accum)m(ulated)i Fo(wisdom)d Fu(in)g(a)j(form)e
6577
 
(from)150 5121 y(whic)m(h)g(it)g(can)i(b)s(e)e(later)h(imp)s(orted)f
 
6635
3602 y Fv(These)35 b(functions)g(allo)m(w)g(y)m(ou)i(to)f(exp)s(ort)g
 
6636
(all)f(curren)m(tly)g(accum)m(ulated)i Fp(wisdom)d Fv(in)g(a)j(form)e
 
6637
(from)150 3711 y(whic)m(h)g(it)g(can)i(b)s(e)e(later)h(imp)s(orted)f
6578
6638
(and)g(restored,)j(ev)m(en)f(during)c(a)k(separate)g(run)d(of)j(the)f
6579
 
(program.)150 5230 y(\(See)c(Section)e(2.6)i([W)-8 b(ords)32
 
6639
(program.)150 3821 y(\(See)c(Section)e(2.6)i([W)-8 b(ords)32
6580
6640
b(of)f(Wisdom],)g(page)g(13.\))44 b(The)31 b(curren)m(t)f(store)i(of)f
6581
 
Fo(wisdom)e Fu(is)h(not)h(a\013ected)150 5340 y(b)m(y)f(calling)f(an)m
6582
 
(y)i(of)f(these)h(routines.)p eop
6583
 
%%Page: 35 37
6584
 
35 36 bop 150 -116 a Fu(Chapter)30 b(3:)41 b(FFTW)31
6585
 
b(Reference)2354 b(35)275 299 y Fo(fftw_export_wisdom)34
6586
 
b Fu(exp)s(orts)39 b(the)h Fo(wisdom)e Fu(to)i(an)m(y)g(output)f
6587
 
(medium,)i(as)e(sp)s(eci\014ed)f(b)m(y)i(the)150 408
6588
 
y(callbac)m(k)33 b(function)f Fo(emitter)p Fu(.)47 b
6589
 
Fo(emitter)32 b Fu(is)g(a)h Fo(putc)p Fu(-lik)m(e)f(function)g(that)i
6590
 
(writes)e(the)i(c)m(haracter)g Fo(c)f Fu(to)150 518 y(some)27
6591
 
b(output;)g(its)f(second)g(parameter)g(is)g(the)g Fo(data)f
6592
 
Fu(p)s(oin)m(ter)g(passed)h(to)h Fo(fftw_export_wisdom)p
6593
 
Fu(.)34 b(F)-8 b(or)150 628 y(con)m(v)m(enience,)32 b(the)e(follo)m
6594
 
(wing)f(t)m(w)m(o)j(\\wrapp)s(er")d(routines)h(are)g(pro)m(vided:)275
6595
 
762 y Fo(fftw_export_wisdom_to_f)o(ile)k Fu(writes)40
6596
 
b(the)g Fo(wisdom)f Fu(to)j(the)f(curren)m(t)f(p)s(osition)f(in)g
6597
 
Fo(output_)150 872 y(file)p Fu(,)28 b(whic)m(h)g(should)f(b)s(e)i(op)s
 
6641
Fp(wisdom)e Fv(is)h(not)h(a\013ected)150 3930 y(b)m(y)f(calling)f(an)m
 
6642
(y)i(of)f(these)h(routines.)275 4064 y Fp(fftw_export_wisdom)j
 
6643
Fv(exp)s(orts)39 b(the)h Fp(wisdom)e Fv(to)i(an)m(y)g(output)f(medium,)
 
6644
i(as)e(sp)s(eci\014ed)f(b)m(y)i(the)150 4173 y(callbac)m(k)33
 
6645
b(function)f Fp(emitter)p Fv(.)47 b Fp(emitter)32 b Fv(is)g(a)h
 
6646
Fp(putc)p Fv(-lik)m(e)f(function)g(that)i(writes)e(the)i(c)m(haracter)g
 
6647
Fp(c)f Fv(to)150 4283 y(some)27 b(output;)g(its)f(second)g(parameter)g
 
6648
(is)g(the)g Fp(data)f Fv(p)s(oin)m(ter)g(passed)h(to)h
 
6649
Fp(fftw_export_wisdom)p Fv(.)34 b(F)-8 b(or)150 4392
 
6650
y(con)m(v)m(enience,)32 b(the)e(follo)m(wing)f(t)m(w)m(o)j(\\wrapp)s
 
6651
(er")d(routines)h(are)g(pro)m(vided:)275 4526 y Fp
 
6652
(fftw_export_wisdom_to_f)o(ile)k Fv(writes)40 b(the)g
 
6653
Fp(wisdom)f Fv(to)j(the)f(curren)m(t)f(p)s(osition)f(in)g
 
6654
Fp(output_)150 4635 y(file)p Fv(,)28 b(whic)m(h)g(should)f(b)s(e)i(op)s
6598
6655
(en)f(with)g(write)g(p)s(ermission.)37 b(Up)s(on)28 b(exit,)i(the)f
6599
 
(\014le)f(remains)g(op)s(en)g(and)h(is)150 981 y(p)s(ositioned)f(at)j
6600
 
(the)g(end)f(of)g(the)h Fo(wisdom)e Fu(data.)275 1116
6601
 
y Fo(fftw_export_wisdom_to_s)o(tri)o(ng)22 b Fu(returns)27
6602
 
b(a)h(p)s(oin)m(ter)f(to)i(a)f Fo(NULL)p Fu(-terminated)f(string)g
6603
 
(holding)150 1225 y(the)37 b Fo(wisdom)e Fu(data.)60
 
6656
(\014le)f(remains)g(op)s(en)g(and)h(is)150 4745 y(p)s(ositioned)f(at)j
 
6657
(the)g(end)f(of)g(the)h Fp(wisdom)e Fv(data.)275 4878
 
6658
y Fp(fftw_export_wisdom_to_s)o(tri)o(ng)22 b Fv(returns)27
 
6659
b(a)h(p)s(oin)m(ter)f(to)i(a)f Fp(NULL)p Fv(-terminated)f(string)g
 
6660
(holding)150 4988 y(the)37 b Fp(wisdom)e Fv(data.)60
6604
6661
b(This)34 b(string)i(is)f(dynamically)g(allo)s(cated,)j(and)e(it)g(is)g
6605
 
(the)g(resp)s(onsibilit)m(y)d(of)k(the)150 1335 y(caller)30
6606
 
b(to)h(deallo)s(cate)g(it)e(with)h Fo(fftw_free)d Fu(when)j(it)g(is)f
6607
 
(no)h(longer)g(needed.)275 1469 y(All)24 b(of)j(these)g(routines)e(exp)
 
6662
(the)g(resp)s(onsibilit)m(y)d(of)k(the)150 5097 y(caller)30
 
6663
b(to)h(deallo)s(cate)g(it)e(with)h Fp(fftw_free)d Fv(when)j(it)g(is)f
 
6664
(no)h(longer)g(needed.)275 5230 y(All)24 b(of)j(these)g(routines)e(exp)
6608
6665
s(ort)h(the)g(wisdom)f(in)g(the)i(same)f(format,)i(whic)m(h)d(w)m(e)i
6609
 
(will)d(not)i(do)s(cumen)m(t)150 1579 y(here)k(except)i(to)f(sa)m(y)g
 
6666
(will)d(not)i(do)s(cumen)m(t)150 5340 y(here)k(except)i(to)f(sa)m(y)g
6610
6667
(that)g(it)f(is)f(LISP-lik)m(e)g(ASCI)s(I)g(text)i(that)g(is)f
6611
 
(insensitiv)m(e)e(to)j(white)f(space.)150 1803 y Fi(3.6.2)63
6612
 
b(Imp)s(orting)41 b(Wisdom)390 1990 y Fo(#include)46
6613
 
b(<fftw.h>)390 2198 y(fftw_status)f(fftw_import_wisdom\(int)c
6614
 
(\(*get_input\)\(void)j(*\),)i(void)h(*data\);)390 2301
6615
 
y(fftw_status)e(fftw_import_wisdom_from)o(_fil)o(e\(FI)o(LE)c
6616
 
(*input_file\);)390 2405 y(fftw_status)k(fftw_import_wisdom_from)o
6617
 
(_str)o(ing\()o(con)o(st)d(char)k(*input_string\);)275
6618
 
2540 y Fu(These)32 b(functions)f(imp)s(ort)g Fo(wisdom)g
6619
 
Fu(in)m(to)i(a)g(program)f(from)h(data)g(stored)g(b)m(y)f(the)h
6620
 
Fo(fftw_export_)150 2649 y(wisdom)39 b Fu(functions)g(ab)s(o)m(v)m(e.)
6621
 
72 b(\(See)41 b(Section)g(2.6)g([W)-8 b(ords)41 b(of)g(Wisdom],)i(page)
6622
 
e(13.\))73 b(The)40 b(imp)s(orted)150 2759 y Fo(wisdom)29
6623
 
b Fu(supplemen)m(ts)h(rather)g(than)h(replaces)g(an)m(y)g
6624
 
Fo(wisdom)f Fu(already)g(accum)m(ulated)i(b)m(y)e(the)i(running)150
6625
 
2868 y(program)40 b(\(except)i(when)d(there)h(is)g(con\015icting)f
6626
 
Fo(wisdom)p Fu(,)i(in)e(whic)m(h)g(case)i(the)g(existing)e(wisdom)g(is)
6627
 
150 2978 y(replaced\).)275 3112 y Fo(fftw_import_wisdom)25
6628
 
b Fu(imp)s(orts)k Fo(wisdom)g Fu(from)h(an)m(y)h(input)d(medium,)h(as)i
6629
 
(sp)s(eci\014ed)e(b)m(y)i(the)f(call-)150 3222 y(bac)m(k)25
6630
 
b(function)d Fo(get_input)p Fu(.)36 b Fo(get_input)22
6631
 
b Fu(is)h(a)h Fo(getc)p Fu(-lik)m(e)e(function)h(that)h(returns)f(the)h
6632
 
(next)g(c)m(haracter)150 3332 y(in)30 b(the)h(input;)f(its)g(parameter)
6633
 
i(is)e(the)h Fo(data)f Fu(p)s(oin)m(ter)g(passed)h(to)h
6634
 
Fo(fftw_import_wisdom)p Fu(.)38 b(If)30 b(the)i(end)150
6635
 
3441 y(of)41 b(the)g(input)e(data)i(is)f(reac)m(hed)h(\(whic)m(h)f
6636
 
(should)f(nev)m(er)i(happ)s(en)e(for)i(v)-5 b(alid)39
6637
 
b(data\),)44 b(it)d(ma)m(y)g(return)150 3551 y(either)25
6638
 
b Fo(NULL)g Fu(\(ASCI)s(I)g(0\))i(or)f Fo(EOF)f Fu(\(as)h(de\014ned)f
6639
 
(in)g Fo(<stdio.h>)p Fu(\).)37 b(F)-8 b(or)27 b(con)m(v)m(enience,)h
6640
 
(the)e(follo)m(wing)f(t)m(w)m(o)150 3660 y(\\wrapp)s(er")k(routines)h
6641
 
(are)g(pro)m(vided:)275 3795 y Fo(fftw_import_wisdom_from)o(_fi)o(le)40
6642
 
b Fu(reads)46 b Fo(wisdom)f Fu(from)h(the)g(curren)m(t)g(p)s(osition)f
6643
 
(in)g Fo(input_)150 3905 y(file)p Fu(,)30 b(whic)m(h)g(should)f(b)s(e)i
6644
 
(op)s(en)f(with)g(read)h(p)s(ermission.)39 b(Up)s(on)30
6645
 
b(exit,)i(the)f(\014le)f(remains)g(op)s(en)g(and)h(is)150
6646
 
4014 y(p)s(ositioned)d(at)j(the)g(end)f(of)g(the)h Fo(wisdom)e
6647
 
Fu(data.)275 4149 y Fo(fftw_import_wisdom_from)o(_st)o(ring)52
6648
 
b Fu(reads)59 b Fo(wisdom)f Fu(from)h(the)g Fo(NULL)p
6649
 
Fu(-terminated)f(string)150 4258 y Fo(input_string)p
6650
 
Fu(.)275 4393 y(The)28 b(return)f(v)-5 b(alue)28 b(of)h(these)g
6651
 
(routines)e(is)h Fo(FFTW_SUCCESS)d Fu(if)i(the)i(wisdom)e(w)m(as)i
6652
 
(read)f(successfully)-8 b(,)150 4502 y(and)36 b Fo(FFTW_FAILURE)d
6653
 
Fu(otherwise.)58 b(Note)38 b(that,)g(in)d(all)h(of)g(these)h
6654
 
(functions,)g(an)m(y)f(data)h(in)e(the)i(input)150 4612
6655
 
y(stream)29 b(past)g(the)g(end)f(of)h(the)g Fo(wisdom)e
6656
 
Fu(data)i(is)f(simply)f(ignored)g(\(it)i(is)f(not)h(ev)m(en)g(read)g
6657
 
(if)f(the)h Fo(wisdom)150 4721 y Fu(data)i(is)e(w)m(ell-formed\).)150
6658
 
4946 y Fi(3.6.3)63 b(F)-10 b(orgetting)41 b(Wisdom)390
6659
 
5132 y Fo(#include)46 b(<fftw.h>)390 5340 y(void)h
6660
 
(fftw_forget_wisdom\(void)o(\);)p eop
6661
 
%%Page: 36 38
6662
 
36 37 bop 150 -116 a Fu(36)3232 b(FFTW)275 299 y(Calling)39
6663
 
b Fo(fftw_forget_wisdom)d Fu(causes)42 b(all)e(accum)m(ulated)i
6664
 
Fo(wisdom)e Fu(to)i(b)s(e)f(discarded)f(and)h(its)150
6665
 
408 y(asso)s(ciated)30 b(memory)f(to)h(b)s(e)e(freed.)40
6666
 
b(\(New)30 b Fo(wisdom)d Fu(can)j(still)d(b)s(e)i(gathered)g(subsequen)
6667
 
m(tly)-8 b(,)29 b(ho)m(w)m(ev)m(er.\))150 666 y Ft(3.7)68
6668
 
b(Memory)45 b(Allo)t(cator)h(Reference)390 853 y Fo(#include)g
6669
 
(<fftw.h>)390 1060 y(void)h(*\(*fftw_malloc_hook\))42
6670
 
b(\(size_t)k(n\);)390 1164 y(void)h(\(*fftw_free_hook\))c(\(void)j
6671
 
(*p\);)275 1298 y Fu(Whenev)m(er)21 b(it)e(has)i(to)g(allo)s(cate)f
 
6668
(insensitiv)m(e)e(to)j(white)f(space.)p eop end
 
6669
%%Page: 35 37
 
6670
TeXDict begin 35 36 bop 150 -116 a Fv(Chapter)30 b(3:)41
 
6671
b(FFTW)31 b(Reference)2354 b(35)150 299 y Fh(3.6.2)63
 
6672
b(Imp)s(orting)41 b(Wisdom)390 461 y Fp(#include)46 b(<fftw.h>)390
 
6673
668 y(fftw_status)f(fftw_import_wisdom\(int)c(\(*get_input\)\(void)j
 
6674
(*\),)i(void)h(*data\);)390 772 y(fftw_status)e
 
6675
(fftw_import_wisdom_from)o(_fil)o(e\(FI)o(LE)c(*input_file\);)390
 
6676
876 y(fftw_status)k(fftw_import_wisdom_from)o(_str)o(ing\()o(con)o(st)d
 
6677
(char)k(*input_string\);)275 1011 y Fv(These)32 b(functions)f(imp)s
 
6678
(ort)g Fp(wisdom)g Fv(in)m(to)i(a)g(program)f(from)h(data)g(stored)g(b)
 
6679
m(y)f(the)h Fp(fftw_export_)150 1121 y(wisdom)39 b Fv(functions)g(ab)s
 
6680
(o)m(v)m(e.)72 b(\(See)41 b(Section)g(2.6)g([W)-8 b(ords)41
 
6681
b(of)g(Wisdom],)i(page)e(13.\))73 b(The)40 b(imp)s(orted)150
 
6682
1230 y Fp(wisdom)29 b Fv(supplemen)m(ts)h(rather)g(than)h(replaces)g
 
6683
(an)m(y)g Fp(wisdom)f Fv(already)g(accum)m(ulated)i(b)m(y)e(the)i
 
6684
(running)150 1340 y(program)40 b(\(except)i(when)d(there)h(is)g
 
6685
(con\015icting)f Fp(wisdom)p Fv(,)i(in)e(whic)m(h)g(case)i(the)g
 
6686
(existing)e(wisdom)g(is)150 1449 y(replaced\).)275 1584
 
6687
y Fp(fftw_import_wisdom)25 b Fv(imp)s(orts)k Fp(wisdom)g
 
6688
Fv(from)h(an)m(y)h(input)d(medium,)h(as)i(sp)s(eci\014ed)e(b)m(y)i(the)
 
6689
f(call-)150 1694 y(bac)m(k)25 b(function)d Fp(get_input)p
 
6690
Fv(.)36 b Fp(get_input)22 b Fv(is)h(a)h Fp(getc)p Fv(-lik)m(e)e
 
6691
(function)h(that)h(returns)f(the)h(next)g(c)m(haracter)150
 
6692
1804 y(in)30 b(the)h(input;)f(its)g(parameter)i(is)e(the)h
 
6693
Fp(data)f Fv(p)s(oin)m(ter)g(passed)h(to)h Fp(fftw_import_wisdom)p
 
6694
Fv(.)38 b(If)30 b(the)i(end)150 1913 y(of)41 b(the)g(input)e(data)i(is)
 
6695
f(reac)m(hed)h(\(whic)m(h)f(should)f(nev)m(er)i(happ)s(en)e(for)i(v)-5
 
6696
b(alid)39 b(data\),)44 b(it)d(ma)m(y)g(return)150 2023
 
6697
y(either)25 b Fp(NULL)g Fv(\(ASCI)s(I)g(0\))i(or)f Fp(EOF)f
 
6698
Fv(\(as)h(de\014ned)f(in)g Fp(<stdio.h>)p Fv(\).)37 b(F)-8
 
6699
b(or)27 b(con)m(v)m(enience,)h(the)e(follo)m(wing)f(t)m(w)m(o)150
 
6700
2132 y(\\wrapp)s(er")k(routines)h(are)g(pro)m(vided:)275
 
6701
2267 y Fp(fftw_import_wisdom_from)o(_fi)o(le)40 b Fv(reads)46
 
6702
b Fp(wisdom)f Fv(from)h(the)g(curren)m(t)g(p)s(osition)f(in)g
 
6703
Fp(input_)150 2377 y(file)p Fv(,)30 b(whic)m(h)g(should)f(b)s(e)i(op)s
 
6704
(en)f(with)g(read)h(p)s(ermission.)39 b(Up)s(on)30 b(exit,)i(the)f
 
6705
(\014le)f(remains)g(op)s(en)g(and)h(is)150 2487 y(p)s(ositioned)d(at)j
 
6706
(the)g(end)f(of)g(the)h Fp(wisdom)e Fv(data.)275 2622
 
6707
y Fp(fftw_import_wisdom_from)o(_st)o(ring)52 b Fv(reads)59
 
6708
b Fp(wisdom)f Fv(from)h(the)g Fp(NULL)p Fv(-terminated)f(string)150
 
6709
2731 y Fp(input_string)p Fv(.)275 2866 y(The)28 b(return)f(v)-5
 
6710
b(alue)28 b(of)h(these)g(routines)e(is)h Fp(FFTW_SUCCESS)d
 
6711
Fv(if)i(the)i(wisdom)e(w)m(as)i(read)f(successfully)-8
 
6712
b(,)150 2976 y(and)36 b Fp(FFTW_FAILURE)d Fv(otherwise.)58
 
6713
b(Note)38 b(that,)g(in)d(all)h(of)g(these)h(functions,)g(an)m(y)f(data)
 
6714
h(in)e(the)i(input)150 3085 y(stream)29 b(past)g(the)g(end)f(of)h(the)g
 
6715
Fp(wisdom)e Fv(data)i(is)f(simply)f(ignored)g(\(it)i(is)f(not)h(ev)m
 
6716
(en)g(read)g(if)f(the)h Fp(wisdom)150 3195 y Fv(data)i(is)e(w)m
 
6717
(ell-formed\).)150 3420 y Fh(3.6.3)63 b(F)-10 b(orgetting)41
 
6718
b(Wisdom)390 3582 y Fp(#include)46 b(<fftw.h>)390 3790
 
6719
y(void)h(fftw_forget_wisdom\(void)o(\);)275 3925 y Fv(Calling)39
 
6720
b Fp(fftw_forget_wisdom)d Fv(causes)42 b(all)e(accum)m(ulated)i
 
6721
Fp(wisdom)e Fv(to)i(b)s(e)f(discarded)f(and)h(its)150
 
6722
4035 y(asso)s(ciated)30 b(memory)f(to)h(b)s(e)e(freed.)40
 
6723
b(\(New)30 b Fp(wisdom)d Fv(can)j(still)d(b)s(e)i(gathered)g(subsequen)
 
6724
m(tly)-8 b(,)29 b(ho)m(w)m(ev)m(er.\))150 4293 y Fu(3.7)68
 
6725
b(Memory)45 b(Allo)t(cator)h(Reference)390 4455 y Fp(#include)g
 
6726
(<fftw.h>)390 4663 y(void)h(*\(*fftw_malloc_hook\))42
 
6727
b(\(size_t)k(n\);)390 4767 y(void)h(\(*fftw_free_hook\))c(\(void)j
 
6728
(*p\);)275 4902 y Fv(Whenev)m(er)21 b(it)e(has)i(to)g(allo)s(cate)f
6672
6729
(and)g(release)h(memory)-8 b(,)23 b(FFTW)e(ordinarily)c(calls)i
6673
 
Fo(malloc)g Fu(and)h Fo(free)p Fu(.)150 1408 y(If)25
6674
 
b Fo(malloc)e Fu(fails,)i(FFTW)h(prin)m(ts)e(an)h(error)g(message)h
 
6730
Fp(malloc)g Fv(and)h Fp(free)p Fv(.)150 5011 y(If)25
 
6731
b Fp(malloc)e Fv(fails,)i(FFTW)h(prin)m(ts)e(an)h(error)g(message)h
6675
6732
(and)f(exits.)39 b(This)23 b(b)s(eha)m(vior)h(ma)m(y)i(b)s(e)f
6676
 
(undesirable)150 1518 y(in)i(some)i(applications.)38
 
6733
(undesirable)150 5121 y(in)i(some)i(applications.)38
6677
6734
b(Also,)29 b(sp)s(ecial)e(memory-handling)f(functions)h(ma)m(y)i(b)s(e)
6678
 
e(necessary)i(in)e(certain)150 1627 y(en)m(vironmen)m(ts.)66
 
6735
e(necessary)i(in)e(certain)150 5230 y(en)m(vironmen)m(ts.)66
6679
6736
b(Consequen)m(tly)-8 b(,)41 b(FFTW)f(pro)m(vides)e(means)h(b)m(y)g
6680
6737
(whic)m(h)e(y)m(ou)j(can)f(install)e(y)m(our)i(o)m(wn)150
6681
 
1737 y(memory)k(allo)s(cator)g(and)g(tak)m(e)i(whatev)m(er)e
 
6738
5340 y(memory)k(allo)s(cator)g(and)g(tak)m(e)i(whatev)m(er)e
6682
6739
(error-correcting)h(action)f(y)m(ou)h(\014nd)d(appropriate.)78
6683
 
b(The)150 1846 y(v)-5 b(ariables)31 b Fo(fftw_malloc_hook)d
6684
 
Fu(and)k Fo(fftw_free_hook)d Fu(are)k(p)s(oin)m(ters)e(to)i(functions,)
6685
 
f(and)g(they)h(are)150 1956 y(normally)c Fo(NULL)p Fu(.)42
6686
 
b(If)31 b(y)m(ou)h(set)g(those)f(v)-5 b(ariables)30 b(to)i(p)s(oin)m(t)
6687
 
e(to)i(other)g(functions,)e(then)h(FFTW)h(will)c(use)150
6688
 
2066 y(y)m(our)h(routines)e(instead)h(of)h Fo(malloc)d
6689
 
Fu(and)i Fo(free)p Fu(.)39 b Fo(fftw_malloc_hook)25 b
6690
 
Fu(m)m(ust)j(p)s(oin)m(t)g(to)h(a)g Fo(malloc)p Fu(-lik)m(e)150
6691
 
2175 y(function,)g(and)h Fo(fftw_free_hook)d Fu(m)m(ust)j(p)s(oin)m(t)f
6692
 
(to)i(a)g Fo(free)p Fu(-lik)m(e)e(function.)150 2433
6693
 
y Ft(3.8)68 b(Thread)45 b(safet)l(y)275 2625 y Fu(Users)30
6694
 
b(writing)e(m)m(ulti-threaded)h(programs)h(m)m(ust)h(concern)f
6695
 
(themselv)m(es)h(with)e(the)i Fp(thread)f(safet)m(y)150
6696
 
2735 y Fu(of)d(the)g(libraries)d(they)k(use|that)f(is,)g(whether)f(it)h
6697
 
(is)f(safe)h(to)h(call)e(routines)g(in)g(parallel)f(from)h(m)m(ultiple)
6698
 
150 2844 y(threads.)39 b(FFTW)29 b(can)e(b)s(e)g(used)g(in)f(suc)m(h)i
6699
 
(an)f(en)m(vironmen)m(t,)h(but)f(some)h(care)g(m)m(ust)f(b)s(e)g(tak)m
6700
 
(en)i(b)s(ecause)150 2954 y(certain)21 b(parts)f(of)h(FFTW)g(use)g
6701
 
(priv)-5 b(ate)20 b(global)g(v)-5 b(ariables)19 b(to)j(share)e(data)h
6702
 
(b)s(et)m(w)m(een)h(calls.)36 b(In)20 b(particular,)150
6703
 
3064 y(the)42 b(plan-creation)f(functions)f(share)i(trigonometric)g
6704
 
(tables)f(and)g(accum)m(ulated)h Fo(wisdom)p Fu(.)74
6705
 
b(\(Users)150 3173 y(should)37 b(note)j(that)f(these)h(commen)m(ts)g
6706
 
(only)e(apply)g(to)h(programs)g(using)f(shared-memory)g(threads.)150
6707
 
3283 y(P)m(arallelism)k(using)g(MPI)h(or)h(fork)m(ed)g(pro)s(cesses)f
6708
 
(in)m(v)m(olv)m(es)h(a)g(separate)h(address-space)f(and)f(global)150
6709
 
3392 y(v)-5 b(ariables)29 b(for)h(eac)m(h)i(pro)s(cess,)e(and)g(is)f
 
6740
b(The)p eop end
 
6741
%%Page: 36 38
 
6742
TeXDict begin 36 37 bop 150 -116 a Fv(36)3232 b(FFTW)150
 
6743
299 y(v)-5 b(ariables)31 b Fp(fftw_malloc_hook)d Fv(and)k
 
6744
Fp(fftw_free_hook)d Fv(are)k(p)s(oin)m(ters)e(to)i(functions,)f(and)g
 
6745
(they)h(are)150 408 y(normally)c Fp(NULL)p Fv(.)42 b(If)31
 
6746
b(y)m(ou)h(set)g(those)f(v)-5 b(ariables)30 b(to)i(p)s(oin)m(t)e(to)i
 
6747
(other)g(functions,)e(then)h(FFTW)h(will)c(use)150 518
 
6748
y(y)m(our)h(routines)e(instead)h(of)h Fp(malloc)d Fv(and)i
 
6749
Fp(free)p Fv(.)39 b Fp(fftw_malloc_hook)25 b Fv(m)m(ust)j(p)s(oin)m(t)g
 
6750
(to)h(a)g Fp(malloc)p Fv(-lik)m(e)150 628 y(function,)g(and)h
 
6751
Fp(fftw_free_hook)d Fv(m)m(ust)j(p)s(oin)m(t)f(to)i(a)g
 
6752
Fp(free)p Fv(-lik)m(e)e(function.)150 885 y Fu(3.8)68
 
6753
b(Thread)45 b(safet)l(y)275 1078 y Fv(Users)30 b(writing)e(m)m
 
6754
(ulti-threaded)h(programs)h(m)m(ust)h(concern)f(themselv)m(es)h(with)e
 
6755
(the)i Fq(thread)f(safet)m(y)150 1187 y Fv(of)d(the)g(libraries)d(they)
 
6756
k(use|that)f(is,)g(whether)f(it)h(is)f(safe)h(to)h(call)e(routines)g
 
6757
(in)g(parallel)f(from)h(m)m(ultiple)150 1297 y(threads.)39
 
6758
b(FFTW)29 b(can)e(b)s(e)g(used)g(in)f(suc)m(h)i(an)f(en)m(vironmen)m
 
6759
(t,)h(but)f(some)h(care)g(m)m(ust)f(b)s(e)g(tak)m(en)i(b)s(ecause)150
 
6760
1406 y(certain)21 b(parts)f(of)h(FFTW)g(use)g(priv)-5
 
6761
b(ate)20 b(global)g(v)-5 b(ariables)19 b(to)j(share)e(data)h(b)s(et)m
 
6762
(w)m(een)h(calls.)36 b(In)20 b(particular,)150 1516 y(the)42
 
6763
b(plan-creation)f(functions)f(share)i(trigonometric)g(tables)f(and)g
 
6764
(accum)m(ulated)h Fp(wisdom)p Fv(.)74 b(\(Users)150 1626
 
6765
y(should)37 b(note)j(that)f(these)h(commen)m(ts)g(only)e(apply)g(to)h
 
6766
(programs)g(using)f(shared-memory)g(threads.)150 1735
 
6767
y(P)m(arallelism)k(using)g(MPI)h(or)h(fork)m(ed)g(pro)s(cesses)f(in)m
 
6768
(v)m(olv)m(es)h(a)g(separate)h(address-space)f(and)f(global)150
 
6769
1845 y(v)-5 b(ariables)29 b(for)h(eac)m(h)i(pro)s(cess,)e(and)g(is)f
6710
6770
(not)i(susceptible)d(to)j(problems)e(of)i(this)e(sort.\))275
6711
 
3527 y(The)c(cen)m(tral)i(restriction)e(of)h(FFTW)h(is)e(that)h(it)g
 
6771
1979 y(The)c(cen)m(tral)i(restriction)e(of)h(FFTW)h(is)e(that)h(it)g
6712
6772
(is)f(not)h(safe)h(to)g(create)g(m)m(ultiple)d(plans)h(in)g(parallel.)
6713
 
150 3636 y(Y)-8 b(ou)33 b(m)m(ust)e(either)h(create)i(all)c(of)j(y)m
 
6773
150 2089 y(Y)-8 b(ou)33 b(m)m(ust)e(either)h(create)i(all)c(of)j(y)m
6714
6774
(our)f(plans)e(from)i(a)g(single)f(thread,)h(or)g(instead)g(use)f(a)i
6715
 
(semaphore,)150 3746 y(m)m(utex,)h(or)f(other)g(mec)m(hanism)f(to)i
 
6775
(semaphore,)150 2198 y(m)m(utex,)h(or)f(other)g(mec)m(hanism)f(to)i
6716
6776
(ensure)e(that)i(di\013eren)m(t)e(threads)g(don't)h(attempt)h(to)g
6717
 
(create)g(plans)150 3856 y(at)41 b(the)f(same)h(time.)70
 
6777
(create)g(plans)150 2308 y(at)41 b(the)f(same)h(time.)70
6718
6778
b(The)40 b(same)h(restriction)e(also)h(holds)f(for)h(destruction)f(of)i
6719
 
(plans)e(and)g(imp)s(ort-)150 3965 y(ing/forgetting)31
6720
 
b Fo(wisdom)p Fu(.)39 b(Once)30 b(created,)i(a)e(plan)f(ma)m(y)i
6721
 
(safely)f(b)s(e)g(used)g(in)f(an)m(y)h(thread.)275 4100
 
6779
(plans)e(and)g(imp)s(ort-)150 2418 y(ing/forgetting)31
 
6780
b Fp(wisdom)p Fv(.)39 b(Once)30 b(created,)i(a)e(plan)f(ma)m(y)i
 
6781
(safely)f(b)s(e)g(used)g(in)f(an)m(y)h(thread.)275 2552
6722
6782
y(The)24 b(actual)h(transform)g(routines)e(in)h(FFTW)i(\()p
6723
 
Fo(fftw_one)p Fu(,)e(etcetera\))k(are)d(re-en)m(tran)m(t)i(and)d
6724
 
(thread-)150 4209 y(safe,)i(so)d(it)g(is)g(\014ne)g(to)h(call)f(them)g
 
6783
Fp(fftw_one)p Fv(,)e(etcetera\))k(are)d(re-en)m(tran)m(t)i(and)d
 
6784
(thread-)150 2662 y(safe,)i(so)d(it)g(is)g(\014ne)g(to)h(call)f(them)g
6725
6785
(sim)m(ultaneously)f(from)h(m)m(ultiple)e(threads.)38
6726
 
b(Another)24 b(question)e(arises,)150 4319 y(ho)m(w)m(ev)m(er|is)33
6727
 
b(it)g(safe)g(to)h(use)e(the)i Fq(same)h(plan)41 b Fu(for)33
 
6786
b(Another)24 b(question)e(arises,)150 2771 y(ho)m(w)m(ev)m(er|is)33
 
6787
b(it)g(safe)g(to)h(use)e(the)i Fr(same)h(plan)41 b Fv(for)33
6728
6788
b(m)m(ultiple)e(transforms)h(in)f(parallel?)46 b(\(It)34
6729
 
b(w)m(ould)e(b)s(e)150 4428 y(unsafe)e(if,)h(for)f(example,)i(the)f
 
6789
b(w)m(ould)e(b)s(e)150 2881 y(unsafe)e(if,)h(for)f(example,)i(the)f
6730
6790
(plan)e(w)m(ere)j(mo)s(di\014ed)d(in)g(some)j(w)m(a)m(y)f(b)m(y)g(the)g
6731
 
(transform.\))43 b(W)-8 b(e)32 b(address)150 4538 y(this)40
 
6791
(transform.\))43 b(W)-8 b(e)32 b(address)150 2990 y(this)40
6732
6792
b(question)g(b)m(y)h(de\014ning)e(an)i(additional)e(planner)g(\015ag,)
6733
 
44 b Fo(FFTW_THREADSAFE)p Fu(.)69 b(When)41 b(included)150
6734
 
4648 y(in)d(the)i(\015ags)f(for)h(an)m(y)g(of)f(the)h(plan-creation)f
6735
 
(routines,)i Fo(FFTW_THREADSAFE)35 b Fu(guaran)m(tees)41
6736
 
b(that)f(the)150 4757 y(resulting)28 b(plan)i(will)d(b)s(e)j(read-only)
 
6793
44 b Fp(FFTW_THREADSAFE)p Fv(.)69 b(When)41 b(included)150
 
6794
3100 y(in)d(the)i(\015ags)f(for)h(an)m(y)g(of)f(the)h(plan-creation)f
 
6795
(routines,)i Fp(FFTW_THREADSAFE)35 b Fv(guaran)m(tees)41
 
6796
b(that)f(the)150 3210 y(resulting)28 b(plan)i(will)d(b)s(e)j(read-only)
6737
6797
g(and)g(safe)g(to)h(use)f(in)g(parallel)e(b)m(y)i(m)m(ultiple)e
6738
 
(threads.)p eop
 
6798
(threads.)p eop end
6739
6799
%%Page: 37 39
6740
 
37 38 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(P)m(arallel)29
6741
 
b(FFTW)2435 b(37)150 299 y Fr(4)80 b(P)l(arallel)57 b(FFTW)275
6742
 
569 y Fu(In)46 b(this)g(c)m(hapter)i(w)m(e)f(discuss)f(the)h(use)g(of)g
6743
 
(FFTW)h(in)e(a)h(parallel)f(en)m(vironmen)m(t,)51 b(do)s(cumen)m(t-)150
6744
 
679 y(ing)41 b(the)h(di\013eren)m(t)f(parallel)f(libraries)f(that)k(w)m
6745
 
(e)f(ha)m(v)m(e)h(pro)m(vided.)74 b(\(Users)42 b(calling)f(FFTW)h(from)
6746
 
g(a)150 789 y(m)m(ulti-threaded)e(program)i(should)e(also)i(consult)f
6747
 
(Section)h(3.8)h([Thread)e(safet)m(y],)46 b(page)d(36.\))76
6748
 
b(The)150 898 y(FFTW)35 b(pac)m(k)-5 b(age)36 b(curren)m(tly)d(con)m
6749
 
(tains)h(three)h(parallel)d(transform)h(implemen)m(tations)g(that)i
6750
 
(lev)m(erage)150 1008 y(the)c(unipro)s(cessor)d(FFTW)j(co)s(de:)225
6751
 
1154 y Fs(\017)60 b Fu(The)38 b(\014rst)h(set)g(of)g(routines)f
6752
 
(utilizes)f(shared-memory)h(threads)h(for)f(parallel)f(one-)j(and)e(m)m
6753
 
(ulti-)330 1264 y(dimensional)24 b(transforms)h(of)i(b)s(oth)e(real)h
6754
 
(and)g(complex)g(data.)40 b(An)m(y)27 b(program)f(using)f(FFTW)i(can)
6755
 
330 1374 y(b)s(e)33 b(trivially)e(mo)s(di\014ed)g(to)k(use)e(the)h(m)m
6756
 
(ulti-threaded)e(routines.)49 b(This)32 b(co)s(de)i(can)g(use)f(an)m(y)
6757
 
h(com-)330 1483 y(mon)28 b(threads)g(implemen)m(tation,)f(including)e
6758
 
(POSIX)j(threads.)39 b(\(POSIX)28 b(threads)g(are)h(a)m(v)-5
 
6800
TeXDict begin 37 38 bop 150 -116 a Fv(Chapter)30 b(4:)41
 
6801
b(P)m(arallel)29 b(FFTW)2435 b(37)150 299 y Fs(4)80 b(P)l(arallel)57
 
6802
b(FFTW)275 569 y Fv(In)46 b(this)g(c)m(hapter)i(w)m(e)f(discuss)f(the)h
 
6803
(use)g(of)g(FFTW)h(in)e(a)h(parallel)f(en)m(vironmen)m(t,)51
 
6804
b(do)s(cumen)m(t-)150 679 y(ing)41 b(the)h(di\013eren)m(t)f(parallel)f
 
6805
(libraries)f(that)k(w)m(e)f(ha)m(v)m(e)h(pro)m(vided.)74
 
6806
b(\(Users)42 b(calling)f(FFTW)h(from)g(a)150 789 y(m)m(ulti-threaded)e
 
6807
(program)i(should)e(also)i(consult)f(Section)h(3.8)h([Thread)e(safet)m
 
6808
(y],)46 b(page)d(36.\))76 b(The)150 898 y(FFTW)35 b(pac)m(k)-5
 
6809
b(age)36 b(curren)m(tly)d(con)m(tains)h(three)h(parallel)d(transform)h
 
6810
(implemen)m(tations)g(that)i(lev)m(erage)150 1008 y(the)c(unipro)s
 
6811
(cessor)d(FFTW)j(co)s(de:)225 1154 y Ft(\017)60 b Fv(The)38
 
6812
b(\014rst)h(set)g(of)g(routines)f(utilizes)f(shared-memory)h(threads)h
 
6813
(for)f(parallel)f(one-)j(and)e(m)m(ulti-)330 1264 y(dimensional)24
 
6814
b(transforms)h(of)i(b)s(oth)e(real)h(and)g(complex)g(data.)40
 
6815
b(An)m(y)27 b(program)f(using)f(FFTW)i(can)330 1374 y(b)s(e)33
 
6816
b(trivially)e(mo)s(di\014ed)g(to)k(use)e(the)h(m)m(ulti-threaded)e
 
6817
(routines.)49 b(This)32 b(co)s(de)i(can)g(use)f(an)m(y)h(com-)330
 
6818
1483 y(mon)28 b(threads)g(implemen)m(tation,)f(including)e(POSIX)j
 
6819
(threads.)39 b(\(POSIX)28 b(threads)g(are)h(a)m(v)-5
6759
6820
b(ailable)330 1593 y(on)36 b(most)g(Unix)f(v)-5 b(arian)m(ts,)37
6760
6821
b(including)c(Lin)m(ux.\))56 b(These)36 b(routines)f(are)h(lo)s(cated)g
6761
 
(in)f(the)h Fo(threads)330 1702 y Fu(directory)-8 b(,)31
 
6822
(in)f(the)h Fp(threads)330 1702 y Fv(directory)-8 b(,)31
6762
6823
b(and)e(are)i(do)s(cumen)m(ted)f(in)f(Section)h(4.1)i([Multi-threaded)d
6763
 
(FFTW],)j(page)f(37.)225 1843 y Fs(\017)60 b Fu(The)43
6764
 
b Fo(mpi)g Fu(directory)g(con)m(tains)h(m)m(ulti-dimensional)39
 
6824
(FFTW],)j(page)f(37.)225 1843 y Ft(\017)60 b Fv(The)43
 
6825
b Fp(mpi)g Fv(directory)g(con)m(tains)h(m)m(ulti-dimensional)39
6765
6826
b(transforms)k(of)h(real)f(and)g(complex)g(data)330 1952
6766
6827
y(for)32 b(parallel)f(mac)m(hines)h(supp)s(orting)e(MPI.)i(It)h(also)f
6767
6828
(includes)e(parallel)h(one-dimensional)f(trans-)330 2062
6771
6832
(from)f(w)m(orkstation)h(clusters)g(to)g(massiv)m(ely-)330
6772
6833
2281 y(parallel)h(sup)s(ercomputers.)63 b(More)39 b(information)d(on)i
6773
6834
(MPI)g(can)h(b)s(e)e(found)g(at)i(the)g(MPI)f(home)330
6774
 
2391 y(page)d(\()p Fo(http://www.mcs.anl.gov/mpi)o Fu(\).)48
 
6835
2391 y(page)d(\()p Fp(http://www.mcs.anl.gov/mpi)o Fv(\).)48
6775
6836
b(The)33 b(FFTW)j(MPI)e(routines)f(are)i(do)s(cumen)m(ted)f(in)330
6776
6837
2500 y(Section)c(4.2)i([MPI)e(FFTW],)i(page)f(40.)225
6777
 
2641 y Fs(\017)60 b Fu(W)-8 b(e)28 b(also)e(ha)m(v)m(e)i(an)e(exp)s
 
6838
2641 y Ft(\017)60 b Fv(W)-8 b(e)28 b(also)e(ha)m(v)m(e)i(an)e(exp)s
6778
6839
(erimen)m(tal)f(parallel)g(implemen)m(tation)g(written)h(in)f(Cilk,)g
6779
6840
(a)i(C-lik)m(e)f(parallel)330 2751 y(language)21 b(dev)m(elop)s(ed)f
6780
6841
(at)h(MIT)g(and)f(curren)m(tly)f(a)m(v)-5 b(ailable)20
6781
6842
b(for)h(sev)m(eral)g(SMP)f(platforms.)36 b(F)-8 b(or)22
6782
6843
b(more)330 2860 y(information)27 b(on)h(Cilk)e(see)j(the)f(Cilk)f(home)
6783
 
h(page)h(\()p Fo(http://supertech.lcs.mit.e)o(du/)o(cilk)o
6784
 
Fu(\).)330 2970 y(The)34 b(FFTW)h(Cilk)d(co)s(de)j(can)g(b)s(e)e(found)
6785
 
g(in)g(the)i Fo(cilk)e Fu(directory)-8 b(,)36 b(with)d(parallelized)f
 
6844
h(page)h(\()p Fp(http://supertech.lcs.mit.e)o(du/)o(cilk)o
 
6845
Fv(\).)330 2970 y(The)34 b(FFTW)h(Cilk)d(co)s(de)j(can)g(b)s(e)e(found)
 
6846
g(in)g(the)i Fp(cilk)e Fv(directory)-8 b(,)36 b(with)d(parallelized)f
6786
6847
(one-)j(and)330 3079 y(m)m(ulti-dimensional)h(transforms)j(of)h
6787
6848
(complex)g(data.)69 b(The)40 b(Cilk)e(FFTW)i(routines)f(are)h(do)s(cu-)
6788
 
330 3189 y(men)m(ted)31 b(in)e Fo(cilk/README)p Fu(.)150
6789
 
3477 y Ft(4.1)68 b(Multi-threaded)46 b(FFTW)275 3681
6790
 
y Fu(In)28 b(this)h(section)h(w)m(e)g(do)s(cumen)m(t)g(the)f(parallel)f
 
6849
330 3189 y(men)m(ted)31 b(in)e Fp(cilk/README)p Fv(.)150
 
6850
3477 y Fu(4.1)68 b(Multi-threaded)46 b(FFTW)275 3681
 
6851
y Fv(In)28 b(this)h(section)h(w)m(e)g(do)s(cumen)m(t)g(the)f(parallel)f
6791
6852
(FFTW)j(routines)d(for)i(shared-memory)f(threads)g(on)150
6792
6853
3791 y(SMP)k(hardw)m(are.)49 b(These)33 b(routines,)h(whic)m(h)e(supp)s
6793
6854
(ort)f(parallel)h(one-)i(and)f(m)m(ulti-dimensional)c(trans-)150
6800
6861
(an)h(extra)g(parameter.)150 4229 y(An)m(y)30 b(program)g(that)g(uses)f
6801
6862
(the)h(unipro)s(cessor)e(FFTW)j(can)f(b)s(e)f(trivially)e(mo)s
6802
6863
(di\014ed)h(to)j(use)e(the)h(m)m(ulti-)150 4339 y(threaded)g(FFTW.)150
6803
 
4587 y Fi(4.1.1)63 b(Installation)40 b(and)h(Supp)s(orted)i(Hardw)m
6804
 
(are/Soft)m(w)m(are)275 4792 y Fu(All)38 b(of)h(the)h(FFTW)g(threads)f
6805
 
(co)s(de)g(is)g(lo)s(cated)h(in)e(the)h Fo(threads)f
6806
 
Fu(sub)s(directory)f(of)j(the)f(FFTW)150 4902 y(pac)m(k)-5
 
6864
4587 y Fh(4.1.1)63 b(Installation)40 b(and)h(Supp)s(orted)i(Hardw)m
 
6865
(are/Soft)m(w)m(are)275 4792 y Fv(All)38 b(of)h(the)h(FFTW)g(threads)f
 
6866
(co)s(de)g(is)g(lo)s(cated)h(in)e(the)h Fp(threads)f
 
6867
Fv(sub)s(directory)f(of)j(the)f(FFTW)150 4902 y(pac)m(k)-5
6807
6868
b(age.)82 b(On)43 b(Unix)g(systems,)k(the)d(FFTW)g(threads)f(libraries)
6808
6869
e(and)i(header)g(\014les)g(can)h(b)s(e)f(auto-)150 5011
6809
6870
y(matically)32 b(con\014gured,)i(compiled,)f(and)g(installed)e(along)i
6810
6871
(with)f(the)i(unipro)s(cessor)d(FFTW)j(libraries)150
6811
 
5121 y(simply)22 b(b)m(y)j(including)c Fo(--enable-threads)g
6812
 
Fu(in)i(the)i(\015ags)g(to)h(the)f Fo(configure)d Fu(script)i(\(see)h
 
6872
5121 y(simply)22 b(b)m(y)j(including)c Fp(--enable-threads)g
 
6873
Fv(in)i(the)i(\015ags)g(to)h(the)f Fp(configure)d Fv(script)i(\(see)h
6813
6874
(Section)g(6.1)150 5230 y([Installation)34 b(on)i(Unix],)g(page)g
6814
6875
(55\).)58 b(\(Note)37 b(also)f(that)g(the)g(threads)f(routines,)h(when)
6815
6876
e(enabled,)j(are)150 5340 y(automatically)30 b(tested)h(b)m(y)g(the)f
6816
 
(`)p Fo(make)47 b(check)p Fu(')29 b(self-tests.\))p eop
 
6877
(`)p Fp(make)47 b(check)p Fv(')29 b(self-tests.\))p eop
 
6878
end
6817
6879
%%Page: 38 40
6818
 
38 39 bop 150 -116 a Fu(38)3232 b(FFTW)275 299 y(The)25
6819
 
b(threads)h(routines)f(require)g(y)m(our)h(op)s(erating)g(system)g(to)h
6820
 
(ha)m(v)m(e)g(some)g(sort)f(of)g(shared-memory)150 408
6821
 
y(threads)d(supp)s(ort.)37 b(Sp)s(eci\014cally)-8 b(,)23
6822
 
b(the)h(FFTW)h(threads)e(pac)m(k)-5 b(age)26 b(w)m(orks)e(with)e(POSIX)
6823
 
h(threads)h(\(a)m(v)-5 b(ail-)150 518 y(able)27 b(on)g(most)h(Unix)f(v)
6824
 
-5 b(arian)m(ts,)28 b(including)c(Lin)m(ux\),)j(Solaris)f(threads,)i
6825
 
(BeOS)f(\()p Fo(http://www.be.com)p Fu(\))150 628 y(threads)i(\(tested)
6826
 
i(on)f(BeOS)g(DR8.2\),)h(Mac)m(h)g(C)f(threads)f(\(rep)s(orted)g(to)i
6827
 
(w)m(ork)f(b)m(y)f(users\),)h(and)f(Win32)150 737 y(threads)45
6828
 
b(\(rep)s(orted)f(to)i(w)m(ork)f(b)m(y)g(users\).)83
6829
 
b(\(There)45 b(is)f(also)h(un)m(tested)g(co)s(de)g(to)h(use)f(MacOS)g
6830
 
(MP)150 847 y(threads.\))39 b(If)26 b(y)m(ou)h(ha)m(v)m(e)g(a)g
6831
 
(shared-memory)f(mac)m(hine)g(that)h(uses)e(a)i(di\013eren)m(t)f
6832
 
(threads)g(API,)g(it)g(should)150 956 y(b)s(e)34 b(a)i(simple)d(matter)
6833
 
j(of)f(programming)f(to)h(include)e(supp)s(ort)h(for)g(it;)k(see)d(the)
6834
 
g(\014le)g Fo(fftw_threads-)150 1066 y(int.h)29 b Fu(for)h(more)h
6835
 
(detail.)275 1198 y(SMP)i(hardw)m(are)h(is)f(not)i(required,)e
6836
 
(although)h(of)g(course)h(y)m(ou)f(need)g(m)m(ultiple)e(pro)s(cessors)i
6837
 
(to)h(get)150 1308 y(an)m(y)c(b)s(ene\014t)e(from)h(the)h(m)m
6838
 
(ultithreaded)d(transforms.)150 1525 y Fi(4.1.2)63 b(Usage)41
6839
 
b(of)g(Multi-threaded)g(FFTW)275 1716 y Fu(Here,)28 b(it)e(is)f
6840
 
(assumed)h(that)h(the)g(reader)f(is)g(already)g(familiar)e(with)h(the)i
6841
 
(usage)g(of)f(the)h(unipro)s(cessor)150 1825 y(FFTW)39
6842
 
b(routines,)h(describ)s(ed)d(elsewhere)h(in)f(this)h(man)m(ual.)65
6843
 
b(W)-8 b(e)39 b(only)f(describ)s(e)f(what)i(one)g(has)f(to)150
6844
 
1935 y(c)m(hange)32 b(in)d(order)g(to)j(use)e(the)g(m)m(ulti-threaded)f
6845
 
(routines.)275 2067 y(First,)i(instead)f(of)h(including)d
6846
 
Fo(<fftw.h>)h Fu(or)i Fo(<rfftw.h>)p Fu(,)e(y)m(ou)j(should)d(include)g
6847
 
(the)i(\014les)g Fo(<fftw_)150 2177 y(threads.h>)d Fu(or)i
6848
 
Fo(<rfftw_threads.h>)p Fu(,)c(resp)s(ectiv)m(ely)-8 b(.)275
6849
 
2309 y(Second,)30 b(b)s(efore)g(calling)f(an)m(y)h(FFTW)i(routines,)d
6850
 
(y)m(ou)i(should)d(call)i(the)g(function:)390 2435 y
6851
 
Fo(int)47 b(fftw_threads_init\(void\);)275 2567 y Fu(This)38
6852
 
b(function,)j(whic)m(h)e(should)e(only)i(b)s(e)h(called)f(once)i
6853
 
(\(probably)d(in)h(y)m(our)g Fo(main\(\))g Fu(function\),)150
6854
 
2677 y(p)s(erforms)g(an)m(y)i(one-time)g(initialization)c(required)i
 
6880
TeXDict begin 38 39 bop 150 -116 a Fv(38)3232 b(FFTW)275
 
6881
299 y(The)25 b(threads)h(routines)f(require)g(y)m(our)h(op)s(erating)g
 
6882
(system)g(to)h(ha)m(v)m(e)g(some)g(sort)f(of)g(shared-memory)150
 
6883
408 y(threads)d(supp)s(ort.)37 b(Sp)s(eci\014cally)-8
 
6884
b(,)23 b(the)h(FFTW)h(threads)e(pac)m(k)-5 b(age)26 b(w)m(orks)e(with)e
 
6885
(POSIX)h(threads)h(\(a)m(v)-5 b(ail-)150 518 y(able)27
 
6886
b(on)g(most)h(Unix)f(v)-5 b(arian)m(ts,)28 b(including)c(Lin)m(ux\),)j
 
6887
(Solaris)f(threads,)i(BeOS)f(\()p Fp(http://www.be.com)p
 
6888
Fv(\))150 628 y(threads)i(\(tested)i(on)f(BeOS)g(DR8.2\),)h(Mac)m(h)g
 
6889
(C)f(threads)f(\(rep)s(orted)g(to)i(w)m(ork)f(b)m(y)f(users\),)h(and)f
 
6890
(Win32)150 737 y(threads)45 b(\(rep)s(orted)f(to)i(w)m(ork)f(b)m(y)g
 
6891
(users\).)83 b(\(There)45 b(is)f(also)h(un)m(tested)g(co)s(de)g(to)h
 
6892
(use)f(MacOS)g(MP)150 847 y(threads.\))40 b(W)-8 b(e)31
 
6893
b(also)e(supp)s(ort)e(using)h(Op)s(enMP)f(\()p Fp
 
6894
(http://www.openmp.org)p Fv(\))d(or)29 b(SGI)g(MP)g(compiler)150
 
6895
956 y(directiv)m(es)c(to)h(launc)m(h)f(threads,)h(enabled)f(b)m(y)g
 
6896
(using)f Fp(--with-openmp)e Fv(or)j Fp(--with-sgimp)e
 
6897
Fv(in)h(addition)150 1066 y(to)33 b Fp(--enable-threads)p
 
6898
Fv(.)42 b(This)30 b(is)h(esp)s(ecially)g(useful)f(if)h(y)m(ou)i(are)g
 
6899
(emplo)m(ying)e(that)i(sort)f(of)g(directiv)m(e)150 1176
 
6900
y(in)k(y)m(our)i(o)m(wn)f(co)s(de,)j(in)c(order)h(to)h(minimize)d
 
6901
(con\015icts.)62 b(If)37 b(y)m(ou)h(ha)m(v)m(e)g(a)g(shared-memory)f
 
6902
(mac)m(hine)150 1285 y(that)32 b(uses)f(a)g(di\013eren)m(t)g(threads)g
 
6903
(API,)h(it)e(should)g(b)s(e)g(a)i(simple)d(matter)k(of)e(programming)f
 
6904
(to)i(include)150 1395 y(supp)s(ort)d(for)h(it;)g(see)h(the)f(\014le)g
 
6905
Fp(fftw_threads-int.h)25 b Fv(for)30 b(more)h(detail.)275
 
6906
1535 y(SMP)i(hardw)m(are)h(is)f(not)i(required,)e(although)h(of)g
 
6907
(course)h(y)m(ou)f(need)g(m)m(ultiple)e(pro)s(cessors)i(to)h(get)150
 
6908
1645 y(an)m(y)c(b)s(ene\014t)e(from)h(the)h(m)m(ultithreaded)d
 
6909
(transforms.)150 1881 y Fh(4.1.2)63 b(Usage)41 b(of)g(Multi-threaded)g
 
6910
(FFTW)275 2080 y Fv(Here,)28 b(it)e(is)f(assumed)h(that)h(the)g(reader)
 
6911
f(is)g(already)g(familiar)e(with)h(the)i(usage)g(of)f(the)h(unipro)s
 
6912
(cessor)150 2190 y(FFTW)39 b(routines,)h(describ)s(ed)d(elsewhere)h(in)
 
6913
f(this)h(man)m(ual.)65 b(W)-8 b(e)39 b(only)f(describ)s(e)f(what)i(one)
 
6914
g(has)f(to)150 2299 y(c)m(hange)32 b(in)d(order)g(to)j(use)e(the)g(m)m
 
6915
(ulti-threaded)f(routines.)275 2440 y(First,)i(instead)f(of)h
 
6916
(including)d Fp(<fftw.h>)h Fv(or)i Fp(<rfftw.h>)p Fv(,)e(y)m(ou)j
 
6917
(should)d(include)g(the)i(\014les)g Fp(<fftw_)150 2550
 
6918
y(threads.h>)d Fv(or)i Fp(<rfftw_threads.h>)p Fv(,)c(resp)s(ectiv)m
 
6919
(ely)-8 b(.)275 2690 y(Second,)30 b(b)s(efore)g(calling)f(an)m(y)h
 
6920
(FFTW)i(routines,)d(y)m(ou)i(should)d(call)i(the)g(function:)390
 
6921
2825 y Fp(int)47 b(fftw_threads_init\(void\);)275 2966
 
6922
y Fv(This)38 b(function,)j(whic)m(h)e(should)e(only)i(b)s(e)h(called)f
 
6923
(once)i(\(probably)d(in)h(y)m(our)g Fp(main\(\))g Fv(function\),)150
 
6924
3075 y(p)s(erforms)g(an)m(y)i(one-time)g(initialization)c(required)i
6855
6925
(to)i(use)g(threads)f(on)g(y)m(our)h(system.)71 b(It)41
6856
 
b(returns)150 2787 y(zero)36 b(if)e(successful,)h(and)f(a)h(non-zero)h
 
6926
b(returns)150 3185 y(zero)36 b(if)e(successful,)h(and)f(a)h(non-zero)h
6857
6927
(v)-5 b(alue)34 b(if)g(there)h(w)m(as)g(an)g(error)g(\(in)f(whic)m(h)f
6858
 
(case,)38 b(something)c(is)150 2896 y(seriously)28 b(wrong)i(and)g(y)m
 
6928
(case,)38 b(something)c(is)150 3294 y(seriously)28 b(wrong)i(and)g(y)m
6859
6929
(ou)h(should)d(probably)h(exit)h(the)h(program\).)275
6860
 
3028 y(Third,)38 b(when)g(y)m(ou)h(w)m(an)m(t)h(to)f(actually)g
 
6930
3435 y(Third,)38 b(when)g(y)m(ou)h(w)m(an)m(t)h(to)f(actually)g
6861
6931
(compute)g(the)g(transform,)h(y)m(ou)f(should)e(use)i(one)g(of)g(the)
6862
 
150 3138 y(follo)m(wing)29 b(transform)h(routines)f(instead)g(of)i(the)
6863
 
f(ordinary)f(FFTW)i(functions:)390 3264 y Fo(fftw_threads\(nthreads,)42
6864
 
b(plan,)k(howmany,)g(in,)h(istride,)1010 3368 y(idist,)g(out,)f
6865
 
(ostride,)g(odist\);)390 3576 y(fftw_threads_one\(nthread)o(s,)c(plan,)
6866
 
k(in,)h(out\);)390 3783 y(fftwnd_threads\(nthreads,)41
6867
 
b(plan,)47 b(howmany,)e(in,)i(istride,)1106 3887 y(idist,)f(out,)h
6868
 
(ostride,)e(odist\);)390 4095 y(fftwnd_threads_one\(nthre)o(ads,)c
6869
 
(plan,)46 b(in,)h(out\);)390 4302 y(rfftw_threads\(nthreads,)41
6870
 
b(plan,)47 b(howmany,)e(in,)i(istride,)1058 4406 y(idist,)f(out,)h
6871
 
(ostride,)e(odist\);)390 4614 y(rfftw_threads_one\(nthrea)o(ds,)c
6872
 
(plan,)47 b(in,)g(out\);)390 4821 y(rfftwnd_threads_real_to_)o(comp)o
 
6932
150 3545 y(follo)m(wing)29 b(transform)h(routines)f(instead)g(of)i(the)
 
6933
f(ordinary)f(FFTW)i(functions:)390 3680 y Fp(fftw_threads\(nthreads,)42
 
6934
b(plan,)k(howmany,)g(in,)h(istride,)1010 3783 y(idist,)g(out,)f
 
6935
(ostride,)g(odist\);)390 3991 y(fftw_threads_one\(nthread)o(s,)c(plan,)
 
6936
k(in,)h(out\);)390 4198 y(fftwnd_threads\(nthreads,)41
 
6937
b(plan,)47 b(howmany,)e(in,)i(istride,)1106 4302 y(idist,)f(out,)h
 
6938
(ostride,)e(odist\);)390 4510 y(fftwnd_threads_one\(nthre)o(ads,)c
 
6939
(plan,)46 b(in,)h(out\);)390 4717 y(rfftw_threads\(nthreads,)41
 
6940
b(plan,)47 b(howmany,)e(in,)i(istride,)1058 4821 y(idist,)f(out,)h
 
6941
(ostride,)e(odist\);)390 5029 y(rfftw_threads_one\(nthrea)o(ds,)c
 
6942
(plan,)47 b(in,)g(out\);)390 5236 y(rfftwnd_threads_real_to_)o(comp)o
6873
6943
(lex\()o(nth)o(read)o(s,)42 b(plan,)k(howmany,)f(in,)1917
6874
 
4925 y(istride,)h(idist,)g(out,)h(ostride,)e(odist\);)390
6875
 
5132 y(rfftwnd_threads_one_real)o(_to_)o(comp)o(lex)o(\(nth)o(read)o
6876
 
(s,)c(plan,)47 b(in,)g(out\);)390 5340 y(rfftwnd_threads_complex_)o
6877
 
(to_r)o(eal\()o(nth)o(read)o(s,)42 b(plan,)k(howmany,)f(in,)p
6878
 
eop
 
6944
5340 y(istride,)h(idist,)g(out,)h(ostride,)e(odist\);)p
 
6945
eop end
6879
6946
%%Page: 39 41
6880
 
39 40 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(P)m(arallel)29
6881
 
b(FFTW)2435 b(39)1917 299 y Fo(istride,)46 b(idist,)g(out,)h(ostride,)e
6882
 
(odist\);)390 506 y(rfftwnd_threads_one_real)o(_to_)o(comp)o(lex)o
6883
 
(\(nth)o(read)o(s,)c(plan,)47 b(in,)g(out\);)390 714
6884
 
y(rfftwnd_threads_one_comp)o(lex_)o(to_r)o(eal)o(\(nth)o(read)o(s,)41
6885
 
b(plan,)47 b(in,)g(out\);)275 851 y Fu(All)27 b(of)h(these)h(routines)f
6886
 
(tak)m(e)i(exactly)f(the)g(same)g(argumen)m(ts)g(and)f(ha)m(v)m(e)i
6887
 
(exactly)f(the)g(same)g(e\013ects)150 961 y(as)j(their)f(unipro)s
6888
 
(cessor)e(coun)m(terparts)k(\(i.e.)45 b(without)31 b(the)h(`)p
6889
 
Fo(_threads)p Fu('\))e Fq(exc)-5 b(ept)41 b Fu(that)32
6890
 
b(they)g(tak)m(e)i(one)150 1070 y(extra)i(parameter,)h
6891
 
Fo(nthreads)c Fu(\(of)j(t)m(yp)s(e)f Fo(int)p Fu(\),)h(b)s(efore)f(the)
6892
 
g(normal)g(parameters.)3084 1037 y Fn(1)3176 1070 y Fu(The)g
6893
 
Fo(nthreads)150 1180 y Fu(parameter)21 b(sp)s(eci\014es)e(the)i(n)m(um)
6894
 
m(b)s(er)e(of)i(threads)g(of)f(execution)h(to)g(use)g(when)e(p)s
6895
 
(erforming)g(the)i(transform)150 1289 y(\(actually)-8
6896
 
b(,)31 b(the)g(maxim)m(um)e(n)m(um)m(b)s(er)g(of)h(threads\).)275
6897
 
1427 y(F)-8 b(or)31 b(example,)f(to)i(parallelize)c(a)j(single)e
6898
 
(one-dimensional)g(transform)g(of)i(complex)f(data,)i(instead)150
6899
 
1536 y(of)53 b(calling)e(the)i(unipro)s(cessor)e Fo(fftw_one\(plan,)27
6900
 
b(in,)i(out\))p Fu(,)58 b(y)m(ou)53 b(w)m(ould)e(call)i
6901
 
Fo(fftw_threads_)150 1646 y(one\(nthreads,)27 b(plan,)i(in,)g(out\))p
6902
 
Fu(.)47 b(P)m(assing)33 b(an)f Fo(nthreads)f Fu(of)i
6903
 
Fo(1)f Fu(means)h(to)h(use)e(only)g(one)h(thread)150
6904
 
1755 y(\(the)51 b(main)d(thread\),)56 b(and)49 b(is)g(equiv)-5
 
6947
TeXDict begin 39 40 bop 150 -116 a Fv(Chapter)30 b(4:)41
 
6948
b(P)m(arallel)29 b(FFTW)2435 b(39)390 403 y Fp
 
6949
(rfftwnd_threads_one_real)o(_to_)o(comp)o(lex)o(\(nth)o(read)o(s,)41
 
6950
b(plan,)47 b(in,)g(out\);)390 610 y(rfftwnd_threads_complex_)o(to_r)o
 
6951
(eal\()o(nth)o(read)o(s,)42 b(plan,)k(howmany,)f(in,)1917
 
6952
714 y(istride,)h(idist,)g(out,)h(ostride,)e(odist\);)390
 
6953
922 y(rfftwnd_threads_one_real)o(_to_)o(comp)o(lex)o(\(nth)o(read)o(s,)
 
6954
c(plan,)47 b(in,)g(out\);)390 1129 y(rfftwnd_threads_one_comp)o(lex_)o
 
6955
(to_r)o(eal)o(\(nth)o(read)o(s,)41 b(plan,)47 b(in,)g(out\);)275
 
6956
1263 y Fv(All)27 b(of)h(these)h(routines)f(tak)m(e)i(exactly)f(the)g
 
6957
(same)g(argumen)m(ts)g(and)f(ha)m(v)m(e)i(exactly)f(the)g(same)g
 
6958
(e\013ects)150 1373 y(as)j(their)f(unipro)s(cessor)e(coun)m(terparts)k
 
6959
(\(i.e.)45 b(without)31 b(the)h(`)p Fp(_threads)p Fv('\))e
 
6960
Fr(exc)-5 b(ept)41 b Fv(that)32 b(they)g(tak)m(e)i(one)150
 
6961
1482 y(extra)i(parameter,)h Fp(nthreads)c Fv(\(of)j(t)m(yp)s(e)f
 
6962
Fp(int)p Fv(\),)h(b)s(efore)f(the)g(normal)g(parameters.)3084
 
6963
1449 y Fo(1)3176 1482 y Fv(The)g Fp(nthreads)150 1592
 
6964
y Fv(parameter)21 b(sp)s(eci\014es)e(the)i(n)m(um)m(b)s(er)e(of)i
 
6965
(threads)g(of)f(execution)h(to)g(use)g(when)e(p)s(erforming)g(the)i
 
6966
(transform)150 1701 y(\(actually)-8 b(,)31 b(the)g(maxim)m(um)e(n)m(um)
 
6967
m(b)s(er)g(of)h(threads\).)275 1835 y(F)-8 b(or)31 b(example,)f(to)i
 
6968
(parallelize)c(a)j(single)e(one-dimensional)g(transform)g(of)i(complex)
 
6969
f(data,)i(instead)150 1945 y(of)53 b(calling)e(the)i(unipro)s(cessor)e
 
6970
Fp(fftw_one\(plan,)27 b(in,)i(out\))p Fv(,)58 b(y)m(ou)53
 
6971
b(w)m(ould)e(call)i Fp(fftw_threads_)150 2055 y(one\(nthreads,)27
 
6972
b(plan,)i(in,)g(out\))p Fv(.)47 b(P)m(assing)33 b(an)f
 
6973
Fp(nthreads)f Fv(of)i Fp(1)f Fv(means)h(to)h(use)e(only)g(one)h(thread)
 
6974
150 2164 y(\(the)51 b(main)d(thread\),)56 b(and)49 b(is)g(equiv)-5
6905
6975
b(alen)m(t)50 b(to)g(calling)f(the)h(unipro)s(cessor)e(routine.)98
6906
 
b(P)m(assing)50 b(an)150 1865 y Fo(nthreads)32 b Fu(of)j
6907
 
Fo(2)g Fu(means)f(that)h(the)g(transform)f(is)g(p)s(oten)m(tially)f
 
6976
b(P)m(assing)50 b(an)150 2274 y Fp(nthreads)32 b Fv(of)j
 
6977
Fp(2)g Fv(means)f(that)h(the)g(transform)f(is)g(p)s(oten)m(tially)f
6908
6978
(parallelized)g(o)m(v)m(er)j(t)m(w)m(o)g(threads)e(\(and)150
6909
 
1975 y(t)m(w)m(o)e(pro)s(cessors,)e(if)f(y)m(ou)i(ha)m(v)m(e)g(them\),)
6910
 
g(and)f(so)h(on.)275 2112 y(These)36 b(are)i(the)f(only)f(c)m(hanges)j
 
6979
2383 y(t)m(w)m(o)e(pro)s(cessors,)e(if)f(y)m(ou)i(ha)m(v)m(e)g(them\),)
 
6980
g(and)f(so)h(on.)275 2517 y(These)36 b(are)i(the)f(only)f(c)m(hanges)j
6911
6981
(y)m(ou)e(need)g(to)h(mak)m(e)g(to)g(y)m(our)f(source)g(co)s(de.)61
6912
 
b(Calls)36 b(to)i(all)e(other)150 2221 y(FFTW)46 b(routines)e(\(plan)g
 
6982
b(Calls)36 b(to)i(all)e(other)150 2627 y(FFTW)46 b(routines)e(\(plan)g
6913
6983
(creation,)49 b(destruction,)f(wisdom,)f(etcetera\))h(are)e(not)f
6914
 
(parallelized)e(and)150 2331 y(remain)32 b(the)h(same.)49
 
6984
(parallelized)e(and)150 2736 y(remain)32 b(the)h(same.)49
6915
6985
b(\(The)33 b(same)h(plans)d(and)h(wisdom)g(are)h(used)g(b)m(y)f(b)s
6916
 
(oth)h(unipro)s(cessor)e(and)h(m)m(ulti-)150 2441 y(threaded)37
 
6986
(oth)h(unipro)s(cessor)e(and)h(m)m(ulti-)150 2846 y(threaded)37
6917
6987
b(transforms.\))63 b(Y)-8 b(our)38 b(arra)m(ys)g(are)g(allo)s(cated)g
6918
6988
(and)f(formatted)i(in)d(the)i(same)g(w)m(a)m(y)-8 b(,)42
6919
 
b(and)37 b(so)150 2550 y(on.)275 2687 y(Programs)28 b(using)f(the)i
 
6989
b(and)37 b(so)150 2956 y(on.)275 3090 y(Programs)28 b(using)f(the)i
6920
6990
(parallel)d(complex)j(transforms)e(should)g(b)s(e)h(link)m(ed)f(with)g
6921
 
Fo(-lfftw_threads)150 2797 y(-lfftw)i(-lm)37 b Fu(on)h(Unix.)63
 
6991
Fp(-lfftw_threads)150 3199 y(-lfftw)i(-lm)37 b Fv(on)h(Unix.)63
6922
6992
b(Programs)38 b(using)f(the)h(parallel)f(real)h(transforms)f(should)f
6923
 
(b)s(e)i(link)m(ed)e(with)150 2906 y Fo(-lrfftw_threads)26
6924
 
b(-lfftw_threads)h(-lrfftw)h(-lfftw)h(-lm)p Fu(.)55 b(Y)-8
6925
 
b(ou)36 b(will)c(also)k(need)f(to)h(link)d(with)150 3016
 
6993
(b)s(e)i(link)m(ed)e(with)150 3309 y Fp(-lrfftw_threads)26
 
6994
b(-lfftw_threads)h(-lrfftw)h(-lfftw)h(-lm)p Fv(.)55 b(Y)-8
 
6995
b(ou)36 b(will)c(also)k(need)f(to)h(link)d(with)150 3418
6926
6996
y(whatev)m(er)e(library)d(is)i(resp)s(onsible)d(for)j(threads)g(on)g(y)
6927
 
m(our)h(system)f(\(e.g.)42 b Fo(-lpthread)28 b Fu(on)i(Lin)m(ux\).)150
6928
 
3245 y Fi(4.1.3)63 b(Ho)m(w)40 b(Man)m(y)h(Threads)g(to)g(Use?)275
6929
 
3441 y Fu(There)31 b(is)h(a)h(fair)e(amoun)m(t)i(of)g(o)m(v)m(erhead)g
 
6997
m(our)h(system)f(\(e.g.)42 b Fp(-lpthread)28 b Fv(on)i(Lin)m(ux\).)150
 
6998
3641 y Fh(4.1.3)63 b(Ho)m(w)40 b(Man)m(y)h(Threads)g(to)g(Use?)275
 
6999
3833 y Fv(There)31 b(is)h(a)h(fair)e(amoun)m(t)i(of)g(o)m(v)m(erhead)g
6930
7000
(in)m(v)m(olv)m(ed)f(in)g(spa)m(wning)f(and)g(sync)m(hronizing)g
6931
 
(threads,)i(so)150 3550 y(the)d(optimal)f(n)m(um)m(b)s(er)g(of)h
 
7001
(threads,)i(so)150 3943 y(the)d(optimal)f(n)m(um)m(b)s(er)g(of)h
6932
7002
(threads)f(to)i(use)e(dep)s(ends)f(up)s(on)h(the)h(size)g(of)g(the)g
6933
 
(transform)f(as)h(w)m(ell)f(as)h(on)150 3660 y(the)h(n)m(um)m(b)s(er)e
6934
 
(of)h(pro)s(cessors)g(y)m(ou)h(ha)m(v)m(e.)275 3797 y(As)d(a)g(general)
 
7003
(transform)f(as)h(w)m(ell)f(as)h(on)150 4052 y(the)h(n)m(um)m(b)s(er)e
 
7004
(of)h(pro)s(cessors)g(y)m(ou)h(ha)m(v)m(e.)275 4186 y(As)d(a)g(general)
6935
7005
h(rule,)e(y)m(ou)i(don't)f(w)m(an)m(t)h(to)g(use)f(more)h(threads)f
6936
7006
(than)g(y)m(ou)g(ha)m(v)m(e)i(pro)s(cessors.)39 b(\(Using)150
6937
 
3907 y(more)c(threads)g(will)d(w)m(ork,)37 b(but)d(there)h(will)d(b)s
 
7007
4296 y(more)c(threads)g(will)d(w)m(ork,)37 b(but)d(there)h(will)d(b)s
6938
7008
(e)j(extra)g(o)m(v)m(erhead)i(with)c(no)i(b)s(ene\014t.\))54
6939
 
b(In)34 b(fact,)k(if)c(the)150 4016 y(problem)29 b(size)h(is)f(to)s(o)j
 
7009
b(In)34 b(fact,)k(if)c(the)150 4405 y(problem)29 b(size)h(is)f(to)s(o)j
6940
7010
(small,)d(y)m(ou)h(ma)m(y)h(w)m(an)m(t)h(to)f(use)f(few)m(er)g(threads)
6941
 
g(than)g(y)m(ou)h(ha)m(v)m(e)h(pro)s(cessors.)275 4153
 
7011
g(than)g(y)m(ou)h(ha)m(v)m(e)h(pro)s(cessors.)275 4539
6942
7012
y(Y)-8 b(ou)42 b(will)d(ha)m(v)m(e)k(to)f(exp)s(erimen)m(t)f(with)g(y)m
6943
7013
(our)g(system)h(to)h(see)f(what)g(lev)m(el)f(of)h(parallelization)e(is)
6944
 
150 4263 y(b)s(est)31 b(for)f(y)m(our)h(problem)f(size.)42
 
7014
150 4649 y(b)s(est)31 b(for)f(y)m(our)h(problem)f(size.)42
6945
7015
b(Useful)30 b(to)s(ols)h(to)g(help)f(y)m(ou)h(do)g(this)f(are)h(the)g
6946
 
(test)h(programs)f(that)h(are)150 4373 y(automatically)i(compiled)e
6947
 
(along)i(with)f(the)h(threads)g(libraries,)e Fo(fftw_threads_test)d
6948
 
Fu(and)34 b Fo(rfftw_)150 4482 y(threads_test)25 b Fu(\(in)i(the)h
6949
 
Fo(threads)f Fu(sub)s(directory\).)38 b(These)28 b(tak)m(e)h(the)g
6950
 
(same)f(argumen)m(ts)h(as)f(the)h(other)150 4592 y(FFTW)c(test)f
6951
 
(programs)g(\(see)h Fo(tests/README)p Fu(\),)d(except)j(that)g(they)f
6952
 
(also)g(tak)m(e)h(the)g(n)m(um)m(b)s(er)d(of)i(threads)150
6953
 
4701 y(to)31 b(use)f(as)h(a)g(\014rst)e(argumen)m(t,)i(and)f(rep)s(ort)
6954
 
g(the)g(parallel)f(sp)s(eedup)f(in)h(sp)s(eed)h(tests.)41
6955
 
b(F)-8 b(or)32 b(example,)p 150 4802 1200 4 v 192 4869
6956
 
a Fn(1)275 4902 y Fu(There)g(is)f(one)i(exception:)46
6957
 
b(when)32 b(p)s(erforming)e(one-dimensional)h(in-place)g(transforms,)i
6958
 
(the)g Fo(out)275 5011 y Fu(parameter)g(is)f(alw)m(a)m(ys)h(ignored)f
6959
 
(b)m(y)g(the)h(m)m(ulti-threaded)f(routines,)g(instead)g(of)h(b)s(eing)
6960
 
f(used)g(as)h(a)275 5121 y(w)m(orkspace)28 b(if)e(it)i(is)e(non-)p
6961
 
Fo(NULL)h Fu(as)g(in)g(the)h(unipro)s(cessor)d(routines.)39
6962
 
b(The)27 b(m)m(ulti-threaded)f(routines)275 5230 y(alw)m(a)m(ys)41
6963
 
b(allo)s(cate)g(their)f(o)m(wn)h(w)m(orkspace)h(\(the)f(size)g(of)g
6964
 
(whic)m(h)f(dep)s(ends)f(up)s(on)g(the)i(n)m(um)m(b)s(er)f(of)275
6965
 
5340 y(threads\).)p eop
 
7016
(test)h(programs)f(that)h(are)150 4759 y(automatically)i(compiled)e
 
7017
(along)i(with)f(the)h(threads)g(libraries,)e Fp(fftw_threads_test)d
 
7018
Fv(and)34 b Fp(rfftw_)150 4868 y(threads_test)25 b Fv(\(in)i(the)h
 
7019
Fp(threads)f Fv(sub)s(directory\).)38 b(These)28 b(tak)m(e)h(the)g
 
7020
(same)f(argumen)m(ts)h(as)f(the)h(other)p 150 4967 1200
 
7021
4 v 199 5034 a Fo(1)275 5066 y Fj(There)35 b(is)g(one)g(exception:)52
 
7022
b(when)35 b(p)r(erforming)g(one-dimensional)g(in-place)g(transforms,)i
 
7023
(the)e Fi(out)g Fj(parameter)f(is)275 5157 y(alw)n(a)n(ys)26
 
7024
b(ignored)g(b)n(y)e(the)h(m)n(ulti-threaded)e(routines,)j(instead)g(of)
 
7025
g(b)r(eing)f(used)g(as)h(a)g(w)n(orkspace)g(if)g(it)f(is)h(non-)p
 
7026
Fi(NULL)f Fj(as)275 5249 y(in)f(the)g(unipro)r(cessor)i(routines.)35
 
7027
b(The)25 b(m)n(ulti-threaded)d(routines)j(alw)n(a)n(ys)h(allo)r(cate)h
 
7028
(their)d(o)n(wn)h(w)n(orkspace)h(\(the)e(size)275 5340
 
7029
y(of)i(whic)n(h)g(dep)r(ends)f(up)r(on)g(the)g(n)n(um)n(b)r(er)f(of)i
 
7030
(threads\).)p eop end
6966
7031
%%Page: 40 42
6967
 
40 41 bop 150 -116 a Fu(40)3232 b(FFTW)390 299 y Fo(fftw_threads_test)
6968
 
43 b(2)48 b(-s)f(128x128)275 452 y Fu(will)28 b(b)s(enc)m(hmark)j
6969
 
(complex)g(128x128)j(transforms)d(using)f(t)m(w)m(o)i(threads)f(and)g
6970
 
(rep)s(ort)g(the)h(sp)s(eedup)150 561 y(relativ)m(e)e(to)i(the)e
6971
 
(unipro)s(cessor)e(transform.)275 714 y(F)-8 b(or)40
6972
 
b(instance,)i(on)d(a)h(4-pro)s(cessor)g(200MHz)i(P)m(en)m(tium)d(Pro)h
6973
 
(system)g(running)c(Lin)m(ux)i(2.2.0,)44 b(w)m(e)150
6974
 
823 y(found)32 b(that)j(the)f Fo(")p Fu(crosso)m(v)m(er)p
6975
 
Fo(")h Fu(p)s(oin)m(t)d(at)j(whic)m(h)d(2)i(threads)g(b)s(ecame)g(b)s
6976
 
(ene\014cial)e(for)h(complex)h(trans-)150 933 y(forms)c(w)m(as)h(ab)s
6977
 
(out)f(4k)g(p)s(oin)m(ts,)g(while)e(4)j(threads)f(b)s(ecame)h(b)s
6978
 
(ene\014cial)d(at)j(8k)g(p)s(oin)m(ts.)150 1194 y Fi(4.1.4)63
6979
 
b(Using)42 b(Multi-threaded)f(FFTW)h(in)f(a)f(Multi-threaded)i(Program)
6980
 
275 1404 y Fu(It)29 b(is)f(p)s(erfectly)h(p)s(ossible)d(to)k(use)f(the)
6981
 
h(m)m(ulti-threaded)e(FFTW)i(routines)e(from)h(a)g(m)m(ulti-threaded)
6982
 
150 1514 y(program)c(\(e.g.)41 b(ha)m(v)m(e)27 b(m)m(ultiple)c(threads)
6983
 
i(computing)g(m)m(ulti-threaded)f(transforms)h(sim)m(ultaneously\).)150
6984
 
1624 y(If)k(y)m(ou)g(ha)m(v)m(e)i(the)e(pro)s(cessors,)g(more)g(p)s(o)m
 
7032
TeXDict begin 40 41 bop 150 -116 a Fv(40)3232 b(FFTW)150
 
7033
299 y(FFTW)25 b(test)f(programs)g(\(see)h Fp(tests/README)p
 
7034
Fv(\),)d(except)j(that)g(they)f(also)g(tak)m(e)h(the)g(n)m(um)m(b)s(er)
 
7035
d(of)i(threads)150 408 y(to)31 b(use)f(as)h(a)g(\014rst)e(argumen)m(t,)
 
7036
i(and)f(rep)s(ort)g(the)g(parallel)f(sp)s(eedup)f(in)h(sp)s(eed)h
 
7037
(tests.)41 b(F)-8 b(or)32 b(example,)390 542 y Fp(fftw_threads_test)43
 
7038
b(2)48 b(-s)f(128x128)275 681 y Fv(will)28 b(b)s(enc)m(hmark)j(complex)
 
7039
g(128x128)j(transforms)d(using)f(t)m(w)m(o)i(threads)f(and)g(rep)s(ort)
 
7040
g(the)h(sp)s(eedup)150 790 y(relativ)m(e)e(to)i(the)e(unipro)s(cessor)e
 
7041
(transform.)275 929 y(F)-8 b(or)40 b(instance,)i(on)d(a)h(4-pro)s
 
7042
(cessor)g(200MHz)i(P)m(en)m(tium)d(Pro)h(system)g(running)c(Lin)m(ux)i
 
7043
(2.2.0,)44 b(w)m(e)150 1039 y(found)32 b(that)j(the)f
 
7044
Fp(")p Fv(crosso)m(v)m(er)p Fp(")h Fv(p)s(oin)m(t)d(at)j(whic)m(h)d(2)i
 
7045
(threads)g(b)s(ecame)g(b)s(ene\014cial)e(for)h(complex)h(trans-)150
 
7046
1148 y(forms)c(w)m(as)h(ab)s(out)f(4k)g(p)s(oin)m(ts,)g(while)e(4)j
 
7047
(threads)f(b)s(ecame)h(b)s(ene\014cial)d(at)j(8k)g(p)s(oin)m(ts.)150
 
7048
1381 y Fh(4.1.4)63 b(Using)42 b(Multi-threaded)f(FFTW)h(in)f(a)f
 
7049
(Multi-threaded)i(Program)275 1578 y Fv(It)29 b(is)f(p)s(erfectly)h(p)s
 
7050
(ossible)d(to)k(use)f(the)h(m)m(ulti-threaded)e(FFTW)i(routines)e(from)
 
7051
h(a)g(m)m(ulti-threaded)150 1688 y(program)c(\(e.g.)41
 
7052
b(ha)m(v)m(e)27 b(m)m(ultiple)c(threads)i(computing)g(m)m
 
7053
(ulti-threaded)f(transforms)h(sim)m(ultaneously\).)150
 
7054
1798 y(If)k(y)m(ou)g(ha)m(v)m(e)i(the)e(pro)s(cessors,)g(more)g(p)s(o)m
6985
7055
(w)m(er)h(to)g(y)m(ou!)40 b(Ho)m(w)m(ev)m(er,)32 b(the)d(same)h
6986
 
(restrictions)e(apply)g(as)h(for)150 1733 y(the)k(unipro)s(cessor)d
 
7056
(restrictions)e(apply)g(as)h(for)150 1907 y(the)k(unipro)s(cessor)d
6987
7057
(FFTW)j(routines)e(\(see)i(Section)f(3.8)i([Thread)d(safet)m(y],)k
6988
 
(page)e(36\).)48 b(In)31 b(particular,)150 1843 y(y)m(ou)g(should)d
 
7058
(page)e(36\).)48 b(In)31 b(particular,)150 2017 y(y)m(ou)g(should)d
6989
7059
(recall)i(that)h(y)m(ou)f(ma)m(y)h(not)g(create)h(or)e(destro)m(y)h
6990
 
(plans)e(in)g(parallel.)150 2103 y Fi(4.1.5)63 b(Tips)42
6991
 
b(for)e(Optimal)h(Threading)275 2314 y Fu(Not)34 b(all)f(transforms)g
 
7060
(plans)e(in)g(parallel.)150 2250 y Fh(4.1.5)63 b(Tips)42
 
7061
b(for)e(Optimal)h(Threading)275 2447 y Fv(Not)34 b(all)f(transforms)g
6992
7062
(are)h(equally)e(w)m(ell-parallelized)f(b)m(y)i(the)h(m)m
6993
 
(ulti-threaded)e(FFTW)j(routines.)150 2424 y(\(This)20
 
7063
(ulti-threaded)e(FFTW)j(routines.)150 2556 y(\(This)20
6994
7064
b(is)h(merely)g(a)h(consequence)h(of)e(laziness)g(on)h(the)g(part)f(of)
6995
7065
h(the)g(implemen)m(tors,)g(and)f(is)g(not)h(inheren)m(t)150
6996
 
2533 y(to)38 b(the)g(algorithms)f(emplo)m(y)m(ed.\))63
 
7066
2666 y(to)38 b(the)g(algorithms)f(emplo)m(y)m(ed.\))63
6997
7067
b(Mainly)-8 b(,)39 b(the)f(limitations)e(are)i(in)e(the)i(parallel)e
6998
 
(one-dimensional)150 2643 y(transforms.)k(The)30 b(things)f(to)i(a)m(v)
 
7068
(one-dimensional)150 2776 y(transforms.)k(The)30 b(things)f(to)i(a)m(v)
6999
7069
m(oid)g(if)e(y)m(ou)i(w)m(an)m(t)g(optimal)f(parallelization)e(are)j
7000
 
(as)f(follo)m(ws:)150 2904 y Fi(4.1.6)63 b(P)m(arallelization)39
 
7070
(as)f(follo)m(ws:)150 3009 y Fh(4.1.6)63 b(P)m(arallelization)39
7001
7071
b(de\014ciencies)i(in)h(one-dimensional)g(transforms)225
7002
 
3114 y Fs(\017)60 b Fu(Large)24 b(prime)f(factors)h(can)g(sometimes)g
 
7072
3176 y Ft(\017)60 b Fv(Large)24 b(prime)f(factors)h(can)g(sometimes)g
7003
7073
(parallelize)e(p)s(o)s(orly)-8 b(.)37 b(Of)24 b(course,)h(y)m(ou)f
7004
 
(should)e(a)m(v)m(oid)i(these)330 3224 y(an)m(yw)m(a)m(y)32
 
7074
(should)e(a)m(v)m(oid)i(these)330 3286 y(an)m(yw)m(a)m(y)32
7005
7075
b(if)d(y)m(ou)i(w)m(an)m(t)g(high)e(p)s(erformance.)225
7006
 
3368 y Fs(\017)60 b Fu(Single)31 b(in-place)g(transforms)h(don't)g
 
7076
3423 y Ft(\017)60 b Fv(Single)31 b(in-place)g(transforms)h(don't)g
7007
7077
(parallelize)f(completely)-8 b(.)47 b(\(Multiple)30 b(in-place)i
7008
 
(transforms,)330 3477 y(i.e.)40 b Fo(howmany)28 b(>)j(1)p
7009
 
Fu(,)e(are)g(\014ne.\))40 b(Again,)29 b(y)m(ou)h(should)c(a)m(v)m(oid)k
 
7078
(transforms,)330 3532 y(i.e.)40 b Fp(howmany)28 b(>)j(1)p
 
7079
Fv(,)e(are)g(\014ne.\))40 b(Again,)29 b(y)m(ou)h(should)c(a)m(v)m(oid)k
7010
7080
(these)f(in)f(an)m(y)h(case)h(if)e(y)m(ou)h(w)m(an)m(t)h(high)330
7011
 
3587 y(p)s(erformance,)g(as)h(they)f(require)f(transforming)g(to)i(a)g
 
7081
3642 y(p)s(erformance,)g(as)h(they)f(require)f(transforming)g(to)i(a)g
7012
7082
(scratc)m(h)g(arra)m(y)g(and)f(cop)m(ying)g(bac)m(k.)225
7013
 
3730 y Fs(\017)60 b Fu(Single)33 b(real-complex)i(\()p
7014
 
Fo(rfftw)p Fu(\))f(transforms)g(don't)h(parallelize)e(completely)-8
7015
 
b(.)54 b(This)33 b(is)h(unfortu-)330 3840 y(nate,)41
 
7083
3779 y Ft(\017)60 b Fv(Single)33 b(real-complex)i(\()p
 
7084
Fp(rfftw)p Fv(\))f(transforms)g(don't)h(parallelize)e(completely)-8
 
7085
b(.)54 b(This)33 b(is)h(unfortu-)330 3888 y(nate,)41
7016
7086
b(but)d(parallelizing)d(this)i(correctly)i(w)m(ould)e(ha)m(v)m(e)j(in)m
7017
7087
(v)m(olv)m(ed)e(a)g(lot)g(of)h(extra)g(co)s(de)f(\(and)h(a)330
7018
 
3950 y(m)m(uc)m(h)31 b(larger)g(library\).)42 b(Y)-8
 
7088
3998 y(m)m(uc)m(h)31 b(larger)g(library\).)42 b(Y)-8
7019
7089
b(ou)32 b(still)d(get)j(some)g(b)s(ene\014t)e(from)h(additional)e(pro)s
7020
 
(cessors,)j(but)e(if)h(y)m(ou)330 4059 y(ha)m(v)m(e)25
 
7090
(cessors,)j(but)e(if)h(y)m(ou)330 4107 y(ha)m(v)m(e)25
7021
7091
b(a)g(v)m(ery)g(large)f(n)m(um)m(b)s(er)f(of)i(pro)s(cessors)e(y)m(ou)i
7022
7092
(will)c(probably)i(b)s(e)h(b)s(etter)g(o\013)h(using)d(the)j(parallel)
7023
 
330 4169 y(complex)35 b(\()p Fo(fftw)p Fu(\))h(transforms.)55
 
7093
330 4217 y(complex)35 b(\()p Fp(fftw)p Fv(\))h(transforms.)55
7024
7094
b(Note)37 b(that)g(m)m(ulti-dimensional)31 b(real)36
7025
 
b(transforms)f(or)g(m)m(ultiple)330 4278 y(one-dimensional)28
7026
 
b(real)i(transforms)g(are)g(\014ne.)150 4581 y Ft(4.2)68
7027
 
b(MPI)44 b(FFTW)275 4792 y Fu(This)38 b(section)i(describ)s(es)f(the)h
 
7095
b(transforms)f(or)g(m)m(ultiple)330 4326 y(one-dimensional)28
 
7096
b(real)i(transforms)g(are)g(\014ne.)150 4595 y Fu(4.2)68
 
7097
b(MPI)44 b(FFTW)275 4792 y Fv(This)38 b(section)i(describ)s(es)f(the)h
7028
7098
(MPI)g(FFTW)h(routines)e(for)h(distributed-memory)d(\(and)j(shared-)150
7029
7099
4902 y(memory\))h(mac)m(hines)f(supp)s(orting)e(MPI)i(\(Message)j(P)m
7030
7100
(assing)d(In)m(terface\).)73 b(The)40 b(MPI)g(routines)g(are)150
7031
7101
5011 y(signi\014can)m(tly)35 b(di\013eren)m(t)i(from)f(the)h(ordinary)e
7032
7102
(FFTW)j(b)s(ecause)f(the)g(transform)f(data)i(here)f(are)g
7033
 
Fq(dis-)150 5121 y(tribute)-5 b(d)49 b Fu(o)m(v)m(er)41
 
7103
Fr(dis-)150 5121 y(tribute)-5 b(d)49 b Fv(o)m(v)m(er)41
7034
7104
b(m)m(ultiple)c(pro)s(cesses,)k(so)e(that)h(eac)m(h)g(pro)s(cess)f
7035
7105
(gets)h(only)e(a)i(p)s(ortion)e(of)h(the)g(arra)m(y)-8
7036
7106
b(.)150 5230 y(Curren)m(tly)g(,)43 b(m)m(ulti-dimensional)38
7037
7107
b(transforms)i(of)i(b)s(oth)f(real)g(and)g(complex)g(data,)k(as)d(w)m
7038
7108
(ell)f(as)g(one-)150 5340 y(dimensional)28 b(transforms)h(of)i(complex)
7039
 
f(data,)h(are)g(supp)s(orted.)p eop
 
7109
f(data,)h(are)g(supp)s(orted.)p eop end
7040
7110
%%Page: 41 43
7041
 
41 42 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(P)m(arallel)29
7042
 
b(FFTW)2435 b(41)150 299 y Fi(4.2.1)63 b(MPI)41 b(FFTW)g(Installation)
7043
 
275 494 y Fu(The)25 b(FFTW)i(MPI)e(library)f(co)s(de)i(is)f(all)g(lo)s
7044
 
(cated)h(in)e(the)j Fo(mpi)e Fu(sub)s(directo)m(y)f(of)i(the)g(FFTW)h
7045
 
(pac)m(k)-5 b(age)150 604 y(\(along)26 b(with)e(source)h(co)s(de)h(for)
7046
 
f(test)i(programs\).)39 b(On)24 b(Unix)g(systems,)j(the)f(FFTW)g(MPI)f
 
7111
TeXDict begin 41 42 bop 150 -116 a Fv(Chapter)30 b(4:)41
 
7112
b(P)m(arallel)29 b(FFTW)2435 b(41)150 299 y Fh(4.2.1)63
 
7113
b(MPI)41 b(FFTW)g(Installation)275 494 y Fv(The)25 b(FFTW)i(MPI)e
 
7114
(library)f(co)s(de)i(is)f(all)g(lo)s(cated)h(in)e(the)j
 
7115
Fp(mpi)e Fv(sub)s(directo)m(y)f(of)i(the)g(FFTW)h(pac)m(k)-5
 
7116
b(age)150 604 y(\(along)26 b(with)e(source)h(co)s(de)h(for)f(test)i
 
7117
(programs\).)39 b(On)24 b(Unix)g(systems,)j(the)f(FFTW)g(MPI)f
7047
7118
(libraries)e(and)150 713 y(header)j(\014les)f(can)i(b)s(e)e
7048
7119
(automatically)h(con\014gured,)h(compiled,)f(and)f(installed)f(along)j
7049
7120
(with)d(the)j(unipro-)150 823 y(cessor)39 b(FFTW)g(libraries)d(simply)g
7050
 
(b)m(y)i(including)d Fo(--enable-mpi)g Fu(in)i(the)i(\015ags)g(to)g
7051
 
(the)f Fo(configure)150 932 y Fu(script)29 b(\(see)j(Section)e(6.1)h
 
7121
(b)m(y)i(including)d Fp(--enable-mpi)g Fv(in)i(the)i(\015ags)g(to)g
 
7122
(the)f Fp(configure)150 932 y Fv(script)29 b(\(see)j(Section)e(6.1)h
7052
7123
([Installation)e(on)i(Unix],)e(page)i(55\).)275 1069
7053
7124
y(The)j(only)g(requiremen)m(t)g(of)h(the)g(FFTW)g(MPI)g(co)s(de)g(is)f
7054
7125
(that)i(y)m(ou)f(ha)m(v)m(e)h(the)f(standard)f(MPI)h(1.1)150
7055
7126
1179 y(\(or)28 b(later\))g(libraries)d(and)i(header)h(\014les)f
7056
7127
(installed)e(on)j(y)m(our)g(system.)40 b(A)28 b(free)g(implemen)m
7057
7128
(tation)e(of)i(MPI)150 1288 y(is)h(a)m(v)-5 b(ailable)30
7058
 
b(from)g(the)h(MPICH)f(home)g(page)h(\()p Fo
7059
 
(http://www-unix.mcs.anl.gov)o(/mp)o(i/mp)o(ich/)o Fu(\).)275
 
7129
b(from)g(the)h(MPICH)f(home)g(page)h(\()p Fp
 
7130
(http://www-unix.mcs.anl.gov)o(/mp)o(i/mp)o(ich/)o Fv(\).)275
7060
7131
1425 y(Previous)42 b(v)m(ersions)g(of)i(the)f(FFTW)h(MPI)f(routines)f
7061
7132
(ha)m(v)m(e)j(had)d(an)h(unfortunate)g(tendency)g(to)150
7062
7133
1535 y(exp)s(ose)i(bugs)f(in)f(MPI)i(implemen)m(tations.)82
7064
7135
(rewritten,)150 1645 y(and)c(hop)s(efully)e(a)m(v)m(oids)j(some)g(of)g
7065
7136
(the)g(problems.)71 b(If)40 b(y)m(ou)h(run)f(in)m(to)g(di\016culties,)h
7066
7137
(try)g(passing)f(the)150 1754 y(optional)d(w)m(orkspace)i(to)f
7067
 
Fo(\(r\)fftwnd_mpi)c Fu(\(see)39 b(b)s(elo)m(w\),)h(as)e(this)e(allo)m
 
7138
Fp(\(r\)fftwnd_mpi)c Fv(\(see)39 b(b)s(elo)m(w\),)h(as)e(this)e(allo)m
7068
7139
(ws)i(us)f(to)h(use)g(the)g(standard)150 1864 y(\(and)23
7069
 
b(hop)s(efully)d(w)m(ell-tested\))k Fo(MPI_Alltoall)c
7070
 
Fu(primitiv)m(e)h(for)h(comm)m(unications.)38 b(Please)23
7071
 
b(let)g(us)g(kno)m(w)150 1973 y(\()p Fo(fftw@fftw.org)p
7072
 
Fu(\))k(ho)m(w)k(things)e(w)m(ork)i(out.)275 2110 y(Sev)m(eral)36
7073
 
b(test)h(programs)f(are)g(included)e(in)h(the)h Fo(mpi)f
7074
 
Fu(directory)-8 b(.)59 b(The)35 b(ones)i(most)f(useful)f(to)i(y)m(ou)
7075
 
150 2220 y(are)25 b(probably)f(the)h Fo(fftw_mpi_test)d
7076
 
Fu(and)i Fo(rfftw_mpi_test)d Fu(programs,)26 b(whic)m(h)e(are)i(run)d
 
7140
b(hop)s(efully)d(w)m(ell-tested\))k Fp(MPI_Alltoall)c
 
7141
Fv(primitiv)m(e)h(for)h(comm)m(unications.)38 b(Please)23
 
7142
b(let)g(us)g(kno)m(w)150 1973 y(\()p Fp(fftw@fftw.org)p
 
7143
Fv(\))k(ho)m(w)k(things)e(w)m(ork)i(out.)275 2110 y(Sev)m(eral)36
 
7144
b(test)h(programs)f(are)g(included)e(in)h(the)h Fp(mpi)f
 
7145
Fv(directory)-8 b(.)59 b(The)35 b(ones)i(most)f(useful)f(to)i(y)m(ou)
 
7146
150 2220 y(are)25 b(probably)f(the)h Fp(fftw_mpi_test)d
 
7147
Fv(and)i Fp(rfftw_mpi_test)d Fv(programs,)26 b(whic)m(h)e(are)i(run)d
7077
7148
(just)i(lik)m(e)f(an)150 2330 y(ordinary)k(MPI)h(program)g(and)f
7078
7149
(accept)j(the)f(same)f(parameters)h(as)f(the)h(other)f(FFTW)h(test)g
7079
 
(programs)150 2439 y(\(c.f.)48 b Fo(tests/README)p Fu(\).)c(F)-8
7080
 
b(or)33 b(example,)g Fo(mpirun)28 b Fq(...p)-5 b(ar)g(ams...)33
7081
 
b Fo(fftw_mpi_test)27 b(-r)i(0)j Fu(will)e(run)h(non-)150
 
7150
(programs)150 2439 y(\(c.f.)48 b Fp(tests/README)p Fv(\).)c(F)-8
 
7151
b(or)33 b(example,)g Fp(mpirun)28 b Fr(...p)-5 b(ar)g(ams...)33
 
7152
b Fp(fftw_mpi_test)27 b(-r)i(0)j Fv(will)e(run)h(non-)150
7082
7153
2549 y(terminating)h(complex-transform)h(correctness)h(tests)g(of)f
7083
7154
(random)f(dimensions.)47 b(They)32 b(can)i(also)f(do)150
7084
7155
2658 y(p)s(erformance)d(b)s(enc)m(hmarks.)150 2867 y
7085
 
Fi(4.2.2)63 b(Usage)41 b(of)g(MPI)g(FFTW)g(for)g(Complex)f
 
7156
Fh(4.2.2)63 b(Usage)41 b(of)g(MPI)g(FFTW)g(for)g(Complex)f
7086
7157
(Multi-dimensional)464 2991 y(T)-10 b(ransforms)275 3186
7087
 
y Fu(Usage)41 b(of)g(the)g(MPI)f(FFTW)h(routines)f(is)f(similar)f(to)j
 
7158
y Fv(Usage)41 b(of)g(the)g(MPI)f(FFTW)h(routines)f(is)f(similar)f(to)j
7088
7159
(that)h(of)e(the)h(unipro)s(cessor)d(FFTW.)k(W)-8 b(e)150
7089
7160
3296 y(assume)29 b(that)g(the)g(reader)f(already)h(understands)e(the)i
7090
7161
(usage)g(of)g(the)g(unipro)s(cessor)d(FFTW)k(routines,)150
7092
7163
b(Some)31 b(familiarit)m(y)d(with)h(MPI)h(is)g(also)g(helpful.)275
7093
7164
3543 y(A)39 b(t)m(ypical)h(program)f(p)s(erforming)e(a)j(complex)g(t)m
7094
7165
(w)m(o-dimensional)e(MPI)i(transform)f(migh)m(t)g(lo)s(ok)150
7095
 
3652 y(something)30 b(lik)m(e:)390 3783 y Fo(#include)46
 
7166
3652 y(something)30 b(lik)m(e:)390 3783 y Fp(#include)46
7096
7167
b(<fftw_mpi.h>)390 3991 y(int)h(main\(int)e(argc,)i(char)f(**argv\))390
7097
7168
4095 y({)676 4198 y(const)h(int)g(NX)g(=)g(...,)g(NY)g(=)h(...;)676
7098
7169
4302 y(fftwnd_mpi_plan)c(plan;)676 4406 y(fftw_complex)h(*data;)676
7100
7171
(fftw2d_mpi_create_plan\(MPI)o(_COM)o(M_W)o(ORLD)o(,)2108
7101
7172
4925 y(NX,)g(NY,)2108 5029 y(FFTW_FORWARD,)d(FFTW_ESTIMATE\);)676
7102
7173
5236 y(...allocate)h(and)i(initialize)e(data...)p eop
 
7174
end
7103
7175
%%Page: 42 44
7104
 
42 43 bop 150 -116 a Fu(42)3232 b(FFTW)676 299 y Fo(fftwnd_mpi\(p,)45
7105
 
b(1,)i(data,)f(NULL,)g(FFTW_NORMAL_ORDER\);)676 506 y(...)676
7106
 
714 y(fftwnd_mpi_destroy_plan\(pl)o(an\))o(;)676 818
7107
 
y(MPI_Finalize\(\);)390 922 y(})275 1056 y Fu(The)39
7108
 
b(calls)h(to)h Fo(MPI_Init)d Fu(and)i Fo(MPI_Finalize)d
7109
 
Fu(are)k(required)e(in)g(all)g(MPI)h(programs;)46 b(see)41
7110
 
b(the)150 1165 y(MPI)33 b(home)h(page)g(\()p Fo
7111
 
(http://www.mcs.anl.gov/mpi)o(/)p Fu(\))28 b(for)33 b(more)g
 
7176
TeXDict begin 42 43 bop 150 -116 a Fv(42)3232 b(FFTW)676
 
7177
299 y Fp(fftwnd_mpi\(p,)45 b(1,)i(data,)f(NULL,)g(FFTW_NORMAL_ORDER\);)
 
7178
676 506 y(...)676 714 y(fftwnd_mpi_destroy_plan\(pl)o(an\))o(;)676
 
7179
818 y(MPI_Finalize\(\);)390 922 y(})275 1056 y Fv(The)39
 
7180
b(calls)h(to)h Fp(MPI_Init)d Fv(and)i Fp(MPI_Finalize)d
 
7181
Fv(are)k(required)e(in)g(all)g(MPI)h(programs;)46 b(see)41
 
7182
b(the)150 1165 y(MPI)33 b(home)h(page)g(\()p Fp
 
7183
(http://www.mcs.anl.gov/mpi)o(/)p Fv(\))28 b(for)33 b(more)g
7112
7184
(information.)49 b(Note)34 b(that)g(all)f(of)150 1275
7113
7185
y(y)m(our)39 b(pro)s(cesses)f(run)f(the)i(program)g(in)e(parallel,)i
7114
7186
(as)g(a)g(group;)k(there)c(is)e(no)i(explicit)e(launc)m(hing)g(of)150
7115
7187
1384 y(threads/pro)s(cesses)30 b(in)f(an)i(MPI)f(program.)275
7116
7188
1519 y(As)36 b(in)g(the)h(ordinary)e(FFTW,)j(the)f(\014rst)f(thing)g(w)
7117
7189
m(e)i(do)f(is)e(to)j(create)h(a)e(plan)e(\(of)j(t)m(yp)s(e)f
7118
 
Fo(fftwnd_)150 1628 y(mpi_plan)p Fu(\),)29 b(using:)390
7119
 
1757 y Fo(fftwnd_mpi_plan)44 b(fftw2d_mpi_create_plan\()o(MPI_)o(Com)o
 
7190
Fp(fftwnd_)150 1628 y(mpi_plan)p Fv(\),)29 b(using:)390
 
7191
1757 y Fp(fftwnd_mpi_plan)44 b(fftw2d_mpi_create_plan\()o(MPI_)o(Com)o
7120
7192
(m)e(comm,)2251 1860 y(int)47 b(nx,)g(int)g(ny,)2251
7121
7193
1964 y(fftw_direction)d(dir,)j(int)g(flags\);)275 2098
7122
 
y Fu(Except)29 b(for)g(the)h(\014rst)e(argumen)m(t,)j(the)e(parameters)
7123
 
h(are)f(iden)m(tical)g(to)h(those)f(of)h Fo(fftw2d_create_)150
7124
 
2208 y(plan)p Fu(.)39 b(\(There)28 b(are)g(also)g(analogous)g
7125
 
Fo(fftwnd_mpi_create_plan)22 b Fu(and)27 b Fo(fftw3d_mpi_create_plan)
7126
 
150 2317 y Fu(functions.)45 b(T)-8 b(ransforms)31 b(of)h(an)m(y)h(rank)
 
7194
y Fv(Except)29 b(for)g(the)h(\014rst)e(argumen)m(t,)j(the)e(parameters)
 
7195
h(are)f(iden)m(tical)g(to)h(those)f(of)h Fp(fftw2d_create_)150
 
7196
2208 y(plan)p Fv(.)39 b(\(There)28 b(are)g(also)g(analogous)g
 
7197
Fp(fftwnd_mpi_create_plan)22 b Fv(and)27 b Fp(fftw3d_mpi_create_plan)
 
7198
150 2317 y Fv(functions.)45 b(T)-8 b(ransforms)31 b(of)h(an)m(y)h(rank)
7127
7199
f(greater)h(than)f(one)h(are)f(supp)s(orted.\))45 b(The)32
7128
7200
b(\014rst)f(argumen)m(t)i(is)150 2427 y(an)27 b(MPI)g
7129
 
Fp(comm)m(unicator)p Fu(,)h(whic)m(h)e(sp)s(eci\014es)g(the)h(group)g
 
7201
Fq(comm)m(unicator)p Fv(,)h(whic)m(h)e(sp)s(eci\014es)g(the)h(group)g
7130
7202
(of)g(pro)s(cesses)g(that)g(are)h(to)g(b)s(e)e(in)m(v)m(olv)m(ed)h(in)f
7131
7203
(the)150 2537 y(transform;)k(the)g(standard)g(constan)m(t)i
7132
 
Fo(MPI_COMM_WORLD)26 b Fu(indicates)j(all)h(a)m(v)-5
 
7204
Fp(MPI_COMM_WORLD)26 b Fv(indicates)j(all)h(a)m(v)-5
7133
7205
b(ailable)29 b(pro)s(cesses.)275 2671 y(Next,)34 b(one)g(has)e(to)i
7134
7206
(allo)s(cate)g(and)e(initialize)e(the)j(data.)50 b(This)31
7135
7207
b(is)h(somewhat)h(tric)m(ky)-8 b(,)35 b(b)s(ecause)e(the)150
7139
7211
(section)f(\(see)i(Section)e(4.2.3)i([MPI)f(Data)h(La)m(y)m(out],)g
7140
7212
(page)f(43\).)275 3024 y(The)42 b(actual)i(computation)f(of)g(the)g
7141
7213
(transform)g(is)f(p)s(erformed)f(b)m(y)i(the)h(function)d
7142
 
Fo(fftwnd_mpi)p Fu(,)150 3134 y(whic)m(h)29 b(di\013ers)g(somewhat)i
 
7214
Fp(fftwnd_mpi)p Fv(,)150 3134 y(whic)m(h)29 b(di\013ers)g(somewhat)i
7143
7215
(from)f(its)f(unipro)s(cessor)g(equiv)-5 b(alen)m(t)30
7144
 
b(and)f(is)h(describ)s(ed)e(b)m(y:)390 3262 y Fo(void)47
 
7216
b(and)f(is)h(describ)s(ed)e(b)m(y:)390 3262 y Fp(void)47
7145
7217
b(fftwnd_mpi\(fftwnd_mpi_p)o(lan)41 b(p,)1154 3366 y(int)47
7146
7218
b(n_fields,)1154 3470 y(fftw_complex)d(*local_data,)h(fftw_complex)f
7147
7219
(*work,)1154 3573 y(fftwnd_mpi_output_order)d(output_order\);)275
7148
 
3707 y Fu(There)29 b(are)i(sev)m(eral)g(things)e(to)i(notice)g(here:)
7149
 
225 3842 y Fs(\017)60 b Fu(First)40 b(of)g(all,)i(all)d
7150
 
Fo(fftw_mpi)f Fu(transforms)h(are)i(in-place:)59 b(the)40
7151
 
b(output)g(is)f(in)g(the)i Fo(local_data)330 3951 y Fu(parameter,)31
7152
 
b(and)f(there)g(is)g(no)g(need)g(to)h(sp)s(ecify)e Fo(FFTW_IN_PLACE)e
7153
 
Fu(in)i(the)i(plan)e(\015ags.)225 4085 y Fs(\017)60 b
7154
 
Fu(The)32 b(MPI)h(transforms)f(also)h(only)f(supp)s(ort)f(a)j(limited)c
7155
 
(subset)j(of)g(the)g Fo(howmany)p Fu(/)p Fo(stride)p
7156
 
Fu(/)p Fo(dist)330 4195 y Fu(functionalit)m(y)39 b(of)h(the)h(unipro)s
7157
 
(cessor)d(routines:)60 b(the)41 b Fo(n_fields)d Fu(parameter)j(is)e
7158
 
(equiv)-5 b(alen)m(t)40 b(to)330 4305 y Fo(howmany=n_fields)p
7159
 
Fu(,)26 b Fo(stride=n_fields)p Fu(,)h(and)i Fo(dist=1)p
7160
 
Fu(.)39 b(\(Conceptually)-8 b(,)30 b(the)h Fo(n_fields)d
7161
 
Fu(pa-)330 4414 y(rameter)36 b(allo)m(ws)f(y)m(ou)h(to)h(transform)e
 
7220
3707 y Fv(There)29 b(are)i(sev)m(eral)g(things)e(to)i(notice)g(here:)
 
7221
225 3842 y Ft(\017)60 b Fv(First)40 b(of)g(all,)i(all)d
 
7222
Fp(fftw_mpi)f Fv(transforms)h(are)i(in-place:)59 b(the)40
 
7223
b(output)g(is)f(in)g(the)i Fp(local_data)330 3951 y Fv(parameter,)31
 
7224
b(and)f(there)g(is)g(no)g(need)g(to)h(sp)s(ecify)e Fp(FFTW_IN_PLACE)e
 
7225
Fv(in)i(the)i(plan)e(\015ags.)225 4085 y Ft(\017)60 b
 
7226
Fv(The)32 b(MPI)h(transforms)f(also)h(only)f(supp)s(ort)f(a)j(limited)c
 
7227
(subset)j(of)g(the)g Fp(howmany)p Fv(/)p Fp(stride)p
 
7228
Fv(/)p Fp(dist)330 4195 y Fv(functionalit)m(y)39 b(of)h(the)h(unipro)s
 
7229
(cessor)d(routines:)60 b(the)41 b Fp(n_fields)d Fv(parameter)j(is)e
 
7230
(equiv)-5 b(alen)m(t)40 b(to)330 4305 y Fp(howmany=n_fields)p
 
7231
Fv(,)26 b Fp(stride=n_fields)p Fv(,)h(and)i Fp(dist=1)p
 
7232
Fv(.)39 b(\(Conceptually)-8 b(,)30 b(the)h Fp(n_fields)d
 
7233
Fv(pa-)330 4414 y(rameter)36 b(allo)m(ws)f(y)m(ou)h(to)h(transform)e
7162
7234
(an)g(arra)m(y)i(of)f(con)m(tiguous)f(v)m(ectors,)k(eac)m(h)e(with)d
7163
 
(length)i Fo(n_)330 4524 y(fields)p Fu(.\))j Fo(n_fields)28
7164
 
b Fu(is)i Fo(1)g Fu(if)f(y)m(ou)i(are)g(only)e(transforming)g(a)i
7165
 
(single,)e(ordinary)g(arra)m(y)-8 b(.)225 4658 y Fs(\017)60
7166
 
b Fu(The)24 b Fo(work)f Fu(parameter)i(is)f(an)g(optional)g(w)m
7167
 
(orkspace.)40 b(If)24 b(it)g(is)f(not)i Fo(NULL)p Fu(,)g(it)f(should)f
 
7235
(length)i Fp(n_)330 4524 y(fields)p Fv(.\))j Fp(n_fields)28
 
7236
b Fv(is)i Fp(1)g Fv(if)f(y)m(ou)i(are)g(only)e(transforming)g(a)i
 
7237
(single,)e(ordinary)g(arra)m(y)-8 b(.)225 4658 y Ft(\017)60
 
7238
b Fv(The)24 b Fp(work)f Fv(parameter)i(is)f(an)g(optional)g(w)m
 
7239
(orkspace.)40 b(If)24 b(it)g(is)f(not)i Fp(NULL)p Fv(,)g(it)f(should)f
7168
7240
(b)s(e)g(exactly)j(the)330 4767 y(same)31 b(size)f(as)g(the)g
7169
 
Fo(local_data)e Fu(arra)m(y)-8 b(.)41 b(If)30 b(it)g(is)f(pro)m(vided,)
 
7241
Fp(local_data)e Fv(arra)m(y)-8 b(.)41 b(If)30 b(it)g(is)f(pro)m(vided,)
7170
7242
g(FFTW)i(is)e(able)h(to)h(use)f(the)g(built-in)330 4877
7171
 
y Fo(MPI_Alltoall)i Fu(primitiv)m(e)i(for)i(\(often\))g(greater)h
 
7243
y Fp(MPI_Alltoall)i Fv(primitiv)m(e)i(for)i(\(often\))g(greater)h
7172
7244
(e\016ciency)f(at)h(the)f(exp)s(ense)f(of)h(extra)g(storage)330
7173
 
4987 y(space.)225 5121 y Fs(\017)60 b Fu(Finally)-8 b(,)28
 
7245
4987 y(space.)225 5121 y Ft(\017)60 b Fv(Finally)-8 b(,)28
7174
7246
b(the)h(last)f(parameter)i(sp)s(eci\014es)d(whether)h(the)h(output)g
7175
7247
(data)g(has)g(the)g(same)g(ordering)f(as)330 5230 y(the)c(input)e(data)
7176
 
j(\()p Fo(FFTW_NORMAL_ORDER)p Fu(\),)c(or)j(if)f(it)g(is)g(transp)s
7177
 
(osed)g(\()p Fo(FFTW_TRANSPOSED_ORDER)p Fu(\).)330 5340
 
7248
j(\()p Fp(FFTW_NORMAL_ORDER)p Fv(\),)c(or)j(if)f(it)g(is)g(transp)s
 
7249
(osed)g(\()p Fp(FFTW_TRANSPOSED_ORDER)p Fv(\).)330 5340
7178
7250
y(Lea)m(ving)31 b(the)f(data)h(transp)s(osed)f(results)f(in)g
7179
7251
(signi\014can)m(t)g(p)s(erformance)h(impro)m(v)m(emen)m(ts)h(due)e(to)j
7180
 
(a)p eop
 
7252
(a)p eop end
7181
7253
%%Page: 43 45
7182
 
43 44 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(P)m(arallel)29
7183
 
b(FFTW)2435 b(43)330 299 y(sa)m(v)m(ed)41 b(comm)m(unication)f(step)g
7184
 
(\(needed)g(to)h(un-transp)s(ose)e(the)h(data\).)71 b(Sp)s
7185
 
(eci\014cally)-8 b(,)40 b(the)h(\014rst)330 408 y(t)m(w)m(o)32
7186
 
b(dimensions)27 b(of)k(the)g(arra)m(y)g(are)f(transp)s(osed,)g(as)h(is)
7187
 
e(describ)s(ed)g(in)g(more)h(detail)g(b)m(y)g(the)h(next)330
7188
 
518 y(section.)275 694 y(The)f(output)h(of)h Fo(fftwnd_mpi)d
7189
 
Fu(is)h(iden)m(tical)g(to)i(that)g(of)g(the)f(corresp)s(onding)f
7190
 
(unipro)s(cessor)f(trans-)150 803 y(form.)40 b(In)27
7191
 
b(particular,)g(y)m(ou)i(should)d(recall)h(our)h(con)m(v)m(en)m(tions)h
7192
 
(for)f(normalization)e(and)i(the)g(sign)f(of)i(the)150
 
7254
TeXDict begin 43 44 bop 150 -116 a Fv(Chapter)30 b(4:)41
 
7255
b(P)m(arallel)29 b(FFTW)2435 b(43)330 299 y(sa)m(v)m(ed)41
 
7256
b(comm)m(unication)f(step)g(\(needed)g(to)h(un-transp)s(ose)e(the)h
 
7257
(data\).)71 b(Sp)s(eci\014cally)-8 b(,)40 b(the)h(\014rst)330
 
7258
408 y(t)m(w)m(o)32 b(dimensions)27 b(of)k(the)g(arra)m(y)g(are)f
 
7259
(transp)s(osed,)g(as)h(is)e(describ)s(ed)g(in)g(more)h(detail)g(b)m(y)g
 
7260
(the)h(next)330 518 y(section.)275 694 y(The)f(output)h(of)h
 
7261
Fp(fftwnd_mpi)d Fv(is)h(iden)m(tical)g(to)i(that)g(of)g(the)f(corresp)s
 
7262
(onding)f(unipro)s(cessor)f(trans-)150 803 y(form.)40
 
7263
b(In)27 b(particular,)g(y)m(ou)i(should)d(recall)h(our)h(con)m(v)m(en)m
 
7264
(tions)h(for)f(normalization)e(and)i(the)g(sign)f(of)i(the)150
7193
7265
913 y(transform)h(exp)s(onen)m(t.)275 1045 y(The)c(same)i(plan)e(can)i
7194
7266
(b)s(e)f(used)f(to)i(compute)g(man)m(y)f(transforms)g(of)g(the)h(same)g
7195
7267
(size.)39 b(After)28 b(y)m(ou)g(are)150 1154 y(done)i(with)f(it,)h(y)m
7196
7268
(ou)h(should)e(deallo)s(cate)h(it)g(b)m(y)g(calling)f
7197
 
Fo(fftwnd_mpi_destroy_plan)p Fu(.)275 1286 y Fm(Imp)s(ortan)m(t:)40
7198
 
b Fu(The)30 b(FFTW)h(MPI)e(routines)g(m)m(ust)h(b)s(e)g(called)f(in)f
 
7269
Fp(fftwnd_mpi_destroy_plan)p Fv(.)275 1286 y Fn(Imp)s(ortan)m(t:)40
 
7270
b Fv(The)30 b(FFTW)h(MPI)e(routines)g(m)m(ust)h(b)s(e)g(called)f(in)f
7199
7271
(the)j(same)f(order)f(b)m(y)h(all)f(pro)s(cesses)150
7200
7272
1396 y(in)m(v)m(olv)m(ed)22 b(in)g(the)h(transform.)37
7201
7273
b(Y)-8 b(ou)24 b(should)c(assume)j(that)g(they)g(all)f(are)h(blo)s(c)m
7202
7274
(king,)g(as)g(if)f(eac)m(h)i(con)m(tained)150 1505 y(a)31
7203
 
b(call)e(to)j Fo(MPI_Barrier)p Fu(.)275 1637 y(Programs)25
 
7275
b(call)e(to)j Fp(MPI_Barrier)p Fv(.)275 1637 y(Programs)25
7204
7276
b(using)f(the)h(FFTW)h(MPI)g(routines)e(should)f(b)s(e)i(link)m(ed)f
7205
 
(with)g Fo(-lfftw_mpi)j(-lfftw)i(-lm)150 1746 y Fu(on)h(Unix,)g(in)f
 
7277
(with)g Fp(-lfftw_mpi)j(-lfftw)i(-lm)150 1746 y Fv(on)h(Unix,)g(in)f
7206
7278
(addition)f(to)j(whatev)m(er)h(libraries)27 b(are)k(required)d(for)j
7207
 
(MPI.)150 1962 y Fi(4.2.3)63 b(MPI)41 b(Data)f(La)m(y)m(out)275
7208
 
2152 y Fu(The)31 b(transform)f(data)j(used)e(b)m(y)g(the)h(MPI)f(FFTW)i
7209
 
(routines)d(is)h Fp(distributed)t Fu(:)39 b(a)32 b(distinct)e(p)s
 
7279
(MPI.)150 1962 y Fh(4.2.3)63 b(MPI)41 b(Data)f(La)m(y)m(out)275
 
7280
2152 y Fv(The)31 b(transform)f(data)j(used)e(b)m(y)g(the)h(MPI)f(FFTW)i
 
7281
(routines)d(is)h Fq(distributed)t Fv(:)39 b(a)32 b(distinct)e(p)s
7210
7282
(ortion)150 2261 y(of)k(it)f(resides)f(with)g(eac)m(h)j(pro)s(cess)e
7211
7283
(in)m(v)m(olv)m(ed)g(in)g(the)g(transform.)50 b(This)32
7212
7284
b(allo)m(ws)h(the)g(transform)g(to)i(b)s(e)150 2371 y(parallelized,)23
7223
7295
b(consequence)h(of)g(this)e(is)g(that)i(y)m(ou)f(can't)i(tak)m(e)f(adv)
7224
7296
-5 b(an)m(tage)40 b(of)d(more)g(pro)s(cessors)150 3051
7225
7297
y(than)23 b(y)m(ou)h(ha)m(v)m(e)g(ro)m(ws)f(\(e.g.)40
7226
 
b Fo(64x64x64)21 b Fu(matrix)h(can)i(at)g(most)f(use)g(64)h(pro)s
 
7298
b Fp(64x64x64)21 b Fv(matrix)h(can)i(at)g(most)f(use)g(64)h(pro)s
7227
7299
(cessors\).)38 b(This)22 b(isn't)g(usually)150 3160 y(m)m(uc)m(h)34
7228
7300
b(of)h(a)f(limitation,)f(ho)m(w)m(ev)m(er,)k(as)e(eac)m(h)g(pro)s
7229
7301
(cessor)f(needs)g(a)g(fair)g(amoun)m(t)g(of)h(data)g(in)d(order)i(for)
7230
7302
150 3270 y(the)d(parallel-computation)d(b)s(ene\014ts)i(to)h(out)m(w)m
7231
7303
(eigh)m(t)g(the)g(comm)m(unications)f(costs.)275 3401
7232
7304
y(Belo)m(w,)d(the)f(\014rst)g(dimension)d(of)j(the)g(data)h(will)c(b)s
7233
 
(e)j(referred)f(to)i(as)f(`)p Fo(x)p Fu(')g(and)f(the)h(second)h
7234
 
(dimension)150 3511 y(as)k(`)p Fo(y)p Fu('.)275 3643
 
7305
(e)j(referred)f(to)i(as)f(`)p Fp(x)p Fv(')g(and)f(the)h(second)h
 
7306
(dimension)150 3511 y(as)k(`)p Fp(y)p Fv('.)275 3643
7235
7307
y(FFTW)43 b(supplies)e(a)i(routine)f(to)i(tell)f(y)m(ou)g(exactly)h(ho)
7236
7308
m(w)g(m)m(uc)m(h)f(data)h(resides)e(on)h(the)g(curren)m(t)150
7237
 
3752 y(pro)s(cess:)390 3878 y Fo(void)k(fftwnd_mpi_local_sizes\()o
 
7309
3752 y(pro)s(cess:)390 3878 y Fp(void)k(fftwnd_mpi_local_sizes\()o
7238
7310
(fftw)o(nd_)o(mpi_)o(plan)41 b(p,)1726 3982 y(int)47
7239
7311
b(*local_nx,)1726 4086 y(int)g(*local_x_start,)1726 4189
7240
7312
y(int)g(*local_ny_after_transpose)o(,)1726 4293 y(int)g
7241
7313
(*local_y_start_after_tran)o(spos)o(e,)1726 4397 y(int)g
7242
 
(*total_local_size\);)275 4529 y Fu(Giv)m(en)39 b(a)h(plan)e
7243
 
Fo(p)p Fu(,)k(the)e(other)g(parameters)f(of)h(this)f(routine)f(are)i
 
7314
(*total_local_size\);)275 4529 y Fv(Giv)m(en)39 b(a)h(plan)e
 
7315
Fp(p)p Fv(,)k(the)e(other)g(parameters)f(of)h(this)f(routine)f(are)i
7244
7316
(set)g(to)h(v)-5 b(alues)38 b(describing)g(the)150 4638
7245
7317
y(required)29 b(data)i(la)m(y)m(out,)g(describ)s(ed)d(b)s(elo)m(w.)275
7246
 
4770 y Fo(total_local_size)c Fu(is)k(the)i(n)m(um)m(b)s(er)d(of)i
7247
 
Fo(fftw_complex)d Fu(elemen)m(ts)k(that)f(y)m(ou)h(m)m(ust)f(allo)s
 
7318
4770 y Fp(total_local_size)c Fv(is)k(the)i(n)m(um)m(b)s(er)d(of)i
 
7319
Fp(fftw_complex)d Fv(elemen)m(ts)k(that)f(y)m(ou)h(m)m(ust)f(allo)s
7248
7320
(cate)g(for)150 4880 y(y)m(our)e(lo)s(cal)g(data)h(\(and)f(w)m
7249
7321
(orkspace,)i(if)d(y)m(ou)h(c)m(ho)s(ose\).)41 b(\(This)26
7250
7322
b(v)-5 b(alue)27 b(should,)f(of)i(course,)g(b)s(e)e(m)m(ultiplied)150
7251
 
4989 y(b)m(y)k Fo(n_fields)e Fu(if)i(that)h(parameter)g(to)g
7252
 
Fo(fftwnd_mpi)c Fu(is)j(not)g Fo(1)p Fu(.\))275 5121
 
7323
4989 y(b)m(y)k Fp(n_fields)e Fv(if)i(that)h(parameter)g(to)g
 
7324
Fp(fftwnd_mpi)c Fv(is)j(not)g Fp(1)p Fv(.\))275 5121
7253
7325
y(The)e(data)i(on)f(the)g(curren)m(t)g(pro)s(cess)g(has)f
7254
 
Fo(local_nx)f Fu(ro)m(ws,)j(starting)f(at)h(ro)m(w)f
7255
 
Fo(local_x_start)p Fu(.)36 b(If)150 5230 y Fo(fftwnd_mpi)26
7256
 
b Fu(is)i(called)g(with)g Fo(FFTW_TRANSPOSED_ORDER)23
7257
 
b Fu(output,)29 b(then)g Fo(y)f Fu(will)f(b)s(e)h(the)h(\014rst)f
 
7326
Fp(local_nx)f Fv(ro)m(ws,)j(starting)f(at)h(ro)m(w)f
 
7327
Fp(local_x_start)p Fv(.)36 b(If)150 5230 y Fp(fftwnd_mpi)26
 
7328
b Fv(is)i(called)g(with)g Fp(FFTW_TRANSPOSED_ORDER)23
 
7329
b Fv(output,)29 b(then)g Fp(y)f Fv(will)f(b)s(e)h(the)h(\014rst)f
7258
7330
(dimen-)150 5340 y(sion)d(of)i(the)f(output,)h(and)f(the)h(lo)s(cal)e
7259
 
Fo(y)h Fu(exten)m(t)i(will)c(b)s(e)h(giv)m(en)i(b)m(y)f
7260
 
Fo(local_ny_after_transpose)20 b Fu(and)p eop
 
7331
Fp(y)h Fv(exten)m(t)i(will)c(b)s(e)h(giv)m(en)i(b)m(y)f
 
7332
Fp(local_ny_after_transpose)20 b Fv(and)p eop end
7261
7333
%%Page: 44 46
7262
 
44 45 bop 150 -116 a Fu(44)3232 b(FFTW)150 299 y Fo
7263
 
(local_y_start_after_tran)o(spos)o(e)p Fu(.)59 b(Otherwise,)39
7264
 
b(the)g(output)e(has)i(the)f(same)h(dimensions)d(and)150
7265
 
408 y(la)m(y)m(out)31 b(as)g(the)f(input.)275 542 y(F)-8
7266
 
b(or)24 b(instance,)g(supp)s(ose)e(y)m(ou)i(w)m(an)m(t)g(to)g
7267
 
(transform)f(three-dimensional)e(data)j(of)g(size)f Fo(nx)29
7268
 
b(x)i(ny)e(x)h(nz)p Fu(.)150 651 y(Then,)c(the)f(curren)m(t)g(pro)s
 
7334
TeXDict begin 44 45 bop 150 -116 a Fv(44)3232 b(FFTW)150
 
7335
299 y Fp(local_y_start_after_tran)o(spos)o(e)p Fv(.)59
 
7336
b(Otherwise,)39 b(the)g(output)e(has)i(the)f(same)h(dimensions)d(and)
 
7337
150 408 y(la)m(y)m(out)31 b(as)g(the)f(input.)275 542
 
7338
y(F)-8 b(or)24 b(instance,)g(supp)s(ose)e(y)m(ou)i(w)m(an)m(t)g(to)g
 
7339
(transform)f(three-dimensional)e(data)j(of)g(size)f Fp(nx)29
 
7340
b(x)i(ny)e(x)h(nz)p Fv(.)150 651 y(Then,)c(the)f(curren)m(t)g(pro)s
7269
7341
(cess)g(will)e(store)j(a)f(subset)g(of)g(this)g(data,)i(of)e(size)h
7270
 
Fo(local_nx)i(x)i(ny)f(x)h(nz)p Fu(,)c(where)150 761
7271
 
y(the)d Fo(x)g Fu(indices)e(corresp)s(ond)h(to)h(the)g(range)h
7272
 
Fo(local_x_start)19 b Fu(to)24 b Fo(local_x_start+local_nx-)o(1)17
7273
 
b Fu(in)22 b(the)150 870 y(\\real")34 b(\(i.e.)50 b(logical\))33
7274
 
b(arra)m(y)-8 b(.)51 b(If)33 b Fo(fftwnd_mpi)d Fu(is)j(called)f(with)g
7275
 
Fo(FFTW_TRANSPOSED_ORDER)c Fu(output,)150 980 y(then)33
7276
 
b(the)h(result)e(will)f(b)s(e)i(a)g Fo(ny)d(x)g(nx)g(x)g(nz)j
7277
 
Fu(arra)m(y)-8 b(,)35 b(of)f(whic)m(h)e(a)i Fo(local_ny_after_transpos)
7278
 
o(e)25 b(x)30 b(nx)150 1090 y(x)g(nz)h Fu(subset)g(is)g(stored)h(on)g
 
7342
Fp(local_nx)i(x)i(ny)f(x)h(nz)p Fv(,)c(where)150 761
 
7343
y(the)d Fp(x)g Fv(indices)e(corresp)s(ond)h(to)h(the)g(range)h
 
7344
Fp(local_x_start)19 b Fv(to)24 b Fp(local_x_start+local_nx-)o(1)17
 
7345
b Fv(in)22 b(the)150 870 y(\\real")34 b(\(i.e.)50 b(logical\))33
 
7346
b(arra)m(y)-8 b(.)51 b(If)33 b Fp(fftwnd_mpi)d Fv(is)j(called)f(with)g
 
7347
Fp(FFTW_TRANSPOSED_ORDER)c Fv(output,)150 980 y(then)33
 
7348
b(the)h(result)e(will)f(b)s(e)i(a)g Fp(ny)d(x)g(nx)g(x)g(nz)j
 
7349
Fv(arra)m(y)-8 b(,)35 b(of)f(whic)m(h)e(a)i Fp(local_ny_after_transpos)
 
7350
o(e)25 b(x)30 b(nx)150 1090 y(x)g(nz)h Fv(subset)g(is)g(stored)h(on)g
7279
7351
(the)g(curren)m(t)g(pro)s(cess)f(\(corresp)s(onding)f(to)j
7280
 
Fo(y)e Fu(v)-5 b(alues)31 b(starting)h(at)h Fo(local_)150
7281
 
1199 y(y_start_after_transpose)p Fu(\).)275 1332 y(The)c(follo)m(wing)g
 
7352
Fp(y)e Fv(v)-5 b(alues)31 b(starting)h(at)h Fp(local_)150
 
7353
1199 y(y_start_after_transpose)p Fv(\).)275 1332 y(The)c(follo)m(wing)g
7282
7354
(is)h(an)g(example)g(of)g(allo)s(cating)g(suc)m(h)g(a)h
7283
 
(three-dimensional)d(arra)m(y)i(arra)m(y)h(\()p Fo(local_)150
7284
 
1442 y(data)p Fu(\))f(b)s(efore)g(the)g(transform)g(and)g(initializing)
7285
 
c(it)k(to)h(some)g(function)e Fo(f\(x,y,z\))p Fu(:)772
7286
 
1569 y Fo(fftwnd_mpi_local_sizes\(p)o(lan)o(,)42 b(&local_nx,)j
 
7355
(three-dimensional)d(arra)m(y)i(arra)m(y)h(\()p Fp(local_)150
 
7356
1442 y(data)p Fv(\))f(b)s(efore)g(the)g(transform)g(and)g(initializing)
 
7357
c(it)k(to)h(some)g(function)e Fp(f\(x,y,z\))p Fv(:)772
 
7358
1569 y Fp(fftwnd_mpi_local_sizes\(p)o(lan)o(,)42 b(&local_nx,)j
7287
7359
(&local_x_start,)1870 1673 y(&local_ny_after_transpo)o(se,)1870
7288
7360
1777 y(&local_y_start_after_tr)o(ans)o(pose)o(,)1870
7289
7361
1881 y(&total_local_size\);)772 2088 y(local_data)g(=)i
7293
7365
(++y\))1535 2607 y(for)g(\(z)h(=)f(0;)g(z)h(<)f(nz;)g(++z\))1917
7294
7366
2711 y(local_data[\(x*ny)d(+)j(y\)*nz)f(+)i(z])2299 2815
7295
7367
y(=)g(f\(x)e(+)i(local_x_start,)c(y,)j(z\);)275 2948
7296
 
y Fu(Some)30 b(imp)s(ortan)m(t)g(things)f(to)i(remem)m(b)s(er:)225
7297
 
3081 y Fs(\017)60 b Fu(Although)26 b(the)i(lo)s(cal)e(data)i(is)e(of)i
7298
 
(dimensions)c Fo(local_nx)k(x)i(ny)g(x)g(nz)d Fu(in)f(the)h(ab)s(o)m(v)
7299
 
m(e)h(example,)g(do)330 3190 y Fq(not)40 b Fu(allo)s(cate)31
7300
 
b(the)f(arra)m(y)h(to)g(b)s(e)f(of)g(size)h Fo(local_nx*ny*nz)p
7301
 
Fu(.)36 b(Use)31 b Fo(total_local_size)26 b Fu(instead.)225
7302
 
3324 y Fs(\017)60 b Fu(The)32 b(amoun)m(t)g(of)g(data)h(on)f(eac)m(h)h
 
7368
y Fv(Some)30 b(imp)s(ortan)m(t)g(things)f(to)i(remem)m(b)s(er:)225
 
7369
3081 y Ft(\017)60 b Fv(Although)26 b(the)i(lo)s(cal)e(data)i(is)e(of)i
 
7370
(dimensions)c Fp(local_nx)k(x)i(ny)g(x)g(nz)d Fv(in)f(the)h(ab)s(o)m(v)
 
7371
m(e)h(example,)g(do)330 3190 y Fr(not)40 b Fv(allo)s(cate)31
 
7372
b(the)f(arra)m(y)h(to)g(b)s(e)f(of)g(size)h Fp(local_nx*ny*nz)p
 
7373
Fv(.)36 b(Use)31 b Fp(total_local_size)26 b Fv(instead.)225
 
7374
3324 y Ft(\017)60 b Fv(The)32 b(amoun)m(t)g(of)g(data)h(on)f(eac)m(h)h
7303
7375
(pro)s(cess)f(will)d(not)k(necessarily)e(b)s(e)g(the)i(same;)g(in)e
7304
 
(fact,)j Fo(local_)330 3433 y(nx)g Fu(ma)m(y)h(ev)m(en)f(b)s(e)g(zero)h
 
7376
(fact,)j Fp(local_)330 3433 y(nx)g Fv(ma)m(y)h(ev)m(en)f(b)s(e)g(zero)h
7305
7377
(for)f(some)h(pro)s(cesses.)52 b(\(F)-8 b(or)36 b(example,)f(supp)s
7306
 
(ose)e(y)m(ou)h(are)h(doing)e(a)i Fo(6x6)330 3543 y Fu(transform)f(on)g
 
7378
(ose)e(y)m(ou)h(are)h(doing)e(a)i Fp(6x6)330 3543 y Fv(transform)f(on)g
7307
7379
(four)g(pro)s(cessors.)52 b(There)34 b(is)f(no)h(w)m(a)m(y)i(to)f
7308
7380
(e\013ectiv)m(ely)g(use)f(the)h(fourth)e(pro)s(cessor)330
7309
7381
3652 y(in)27 b(a)i(slab)f(decomp)s(osition,)g(so)g(w)m(e)i(lea)m(v)m(e)
7310
7382
g(it)e(empt)m(y)-8 b(.)41 b(Pro)s(of)28 b(left)g(as)h(an)f(exercise)h
7311
 
(for)g(the)f(reader.\))225 3786 y Fs(\017)60 b Fu(All)27
 
7383
(for)g(the)f(reader.\))225 3786 y Ft(\017)60 b Fv(All)27
7312
7384
b(arra)m(ys)i(are,)g(of)f(course,)i(in)d(ro)m(w-ma)5
7313
7385
b(jor)28 b(order)g(\(see)h(Section)g(2.5)g([Multi-dimensional)c(Arra)m
7314
7386
(y)330 3895 y(F)-8 b(ormat],)32 b(page)f(11\).)225 4028
7315
 
y Fs(\017)60 b Fu(If)27 b(y)m(ou)g(w)m(an)m(t)h(to)g(compute)g(the)f
 
7387
y Ft(\017)60 b Fv(If)27 b(y)m(ou)g(w)m(an)m(t)h(to)g(compute)g(the)f
7316
7388
(in)m(v)m(erse)g(transform)g(of)g(the)g(output)g(of)h
7317
 
Fo(fftwnd_mpi)p Fu(,)d(the)i(dimen-)330 4138 y(sions)f(of)i(the)g(in)m
 
7389
Fp(fftwnd_mpi)p Fv(,)d(the)i(dimen-)330 4138 y(sions)f(of)i(the)g(in)m
7318
7390
(v)m(erse)f(transform)g(are)h(giv)m(en)g(b)m(y)f(the)h(dimensions)d(of)
7319
7391
j(the)g(output)f(of)h(the)f(forw)m(ard)330 4247 y(transform.)39
7320
7392
b(F)-8 b(or)27 b(example,)g(if)e(y)m(ou)h(are)h(using)d
7321
 
Fo(FFTW_TRANSPOSED_ORDER)d Fu(output)26 b(in)e(the)j(ab)s(o)m(v)m(e)330
 
7393
Fp(FFTW_TRANSPOSED_ORDER)d Fv(output)26 b(in)e(the)j(ab)s(o)m(v)m(e)330
7322
7394
4357 y(example,)j(then)g(the)h(in)m(v)m(erse)f(plan)f(should)g(b)s(e)g
7323
 
(created)j(with)d(dimensions)f Fo(ny)h(x)h(nx)g(x)g(nz)p
7324
 
Fu(.)225 4490 y Fs(\017)60 b Fu(The)35 b(data)h(la)m(y)m(out)h(only)d
 
7395
(created)j(with)d(dimensions)f Fp(ny)h(x)h(nx)g(x)g(nz)p
 
7396
Fv(.)225 4490 y Ft(\017)60 b Fv(The)35 b(data)h(la)m(y)m(out)h(only)d
7325
7397
(dep)s(ends)g(up)s(on)g(the)h(dimensions)e(of)j(the)f(arra)m(y)-8
7326
7398
b(,)38 b(not)e(on)f(the)h(plan,)g(so)330 4600 y(y)m(ou)28
7327
7399
b(are)h(guaran)m(teed)g(that)f(di\013eren)m(t)g(plans)e(for)i(the)g
7328
7400
(same)g(size)g(\(or)g(in)m(v)m(erse)g(plans\))f(will)e(use)j(the)330
7329
7401
4709 y(same)j(\(consisten)m(t\))g(data)g(la)m(y)m(outs.)150
7330
 
4930 y Fi(4.2.4)63 b(Usage)41 b(of)g(MPI)g(FFTW)g(for)g(Real)f
7331
 
(Multi-dimensional)i(T)-10 b(ransforms)275 5121 y Fu(MPI)31
 
7402
4930 y Fh(4.2.4)63 b(Usage)41 b(of)g(MPI)g(FFTW)g(for)g(Real)f
 
7403
(Multi-dimensional)i(T)-10 b(ransforms)275 5121 y Fv(MPI)31
7332
7404
b(transforms)h(sp)s(ecialized)e(for)h(real)h(data)h(are)f(also)g(a)m(v)
7333
7405
-5 b(ailable,)32 b(similiar)c(to)33 b(the)f(unipro)s(cessor)150
7334
 
5230 y Fo(rfftwnd)37 b Fu(transforms.)66 b(Just)39 b(as)g(in)f(the)h
 
7406
5230 y Fp(rfftwnd)37 b Fv(transforms.)66 b(Just)39 b(as)g(in)f(the)h
7335
7407
(unipro)s(cessor)e(case,)43 b(the)c(real-data)h(MPI)f(functions)e(gain)
7336
7408
150 5340 y(roughly)29 b(a)h(factor)h(of)f(t)m(w)m(o)h(in)e(sp)s(eed)g
7337
7409
(\(and)g(sa)m(v)m(e)j(a)e(factor)h(of)f(t)m(w)m(o)h(in)e(space\))i(at)f
7338
 
(the)g(exp)s(ense)g(of)g(more)p eop
 
7410
(the)g(exp)s(ense)g(of)g(more)p eop end
7339
7411
%%Page: 45 47
7340
 
45 46 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(P)m(arallel)29
7341
 
b(FFTW)2435 b(45)150 299 y(complicated)34 b(data)i(formats)f(in)e(the)i
7342
 
(calling)f(program.)53 b(Before)36 b(reading)e(this)g(section,)i(y)m
7343
 
(ou)f(should)150 408 y(de\014nitely)27 b(understand)g(ho)m(w)i(to)h
7344
 
(call)e(the)h(unipro)s(cessor)e Fo(rfftwnd)g Fu(functions)g(and)h(also)
7345
 
h(the)g(complex)150 518 y(MPI)h(FFTW)h(functions.)275
7346
 
689 y(The)26 b(follo)m(wing)f(is)h(an)h(example)g(of)g(a)g(program)g
7347
 
(using)e Fo(rfftwnd_mpi)p Fu(.)37 b(It)27 b(computes)g(the)g(size)g
7348
 
Fo(nx)i(x)150 799 y(ny)h(x)g(nz)g Fu(transform)g(of)h(a)h(real)e
7349
 
(function)g Fo(f\(x,y,z\))p Fu(,)f(m)m(ultiplies)f(the)j(imaginary)e
7350
 
(part)i(b)m(y)g Fo(2)f Fu(for)h(fun,)150 908 y(then)i(computes)g(the)g
7351
 
(in)m(v)m(erse)g(transform.)48 b(\(W)-8 b(e'll)33 b(also)g(use)f
7352
 
Fo(FFTW_TRANSPOSED_ORDER)c Fu(output)k(for)150 1018 y(the)d(transform,)
7353
 
g(and)g(additionally)d(supply)h(the)j(optional)e(w)m(orkspace)i
7354
 
(parameter)g(to)g Fo(rfftwnd_mpi)p Fu(,)150 1127 y(just)g(to)h(add)f(a)
7355
 
g(little)g(spice.\))390 1293 y Fo(#include)46 b(<rfftw_mpi.h>)390
 
7412
TeXDict begin 45 46 bop 150 -116 a Fv(Chapter)30 b(4:)41
 
7413
b(P)m(arallel)29 b(FFTW)2435 b(45)150 299 y(complicated)34
 
7414
b(data)i(formats)f(in)e(the)i(calling)f(program.)53 b(Before)36
 
7415
b(reading)e(this)g(section,)i(y)m(ou)f(should)150 408
 
7416
y(de\014nitely)27 b(understand)g(ho)m(w)i(to)h(call)e(the)h(unipro)s
 
7417
(cessor)e Fp(rfftwnd)g Fv(functions)g(and)h(also)h(the)g(complex)150
 
7418
518 y(MPI)h(FFTW)h(functions.)275 689 y(The)26 b(follo)m(wing)f(is)h
 
7419
(an)h(example)g(of)g(a)g(program)g(using)e Fp(rfftwnd_mpi)p
 
7420
Fv(.)37 b(It)27 b(computes)g(the)g(size)g Fp(nx)i(x)150
 
7421
799 y(ny)h(x)g(nz)g Fv(transform)g(of)h(a)h(real)e(function)g
 
7422
Fp(f\(x,y,z\))p Fv(,)f(m)m(ultiplies)f(the)j(imaginary)e(part)i(b)m(y)g
 
7423
Fp(2)f Fv(for)h(fun,)150 908 y(then)i(computes)g(the)g(in)m(v)m(erse)g
 
7424
(transform.)48 b(\(W)-8 b(e'll)33 b(also)g(use)f Fp
 
7425
(FFTW_TRANSPOSED_ORDER)c Fv(output)k(for)150 1018 y(the)d(transform,)g
 
7426
(and)g(additionally)d(supply)h(the)j(optional)e(w)m(orkspace)i
 
7427
(parameter)g(to)g Fp(rfftwnd_mpi)p Fv(,)150 1127 y(just)g(to)h(add)f(a)
 
7428
g(little)g(spice.\))390 1293 y Fp(#include)46 b(<rfftw_mpi.h>)390
7356
7429
1500 y(int)h(main\(int)e(argc,)i(char)f(**argv\))390
7357
7430
1604 y({)629 1708 y(const)g(int)h(nx)g(=)h(...,)e(ny)h(=)h(...,)e(nz)i
7358
7431
(=)f(...;)629 1812 y(int)g(local_nx,)e(local_x_start,)f
7381
7454
5132 y(for)g(\(z)g(=)h(0;)f(z)g(<)h(nz;)f(++z\))1774
7382
7455
5236 y(data[\(x*ny)e(+)j(y\))f(*)g(\(2*\(nz/2+1\)\))e(+)i(z])2156
7383
7456
5340 y(=)g(f\(x)g(+)h(local_x_start,)c(y,)j(z\);)p eop
 
7457
end
7384
7458
%%Page: 46 48
7385
 
46 47 bop 150 -116 a Fu(46)3232 b(FFTW)629 403 y Fo(/*)47
7386
 
b(Now,)f(compute)g(the)h(forward)f(transform:)f(*/)629
 
7459
TeXDict begin 46 47 bop 150 -116 a Fv(46)3232 b(FFTW)629
 
7460
403 y Fp(/*)47 b(Now,)f(compute)g(the)h(forward)f(transform:)f(*/)629
7387
7461
506 y(rfftwnd_mpi\(plan,)e(1,)k(data,)f(work,)h
7388
7462
(FFTW_TRANSPOSED_ORDER\);)629 714 y(/*)g(the)g(data)f(is)i(now)e
7389
7463
(complex,)g(so)h(typecast)f(a)h(pointer:)f(*/)629 818
7401
7475
2271 y(free\(data\);)629 2374 y(free\(work\);)629 2478
7402
7476
y(rfftwnd_mpi_destroy_pla)o(n\(pl)o(an\))o(;)629 2582
7403
7477
y(rfftwnd_mpi_destroy_pla)o(n\(ip)o(lan)o(\);)629 2686
7404
 
y(MPI_Finalize\(\);)390 2790 y(})275 2946 y Fu(There's)22
 
7478
y(MPI_Finalize\(\);)390 2790 y(})275 2946 y Fv(There's)22
7405
7479
b(a)i(lot)f(of)g(stu\013)g(in)f(this)g(example,)j(but)d(it's)h(all)f
7406
7480
(just)h(what)g(y)m(ou)g(w)m(ould)f(ha)m(v)m(e)j(guessed,)f(righ)m(t?)
7407
 
150 3056 y(W)-8 b(e)25 b(replaced)f(all)f(the)h Fo(fftwnd_mpi*)d
7408
 
Fu(functions)h(b)m(y)i Fo(rfftwnd_mpi*)p Fu(,)f(but)g(otherwise)g(the)i
 
7481
150 3056 y(W)-8 b(e)25 b(replaced)f(all)f(the)h Fp(fftwnd_mpi*)d
 
7482
Fv(functions)h(b)m(y)i Fp(rfftwnd_mpi*)p Fv(,)f(but)g(otherwise)g(the)i
7409
7483
(parameters)150 3165 y(w)m(ere)32 b(prett)m(y)h(m)m(uc)m(h)e(the)h
7410
7484
(same.)46 b(The)31 b(data)i(la)m(y)m(out)f(distributed)d(among)j(the)g
7411
7485
(pro)s(cesses)g(just)f(lik)m(e)g(for)150 3275 y(the)38
7415
7489
(is)f(for)i(the)g(unipro)s(cessor)d(in-place)i(real)g(transforms)150
7416
7490
3494 y(\(see)31 b(Section)f(3.5.3)j([Arra)m(y)d(Dimensions)f(for)h
7417
7491
(Real)g(Multi-dimensional)d(T)-8 b(ransforms],)30 b(page)h(32\).)42
7418
 
b(In)150 3604 y(particular,)26 b(the)h Fo(z)f Fu(dimension)e(of)j(the)g
 
7492
b(In)150 3604 y(particular,)26 b(the)h Fp(z)f Fv(dimension)e(of)j(the)g
7419
7493
(real)f(input)e(data)k(is)d(padded)h(to)h(a)g(size)g
7420
 
Fo(2*\(nz/2+1\))p Fu(,)d(and)i(after)150 3713 y(the)31
7421
 
b(transform)e(it)h(con)m(tains)h Fo(nz/2+1)d Fu(complex)i(v)-5
 
7494
Fp(2*\(nz/2+1\))p Fv(,)d(and)i(after)150 3713 y(the)31
 
7495
b(transform)e(it)h(con)m(tains)h Fp(nz/2+1)d Fv(complex)i(v)-5
7422
7496
b(alues.)275 3870 y(Some)30 b(other)h(imp)s(ortan)m(t)e(things)g(to)i
7423
7497
(kno)m(w)g(ab)s(out)f(the)h(real)f(MPI)g(transforms:)225
7424
 
4027 y Fs(\017)60 b Fu(As)36 b(for)g(the)g(unipro)s(cessor)e
7425
 
Fo(rfftwnd_create_plan)p Fu(,)e(the)37 b(dimensions)c(passed)i(for)h
7426
 
(the)g Fo(FFTW_)330 4136 y(COMPLEX_TO_REAL)h Fu(plan)j(are)i(those)g
7427
 
(of)g(the)f Fq(r)-5 b(e)g(al)53 b Fu(data.)74 b(In)41
7428
 
b(particular,)i(ev)m(en)f(when)e Fo(FFTW_)330 4246 y(TRANSPOSED_ORDER)
7429
 
32 b Fu(is)j(used)g(as)h(in)f(this)g(case,)k(the)d(dimensions)e(are)i
 
7498
4027 y Ft(\017)60 b Fv(As)36 b(for)g(the)g(unipro)s(cessor)e
 
7499
Fp(rfftwnd_create_plan)p Fv(,)e(the)37 b(dimensions)c(passed)i(for)h
 
7500
(the)g Fp(FFTW_)330 4136 y(COMPLEX_TO_REAL)h Fv(plan)j(are)i(those)g
 
7501
(of)g(the)f Fr(r)-5 b(e)g(al)53 b Fv(data.)74 b(In)41
 
7502
b(particular,)i(ev)m(en)f(when)e Fp(FFTW_)330 4246 y(TRANSPOSED_ORDER)
 
7503
32 b Fv(is)j(used)g(as)h(in)f(this)g(case,)k(the)d(dimensions)e(are)i
7430
7504
(those)h(of)f(the)g(\(un)m(trans-)330 4355 y(p)s(osed\))29
7431
7505
b(real)h(output,)g(not)g(the)g(\(transp)s(osed\))g(complex)g(input.)38
7432
7506
b(\(F)-8 b(or)31 b(the)f(complex)g(MPI)g(trans-)330 4465
7433
7507
y(forms,)g(on)g(the)h(other)f(hand,)g(the)h(dimensions)c(are)k(alw)m(a)
7434
7508
m(ys)g(those)g(of)f(the)h(input)d(arra)m(y)-8 b(.\))225
7435
 
4610 y Fs(\017)60 b Fu(The)24 b(output)h(ordering)e(of)i(the)g
7436
 
(transform)f(\()p Fo(FFTW_TRANSPOSED_ORDER)c Fu(or)k
7437
 
Fo(FFTW_TRANSPOSED_)330 4720 y(ORDER)p Fu(\))39 b Fq(must)50
7438
 
b Fu(b)s(e)40 b(the)h(same)g(for)f(b)s(oth)g(forw)m(ard)g(and)g(bac)m
 
7509
4610 y Ft(\017)60 b Fv(The)24 b(output)h(ordering)e(of)i(the)g
 
7510
(transform)f(\()p Fp(FFTW_TRANSPOSED_ORDER)c Fv(or)k
 
7511
Fp(FFTW_TRANSPOSED_)330 4720 y(ORDER)p Fv(\))39 b Fr(must)50
 
7512
b Fv(b)s(e)40 b(the)h(same)g(for)f(b)s(oth)g(forw)m(ard)g(and)g(bac)m
7439
7513
(kw)m(ard)h(transforms.)70 b(\(This)39 b(is)h(not)330
7440
7514
4830 y(required)29 b(in)g(the)h(complex)g(case.\))225
7441
 
4975 y Fs(\017)60 b Fo(total_local_size)24 b Fu(is)k(the)h(required)d
7442
 
(size)j(in)e Fo(fftw_real)f Fu(v)-5 b(alues,)29 b(not)f
7443
 
Fo(fftw_complex)e Fu(v)-5 b(alues)330 5085 y(as)31 b(it)f(is)f(for)h
7444
 
(the)h(complex)f(transforms.)225 5230 y Fs(\017)60 b
7445
 
Fo(local_ny_after_transpose)20 b Fu(and)26 b Fo
7446
 
(local_y_start_after_tra)o(nspo)o(se)20 b Fu(describ)s(e)25
 
7515
4975 y Ft(\017)60 b Fp(total_local_size)24 b Fv(is)k(the)h(required)d
 
7516
(size)j(in)e Fp(fftw_real)f Fv(v)-5 b(alues,)29 b(not)f
 
7517
Fp(fftw_complex)e Fv(v)-5 b(alues)330 5085 y(as)31 b(it)f(is)f(for)h
 
7518
(the)h(complex)f(transforms.)225 5230 y Ft(\017)60 b
 
7519
Fp(local_ny_after_transpose)20 b Fv(and)26 b Fp
 
7520
(local_y_start_after_tra)o(nspo)o(se)20 b Fv(describ)s(e)25
7447
7521
b(the)i(p)s(or-)330 5340 y(tion)21 b(of)h(the)h(arra)m(y)f(after)g(the)
7448
7522
h(transform;)h(that)e(is,)h(they)f(are)h(indices)d(in)g(the)i(complex)g
7449
 
(arra)m(y)g(for)g(an)p eop
 
7523
(arra)m(y)g(for)g(an)p eop end
7450
7524
%%Page: 47 49
7451
 
47 48 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(P)m(arallel)29
7452
 
b(FFTW)2435 b(47)330 299 y Fo(FFTW_REAL_TO_COMPLEX)19
7453
 
b Fu(transform)k(and)g(in)g(the)h(real)g(arra)m(y)h(for)f(an)f
7454
 
Fo(FFTW_COMPLEX_TO_REAL)330 408 y Fu(transform.)225 544
7455
 
y Fs(\017)60 b Fo(rfftwnd_mpi)21 b Fu(alw)m(a)m(ys)j(exp)s(ects)g
7456
 
Fo(fftw_real*)d Fu(arra)m(y)k(argumen)m(ts,)h(but)d(of)h(course)g
7457
 
(these)g(p)s(oin)m(ters)330 654 y(can)29 b(refer)f(to)h(either)f(real)g
 
7525
TeXDict begin 47 48 bop 150 -116 a Fv(Chapter)30 b(4:)41
 
7526
b(P)m(arallel)29 b(FFTW)2435 b(47)330 299 y Fp(FFTW_REAL_TO_COMPLEX)19
 
7527
b Fv(transform)k(and)g(in)g(the)h(real)g(arra)m(y)h(for)f(an)f
 
7528
Fp(FFTW_COMPLEX_TO_REAL)330 408 y Fv(transform.)225 541
 
7529
y Ft(\017)60 b Fp(rfftwnd_mpi)21 b Fv(alw)m(a)m(ys)j(exp)s(ects)g
 
7530
Fp(fftw_real*)d Fv(arra)m(y)k(argumen)m(ts,)h(but)d(of)h(course)g
 
7531
(these)g(p)s(oin)m(ters)330 651 y(can)29 b(refer)f(to)h(either)f(real)g
7458
7532
(or)h(complex)f(arra)m(ys,)i(dep)s(ending)c(up)s(on)h(whic)m(h)g(side)g
7459
 
(of)i(the)g(transform)330 764 y(y)m(ou)i(are)h(on.)42
 
7533
(of)i(the)g(transform)330 760 y(y)m(ou)i(are)h(on.)42
7460
7534
b(Just)30 b(as)i(for)e(in-place)g(unipro)s(cessor)f(real)i(transforms)f
7461
 
(\(and)h(also)f(in)g(the)h(example)330 873 y(ab)s(o)m(v)m(e\),)f(this)d
 
7535
(\(and)h(also)f(in)g(the)h(example)330 870 y(ab)s(o)m(v)m(e\),)f(this)d
7462
7536
(is)g(most)i(easily)e(handled)f(b)m(y)i(t)m(yp)s(ecasting)g(to)h(a)g
7463
 
(complex)e(p)s(oin)m(ter)h(when)f(handling)330 983 y(the)k(complex)f
7464
 
(data.)225 1119 y Fs(\017)60 b Fu(As)33 b(with)e(the)i(complex)g
7465
 
(transforms,)g(there)g(are)g(also)f Fo(rfftwnd_create_plan)c
7466
 
Fu(and)k Fo(rfftw2d_)330 1228 y(create_plan)27 b Fu(functions,)i(and)h
 
7537
(complex)e(p)s(oin)m(ter)h(when)f(handling)330 979 y(the)k(complex)f
 
7538
(data.)225 1112 y Ft(\017)60 b Fv(As)33 b(with)e(the)i(complex)g
 
7539
(transforms,)g(there)g(are)g(also)f Fp(rfftwnd_create_plan)c
 
7540
Fv(and)k Fp(rfftw2d_)330 1221 y(create_plan)27 b Fv(functions,)i(and)h
7467
7541
(an)m(y)h(rank)f(greater)h(than)g(one)f(is)g(supp)s(orted.)275
7468
 
1392 y(Programs)c(using)e(the)j(MPI)f(FFTW)h(real)f(transforms)f
7469
 
(should)g(link)f(with)h Fo(-lrfftw_mpi)i(-lfftw_)150
7470
 
1502 y(mpi)i(-lrfftw)g(-lfftw)g(-lm)g Fu(on)h(Unix.)150
7471
 
1714 y Fi(4.2.5)63 b(Usage)41 b(of)g(MPI)g(FFTW)g(for)g(Complex)f
7472
 
(One-dimensional)464 1838 y(T)-10 b(ransforms)275 2034
7473
 
y Fu(The)53 b(MPI)h(FFTW)g(also)g(includes)e(routines)g(for)i(parallel)
7474
 
e(one-dimensional)g(transforms)h(of)150 2143 y(complex)40
7475
 
b(data)h(\(only\).)72 b(Although)39 b(the)i(sp)s(eedup)e(is)g
7476
 
(generally)h(w)m(orse)h(than)f(it)g(is)g(for)g(the)h(m)m(ulti-)150
7477
 
2253 y(dimensional)26 b(routines,)994 2220 y Fn(2)1059
7478
 
2253 y Fu(these)j(distributed-memory)c(one-dimensional)h(transforms)i
7479
 
(are)h(esp)s(ecially)150 2363 y(useful)d(for)i(p)s(erforming)e
7480
 
(one-dimensional)g(transforms)h(that)i(don't)f(\014t)f(in)m(to)h(the)h
7481
 
(memory)f(of)g(a)g(single)150 2472 y(mac)m(hine.)275
7482
 
2610 y(The)45 b(usage)i(of)f(these)g(routines)f(is)g(straigh)m(tforw)m
 
7542
1377 y(Programs)c(using)e(the)j(MPI)f(FFTW)h(real)f(transforms)f
 
7543
(should)g(link)f(with)h Fp(-lrfftw_mpi)i(-lfftw_)150
 
7544
1487 y(mpi)i(-lrfftw)g(-lfftw)g(-lm)g Fv(on)h(Unix.)150
 
7545
1687 y Fh(4.2.5)63 b(Usage)41 b(of)g(MPI)g(FFTW)g(for)g(Complex)f
 
7546
(One-dimensional)464 1811 y(T)-10 b(ransforms)275 2002
 
7547
y Fv(The)67 b(MPI)h(FFTW)h(also)f(includes)d(routines)i(for)h(parallel)
 
7548
e(one-dimensional)g(transforms)150 2111 y(of)51 b(complex)g(data)g
 
7549
(\(only\).)103 b(Although)50 b(the)h(sp)s(eedup)e(is)h(generally)g(w)m
 
7550
(orse)i(than)e(it)h(is)f(for)h(the)150 2221 y(m)m(ulti-dimensional)g
 
7551
(routines,)1260 2188 y Fo(2)1358 2221 y Fv(these)56 b
 
7552
(distributed-memory)d(one-dimensional)g(transforms)i(are)150
 
7553
2331 y(esp)s(ecially)28 b(useful)g(for)h(p)s(erforming)f
 
7554
(one-dimensional)f(transforms)i(that)h(don't)g(\014t)g(in)m(to)f(the)h
 
7555
(memory)150 2440 y(of)h(a)f(single)f(mac)m(hine.)275
 
7556
2573 y(The)45 b(usage)i(of)f(these)g(routines)f(is)g(straigh)m(tforw)m
7483
7557
(ard,)50 b(and)c(is)f(similar)e(to)k(that)g(of)f(the)g(m)m(ulti-)150
7484
 
2719 y(dimensional)41 b(MPI)i(transform)g(functions.)79
7485
 
b(Y)-8 b(ou)45 b(\014rst)e(include)e(the)j(header)f Fo(<fftw_mpi.h>)e
7486
 
Fu(and)150 2829 y(then)30 b(create)i(a)f(plan)e(b)m(y)h(calling:)390
7487
 
2960 y Fo(fftw_mpi_plan)44 b(fftw_mpi_create_plan\(MPI_)o(Comm)d(comm,)
7488
 
46 b(int)h(n,)2060 3064 y(fftw_direction)d(dir,)j(int)g(flags\);)275
7489
 
3202 y Fu(The)32 b(last)i(three)f(argumen)m(ts)h(are)f(the)h(same)g(as)
7490
 
f(for)g Fo(fftw_create_plan)c Fu(\(except)35 b(that)f(all)e(MPI)150
7491
 
3311 y(transforms)k(are)h(automatically)g Fo(FFTW_IN_PLACE)p
7492
 
Fu(\).)58 b(The)36 b(\014rst)g(argumen)m(t)i(sp)s(eci\014es)d(the)i
7493
 
(group)g(of)150 3421 y(pro)s(cesses)26 b(y)m(ou)h(are)g(using,)f(and)g
7494
 
(is)f(usually)g Fo(MPI_COMM_WORLD)d Fu(\(all)k(pro)s(cesses\).)39
7495
 
b(A)27 b(plan)e(can)i(b)s(e)f(used)150 3530 y(for)h(man)m(y)f
 
7558
2682 y(dimensional)41 b(MPI)i(transform)g(functions.)79
 
7559
b(Y)-8 b(ou)45 b(\014rst)e(include)e(the)j(header)f Fp(<fftw_mpi.h>)e
 
7560
Fv(and)150 2792 y(then)30 b(create)i(a)f(plan)e(b)m(y)h(calling:)390
 
7561
2919 y Fp(fftw_mpi_plan)44 b(fftw_mpi_create_plan\(MPI_)o(Comm)d(comm,)
 
7562
46 b(int)h(n,)2060 3022 y(fftw_direction)d(dir,)j(int)g(flags\);)275
 
7563
3155 y Fv(The)32 b(last)i(three)f(argumen)m(ts)h(are)f(the)h(same)g(as)
 
7564
f(for)g Fp(fftw_create_plan)c Fv(\(except)35 b(that)f(all)e(MPI)150
 
7565
3265 y(transforms)k(are)h(automatically)g Fp(FFTW_IN_PLACE)p
 
7566
Fv(\).)58 b(The)36 b(\014rst)g(argumen)m(t)i(sp)s(eci\014es)d(the)i
 
7567
(group)g(of)150 3374 y(pro)s(cesses)26 b(y)m(ou)h(are)g(using,)f(and)g
 
7568
(is)f(usually)g Fp(MPI_COMM_WORLD)d Fv(\(all)k(pro)s(cesses\).)39
 
7569
b(A)27 b(plan)e(can)i(b)s(e)f(used)150 3484 y(for)h(man)m(y)f
7496
7570
(transforms)g(of)h(the)g(same)g(size,)h(and)e(is)g(destro)m(y)m(ed)i
7497
7571
(when)d(y)m(ou)i(are)h(done)e(with)f(it)i(b)m(y)f(calling)150
7498
 
3640 y Fo(fftw_mpi_destroy_plan\(pl)o(an\))p Fu(.)275
7499
 
3777 y(If)32 b(y)m(ou)i(don't)f(care)h(ab)s(out)e(the)i(ordering)d(of)j
 
7572
3593 y Fp(fftw_mpi_destroy_plan\(pl)o(an\))p Fv(.)275
 
7573
3726 y(If)32 b(y)m(ou)i(don't)f(care)h(ab)s(out)e(the)i(ordering)d(of)j
7500
7574
(the)f(input)e(or)i(output)g(data)h(of)f(the)g(transform,)h(y)m(ou)150
7501
 
3887 y(can)d(include)d Fo(FFTW_SCRAMBLED_INPUT)d Fu(and/or)30
7502
 
b Fo(FFTW_SCRAMBLED_OUTPUT)24 b Fu(in)29 b(the)i Fo(flags)p
7503
 
Fu(.)39 b(These)150 3997 y(sa)m(v)m(e)34 b(some)e(comm)m(unications)g
 
7575
3835 y(can)d(include)d Fp(FFTW_SCRAMBLED_INPUT)d Fv(and/or)30
 
7576
b Fp(FFTW_SCRAMBLED_OUTPUT)24 b Fv(in)29 b(the)i Fp(flags)p
 
7577
Fv(.)39 b(These)150 3945 y(sa)m(v)m(e)34 b(some)e(comm)m(unications)g
7504
7578
(at)h(the)f(exp)s(ense)g(of)g(ha)m(ving)g(the)g(input)f(and/or)h
7505
 
(output)g(reordered)f(in)150 4106 y(an)e(undo)s(cumen)m(ted)f(w)m(a)m
 
7579
(output)g(reordered)f(in)150 4055 y(an)e(undo)s(cumen)m(ted)f(w)m(a)m
7506
7580
(y)-8 b(.)42 b(F)-8 b(or)29 b(example,)h(if)e(y)m(ou)h(are)h(p)s
7507
7581
(erforming)d(an)i(FFT-based)g(con)m(v)m(olution,)h(y)m(ou)150
7508
 
4216 y(migh)m(t)d(use)f Fo(FFTW_SCRAMBLED_OUTPUT)21 b
7509
 
Fu(for)27 b(the)g(forw)m(ard)f(transform)g(and)g Fo
7510
 
(FFTW_SCRAMBLED_INPUT)150 4325 y Fu(for)k(the)h(in)m(v)m(erse)f
7511
 
(transform.)275 4463 y(The)f(transform)h(itself)f(is)h(computed)g(b)m
7512
 
(y:)390 4594 y Fo(void)47 b(fftw_mpi\(fftw_mpi_plan)41
7513
 
b(p,)48 b(int)e(n_fields,)1058 4698 y(fftw_complex)f(*local_data,)f
7514
 
(fftw_complex)h(*work\);)p 150 4802 1200 4 v 192 4869
7515
 
a Fn(2)275 4902 y Fu(The)35 b(1D)h(transforms)f(require)f(m)m(uc)m(h)i
7516
 
(more)f(comm)m(unication.)56 b(All)34 b(the)i(comm)m(unication)f(in)f
7517
 
(our)275 5011 y(FFT)46 b(routines)g(tak)m(es)i(the)f(form)f(of)g(an)h
7518
 
(all-to-all)f(comm)m(unication:)72 b(the)47 b(m)m(ulti-dimensional)275
7519
 
5121 y(transforms)29 b(require)f(t)m(w)m(o)k(all-to-all)d(comm)m
7520
 
(unications)g(\(or)i(one,)f(if)f(y)m(ou)i(use)e Fo(FFTW_TRANSPOSED_)275
7521
 
5230 y(ORDER)p Fu(\),)c(while)f(the)i(one-dimensional)d(transforms)i
7522
 
(require)g Fq(thr)-5 b(e)g(e)33 b Fu(\(or)26 b(t)m(w)m(o,)j(if)24
7523
 
b(y)m(ou)i(use)g(scram)m(bled)275 5340 y(input)i(or)i(output\).)p
7524
 
eop
 
7582
4164 y(migh)m(t)d(use)f Fp(FFTW_SCRAMBLED_OUTPUT)21 b
 
7583
Fv(for)27 b(the)g(forw)m(ard)f(transform)g(and)g Fp
 
7584
(FFTW_SCRAMBLED_INPUT)150 4274 y Fv(for)k(the)h(in)m(v)m(erse)f
 
7585
(transform.)275 4406 y(The)f(transform)h(itself)f(is)h(computed)g(b)m
 
7586
(y:)390 4533 y Fp(void)47 b(fftw_mpi\(fftw_mpi_plan)41
 
7587
b(p,)48 b(int)e(n_fields,)1058 4637 y(fftw_complex)f(*local_data,)f
 
7588
(fftw_complex)h(*work\);)275 4769 y(n_fields)p Fv(,)c(as)g(in)f
 
7589
Fp(fftwnd_mpi)p Fv(,)h(is)f(equiv)-5 b(alen)m(t)41 b(to)g
 
7590
Fp(howmany=n_fields)p Fv(,)f Fp(stride=n_fields)p Fv(,)150
 
7591
4879 y(and)h Fp(dist=1)p Fv(,)i(and)e(should)f(b)s(e)h
 
7592
Fp(1)g Fv(when)g(y)m(ou)h(are)g(computing)f(the)h(transform)f(of)g(a)h
 
7593
(single)f(arra)m(y)-8 b(.)p 150 4967 1200 4 v 199 5034
 
7594
a Fo(2)275 5066 y Fj(The)33 b(1D)h(transforms)g(require)g(m)n(uc)n(h)e
 
7595
(more)h(comm)n(unication.)57 b(All)34 b(the)f(comm)n(unication)g(in)h
 
7596
(our)f(FFT)i(routines)275 5157 y(tak)n(es)c(the)g(form)g(of)h(an)f
 
7597
(all-to-all)i(comm)n(unication:)44 b(the)31 b(m)n(ulti-dimensional)f
 
7598
(transforms)i(require)f(t)n(w)n(o)g(all-to-all)275 5249
 
7599
y(comm)n(unications)36 b(\(or)h(one,)k(if)d(y)n(ou)e(use)i
 
7600
Fi(FFTW_TRANSPOSED_ORDER)p Fj(\),)44 b(while)39 b(the)d
 
7601
(one-dimensional)i(transforms)275 5340 y(require)25 b
 
7602
Ff(thr)l(e)l(e)33 b Fj(\(or)26 b(t)n(w)n(o,)g(if)h(y)n(ou)e(use)h
 
7603
(scram)n(bled)f(input)f(or)i(output\).)p eop end
7525
7604
%%Page: 48 50
7526
 
48 49 bop 150 -116 a Fu(48)3232 b(FFTW)275 299 y Fo(n_fields)p
7527
 
Fu(,)41 b(as)g(in)f Fo(fftwnd_mpi)p Fu(,)h(is)f(equiv)-5
7528
 
b(alen)m(t)41 b(to)g Fo(howmany=n_fields)p Fu(,)f Fo(stride=n_fields)p
7529
 
Fu(,)150 408 y(and)h Fo(dist=1)p Fu(,)i(and)e(should)f(b)s(e)h
7530
 
Fo(1)g Fu(when)g(y)m(ou)h(are)g(computing)f(the)h(transform)f(of)g(a)h
7531
 
(single)f(arra)m(y)-8 b(.)150 518 y Fo(local_data)25
7532
 
b Fu(con)m(tains)j(the)f(p)s(ortion)g(of)g(the)h(arra)m(y)g(lo)s(cal)f
7533
 
(to)i(the)f(curren)m(t)f(pro)s(cess,)h(describ)s(ed)d(b)s(elo)m(w.)150
7534
 
628 y Fo(work)37 b Fu(is)f(either)h Fo(NULL)g Fu(or)h(an)f(arra)m(y)h
7535
 
(exactly)h(the)f(same)g(size)g(as)f Fo(local_data)p Fu(;)i(in)e(the)h
7536
 
(latter)g(case,)150 737 y(FFTW)h(can)f(use)g(the)g Fo(MPI_Alltoall)d
7537
 
Fu(comm)m(unications)i(primitiv)m(e)f(whic)m(h)h(is)g(\(usually\))g
7538
 
(faster)h(at)150 847 y(the)30 b(exp)s(ense)g(of)g(extra)h(storage.)42
7539
 
b(Up)s(on)29 b(return,)g Fo(local_data)f Fu(con)m(tains)i(the)g(p)s
7540
 
(ortion)f(of)h(the)g(output)150 956 y(lo)s(cal)g(to)h(the)f(curren)m(t)
7541
 
g(pro)s(cess)g(\(see)i(b)s(elo)m(w\).)275 1104 y(T)-8
 
7605
TeXDict begin 48 49 bop 150 -116 a Fv(48)3232 b(FFTW)150
 
7606
299 y Fp(local_data)25 b Fv(con)m(tains)j(the)f(p)s(ortion)g(of)g(the)h
 
7607
(arra)m(y)g(lo)s(cal)f(to)i(the)f(curren)m(t)f(pro)s(cess,)h(describ)s
 
7608
(ed)d(b)s(elo)m(w.)150 408 y Fp(work)37 b Fv(is)f(either)h
 
7609
Fp(NULL)g Fv(or)h(an)f(arra)m(y)h(exactly)h(the)f(same)g(size)g(as)f
 
7610
Fp(local_data)p Fv(;)i(in)e(the)h(latter)g(case,)150
 
7611
518 y(FFTW)h(can)f(use)g(the)g Fp(MPI_Alltoall)d Fv(comm)m(unications)i
 
7612
(primitiv)m(e)f(whic)m(h)h(is)g(\(usually\))g(faster)h(at)150
 
7613
628 y(the)30 b(exp)s(ense)g(of)g(extra)h(storage.)42
 
7614
b(Up)s(on)29 b(return,)g Fp(local_data)f Fv(con)m(tains)i(the)g(p)s
 
7615
(ortion)f(of)h(the)g(output)150 737 y(lo)s(cal)g(to)h(the)f(curren)m(t)
 
7616
g(pro)s(cess)g(\(see)i(b)s(elo)m(w\).)275 870 y(T)-8
7542
7617
b(o)29 b(\014nd)f(out)i(what)f(p)s(ortion)f(of)h(the)h(arra)m(y)f(is)g
7543
7618
(stored)g(lo)s(cal)g(to)h(the)f(curren)m(t)g(pro)s(cess,)h(y)m(ou)f
7544
 
(call)g(the)150 1213 y(follo)m(wing)g(routine:)390 1355
7545
 
y Fo(void)47 b(fftw_mpi_local_sizes\(ff)o(tw_m)o(pi_)o(plan)41
7546
 
b(p,)1631 1459 y(int)47 b(*local_n,)e(int)i(*local_start,)1631
7547
 
1563 y(int)g(*local_n_after_transform)o(,)1631 1666 y(int)g
7548
 
(*local_start_after_trans)o(for)o(m,)1631 1770 y(int)g
7549
 
(*total_local_size\);)275 1918 y(total_local_size)17
7550
 
b Fu(is)j(the)i(n)m(um)m(b)s(er)f(of)g Fo(fftw_complex)e
7551
 
Fu(elemen)m(ts)j(y)m(ou)g(should)d(actually)i(allo)s(cate)150
7552
 
2027 y(for)34 b Fo(local_data)e Fu(\(and)i Fo(work)p
7553
 
Fu(\).)52 b Fo(local_n)33 b Fu(and)h Fo(local_start)d
7554
 
Fu(indicate)i(that)i(the)g(curren)m(t)f(pro)s(cess)150
7555
 
2137 y(stores)23 b Fo(local_n)d Fu(elemen)m(ts)j(corresp)s(onding)e(to)
7556
 
i(the)g(indices)d Fo(local_start)g Fu(to)j Fo(local_start+local_)150
7557
 
2246 y(n-1)35 b Fu(in)f(the)i(\\real")g(arra)m(y)-8 b(.)58
7558
 
b Fq(After)37 b(the)h(tr)-5 b(ansform,)41 b(the)d(pr)-5
 
7619
(call)g(the)150 980 y(follo)m(wing)g(routine:)390 1107
 
7620
y Fp(void)47 b(fftw_mpi_local_sizes\(ff)o(tw_m)o(pi_)o(plan)41
 
7621
b(p,)1631 1211 y(int)47 b(*local_n,)e(int)i(*local_start,)1631
 
7622
1314 y(int)g(*local_n_after_transform)o(,)1631 1418 y(int)g
 
7623
(*local_start_after_trans)o(for)o(m,)1631 1522 y(int)g
 
7624
(*total_local_size\);)275 1655 y(total_local_size)17
 
7625
b Fv(is)j(the)i(n)m(um)m(b)s(er)f(of)g Fp(fftw_complex)e
 
7626
Fv(elemen)m(ts)j(y)m(ou)g(should)d(actually)i(allo)s(cate)150
 
7627
1765 y(for)34 b Fp(local_data)e Fv(\(and)i Fp(work)p
 
7628
Fv(\).)52 b Fp(local_n)33 b Fv(and)h Fp(local_start)d
 
7629
Fv(indicate)i(that)i(the)g(curren)m(t)f(pro)s(cess)150
 
7630
1874 y(stores)23 b Fp(local_n)d Fv(elemen)m(ts)j(corresp)s(onding)e(to)
 
7631
i(the)g(indices)d Fp(local_start)g Fv(to)j Fp(local_start+local_)150
 
7632
1984 y(n-1)35 b Fv(in)f(the)i(\\real")g(arra)m(y)-8 b(.)58
 
7633
b Fr(After)37 b(the)h(tr)-5 b(ansform,)41 b(the)d(pr)-5
7559
7634
b(o)g(c)g(ess)40 b(may)e(stor)-5 b(e)39 b(a)f(di\013er)-5
7560
 
b(ent)38 b(p)-5 b(ortion)40 b(of)150 2356 y(the)f(arr)-5
7561
 
b(ay.)60 b Fu(The)36 b(p)s(ortion)f(of)i(the)g(data)g(stored)f(on)h
 
7635
b(ent)38 b(p)-5 b(ortion)40 b(of)150 2093 y(the)f(arr)-5
 
7636
b(ay.)60 b Fv(The)36 b(p)s(ortion)f(of)i(the)g(data)g(stored)f(on)h
7562
7637
(the)g(pro)s(cess)f(after)h(the)f(transform)g(is)g(giv)m(en)g(b)m(y)150
7563
 
2466 y Fo(local_n_after_transform)23 b Fu(and)29 b Fo
7564
 
(local_start_after_transfor)o(m)p Fu(.)34 b(This)28 b(data)j(is)d
7565
 
(exactly)j(the)150 2575 y(same)g(as)h(a)f(con)m(tiguous)g(segmen)m(t)h
 
7638
2203 y Fp(local_n_after_transform)23 b Fv(and)29 b Fp
 
7639
(local_start_after_transfor)o(m)p Fv(.)34 b(This)28 b(data)j(is)d
 
7640
(exactly)j(the)150 2312 y(same)g(as)h(a)f(con)m(tiguous)g(segmen)m(t)h
7566
7641
(of)f(the)h(corresp)s(onding)d(unipro)s(cessor)f(transform)j(output)f
7567
 
(\(i.e.)43 b(an)150 2685 y(in-order)29 b(sequence)i(of)f(sequen)m(tial)
7568
 
g(frequency)g(bins\).)275 2832 y(Note)35 b(that,)g(if)e(y)m(ou)h
 
7642
(\(i.e.)43 b(an)150 2422 y(in-order)29 b(sequence)i(of)f(sequen)m(tial)
 
7643
g(frequency)g(bins\).)275 2555 y(Note)35 b(that,)g(if)e(y)m(ou)h
7569
7644
(compute)h(b)s(oth)e(a)h(forw)m(ard)f(and)h(a)g(bac)m(kw)m(ard)g
7570
 
(transform)f(of)h(the)h(same)f(size,)150 2942 y(the)39
 
7645
(transform)f(of)h(the)h(same)f(size,)150 2665 y(the)39
7571
7646
b(lo)s(cal)f(sizes)h(are)g(guaran)m(teed)h(to)f(b)s(e)g(consisten)m(t.)
7572
7647
66 b(That)39 b(is,)h(the)f(lo)s(cal)f(size)h(after)g(the)g(forw)m(ard)
7573
 
150 3051 y(transform)28 b(will)f(b)s(e)h(the)h(same)g(as)h(the)f(lo)s
 
7648
150 2774 y(transform)28 b(will)f(b)s(e)h(the)h(same)g(as)h(the)f(lo)s
7574
7649
(cal)f(size)h(b)s(efore)f(the)h(bac)m(kw)m(ard)h(transform,)f(and)f
7575
 
(vice)h(v)m(ersa.)275 3199 y(Programs)c(using)f(the)h(FFTW)h(MPI)g
7576
 
(routines)e(should)f(b)s(e)i(link)m(ed)f(with)g Fo(-lfftw_mpi)j(-lfftw)
7577
 
i(-lm)150 3308 y Fu(on)h(Unix,)g(in)f(addition)f(to)j(whatev)m(er)h
7578
 
(libraries)27 b(are)k(required)d(for)j(MPI.)150 3558
7579
 
y Fi(4.2.6)63 b(MPI)41 b(Tips)275 3764 y Fu(There)27
 
7650
(vice)h(v)m(ersa.)275 2907 y(Programs)c(using)f(the)h(FFTW)h(MPI)g
 
7651
(routines)e(should)f(b)s(e)i(link)m(ed)f(with)g Fp(-lfftw_mpi)j(-lfftw)
 
7652
i(-lm)150 3017 y Fv(on)h(Unix,)g(in)f(addition)f(to)j(whatev)m(er)h
 
7653
(libraries)27 b(are)k(required)d(for)j(MPI.)150 3236
 
7654
y Fh(4.2.6)63 b(MPI)41 b(Tips)275 3427 y Fv(There)27
7580
7655
b(are)h(sev)m(eral)g(things)f(y)m(ou)h(should)e(consider)g(in)h(order)g
7581
7656
(to)h(get)h(the)f(b)s(est)g(p)s(erformance)f(out)h(of)150
7582
 
3874 y(the)j(MPI)f(FFTW)h(routines.)275 4021 y(First,)39
 
7657
3537 y(the)j(MPI)f(FFTW)h(routines.)275 3670 y(First,)39
7583
7658
b(if)f(p)s(ossible,)g(the)g(\014rst)g(and)g(second)g(dimensions)e(of)i
7584
7659
(y)m(our)g(data)h(should)e(b)s(e)h(divisible)c(b)m(y)150
7585
 
4131 y(the)43 b(n)m(um)m(b)s(er)f(of)h(pro)s(cesses)g(y)m(ou)g(are)g
 
7660
3779 y(the)43 b(n)m(um)m(b)s(er)f(of)h(pro)s(cesses)g(y)m(ou)g(are)g
7586
7661
(using.)77 b(\(If)43 b(only)f(one)i(can)f(b)s(e)f(divisible,)h(then)g
7587
 
(y)m(ou)g(should)150 4240 y(c)m(ho)s(ose)29 b(the)f(\014rst)f
 
7662
(y)m(ou)g(should)150 3889 y(c)m(ho)s(ose)29 b(the)f(\014rst)f
7588
7663
(dimension.\))37 b(This)26 b(allo)m(ws)h(the)h(computational)g(load)f
7589
 
(to)i(b)s(e)e(spread)g(ev)m(enly)g(among)150 4350 y(the)32
 
7664
(to)i(b)s(e)e(spread)g(ev)m(enly)g(among)150 3999 y(the)32
7590
7665
b(pro)s(cesses,)h(and)e(also)h(reduces)g(the)g(comm)m(unications)f
7591
7666
(complexit)m(y)h(and)f(o)m(v)m(erhead.)47 b(In)31 b(the)h(one-)150
7592
 
4459 y(dimensional)39 b(transform)h(case,)46 b(the)41
 
7667
4108 y(dimensional)39 b(transform)h(case,)46 b(the)41
7593
7668
b(size)g(of)h(the)g(transform)e(should)g(ideally)f(b)s(e)i(divisible)c
7594
 
(b)m(y)42 b(the)150 4569 y Fq(squar)-5 b(e)38 b Fu(of)30
7595
 
b(the)h(n)m(um)m(b)s(er)e(of)i(pro)s(cessors.)275 4716
 
7669
(b)m(y)42 b(the)150 4218 y Fr(squar)-5 b(e)38 b Fv(of)30
 
7670
b(the)h(n)m(um)m(b)s(er)e(of)i(pro)s(cessors.)275 4351
7596
7671
y(Second,)38 b(y)m(ou)f(should)e(consider)g(using)h(the)h
7597
 
Fo(FFTW_TRANSPOSED_ORDER)30 b Fu(output)37 b(format)g(if)f(it)g(is)150
7598
 
4826 y(not)26 b(to)s(o)g(burdensome.)37 b(The)25 b(sp)s(eed)g(gains)f
 
7672
Fp(FFTW_TRANSPOSED_ORDER)30 b Fv(output)37 b(format)g(if)f(it)g(is)150
 
7673
4460 y(not)26 b(to)s(o)g(burdensome.)37 b(The)25 b(sp)s(eed)g(gains)f
7599
7674
(from)h(comm)m(unications)g(sa)m(vings)g(are)h(usually)d(substan)m
7600
 
(tial.)275 4973 y(Third,)40 b(y)m(ou)h(should)d(consider)h(allo)s
7601
 
(cating)h(a)h(w)m(orkspace)g(for)f Fo(\(r\)fftw\(nd\)_mpi)p
7602
 
Fu(,)f(as)h(this)g(can)150 5083 y(often)31 b(\(but)f(not)g(alw)m(a)m
 
7675
(tial.)275 4593 y(Third,)40 b(y)m(ou)h(should)d(consider)h(allo)s
 
7676
(cating)h(a)h(w)m(orkspace)g(for)f Fp(\(r\)fftw\(nd\)_mpi)p
 
7677
Fv(,)f(as)h(this)g(can)150 4703 y(often)31 b(\(but)f(not)g(alw)m(a)m
7603
7678
(ys\))i(impro)m(v)m(e)e(p)s(erformance)g(\(at)h(the)g(cost)g(of)g
7604
 
(extra)g(storage\).)275 5230 y(F)-8 b(ourth,)50 b(y)m(ou)c(should)e
 
7679
(extra)g(storage\).)275 4836 y(F)-8 b(ourth,)50 b(y)m(ou)c(should)e
7605
7680
(exp)s(erimen)m(t)h(with)g(the)h(b)s(est)g(n)m(um)m(b)s(er)e(of)i(pro)s
7606
 
(cessors)g(to)h(use)e(for)h(y)m(our)150 5340 y(problem.)71
 
7681
(cessors)g(to)h(use)e(for)h(y)m(our)150 4945 y(problem.)71
7607
7682
b(\(There)41 b(comes)h(a)f(p)s(oin)m(t)f(of)i(diminishing)36
7608
 
b(returns,)42 b(when)e(the)i(comm)m(unications)e(costs)p
7609
 
eop
 
7683
b(returns,)42 b(when)e(the)i(comm)m(unications)e(costs)150
 
7684
5055 y(out)m(w)m(eigh)e(the)g(computational)f(b)s(ene\014ts.)1645
 
7685
5022 y Fo(3)1681 5055 y Fv(\))62 b(The)37 b Fp(fftw_mpi_test)d
 
7686
Fv(program)j(can)h(output)f(helpful)p 150 5149 1200 4
 
7687
v 199 5217 a Fo(3)275 5249 y Fj(An)c(FFT)h(is)h(particularly)f(hard)g
 
7688
(on)g(comm)n(unications)e(systems,)k(as)f(it)f(requires)g(an)g
 
7689
Fc(all-to-all)k Fj(comm)n(unication,)275 5340 y(whic)n(h)25
 
7690
b(is)h(more)g(or)g(less)g(the)g(w)n(orst)g(p)r(ossible)h(case.)p
 
7691
eop end
7610
7692
%%Page: 49 51
7611
 
49 50 bop 150 -116 a Fu(Chapter)30 b(4:)41 b(P)m(arallel)29
7612
 
b(FFTW)2435 b(49)150 299 y(out)m(w)m(eigh)38 b(the)g(computational)f(b)
7613
 
s(ene\014ts.)1645 266 y Fn(3)1681 299 y Fu(\))62 b(The)37
7614
 
b Fo(fftw_mpi_test)d Fu(program)j(can)h(output)f(helpful)150
7615
 
408 y(p)s(erformance)23 b(b)s(enc)m(hmarks.)37 b(It)24
7616
 
b(accepts)h(the)e(same)h(parameters)g(as)g(the)g(unipro)s(cessor)d
7617
 
(test)j(programs)150 518 y(\(c.f.)53 b Fo(tests/README)p
7618
 
Fu(\))31 b(and)i(is)g(run)g(lik)m(e)g(an)h(ordinary)f(MPI)h(program.)51
7619
 
b(F)-8 b(or)35 b(example,)g Fo(mpirun)29 b(-np)150 628
7620
 
y(4)h(fftw_mpi_test)d(-s)j(128x128x128)g Fu(will)h(b)s(enc)m(hmark)h(a)
7621
 
i Fo(128x128x128)c Fu(transform)j(on)g(four)g(pro-)150
7622
 
737 y(cessors,)28 b(rep)s(orting)d(timings)g(and)g(parallel)g(sp)s
7623
 
(eedups)f(for)j(all)e(v)-5 b(arian)m(ts)26 b(of)h Fo(fftwnd_mpi)c
7624
 
Fu(\(transp)s(osed,)150 847 y(with)34 b(w)m(orkspace,)k(etcetera\).)60
7625
 
b(\(Note)37 b(also)e(that)i(there)f(is)e(the)i Fo(rfftw_mpi_test)c
7626
 
Fu(program)j(for)h(the)150 956 y(real)30 b(transforms.\))p
7627
 
150 5131 1200 4 v 192 5197 a Fn(3)275 5230 y Fu(An)42
7628
 
b(FFT)h(is)f(particularly)e(hard)i(on)h(comm)m(unications)f(systems,)k
7629
 
(as)d(it)g(requires)e(an)i Fp(all-to-all)275 5340 y Fu(comm)m
7630
 
(unication,)30 b(whic)m(h)f(is)g(more)i(or)f(less)g(the)g(w)m(orst)h(p)
7631
 
s(ossible)d(case.)p eop
 
7693
TeXDict begin 49 50 bop 150 -116 a Fv(Chapter)30 b(4:)41
 
7694
b(P)m(arallel)29 b(FFTW)2435 b(49)150 299 y(p)s(erformance)23
 
7695
b(b)s(enc)m(hmarks.)37 b(It)24 b(accepts)h(the)e(same)h(parameters)g
 
7696
(as)g(the)g(unipro)s(cessor)d(test)j(programs)150 408
 
7697
y(\(c.f.)53 b Fp(tests/README)p Fv(\))31 b(and)i(is)g(run)g(lik)m(e)g
 
7698
(an)h(ordinary)f(MPI)h(program.)51 b(F)-8 b(or)35 b(example,)g
 
7699
Fp(mpirun)29 b(-np)150 518 y(4)h(fftw_mpi_test)d(-s)j(128x128x128)g
 
7700
Fv(will)h(b)s(enc)m(hmark)h(a)i Fp(128x128x128)c Fv(transform)j(on)g
 
7701
(four)g(pro-)150 628 y(cessors,)28 b(rep)s(orting)d(timings)g(and)g
 
7702
(parallel)g(sp)s(eedups)f(for)j(all)e(v)-5 b(arian)m(ts)26
 
7703
b(of)h Fp(fftwnd_mpi)c Fv(\(transp)s(osed,)150 737 y(with)34
 
7704
b(w)m(orkspace,)k(etcetera\).)60 b(\(Note)37 b(also)e(that)i(there)f
 
7705
(is)e(the)i Fp(rfftw_mpi_test)c Fv(program)j(for)h(the)150
 
7706
847 y(real)30 b(transforms.\))p eop end
7632
7707
%%Page: 50 52
7633
 
50 51 bop 150 -116 a Fu(50)3232 b(FFTW)p eop
 
7708
TeXDict begin 50 51 bop 150 -116 a Fv(50)3232 b(FFTW)p
 
7709
eop end
7634
7710
%%Page: 51 53
7635
 
51 52 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Calling)28
7636
 
b(FFTW)j(from)f(F)-8 b(ortran)1909 b(51)150 299 y Fr(5)80
7637
 
b(Calling)56 b(FFTW)f(from)e(F)-13 b(ortran)275 528 y
7638
 
Fu(The)27 b(standard)g(FFTW)h(libraries)d(include)g(sp)s(ecial)h(wrapp)
7639
 
s(er)g(functions)g(that)j(allo)m(w)e(F)-8 b(ortran)28
7640
 
b(pro-)150 638 y(grams)44 b(to)h(call)f(FFTW)h(subroutines.)79
 
7711
TeXDict begin 51 52 bop 150 -116 a Fv(Chapter)30 b(5:)41
 
7712
b(Calling)28 b(FFTW)j(from)f(F)-8 b(ortran)1909 b(51)150
 
7713
299 y Fs(5)80 b(Calling)56 b(FFTW)f(from)e(F)-13 b(ortran)275
 
7714
503 y Fv(The)27 b(standard)g(FFTW)h(libraries)d(include)g(sp)s(ecial)h
 
7715
(wrapp)s(er)g(functions)g(that)j(allo)m(w)e(F)-8 b(ortran)28
 
7716
b(pro-)150 612 y(grams)44 b(to)h(call)f(FFTW)h(subroutines.)79
7641
7717
b(This)43 b(c)m(hapter)i(describ)s(es)d(ho)m(w)i(those)h(functions)e
7642
 
(ma)m(y)i(b)s(e)150 747 y(emplo)m(y)m(ed)32 b(to)h(use)e(FFTW)i(from)e
 
7718
(ma)m(y)i(b)s(e)150 722 y(emplo)m(y)m(ed)32 b(to)h(use)e(FFTW)i(from)e
7643
7719
(F)-8 b(ortran.)46 b(W)-8 b(e)33 b(assume)f(here)g(that)g(the)g(reader)
7644
 
g(is)f(already)g(familiar)150 857 y(with)e(the)i(usage)g(of)f(FFTW)h
 
7720
g(is)f(already)g(familiar)150 832 y(with)e(the)i(usage)g(of)f(FFTW)h
7645
7721
(in)e(C,)i(as)f(describ)s(ed)e(elsewhere)i(in)f(this)h(man)m(ual.)275
7646
 
991 y(In)h(general,)i(it)e(is)g(not)i(p)s(ossible)c(to)k(call)f(C)f
 
7722
960 y(In)h(general,)i(it)e(is)g(not)i(p)s(ossible)c(to)k(call)f(C)f
7647
7723
(functions)g(directly)g(from)g(F)-8 b(ortran,)34 b(due)d(to)i(F)-8
7648
 
b(ortran's)150 1100 y(inabilit)m(y)33 b(to)k(pass)f(argumen)m(ts)h(b)m
 
7724
b(ortran's)150 1070 y(inabilit)m(y)33 b(to)k(pass)f(argumen)m(ts)h(b)m
7649
7725
(y)f(v)-5 b(alue)35 b(and)h(also)g(b)s(ecause)g(F)-8
7650
7726
b(ortran)37 b(compilers)d(t)m(ypically)h(exp)s(ect)150
7651
 
1210 y(iden)m(ti\014ers)i(to)i(b)s(e)g(mangled)f(someho)m(w)h(for)g
 
7727
1179 y(iden)m(ti\014ers)i(to)i(b)s(e)g(mangled)f(someho)m(w)h(for)g
7652
7728
(linking.)63 b(Ho)m(w)m(ev)m(er,)43 b(if)38 b(C)g(functions)g(are)h
7653
 
(written)f(in)g(a)150 1319 y(sp)s(ecial)28 b(w)m(a)m(y)-8
7654
 
b(,)31 b(they)e Fq(ar)-5 b(e)37 b Fu(callable)28 b(from)h(F)-8
 
7729
(written)f(in)g(a)150 1289 y(sp)s(ecial)28 b(w)m(a)m(y)-8
 
7730
b(,)31 b(they)e Fr(ar)-5 b(e)37 b Fv(callable)28 b(from)h(F)-8
7655
7731
b(ortran,)30 b(and)e(w)m(e)i(ha)m(v)m(e)g(emplo)m(y)m(ed)g(this)e(tec)m
7656
 
(hnique)h(to)g(create)150 1429 y(F)-8 b(ortran-callable)42
 
7732
(hnique)h(to)g(create)150 1398 y(F)-8 b(ortran-callable)42
7657
7733
b(\\wrapp)s(er")f(functions)g(around)g(the)h(main)f(FFTW)h(routines.)75
7658
 
b(These)42 b(wrapp)s(er)150 1538 y(functions)36 b(are)j(included)c(in)h
 
7734
b(These)42 b(wrapp)s(er)150 1508 y(functions)36 b(are)j(included)c(in)h
7659
7735
(the)j(FFTW)f(libraries)d(b)m(y)j(default,)h(unless)d(a)j(F)-8
7660
 
b(ortran)38 b(compiler)f(isn't)150 1648 y(found)29 b(on)h(y)m(our)h
7661
 
(system)f(or)h Fo(--disable-fortran)25 b Fu(is)30 b(included)d(in)i
7662
 
(the)i Fo(configure)d Fu(\015ags.)275 1782 y(As)34 b(a)h(result,)f
 
7736
b(ortran)38 b(compiler)f(isn't)150 1618 y(found)29 b(on)h(y)m(our)h
 
7737
(system)f(or)h Fp(--disable-fortran)25 b Fv(is)30 b(included)d(in)i
 
7738
(the)i Fp(configure)d Fv(\015ags.)275 1746 y(As)34 b(a)h(result,)f
7663
7739
(calling)f(FFTW)i(from)f(F)-8 b(ortran)35 b(requires)e(little)g(more)h
7664
 
(than)h(app)s(ending)c(`)p Fo(_f77)p Fu(')j(to)150 1891
 
7740
(than)h(app)s(ending)c(`)p Fp(_f77)p Fv(')j(to)150 1856
7665
7741
y(the)g(function)f(names)i(and)e(then)h(linking)e(normally)g(with)h
7666
7742
(the)i(FFTW)g(libraries.)49 b(There)34 b(are)h(a)f(few)150
7667
 
2001 y(wrinkles,)28 b(ho)m(w)m(ev)m(er,)k(as)f(w)m(e)g(shall)d(discuss)
7668
 
h(b)s(elo)m(w.)150 2255 y Ft(5.1)68 b(W)-11 b(rapp)t(er)44
7669
 
b(Routines)275 2447 y Fu(All)g(of)j(the)f(unipro)s(cessor)e(and)h(m)m
 
7743
1965 y(wrinkles,)28 b(ho)m(w)m(ev)m(er,)k(as)f(w)m(e)g(shall)d(discuss)
 
7744
h(b)s(elo)m(w.)150 2205 y Fu(5.1)68 b(W)-11 b(rapp)t(er)44
 
7745
b(Routines)275 2391 y Fv(All)g(of)j(the)f(unipro)s(cessor)e(and)h(m)m
7670
7746
(ulti-threaded)g(transform)h(routines)f(ha)m(v)m(e)i(F)-8
7671
 
b(ortran-callable)150 2556 y(wrapp)s(ers,)38 b(except)h(for)f(the)h
 
7747
b(ortran-callable)150 2501 y(wrapp)s(ers,)38 b(except)h(for)f(the)h
7672
7748
(wisdom)d(imp)s(ort/exp)s(ort)h(functions)g(\(since)h(it)f(is)g(not)i
7673
 
(p)s(ossible)c(to)k(ex-)150 2666 y(c)m(hange)c(string)d(and)h(\014le)f
 
7749
(p)s(ossible)c(to)k(ex-)150 2610 y(c)m(hange)c(string)d(and)h(\014le)f
7674
7750
(argumen)m(ts)i(p)s(ortably)e(with)g(F)-8 b(ortran\))35
7675
7751
b(and)e(the)g(sp)s(eci\014c)f(planner)g(routines)150
7676
 
2776 y(\(see)25 b(Section)g(3.2.2)h([Discussion)d(on)h(Sp)s(eci\014c)f
 
7752
2720 y(\(see)25 b(Section)g(3.2.2)h([Discussion)d(on)h(Sp)s(eci\014c)f
7677
7753
(Plans],)i(page)h(20\).)39 b(The)24 b(name)h(of)g(the)f(wrapp)s(er)f
7678
 
(routine)150 2885 y(is)k(the)h(same)g(as)g(that)h(of)e(the)h(corresp)s
7679
 
(onding)e(C)i(routine,)f(but)g(with)g Fo(fftw/fftwnd/rfftw/rfftwn)o(d)
7680
 
150 2995 y Fu(replaced)g(b)m(y)g Fo(fftw_f77/fftwnd_f77/rff)o(tw_)o
7681
 
(f77/)o(rfft)o(wnd)o(_f77)o Fu(.)34 b(F)-8 b(or)28 b(example,)f(in)f(F)
7682
 
-8 b(ortran,)29 b(in-)150 3104 y(stead)41 b(of)f(calling)f
7683
 
Fo(fftw_one)e Fu(y)m(ou)k(w)m(ould)e(call)g Fo(fftw_f77_one)p
7684
 
Fu(.)2464 3071 y Fn(1)2568 3104 y Fu(F)-8 b(or)41 b(the)f(most)h(part,)
7685
 
h(all)d(of)i(the)150 3214 y(argumen)m(ts)31 b(to)g(the)f(functions)f
 
7754
(routine)150 2829 y(is)k(the)h(same)g(as)g(that)h(of)e(the)h(corresp)s
 
7755
(onding)e(C)i(routine,)f(but)g(with)g Fp(fftw/fftwnd/rfftw/rfftwn)o(d)
 
7756
150 2939 y Fv(replaced)g(b)m(y)g Fp(fftw_f77/fftwnd_f77/rff)o(tw_)o
 
7757
(f77/)o(rfft)o(wnd)o(_f77)o Fv(.)34 b(F)-8 b(or)28 b(example,)f(in)f(F)
 
7758
-8 b(ortran,)29 b(in-)150 3049 y(stead)41 b(of)f(calling)f
 
7759
Fp(fftw_one)e Fv(y)m(ou)k(w)m(ould)e(call)g Fp(fftw_f77_one)p
 
7760
Fv(.)2464 3016 y Fo(1)2568 3049 y Fv(F)-8 b(or)41 b(the)f(most)h(part,)
 
7761
h(all)d(of)i(the)150 3158 y(argumen)m(ts)31 b(to)g(the)f(functions)f
7686
7762
(are)i(the)g(same,)g(with)e(the)h(follo)m(wing)f(exceptions:)225
7687
 
3348 y Fs(\017)60 b Fo(plan)22 b Fu(v)-5 b(ariables)23
7688
 
b(\(what)g(w)m(ould)g(b)s(e)g(of)g(t)m(yp)s(e)h Fo(fftw_plan)p
7689
 
Fu(,)f Fo(rfftwnd_plan)p Fu(,)f(etcetera,)27 b(in)22
7690
 
b(C\),)i(m)m(ust)330 3457 y(b)s(e)37 b(declared)h(as)g(a)g(t)m(yp)s(e)g
 
7763
3287 y Ft(\017)60 b Fp(plan)22 b Fv(v)-5 b(ariables)23
 
7764
b(\(what)g(w)m(ould)g(b)s(e)g(of)g(t)m(yp)s(e)h Fp(fftw_plan)p
 
7765
Fv(,)f Fp(rfftwnd_plan)p Fv(,)f(etcetera,)27 b(in)22
 
7766
b(C\),)i(m)m(ust)330 3396 y(b)s(e)37 b(declared)h(as)g(a)g(t)m(yp)s(e)g
7691
7767
(that)g(is)f(the)h(same)h(size)e(as)i(a)f(p)s(oin)m(ter)f(\(address\))g
7692
 
(on)h(y)m(our)g(mac)m(hine.)330 3567 y(\(F)-8 b(ortran)33
 
7768
(on)h(y)m(our)g(mac)m(hine.)330 3506 y(\(F)-8 b(ortran)33
7693
7769
b(has)f(no)g(generic)g(p)s(oin)m(ter)f(t)m(yp)s(e.\))47
7694
 
b(The)32 b(F)-8 b(ortran)33 b Fo(integer)d Fu(t)m(yp)s(e)i(is)f
7695
 
(usually)f(the)j(same)330 3676 y(size)c(as)g(a)h(p)s(oin)m(ter,)f(but)f
 
7770
b(The)32 b(F)-8 b(ortran)33 b Fp(integer)d Fv(t)m(yp)s(e)i(is)f
 
7771
(usually)f(the)j(same)330 3615 y(size)c(as)g(a)h(p)s(oin)m(ter,)f(but)f
7696
7772
(y)m(ou)i(need)f(to)h(b)s(e)e(w)m(ary)h(\(esp)s(ecially)f(on)h(64-bit)h
7697
 
(mac)m(hines\).)40 b(\(Y)-8 b(ou)30 b(could)330 3786
7698
 
y(also)36 b(use)f Fo(integer*4)f Fu(on)i(a)g(32-bit)g(mac)m(hine)g(and)
7699
 
f Fo(integer*8)e Fu(on)j(a)g(64-bit)g(mac)m(hine.\))58
7700
 
b(Ugh.)330 3896 y(\()p Fo(g77)38 b Fu(has)g(a)h(sp)s(ecial)e(t)m(yp)s
7701
 
(e,)k Fo(integer\(kind=7\))p Fu(,)c(that)i(is)e(de\014ned)h(to)h(b)s(e)
7702
 
f(the)h(same)f(size)h(as)g(a)330 4005 y(p)s(oin)m(ter.\))225
7703
 
4139 y Fs(\017)60 b Fu(An)m(y)26 b(function)e(that)i(returns)e(a)i(v)-5
7704
 
b(alue)25 b(\(e.g.)40 b Fo(fftw_create_plan)p Fu(\))22
7705
 
b(is)i(con)m(v)m(erted)j(in)m(to)e(a)h(subrou-)330 4248
 
7773
(mac)m(hines\).)40 b(\(Y)-8 b(ou)30 b(could)330 3725
 
7774
y(also)36 b(use)f Fp(integer*4)f Fv(on)i(a)g(32-bit)g(mac)m(hine)g(and)
 
7775
f Fp(integer*8)e Fv(on)j(a)g(64-bit)g(mac)m(hine.\))58
 
7776
b(Ugh.)330 3835 y(\()p Fp(g77)38 b Fv(has)g(a)h(sp)s(ecial)e(t)m(yp)s
 
7777
(e,)k Fp(integer\(kind=7\))p Fv(,)c(that)i(is)e(de\014ned)h(to)h(b)s(e)
 
7778
f(the)h(same)f(size)h(as)g(a)330 3944 y(p)s(oin)m(ter.\))225
 
7779
4073 y Ft(\017)60 b Fv(An)m(y)26 b(function)e(that)i(returns)e(a)i(v)-5
 
7780
b(alue)25 b(\(e.g.)40 b Fp(fftw_create_plan)p Fv(\))22
 
7781
b(is)i(con)m(v)m(erted)j(in)m(to)e(a)h(subrou-)330 4182
7706
7782
y(tine.)40 b(The)28 b(return)g(v)-5 b(alue)28 b(is)g(con)m(v)m(erted)i
7707
7783
(in)m(to)f(an)f(additional)f(\(\014rst\))i(parameter)g(of)g(the)g
7708
 
(wrapp)s(er)330 4358 y(subroutine.)53 b(\(The)35 b(reason)h(for)f(this)
 
7784
(wrapp)s(er)330 4292 y(subroutine.)53 b(\(The)35 b(reason)h(for)f(this)
7709
7785
f(is)g(that)i(some)g(F)-8 b(ortran)35 b(implemen)m(tations)f(seem)i(to)
7710
 
g(ha)m(v)m(e)330 4467 y(trouble)29 b(with)g(C)h(function)f(return)h(v)
7711
 
-5 b(alues.\))225 4601 y Fs(\017)60 b Fu(When)29 b(p)s(erforming)e
7712
 
(one-dimensional)h Fo(FFTW_IN_PLACE)d Fu(transforms,)k(y)m(ou)h(don't)g
7713
 
(ha)m(v)m(e)g(the)g(op-)330 4711 y(tion)36 b(of)i(passing)d
7714
 
Fo(NULL)h Fu(for)h(the)g Fo(out)f Fu(argumen)m(t)i(\(since)e(there)h
7715
 
(is)f(no)h(w)m(a)m(y)h(to)g(pass)f Fo(NULL)e Fu(from)330
7716
 
4820 y(F)-8 b(ortran\).)69 b(Therefore,)42 b(when)c(p)s(erforming)g
7717
 
(suc)m(h)h(transforms,)i(y)m(ou)f Fq(must)48 b Fu(allo)s(cate)40
7718
 
b(and)f(pass)330 4930 y(a)e(con)m(tiguous)f(scratc)m(h)i(arra)m(y)f(of)
 
7786
g(ha)m(v)m(e)330 4401 y(trouble)29 b(with)g(C)h(function)f(return)h(v)
 
7787
-5 b(alues.\))225 4530 y Ft(\017)60 b Fv(When)29 b(p)s(erforming)e
 
7788
(one-dimensional)h Fp(FFTW_IN_PLACE)d Fv(transforms,)k(y)m(ou)h(don't)g
 
7789
(ha)m(v)m(e)g(the)g(op-)330 4639 y(tion)36 b(of)i(passing)d
 
7790
Fp(NULL)h Fv(for)h(the)g Fp(out)f Fv(argumen)m(t)i(\(since)e(there)h
 
7791
(is)f(no)h(w)m(a)m(y)h(to)g(pass)f Fp(NULL)e Fv(from)330
 
7792
4749 y(F)-8 b(ortran\).)69 b(Therefore,)42 b(when)c(p)s(erforming)g
 
7793
(suc)m(h)h(transforms,)i(y)m(ou)f Fr(must)48 b Fv(allo)s(cate)40
 
7794
b(and)f(pass)330 4859 y(a)e(con)m(tiguous)f(scratc)m(h)i(arra)m(y)f(of)
7719
7795
f(the)h(same)g(size)f(as)h(the)g(transform.)58 b(Note)38
7720
 
b(that)f(for)f(in-place)p 150 5022 1200 4 v 192 5088
7721
 
a Fn(1)275 5121 y Fu(T)-8 b(ec)m(hnically)g(,)34 b(F)-8
7722
 
b(ortran)35 b(77)g(iden)m(ti\014ers)d(are)i(not)g(allo)m(w)m(ed)g(to)h
7723
 
(ha)m(v)m(e)g(more)g(than)e(6)i(c)m(haracters,)h(nor)275
7724
 
5230 y(ma)m(y)23 b(they)f(con)m(tain)h(underscores.)37
7725
 
b(An)m(y)23 b(compiler)e(that)i(enforces)g(this)e(limitation)f(do)s
7726
 
(esn't)i(deserv)m(e)275 5340 y(to)31 b(link)d(to)j(FFTW.)p
7727
 
eop
 
7796
b(that)f(for)f(in-place)330 4968 y(m)m(ulti-dimensional)d(\()p
 
7797
Fp(\(r\)fftwnd)p Fv(\))j(transforms,)j(the)e Fp(out)g
 
7798
Fv(argumen)m(t)g(is)g(ignored,)h(so)g(y)m(ou)g(can)330
 
7799
5078 y(pass)30 b(an)m(ything)g(for)g(that)h(parameter.)p
 
7800
150 5149 1200 4 v 199 5217 a Fo(1)275 5249 y Fj(T)-6
 
7801
b(ec)n(hnically)g(,)24 b(F)-6 b(ortran)24 b(77)h(iden)n(ti\014ers)e
 
7802
(are)i(not)e(allo)n(w)n(ed)j(to)e(ha)n(v)n(e)f(more)g(than)h(6)g(c)n
 
7803
(haracters,)h(nor)f(ma)n(y)f(they)g(con)n(tain)275 5340
 
7804
y(underscores.)34 b(An)n(y)25 b(compiler)g(that)h(enforces)h(this)e
 
7805
(limitation)i(do)r(esn't)f(deserv)n(e)f(to)h(link)f(to)h(FFTW.)p
 
7806
eop end
7728
7807
%%Page: 52 54
7729
 
52 53 bop 150 -116 a Fu(52)3232 b(FFTW)330 299 y(m)m(ulti-dimensional)
7730
 
33 b(\()p Fo(\(r\)fftwnd)p Fu(\))j(transforms,)j(the)e
7731
 
Fo(out)g Fu(argumen)m(t)g(is)g(ignored,)h(so)g(y)m(ou)g(can)330
7732
 
408 y(pass)30 b(an)m(ything)g(for)g(that)h(parameter.)225
7733
 
543 y Fs(\017)60 b Fu(The)37 b(wrapp)s(er)e(routines)h(exp)s(ect)i(m)m
 
7808
TeXDict begin 52 53 bop 150 -116 a Fv(52)3232 b(FFTW)225
 
7809
299 y Ft(\017)60 b Fv(The)37 b(wrapp)s(er)e(routines)h(exp)s(ect)i(m)m
7734
7810
(ulti-dimensional)33 b(arra)m(ys)k(to)h(b)s(e)f(in)f(column-ma)5
7735
 
b(jor)36 b(order,)330 652 y(whic)m(h)c(is)g(the)i(ordinary)d(format)j
 
7811
b(jor)36 b(order,)330 408 y(whic)m(h)c(is)g(the)i(ordinary)d(format)j
7736
7812
(of)f(F)-8 b(ortran)34 b(arra)m(ys.)50 b(They)32 b(do)h(this)g
7737
 
(transparen)m(tly)f(and)h(cost-)330 762 y(lessly)f(simply)g(b)m(y)h
 
7813
(transparen)m(tly)f(and)h(cost-)330 518 y(lessly)f(simply)g(b)m(y)h
7738
7814
(rev)m(ersing)h(the)g(order)f(of)h(the)g(dimensions)d(passed)i(to)i
7739
 
(FFTW,)f(but)f(this)g(has)330 872 y(one)38 b(imp)s(ortan)m(t)f
 
7815
(FFTW,)f(but)f(this)g(has)330 628 y(one)38 b(imp)s(ortan)m(t)f
7740
7816
(consequence)i(for)e(m)m(ulti-dimensional)d(real-complex)k(transforms,)
7741
 
h(discussed)330 981 y(b)s(elo)m(w.)275 1165 y(In)32 b(general,)h(y)m
7742
 
(ou)h(should)d(tak)m(e)j(care)g(to)g(use)e(F)-8 b(ortran)34
 
7817
h(discussed)330 737 y(b)s(elo)m(w.)275 923 y(In)32 b(general,)h(y)m(ou)
 
7818
h(should)d(tak)m(e)j(care)g(to)g(use)e(F)-8 b(ortran)34
7743
7819
b(data)f(t)m(yp)s(es)g(that)h(corresp)s(ond)d(to)j(\(i.e.)49
7744
 
b(are)150 1275 y(the)27 b(same)h(size)f(as\))g(the)h(C)e(t)m(yp)s(es)h
 
7820
b(are)150 1033 y(the)27 b(same)h(size)f(as\))g(the)h(C)e(t)m(yp)s(es)h
7745
7821
(used)g(b)m(y)g(FFTW.)h(If)e(y)m(our)h(C)g(and)f(F)-8
7746
 
b(ortran)28 b(compilers)d(are)j(made)f(b)m(y)150 1385
 
7822
b(ortran)28 b(compilers)d(are)j(made)f(b)m(y)150 1142
7747
7823
y(the)33 b(same)h(v)m(endor,)g(the)f(corresp)s(ondence)f(is)h(usually)d
7748
 
(straigh)m(tforw)m(ard)j(\(i.e.)49 b Fo(integer)31 b
7749
 
Fu(corresp)s(onds)150 1494 y(to)38 b Fo(int)p Fu(,)g
7750
 
Fo(real)e Fu(corresp)s(onds)g(to)h Fo(float)p Fu(,)h(etcetera\).)63
 
7824
(straigh)m(tforw)m(ard)j(\(i.e.)49 b Fp(integer)31 b
 
7825
Fv(corresp)s(onds)150 1252 y(to)38 b Fp(int)p Fv(,)g
 
7826
Fp(real)e Fv(corresp)s(onds)g(to)h Fp(float)p Fv(,)h(etcetera\).)63
7751
7827
b(Suc)m(h)37 b(simple)e(corresp)s(ondences)h(are)i(assumed)150
7752
 
1604 y(in)h(the)h(examples)g(b)s(elo)m(w.)68 b(The)40
 
7828
1362 y(in)h(the)h(examples)g(b)s(elo)m(w.)68 b(The)40
7753
7829
b(examples)g(also)g(assume)f(that)i(FFTW)g(w)m(as)f(compiled)f(in)f
7754
 
(double)150 1713 y(precision)29 b(\(the)h(default\).)150
7755
 
1971 y Ft(5.2)68 b(FFTW)43 b(Constan)l(ts)j(in)f(F)-11
7756
 
b(ortran)275 2163 y Fu(When)44 b(creating)h(plans)e(in)h(FFTW,)h(a)g(n)
 
7830
(double)150 1471 y(precision)29 b(\(the)h(default\).)150
 
7831
1731 y Fu(5.2)68 b(FFTW)43 b(Constan)l(ts)j(in)f(F)-11
 
7832
b(ortran)275 1924 y Fv(When)44 b(creating)h(plans)e(in)h(FFTW,)h(a)g(n)
7757
7833
m(um)m(b)s(er)f(of)h(constan)m(ts)h(are)f(used)f(to)h(sp)s(ecify)e
7758
 
(options,)150 2273 y(suc)m(h)36 b(as)g Fo(FFTW_FORWARD)d
7759
 
Fu(or)j Fo(FFTW_USE_WISDOM)p Fu(.)54 b(The)35 b(same)i(constan)m(ts)g
7760
 
(m)m(ust)f(b)s(e)g(used)f(with)g(the)150 2382 y(wrapp)s(er)28
 
7834
(options,)150 2034 y(suc)m(h)36 b(as)g Fp(FFTW_FORWARD)d
 
7835
Fv(or)j Fp(FFTW_USE_WISDOM)p Fv(.)54 b(The)35 b(same)i(constan)m(ts)g
 
7836
(m)m(ust)f(b)s(e)g(used)f(with)g(the)150 2143 y(wrapp)s(er)28
7761
7837
b(routines,)g(but)h(of)g(course)h(the)f(C)g(header)g(\014les)g(where)g
7762
7838
(the)g(constan)m(ts)i(are)e(de\014ned)f(can't)j(b)s(e)150
7763
 
2492 y(incorp)s(orated)e(directly)g(in)m(to)i(F)-8 b(ortran)31
7764
 
b(co)s(de.)275 2626 y(Instead,)c(w)m(e)g(ha)m(v)m(e)h(placed)e(F)-8
 
7839
2253 y(incorp)s(orated)e(directly)g(in)m(to)i(F)-8 b(ortran)31
 
7840
b(co)s(de.)275 2388 y(Instead,)c(w)m(e)g(ha)m(v)m(e)h(placed)e(F)-8
7765
7841
b(ortran)27 b(equiv)-5 b(alen)m(ts)26 b(of)h(the)g(FFTW)g(constan)m(t)h
7766
 
(de\014nitions)c(in)h(the)i(\014le)150 2736 y Fo(fortran/fftw_f77.i)h
7767
 
Fu(of)33 b(the)h(FFTW)f(pac)m(k)-5 b(age.)51 b(If)33
 
7842
(de\014nitions)c(in)h(the)i(\014le)150 2498 y Fp(fortran/fftw_f77.i)h
 
7843
Fv(of)33 b(the)h(FFTW)f(pac)m(k)-5 b(age.)51 b(If)33
7768
7844
b(y)m(our)g(F)-8 b(ortran)33 b(compiler)f(supp)s(orts)f(a)j(prepro-)150
7769
 
2845 y(cessor,)i(y)m(ou)f(can)g(use)g(that)g(to)g(incorp)s(orate)f
 
7845
2607 y(cessor,)i(y)m(ou)f(can)g(use)g(that)g(to)g(incorp)s(orate)f
7770
7846
(this)g(\014le)f(in)m(to)i(y)m(our)g(co)s(de)f(whenev)m(er)h(y)m(ou)g
7771
 
(need)f(to)i(call)150 2955 y(FFTW.)31 b(Otherwise,)f(y)m(ou)g(will)e
 
7847
(need)f(to)i(call)150 2717 y(FFTW.)31 b(Otherwise,)f(y)m(ou)g(will)e
7772
7848
(ha)m(v)m(e)k(to)f(paste)g(the)f(constan)m(t)i(de\014nitions)c(in)h
7773
 
(directly)-8 b(.)40 b(They)30 b(are:)676 3084 y Fo(integer)46
7774
 
b(FFTW_FORWARD,FFTW_BACKWAR)o(D)676 3187 y(parameter)g
7775
 
(\(FFTW_FORWARD=-1,FFTW_B)o(ACKW)o(ARD)o(=1\))676 3395
 
7849
(directly)-8 b(.)40 b(They)30 b(are:)676 2846 y Fp(integer)46
 
7850
b(FFTW_FORWARD,FFTW_BACKWAR)o(D)676 2950 y(parameter)g
 
7851
(\(FFTW_FORWARD=-1,FFTW_B)o(ACKW)o(ARD)o(=1\))676 3158
7776
7852
y(integer)g(FFTW_REAL_TO_COMPLEX,FFTW)o(_COM)o(PLE)o(X_TO)o(_REA)o(L)
7777
 
676 3499 y(parameter)g(\(FFTW_REAL_TO_COMPLEX=-)o(1,FF)o(TW_)o(COMP)o
7778
 
(LEX_)o(TO_)o(REAL)o(=1\))676 3706 y(integer)g
7779
 
(FFTW_ESTIMATE,FFTW_MEASUR)o(E)676 3810 y(parameter)g
7780
 
(\(FFTW_ESTIMATE=0,FFTW_M)o(EASU)o(RE=)o(1\))676 4018
 
7853
676 3262 y(parameter)g(\(FFTW_REAL_TO_COMPLEX=-)o(1,FF)o(TW_)o(COMP)o
 
7854
(LEX_)o(TO_)o(REAL)o(=1\))676 3469 y(integer)g
 
7855
(FFTW_ESTIMATE,FFTW_MEASUR)o(E)676 3573 y(parameter)g
 
7856
(\(FFTW_ESTIMATE=0,FFTW_M)o(EASU)o(RE=)o(1\))676 3780
7781
7857
y(integer)g(FFTW_OUT_OF_PLACE,FFTW_IN)o(_PLA)o(CE,)o(FFTW)o(_USE)o(_WI)
7782
 
o(SDOM)676 4121 y(parameter)g(\(FFTW_OUT_OF_PLACE=0\))676
7783
 
4225 y(parameter)g(\(FFTW_IN_PLACE=8,FFTW_U)o(SE_W)o(ISD)o(OM=1)o(6\))
7784
 
676 4433 y(integer)g(FFTW_THREADSAFE)676 4537 y(parameter)g
7785
 
(\(FFTW_THREADSAFE=128\))275 4671 y Fu(In)31 b(C,)h(y)m(ou)g(com)m
7786
 
(bine)g(di\013eren)m(t)g(\015ags)g(\(lik)m(e)g Fo(FFTW_USE_WISDOM)c
7787
 
Fu(and)j Fo(FFTW_MEASURE)p Fu(\))e(using)i(the)150 4781
7788
 
y(`)p Fo(|)p Fu(')g(op)s(erator;)f(in)g(F)-8 b(ortran)31
7789
 
b(y)m(ou)f(should)f(just)g(use)i(`)p Fo(+)p Fu('.)150
7790
 
5038 y Ft(5.3)68 b(F)-11 b(ortran)45 b(Examples)275 5230
7791
 
y Fu(In)20 b(C)h(y)m(ou)h(migh)m(t)g(ha)m(v)m(e)g(something)f(lik)m(e)g
 
7858
o(SDOM)676 3884 y(parameter)g(\(FFTW_OUT_OF_PLACE=0\))676
 
7859
3988 y(parameter)g(\(FFTW_IN_PLACE=8,FFTW_U)o(SE_W)o(ISD)o(OM=1)o(6\))
 
7860
676 4196 y(integer)g(FFTW_THREADSAFE)676 4299 y(parameter)g
 
7861
(\(FFTW_THREADSAFE=128\))275 4435 y Fv(In)31 b(C,)h(y)m(ou)g(com)m
 
7862
(bine)g(di\013eren)m(t)g(\015ags)g(\(lik)m(e)g Fp(FFTW_USE_WISDOM)c
 
7863
Fv(and)j Fp(FFTW_MEASURE)p Fv(\))e(using)i(the)150 4544
 
7864
y(`)p Fp(|)p Fv(')g(op)s(erator;)f(in)g(F)-8 b(ortran)31
 
7865
b(y)m(ou)f(should)f(just)g(use)i(`)p Fp(+)p Fv('.)150
 
7866
4804 y Fu(5.3)68 b(F)-11 b(ortran)45 b(Examples)275 4997
 
7867
y Fv(In)20 b(C)h(y)m(ou)h(migh)m(t)g(ha)m(v)m(e)g(something)f(lik)m(e)g
7792
7868
(the)h(follo)m(wing)e(to)i(transform)f(a)h(one-dimensional)d(complex)
7793
 
150 5340 y(arra)m(y:)p eop
 
7869
150 5107 y(arra)m(y:)772 5236 y Fp(fftw_complex)44 b(in[N],)i(*out[N];)
 
7870
772 5340 y(fftw_plan)f(plan;)p eop end
7794
7871
%%Page: 53 55
7795
 
53 54 bop 150 -116 a Fu(Chapter)30 b(5:)41 b(Calling)28
7796
 
b(FFTW)j(from)f(F)-8 b(ortran)1909 b(53)772 299 y Fo(fftw_complex)44
7797
 
b(in[N],)i(*out[N];)772 403 y(fftw_plan)f(plan;)772 610
7798
 
y(plan)h(=)i(fftw_create_plan\(N,FFTW_)o(FORW)o(ARD)o(,FFT)o(W_ES)o
7799
 
(TIM)o(ATE\))o(;)772 714 y(fftw_one\(plan,in,out\);)772
7800
 
818 y(fftw_destroy_plan\(plan\);)275 961 y Fu(In)29 b(F)-8
 
7872
TeXDict begin 53 54 bop 150 -116 a Fv(Chapter)30 b(5:)41
 
7873
b(Calling)28 b(FFTW)j(from)f(F)-8 b(ortran)1909 b(53)772
 
7874
403 y Fp(plan)46 b(=)i(fftw_create_plan\(N,FFTW_)o(FORW)o(ARD)o(,FFT)o
 
7875
(W_ES)o(TIM)o(ATE\))o(;)772 506 y(fftw_one\(plan,in,out\);)772
 
7876
610 y(fftw_destroy_plan\(plan\);)275 749 y Fv(In)29 b(F)-8
7801
7877
b(ortran,)31 b(y)m(ou)g(use)f(the)h(follo)m(wing)e(to)i(accomplish)e
7802
 
(the)h(same)h(thing:)772 1099 y Fo(double)46 b(complex)g(in,)h(out)772
7803
 
1203 y(dimension)e(in\(N\),)h(out\(N\))772 1307 y(integer)g(plan)772
7804
 
1515 y(call)g(fftw_f77_create_plan\(plan,)o(N,FF)o(TW_)o(FORW)o(ARD,)o
7805
 
(FFT)o(W_ES)o(TIMA)o(TE\))772 1618 y(call)g
7806
 
(fftw_f77_one\(plan,in,out\))772 1722 y(call)g
7807
 
(fftw_f77_destroy_plan\(plan)o(\))275 1866 y Fu(Notice)34
 
7878
(the)h(same)h(thing:)772 883 y Fp(double)46 b(complex)g(in,)h(out)772
 
7879
986 y(dimension)e(in\(N\),)h(out\(N\))772 1090 y(integer)g(plan)772
 
7880
1298 y(call)g(fftw_f77_create_plan\(plan,)o(N,FF)o(TW_)o(FORW)o(ARD,)o
 
7881
(FFT)o(W_ES)o(TIMA)o(TE\))772 1402 y(call)g
 
7882
(fftw_f77_one\(plan,in,out\))772 1505 y(call)g
 
7883
(fftw_f77_destroy_plan\(plan)o(\))275 1644 y Fv(Notice)34
7808
7884
b(ho)m(w)g(all)f(routines)f(are)i(called)f(as)h(F)-8
7809
7885
b(ortran)35 b(subroutines,)d(and)i(the)g(plan)e(is)h(returned)f(via)150
7810
 
1975 y(the)43 b(\014rst)e(argumen)m(t)i(to)g Fo(fftw_f77_create_plan)p
7811
 
Fu(.)72 b Fq(Imp)-5 b(ortant:)72 b Fu(these)43 b(examples)f(assume)g
7812
 
(that)150 2085 y Fo(integer)26 b Fu(is)h(the)i(same)f(size)g(as)g(a)h
 
7886
1754 y(the)43 b(\014rst)e(argumen)m(t)i(to)g Fp(fftw_f77_create_plan)p
 
7887
Fv(.)72 b Fr(Imp)-5 b(ortant:)72 b Fv(these)43 b(examples)f(assume)g
 
7888
(that)150 1864 y Fp(integer)26 b Fv(is)h(the)i(same)f(size)g(as)g(a)h
7813
7889
(p)s(oin)m(ter,)f(and)f(ma)m(y)i(need)f(mo)s(di\014cation)e(on)i(a)h
7814
 
(64-bit)f(mac)m(hine.)40 b(See)150 2195 y(Section)28
 
7890
(64-bit)f(mac)m(hine.)40 b(See)150 1973 y(Section)28
7815
7891
b(5.1)h([W)-8 b(rapp)s(er)28 b(Routines],)g(page)h(51,)h(ab)s(o)m(v)m
7816
7892
(e.)41 b(T)-8 b(o)29 b(do)f(the)g(same)h(thing,)f(but)f(using)g(8)h
7817
 
(threads)150 2304 y(in)d(parallel)g(\(see)j(Section)f(4.1)h
 
7893
(threads)150 2083 y(in)d(parallel)g(\(see)j(Section)f(4.1)h
7818
7894
([Multi-threaded)d(FFTW],)j(page)g(37\),)h(y)m(ou)e(w)m(ould)f(simply)e
7819
 
(replace)j(the)150 2414 y(call)j(to)h Fo(fftw_f77_one)c
7820
 
Fu(with:)772 2552 y Fo(call)46 b(fftw_f77_threads_one\(8,pla)o(n,in)o
7821
 
(,ou)o(t\))275 2695 y Fu(T)-8 b(o)30 b(transform)g(a)h
 
7895
(replace)j(the)150 2192 y(call)j(to)h Fp(fftw_f77_one)c
 
7896
Fv(with:)772 2326 y Fp(call)46 b(fftw_f77_threads_one\(8,pla)o(n,in)o
 
7897
(,ou)o(t\))275 2465 y Fv(T)-8 b(o)30 b(transform)g(a)h
7822
7898
(three-dimensional)d(arra)m(y)j(in-place)e(with)g(C,)h(y)m(ou)h(migh)m
7823
 
(t)f(do:)772 2833 y Fo(fftw_complex)44 b(arr[L][M][N];)772
7824
 
2937 y(fftwnd_plan)h(plan;)772 3041 y(int)i(n[3])f(=)i({L,M,N};)772
7825
 
3248 y(plan)e(=)i(fftwnd_create_plan\(3,n,F)o(FTW_)o(FOR)o(WARD)o(,)
7826
 
2013 3352 y(FFTW_ESTIMATE)c(|)j(FFTW_IN_PLACE\);)772
7827
 
3456 y(fftwnd_one\(plan,)c(arr,)k(0\);)772 3560 y
7828
 
(fftwnd_destroy_plan\(plan)o(\);)275 3703 y Fu(In)29
 
7899
(t)f(do:)772 2598 y Fp(fftw_complex)44 b(arr[L][M][N];)772
 
7900
2702 y(fftwnd_plan)h(plan;)772 2806 y(int)i(n[3])f(=)i({L,M,N};)772
 
7901
3013 y(plan)e(=)i(fftwnd_create_plan\(3,n,F)o(FTW_)o(FOR)o(WARD)o(,)
 
7902
2013 3117 y(FFTW_ESTIMATE)c(|)j(FFTW_IN_PLACE\);)772
 
7903
3221 y(fftwnd_one\(plan,)c(arr,)k(0\);)772 3325 y
 
7904
(fftwnd_destroy_plan\(plan)o(\);)275 3464 y Fv(In)29
7829
7905
b(F)-8 b(ortran,)31 b(y)m(ou)g(w)m(ould)e(use)h(this)g(instead:)772
7830
 
3841 y Fo(double)46 b(complex)g(arr)772 3945 y(dimension)f
7831
 
(arr\(L,M,N\))772 4049 y(integer)h(n)772 4153 y(dimension)f(n\(3\))772
7832
 
4256 y(integer)h(plan)772 4464 y(n\(1\))g(=)i(L)772 4568
7833
 
y(n\(2\))e(=)i(M)772 4672 y(n\(3\))e(=)i(N)772 4775 y(call)e
 
7906
3597 y Fp(double)46 b(complex)g(arr)772 3701 y(dimension)f
 
7907
(arr\(L,M,N\))772 3805 y(integer)h(n)772 3909 y(dimension)f(n\(3\))772
 
7908
4012 y(integer)h(plan)772 4220 y(n\(1\))g(=)i(L)772 4324
 
7909
y(n\(2\))e(=)i(M)772 4427 y(n\(3\))e(=)i(N)772 4531 y(call)e
7834
7910
(fftwnd_f77_create_plan\(pla)o(n,3,)o(n,F)o(FTW_)o(FORW)o(ARD)o(,)724
7835
 
4879 y(+)1336 b(FFTW_ESTIMATE)44 b(+)k(FFTW_IN_PLACE\))772
7836
 
4983 y(call)e(fftwnd_f77_one\(plan,)d(arr,)j(0\))772
7837
 
5087 y(call)g(fftwnd_f77_destroy_plan\(pl)o(an\))275
7838
 
5230 y Fu(Instead)29 b(of)h(calling)e Fo(fftwnd_f77_create_plan\()o
7839
 
(plan)o(,3,n)o(,..)o(.\))p Fu(,)c(w)m(e)30 b(could)e(also)i(ha)m(v)m(e)
7840
 
h(called)150 5340 y Fo(fftw3d_f77_create_plan\(p)o(lan,)o(L,M,)o(N,.)o
7841
 
(..\))p Fu(.)p eop
 
7911
4635 y(+)1336 b(FFTW_ESTIMATE)44 b(+)k(FFTW_IN_PLACE\))772
 
7912
4739 y(call)e(fftwnd_f77_one\(plan,)d(arr,)j(0\))772
 
7913
4843 y(call)g(fftwnd_f77_destroy_plan\(pl)o(an\))275
 
7914
4982 y Fv(Instead)29 b(of)h(calling)e Fp(fftwnd_f77_create_plan\()o
 
7915
(plan)o(,3,n)o(,..)o(.\))p Fv(,)c(w)m(e)30 b(could)e(also)i(ha)m(v)m(e)
 
7916
h(called)150 5091 y Fp(fftw3d_f77_create_plan\(p)o(lan,)o(L,M,)o(N,.)o
 
7917
(..\))p Fv(.)275 5230 y(Note)j(that)g(w)m(e)g(pass)f(the)h(arra)m(y)g
 
7918
(dimensions)d(in)h(the)h Fp(")p Fv(natural)p Fp(")f Fv(order;)j(also)e
 
7919
(note)h(that)g(the)g(last)150 5340 y(argumen)m(t)d(to)g
 
7920
Fp(fftwnd_f77)d Fv(is)h(ignored)g(since)h(the)h(transform)e(is)h
 
7921
Fp(FFTW_IN_PLACE)p Fv(.)p eop end
7842
7922
%%Page: 54 56
7843
 
54 55 bop 150 -116 a Fu(54)3232 b(FFTW)275 299 y(Note)34
7844
 
b(that)g(w)m(e)g(pass)f(the)h(arra)m(y)g(dimensions)d(in)h(the)h
7845
 
Fo(")p Fu(natural)p Fo(")f Fu(order;)j(also)e(note)h(that)g(the)g(last)
7846
 
150 408 y(argumen)m(t)d(to)g Fo(fftwnd_f77)d Fu(is)h(ignored)g(since)h
7847
 
(the)h(transform)e(is)h Fo(FFTW_IN_PLACE)p Fu(.)275 543
7848
 
y(T)-8 b(o)30 b(transform)g(a)h(one-dimensional)d(real)i(arra)m(y)h(in)
7849
 
e(F)-8 b(ortran,)31 b(y)m(ou)g(migh)m(t)f(do:)772 672
7850
 
y Fo(double)46 b(precision)f(in,)i(out)772 775 y(dimension)e(in\(N\),)h
7851
 
(out\(N\))772 879 y(integer)g(plan)772 1087 y(call)g
7852
 
(rfftw_f77_create_plan\(plan)o(,N,F)o(FTW)o(_REA)o(L_TO)o(_CO)o(MPLE)o
7853
 
(X,)724 1191 y(+)1288 b(FFTW_ESTIMATE\))772 1294 y(call)46
7854
 
b(rfftw_f77_one\(plan,in,out\))772 1398 y(call)g
7855
 
(rfftw_f77_destroy_plan\(pla)o(n\))275 1533 y Fu(T)-8
 
7923
TeXDict begin 54 55 bop 150 -116 a Fv(54)3232 b(FFTW)275
 
7924
299 y(T)-8 b(o)30 b(transform)g(a)h(one-dimensional)d(real)i(arra)m(y)h
 
7925
(in)e(F)-8 b(ortran,)31 b(y)m(ou)g(migh)m(t)f(do:)772
 
7926
428 y Fp(double)46 b(precision)f(in,)i(out)772 531 y(dimension)e
 
7927
(in\(N\),)h(out\(N\))772 635 y(integer)g(plan)772 843
 
7928
y(call)g(rfftw_f77_create_plan\(plan)o(,N,F)o(FTW)o(_REA)o(L_TO)o(_CO)o
 
7929
(MPLE)o(X,)724 946 y(+)1288 b(FFTW_ESTIMATE\))772 1050
 
7930
y(call)46 b(rfftw_f77_one\(plan,in,out\))772 1154 y(call)g
 
7931
(rfftw_f77_destroy_plan\(pla)o(n\))275 1289 y Fv(T)-8
7856
7932
b(o)30 b(transform)g(a)h(t)m(w)m(o-dimensional)e(real)h(arra)m(y)-8
7857
7933
b(,)32 b(out)e(of)h(place,)f(y)m(ou)h(migh)m(t)f(use)g(the)h(follo)m
7858
 
(wing:)772 1661 y Fo(double)46 b(precision)f(in)772 1765
7859
 
y(double)h(complex)g(out)772 1869 y(dimension)f(in\(M,N\),)h(out\(M/2)f
7860
 
(+)j(1,)f(N\))772 1973 y(integer)f(plan)772 2180 y(call)g
 
7934
(wing:)772 1417 y Fp(double)46 b(precision)f(in)772 1521
 
7935
y(double)h(complex)g(out)772 1625 y(dimension)f(in\(M,N\),)h(out\(M/2)f
 
7936
(+)j(1,)f(N\))772 1729 y(integer)f(plan)772 1936 y(call)g
7861
7937
(rfftw2d_f77_create_plan\(pl)o(an,M)o(,N,)o(FFTW)o(_REA)o(L_T)o(O_CO)o
7862
 
(MPLE)o(X,)724 2284 y(+)1384 b(FFTW_ESTIMATE\))772 2388
 
7938
(MPLE)o(X,)724 2040 y(+)1384 b(FFTW_ESTIMATE\))772 2144
7863
7939
y(call)46 b(rfftwnd_f77_one_real_to_co)o(mple)o(x\(p)o(lan,)41
7864
 
b(in,)47 b(out\))772 2491 y(call)f(rfftwnd_f77_destroy_plan\(p)o(lan\))
7865
 
275 2626 y Fm(Imp)s(ortan)m(t:)40 b Fu(Notice)30 b(that)g(it)f(is)f
7866
 
(the)i Fq(\014rst)38 b Fu(dimension)27 b(of)i(the)h(complex)f(output)g
7867
 
(arra)m(y)h(that)f(is)g(cut)150 2736 y(in)38 b(half)g(in)g(F)-8
 
7940
b(in,)47 b(out\))772 2247 y(call)f(rfftwnd_f77_destroy_plan\(p)o(lan\))
 
7941
275 2382 y Fn(Imp)s(ortan)m(t:)40 b Fv(Notice)30 b(that)g(it)f(is)f
 
7942
(the)i Fr(\014rst)38 b Fv(dimension)27 b(of)i(the)h(complex)f(output)g
 
7943
(arra)m(y)h(that)f(is)g(cut)150 2491 y(in)38 b(half)g(in)g(F)-8
7868
7944
b(ortran,)42 b(rather)d(than)g(the)h(last)f(dimension)e(as)i(in)f(C.)h
7869
 
(This)e(is)i(a)g(consequence)h(of)g(the)150 2845 y(wrapp)s(er)29
 
7945
(This)e(is)i(a)g(consequence)h(of)g(the)150 2601 y(wrapp)s(er)29
7870
7946
b(routines)h(rev)m(ersing)g(the)i(order)e(of)h(the)g(arra)m(y)h
7871
7947
(dimensions)c(passed)j(to)g(FFTW)h(so)f(that)h(the)150
7872
 
2955 y(F)-8 b(ortran)31 b(program)f(can)h(use)f(its)g(ordinary)e
7873
 
(column-ma)5 b(jor)30 b(order.)p eop
 
7948
2711 y(F)-8 b(ortran)31 b(program)f(can)h(use)f(its)g(ordinary)e
 
7949
(column-ma)5 b(jor)30 b(order.)p eop end
7874
7950
%%Page: 55 57
7875
 
55 56 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Installation)29
7876
 
b(and)g(Customization)1808 b(55)150 299 y Fr(6)80 b(Installation)56
7877
 
b(and)d(Customization)275 515 y Fu(This)32 b(c)m(hapter)j(describ)s(es)
7878
 
e(the)h(installation)f(and)h(customization)g(of)g(FFTW,)i(the)e(latest)
7879
 
h(v)m(ersion)150 625 y(of)c(whic)m(h)e(ma)m(y)i(b)s(e)e(do)m(wnloaded)h
7880
 
(from)g(the)g(FFTW)h(home)g(page)g(\()p Fo(http://www.fftw.org)p
7881
 
Fu(\).)275 756 y(As)e(distributed,)e(FFTW)j(mak)m(es)h(v)m(ery)f(few)f
 
7951
TeXDict begin 55 56 bop 150 -116 a Fv(Chapter)30 b(6:)41
 
7952
b(Installation)29 b(and)g(Customization)1808 b(55)150
 
7953
299 y Fs(6)80 b(Installation)56 b(and)d(Customization)275
 
7954
520 y Fv(This)32 b(c)m(hapter)j(describ)s(es)e(the)h(installation)f
 
7955
(and)h(customization)g(of)g(FFTW,)i(the)e(latest)h(v)m(ersion)150
 
7956
629 y(of)c(whic)m(h)e(ma)m(y)i(b)s(e)e(do)m(wnloaded)h(from)g(the)g
 
7957
(FFTW)h(home)g(page)g(\()p Fp(http://www.fftw.org)p Fv(\).)275
 
7958
761 y(As)e(distributed,)e(FFTW)j(mak)m(es)h(v)m(ery)f(few)f
7882
7959
(assumptions)f(ab)s(out)h(y)m(our)h(system.)40 b(All)29
7883
 
b(y)m(ou)h(need)f(is)150 866 y(an)i(ANSI)g(C)g(compiler)e(\()p
7884
 
Fo(gcc)i Fu(is)f(\014ne,)h(although)f(v)m(endor-pro)m(vided)g
7885
 
(compilers)g(often)i(pro)s(duce)e(faster)150 975 y(co)s(de\).)50
 
7960
b(y)m(ou)h(need)f(is)150 871 y(an)i(ANSI)g(C)g(compiler)e(\()p
 
7961
Fp(gcc)i Fv(is)f(\014ne,)h(although)f(v)m(endor-pro)m(vided)g
 
7962
(compilers)g(often)i(pro)s(duce)e(faster)150 980 y(co)s(de\).)50
7886
7963
b(Ho)m(w)m(ev)m(er,)36 b(installation)31 b(of)i(FFTW)h(is)e(somewhat)i
7887
7964
(simpler)d(if)h(y)m(ou)i(ha)m(v)m(e)g(a)f(Unix)g(or)g(a)g(GNU)150
7888
 
1085 y(system,)46 b(suc)m(h)d(as)g(Lin)m(ux.)77 b(In)42
 
7965
1090 y(system,)46 b(suc)m(h)d(as)g(Lin)m(ux.)77 b(In)42
7889
7966
b(this)g(c)m(hapter,)47 b(w)m(e)d(\014rst)e(describ)s(e)f(the)i
7890
 
(installation)e(of)i(FFTW)h(on)150 1194 y(Unix)33 b(and)h(non-Unix)f
 
7967
(installation)e(of)i(FFTW)h(on)150 1200 y(Unix)33 b(and)h(non-Unix)f
7891
7968
(systems.)53 b(W)-8 b(e)36 b(then)e(describ)s(e)f(ho)m(w)i(y)m(ou)g
7892
 
(can)f(customize)h(FFTW)g(to)h(ac)m(hiev)m(e)150 1304
 
7969
(can)f(customize)h(FFTW)g(to)h(ac)m(hiev)m(e)150 1309
7893
7970
y(b)s(etter)41 b(p)s(erformance.)71 b(Sp)s(eci\014cally)-8
7894
 
b(,)41 b(y)m(ou)g(can)g(I\))g(enable)f Fo(gcc)p Fu(/x86-sp)s(eci\014c)g
7895
 
(hac)m(ks)i(that)f(impro)m(v)m(e)150 1414 y(p)s(erformance)26
 
7971
b(,)41 b(y)m(ou)g(can)g(I\))g(enable)f Fp(gcc)p Fv(/x86-sp)s(eci\014c)g
 
7972
(hac)m(ks)i(that)f(impro)m(v)m(e)150 1419 y(p)s(erformance)26
7896
7973
b(on)g(P)m(en)m(tia)h(and)e(P)m(en)m(tiumPro's;)j(I)s(I\))e(adapt)g
7897
7974
(FFTW)h(to)g(use)f(the)h(high-resolution)d(clo)s(c)m(k)150
7898
 
1523 y(of)i(y)m(our)h(mac)m(hine,)g(if)e(an)m(y;)j(I)s(I)s(I\))d(pro)s
7899
 
(duce)g(co)s(de)i(\()p Fq(c)-5 b(o)g(delets)7 b Fu(\))29
 
7975
1528 y(of)i(y)m(our)h(mac)m(hine,)g(if)e(an)m(y;)j(I)s(I)s(I\))d(pro)s
 
7976
(duce)g(co)s(de)i(\()p Fr(c)-5 b(o)g(delets)7 b Fv(\))29
7900
7977
b(to)e(supp)s(ort)d(fast)j(transforms)e(of)h(sizes)g(that)150
7901
 
1633 y(are)31 b(not)f(supp)s(orted)f(e\016cien)m(tly)h(b)m(y)g(the)h
7902
 
(standard)e(FFTW)i(distribution.)150 1880 y Ft(6.1)68
7903
 
b(Installation)47 b(on)e(Unix)275 2069 y Fu(FFTW)24 b(comes)g(with)e(a)
7904
 
h Fo(configure)e Fu(program)i(in)f(the)i(GNU)g(st)m(yle.)38
7905
 
b(Installation)22 b(can)i(b)s(e)e(as)i(simple)150 2178
7906
 
y(as:)390 2303 y Fo(./configure)390 2407 y(make)390 2511
7907
 
y(make)47 b(install)275 2642 y Fu(This)24 b(will)h(build)e(the)k
 
7978
1638 y(are)31 b(not)f(supp)s(orted)f(e\016cien)m(tly)h(b)m(y)g(the)h
 
7979
(standard)e(FFTW)i(distribution.)150 1887 y Fu(6.1)68
 
7980
b(Installation)47 b(on)e(Unix)275 2077 y Fv(FFTW)24 b(comes)g(with)e(a)
 
7981
h Fp(configure)e Fv(program)i(in)f(the)i(GNU)g(st)m(yle.)38
 
7982
b(Installation)22 b(can)i(b)s(e)e(as)i(simple)150 2187
 
7983
y(as:)390 2313 y Fp(./configure)390 2417 y(make)390 2521
 
7984
y(make)47 b(install)275 2652 y Fv(This)24 b(will)h(build)e(the)k
7908
7985
(unipro)s(cessor)e(complex)h(and)g(real)h(transform)f(libraries)e
7909
 
(along)j(with)e(the)i(test)150 2752 y(programs.)37 b(W)-8
 
7986
(along)j(with)e(the)i(test)150 2762 y(programs.)37 b(W)-8
7910
7987
b(e)22 b(strongly)d(recommend)i(that)g(y)m(ou)f(use)g(GNU)h
7911
 
Fo(make)f Fu(if)f(it)h(is)f(a)m(v)-5 b(ailable;)24 b(on)c(some)h
7912
 
(systems)150 2861 y(it)37 b(is)g(called)g Fo(gmake)p
7913
 
Fu(.)62 b(The)37 b(\\)p Fo(make)30 b(install)p Fu(")36
 
7988
Fp(make)f Fv(if)f(it)h(is)f(a)m(v)-5 b(ailable;)24 b(on)c(some)h
 
7989
(systems)150 2872 y(it)37 b(is)g(called)g Fp(gmake)p
 
7990
Fv(.)62 b(The)37 b(\\)p Fp(make)30 b(install)p Fv(")36
7914
7991
b(command)i(installs)d(the)j(\013t)m(w)g(and)f(r\013t)m(w)h(libraries)d
7915
 
(in)150 2971 y(standard)28 b(places,)i(and)e(t)m(ypically)g(requires)g
 
7992
(in)150 2981 y(standard)28 b(places,)i(and)e(t)m(ypically)g(requires)g
7916
7993
(ro)s(ot)i(privileges)d(\(unless)h(y)m(ou)h(sp)s(ecify)f(a)h
7917
 
(di\013eren)m(t)g(install)150 3080 y(directory)34 b(with)e(the)j
7918
 
Fo(--prefix)c Fu(\015ag)k(to)f Fo(configure)p Fu(\).)50
7919
 
b(Y)-8 b(ou)35 b(can)f(also)g(t)m(yp)s(e)g(\\)p Fo(make)c(check)p
7920
 
Fu(")j(to)i(put)150 3190 y(the)f(FFTW)h(test)f(programs)g(through)f
 
7994
(di\013eren)m(t)g(install)150 3091 y(directory)34 b(with)e(the)j
 
7995
Fp(--prefix)c Fv(\015ag)k(to)f Fp(configure)p Fv(\).)50
 
7996
b(Y)-8 b(ou)35 b(can)f(also)g(t)m(yp)s(e)g(\\)p Fp(make)c(check)p
 
7997
Fv(")j(to)i(put)150 3200 y(the)f(FFTW)h(test)f(programs)g(through)f
7921
7998
(their)g(paces.)51 b(If)34 b(y)m(ou)g(ha)m(v)m(e)h(problems)d(during)g
7922
 
(con\014guration)150 3299 y(or)i(compilation,)g(y)m(ou)h(ma)m(y)g(w)m
7923
 
(an)m(t)g(to)g(run)e(\\)p Fo(make)d(distclean)p Fu(")i(b)s(efore)i
7924
 
(trying)f(again;)k(this)c(ensures)150 3409 y(that)e(y)m(ou)g(don't)f
 
7999
(con\014guration)150 3310 y(or)i(compilation,)g(y)m(ou)h(ma)m(y)g(w)m
 
8000
(an)m(t)g(to)g(run)e(\\)p Fp(make)d(distclean)p Fv(")i(b)s(efore)i
 
8001
(trying)f(again;)k(this)c(ensures)150 3419 y(that)e(y)m(ou)g(don't)f
7925
8002
(ha)m(v)m(e)i(an)m(y)e(stale)h(\014les)e(left)h(o)m(v)m(er)i(from)e
7926
 
(previous)f(compilation)g(attempts.)275 3540 y(The)g
7927
 
Fo(configure)f Fu(script)i(kno)m(ws)g(go)s(o)s(d)g Fo(CFLAGS)f
7928
 
Fu(\(C)h(compiler)f(\015ags\))i(for)f(a)h(few)f(systems.)41
7929
 
b(If)30 b(y)m(our)150 3650 y(system)g(is)f(not)h(kno)m(wn,)g(the)g
7930
 
Fo(configure)d Fu(script)i(will)e(prin)m(t)i(out)h(a)g(w)m(arning.)2858
7931
 
3617 y Fn(1)2935 3650 y Fu(In)f(this)g(case,)i(y)m(ou)g(can)150
7932
 
3759 y(compile)e(FFTW)i(with)e(the)i(command)390 3884
7933
 
y Fo(make)47 b(CFLAGS="<write)d(your)i(CFLAGS)g(here>")275
7934
 
4015 y Fu(If)24 b(y)m(ou)h(do)g(\014nd)e(an)i(optimal)f(set)i(of)f
7935
 
Fo(CFLAGS)e Fu(for)i(y)m(our)f(system,)j(please)e(let)f(us)h(kno)m(w)g
7936
 
(what)f(they)i(are)150 4125 y(\(along)31 b(with)e(the)h(output)g(of)h
7937
 
Fo(config.guess)p Fu(\))c(so)k(that)g(w)m(e)g(can)f(include)f(them)h
7938
 
(in)f(future)g(releases.)275 4256 y(The)38 b Fo(configure)e
7939
 
Fu(program)j(supp)s(orts)e(all)h(the)h(standard)f(\015ags)h(de\014ned)f
7940
 
(b)m(y)h(the)g(GNU)h(Co)s(ding)150 4366 y(Standards;)23
7941
 
b(see)d(the)h Fo(INSTALL)d Fu(\014le)i(in)f(FFTW)h(or)h(the)f(GNU)h(w)m
7942
 
(eb)f(page)h(\()p Fo(http://www.gnu.org/prep/sta)o(ndar)o(ds_)p
7943
 
4282 4388 42 91 v 150 4475 a(toc.html)p Fu(\).)38 b(Note)31
7944
 
b(esp)s(ecially)d Fo(--help)f Fu(to)k(list)d(all)g(\015ags)h(and)g
7945
 
Fo(--enable-shared)c Fu(to)30 b(create)h(shared,)150
7946
 
4585 y(rather)21 b(than)g(static,)j(libraries.)35 b Fo(configure)19
7947
 
b Fu(also)j(accepts)g(a)g(few)f(FFTW-sp)s(eci\014c)g(\015ags,)j
7948
 
(particularly:)225 4716 y Fs(\017)60 b Fo(--enable-float)28
7949
 
b Fu(Pro)s(duces)j(a)i(single-precision)c(v)m(ersion)i(of)h(FFTW)h(\()p
7950
 
Fo(float)p Fu(\))e(instead)h(of)g(the)330 4825 y(default)24
7951
 
b(double-precision)d(\()p Fo(double)p Fu(\).)38 b(See)24
 
8003
(previous)f(compilation)g(attempts.)275 3551 y(The)g
 
8004
Fp(configure)f Fv(script)i(kno)m(ws)g(go)s(o)s(d)g Fp(CFLAGS)f
 
8005
Fv(\(C)h(compiler)f(\015ags\))i(for)f(a)h(few)f(systems.)41
 
8006
b(If)30 b(y)m(our)150 3661 y(system)g(is)f(not)h(kno)m(wn,)g(the)g
 
8007
Fp(configure)d Fv(script)i(will)e(prin)m(t)i(out)h(a)g(w)m(arning.)2858
 
8008
3628 y Fo(1)2935 3661 y Fv(In)f(this)g(case,)i(y)m(ou)g(can)150
 
8009
3771 y(compile)e(FFTW)i(with)e(the)i(command)390 3897
 
8010
y Fp(make)47 b(CFLAGS="<write)d(your)i(CFLAGS)g(here>")275
 
8011
4028 y Fv(If)24 b(y)m(ou)h(do)g(\014nd)e(an)i(optimal)f(set)i(of)f
 
8012
Fp(CFLAGS)e Fv(for)i(y)m(our)f(system,)j(please)e(let)f(us)h(kno)m(w)g
 
8013
(what)f(they)i(are)150 4138 y(\(along)31 b(with)e(the)h(output)g(of)h
 
8014
Fp(config.guess)p Fv(\))c(so)k(that)g(w)m(e)g(can)f(include)f(them)h
 
8015
(in)f(future)g(releases.)275 4270 y(The)95 b Fp(configure)f
 
8016
Fv(program)h(supp)s(orts)f(all)h(the)i(standard)e(\015ags)h(de\014ned)f
 
8017
(b)m(y)h(the)150 4379 y(GNU)67 b(Co)s(ding)e(Standards;)84
 
8018
b(see)67 b(the)g Fp(INSTALL)e Fv(\014le)h(in)f(FFTW)j(or)e(the)h(GNU)h
 
8019
(w)m(eb)e(page)150 4489 y(\()p Fp(http://www.gnu.org/prep/st)o(and)o
 
8020
(ards)o(_toc)o(.ht)o(ml)p Fv(\).)93 b(Note)51 b(esp)s(ecially)c
 
8021
Fp(--help)h Fv(to)j(list)d(all)150 4599 y(\015ags)32
 
8022
b(and)f Fp(--enable-shared)d Fv(to)33 b(create)g(shared,)f(rather)g
 
8023
(than)g(static,)h(libraries.)43 b Fp(configure)29 b Fv(also)150
 
8024
4708 y(accepts)j(a)e(few)h(FFTW-sp)s(eci\014c)f(\015ags,)h
 
8025
(particularly:)225 4840 y Ft(\017)60 b Fp(--enable-float)28
 
8026
b Fv(Pro)s(duces)j(a)i(single-precision)c(v)m(ersion)i(of)h(FFTW)h(\()p
 
8027
Fp(float)p Fv(\))e(instead)h(of)g(the)330 4950 y(default)24
 
8028
b(double-precision)d(\()p Fp(double)p Fv(\).)38 b(See)24
7952
8029
b(Section)g(6.3)i([Installing)c(FFTW)j(in)e(b)s(oth)h(single)f(and)330
7953
 
4935 y(double)29 b(precision],)g(page)i(57.)p 150 5022
7954
 
1200 4 v 192 5088 a Fn(1)275 5121 y Fu(Eac)m(h)e(v)m(ersion)e(of)i
7955
 
Fo(cc)f Fu(seems)g(to)i(ha)m(v)m(e)f(its)f(o)m(wn)g(magic)h(incan)m
7956
 
(tation)f(to)h(get)h(the)f(fastest)g(co)s(de)g(most)275
7957
 
5230 y(of)42 b(the)g(time|y)m(ou'd)f(think)g(that)h(p)s(eople)f(w)m
7958
 
(ould)g(ha)m(v)m(e)i(agreed)g(up)s(on)d(some)i(con)m(v)m(en)m(tion,)47
7959
 
b(e.g.)275 5340 y Fo("-Omax")p Fu(,)28 b(b)m(y)i(no)m(w.)p
7960
 
eop
 
8030
5059 y(double)29 b(precision],)g(page)i(57.)p 150 5149
 
8031
1200 4 v 199 5217 a Fo(1)275 5249 y Fj(Eac)n(h)18 b(v)n(ersion)h(of)g
 
8032
Fi(cc)f Fj(seems)g(to)h(ha)n(v)n(e)f(its)g(o)n(wn)h(magic)f(incan)n
 
8033
(tation)h(to)g(get)f(the)g(fastest)i(co)r(de)f(most)e(of)i(the)f
 
8034
(time|y)n(ou'd)275 5340 y(think)24 b(that)i(p)r(eople)g(w)n(ould)g(ha)n
 
8035
(v)n(e)f(agreed)h(up)r(on)f(some)h(con)n(v)n(en)n(tion,)f(e.g.)35
 
8036
b Fi("-Omax")p Fj(,)28 b(b)n(y)d(no)n(w.)p eop end
7961
8037
%%Page: 56 58
7962
 
56 57 bop 150 -116 a Fu(56)3232 b(FFTW)225 299 y Fs(\017)60
7963
 
b Fo(--enable-type-prefix)34 b Fu(Adds)k(a)i(`)p Fo(d)p
7964
 
Fu(')g(or)g(`)p Fo(s)p Fu(')f(pre\014x)g(to)h(all)e(installed)g
 
8038
TeXDict begin 56 57 bop 150 -116 a Fv(56)3232 b(FFTW)225
 
8039
299 y Ft(\017)60 b Fp(--enable-type-prefix)34 b Fv(Adds)k(a)i(`)p
 
8040
Fp(d)p Fv(')g(or)g(`)p Fp(s)p Fv(')f(pre\014x)g(to)h(all)e(installed)g
7965
8041
(libraries)e(and)j(header)330 408 y(\014les)29 b(to)h(indicate)f(the)h
7966
8042
(\015oating-p)s(oin)m(t)f(precision.)39 b(See)30 b(Section)g(6.3)h
7967
8043
([Installing)d(FFTW)i(in)f(b)s(oth)330 518 y(single)c(and)g(double)f
7968
 
(precision],)i(page)g(57.)40 b(\()p Fo(--enable-type-prefix=<prefi)o
7969
 
(x>)20 b Fu(lets)25 b(y)m(ou)i(add)330 628 y(an)j(arbitrary)f
 
8044
(precision],)i(page)g(57.)40 b(\()p Fp(--enable-type-prefix=<prefi)o
 
8045
(x>)20 b Fv(lets)25 b(y)m(ou)i(add)330 628 y(an)j(arbitrary)f
7970
8046
(pre\014x.\))40 b(By)31 b(default,)f(no)g(pre\014x)f(is)h(used.)225
7971
 
764 y Fs(\017)60 b Fo(--enable-threads)24 b Fu(Enables)j(compilation)g
 
8047
758 y Ft(\017)60 b Fp(--enable-threads)24 b Fv(Enables)j(compilation)g
7972
8048
(and)g(installation)g(of)h(the)g(FFTW)h(threads)f(library)330
7973
 
874 y(\(see)36 b(Section)e(4.1)i([Multi-threaded)e(FFTW],)i(page)f
 
8049
867 y(\(see)36 b(Section)e(4.1)i([Multi-threaded)e(FFTW],)i(page)f
7974
8050
(37\),)i(whic)m(h)d(pro)m(vides)g(a)h(simple)d(in)m(terface)330
7975
 
983 y(to)43 b(parallel)e(transforms)g(for)i(SMP)f(systems.)77
 
8051
977 y(to)43 b(parallel)e(transforms)g(for)i(SMP)f(systems.)77
7976
8052
b(\(By)43 b(default,)i(the)d(threads)g(routines)g(are)h(not)330
7977
 
1093 y(compiled.\))225 1229 y Fs(\017)60 b Fo(--enable-mpi)38
7978
 
b Fu(Enables)h(compilation)h(and)g(installation)f(of)i(the)g(FFTW)h
7979
 
(MPI)e(library)f(\(see)330 1339 y(Section)27 b(4.2)i([MPI)e(FFTW],)i
7980
 
(page)f(40\),)i(whic)m(h)c(pro)m(vides)g(parallel)g(transforms)g(for)i
7981
 
(distributed-)330 1449 y(memory)i(systems)h(with)e(MPI.)h(\(By)h
7982
 
(default,)f(the)h(MPI)f(routines)f(are)i(not)g(compiled.\))225
7983
 
1585 y Fs(\017)60 b Fo(--disable-fortran)19 b Fu(Disables)k(inclusion)e
7984
 
(of)j(F)-8 b(ortran-callable)24 b(wrapp)s(er)e(routines)h(\(see)i
7985
 
(Chap-)330 1695 y(ter)32 b(5)h([Calling)d(FFTW)i(from)g(F)-8
7986
 
b(ortran],)33 b(page)g(51\))g(in)e(the)h(standard)f(FFTW)i(libraries.)
7987
 
42 b(These)330 1804 y(wrapp)s(er)e(routines)g(increase)h(the)h(library)
7988
 
d(size)i(b)m(y)g(only)g(a)g(negligible)e(amoun)m(t,)45
7989
 
b(so)d(they)g(are)330 1914 y(included)30 b(b)m(y)j(default)g(as)g(long)
7990
 
g(as)g(the)h Fo(configure)c Fu(script)i(\014nds)g(a)h(F)-8
7991
 
b(ortran)34 b(compiler)e(on)h(y)m(our)330 2023 y(system.)225
7992
 
2160 y Fs(\017)60 b Fo(--with-gcc)32 b Fu(Enables)h(the)i(use)g(of)g
7993
 
Fo(gcc)p Fu(.)53 b(By)35 b(default,)g(FFTW)h(uses)e(the)h(v)m
7994
 
(endor-supplied)d Fo(cc)330 2269 y Fu(compiler)22 b(if)h(presen)m(t.)39
7995
 
b(Unfortunately)-8 b(,)25 b Fo(gcc)e Fu(pro)s(duces)f(slo)m(w)m(er)i
7996
 
(co)s(de)g(than)g Fo(cc)f Fu(on)h(man)m(y)g(systems.)225
7997
 
2406 y Fs(\017)60 b Fo(--enable-i386-hacks)25 b Fu(See)31
 
8053
1086 y(compiled.\))225 1217 y Ft(\017)60 b Fp(--with-openmp)p
 
8054
Fv(,)44 b Fp(--with-sgimp)d Fv(In)j(conjunction)f(with)g
 
8055
Fp(--enable-threads)p Fv(,)g(causes)i(the)330 1326 y(m)m(ulti-threaded)
 
8056
27 b(FFTW)j(library)c(to)j(use)g(Op)s(enMP)e(or)i(SGI)f(MP)h(compiler)e
 
8057
(directiv)m(es)h(in)f(order)330 1436 y(to)g(induce)e(parallelism,)g
 
8058
(rather)h(than)h(spa)m(wning)e(its)h(o)m(wn)g(threads)g(directly)-8
 
8059
b(.)39 b(\(Useful)26 b(esp)s(ecially)330 1545 y(for)i(programs)f
 
8060
(already)g(emplo)m(ying)g(suc)m(h)g(directiv)m(es,)h(in)f(order)g(to)i
 
8061
(minimize)c(con\015icts)i(b)s(et)m(w)m(een)330 1655 y(di\013eren)m(t)j
 
8062
(parallelization)e(mec)m(hanisms.\))225 1785 y Ft(\017)60
 
8063
b Fp(--enable-mpi)38 b Fv(Enables)h(compilation)h(and)g(installation)f
 
8064
(of)i(the)g(FFTW)h(MPI)e(library)f(\(see)330 1895 y(Section)27
 
8065
b(4.2)i([MPI)e(FFTW],)i(page)f(40\),)i(whic)m(h)c(pro)m(vides)g
 
8066
(parallel)g(transforms)g(for)i(distributed-)330 2004
 
8067
y(memory)i(systems)h(with)e(MPI.)h(\(By)h(default,)f(the)h(MPI)f
 
8068
(routines)f(are)i(not)g(compiled.\))225 2134 y Ft(\017)60
 
8069
b Fp(--disable-fortran)19 b Fv(Disables)k(inclusion)e(of)j(F)-8
 
8070
b(ortran-callable)24 b(wrapp)s(er)e(routines)h(\(see)i(Chap-)330
 
8071
2244 y(ter)32 b(5)h([Calling)d(FFTW)i(from)g(F)-8 b(ortran],)33
 
8072
b(page)g(51\))g(in)e(the)h(standard)f(FFTW)i(libraries.)42
 
8073
b(These)330 2353 y(wrapp)s(er)e(routines)g(increase)h(the)h(library)d
 
8074
(size)i(b)m(y)g(only)g(a)g(negligible)e(amoun)m(t,)45
 
8075
b(so)d(they)g(are)330 2463 y(included)30 b(b)m(y)j(default)g(as)g(long)
 
8076
g(as)g(the)h Fp(configure)c Fv(script)i(\014nds)g(a)h(F)-8
 
8077
b(ortran)34 b(compiler)e(on)h(y)m(our)330 2573 y(system.)225
 
8078
2703 y Ft(\017)60 b Fp(--with-gcc)32 b Fv(Enables)h(the)i(use)g(of)g
 
8079
Fp(gcc)p Fv(.)53 b(By)35 b(default,)g(FFTW)h(uses)e(the)h(v)m
 
8080
(endor-supplied)d Fp(cc)330 2812 y Fv(compiler)22 b(if)h(presen)m(t.)39
 
8081
b(Unfortunately)-8 b(,)25 b Fp(gcc)e Fv(pro)s(duces)f(slo)m(w)m(er)i
 
8082
(co)s(de)g(than)g Fp(cc)f Fv(on)h(man)m(y)g(systems.)225
 
8083
2942 y Ft(\017)60 b Fp(--enable-i386-hacks)25 b Fv(See)31
7998
8084
b(Section)f(6.4)h([gcc)h(and)e(P)m(en)m(tium)g(hac)m(ks],)h(page)g(57,)
7999
 
h(b)s(elo)m(w.)225 2542 y Fs(\017)60 b Fo(--enable-pentium-timer)24
8000
 
b Fu(See)31 b(Section)f(6.4)i([gcc)f(and)f(P)m(en)m(tium)g(hac)m(ks],)i
8001
 
(page)f(57,)g(b)s(elo)m(w.)275 2708 y(T)-8 b(o)22 b(force)h
8002
 
Fo(configure)d Fu(to)k(use)e(a)h(particular)d(C)i(compiler)f(\(instead)
8003
 
h(of)h(the)g(default,)g(usually)d Fo(cc)p Fu(\),)k(set)150
8004
 
2817 y(the)i(en)m(vironmen)m(t)f(v)-5 b(ariable)25 b
8005
 
Fo(CC)g Fu(to)h(the)g(name)g(of)g(the)g(desired)e(compiler)g(b)s(efore)
8006
 
h(running)e Fo(configure)p Fu(;)150 2927 y(y)m(ou)31
 
8085
h(b)s(elo)m(w.)225 3072 y Ft(\017)60 b Fp(--enable-pentium-timer)24
 
8086
b Fv(See)31 b(Section)f(6.4)i([gcc)f(and)f(P)m(en)m(tium)g(hac)m(ks],)i
 
8087
(page)f(57,)g(b)s(elo)m(w.)275 3223 y(T)-8 b(o)22 b(force)h
 
8088
Fp(configure)d Fv(to)k(use)e(a)h(particular)d(C)i(compiler)f(\(instead)
 
8089
h(of)h(the)g(default,)g(usually)d Fp(cc)p Fv(\),)k(set)150
 
8090
3333 y(the)i(en)m(vironmen)m(t)f(v)-5 b(ariable)25 b
 
8091
Fp(CC)g Fv(to)h(the)g(name)g(of)g(the)g(desired)e(compiler)g(b)s(efore)
 
8092
h(running)e Fp(configure)p Fv(;)150 3442 y(y)m(ou)31
8007
8093
b(ma)m(y)g(also)f(need)g(to)h(set)g(the)g(\015ags)f(via)g(the)h(v)-5
8008
 
b(ariable)29 b Fo(CFLAGS)p Fu(.)150 3194 y Ft(6.2)68
8009
 
b(Installation)47 b(on)e(non-Unix)g(Systems)275 3390
8010
 
y Fu(It)22 b(is)f(quite)h(straigh)m(tforw)m(ard)g(to)h(install)d(FFTW)j
 
8094
b(ariable)29 b Fp(CFLAGS)p Fv(.)150 3686 y Fu(6.2)68
 
8095
b(Installation)47 b(on)e(non-Unix)g(Systems)275 3874
 
8096
y Fv(It)22 b(is)f(quite)h(straigh)m(tforw)m(ard)g(to)h(install)d(FFTW)j
8011
8097
(ev)m(en)h(on)e(non-Unix)f(systems)h(lac)m(king)g(the)h(niceties)150
8012
 
3500 y(of)33 b(the)g Fo(configure)e Fu(script.)47 b(The)32
 
8098
3984 y(of)33 b(the)g Fp(configure)e Fv(script.)47 b(The)32
8013
8099
b(FFTW)i(Home)g(P)m(age)g(ma)m(y)g(include)c(some)k(FFTW)f(pac)m(k)-5
8014
 
b(ages)35 b(pre-)150 3610 y(con\014gured)29 b(for)h(particular)f
 
8100
b(ages)35 b(pre-)150 4094 y(con\014gured)29 b(for)h(particular)f
8015
8101
(systems/compilers,)g(and)h(also)g(con)m(tains)h(installation)d(notes)i
8016
 
(sen)m(t)h(in)e(b)m(y)150 3719 y(users.)40 b(All)30 b(y)m(ou)h(really)e
 
8102
(sen)m(t)h(in)e(b)m(y)150 4203 y(users.)40 b(All)30 b(y)m(ou)h(really)e
8017
8103
(need)h(to)i(do,)e(though,)h(is)f(to)h(compile)e(all)h(of)h(the)f
8018
 
Fo(.c)g Fu(\014les)g(in)f(the)i(appropriate)150 3829
 
8104
Fp(.c)g Fv(\014les)g(in)f(the)i(appropriate)150 4313
8019
8105
y(directories)39 b(of)i(the)g(FFTW)g(pac)m(k)-5 b(age.)72
8020
8106
b(\(Y)-8 b(ou)42 b(needn't)e(w)m(orry)g(ab)s(out)g(the)h(man)m(y)f
8021
 
(extraneous)h(\014les)150 3938 y(lying)29 b(around.\))275
8022
 
4077 y(F)-8 b(or)37 b(the)g(complex)f(transforms,)i(compile)e(all)f(of)
8023
 
i(the)g Fo(.c)f Fu(\014les)g(in)f(the)i Fo(fftw)f Fu(directory)g(and)g
8024
 
(link)150 4186 y(them)j(in)m(to)h(a)g(library)-8 b(.)66
 
8107
(extraneous)h(\014les)150 4422 y(lying)29 b(around.\))275
 
8108
4552 y(F)-8 b(or)37 b(the)g(complex)f(transforms,)i(compile)e(all)f(of)
 
8109
i(the)g Fp(.c)f Fv(\014les)g(in)f(the)i Fp(fftw)f Fv(directory)g(and)g
 
8110
(link)150 4662 y(them)j(in)m(to)h(a)g(library)-8 b(.)66
8025
8111
b(Similarly)-8 b(,)38 b(for)h(the)h(real)f(transforms,)i(compile)e(all)
8026
 
f(of)i(the)f Fo(.c)g Fu(\014les)g(in)f(the)150 4296 y
8027
 
Fo(rfftw)31 b Fu(directory)h(in)m(to)h(a)g(library)-8
8028
 
b(.)46 b(Note)34 b(that)f(these)g(sources)g Fo(#include)d
8029
 
Fu(v)-5 b(arious)32 b(\014les)g(in)f(the)i Fo(fftw)150
8030
 
4406 y Fu(and)k Fo(rfftw)f Fu(directories,)j(so)f(y)m(ou)g(ma)m(y)g
8031
 
(need)f(to)h(set)h(up)d(the)i Fo(#include)d Fu(paths)i(for)h(y)m(our)f
8032
 
(compiler)150 4515 y(appropriately)-8 b(.)38 b(Be)27
 
8112
f(of)i(the)f Fp(.c)g Fv(\014les)g(in)f(the)150 4772 y
 
8113
Fp(rfftw)31 b Fv(directory)h(in)m(to)h(a)g(library)-8
 
8114
b(.)46 b(Note)34 b(that)f(these)g(sources)g Fp(#include)d
 
8115
Fv(v)-5 b(arious)32 b(\014les)g(in)f(the)i Fp(fftw)150
 
8116
4881 y Fv(and)k Fp(rfftw)f Fv(directories,)j(so)f(y)m(ou)g(ma)m(y)g
 
8117
(need)f(to)h(set)h(up)d(the)i Fp(#include)d Fv(paths)i(for)h(y)m(our)f
 
8118
(compiler)150 4991 y(appropriately)-8 b(.)38 b(Be)27
8033
8119
b(sure)f(to)i(enable)e(the)g(highest-p)s(ossible)e(lev)m(el)i(of)h
8034
 
(optimization)e(in)h(y)m(our)g(compiler.)275 4654 y(By)i(default,)h
 
8120
(optimization)e(in)h(y)m(our)g(compiler.)275 5121 y(By)i(default,)h
8035
8121
(FFTW)g(is)f(compiled)f(for)h(double-precision)e(transforms.)39
8036
 
b(T)-8 b(o)29 b(w)m(ork)g(in)e(single)h(preci-)150 4763
8037
 
y(sion)j(rather)i(than)f(double)e(precision,)i Fo(#define)e
8038
 
Fu(the)j(sym)m(b)s(ol)e Fo(FFTW_ENABLE_FLOAT)c Fu(in)k
8039
 
Fo(fftw.h)g Fu(\(in)150 4873 y(the)g Fo(fftw)e Fu(directory\))h(and)g
8040
 
(\(re\)compile)g(FFTW.)275 5011 y(These)36 b(libraries)e(should)h(b)s
8041
 
(e)h(link)m(ed)f(with)g(an)m(y)i(program)g(that)g(uses)f(the)h(corresp)
8042
 
s(onding)e(trans-)150 5121 y(forms.)44 b(The)31 b(required)f(header)h
8043
 
(\014les,)g Fo(fftw.h)f Fu(and)h Fo(rfftw.h)p Fu(,)f(are)i(lo)s(cated)g
8044
 
(in)e(the)i Fo(fftw)e Fu(and)h Fo(rfftw)150 5230 y Fu(directories)h
8045
 
(resp)s(ectiv)m(ely;)j(y)m(ou)e(ma)m(y)h(w)m(an)m(t)h(to)f(put)e(them)i
8046
 
(with)e(the)h(libraries,)f(or)h(wherev)m(er)g(header)150
8047
 
5340 y(\014les)c(normally)g(go)i(on)f(y)m(our)h(system.)p
8048
 
eop
 
8122
b(T)-8 b(o)29 b(w)m(ork)g(in)e(single)h(preci-)150 5230
 
8123
y(sion)j(rather)i(than)f(double)e(precision,)i Fp(#define)e
 
8124
Fv(the)j(sym)m(b)s(ol)e Fp(FFTW_ENABLE_FLOAT)c Fv(in)k
 
8125
Fp(fftw.h)g Fv(\(in)150 5340 y(the)g Fp(fftw)e Fv(directory\))h(and)g
 
8126
(\(re\)compile)g(FFTW.)p eop end
8049
8127
%%Page: 57 59
8050
 
57 58 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Installation)29
8051
 
b(and)g(Customization)1808 b(57)275 299 y(FFTW)44 b(includes)d(test)k
8052
 
(programs,)i Fo(fftw_test)41 b Fu(and)i Fo(rfftw_test)p
8053
 
Fu(,)i(in)d(the)i Fo(tests)f Fu(directory)-8 b(.)150
8054
 
408 y(These)33 b(are)g(compiled)f(and)g(link)m(ed)f(lik)m(e)i(an)m(y)g
 
8128
TeXDict begin 57 58 bop 150 -116 a Fv(Chapter)30 b(6:)41
 
8129
b(Installation)29 b(and)g(Customization)1808 b(57)275
 
8130
299 y(These)36 b(libraries)e(should)h(b)s(e)h(link)m(ed)f(with)g(an)m
 
8131
(y)i(program)g(that)g(uses)f(the)h(corresp)s(onding)e(trans-)150
 
8132
408 y(forms.)44 b(The)31 b(required)f(header)h(\014les,)g
 
8133
Fp(fftw.h)f Fv(and)h Fp(rfftw.h)p Fv(,)f(are)i(lo)s(cated)g(in)e(the)i
 
8134
Fp(fftw)e Fv(and)h Fp(rfftw)150 518 y Fv(directories)h(resp)s(ectiv)m
 
8135
(ely;)j(y)m(ou)e(ma)m(y)h(w)m(an)m(t)h(to)f(put)e(them)i(with)e(the)h
 
8136
(libraries,)f(or)h(wherev)m(er)g(header)150 628 y(\014les)c(normally)g
 
8137
(go)i(on)f(y)m(our)h(system.)275 771 y(FFTW)44 b(includes)d(test)k
 
8138
(programs,)i Fp(fftw_test)41 b Fv(and)i Fp(rfftw_test)p
 
8139
Fv(,)i(in)d(the)i Fp(tests)f Fv(directory)-8 b(.)150
 
8140
881 y(These)33 b(are)g(compiled)f(and)g(link)m(ed)f(lik)m(e)i(an)m(y)g
8055
8141
(program)g(using)e(FFTW,)j(except)g(that)g(they)f(use)g(addi-)150
8056
 
518 y(tional)g(header)h(\014les)f(lo)s(cated)h(in)f(the)h
8057
 
Fo(fftw)f Fu(and)g Fo(rfftw)g Fu(directories,)h(so)g(y)m(ou)h(will)c
8058
 
(need)j(to)g(set)h(y)m(our)150 628 y(compiler)41 b Fo(#include)e
8059
 
Fu(paths)j(appropriately)-8 b(.)74 b Fo(fftw_test)40
8060
 
b Fu(is)h(compiled)f(from)i Fo(fftw_test.c)d Fu(and)150
8061
 
737 y Fo(test_main.c)p Fu(,)25 b(while)h Fo(rfftw_test)f
8062
 
Fu(is)i(compiled)f(from)i Fo(rfftw_test.c)c Fu(and)j
8063
 
Fo(test_main.c)p Fu(.)37 b(When)150 847 y(y)m(ou)i(run)f(these)h
 
8142
991 y(tional)g(header)h(\014les)f(lo)s(cated)h(in)f(the)h
 
8143
Fp(fftw)f Fv(and)g Fp(rfftw)g Fv(directories,)h(so)g(y)m(ou)h(will)c
 
8144
(need)j(to)g(set)h(y)m(our)150 1100 y(compiler)41 b Fp(#include)e
 
8145
Fv(paths)j(appropriately)-8 b(.)74 b Fp(fftw_test)40
 
8146
b Fv(is)h(compiled)f(from)i Fp(fftw_test.c)d Fv(and)150
 
8147
1210 y Fp(test_main.c)p Fv(,)25 b(while)h Fp(rfftw_test)f
 
8148
Fv(is)i(compiled)f(from)i Fp(rfftw_test.c)c Fv(and)j
 
8149
Fp(test_main.c)p Fv(.)37 b(When)150 1319 y(y)m(ou)i(run)f(these)h
8064
8150
(programs,)j(y)m(ou)d(will)d(b)s(e)j(prompted)f(in)m(teractiv)m(ely)h
8065
8151
(for)g(v)-5 b(arious)38 b(p)s(ossible)e(tests)k(to)150
8066
 
956 y(p)s(erform;)29 b(see)i(also)f Fo(tests/README)e
8067
 
Fu(for)i(more)g(information.)150 1214 y Ft(6.3)68 b(Installing)47
 
8152
1429 y(p)s(erform;)29 b(see)i(also)f Fp(tests/README)e
 
8153
Fv(for)i(more)g(information.)150 1710 y Fu(6.3)68 b(Installing)47
8068
8154
b(FFTW)c(in)i(b)t(oth)f(single)i(and)f(double)g(precision)275
8069
 
1407 y Fu(It)f(is)f(often)i(useful)e(to)i(install)d(b)s(oth)h(single-)h
 
8155
1912 y Fv(It)f(is)f(often)i(useful)e(to)i(install)d(b)s(oth)h(single-)h
8070
8156
(and)f(double-precision)f(v)m(ersions)h(of)i(the)f(FFTW)150
8071
 
1517 y(libraries)31 b(on)j(the)g(same)g(mac)m(hine,)h(and)e(w)m(e)h
 
8157
2021 y(libraries)31 b(on)j(the)g(same)g(mac)m(hine,)h(and)e(w)m(e)h
8072
8158
(pro)m(vide)f(a)i(con)m(v)m(enien)m(t)g(mec)m(hanism)e(for)h(ac)m
8073
 
(hieving)f(this)150 1626 y(on)d(Unix)f(systems.)275 1761
8074
 
y(When)h(the)i Fo(--enable-type-prefix)25 b Fu(option)31
 
8159
(hieving)f(this)150 2131 y(on)d(Unix)f(systems.)275 2275
 
8160
y(When)h(the)i Fp(--enable-type-prefix)25 b Fv(option)31
8075
8161
b(of)g(con\014gure)g(is)f(used,)h(the)g(FFTW)h(libraries)d(and)150
8076
 
1871 y(header)j(\014les)g(are)h(installed)d(with)h(a)i(pre\014x)e(of)i
8077
 
(`)p Fo(d)p Fu(')g(or)f(`)p Fo(s)p Fu(',)i(dep)s(ending)c(up)s(on)h
8078
 
(whether)h(y)m(ou)g(compiled)150 1980 y(in)c(double)g(or)h(single)f
 
8162
2384 y(header)j(\014les)g(are)h(installed)d(with)h(a)i(pre\014x)e(of)i
 
8163
(`)p Fp(d)p Fv(')g(or)f(`)p Fp(s)p Fv(',)i(dep)s(ending)c(up)s(on)h
 
8164
(whether)h(y)m(ou)g(compiled)150 2494 y(in)c(double)g(or)h(single)f
8079
8165
(precision.)38 b(Then,)29 b(instead)f(of)i(linking)c(y)m(our)j(program)
8080
 
g(with)f Fo(-lrfftw)g(-lfftw)p Fu(,)150 2090 y(for)39
8081
 
b(example,)j(y)m(ou)e(w)m(ould)f(link)e(with)h Fo(-ldrfftw)29
8082
 
b(-ldfftw)37 b Fu(to)k(use)e(the)h(double-precision)c(v)m(ersion)150
8083
 
2199 y(or)e(with)g Fo(-lsrfftw)28 b(-lsfftw)k Fu(to)k(use)e(the)g
 
8166
g(with)f Fp(-lrfftw)g(-lfftw)p Fv(,)150 2603 y(for)39
 
8167
b(example,)j(y)m(ou)e(w)m(ould)f(link)e(with)h Fp(-ldrfftw)29
 
8168
b(-ldfftw)37 b Fv(to)k(use)e(the)h(double-precision)c(v)m(ersion)150
 
8169
2713 y(or)e(with)g Fp(-lsrfftw)28 b(-lsfftw)k Fv(to)k(use)e(the)g
8084
8170
(single-precision)e(v)m(ersion.)53 b(Also,)35 b(y)m(ou)g(w)m(ould)e
8085
 
Fo(#include)150 2309 y(<drfftw.h>)28 b Fu(or)i Fo(<srfftw.h>)e
8086
 
Fu(instead)h(of)i Fo(<rfftw.h>)p Fu(,)d(and)i(so)g(on.)275
8087
 
2444 y Fq(The)j(names)g(of)g(FFTW)h(functions,)f(data)h(typ)-5
 
8171
Fp(#include)150 2823 y(<drfftw.h>)28 b Fv(or)i Fp(<srfftw.h>)e
 
8172
Fv(instead)h(of)i Fp(<rfftw.h>)p Fv(,)d(and)i(so)g(on.)275
 
8173
2966 y Fr(The)j(names)g(of)g(FFTW)h(functions,)f(data)h(typ)-5
8088
8174
b(es,)34 b(and)g(c)-5 b(onstants)34 b(r)-5 b(emain)34
8089
 
b(unchange)-5 b(d!)54 b Fu(Y)-8 b(ou)31 b(still)150 2553
8090
 
y(call,)24 b(for)f(instance,)i Fo(fftw_one)c Fu(and)i(not)h
8091
 
Fo(dfftw_one)p Fu(.)35 b(Only)22 b(the)i(names)f(of)h(header)f(\014les)
8092
 
f(and)h(libraries)150 2663 y(are)34 b(mo)s(di\014ed.)47
8093
 
b(One)32 b(consequence)i(of)g(this)e(is)g(that)i Fq(you)h
8094
 
Fm(cannot)h Fq(use)f(b)-5 b(oth)36 b(the)g(single-)f(and)h(double-)150
8095
 
2772 y(pr)-5 b(e)g(cision)27 b(FFTW)f(libr)-5 b(aries)27
 
8175
b(unchange)-5 b(d!)54 b Fv(Y)-8 b(ou)31 b(still)150 3076
 
8176
y(call,)24 b(for)f(instance,)i Fp(fftw_one)c Fv(and)i(not)h
 
8177
Fp(dfftw_one)p Fv(.)35 b(Only)22 b(the)i(names)f(of)h(header)f(\014les)
 
8178
f(and)h(libraries)150 3186 y(are)34 b(mo)s(di\014ed.)47
 
8179
b(One)32 b(consequence)i(of)g(this)e(is)g(that)i Fr(you)h
 
8180
Fn(cannot)h Fr(use)f(b)-5 b(oth)36 b(the)g(single-)f(and)h(double-)150
 
8181
3295 y(pr)-5 b(e)g(cision)27 b(FFTW)f(libr)-5 b(aries)27
8096
8182
b(in)e(the)h(same)g(pr)-5 b(o)g(gr)g(am,)30 b(simultane)-5
8097
 
b(ously,)26 b Fu(as)d(the)g(function)f(names)g(w)m(ould)150
8098
 
2882 y(con\015ict.)275 3017 y(So,)35 b(to)g(install)d(b)s(oth)i(the)g
 
8183
b(ously,)26 b Fv(as)d(the)g(function)f(names)g(w)m(ould)150
 
8184
3405 y(con\015ict.)275 3549 y(So,)35 b(to)g(install)d(b)s(oth)i(the)g
8099
8185
(single-)f(and)h(double-precision)e(libraries)f(on)j(the)h(same)f(mac)m
8100
 
(hine,)i(y)m(ou)150 3126 y(w)m(ould)29 b(do:)390 3255
8101
 
y Fo(./configure)45 b(--enable-type-prefix)d Fq([)32
8102
 
b(other)i(options)g(])390 3359 y Fo(make)390 3463 y(make)47
8103
 
b(install)390 3567 y(make)g(clean)390 3670 y(./configure)e
8104
 
(--enable-float)f(--enable-type-prefix)e Fq([)32 b(other)i(options)g(])
8105
 
390 3774 y Fo(make)390 3878 y(make)47 b(install)150 4136
8106
 
y Ft(6.4)68 b Fe(gcc)43 b Ft(and)i(P)l(en)l(tium)h(hac)l(ks)275
8107
 
4329 y Fu(The)22 b Fo(configure)e Fu(option)i Fo(--enable-i386-hacks)c
8108
 
Fu(enables)k(sp)s(eci\014c)f(optimizations)h(for)g(the)h(P)m(en-)150
8109
 
4438 y(tium)g(and)i(later)f(x86)i(CPUs)e(under)f(gcc,)k(whic)m(h)d(can)
 
8186
(hine,)i(y)m(ou)150 3658 y(w)m(ould)29 b(do:)390 3796
 
8187
y Fp(./configure)45 b(--enable-type-prefix)d Fr([)32
 
8188
b(other)i(options)g(])390 3900 y Fp(make)390 4004 y(make)47
 
8189
b(install)390 4108 y(make)g(clean)390 4211 y(./configure)e
 
8190
(--enable-float)f(--enable-type-prefix)e Fr([)32 b(other)i(options)g(])
 
8191
390 4315 y Fp(make)390 4419 y(make)47 b(install)150 4700
 
8192
y Fu(6.4)68 b Fb(gcc)43 b Fu(and)i(P)l(en)l(tium)h(hac)l(ks)275
 
8193
4902 y Fv(The)22 b Fp(configure)e Fv(option)i Fp(--enable-i386-hacks)c
 
8194
Fv(enables)k(sp)s(eci\014c)f(optimizations)h(for)g(the)h(P)m(en-)150
 
8195
5011 y(tium)g(and)i(later)f(x86)i(CPUs)e(under)f(gcc,)k(whic)m(h)d(can)
8110
8196
h(signi\014can)m(tly)e(impro)m(v)m(e)h(p)s(erformance)g(of)h(double-)
8111
 
150 4548 y(precision)f(transforms.)39 b(Sp)s(eci\014cally)-8
 
8197
150 5121 y(precision)f(transforms.)39 b(Sp)s(eci\014cally)-8
8112
8198
b(,)24 b(w)m(e)j(ha)m(v)m(e)g(tested)g(these)f(hac)m(ks)h(on)f(Lin)m
8113
 
(ux)e(with)h Fo(gcc)g Fu(2.[789])k(and)150 4657 y(v)m(ersions)j(of)i
8114
 
Fo(egcs)d Fu(since)i(1.0.3.)50 b(These)33 b(optimizations)f(a\013ect)i
8115
 
(only)f(the)g(p)s(erformance)f(and)g(not)i(the)150 4767
 
8199
(ux)e(with)h Fp(gcc)g Fv(2.[789])k(and)150 5230 y(v)m(ersions)j(of)i
 
8200
Fp(egcs)d Fv(since)i(1.0.3.)50 b(These)33 b(optimizations)f(a\013ect)i
 
8201
(only)f(the)g(p)s(erformance)f(and)g(not)i(the)150 5340
8116
8202
y(correctness)d(of)g(FFTW)g(\(i.e.)41 b(it)30 b(is)f(alw)m(a)m(ys)i
8117
 
(safe)g(to)g(try)f(them)g(out\).)275 4902 y(These)h(hac)m(ks)i(pro)m
8118
 
(vide)e(a)h(w)m(ork)-5 b(around)31 b(to)i(the)f(incorrect)g(alignmen)m
8119
 
(t)g(of)g(lo)s(cal)f Fo(double)f Fu(v)-5 b(ariables)150
8120
 
5011 y(in)31 b Fo(gcc)p Fu(.)47 b(The)32 b(compiler)f(aligns)h(these)h
8121
 
(v)-5 b(ariables)31 b(to)i(m)m(ultiples)e(of)h(4)h(b)m(ytes,)h(but)e
8122
 
(execution)h(is)f(m)m(uc)m(h)150 5121 y(faster)k(\(on)g(P)m(en)m(tium)g
8123
 
(and)f(P)m(en)m(tiumPro\))h(if)f Fo(double)p Fu(s)f(are)i(aligned)f(to)
8124
 
h(a)h(m)m(ultiple)c(of)j(8)h(b)m(ytes.)58 b(By)150 5230
8125
 
y(carefully)25 b(coun)m(ting)h(the)g(n)m(um)m(b)s(er)f(of)h(v)-5
8126
 
b(ariables)25 b(allo)s(cated)h(b)m(y)g(the)h(compiler)d(in)h(p)s
8127
 
(erformance-critical)150 5340 y(regions)i(of)g(the)h(co)s(de,)g(w)m(e)g
8128
 
(ha)m(v)m(e)h(b)s(een)d(able)h(to)h(in)m(tro)s(duce)e(dumm)m(y)h(allo)s
8129
 
(cations)f(\(using)g Fo(alloca)p Fu(\))g(that)p eop
 
8203
(safe)g(to)g(try)f(them)g(out\).)p eop end
8130
8204
%%Page: 58 60
8131
 
58 59 bop 150 -116 a Fu(58)3232 b(FFTW)150 299 y(align)34
8132
 
b(the)g(stac)m(k)j(prop)s(erly)-8 b(.)51 b(The)35 b(hac)m(k)g(dep)s
8133
 
(ends)e(crucially)g(on)h(the)h(compiler)e(\015ags)i(that)g(are)g(used.)
8134
 
150 408 y(F)-8 b(or)31 b(example,)f(it)g(w)m(on't)h(w)m(ork)g(without)e
8135
 
Fo(-fomit-frame-pointer)p Fu(.)275 584 y(In)d(principle,)f(these)j(hac)
8136
 
m(ks)h(are)f(no)f(longer)g(required)f(under)g Fo(gcc)h
8137
 
Fu(v)m(ersions)g(2.95)i(and)e(later,)h(whic)m(h)150 693
8138
 
y(automatically)d(align)f(the)h(stac)m(k)i(correctly)e(\(see)h
8139
 
Fo(-mpreferred-stack-bounda)o(ry)19 b Fu(in)24 b(the)h
8140
 
Fo(gcc)f Fu(man-)150 803 y(ual\).)37 b(Ho)m(w)m(ev)m(er,)24
8141
 
b(w)m(e)d(ha)m(v)m(e)h(encoun)m(tered)e(a)h(bug)f(\()p
8142
 
Fo(http://egcs.cygnus.com/ml)o(/gc)o(c-bu)o(gs/1)o(999)o(-11/)o(msg0)o
8143
 
(025)o(9.ht)o(ml)p Fu(\))p 4555 826 42 91 v 150 912 a(in)25
8144
 
b(the)h(stac)m(k)h(alignmen)m(t)e(of)h(v)m(ersions)f(2.95.[012])30
8145
 
b(that)c(causes)g(FFTW's)h(stac)m(k)g(to)g(b)s(e)e(misaligned)f(un-)150
8146
 
1022 y(der)k(some)g(circumstances.)40 b(The)27 b Fo(configure)f
8147
 
Fu(script)h(automatically)h(detects)h(this)e(bug)g(and)h(disables)150
8148
 
1132 y Fo(gcc)p Fu('s)i(stac)m(k)h(alignmen)m(t)f(in)f(fa)m(v)m(or)j
8149
 
(of)e(our)g(o)m(wn)h(hac)m(ks)g(when)e Fo(--enable-i386-hacks)c
8150
 
Fu(is)k(used.)275 1307 y(The)34 b Fo(fftw_test)e Fu(program)i(outputs)g
 
8205
TeXDict begin 58 59 bop 150 -116 a Fv(58)3232 b(FFTW)275
 
8206
299 y(These)31 b(hac)m(ks)i(pro)m(vide)e(a)h(w)m(ork)-5
 
8207
b(around)31 b(to)i(the)f(incorrect)g(alignmen)m(t)g(of)g(lo)s(cal)f
 
8208
Fp(double)f Fv(v)-5 b(ariables)150 408 y(in)31 b Fp(gcc)p
 
8209
Fv(.)47 b(The)32 b(compiler)f(aligns)h(these)h(v)-5 b(ariables)31
 
8210
b(to)i(m)m(ultiples)e(of)h(4)h(b)m(ytes,)h(but)e(execution)h(is)f(m)m
 
8211
(uc)m(h)150 518 y(faster)k(\(on)g(P)m(en)m(tium)g(and)f(P)m(en)m
 
8212
(tiumPro\))h(if)f Fp(double)p Fv(s)f(are)i(aligned)f(to)h(a)h(m)m
 
8213
(ultiple)c(of)j(8)h(b)m(ytes.)58 b(By)150 628 y(carefully)25
 
8214
b(coun)m(ting)h(the)g(n)m(um)m(b)s(er)f(of)h(v)-5 b(ariables)25
 
8215
b(allo)s(cated)h(b)m(y)g(the)h(compiler)d(in)h(p)s(erformance-critical)
 
8216
150 737 y(regions)i(of)g(the)h(co)s(de,)g(w)m(e)g(ha)m(v)m(e)h(b)s(een)
 
8217
d(able)h(to)h(in)m(tro)s(duce)e(dumm)m(y)h(allo)s(cations)f(\(using)g
 
8218
Fp(alloca)p Fv(\))g(that)150 847 y(align)34 b(the)g(stac)m(k)j(prop)s
 
8219
(erly)-8 b(.)51 b(The)35 b(hac)m(k)g(dep)s(ends)e(crucially)g(on)h(the)
 
8220
h(compiler)e(\015ags)i(that)g(are)g(used.)150 956 y(F)-8
 
8221
b(or)31 b(example,)f(it)g(w)m(on't)h(w)m(ork)g(without)e
 
8222
Fp(-fomit-frame-pointer)p Fv(.)275 1086 y(In)86 b(principle,)98
 
8223
b(these)87 b(hac)m(ks)h(are)f(no)g(longer)f(required)g(under)f
 
8224
Fp(gcc)h Fv(v)m(ersions)g(2.95)150 1195 y(and)96 b(later,)112
 
8225
b(whic)m(h)95 b(automatically)h(align)g(the)g(stac)m(k)i(correctly)e
 
8226
(\(see)h Fp(-mpreferred-)150 1305 y(stack-boundary)76
 
8227
b Fv(in)j(the)h Fp(gcc)f Fv(man)m(ual\).)190 b(Ho)m(w)m(ev)m(er,)95
 
8228
b(w)m(e)80 b(ha)m(v)m(e)i(encoun)m(tered)e(a)h(bug)150
 
8229
1415 y(\()p Fp(http://egcs.cygnus.com/ml/)o(gcc)o(-bug)o(s/19)o(99-)o
 
8230
(11/m)o(sg00)o(259)o(.htm)o(l)p Fv(\))145 b(in)150 b(the)g(stac)m(k)150
 
8231
1524 y(alignmen)m(t)39 b(of)g(v)m(ersions)g(2.95.[012])k(that)d(causes)
 
8232
g(FFTW's)g(stac)m(k)h(to)f(b)s(e)f(misaligned)e(under)h(some)150
 
8233
1634 y(circumstances.)72 b(The)40 b Fp(configure)f Fv(script)h
 
8234
(automatically)g(detects)i(this)e(bug)h(and)f(disables)f
 
8235
Fp(gcc)p Fv('s)150 1743 y(stac)m(k)32 b(alignmen)m(t)e(in)f(fa)m(v)m
 
8236
(or)i(of)g(our)f(o)m(wn)g(hac)m(ks)h(when)e Fp(--enable-i386-hacks)c
 
8237
Fv(is)30 b(used.)275 1873 y(The)k Fp(fftw_test)e Fv(program)i(outputs)g
8151
8238
(sp)s(eed)g(measuremen)m(ts)g(that)i(y)m(ou)e(can)h(use)g(to)g(see)g
8152
 
(if)e(these)150 1416 y(hac)m(ks)e(are)g(b)s(ene\014cial.)275
8153
 
1592 y(The)36 b Fo(configure)e Fu(option)i Fo(--enable-pentium-timer)30
8154
 
b Fu(enables)36 b(the)h(use)f(of)h(the)f(P)m(en)m(tium)h(and)150
8155
 
1701 y(P)m(en)m(tiumPro)g(cycle)g(coun)m(ter)h(for)f(timing)e(purp)s
 
8239
(if)e(these)150 1982 y(hac)m(ks)e(are)g(b)s(ene\014cial.)275
 
8240
2112 y(The)36 b Fp(configure)e Fv(option)i Fp(--enable-pentium-timer)30
 
8241
b Fv(enables)36 b(the)h(use)f(of)h(the)f(P)m(en)m(tium)h(and)150
 
8242
2221 y(P)m(en)m(tiumPro)g(cycle)g(coun)m(ter)h(for)f(timing)e(purp)s
8156
8243
(oses.)59 b(In)37 b(order)f(to)i(get)h(correct)f(results,)g(y)m(ou)f(m)
8157
 
m(ust)150 1811 y(de\014ne)f Fo(FFTW_CYCLES_PER_SEC)31
8158
 
b Fu(in)k Fo(fftw/config.h)e Fu(to)38 b(b)s(e)d(the)i(clo)s(c)m(k)g(sp)
8159
 
s(eed)f(of)h(y)m(our)f(pro)s(cessor;)150 1920 y(the)31
 
8244
m(ust)150 2331 y(de\014ne)f Fp(FFTW_CYCLES_PER_SEC)31
 
8245
b Fv(in)k Fp(fftw/config.h)e Fv(to)38 b(b)s(e)d(the)i(clo)s(c)m(k)g(sp)
 
8246
s(eed)f(of)h(y)m(our)f(pro)s(cessor;)150 2440 y(the)31
8160
8247
b(resulting)e(FFTW)j(library)d(will)f(b)s(e)i(nonp)s(ortable.)41
8161
8248
b(The)31 b(use)f(of)h(this)f(option)h(is)f(deprecated.)43
8162
 
b(On)150 2030 y(serious)25 b(op)s(erating)h(systems)g(\(suc)m(h)g(as)g
8163
 
(Lin)m(ux\),)g(FFTW)h(uses)f Fo(gettimeofday\(\))p Fu(,)d(whic)m(h)i
8164
 
(has)h(enough)150 2140 y(resolution)34 b(and)g(is)g(p)s(ortable.)54
 
8249
b(On)150 2550 y(serious)25 b(op)s(erating)h(systems)g(\(suc)m(h)g(as)g
 
8250
(Lin)m(ux\),)g(FFTW)h(uses)f Fp(gettimeofday\(\))p Fv(,)d(whic)m(h)i
 
8251
(has)h(enough)150 2660 y(resolution)34 b(and)g(is)g(p)s(ortable.)54
8165
8252
b(\(Note)37 b(that)e(Win32)g(has)g(its)g(o)m(wn)g(high-resolution)d
8166
 
(timing)i(routines)150 2249 y(as)d(w)m(ell.)39 b(FFTW)31
 
8253
(timing)i(routines)150 2769 y(as)d(w)m(ell.)39 b(FFTW)31
8167
8254
b(con)m(tains)g(unsupp)s(orted)c(co)s(de)k(to)g(use)f(these)h
8168
 
(routines.\))150 2608 y Ft(6.5)68 b(Customizing)46 b(the)f(timer)275
8169
 
2842 y Fu(FFTW)32 b(needs)g(a)h(reasonably-precise)e(clo)s(c)m(k)i(in)e
 
8255
(routines.\))150 3011 y Fu(6.5)68 b(Customizing)46 b(the)f(timer)275
 
8256
3199 y Fv(FFTW)32 b(needs)g(a)h(reasonably-precise)e(clo)s(c)m(k)i(in)e
8170
8257
(order)h(to)h(\014nd)d(the)j(optimal)e(w)m(a)m(y)i(to)g(compute)g(a)150
8171
 
2951 y(transform.)39 b(On)27 b(Unix)f(systems,)i Fo(configure)d
8172
 
Fu(lo)s(oks)i(for)h Fo(gettimeofday)c Fu(and)j(other)h(system-sp)s
8173
 
(eci\014c)150 3061 y(timers.)81 b(If)43 b(it)h(do)s(es)g(not)g(\014nd)e
 
8258
3308 y(transform.)39 b(On)27 b(Unix)f(systems,)i Fp(configure)d
 
8259
Fv(lo)s(oks)i(for)h Fp(gettimeofday)c Fv(and)j(other)h(system-sp)s
 
8260
(eci\014c)150 3418 y(timers.)81 b(If)43 b(it)h(do)s(es)g(not)g(\014nd)e
8174
8261
(an)m(y)j(high)d(resolution)h(clo)s(c)m(k,)48 b(it)43
8175
 
b(defaults)g(to)i(using)e(the)h Fo(clock\(\))150 3170
8176
 
y Fu(function,)35 b(whic)m(h)e(is)h(v)m(ery)h(p)s(ortable,)g(but)f
 
8262
b(defaults)g(to)i(using)e(the)h Fp(clock\(\))150 3527
 
8263
y Fv(function,)35 b(whic)m(h)e(is)h(v)m(ery)h(p)s(ortable,)g(but)f
8177
8264
(forces)i(FFTW)f(to)h(run)d(for)i(a)g(long)f(time)h(in)e(order)h(to)i
8178
 
(get)150 3280 y(reliable)28 b(measuremen)m(ts.)275 3455
 
8265
(get)150 3637 y(reliable)28 b(measuremen)m(ts.)275 3766
8179
8266
y(If)23 b(y)m(our)i(mac)m(hine)f(supp)s(orts)e(a)j(high-resolution)d
8180
8267
(clo)s(c)m(k)j(not)f(recognized)h(b)m(y)f(FFTW,)h(it)f(is)f(therefore)
8181
 
150 3565 y(advisable)35 b(to)i(use)e(it.)58 b(Y)-8 b(ou)36
8182
 
b(m)m(ust)g(edit)g Fo(fftw/fftw-int.h)p Fu(.)54 b(There)35
8183
 
b(are)i(a)f(few)g(macros)h(y)m(ou)f(m)m(ust)150 3674
 
8268
150 3876 y(advisable)35 b(to)i(use)e(it.)58 b(Y)-8 b(ou)36
 
8269
b(m)m(ust)g(edit)g Fp(fftw/fftw-int.h)p Fv(.)54 b(There)35
 
8270
b(are)i(a)f(few)g(macros)h(y)m(ou)f(m)m(ust)150 3985
8184
8271
y(rede\014ne.)46 b(The)32 b(co)s(de)h(is)e(do)s(cumen)m(ted)h(and)g
8185
8272
(should)e(b)s(e)i(self-explanatory)-8 b(.)47 b(\(By)33
8186
 
b(the)g(w)m(a)m(y)-8 b(,)34 b Fo(fftw-int)150 3784 y
8187
 
Fu(stands)28 b(for)g Fo(fftw-internal)p Fu(,)d(but)j(for)g(some)g
 
8273
b(the)g(w)m(a)m(y)-8 b(,)34 b Fp(fftw-int)150 4095 y
 
8274
Fv(stands)28 b(for)g Fp(fftw-internal)p Fv(,)d(but)j(for)g(some)g
8188
8275
(inexplicable)e(reason)i(p)s(eople)g(are)g(still)e(using)h(primitiv)m
8189
 
(e)150 3894 y(systems)j(with)f(8.3)j(\014lenames.\))275
8190
 
4069 y(Ev)m(en)e(if)g(y)m(ou)h(don't)g(install)e(high-resolution)f
 
8276
(e)150 4205 y(systems)j(with)f(8.3)j(\014lenames.\))275
 
8277
4334 y(Ev)m(en)e(if)g(y)m(ou)h(don't)g(install)e(high-resolution)f
8191
8278
(timing)h(co)s(de,)j(w)m(e)f(still)d(recommend)j(that)g(y)m(ou)g(lo)s
8192
 
(ok)150 4178 y(at)38 b(the)f Fo(FFTW_TIME_MIN)d Fu(constan)m(t)39
8193
 
b(in)c Fo(fftw/fftw-int.h)p Fu(.)58 b(This)35 b(constan)m(t)k(holds)c
8194
 
(the)j(minim)m(um)150 4288 y(time)h(in)m(terv)-5 b(al)39
 
8279
(ok)150 4444 y(at)38 b(the)f Fp(FFTW_TIME_MIN)d Fv(constan)m(t)39
 
8280
b(in)c Fp(fftw/fftw-int.h)p Fv(.)58 b(This)35 b(constan)m(t)k(holds)c
 
8281
(the)j(minim)m(um)150 4553 y(time)h(in)m(terv)-5 b(al)39
8195
8282
b(\(in)g(seconds\))h(required)e(to)i(get)h(accurate)g(timing)d
8196
 
(measuremen)m(ts,)43 b(and)c(should)f(b)s(e)150 4398
 
8283
(measuremen)m(ts,)43 b(and)c(should)f(b)s(e)150 4663
8197
8284
y(\(at)j(least\))f(sev)m(eral)g(h)m(undred)d(times)j(the)f(resolution)g
8198
8285
(of)g(y)m(our)h(clo)s(c)m(k.)69 b(The)39 b(default)g(constan)m(ts)i
8199
 
(are)150 4507 y(on)c(the)g(conserv)-5 b(ativ)m(e)39 b(side,)f(and)e(ma)
 
8286
(are)150 4772 y(on)c(the)g(conserv)-5 b(ativ)m(e)39 b(side,)f(and)e(ma)
8200
8287
m(y)i(cause)g(FFTW)g(to)f(tak)m(e)i(longer)e(than)g(necessary)g(when)g
8201
 
(y)m(ou)150 4617 y(create)f(a)e(plan.)51 b(Set)35 b Fo(FFTW_TIME_MIN)30
8202
 
b Fu(to)35 b(whatev)m(er)g(is)f(appropriate)f(on)h(y)m(our)g(system)h
8203
 
(\(b)s(e)f(sure)f(to)150 4726 y(set)e(the)h Fq(right)40
8204
 
b Fo(FFTW_TIME_MIN)6 b Fu(.)18 b(.)k(.)12 b(there)31
8205
 
b(are)g(sev)m(eral)g(de\014nitions)e(in)g Fo(fftw-int.h)p
8206
 
Fu(,)g(corresp)s(onding)150 4836 y(to)i(di\013eren)m(t)f(platforms)f
8207
 
(and)h(timers\).)275 5011 y(As)36 b(an)f(aid)h(in)e(c)m(hec)m(king)j
 
8288
(y)m(ou)150 4882 y(create)f(a)e(plan.)51 b(Set)35 b Fp(FFTW_TIME_MIN)30
 
8289
b Fv(to)35 b(whatev)m(er)g(is)f(appropriate)f(on)h(y)m(our)g(system)h
 
8290
(\(b)s(e)f(sure)f(to)150 4991 y(set)e(the)h Fr(right)40
 
8291
b Fp(FFTW_TIME_MIN)6 b Fv(.)18 b(.)k(.)12 b(there)31
 
8292
b(are)g(sev)m(eral)g(de\014nitions)e(in)g Fp(fftw-int.h)p
 
8293
Fv(,)g(corresp)s(onding)150 5101 y(to)i(di\013eren)m(t)f(platforms)f
 
8294
(and)h(timers\).)275 5230 y(As)36 b(an)f(aid)h(in)e(c)m(hec)m(king)j
8208
8295
(the)f(resolution)f(of)h(y)m(our)g(clo)s(c)m(k,)i(y)m(ou)f(can)f(use)g
8209
 
(the)g Fo(tests/fftw_test)150 5121 y Fu(program)41 b(with)g(the)g
8210
 
Fo(-t)g Fu(option)g(\(c.f.)75 b Fo(tests/README)p Fu(\).)d(Remem)m(b)s
8211
 
(er,)44 b(the)e(mere)f(fact)i(that)f(y)m(our)150 5230
8212
 
y(clo)s(c)m(k)32 b(rep)s(orts)f(times)g(in,)f(sa)m(y)-8
 
8296
(the)g Fp(tests/fftw_test)150 5340 y Fv(program)41 b(with)g(the)g
 
8297
Fp(-t)g Fv(option)g(\(c.f.)75 b Fp(tests/README)p Fv(\).)d(Remem)m(b)s
 
8298
(er,)44 b(the)e(mere)f(fact)i(that)f(y)m(our)p eop end
 
8299
%%Page: 59 61
 
8300
TeXDict begin 59 60 bop 150 -116 a Fv(Chapter)30 b(6:)41
 
8301
b(Installation)29 b(and)g(Customization)1808 b(59)150
 
8302
299 y(clo)s(c)m(k)32 b(rep)s(orts)f(times)g(in,)f(sa)m(y)-8
8213
8303
b(,)34 b(picoseconds,)d(do)s(es)g(not)h(mean)g(that)g(it)f(is)f
8214
 
(actually)h Fq(ac)-5 b(cur)g(ate)40 b Fu(to)32 b(that)150
8215
 
5340 y(resolution.)p eop
8216
 
%%Page: 59 61
8217
 
59 60 bop 150 -116 a Fu(Chapter)30 b(6:)41 b(Installation)29
8218
 
b(and)g(Customization)1808 b(59)150 299 y Ft(6.6)68 b(Generating)46
8219
 
b(y)l(our)f(o)l(wn)g(co)t(de)275 491 y Fu(If)22 b(y)m(ou)i(kno)m(w)g
 
8304
(actually)h Fr(ac)-5 b(cur)g(ate)40 b Fv(to)32 b(that)150
 
8305
408 y(resolution.)150 666 y Fu(6.6)68 b(Generating)46
 
8306
b(y)l(our)f(o)l(wn)g(co)t(de)275 858 y Fv(If)22 b(y)m(ou)i(kno)m(w)g
8220
8307
(that)g(y)m(ou)f(will)e(only)h(use)i(transforms)e(of)i(a)f(certain)h
8221
8308
(size)f(\(sa)m(y)-8 b(,)26 b(p)s(o)m(w)m(ers)e(of)f(2\))h(and)f(w)m(an)
8222
 
m(t)150 601 y(to)28 b(reduce)f(the)h(size)f(of)g(the)h(library)-8
 
8309
m(t)150 968 y(to)28 b(reduce)f(the)h(size)f(of)g(the)h(library)-8
8223
8310
b(,)26 b(y)m(ou)i(can)f(recon\014gure)h(FFTW)g(to)g(supp)s(ort)d(only)i
8224
 
(those)h(sizes)f(y)m(ou)150 711 y(are)34 b(in)m(terested)g(in.)50
 
8311
(those)h(sizes)f(y)m(ou)150 1078 y(are)34 b(in)m(terested)g(in.)50
8225
8312
b(Y)-8 b(ou)34 b(ma)m(y)h(ev)m(en)f(generate)i(co)s(de)e(to)g(enable)f
8226
8313
(e\016cien)m(t)i(transforms)e(of)h(a)g(size)g(not)150
8227
 
820 y(supp)s(orted)28 b(b)m(y)i(the)g(default)f(distribution.)36
 
8314
1187 y(supp)s(orted)28 b(b)m(y)i(the)g(default)f(distribution.)36
8228
8315
b(The)30 b(default)f(distribution)d(supp)s(orts)i(transforms)h(of)h(an)
8229
 
m(y)150 930 y(size,)e(but)e(not)h(all)e(sizes)i(are)g(equally)e(fast.)
 
8316
m(y)150 1297 y(size,)e(but)e(not)h(all)e(sizes)i(are)g(equally)e(fast.)
8230
8317
40 b(The)26 b(default)g(installation)f(of)i(FFTW)g(is)f(b)s(est)g(at)i
8231
 
(handling)150 1039 y(sizes)33 b(of)h(the)g(form)g(2)892
8232
 
1006 y Fk(a)932 1039 y Fu(3)977 1006 y Fk(b)1011 1039
8233
 
y Fu(5)1056 1006 y Fk(c)1090 1039 y Fu(7)1135 1006 y
8234
 
Fk(d)1174 1039 y Fu(11)1264 1006 y Fk(e)1301 1039 y Fu(13)1391
8235
 
1006 y Fk(f)1435 1039 y Fu(,)h(where)e Fl(e)p Fu(+)p
8236
 
Fl(f)43 b Fu(is)33 b(either)g(0)h(or)g(1,)h(and)e(the)h(other)g(exp)s
8237
 
(onen)m(ts)g(are)150 1149 y(arbitrary)-8 b(.)39 b(Other)27
 
8318
(handling)150 1406 y(sizes)33 b(of)h(the)g(form)g(2)892
 
8319
1373 y Fl(a)932 1406 y Fv(3)977 1373 y Fl(b)1011 1406
 
8320
y Fv(5)1056 1373 y Fl(c)1090 1406 y Fv(7)1135 1373 y
 
8321
Fl(d)1174 1406 y Fv(11)1264 1373 y Fl(e)1301 1406 y Fv(13)1391
 
8322
1373 y Fl(f)1435 1406 y Fv(,)h(where)e Fm(e)p Fv(+)p
 
8323
Fm(f)43 b Fv(is)33 b(either)g(0)h(or)g(1,)h(and)e(the)h(other)g(exp)s
 
8324
(onen)m(ts)g(are)150 1516 y(arbitrary)-8 b(.)39 b(Other)27
8238
8325
b(sizes)g(are)h(computed)f(b)m(y)g(means)h(of)f(a)h(slo)m(w,)g
8239
8326
(general-purp)s(ose)e(routine.)39 b(Ho)m(w)m(ev)m(er,)150
8240
 
1259 y(if)34 b(y)m(ou)h(ha)m(v)m(e)h(an)f(application)e(that)j
 
8327
1626 y(if)34 b(y)m(ou)h(ha)m(v)m(e)h(an)f(application)e(that)j
8241
8328
(requires)d(fast)j(transforms)e(of)h(size,)h(sa)m(y)-8
8242
 
b(,)37 b Fo(17)p Fu(,)f(there)f(is)f(a)h(w)m(a)m(y)h(to)150
8243
 
1368 y(generate)c(sp)s(ecialized)c(co)s(de)j(to)g(handle)e(that.)275
8244
 
1503 y(The)i(directory)g Fo(gensrc)g Fu(con)m(tains)h(all)f(the)h
 
8329
b(,)37 b Fp(17)p Fv(,)f(there)f(is)f(a)h(w)m(a)m(y)h(to)150
 
8330
1735 y(generate)c(sp)s(ecialized)c(co)s(de)j(to)g(handle)e(that.)275
 
8331
1870 y(The)i(directory)g Fp(gensrc)g Fv(con)m(tains)h(all)f(the)h
8245
8332
(programs)f(and)h(scripts)f(that)h(w)m(ere)h(used)e(to)h(generate)150
8246
 
1612 y(FFTW.)g(In)e(particular,)f(the)i(program)f Fo(gensrc/genfft.ml)c
8247
 
Fu(w)m(as)31 b(used)f(to)h(generate)i(the)d(co)s(de)h(that)150
8248
 
1722 y(FFTW)j(uses)f(to)h(compute)g(the)g(transforms.)49
 
8333
1979 y(FFTW.)g(In)e(particular,)f(the)i(program)f Fp(gensrc/genfft.ml)c
 
8334
Fv(w)m(as)31 b(used)f(to)h(generate)i(the)d(co)s(de)h(that)150
 
8335
2089 y(FFTW)j(uses)f(to)h(compute)g(the)g(transforms.)49
8249
8336
b(W)-8 b(e)35 b(do)e(not)h(exp)s(ect)g(casual)f(users)g(to)h(use)f(it.)
8250
 
50 b Fo(genfft)150 1831 y Fu(is)27 b(a)i(rather)f(sophisticated)g
 
8337
50 b Fp(genfft)150 2198 y Fv(is)27 b(a)i(rather)f(sophisticated)g
8251
8338
(program)g(that)h(generates)h(directed)e(acyclic)g(graphs)g(of)g(FFT)h
8252
 
(algorithms)150 1941 y(and)38 b(p)s(erforms)e(algebraic)i
8253
 
(simpli\014cations)d(on)j(them.)64 b Fo(genfft)36 b Fu(is)i(written)f
8254
 
(in)g(Ob)5 b(jectiv)m(e)38 b(Caml,)i(a)150 2051 y(dialect)g(of)h(ML.)g
 
8339
(algorithms)150 2308 y(and)38 b(p)s(erforms)e(algebraic)i
 
8340
(simpli\014cations)d(on)j(them.)64 b Fp(genfft)36 b Fv(is)i(written)f
 
8341
(in)g(Ob)5 b(jectiv)m(e)38 b(Caml,)i(a)150 2418 y(dialect)g(of)h(ML.)g
8255
8342
(Ob)5 b(jectiv)m(e)41 b(Caml)f(is)f(describ)s(ed)g(at)i
8256
 
Fo(http://pauillac.inria.fr/o)o(cam)o(l/)35 b Fu(and)150
8257
 
2160 y(can)c(b)s(e)e(do)m(wnloaded)h(from)g(from)g Fo
8258
 
(ftp://ftp.inria.fr/lang)o(/cam)o(l-l)o(ight)o Fu(.)275
8259
 
2295 y(If)37 b(y)m(ou)g(ha)m(v)m(e)i(Ob)5 b(jectiv)m(e)38
8260
 
b(Caml)e(installed,)i(y)m(ou)f(can)h(t)m(yp)s(e)g Fo(sh)30
8261
 
b(bootstrap.sh)k Fu(in)i(the)i(top-lev)m(el)150 2404
 
8343
Fp(http://pauillac.inria.fr/o)o(cam)o(l/)35 b Fv(and)150
 
8344
2527 y(can)c(b)s(e)e(do)m(wnloaded)h(from)g(from)g Fp
 
8345
(ftp://ftp.inria.fr/lang)o(/cam)o(l-l)o(ight)o Fv(.)275
 
8346
2662 y(If)37 b(y)m(ou)g(ha)m(v)m(e)i(Ob)5 b(jectiv)m(e)38
 
8347
b(Caml)e(installed,)i(y)m(ou)f(can)h(t)m(yp)s(e)g Fp(sh)30
 
8348
b(bootstrap.sh)k Fv(in)i(the)i(top-lev)m(el)150 2771
8262
8349
y(directory)32 b(to)i(re-generate)h(the)e(\014les.)47
8263
 
b(If)33 b(y)m(ou)g(c)m(hange)h(the)f Fo(gensrc/config)c
8264
 
Fu(\014le,)k(y)m(ou)g(can)h(optimize)150 2514 y(FFTW)d(for)f(sizes)g
 
8350
b(If)33 b(y)m(ou)g(c)m(hange)h(the)f Fp(gensrc/config)c
 
8351
Fv(\014le,)k(y)m(ou)g(can)h(optimize)150 2881 y(FFTW)d(for)f(sizes)g
8265
8352
(that)h(are)g(not)g(curren)m(tly)e(supp)s(orted)g(e\016cien)m(tly)h
8266
 
(\(sa)m(y)-8 b(,)32 b(17)f(or)f(19\).)275 2648 y(W)-8
 
8353
(\(sa)m(y)-8 b(,)32 b(17)f(or)f(19\).)275 3015 y(W)-8
8267
8354
b(e)44 b(do)e(not)h(pro)m(vide)f(more)h(details)f(ab)s(out)g(the)h(co)s
8268
8355
(de-generation)h(pro)s(cess,)i(since)c(w)m(e)h(do)g(not)150
8269
 
2758 y(exp)s(ect)32 b(that)g(users)e(will)f(need)i(to)h(generate)h
 
8356
3125 y(exp)s(ect)32 b(that)g(users)e(will)f(need)i(to)h(generate)h
8270
8357
(their)d(o)m(wn)h(co)s(de.)44 b(Ho)m(w)m(ev)m(er,)34
8271
 
b(feel)d(free)g(to)h(con)m(tact)i(us)c(at)150 2868 y
8272
 
Fo(fftw@fftw.org)d Fu(if)i(y)m(ou)i(are)g(in)m(terested)f(in)f(the)i
8273
 
(sub)5 b(ject.)275 3002 y(Y)-8 b(ou)21 b(migh)m(t)g(\014nd)f(it)g(in)m
 
8358
b(feel)d(free)g(to)h(con)m(tact)i(us)c(at)150 3235 y
 
8359
Fp(fftw@fftw.org)d Fv(if)i(y)m(ou)i(are)g(in)m(terested)f(in)f(the)i
 
8360
(sub)5 b(ject.)275 3369 y(Y)-8 b(ou)21 b(migh)m(t)g(\014nd)f(it)g(in)m
8274
8361
(teresting)h(to)h(learn)e(Caml)g(and/or)h(some)h(mo)s(dern)d
8275
 
(programming)h(tec)m(hniques)150 3112 y(that)39 b(w)m(e)f(used)f(in)g
 
8362
(programming)h(tec)m(hniques)150 3479 y(that)39 b(w)m(e)f(used)f(in)g
8276
8363
(the)h(generator)h(\(including)c(monadic)i(programming\),)i(esp)s
8277
 
(ecially)d(if)h(y)m(ou)i(heard)150 3221 y(the)d(rumor)f(that)h(Ja)m(v)
 
8364
(ecially)d(if)h(y)m(ou)i(heard)150 3588 y(the)d(rumor)f(that)h(Ja)m(v)
8278
8365
-5 b(a)37 b(and)f(ob)5 b(ject-orien)m(ted)37 b(programming)d(are)j(the)
8279
 
f(latest)g(adv)-5 b(ancemen)m(t)37 b(in)e(the)150 3331
 
8366
f(latest)g(adv)-5 b(ancemen)m(t)37 b(in)e(the)150 3698
8280
8367
y(\014eld.)60 b(The)37 b(in)m(ternal)f(op)s(eration)h(of)h(the)f(co)s
8281
8368
(delet)h(generator)g(is)f(describ)s(ed)e(in)h(the)h(pap)s(er,)i(\\A)f
8282
 
(F)-8 b(ast)150 3440 y(F)g(ourier)32 b(T)-8 b(ransform)31
 
8369
(F)-8 b(ast)150 3807 y(F)g(ourier)32 b(T)-8 b(ransform)31
8283
8370
b(Compiler,")h(b)m(y)g(M.)h(F)-8 b(rigo,)33 b(whic)m(h)e(is)h(a)m(v)-5
8284
 
b(ailable)31 b(from)h(the)h(FFTW)g(home)f(page)150 3550
8285
 
y(\()p Fo(http://www.fftw.org)p Fu(\))e(and)k(will)f(app)s(ear)h(in)f
8286
 
(the)i Fp(Pro)s(ceedings)f(of)h(the)g(1999)i(A)m(CM)e(SIGPLAN)150
8287
 
3660 y(Conference)30 b(on)h(Programming)e(Language)j(Design)e(and)g
8288
 
(Implemen)m(tation)f(\(PLDI\))p Fu(.)p eop
 
8371
b(ailable)31 b(from)h(the)h(FFTW)g(home)f(page)150 3917
 
8372
y(\()p Fp(http://www.fftw.org)p Fv(\))e(and)k(will)f(app)s(ear)h(in)f
 
8373
(the)i Fq(Pro)s(ceedings)f(of)h(the)g(1999)i(A)m(CM)e(SIGPLAN)150
 
8374
4027 y(Conference)30 b(on)h(Programming)e(Language)j(Design)e(and)g
 
8375
(Implemen)m(tation)f(\(PLDI\))p Fv(.)p eop end
8289
8376
%%Page: 60 62
8290
 
60 61 bop 150 -116 a Fu(60)3232 b(FFTW)p eop
 
8377
TeXDict begin 60 61 bop 150 -116 a Fv(60)3232 b(FFTW)p
 
8378
eop end
8291
8379
%%Page: 61 63
8292
 
61 62 bop 150 -116 a Fu(Chapter)30 b(7:)41 b(Ac)m(kno)m(wledgmen)m(ts)
8293
 
2335 b(61)150 299 y Fr(7)80 b(Ac)l(kno)l(wledgmen)l(ts)275
8294
 
533 y Fu(Matteo)28 b(F)-8 b(rigo)27 b(w)m(as)f(supp)s(orted)e(in)h
8295
 
(part)h(b)m(y)g(the)g(Defense)h(Adv)-5 b(anced)26 b(Researc)m(h)h(Pro)5
8296
 
b(jects)27 b(Agency)150 643 y(\(D)m(ARP)-8 b(A\))33 b(under)c(Gran)m
8297
 
(ts)j(N00014-94-1-0985)37 b(and)30 b(F30602-97-1-0270)q(,)37
8298
 
b(and)30 b(b)m(y)h(a)g(Digital)g(Equip-)150 752 y(men)m(t)d(Corp)s
8299
 
(oration)d(F)-8 b(ello)m(wship.)38 b(Stev)m(en)28 b(G.)g(Johnson)e(w)m
8300
 
(as)h(supp)s(orted)e(in)h(part)h(b)m(y)g(a)g(DoD)i(NDSEG)150
8301
 
862 y(F)-8 b(ello)m(wship,)33 b(an)g(MIT)h(Karl)e(T)-8
8302
 
b(a)m(ylor)34 b(Compton)f(F)-8 b(ello)m(wship,)33 b(and)g(b)m(y)h(the)g
8303
 
(Materials)f(Researc)m(h)i(Sci-)150 971 y(ence)43 b(and)f(Engineering)f
8304
 
(Cen)m(ter)i(program)f(of)h(the)f(National)h(Science)f(F)-8
8305
 
b(oundation)42 b(under)f(a)m(w)m(ard)150 1081 y(DMR-9400334.)275
8306
 
1215 y(Both)34 b(authors)g(w)m(ere)g(also)g(supp)s(orted)e(in)h(part)g
8307
 
(b)m(y)h(their)f(resp)s(ectiv)m(e)h(girlfriends,)e(b)m(y)i(the)g
8308
 
(letters)150 1325 y(\\Q")d(and)f(\\R",)h(and)f(b)m(y)g(the)h(n)m(um)m
8309
 
(b)s(er)e(12.)275 1460 y(W)-8 b(e)32 b(are)g(grateful)f(to)h(SUN)f
8310
 
(Microsystems)h(Inc.)f(for)g(its)g(donation)g(of)h(a)f(cluster)g(of)h
8311
 
(9)g(8-pro)s(cessor)150 1569 y(Ultra)h(HPC)g(5000)i(SMPs)d(\(24)j
8312
 
(G\015ops)d(p)s(eak\).)50 b(These)33 b(mac)m(hines)f(serv)m(ed)i(as)f
8313
 
(the)h(primary)d(platform)150 1679 y(for)f(the)h(dev)m(elopmen)m(t)f
8314
 
(of)h(earlier)e(v)m(ersions)h(of)h(FFTW.)275 1813 y(W)-8
8315
 
b(e)39 b(thank)e(In)m(tel)h(Corp)s(oration)e(for)i(donating)f(a)h
8316
 
(four-pro)s(cessor)f(P)m(en)m(tium)g(Pro)h(mac)m(hine.)63
8317
 
b(W)-8 b(e)150 1923 y(thank)30 b(the)h(Lin)m(ux)e(comm)m(unit)m(y)h
8318
 
(for)g(giving)f(us)h(a)g(decen)m(t)i(OS)d(to)i(run)e(on)i(that)g(mac)m
8319
 
(hine.)275 2057 y(The)22 b Fo(genfft)f Fu(program)i(w)m(as)h(written)e
8320
 
(using)f(Ob)5 b(jectiv)m(e)23 b(Caml,)h(a)g(dialect)e(of)h(ML.)h(Ob)5
8321
 
b(jectiv)m(e)23 b(Caml)150 2167 y(is)h(a)i(small)e(and)h(elegan)m(t)h
8322
 
(language)g(dev)m(elop)s(ed)f(b)m(y)g(Xa)m(vier)g(Lero)m(y)-8
8323
 
b(.)40 b(The)25 b(implemen)m(tation)f(is)h(a)m(v)-5 b(ailable)150
8324
 
2276 y(from)30 b Fo(ftp.inria.fr)e Fu(in)i(the)h(directory)f
8325
 
Fo(lang/caml-light)p Fu(.)39 b(W)-8 b(e)32 b(used)e(v)m(ersions)g(1.07)
8326
 
j(and)d(2.00)j(of)150 2386 y(the)39 b(soft)m(w)m(are.)66
8327
 
b(In)38 b(previous)f(releases)i(of)f(FFTW,)i Fo(genfft)d
8328
 
Fu(w)m(as)h(written)g(in)f(Caml)h(Ligh)m(t,)i(b)m(y)f(the)150
8329
 
2496 y(same)29 b(authors.)39 b(An)28 b(ev)m(en)h(earlier)f(implemen)m
8330
 
(tation)f(of)h Fo(genfft)f Fu(w)m(as)h(written)g(in)f(Sc)m(heme,)i(but)
8331
 
f(Caml)150 2605 y(is)h(de\014nitely)g(b)s(etter)h(for)g(this)g(kind)e
8332
 
(of)j(application.)275 2740 y(FFTW)47 b(uses)g(man)m(y)f(to)s(ols)h
8333
 
(from)g(the)g(GNU)g(pro)5 b(ject,)52 b(including)43 b
8334
 
Fo(automake)p Fu(,)49 b Fo(texinfo)p Fu(,)h(and)150 2849
8335
 
y Fo(libtool)p Fu(.)275 2984 y(Prof.)21 b(Charles)g(E.)h(Leiserson)e
8336
 
(of)i(MIT)g(pro)m(vided)e(con)m(tin)m(uous)i(supp)s(ort)e(and)h
8337
 
(encouragemen)m(t.)40 b(This)150 3093 y(program)33 b(w)m(ould)e(not)j
8338
 
(exist)e(without)g(him.)47 b(Charles)32 b(also)g(prop)s(osed)g(the)h
8339
 
(name)g(\\co)s(delets")h(for)f(the)150 3203 y(basic)d(FFT)g(blo)s(c)m
8340
 
(ks.)275 3337 y(Prof.)48 b(John)g(D.)h(Joannop)s(oulos)e(of)i(MIT)g
8341
 
(demonstrated)f(con)m(tin)m(uing)g(tolerance)h(of)g(Stev)m(en's)150
8342
 
3447 y(\\extra-curricular")32 b(computer-science)h(activities.)47
8343
 
b(Stev)m(en's)33 b(c)m(hances)h(at)f(a)g(ph)m(ysics)f(degree)h(w)m
8344
 
(ould)150 3557 y(not)e(exist)f(without)f(him.)275 3691
8345
 
y(Andrew)g(Sterian)g(con)m(tributed)h(the)g(Windo)m(ws)g(timing)f(co)s
8346
 
(de.)275 3826 y(Didier)34 b(Miras)i(rep)s(orted)g(a)h(bug)f(in)f(the)i
8347
 
(test)g(pro)s(cedure)e(used)h(in)f(FFTW)i(1.2.)60 b(W)-8
8348
 
b(e)38 b(no)m(w)e(use)h(a)150 3935 y(completely)32 b(di\013eren)m(t)g
8349
 
(test)h(algorithm)e(b)m(y)h(F)-8 b(unda)32 b(Ergun)f(that)i(do)s(es)f
8350
 
(not)g(require)f(a)h(separate)i(FFT)150 4045 y(program)c(to)h(compare)g
 
8380
TeXDict begin 61 62 bop 150 -116 a Fv(Chapter)30 b(7:)41
 
8381
b(Ac)m(kno)m(wledgmen)m(ts)2335 b(61)150 299 y Fs(7)80
 
8382
b(Ac)l(kno)l(wledgmen)l(ts)275 533 y Fv(Matteo)28 b(F)-8
 
8383
b(rigo)27 b(w)m(as)f(supp)s(orted)e(in)h(part)h(b)m(y)g(the)g(Defense)h
 
8384
(Adv)-5 b(anced)26 b(Researc)m(h)h(Pro)5 b(jects)27 b(Agency)150
 
8385
643 y(\(D)m(ARP)-8 b(A\))33 b(under)c(Gran)m(ts)j(N00014-94-1-0985)37
 
8386
b(and)30 b(F30602-97-1-0270)q(,)37 b(and)30 b(b)m(y)h(a)g(Digital)g
 
8387
(Equip-)150 752 y(men)m(t)d(Corp)s(oration)d(F)-8 b(ello)m(wship.)38
 
8388
b(Stev)m(en)28 b(G.)g(Johnson)e(w)m(as)h(supp)s(orted)e(in)h(part)h(b)m
 
8389
(y)g(a)g(DoD)i(NDSEG)150 862 y(F)-8 b(ello)m(wship,)33
 
8390
b(an)g(MIT)h(Karl)e(T)-8 b(a)m(ylor)34 b(Compton)f(F)-8
 
8391
b(ello)m(wship,)33 b(and)g(b)m(y)h(the)g(Materials)f(Researc)m(h)i
 
8392
(Sci-)150 971 y(ence)43 b(and)f(Engineering)f(Cen)m(ter)i(program)f(of)
 
8393
h(the)f(National)h(Science)f(F)-8 b(oundation)42 b(under)f(a)m(w)m(ard)
 
8394
150 1081 y(DMR-9400334.)275 1215 y(Both)34 b(authors)g(w)m(ere)g(also)g
 
8395
(supp)s(orted)e(in)h(part)g(b)m(y)h(their)f(resp)s(ectiv)m(e)h
 
8396
(girlfriends,)e(b)m(y)i(the)g(letters)150 1325 y(\\Q")d(and)f(\\R",)h
 
8397
(and)f(b)m(y)g(the)h(n)m(um)m(b)s(er)e(12.)275 1460 y(W)-8
 
8398
b(e)32 b(are)g(grateful)f(to)h(SUN)f(Microsystems)h(Inc.)f(for)g(its)g
 
8399
(donation)g(of)h(a)f(cluster)g(of)h(9)g(8-pro)s(cessor)150
 
8400
1569 y(Ultra)h(HPC)g(5000)i(SMPs)d(\(24)j(G\015ops)d(p)s(eak\).)50
 
8401
b(These)33 b(mac)m(hines)f(serv)m(ed)i(as)f(the)h(primary)d(platform)
 
8402
150 1679 y(for)f(the)h(dev)m(elopmen)m(t)f(of)h(earlier)e(v)m(ersions)h
 
8403
(of)h(FFTW.)275 1813 y(W)-8 b(e)39 b(thank)e(In)m(tel)h(Corp)s(oration)
 
8404
e(for)i(donating)f(a)h(four-pro)s(cessor)f(P)m(en)m(tium)g(Pro)h(mac)m
 
8405
(hine.)63 b(W)-8 b(e)150 1923 y(thank)30 b(the)h(Lin)m(ux)e(comm)m
 
8406
(unit)m(y)h(for)g(giving)f(us)h(a)g(decen)m(t)i(OS)d(to)i(run)e(on)i
 
8407
(that)g(mac)m(hine.)275 2057 y(The)22 b Fp(genfft)f Fv(program)i(w)m
 
8408
(as)h(written)e(using)f(Ob)5 b(jectiv)m(e)23 b(Caml,)h(a)g(dialect)e
 
8409
(of)h(ML.)h(Ob)5 b(jectiv)m(e)23 b(Caml)150 2167 y(is)h(a)i(small)e
 
8410
(and)h(elegan)m(t)h(language)g(dev)m(elop)s(ed)f(b)m(y)g(Xa)m(vier)g
 
8411
(Lero)m(y)-8 b(.)40 b(The)25 b(implemen)m(tation)f(is)h(a)m(v)-5
 
8412
b(ailable)150 2276 y(from)30 b Fp(ftp.inria.fr)e Fv(in)i(the)h
 
8413
(directory)f Fp(lang/caml-light)p Fv(.)39 b(W)-8 b(e)32
 
8414
b(used)e(v)m(ersions)g(1.07)j(and)d(2.00)j(of)150 2386
 
8415
y(the)39 b(soft)m(w)m(are.)66 b(In)38 b(previous)f(releases)i(of)f
 
8416
(FFTW,)i Fp(genfft)d Fv(w)m(as)h(written)g(in)f(Caml)h(Ligh)m(t,)i(b)m
 
8417
(y)f(the)150 2496 y(same)29 b(authors.)39 b(An)28 b(ev)m(en)h(earlier)f
 
8418
(implemen)m(tation)f(of)h Fp(genfft)f Fv(w)m(as)h(written)g(in)f(Sc)m
 
8419
(heme,)i(but)f(Caml)150 2605 y(is)h(de\014nitely)g(b)s(etter)h(for)g
 
8420
(this)g(kind)e(of)j(application.)275 2740 y(FFTW)47 b(uses)g(man)m(y)f
 
8421
(to)s(ols)h(from)g(the)g(GNU)g(pro)5 b(ject,)52 b(including)43
 
8422
b Fp(automake)p Fv(,)49 b Fp(texinfo)p Fv(,)h(and)150
 
8423
2849 y Fp(libtool)p Fv(.)275 2984 y(Prof.)21 b(Charles)g(E.)h
 
8424
(Leiserson)e(of)i(MIT)g(pro)m(vided)e(con)m(tin)m(uous)i(supp)s(ort)e
 
8425
(and)h(encouragemen)m(t.)40 b(This)150 3093 y(program)33
 
8426
b(w)m(ould)e(not)j(exist)e(without)g(him.)47 b(Charles)32
 
8427
b(also)g(prop)s(osed)g(the)h(name)g(\\co)s(delets")h(for)f(the)150
 
8428
3203 y(basic)d(FFT)g(blo)s(c)m(ks.)275 3337 y(Prof.)48
 
8429
b(John)g(D.)h(Joannop)s(oulos)e(of)i(MIT)g(demonstrated)f(con)m(tin)m
 
8430
(uing)g(tolerance)h(of)g(Stev)m(en's)150 3447 y(\\extra-curricular")32
 
8431
b(computer-science)h(activities.)47 b(Stev)m(en's)33
 
8432
b(c)m(hances)h(at)f(a)g(ph)m(ysics)f(degree)h(w)m(ould)150
 
8433
3557 y(not)e(exist)f(without)f(him.)275 3691 y(Andrew)g(Sterian)g(con)m
 
8434
(tributed)h(the)g(Windo)m(ws)g(timing)f(co)s(de.)275
 
8435
3826 y(Didier)34 b(Miras)i(rep)s(orted)g(a)h(bug)f(in)f(the)i(test)g
 
8436
(pro)s(cedure)e(used)h(in)f(FFTW)i(1.2.)60 b(W)-8 b(e)38
 
8437
b(no)m(w)e(use)h(a)150 3935 y(completely)32 b(di\013eren)m(t)g(test)h
 
8438
(algorithm)e(b)m(y)h(F)-8 b(unda)32 b(Ergun)f(that)i(do)s(es)f(not)g
 
8439
(require)f(a)h(separate)i(FFT)150 4045 y(program)c(to)h(compare)g
8351
8440
(against.)275 4179 y(W)-8 b(olfgang)26 b(Reimer)f(con)m(tributed)g(the)
8352
8441
h(P)m(en)m(tium)f(cycle)h(coun)m(ter)g(and)g(a)g(few)f(\014xes)g(that)i
8353
8442
(help)d(p)s(orta-)150 4289 y(bilit)m(y)-8 b(.)275 4423
8355
8444
(in)f(the)i(complex)g(transforms)f(of)g(FFTW)i(2.0)150
8356
8445
4533 y(and)c(supplied)d(a)k(patc)m(h)g(to)g(correct)g(it.)275
8357
8446
4667 y(The)h(FFTW)h(F)-10 b(A)m(Q)33 b(w)m(as)g(written)f(in)f
8358
 
Fo(bfnn)g Fu(\(Bizarre)i(F)-8 b(ormat)34 b(With)e(No)i(Name\))f(and)f
 
8447
Fp(bfnn)g Fv(\(Bizarre)i(F)-8 b(ormat)34 b(With)e(No)i(Name\))f(and)f
8359
8448
(formatted)150 4777 y(using)d(the)h(to)s(ols)h(dev)m(elop)s(ed)e(b)m(y)
8360
8449
i(Ian)f(Jac)m(kson)h(for)f(the)h(Lin)m(ux)d(F)-10 b(A)m(Q.)275
8361
 
4912 y Fq(We)30 b(ar)-5 b(e)32 b(esp)-5 b(e)g(cial)5
 
8450
4912 y Fr(We)30 b(ar)-5 b(e)32 b(esp)-5 b(e)g(cial)5
8362
8451
b(ly)32 b(thankful)g(to)g(al)5 b(l)32 b(of)f(our)g(users)h(for)f(their)
8363
8452
h(c)-5 b(ontinuing)31 b(supp)-5 b(ort,)34 b(fe)-5 b(e)g(db)g(ack,)32
8364
8453
b(and)150 5021 y(inter)-5 b(est)33 b(during)g(our)g(development)i(of)d
8365
 
(FFTW.)p eop
 
8454
(FFTW.)p eop end
8366
8455
%%Page: 62 64
8367
 
62 63 bop 150 -116 a Fu(62)3232 b(FFTW)p eop
 
8456
TeXDict begin 62 63 bop 150 -116 a Fv(62)3232 b(FFTW)p
 
8457
eop end
8368
8458
%%Page: 63 65
8369
 
63 64 bop 150 -116 a Fu(Chapter)30 b(8:)41 b(License)30
8370
 
b(and)g(Cop)m(yrigh)m(t)2150 b(63)150 299 y Fr(8)80 b(License)53
8371
 
b(and)h(Cop)l(yrigh)l(t)275 533 y Fu(FFTW)31 b(is)e(cop)m(yrigh)m(t)
8372
 
1101 530 y(c)1076 533 y Fs(\015)h Fu(1997{1999)k(Massac)m(h)m(usetts)f
8373
 
(Institute)d(of)g(T)-8 b(ec)m(hnology)g(.)275 667 y(FFTW)31
8374
 
b(is)e(free)i(soft)m(w)m(are;)h(y)m(ou)f(can)g(redistribute)d(it)i
8375
 
(and/or)g(mo)s(dify)f(it)h(under)f(the)i(terms)f(of)h(the)150
8376
 
777 y(GNU)g(General)g(Public)d(License)i(as)h(published)26
8377
 
b(b)m(y)31 b(the)g(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8
8378
 
b(oundation;)30 b(either)g(v)m(ersion)150 887 y(2)h(of)f(the)h
8379
 
(License,)f(or)g(\(at)i(y)m(our)e(option\))g(an)m(y)h(later)f(v)m
8380
 
(ersion.)275 1021 y(This)37 b(program)i(is)g(distributed)d(in)i(the)i
8381
 
(hop)s(e)f(that)h(it)f(will)e(b)s(e)i(useful,)h(but)e(WITHOUT)h(ANY)150
8382
 
1131 y(W)-10 b(ARRANTY;)33 b(without)f(ev)m(en)h(the)f(implied)e(w)m
8383
 
(arran)m(t)m(y)j(of)g(MER)m(CHANT)-8 b(ABILITY)33 b(or)f(FITNESS)150
8384
 
1240 y(F)m(OR)e(A)g(P)-8 b(AR)g(TICULAR)30 b(PURPOSE.)f(See)h(the)g
8385
 
(GNU)g(General)g(Public)e(License)h(for)h(more)g(details.)275
8386
 
1375 y(Y)-8 b(ou)39 b(should)d(ha)m(v)m(e)k(receiv)m(ed)f(a)g(cop)m(y)h
8387
 
(of)f(the)f(GNU)i(General)e(Public)f(License)h(along)h(with)e(this)150
 
8459
TeXDict begin 63 64 bop 150 -116 a Fv(Chapter)30 b(8:)41
 
8460
b(License)30 b(and)g(Cop)m(yrigh)m(t)2150 b(63)150 299
 
8461
y Fs(8)80 b(License)53 b(and)h(Cop)l(yrigh)l(t)275 533
 
8462
y Fv(FFTW)31 b(is)e(cop)m(yrigh)m(t)1101 530 y(c)1076
 
8463
533 y Ft(\015)h Fv(1997{1999)k(Massac)m(h)m(usetts)f(Institute)d(of)g
 
8464
(T)-8 b(ec)m(hnology)g(.)275 667 y(FFTW)31 b(is)e(free)i(soft)m(w)m
 
8465
(are;)h(y)m(ou)f(can)g(redistribute)d(it)i(and/or)g(mo)s(dify)f(it)h
 
8466
(under)f(the)i(terms)f(of)h(the)150 777 y(GNU)g(General)g(Public)d
 
8467
(License)i(as)h(published)26 b(b)m(y)31 b(the)g(F)-8
 
8468
b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation;)30 b(either)g(v)m(ersion)
 
8469
150 887 y(2)h(of)f(the)h(License,)f(or)g(\(at)i(y)m(our)e(option\))g
 
8470
(an)m(y)h(later)f(v)m(ersion.)275 1021 y(This)37 b(program)i(is)g
 
8471
(distributed)d(in)i(the)i(hop)s(e)f(that)h(it)f(will)e(b)s(e)i(useful,)
 
8472
h(but)e(WITHOUT)h(ANY)150 1131 y(W)-10 b(ARRANTY;)33
 
8473
b(without)f(ev)m(en)h(the)f(implied)e(w)m(arran)m(t)m(y)j(of)g(MER)m
 
8474
(CHANT)-8 b(ABILITY)33 b(or)f(FITNESS)150 1240 y(F)m(OR)e(A)g(P)-8
 
8475
b(AR)g(TICULAR)30 b(PURPOSE.)f(See)h(the)g(GNU)g(General)g(Public)e
 
8476
(License)h(for)h(more)g(details.)275 1375 y(Y)-8 b(ou)39
 
8477
b(should)d(ha)m(v)m(e)k(receiv)m(ed)f(a)g(cop)m(y)h(of)f(the)f(GNU)i
 
8478
(General)e(Public)f(License)h(along)h(with)e(this)150
8388
8479
1484 y(program;)56 b(if)46 b(not,)52 b(write)47 b(to)h(the)g(F)-8
8389
8480
b(ree)48 b(Soft)m(w)m(are)h(F)-8 b(oundation,)51 b(Inc.,)h(59)c(T)-8
8390
8481
b(emple)47 b(Place,)52 b(Suite)150 1594 y(330,)g(Boston,)f(MA)c
8391
8482
(02111-1307)j(USA.)c(Y)-8 b(ou)47 b(can)g(also)f(\014nd)e(the)j(GPL)f
8392
 
(on)g(the)g(GNU)h(w)m(eb)f(site)150 1704 y(\()p Fo
8393
 
(http://www.gnu.org/copylef)o(t/g)o(pl.h)o(tml)p Fu(\).)275
 
8483
(on)g(the)g(GNU)h(w)m(eb)f(site)150 1704 y(\()p Fp
 
8484
(http://www.gnu.org/copylef)o(t/g)o(pl.h)o(tml)p Fv(\).)275
8394
8485
1838 y(In)33 b(addition,)g(w)m(e)h(kindly)d(ask)j(y)m(ou)g(to)h(ac)m
8395
8486
(kno)m(wledge)g(FFTW)g(and)e(its)g(authors)h(in)e(an)m(y)i(program)150
8396
8487
1948 y(or)j(publication)e(in)h(whic)m(h)g(y)m(ou)h(use)g(FFTW.)i(\(Y)-8
8397
 
b(ou)38 b(are)f(not)h Fq(r)-5 b(e)g(quir)g(e)g(d)48 b
8398
 
Fu(to)38 b(do)f(so;)42 b(it)36 b(is)h(up)f(to)i(y)m(our)150
 
8488
b(ou)38 b(are)f(not)h Fr(r)-5 b(e)g(quir)g(e)g(d)48 b
 
8489
Fv(to)38 b(do)f(so;)42 b(it)36 b(is)h(up)f(to)i(y)m(our)150
8399
8490
2057 y(common)31 b(sense)f(to)h(decide)f(whether)g(y)m(ou)g(w)m(an)m(t)
8400
8491
i(to)f(comply)e(with)g(this)h(request)g(or)g(not.\))275
8401
8492
2192 y(Non-free)g(v)m(ersions)f(of)h(FFTW)g(are)h(a)m(v)-5
8407
8498
m(ou)g(m)m(ust)g(purc)m(hase)f(a)i(license)d(from)150
8408
8499
2521 y(MIT's)39 b(T)-8 b(ec)m(hnology)40 b(Licensing)d(O\016ce.)67
8409
8500
b(Users)39 b(in)m(terested)g(in)f(suc)m(h)h(a)g(license)f(should)f(con)
8410
 
m(tact)42 b(us)150 2630 y(\()p Fo(fftw@fftw.org)p Fu(\))27
8411
 
b(for)k(more)f(information.)p eop
 
8501
m(tact)42 b(us)150 2630 y(\()p Fp(fftw@fftw.org)p Fv(\))27
 
8502
b(for)k(more)f(information.)p eop end
8412
8503
%%Page: 64 66
8413
 
64 65 bop 150 -116 a Fu(64)3232 b(FFTW)p eop
 
8504
TeXDict begin 64 65 bop 150 -116 a Fv(64)3232 b(FFTW)p
 
8505
eop end
8414
8506
%%Page: 65 67
8415
 
65 66 bop 150 -116 a Fu(Chapter)30 b(9:)41 b(Concept)30
8416
 
b(Index)2463 b(65)150 299 y Fr(9)80 b(Concept)52 b(Index)150
8417
 
651 y Ft(A)150 785 y Fd(algorithm)21 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)
8418
 
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
8419
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(2)150
8420
 
1058 y Ft(B)150 1193 y Fb(benchfft)8 b Fc(.)14 b(.)e(.)h(.)f(.)g(.)h(.)
8421
 
f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8422
 
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34
8423
 
b Fd(1)150 1294 y(b)r(enc)n(hmark)12 b Fc(.)f(.)h(.)h(.)f(.)g(.)h(.)f
8424
 
(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8425
 
39 b Fd(1,)26 b(40,)h(49,)f(58)150 1394 y(blo)r(c)n(king)e
8426
 
Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8427
 
(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8428
 
g(.)h(.)49 b Fd(43)150 1667 y Ft(C)150 1802 y Fd(C)26
8429
 
b(m)n(ulti-dimensional)f(arra)n(ys)16 b Fc(.)d(.)f(.)g(.)h(.)f(.)g(.)h
8430
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fd(12)150
8431
 
1902 y(Caml)12 b Fc(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8432
 
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8433
 
g(.)h(.)f(.)g(.)h(.)38 b Fd(59,)26 b(61)150 2003 y(Cilk)15
8434
 
b Fc(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8435
 
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8436
 
(.)g(.)h(.)f(.)41 b Fd(2,)26 b(37)150 2104 y Fb(clock)11
8437
 
b Fc(.)j(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8438
 
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8439
 
(.)g(.)h(.)f(.)g(.)37 b Fd(58)150 2204 y(co)r(de)26 b(generator)21
8440
 
b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8441
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fd(1,)26
8442
 
b(59)150 2305 y(column-ma)t(jor)e Fc(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f
8443
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50
8444
 
b Fd(11,)27 b(52,)f(54)150 2406 y(compiler)10 b Fc(.)j(.)f(.)g(.)h(.)f
8445
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8446
 
h(.)36 b Fd(2,)26 b(51,)h(55,)g(56,)f(57)150 2507 y(compiler)g(\015ags)
8447
 
16 b Fc(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8448
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)43 b Fd(55,)26
 
8507
TeXDict begin 65 66 bop 150 -116 a Fv(Chapter)30 b(9:)41
 
8508
b(Concept)30 b(Index)2463 b(65)150 299 y Fs(9)80 b(Concept)52
 
8509
b(Index)150 642 y Fu(A)150 777 y Fj(algorithm)21 b Ff(.)12
 
8510
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8511
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8512
47 b Fj(2)150 1069 y Fu(B)150 1204 y Fi(benchfft)8 b
 
8513
Ff(.)14 b(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8514
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8515
h(.)f(.)g(.)34 b Fj(1)150 1301 y(b)r(enc)n(hmark)12 b
 
8516
Ff(.)f(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
 
8517
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fj(1,)26 b(40,)h(49,)f(58)150
 
8518
1399 y(blo)r(c)n(king)e Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8519
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8520
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)49 b Fj(43)150 1691 y
 
8521
Fu(C)150 1826 y Fj(C)26 b(m)n(ulti-dimensional)f(arra)n(ys)16
 
8522
b Ff(.)d(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8523
f(.)g(.)42 b Fj(12)150 1923 y(Caml)12 b Ff(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8524
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8525
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fj(59,)26
 
8526
b(61)150 2021 y(Cilk)15 b Ff(.)e(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8527
h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8528
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fj(2,)26
 
8529
b(37)150 2119 y Fi(clock)11 b Ff(.)j(.)e(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8530
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8531
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)37 b Fj(58)150
 
8532
2217 y(co)r(de)26 b(generator)21 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8533
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8534
(.)g(.)h(.)45 b Fj(1,)26 b(59)150 2314 y(column-ma)t(jor)e
 
8535
Ff(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8536
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50 b Fj(11,)27 b(52,)f(54)150
 
8537
2412 y(compiler)10 b Ff(.)j(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8538
(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)36 b Fj(2,)26
 
8539
b(51,)h(55,)g(56,)f(58)150 2510 y(compiler)g(\015ags)16
 
8540
b Ff(.)d(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8541
g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)43 b Fj(55,)26
8449
8542
b(56)150 2607 y(complex)f(m)n(ulti-dimensional)f(transform)d
8450
 
Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(4,)26 b(22)150
8451
 
2708 y(complex)f(n)n(um)n(b)r(er)13 b Fc(.)e(.)h(.)g(.)g(.)h(.)f(.)g(.)
 
8543
Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)47 b Fj(4,)26 b(22)150
 
8544
2705 y(complex)f(n)n(um)n(b)r(er)13 b Ff(.)e(.)h(.)g(.)g(.)h(.)f(.)g(.)
8452
8545
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8453
 
(.)h(.)f(.)g(.)39 b Fd(17)150 2809 y(complex)25 b(one-dimensional)g
8454
 
(transform)e Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49
8455
 
b Fd(3)150 2909 y(complex)25 b(to)h(real)g(transform)12
8456
 
b Fc(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8457
 
f(.)38 b Fd(6,)26 b(26)150 3010 y(complex)f(transform)14
8458
 
b Fc(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8459
 
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 b Fd(3)150
8460
 
3111 y Fb(configure)12 b Fc(.)i(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8461
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fd(18,)26
8462
 
b(37,)h(41,)g(55,)f(57)150 3211 y(con)n(v)n(olution)7
8463
 
b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8546
(.)h(.)f(.)g(.)39 b Fj(17)150 2803 y(complex)25 b(one-dimensional)g
 
8547
(transform)e Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)49
 
8548
b Fj(3)150 2901 y(complex)25 b(to)h(real)g(transform)12
 
8549
b Ff(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8550
f(.)38 b Fj(6,)26 b(26)150 2998 y(complex)f(transform)14
 
8551
b Ff(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8552
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)40 b Fj(3)150
 
8553
3096 y Fi(configure)12 b Ff(.)i(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8554
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fj(18,)26
 
8555
b(37,)h(41,)g(55,)f(57)150 3194 y(con)n(v)n(olution)7
 
8556
b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8464
8557
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8465
 
32 b Fd(10)150 3312 y(cyclic)26 b(con)n(v)n(olution)10
8466
 
b Fc(.)j(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8467
 
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(10)150
8468
 
3585 y Ft(D)150 3720 y Fd(Discrete)26 b(F)-6 b(ourier)26
8469
 
b(T)-6 b(ransform)24 b Fc(.)13 b(.)f(.)g(.)h(.)50 b Fd(21,)26
8470
 
b(25,)h(28,)g(33,)f(34)150 3820 y(distributed)f(arra)n(y)h(format)12
8471
 
b Fc(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38
8472
 
b Fd(43,)27 b(46,)f(48)150 3921 y(distributed)f(memory)17
8473
 
b Fc(.)10 b(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8474
 
(.)g(.)h(.)42 b Fd(37,)27 b(40,)f(43)150 4193 y Ft(E)150
8475
 
4328 y Fd(Ecclesiastes)f Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8558
32 b Fj(10)150 3291 y(cyclic)26 b(con)n(v)n(olution)10
 
8559
b Ff(.)j(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8560
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fj(10)150
 
8561
3583 y Fu(D)150 3718 y Fj(Discrete)26 b(F)-6 b(ourier)26
 
8562
b(T)-6 b(ransform)13 b Ff(.)g(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)39
 
8563
b Fj(21,)27 b(25,)g(28,)f(33)150 3816 y(distributed)f(arra)n(y)h
 
8564
(format)12 b Ff(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8565
(.)38 b Fj(43,)27 b(46,)f(48)150 3913 y(distributed)f(memory)17
 
8566
b Ff(.)10 b(.)i(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8567
(.)g(.)h(.)42 b Fj(37,)27 b(40,)f(43)150 4205 y Fu(E)150
 
8568
4340 y Fj(Ecclesiastes)f Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8476
8569
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8477
 
g(.)h(.)f(.)g(.)h(.)48 b Fd(14)150 4429 y(executor)23
8478
 
b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
 
8570
g(.)h(.)f(.)g(.)h(.)48 b Fj(14)150 4438 y(executor)23
 
8571
b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
8479
8572
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8480
 
h(.)f(.)g(.)49 b Fd(1)150 4702 y Ft(F)150 4836 y Fd(FFTW)11
8481
 
b Fc(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
 
8573
h(.)f(.)g(.)49 b Fj(1)150 4717 y Fu(F)150 4851 y Fj(FFTW)11
 
8574
b Ff(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
8482
8575
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8483
 
(.)f(.)g(.)h(.)f(.)37 b Fd(1)150 4937 y(FFTWND)6 b Fc(.)13
 
8576
(.)f(.)g(.)h(.)f(.)37 b Fj(1)150 4949 y(FFTWND)6 b Ff(.)13
8484
8577
b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8485
8578
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)32
8486
 
b Fd(22)150 5038 y(\015ags)22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8487
 
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(4,)26
8488
 
b(5,)h(19,)g(23,)f(27,)h(30,)g(47,)f(52)150 5139 y(\015oating-p)r(oin)n
8489
 
(t)g(precision)21 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46
8490
 
b Fd(18,)26 b(52,)h(55,)g(56,)f(57)150 5239 y(F)-6 b(ortran-callable)27
8491
 
b(wrapp)r(ers)8 b Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8492
 
(.)h(.)34 b Fd(12,)27 b(51,)f(56)150 5340 y(frequency)8
8493
 
b Fc(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8579
b Fj(22)150 5047 y(\015ags)22 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8580
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fj(4,)26
 
8581
b(5,)h(19,)g(23,)f(27,)h(30,)g(47,)f(52)150 5145 y(\015oating-p)r(oin)n
 
8582
(t)g(precision)21 b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46
 
8583
b Fj(18,)26 b(52,)h(55,)g(56,)f(57)150 5242 y(F)-6 b(ortran-callable)27
 
8584
b(wrapp)r(ers)8 b Ff(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8585
(.)h(.)34 b Fj(12,)27 b(51,)f(56)150 5340 y(frequency)8
 
8586
b Ff(.)k(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8494
8587
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)34
8495
 
b Fd(4,)26 b(5,)g(21)2025 651 y Ft(G)2025 798 y Fb(gettimeofday)c
8496
 
Fc(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8588
b Fj(4,)26 b(5,)g(21)2025 642 y Fu(G)2025 765 y Fi(gettimeofday)c
 
8589
Ff(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8497
8590
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45
8498
 
b Fd(58)2025 905 y(girlfriends)14 b Fc(.)g(.)e(.)g(.)h(.)f(.)g(.)h(.)f
8499
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
8500
 
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fd(61)2025 1212
8501
 
y Ft(H)2025 1360 y Fd(halfcomplex)25 b(arra)n(y)20 b
8502
 
Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8503
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fd(6,)26 b(17)2025
8504
 
1466 y(hermitian)f(arra)n(y)c Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8505
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46
8506
 
b Fd(17,)27 b(34)2025 1774 y Ft(I)2025 1922 y Fd(in-place)c(transform)8
8507
 
b Fc(.)13 b(.)32 b Fd(5,)24 b(19,)h(21,)g(25,)g(30,)g(32,)g(40,)g(42,)g
8508
 
(51)2025 2028 y(installation)12 b Fc(.)i(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)
8509
 
h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8510
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fd(55)2025 2336 y
8511
 
Ft(L)2025 2483 y Fd(linking)26 b(on)f(Unix)13 b Fc(.)e(.)i(.)f(.)g(.)h
8512
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fd(4,)27
8513
 
b(7,)f(39,)h(43,)f(47,)h(48)2025 2590 y(LISP)16 b Fc(.)c(.)g(.)h(.)f(.)
8514
 
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8515
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)42
8516
 
b Fd(15,)27 b(61)2025 2696 y(load-balancing)11 b Fc(.)j(.)e(.)g(.)h(.)f
8517
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
8518
 
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37 b Fd(48)2025 3004
8519
 
y Ft(M)2025 3151 y Fb(malloc)22 b Fc(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f
8520
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8521
 
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fd(12,)27 b(36)2025
8522
 
3258 y(ML)14 b Fc(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8523
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
8524
 
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39 b Fd(59)2025
8525
 
3364 y(monadic)25 b(programming)c Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h
8526
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48
8527
 
b Fd(59)2025 3471 y(MPI)13 b Fc(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8528
 
(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8529
 
f(.)g(.)h(.)38 b Fd(2,)27 b(37,)f(40,)h(56)2025 3577
8530
 
y Fb(MPI_Alltoall)e Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8531
 
(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49
8532
 
b Fd(41,)26 b(42,)h(48)2025 3684 y Fb(MPI_Barrier)c Fc(.)12
 
8591
b Fj(58)2025 857 y(girlfriends)14 b Ff(.)g(.)e(.)g(.)h(.)f(.)g(.)h(.)f
 
8592
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
 
8593
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fj(61)2025 1116
 
8594
y Fu(H)2025 1238 y Fj(halfcomplex)25 b(arra)n(y)20 b
 
8595
Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8596
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fj(6,)26 b(17)2025
 
8597
1330 y(hermitian)f(arra)n(y)13 b Ff(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8598
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39
 
8599
b Fj(17,)26 b(33,)h(34)2025 1590 y Fu(I)2025 1712 y Fj(in-place)c
 
8600
(transform)8 b Ff(.)13 b(.)32 b Fj(5,)24 b(19,)h(21,)g(24,)g(30,)g(32,)
 
8601
g(40,)g(42,)g(51)2025 1804 y(installation)12 b Ff(.)i(.)e(.)h(.)f(.)g
 
8602
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8603
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)38 b Fj(55)2025
 
8604
2050 y Fu(L)2025 2173 y Fj(linking)26 b(on)f(Unix)13
 
8605
b Ff(.)e(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38
 
8606
b Fj(4,)27 b(7,)f(39,)h(43,)f(47,)h(48)2025 2265 y(LISP)16
 
8607
b Ff(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8608
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h
 
8609
(.)f(.)42 b Fj(15,)27 b(61)2025 2356 y(load-balancing)11
 
8610
b Ff(.)j(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8611
f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)37
 
8612
b Fj(48)2025 2616 y Fu(M)2025 2738 y Fi(malloc)22 b Ff(.)12
 
8613
b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8614
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46
 
8615
b Fj(12,)27 b(35)2025 2830 y(ML)14 b Ff(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8616
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8617
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)39
 
8618
b Fj(59)2025 2922 y(monadic)25 b(programming)c Ff(.)13
 
8619
b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8620
(.)g(.)h(.)f(.)g(.)48 b Fj(59)2025 3014 y(MPI)13 b Ff(.)f(.)h(.)f(.)g
 
8621
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8622
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)38 b Fj(2,)27 b(37,)f(40,)h(56)2025
 
8623
3106 y Fi(MPI_Alltoall)e Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8624
(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)49
 
8625
b Fj(41,)26 b(42,)h(48)2025 3197 y Fi(MPI_Barrier)c Ff(.)12
8533
8626
b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8534
8627
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46
8535
 
b Fd(43)2025 3791 y Fb(MPI_COMM_WORLD)9 b Fc(.)15 b(.)d(.)h(.)f(.)g(.)h
 
8628
b Fj(43)2025 3289 y Fi(MPI_COMM_WORLD)9 b Ff(.)15 b(.)d(.)h(.)f(.)g(.)h
8536
8629
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8537
 
g(.)h(.)34 b Fd(42,)27 b(47)2025 3897 y Fb(MPI_Finalize)22
8538
 
b Fc(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8630
g(.)h(.)34 b Fj(42,)27 b(47)2025 3381 y Fi(MPI_Finalize)22
 
8631
b Ff(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8539
8632
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45
8540
 
b Fd(42)2025 4004 y Fb(MPI_Init)7 b Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h
 
8633
b Fj(42)2025 3473 y Fi(MPI_Init)7 b Ff(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h
8541
8634
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8542
 
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fd(42)2025
8543
 
4110 y(m)n(ulti-dimensional)24 b(transform)19 b Fc(.)12
8544
 
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fd(4,)26
8545
 
b(22,)h(29)2025 4418 y Ft(N)2025 4565 y Fd(n)p 2073 4565
8546
 
24 4 v 27 w(\014elds)17 b Fc(.)c(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
 
8635
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)32 b Fj(42)2025
 
8636
3565 y(m)n(ulti-dimensional)24 b(transform)19 b Ff(.)12
 
8637
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)44 b Fj(4,)26
 
8638
b(22,)h(29)2025 3824 y Fu(N)2025 3946 y Fj(n)p 2073 3946
 
8639
24 4 v 27 w(\014elds)17 b Ff(.)c(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
8547
8640
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8548
 
(.)f(.)g(.)h(.)f(.)g(.)43 b Fd(42,)27 b(47)2025 4672
8549
 
y(nerd-readable)e(text)18 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8641
(.)f(.)g(.)h(.)f(.)g(.)43 b Fj(42,)27 b(47)2025 4038
 
8642
y(nerd-readable)e(text)18 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8550
8643
(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8551
 
44 b Fd(15)2025 4778 y(normalization)13 b Fc(.)g(.)f(.)g(.)h(.)f(.)g(.)
8552
 
h(.)f(.)g(.)h(.)f(.)39 b Fd(4,)26 b(5,)g(7,)h(8,)f(11,)h(21,)f(29,)h
8553
 
(43)2025 4885 y(n)n(um)n(b)r(er)c(of)k(threads)19 b Fc(.)13
 
8644
44 b Fj(15)2025 4130 y(normalization)13 b Ff(.)g(.)f(.)g(.)h(.)f(.)g(.)
 
8645
h(.)f(.)g(.)h(.)f(.)39 b Fj(4,)26 b(5,)g(7,)h(8,)f(11,)h(21,)f(29,)h
 
8646
(43)2025 4222 y(n)n(um)n(b)r(er)c(of)k(threads)19 b Ff(.)13
8554
8647
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8555
 
(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)45 b Fd(39)2025 5192
8556
 
y Ft(O)2025 5340 y Fd(out-of-place)26 b(transform)9 b
8557
 
Fc(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8558
 
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)35 b Fd(5)p eop
 
8648
(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)45 b Fj(39)2025 4468
 
8649
y Fu(O)2025 4591 y Fj(out-of-place)26 b(transform)9 b
 
8650
Ff(.)j(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8651
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)35 b Fj(5)2025 4850 y
 
8652
Fu(P)2025 4973 y Fj(padding)16 b Ff(.)11 b(.)i(.)f(.)g(.)h(.)f(.)g(.)h
 
8653
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
 
8654
g(.)h(.)f(.)g(.)h(.)41 b Fj(8,)26 b(32,)h(46)2025 5065
 
8655
y(parallel)g(transform)21 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8656
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47
 
8657
b Fj(2,)26 b(37)2025 5156 y(P)n(en)n(tium)e(hac)n(k)f
 
8658
Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8659
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)49
 
8660
b Fj(57)2025 5248 y(plan)24 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8661
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
 
8662
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)50 b Fj(1,)26 b(3,)g(42)2025
 
8663
5340 y(planner)20 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
 
8664
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8665
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fj(1)p eop end
8559
8666
%%Page: 66 68
8560
 
66 67 bop 150 -116 a Fu(66)3232 b(FFTW)150 299 y Ft(P)150
8561
 
440 y Fd(padding)16 b Fc(.)c(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8667
TeXDict begin 66 67 bop 150 -116 a Fv(66)3232 b(FFTW)150
 
8668
299 y Fj(p)r(o)n(w)n(er)26 b(sp)r(ectrum)7 b Ff(.)k(.)h(.)h(.)f(.)g(.)h
 
8669
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8670
g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fj(7)150 556 y Fu(R)150
 
8671
678 y Fj(rank)16 b Ff(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8672
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8673
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)42 b Fj(4)150
 
8674
769 y(real)27 b(m)n(ulti-dimensional)d(transform)g Ff(.)12
 
8675
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fj(7,)26
 
8676
b(29)150 860 y(real)h(n)n(um)n(b)r(er)16 b Ff(.)10 b(.)j(.)f(.)g(.)h(.)
 
8677
f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8678
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fj(17)150
 
8679
952 y(real)27 b(transform)10 b Ff(.)i(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8680
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
 
8681
f(.)g(.)36 b Fj(6,)26 b(26)150 1043 y(RFFTW)12 b Ff(.)g(.)g(.)h(.)f(.)g
 
8682
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8683
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)38 b Fj(6,)26
 
8684
b(26)150 1135 y(RFFTWND)14 b Ff(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8685
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8686
f(.)g(.)g(.)h(.)f(.)40 b Fj(29)150 1226 y(r\013t)n(wnd)25
 
8687
b(arra)n(y)h(format)13 b Ff(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8688
(.)g(.)h(.)f(.)g(.)40 b Fj(8,)26 b(32,)h(46,)f(54)150
 
8689
1318 y(ro)n(w-ma)t(jor)12 b Ff(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8690
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8691
38 b Fj(11,)27 b(23,)f(44)150 1575 y Fu(S)150 1696 y
 
8692
Fj(sa)n(ving)g(plans)g(to)g(disk)13 b Ff(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8562
8693
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8563
 
(.)f(.)41 b Fd(8,)27 b(32,)f(46)150 543 y(parallel)h(transform)21
8564
 
b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f
8565
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46 b Fd(2,)26 b(37)150
8566
 
646 y(P)n(en)n(tium)e(hac)n(k)f Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8567
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8568
 
h(.)f(.)g(.)h(.)f(.)49 b Fd(57)150 750 y(plan)24 b Fc(.)12
8569
 
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
8570
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)50
8571
 
b Fd(1,)26 b(3,)g(42)150 853 y(planner)20 b Fc(.)13 b(.)f(.)g(.)h(.)f
8572
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8573
 
f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47
8574
 
b Fd(1)150 956 y(p)r(o)n(w)n(er)26 b(sp)r(ectrum)7 b
8575
 
Fc(.)k(.)h(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8576
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33
8577
 
b Fd(7)150 1245 y Ft(R)150 1385 y Fd(rank)16 b Fc(.)c(.)g(.)h(.)f(.)g
8578
 
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8579
 
g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8580
 
(.)42 b Fd(4)150 1489 y(real)27 b(m)n(ulti-dimensional)d(transform)g
8581
 
Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b
8582
 
Fd(7,)26 b(29)150 1592 y(real)h(n)n(um)n(b)r(er)16 b
8583
 
Fc(.)10 b(.)j(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8584
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42
8585
 
b Fd(17)150 1695 y(real)27 b(transform)10 b Fc(.)i(.)g(.)g(.)h(.)f(.)g
8586
 
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8587
 
g(.)g(.)h(.)f(.)g(.)36 b Fd(6,)26 b(26)150 1799 y(RFFTW)12
8588
 
b Fc(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8589
 
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)38
8590
 
b Fd(6,)26 b(26)150 1902 y(RFFTWND)14 b Fc(.)e(.)g(.)h(.)f(.)g(.)h(.)f
8591
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8592
 
f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)40 b Fd(29)150 2005 y(r\013t)n(wnd)25
8593
 
b(arra)n(y)h(format)6 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8594
 
(.)h(.)f(.)32 b Fd(8,)26 b(32,)h(33,)g(46,)f(54)150 2109
8595
 
y(ro)n(w-ma)t(jor)12 b Fc(.)h(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8596
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38
8597
 
b Fd(11,)27 b(23,)f(44)2025 299 y Ft(S)2025 438 y Fd(sa)n(ving)g(plans)
8598
 
g(to)g(disk)13 b Fc(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8599
 
(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39
8600
 
b Fd(13)2025 541 y(slab)26 b(decomp)r(osition)8 b Fc(.)13
8601
 
b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8602
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fd(43)2025 644
8603
 
y(sp)r(eci\014c)26 b(planner)13 b Fc(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)
8604
 
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8605
 
(.)h(.)f(.)g(.)39 b Fd(20)2025 747 y(stride)7 b Fc(.)12
 
8694
(.)38 b Fj(13)2025 299 y(slab)26 b(decomp)r(osition)8
 
8695
b Ff(.)13 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8696
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)33 b Fj(43)2025
 
8697
391 y(sp)r(eci\014c)26 b(planner)13 b Ff(.)f(.)h(.)f(.)g(.)g(.)h(.)f(.)
 
8698
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8699
(.)g(.)h(.)f(.)g(.)39 b Fj(20)2025 483 y(stride)7 b Ff(.)12
8606
8700
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8607
 
(.)33 b Fd(11,)27 b(20,)f(24,)h(28,)g(31,)f(33,)h(42)2025
8608
 
1031 y Ft(T)2025 1171 y Fd(thread)e(safet)n(y)10 b Fc(.)j(.)f(.)h(.)f
8609
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8610
 
h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fd(36,)27 b(40)2025
8611
 
1273 y(threads)18 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8612
 
(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44
8613
 
b Fd(2,)27 b(36,)f(37,)h(56)2025 1376 y(timer,)e(customization)h(of)10
8614
 
b Fc(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8615
 
h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(58)2025 1479 y(T)-6 b(utorial)11
8616
 
b Fc(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8701
(.)33 b Fj(11,)27 b(20,)f(24,)h(27,)g(31,)f(32,)h(42)2025
 
8702
743 y Fu(T)2025 866 y Fj(thread)e(safet)n(y)10 b Ff(.)j(.)f(.)h(.)f(.)g
 
8703
(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8704
f(.)g(.)h(.)f(.)g(.)h(.)35 b Fj(36,)27 b(40)2025 958
 
8705
y(threads)18 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8706
h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44
 
8707
b Fj(2,)27 b(36,)f(37,)h(56)2025 1050 y(timer,)e(customization)h(of)10
 
8708
b Ff(.)j(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8709
h(.)f(.)g(.)h(.)f(.)g(.)36 b Fj(58)2025 1142 y(T)-6 b(utorial)11
 
8710
b Ff(.)i(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8617
8711
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
8618
 
(.)f(.)g(.)h(.)37 b Fd(3)2025 1764 y Ft(W)2025 1903 y
8619
 
Fd(wisdom)8 b Fc(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8620
 
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fd(13,)27
8621
 
b(19,)g(24,)f(30,)h(34)2025 2006 y(wisdom,)f(imp)r(ort)f(and)g(exp)r
8622
 
(ort)12 b Fc(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8623
 
f(.)g(.)h(.)f(.)38 b Fd(14)2025 2109 y(wisdom,)26 b(problems)f(with)11
8624
 
b Fc(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8625
 
h(.)f(.)g(.)h(.)f(.)g(.)37 b Fd(14)p eop
 
8712
(.)f(.)g(.)h(.)37 b Fj(3)2025 1389 y Fu(W)2025 1512 y
 
8713
Fj(wisdom)8 b Ff(.)k(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
 
8714
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)34 b Fj(13,)27
 
8715
b(19,)g(23,)f(30,)h(34)2025 1604 y(wisdom,)f(imp)r(ort)f(and)g(exp)r
 
8716
(ort)12 b Ff(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8717
f(.)g(.)h(.)f(.)38 b Fj(14)2025 1696 y(wisdom,)26 b(problems)f(with)11
 
8718
b Ff(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8719
h(.)f(.)g(.)h(.)f(.)g(.)37 b Fj(14)p eop end
8626
8720
%%Page: 67 69
8627
 
67 68 bop 150 -116 a Fu(Chapter)30 b(10:)41 b(Library)29
8628
 
b(Index)2448 b(67)150 299 y Fr(10)80 b(Library)55 b(Index)150
8629
 
651 y Ft(F)150 786 y Fb(fftw)13 b Fc(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8630
 
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h
8631
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38
8632
 
b Fd(20)150 888 y Fb(fftw_threads)22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)
 
8721
TeXDict begin 67 68 bop 150 -116 a Fv(Chapter)30 b(10:)41
 
8722
b(Library)29 b(Index)2448 b(67)150 299 y Fs(10)80 b(Library)55
 
8723
b(Index)150 642 y Fu(F)150 764 y Fi(fftw)13 b Ff(.)g(.)f(.)g(.)h(.)f(.)
 
8724
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8725
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)38
 
8726
b Fj(20)150 856 y Fi(fftw_threads)22 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)
8633
8727
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8634
 
(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fd(38)150 989 y Fb(fftw_threads_one)13
8635
 
b Fc(.)j(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8636
 
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(38)150
8637
 
1090 y Fb(FFTW_BACKWARD)22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8728
(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fj(38)150 947 y Fi(fftw_threads_one)13
 
8729
b Ff(.)j(.)d(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8730
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fj(38)150
 
8731
1039 y Fi(FFTW_BACKWARD)22 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8638
8732
(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8639
 
g(.)h(.)f(.)g(.)45 b Fd(4)150 1191 y Fb(fftw_complex)13
8640
 
b Fc(.)i(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8733
g(.)h(.)f(.)g(.)45 b Fj(4)150 1130 y Fi(fftw_complex)13
 
8734
b Ff(.)i(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8641
8735
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)39 b
8642
 
Fd(4,)26 b(17)150 1292 y Fb(FFTW_COMPLEX)c Fc(.)12 b(.)g(.)h(.)f(.)g(.)
 
8736
Fj(4,)26 b(17)150 1222 y Fi(FFTW_COMPLEX)c Ff(.)12 b(.)g(.)h(.)f(.)g(.)
8643
8737
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8644
 
(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fd(18)150 1394 y
8645
 
Fb(FFTW_COMPLEX_TO_REAL)12 b Fc(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f
8646
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(6,)27 b(27,)f(46)150
8647
 
1495 y Fb(fftw_create_plan)7 b Fc(.)16 b(.)c(.)h(.)f(.)g(.)g(.)h(.)f(.)
 
8738
(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)45 b Fj(18)150 1313 y
 
8739
Fi(FFTW_COMPLEX_TO_REAL)12 b Ff(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f
 
8740
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fj(6,)27 b(26,)f(46)150
 
8741
1405 y Fi(fftw_create_plan)7 b Ff(.)16 b(.)c(.)h(.)f(.)g(.)g(.)h(.)f(.)
8648
8742
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33
8649
 
b Fd(3,)26 b(18)150 1596 y Fb(fftw_create_plan_specific)18
8650
 
b Fc(.)g(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8651
 
(.)44 b Fd(18)150 1697 y Fb(fftw_destroy_plan)27 b Fc(.)13
 
8743
b Fj(3,)26 b(18)150 1496 y Fi(fftw_create_plan_specific)18
 
8744
b Ff(.)g(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8745
(.)44 b Fj(18)150 1588 y Fi(fftw_destroy_plan)27 b Ff(.)13
8652
8746
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8653
 
(.)h(.)f(.)g(.)h(.)49 b Fd(4,)26 b(21)150 1798 y Fb(fftw_direction)c
8654
 
Fc(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45
8655
 
b Fd(3,)26 b(4,)h(6,)f(18,)h(22,)f(29)150 1900 y Fb(FFTW_ENABLE_FLOAT)
8656
 
12 b Fc(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8657
 
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(18)150
8658
 
2001 y Fb(FFTW_ESTIMATE)22 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8747
(.)h(.)f(.)g(.)h(.)49 b Fj(4,)26 b(21)150 1679 y Fi(fftw_direction)c
 
8748
Ff(.)12 b(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)45
 
8749
b Fj(3,)26 b(4,)h(6,)f(18,)h(22,)f(29)150 1771 y Fi(FFTW_ENABLE_FLOAT)
 
8750
12 b Ff(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8751
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fj(18)150
 
8752
1862 y Fi(FFTW_ESTIMATE)22 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8659
8753
(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8660
 
g(.)h(.)f(.)g(.)45 b Fd(4)150 2102 y Fb(fftw_export_wisdom)25
8661
 
b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8662
 
(.)h(.)f(.)g(.)h(.)47 b Fd(13,)26 b(34)150 2203 y Fb
8663
 
(fftw_export_wisdom_to_file)10 b Fc(.)18 b(.)12 b(.)g(.)h(.)f(.)g(.)h
8664
 
(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(14,)26 b(34)150 2304 y
8665
 
Fb(fftw_export_wisdom_to_string)7 b Fc(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)
8666
 
g(.)h(.)f(.)g(.)33 b Fd(15,)26 b(34)150 2406 y Fb(fftw_f77_create_plan)
8667
 
7 b Fc(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8668
 
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(53)150 2507 y
8669
 
Fb(fftw_f77_destroy_plan)c Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8670
 
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fd(53)150
8671
 
2608 y Fb(fftw_f77_one)12 b Fc(.)j(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8754
g(.)h(.)f(.)g(.)45 b Fj(4)150 1954 y Fi(fftw_export_wisdom)25
 
8755
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8756
(.)h(.)f(.)g(.)h(.)47 b Fj(13,)26 b(34)150 2045 y Fi
 
8757
(fftw_export_wisdom_to_file)10 b Ff(.)18 b(.)12 b(.)g(.)h(.)f(.)g(.)h
 
8758
(.)f(.)g(.)h(.)f(.)g(.)36 b Fj(14,)26 b(34)150 2137 y
 
8759
Fi(fftw_export_wisdom_to_string)7 b Ff(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)
 
8760
g(.)h(.)f(.)g(.)33 b Fj(15,)26 b(34)150 2228 y Fi(fftw_f77_create_plan)
 
8761
7 b Ff(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8762
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fj(53)150 2320 y
 
8763
Fi(fftw_f77_destroy_plan)c Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8764
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fj(53)150
 
8765
2411 y Fi(fftw_f77_one)12 b Ff(.)j(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8672
8766
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8673
 
38 b Fd(51,)26 b(53)150 2709 y Fb(fftw_f77_threads_one)7
8674
 
b Fc(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8675
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(53)150 2810 y Fb(fftw_forget_wisdom)
8676
 
10 b Fc(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8677
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(35)150
8678
 
2911 y Fb(FFTW_FORWARD)23 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8767
38 b Fj(51,)26 b(53)150 2503 y Fi(fftw_f77_threads_one)7
 
8768
b Ff(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8769
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fj(53)150 2594 y Fi(fftw_forget_wisdom)
 
8770
10 b Ff(.)17 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8771
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fj(35)150
 
8772
2686 y Fi(FFTW_FORWARD)23 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8679
8773
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8680
 
h(.)f(.)g(.)g(.)h(.)46 b Fd(4)150 3013 y Fb(fftw_free_hook)16
8681
 
b Fc(.)g(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
 
8774
h(.)f(.)g(.)g(.)h(.)46 b Fj(4)150 2777 y Fi(fftw_free_hook)16
 
8775
b Ff(.)g(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8682
8776
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b
8683
 
Fd(36)150 3114 y Fb(fftw_import_wisdom)25 b Fc(.)13 b(.)f(.)g(.)h(.)f
 
8777
Fj(35)150 2869 y Fi(fftw_import_wisdom)25 b Ff(.)13 b(.)f(.)g(.)h(.)f
8684
8778
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47
8685
 
b Fd(13,)26 b(35)150 3215 y Fb(fftw_import_wisdom_from_file)7
8686
 
b Fc(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33
8687
 
b Fd(14,)26 b(35)150 3316 y Fb(fftw_import_wisdom_from_strin)q(g)i
8688
 
Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fd(15,)26 b(35)150
8689
 
3417 y Fb(FFTW_IN_PLACE)c Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8779
b Fj(13,)26 b(35)150 2961 y Fi(fftw_import_wisdom_from_file)7
 
8780
b Ff(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33
 
8781
b Fj(14,)26 b(35)150 3052 y Fi(fftw_import_wisdom_from_strin)q(g)i
 
8782
Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)48 b Fj(15,)26 b(35)150
 
8783
3144 y Fi(FFTW_IN_PLACE)c Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8690
8784
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8691
 
h(.)f(.)g(.)45 b Fd(5)150 3519 y Fb(fftw_malloc)23 b
8692
 
Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8785
h(.)f(.)g(.)45 b Fj(5)150 3235 y Fi(fftw_malloc)23 b
 
8786
Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8693
8787
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46
8694
 
b Fd(36)150 3620 y Fb(fftw_malloc_hook)13 b Fc(.)j(.)d(.)f(.)g(.)h(.)f
 
8788
b Fj(35)150 3327 y Fi(fftw_malloc_hook)13 b Ff(.)j(.)d(.)f(.)g(.)h(.)f
8695
8789
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8696
 
h(.)f(.)g(.)39 b Fd(36)150 3721 y Fb(FFTW_MEASURE)23
8697
 
b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8790
h(.)f(.)g(.)39 b Fj(35)150 3418 y Fi(FFTW_MEASURE)23
 
8791
b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8698
8792
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)46
8699
 
b Fd(4)150 3822 y Fb(fftw_mpi)7 b Fc(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f
 
8793
b Fj(4)150 3510 y Fi(fftw_mpi)7 b Ff(.)14 b(.)e(.)g(.)h(.)f(.)g(.)h(.)f
8700
8794
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8701
 
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)32 b Fd(47)150
8702
 
3923 y Fb(fftw_mpi_create_plan)7 b Fc(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)
 
8795
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)32 b Fj(47)150
 
8796
3601 y Fi(fftw_mpi_create_plan)7 b Ff(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)
8703
8797
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)33
8704
 
b Fd(47)150 4025 y Fb(fftw_mpi_destroy_plan)c Fc(.)12
 
8798
b Fj(47)150 3693 y Fi(fftw_mpi_destroy_plan)c Ff(.)12
8705
8799
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8706
 
(.)f(.)g(.)50 b Fd(47)150 4126 y Fb(fftw_mpi_local_sizes)7
8707
 
b Fc(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8708
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(48)150 4227 y Fb(fftw_mpi_plan)18
8709
 
b Fc(.)d(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8800
(.)f(.)g(.)50 b Fj(47)150 3784 y Fi(fftw_mpi_local_sizes)7
 
8801
b Ff(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8802
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fj(48)150 3876 y Fi(fftw_mpi_plan)18
 
8803
b Ff(.)d(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8710
8804
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43
8711
 
b Fd(47)150 4328 y Fb(fftw_mpi_test)10 b Fc(.)16 b(.)c(.)g(.)g(.)h(.)f
 
8805
b Fj(47)150 3967 y Fi(fftw_mpi_test)10 b Ff(.)16 b(.)c(.)g(.)g(.)h(.)f
8712
8806
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8713
 
f(.)g(.)h(.)36 b Fd(41,)26 b(49)150 4429 y Fb(FFTW_NORMAL_ORDER)12
8714
 
b Fc(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8715
 
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(42)150 4530
8716
 
y Fb(fftw_one)20 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8807
f(.)g(.)h(.)36 b Fj(41,)26 b(49)150 4059 y Fi(FFTW_NORMAL_ORDER)12
 
8808
b Ff(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8809
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fj(42)150 4150
 
8810
y Fi(fftw_one)20 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8717
8811
g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8718
 
(.)f(.)g(.)h(.)44 b Fd(4,)26 b(20)150 4632 y Fb(FFTW_OUT_OF_PLACE)12
8719
 
b Fc(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8720
 
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fd(19)150 4733
8721
 
y Fb(fftw_plan)17 b Fc(.)d(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8812
(.)f(.)g(.)h(.)44 b Fj(4,)26 b(20)150 4242 y Fi(FFTW_OUT_OF_PLACE)12
 
8813
b Ff(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8814
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fj(19)150 4333
 
8815
y Fi(fftw_plan)17 b Ff(.)d(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8722
8816
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8723
 
h(.)f(.)43 b Fd(3,)26 b(18)150 4834 y Fb(fftw_real)f
8724
 
Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8817
h(.)f(.)43 b Fj(3,)26 b(18)150 4425 y Fi(fftw_real)f
 
8818
Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8725
8819
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)
8726
 
49 b Fd(17)150 4935 y Fb(FFTW_REAL)25 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g
 
8820
49 b Fj(17)150 4516 y Fi(FFTW_REAL)25 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g
8727
8821
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8728
 
g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fd(18)150
8729
 
5036 y Fb(FFTW_REAL_TO_COMPLEX)24 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f
 
8822
g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)49 b Fj(18)150
 
8823
4608 y Fi(FFTW_REAL_TO_COMPLEX)24 b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f
8730
8824
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)45
8731
 
b Fd(6,)26 b(27)150 5138 y Fb(FFTW_SCRAMBLED_INPUT)7
8732
 
b Fc(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8733
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(47)150 5239 y Fb
8734
 
(FFTW_SCRAMBLED_OUTPUT)c Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8735
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fd(47)150
8736
 
5340 y Fb(fftw_test)16 b Fc(.)e(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8825
b Fj(6,)26 b(26)150 4699 y Fi(FFTW_SCRAMBLED_INPUT)7
 
8826
b Ff(.)17 b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8827
(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fj(47)150 4791 y Fi
 
8828
(FFTW_SCRAMBLED_OUTPUT)c Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8829
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fj(47)150
 
8830
4882 y Fi(fftw_test)16 b Ff(.)e(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8737
8831
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8738
 
g(.)h(.)42 b Fd(57,)26 b(58)2025 651 y Fb(fftw_threads_init)12
8739
 
b Fc(.)k(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8740
 
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)38 b Fd(38)2025 750
8741
 
y Fb(fftw_threads_test)12 b Fc(.)k(.)c(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8742
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)38
8743
 
b Fd(39)2025 850 y Fb(FFTW_THREADSAFE)15 b Fc(.)g(.)e(.)f(.)g(.)g(.)h
 
8832
g(.)h(.)42 b Fj(57,)26 b(58)150 4974 y Fi(fftw_threads_init)12
 
8833
b Ff(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8834
g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37 b Fj(38)150 5065
 
8835
y Fi(fftw_threads_test)12 b Ff(.)k(.)c(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8836
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)37
 
8837
b Fj(39)150 5157 y Fi(FFTW_THREADSAFE)15 b Ff(.)g(.)e(.)f(.)g(.)h(.)f
 
8838
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8839
f(.)g(.)g(.)h(.)40 b Fj(36)150 5248 y Fi(FFTW_TIME_MIN)18
 
8840
b Ff(.)d(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8841
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43
 
8842
b Fj(58)150 5340 y Fi(FFTW_TRANSPOSED_ORDER)25 b Ff(.)12
 
8843
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)46 b Fj(42,)27
 
8844
b(44,)g(46,)f(48)2025 642 y Fi(FFTW_USE_WISDOM)15 b Ff(.)g(.)e(.)f(.)g
 
8845
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8846
f(.)g(.)h(.)f(.)g(.)h(.)40 b Fj(13)2025 734 y Fi(fftw2d_create_plan)26
 
8847
b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8848
(.)h(.)f(.)g(.)g(.)h(.)48 b Fj(5,)26 b(22)2025 825 y
 
8849
Fi(fftw2d_create_plan_specific)16 b Ff(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h
 
8850
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fj(22)2025 917 y
 
8851
Fi(fftw2d_mpi_create_plan)27 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8852
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fj(42)2025
 
8853
1008 y Fi(fftw3d_create_plan)26 b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8854
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)48
 
8855
b Fj(5,)26 b(22)2025 1100 y Fi(fftw3d_create_plan_specific)16
 
8856
b Ff(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41
 
8857
b Fj(22)2025 1191 y Fi(fftw3d_f77_create_plan)27 b Ff(.)13
 
8858
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8859
(.)h(.)48 b Fj(53)2025 1283 y Fi(fftw3d_mpi_create_plan)27
 
8860
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8861
(.)f(.)g(.)h(.)48 b Fj(42)2025 1374 y Fi(fftwnd)23 b
 
8862
Ff(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8744
8863
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8745
 
h(.)f(.)g(.)h(.)40 b Fd(36)2025 950 y Fb(FFTW_TIME_MIN)18
8746
 
b Fc(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8747
 
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43
8748
 
b Fd(58)2025 1050 y Fb(FFTW_TRANSPOSED_ORDER)25 b Fc(.)12
8749
 
b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(42,)27
8750
 
b(44,)f(46,)h(48)2025 1149 y Fb(FFTW_USE_WISDOM)15 b
8751
 
Fc(.)g(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8752
 
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fd(13)2025
8753
 
1249 y Fb(fftw2d_create_plan)26 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8754
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)48
8755
 
b Fd(5,)26 b(22)2025 1349 y Fb(fftw2d_create_plan_specific)16
8756
 
b Fc(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41
8757
 
b Fd(22)2025 1449 y Fb(fftw2d_mpi_create_plan)27 b Fc(.)13
8758
 
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8759
 
(.)h(.)48 b Fd(42)2025 1548 y Fb(fftw3d_create_plan)26
8760
 
b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8761
 
(.)h(.)f(.)g(.)g(.)h(.)48 b Fd(5,)26 b(22)2025 1648 y
8762
 
Fb(fftw3d_create_plan_specific)16 b Fc(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h
8763
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41 b Fd(22)2025 1748 y
8764
 
Fb(fftw3d_f77_create_plan)27 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8765
 
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(53)2025
8766
 
1848 y Fb(fftw3d_mpi_create_plan)27 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h
8767
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48
8768
 
b Fd(42)2025 1947 y Fb(fftwnd)23 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)g(.)h(.)
8769
 
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8770
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fd(5,)26
8771
 
b(24)2025 2047 y Fb(fftwnd_threads)16 b Fc(.)f(.)e(.)f(.)g(.)h(.)f(.)g
8772
 
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8773
 
g(.)g(.)h(.)f(.)42 b Fd(38)2025 2147 y Fb(fftwnd_threads_one)10
8774
 
b Fc(.)17 b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8775
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fd(38)2025
8776
 
2247 y Fb(fftwnd_create_plan)26 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8777
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)48
8778
 
b Fd(4,)26 b(22)2025 2346 y Fb(fftwnd_create_plan_specific)16
8779
 
b Fc(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41
8780
 
b Fd(22)2025 2446 y Fb(fftwnd_destroy_plan)25 b Fc(.)12
 
8864
h(.)47 b Fj(5,)26 b(24)2025 1466 y Fi(fftwnd_threads)16
 
8865
b Ff(.)f(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8866
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)42 b
 
8867
Fj(38)2025 1557 y Fi(fftwnd_threads_one)10 b Ff(.)17
 
8868
b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8869
f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fj(38)2025 1649 y Fi
 
8870
(fftwnd_create_plan)26 b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8871
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)48 b Fj(4,)26
 
8872
b(22)2025 1740 y Fi(fftwnd_create_plan_specific)16 b
 
8873
Ff(.)i(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)41
 
8874
b Fj(22)2025 1832 y Fi(fftwnd_destroy_plan)25 b Ff(.)12
8781
8875
b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8782
 
(.)f(.)g(.)47 b Fd(5,)26 b(25)2025 2546 y Fb(fftwnd_f77_create_plan)h
8783
 
Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8784
 
(.)f(.)g(.)h(.)48 b Fd(53)2025 2646 y Fb(fftwnd_f77_destroy_plan)26
8785
 
b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8786
 
(.)h(.)f(.)47 b Fd(53)2025 2745 y Fb(fftwnd_f77_one)16
8787
 
b Fc(.)f(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8876
(.)f(.)g(.)47 b Fj(5,)26 b(25)2025 1923 y Fi(fftwnd_f77_create_plan)h
 
8877
Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8878
(.)f(.)g(.)h(.)48 b Fj(53)2025 2015 y Fi(fftwnd_f77_destroy_plan)26
 
8879
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8880
(.)h(.)f(.)47 b Fj(53)2025 2106 y Fi(fftwnd_f77_one)16
 
8881
b Ff(.)f(.)e(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8788
8882
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)42 b
8789
 
Fd(53)2025 2845 y Fb(fftwnd_mpi)24 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g
 
8883
Fj(53)2025 2198 y Fi(fftwnd_mpi)24 b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g
8790
8884
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8791
 
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fd(42)2025 2945
8792
 
y Fb(fftwnd_mpi_create_plan)27 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8793
 
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fd(42)2025
8794
 
3045 y Fb(fftwnd_mpi_destroy_plan)26 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)
 
8885
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)48 b Fj(42)2025 2289
 
8886
y Fi(fftwnd_mpi_create_plan)27 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8887
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)48 b Fj(42)2025
 
8888
2381 y Fi(fftwnd_mpi_destroy_plan)26 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)
8795
8889
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b
8796
 
Fd(43)2025 3144 y Fb(fftwnd_mpi_local_sizes)27 b Fc(.)13
 
8890
Fj(43)2025 2472 y Fi(fftwnd_mpi_local_sizes)27 b Ff(.)13
8797
8891
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8798
 
(.)h(.)48 b Fd(43)2025 3244 y Fb(fftwnd_mpi_plan)15 b
8799
 
Fc(.)g(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8800
 
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fd(42)2025
8801
 
3344 y Fb(fftwnd_one)16 b Fc(.)e(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8892
(.)h(.)48 b Fj(43)2025 2564 y Fi(fftwnd_mpi_plan)15 b
 
8893
Ff(.)g(.)e(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8894
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)40 b Fj(42)2025
 
8895
2655 y Fi(fftwnd_one)16 b Ff(.)e(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8802
8896
g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8803
 
(.)f(.)g(.)42 b Fd(5,)26 b(24)2025 3444 y Fb(fftwnd_plan)14
8804
 
b Fc(.)h(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 
8897
(.)f(.)g(.)42 b Fj(5,)26 b(24)2025 2747 y Fi(fftwnd_plan)14
 
8898
b Ff(.)h(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8805
8899
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)40
8806
 
b Fd(4,)26 b(22)2025 3710 y Ft(G)2025 3843 y Fb(genfft)c
8807
 
Fc(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8900
b Fj(4,)26 b(22)2025 3007 y Fu(G)2025 3128 y Fi(genfft)c
 
8901
Ff(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8808
8902
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8809
 
46 b Fd(59,)27 b(61)2025 4110 y Ft(R)2025 4243 y Fb(rfftw)11
8810
 
b Fc(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
 
8903
46 b Fj(59,)27 b(61)2025 3388 y Fu(R)2025 3510 y Fi(rfftw)11
 
8904
b Ff(.)i(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8811
8905
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8812
 
(.)g(.)h(.)f(.)g(.)37 b Fd(27)2025 4342 y Fb(rfftw_threads)18
8813
 
b Fc(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
 
8906
(.)g(.)h(.)f(.)g(.)37 b Fj(27)2025 3601 y Fi(rfftw_threads)18
 
8907
b Ff(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8814
8908
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43
8815
 
b Fd(38)2025 4442 y Fb(rfftw_threads_one)12 b Fc(.)k(.)c(.)g(.)h(.)f(.)
 
8909
b Fj(38)2025 3693 y Fi(rfftw_threads_one)12 b Ff(.)k(.)c(.)g(.)h(.)f(.)
8816
8910
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8817
 
(.)g(.)g(.)38 b Fd(38)2025 4542 y Fb(rfftw_create_plan)27
8818
 
b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8819
 
(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fd(6,)26 b(26)2025 4642
8820
 
y Fb(rfftw_create_plan_specific)17 b Fc(.)h(.)12 b(.)h(.)f(.)g(.)g(.)h
8821
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fd(26)2025 4741
8822
 
y Fb(rfftw_destroy_plan)26 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8911
(.)g(.)g(.)38 b Fj(38)2025 3784 y Fi(rfftw_create_plan)27
 
8912
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8913
(.)h(.)f(.)g(.)h(.)f(.)g(.)50 b Fj(6,)26 b(26)2025 3876
 
8914
y Fi(rfftw_create_plan_specific)17 b Ff(.)h(.)12 b(.)h(.)f(.)g(.)g(.)h
 
8915
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)43 b Fj(26)2025 3967
 
8916
y Fi(rfftw_destroy_plan)26 b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8823
8917
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)48
8824
 
b Fd(6,)26 b(28)2025 4841 y Fb(rfftw_f77_create_plan)j
8825
 
Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8826
 
(.)g(.)g(.)h(.)f(.)50 b Fd(54)2025 4941 y Fb(rfftw_f77_destroy_plan)27
8827
 
b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8828
 
(.)f(.)g(.)h(.)48 b Fd(54)2025 5041 y Fb(rfftw_f77_one)18
8829
 
b Fc(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
 
8918
b Fj(6,)26 b(28)2025 4059 y Fi(rfftw_f77_create_plan)j
 
8919
Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8920
(.)g(.)g(.)h(.)f(.)50 b Fj(54)2025 4150 y Fi(rfftw_f77_destroy_plan)27
 
8921
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 
8922
(.)f(.)g(.)h(.)48 b Fj(54)2025 4242 y Fi(rfftw_f77_one)18
 
8923
b Ff(.)d(.)d(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)
8830
8924
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)43
8831
 
b Fd(54)2025 5140 y Fb(rfftw_mpi_test)9 b Fc(.)15 b(.)d(.)h(.)f(.)g(.)h
 
8925
b Fj(54)2025 4333 y Fi(rfftw_mpi_test)9 b Ff(.)15 b(.)d(.)h(.)f(.)g(.)h
8832
8926
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)
8833
 
g(.)h(.)34 b Fd(41,)27 b(49)2025 5240 y Fb(rfftw_one)17
8834
 
b Fc(.)d(.)f(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 
8927
g(.)h(.)34 b Fj(41,)27 b(49)2025 4425 y Fi(rfftw_one)17
 
8928
b Ff(.)d(.)f(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8835
8929
g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43
8836
 
b Fd(6,)26 b(27)2025 5340 y Fb(rfftw_plan)16 b Fc(.)e(.)e(.)h(.)f(.)g
 
8930
b Fj(6,)26 b(27)2025 4516 y Fi(rfftw_plan)16 b Ff(.)e(.)e(.)h(.)f(.)g
8837
8931
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
8838
 
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fd(6,)26 b(26)p
8839
 
eop
 
8932
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)42 b Fj(6,)26 b(26)2025
 
8933
4608 y Fi(rfftw_test)e Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 
8934
h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8935
(.)g(.)h(.)f(.)g(.)48 b Fj(57)2025 4699 y Fi(rfftw_threads_test)10
 
8936
b Ff(.)17 b(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8937
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36 b Fj(39)2025
 
8938
4791 y Fi(rfftw2d_create_plan)13 b Ff(.)k(.)12 b(.)g(.)h(.)f(.)g(.)h(.)
 
8939
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fj(7,)26
 
8940
b(29,)h(47)2025 4882 y Fi(rfftw2d_f77_create_plan)f Ff(.)13
 
8941
b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8942
(.)47 b Fj(54)2025 4974 y Fi(rfftw3d_mpi_create_plan)26
 
8943
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8944
(.)h(.)f(.)47 b Fj(45)2025 5065 y Fi(rfftw3d_create_plan)25
 
8945
b Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8946
(.)g(.)h(.)f(.)g(.)47 b Fj(7,)26 b(29)2025 5157 y Fi(rfftwnd_mpi)d
 
8947
Ff(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8948
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)46
 
8949
b Fj(46)2025 5248 y Fi(rfftwnd_mpi_destroy_plan)25 b
 
8950
Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8951
(.)g(.)46 b Fj(46)2025 5340 y Fi(rfftwnd_mpi_local_sizes)26
 
8952
b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8953
(.)h(.)f(.)47 b Fj(45)p eop end
8840
8954
%%Page: 68 70
8841
 
68 69 bop 150 -116 a Fu(68)3232 b(FFTW)150 299 y Fb(rfftw_test)24
8842
 
b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8843
 
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)47
8844
 
b Fd(57)150 399 y Fb(rfftw_threads_test)10 b Fc(.)17
8845
 
b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
8846
 
g(.)h(.)f(.)g(.)h(.)f(.)g(.)36 b Fd(39)150 498 y Fb
8847
 
(rfftw2d_create_plan)13 b Fc(.)k(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8848
 
(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)39 b Fd(7,)27 b(29,)f(47)150
8849
 
598 y Fb(rfftw2d_f77_create_plan)g Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)
8850
 
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(54)150
8851
 
697 y Fb(rfftw3d_mpi_create_plan)26 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h
8852
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fd(45)150
8853
 
797 y Fb(rfftw3d_create_plan)25 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8854
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)47
8855
 
b Fd(7,)26 b(29)150 897 y Fb(rfftwnd_mpi)d Fc(.)12 b(.)h(.)f(.)g(.)h(.)
8856
 
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g
8857
 
(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)46 b Fd(46)150 996
8858
 
y Fb(rfftwnd_mpi_destroy_plan)25 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)
8859
 
f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fd(46)150
8860
 
1096 y Fb(rfftwnd_mpi_local_sizes)26 b Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)
8861
 
h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b
8862
 
Fd(45)150 1196 y Fb(rfftwnd_threads_complex_to_re)q(al)10
8863
 
b Fc(.)18 b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35
8864
 
b Fd(39)150 1295 y Fb(rfftwnd_threads_one_complex_t)q(o_re)q(al)28
8865
 
b Fc(.)12 b(.)h(.)f(.)g(.)h(.)47 b Fd(39)2025 299 y Fb
8866
 
(rfftwnd_threads_one_real_to_co)q(mplex)16 b Fc(.)i(.)12
8867
 
b(.)40 b Fd(38,)27 b(39)2025 399 y Fb(rfftwnd_threads_real_to_comple)q
8868
 
(x)10 b Fc(.)18 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35
8869
 
b Fd(38)2025 498 y Fb(rfftwnd_complex_to_real)26 b Fc(.)13
8870
 
b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
8871
 
(.)47 b Fd(31)2025 598 y Fb(rfftwnd_create_plan)13 b
8872
 
Fc(.)k(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8873
 
(.)f(.)39 b Fd(7,)26 b(29,)h(47)2025 697 y Fb(rfftwnd_destroy_plan)7
8874
 
b Fc(.)17 b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8875
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)33 b Fd(33)2025 797 y
8876
 
Fb(rfftwnd_f77_destroy_plan)25 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h
8877
 
(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)46 b Fd(54)2025
8878
 
897 y Fb(rfftwnd_f77_one_real_to_comple)q(x)10 b Fc(.)18
8879
 
b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fd(54)2025
8880
 
996 y Fb(rfftwnd_one_complex_to_real)9 b Fc(.)18 b(.)13
8881
 
b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fd(8,)26
8882
 
b(31)2025 1096 y Fb(rfftwnd_one_real_to_complex)9 b Fc(.)18
8883
 
b(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35
8884
 
b Fd(8,)26 b(31)2025 1196 y Fb(rfftwnd_plan)13 b Fc(.)i(.)d(.)g(.)h(.)f
 
8955
TeXDict begin 68 69 bop 150 -116 a Fv(68)3232 b(FFTW)150
 
8956
299 y Fi(rfftwnd_threads_complex_to_re)q(al)10 b Ff(.)18
 
8957
b(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fj(39)150
 
8958
391 y Fi(rfftwnd_threads_one_complex_t)q(o_re)q(al)28
 
8959
b Ff(.)12 b(.)h(.)f(.)g(.)h(.)47 b Fj(39)150 483 y Fi
 
8960
(rfftwnd_threads_one_real_to_c)q(ompl)q(ex)28 b Ff(.)12
 
8961
b(.)h(.)f(.)g(.)h(.)47 b Fj(39)150 575 y Fi
 
8962
(rfftwnd_threads_real_to_compl)q(ex)10 b Ff(.)18 b(.)12
 
8963
b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35 b Fj(38)150 667
 
8964
y Fi(rfftwnd_complex_to_real)26 b Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 
8965
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)47 b Fj(31)150
 
8966
759 y Fi(rfftwnd_create_plan)13 b Ff(.)k(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g
 
8967
(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)39 b Fj(7,)27
 
8968
b(29,)f(47)150 851 y Fi(rfftwnd_destroy_plan)7 b Ff(.)17
 
8969
b(.)c(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h
 
8970
(.)f(.)g(.)h(.)f(.)33 b Fj(33)2025 299 y Fi(rfftwnd_f77_destroy_plan)25
 
8971
b Ff(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 
8972
(.)g(.)46 b Fj(54)2025 409 y Fi(rfftwnd_f77_one_real_to_comple)q(x)10
 
8973
b Ff(.)18 b(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35
 
8974
b Fj(54)2025 520 y Fi(rfftwnd_one_complex_to_real)9 b
 
8975
Ff(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35
 
8976
b Fj(8,)26 b(31)2025 630 y Fi(rfftwnd_one_real_to_complex)9
 
8977
b Ff(.)18 b(.)13 b(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)35
 
8978
b Fj(8,)26 b(31)2025 741 y Fi(rfftwnd_plan)13 b Ff(.)i(.)d(.)g(.)h(.)f
8885
8979
(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
8886
 
h(.)f(.)g(.)h(.)f(.)g(.)39 b Fd(7,)26 b(29)2025 1295
8887
 
y Fb(rfftwnd_real_to_complex)g Fc(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
8888
 
f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fd(31)p
8889
 
eop
 
8980
h(.)f(.)g(.)h(.)f(.)g(.)39 b Fj(7,)26 b(29)2025 851 y
 
8981
Fi(rfftwnd_real_to_complex)g Ff(.)13 b(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f
 
8982
(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)47 b Fj(31)p eop
 
8983
end
8890
8984
%%Page: -1 71
8891
 
-1 70 bop 3725 -116 a Fu(i)150 299 y Fr(T)-13 b(able)54
8892
 
b(of)g(Con)l(ten)l(ts)150 641 y Ft(1)135 b(In)l(tro)t(duction)15
8893
 
b Fa(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f
8894
 
(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)60
8895
 
b Ft(1)150 911 y(2)135 b(T)-11 b(utorial)25 b Fa(.)20
 
8985
TeXDict begin -1 70 bop 3725 -116 a Fv(i)150 299 y Fs(T)-13
 
8986
b(able)54 b(of)g(Con)l(ten)l(ts)150 641 y Fu(1)135 b(In)l(tro)t
 
8987
(duction)15 b Fa(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h
 
8988
(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)
 
8989
60 b Fu(1)150 911 y(2)135 b(T)-11 b(utorial)25 b Fa(.)20
8896
8990
b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h
8897
8991
(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)69
8898
 
b Ft(3)449 1048 y Fu(2.1)92 b(Complex)29 b(One-dimensional)f(T)-8
8899
 
b(ransforms)29 b(T)-8 b(utorial)22 b Fq(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g
8900
 
(.)g(.)g(.)g(.)g(.)53 b Fu(3)449 1157 y(2.2)92 b(Complex)29
 
8992
b Fu(3)449 1048 y Fv(2.1)92 b(Complex)29 b(One-dimensional)f(T)-8
 
8993
b(ransforms)29 b(T)-8 b(utorial)22 b Fr(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g
 
8994
(.)g(.)g(.)g(.)g(.)53 b Fv(3)449 1157 y(2.2)92 b(Complex)29
8901
8995
b(Multi-dimensional)e(T)-8 b(ransforms)29 b(T)-8 b(utorial)16
8902
 
b Fq(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(4)449
 
8996
b Fr(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fv(4)449
8903
8997
1267 y(2.3)92 b(Real)30 b(One-dimensional)e(T)-8 b(ransforms)29
8904
 
b(T)-8 b(utorial)23 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8905
 
(.)g(.)g(.)g(.)g(.)54 b Fu(6)449 1377 y(2.4)92 b(Real)30
 
8998
b(T)-8 b(utorial)23 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
8999
(.)g(.)g(.)g(.)g(.)54 b Fv(6)449 1377 y(2.4)92 b(Real)30
8906
9000
b(Multi-dimensional)d(T)-8 b(ransforms)29 b(T)-8 b(utorial)16
8907
 
b Fq(.)e(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46
8908
 
b Fu(7)449 1486 y(2.5)92 b(Multi-dimensional)26 b(Arra)m(y)31
8909
 
b(F)-8 b(ormat)29 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
 
9001
b Fr(.)e(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46
 
9002
b Fv(7)449 1486 y(2.5)92 b(Multi-dimensional)26 b(Arra)m(y)31
 
9003
b(F)-8 b(ormat)29 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
8910
9004
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)57
8911
 
b Fu(11)748 1596 y(2.5.1)93 b(Ro)m(w-ma)5 b(jor)31 b(F)-8
8912
 
b(ormat)28 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9005
b Fv(11)748 1596 y(2.5.1)93 b(Ro)m(w-ma)5 b(jor)31 b(F)-8
 
9006
b(ormat)28 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8913
9007
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)56
8914
 
b Fu(11)748 1705 y(2.5.2)93 b(Column-ma)5 b(jor)28 b(F)-8
8915
 
b(ormat)23 b Fq(.)16 b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8916
 
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fu(11)748
 
9008
b Fv(11)748 1705 y(2.5.2)93 b(Column-ma)5 b(jor)28 b(F)-8
 
9009
b(ormat)23 b Fr(.)16 b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9010
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52 b Fv(11)748
8917
9011
1815 y(2.5.3)93 b(Static)30 b(Arra)m(ys)h(in)e(C)20 b
8918
 
Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9012
Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8919
9013
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50
8920
 
b Fu(12)748 1924 y(2.5.4)93 b(Dynamic)30 b(Arra)m(ys)g(in)f(C)23
8921
 
b Fq(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8922
 
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Fu(12)748
 
9014
b Fv(12)748 1924 y(2.5.4)93 b(Dynamic)30 b(Arra)m(ys)g(in)f(C)23
 
9015
b Fr(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9016
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Fv(12)748
8923
9017
2034 y(2.5.5)93 b(Dynamic)30 b(Arra)m(ys)g(in)f(C|The)h(W)-8
8924
 
b(rong)31 b(W)-8 b(a)m(y)15 b Fq(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)45
8925
 
b Fu(12)449 2144 y(2.6)92 b(W)-8 b(ords)31 b(of)f(Wisdom)20
8926
 
b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9018
b(rong)31 b(W)-8 b(a)m(y)15 b Fr(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)45
 
9019
b Fv(12)449 2144 y(2.6)92 b(W)-8 b(ords)31 b(of)f(Wisdom)20
 
9020
b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8927
9021
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8928
 
h(.)f(.)g(.)g(.)49 b Fu(13)748 2253 y(2.6.1)93 b(Ca)m(v)m(eats)32
8929
 
b(in)d(Using)h(Wisdom)22 b Fq(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
 
9022
h(.)f(.)g(.)g(.)49 b Fv(13)748 2253 y(2.6.1)93 b(Ca)m(v)m(eats)32
 
9023
b(in)d(Using)h(Wisdom)22 b Fr(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8930
9024
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b
8931
 
Fu(14)748 2363 y(2.6.2)93 b(Imp)s(orting)28 b(and)i(Exp)s(orting)f
8932
 
(Wisdom)d Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8933
 
56 b Fu(14)150 2605 y Ft(3)135 b(FFTW)43 b(Reference)28
 
9025
Fv(14)748 2363 y(2.6.2)93 b(Imp)s(orting)28 b(and)i(Exp)s(orting)f
 
9026
(Wisdom)d Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
 
9027
56 b Fv(14)150 2605 y Fu(3)135 b(FFTW)43 b(Reference)28
8934
9028
b Fa(.)21 b(.)e(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f
8935
 
(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)72 b Ft(17)449 2742
8936
 
y Fu(3.1)92 b(Data)32 b(T)m(yp)s(es)15 b Fq(.)f(.)h(.)g(.)g(.)g(.)g(.)g
 
9029
(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)72 b Fu(17)449 2742
 
9030
y Fv(3.1)92 b(Data)32 b(T)m(yp)s(es)15 b Fr(.)f(.)h(.)g(.)g(.)g(.)g(.)g
8937
9031
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
8938
9032
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8939
 
(.)g(.)44 b Fu(17)449 2852 y(3.2)92 b(One-dimensional)27
8940
 
b(T)-8 b(ransforms)30 b(Reference)10 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)h(.)
 
9033
(.)g(.)44 b Fv(17)449 2852 y(3.2)92 b(One-dimensional)27
 
9034
b(T)-8 b(ransforms)30 b(Reference)10 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)h(.)
8941
9035
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)39 b
8942
 
Fu(18)748 2961 y(3.2.1)93 b(Plan)29 b(Creation)h(for)g(One-dimensional)
8943
 
d(T)-8 b(ransforms)13 b Fq(.)h(.)h(.)42 b Fu(18)748 3071
 
9036
Fv(18)748 2961 y(3.2.1)93 b(Plan)29 b(Creation)h(for)g(One-dimensional)
 
9037
d(T)-8 b(ransforms)13 b Fr(.)h(.)h(.)42 b Fv(18)748 3071
8944
9038
y(3.2.2)93 b(Discussion)28 b(on)i(Sp)s(eci\014c)f(Plans)19
8945
 
b Fq(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
8946
 
(.)g(.)g(.)g(.)48 b Fu(20)748 3181 y(3.2.3)93 b(Computing)28
8947
 
b(the)j(One-dimensional)c(T)-8 b(ransform)14 b Fq(.)g(.)h(.)g(.)g(.)g
8948
 
(.)43 b Fu(20)748 3290 y(3.2.4)93 b(Destro)m(ying)31
8949
 
b(a)f(One-dimensional)e(Plan)c Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8950
 
g(.)g(.)g(.)g(.)54 b Fu(21)748 3400 y(3.2.5)93 b(What)31
8951
 
b(FFTW)g(Really)e(Computes)22 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8952
 
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b Fu(21)449 3509
 
9039
b Fr(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
 
9040
(.)g(.)g(.)g(.)48 b Fv(20)748 3181 y(3.2.3)93 b(Computing)28
 
9041
b(the)j(One-dimensional)c(T)-8 b(ransform)14 b Fr(.)g(.)h(.)g(.)g(.)g
 
9042
(.)43 b Fv(20)748 3290 y(3.2.4)93 b(Destro)m(ying)31
 
9043
b(a)f(One-dimensional)e(Plan)c Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
 
9044
g(.)g(.)g(.)g(.)54 b Fv(21)748 3400 y(3.2.5)93 b(What)31
 
9045
b(FFTW)g(Really)e(Computes)22 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9046
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51 b Fv(21)449 3509
8953
9047
y(3.3)92 b(Multi-dimensional)26 b(T)-8 b(ransforms)30
8954
 
b(Reference)24 b Fq(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8955
 
(.)g(.)g(.)g(.)g(.)53 b Fu(22)748 3619 y(3.3.1)93 b(Plan)27
 
9048
b(Reference)24 b Fr(.)15 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9049
(.)g(.)g(.)g(.)g(.)53 b Fv(22)748 3619 y(3.3.1)93 b(Plan)27
8956
9050
b(Creation)h(for)g(Multi-dimensional)c(T)-8 b(ransforms)10
8957
 
b Fq(.)k(.)38 b Fu(22)748 3729 y(3.3.2)93 b(Computing)28
8958
 
b(the)j(Multi-dimensional)26 b(T)-8 b(ransform)27 b Fq(.)15
8959
 
b(.)g(.)g(.)57 b Fu(24)748 3838 y(3.3.3)93 b(Destro)m(ying)31
8960
 
b(a)f(Multi-dimensional)d(Plan)17 b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g
8961
 
(.)g(.)g(.)h(.)46 b Fu(25)748 3948 y(3.3.4)93 b(What)31
8962
 
b(FFTWND)g(Really)f(Computes)18 b Fq(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)
8963
 
g(.)g(.)g(.)g(.)g(.)47 b Fu(25)449 4057 y(3.4)92 b(Real)30
 
9051
b Fr(.)k(.)38 b Fv(22)748 3729 y(3.3.2)93 b(Computing)28
 
9052
b(the)j(Multi-dimensional)26 b(T)-8 b(ransform)27 b Fr(.)15
 
9053
b(.)g(.)g(.)57 b Fv(24)748 3838 y(3.3.3)93 b(Destro)m(ying)31
 
9054
b(a)f(Multi-dimensional)d(Plan)17 b Fr(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g
 
9055
(.)g(.)g(.)h(.)46 b Fv(25)748 3948 y(3.3.4)93 b(What)31
 
9056
b(FFTWND)g(Really)f(Computes)18 b Fr(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)
 
9057
g(.)g(.)g(.)g(.)g(.)47 b Fv(25)449 4057 y(3.4)92 b(Real)30
8964
9058
b(One-dimensional)e(T)-8 b(ransforms)29 b(Reference)13
8965
 
b Fq(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43
8966
 
b Fu(26)748 4167 y(3.4.1)93 b(Plan)29 b(Creation)h(for)g(Real)g
8967
 
(One-dimensional)e(T)-8 b(ransforms)954 4276 y Fq(.)16
8968
 
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8969
 
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
8970
 
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b
8971
 
Fu(26)748 4386 y(3.4.2)93 b(Computing)28 b(the)j(Real)f
8972
 
(One-dimensional)e(T)-8 b(ransform)954 4496 y Fq(.)16
8973
 
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8974
 
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
8975
 
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b
8976
 
Fu(27)748 4605 y(3.4.3)93 b(Destro)m(ying)31 b(a)f(Real)h
8977
 
(One-dimensional)c(Plan)g Fq(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)57
8978
 
b Fu(28)748 4715 y(3.4.4)93 b(What)31 b(RFFTW)g(Really)e(Computes)10
8979
 
b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8980
 
39 b Fu(28)449 4824 y(3.5)92 b(Real)30 b(Multi-dimensional)d(T)-8
8981
 
b(ransforms)29 b(Reference)f Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8982
 
(.)g(.)g(.)57 b Fu(29)748 4934 y(3.5.1)93 b(Plan)28 b(Creation)g(for)h
 
9059
b Fr(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)43
 
9060
b Fv(26)748 4167 y(3.4.1)93 b(Plan)29 b(Creation)h(for)g(Real)g
 
9061
(One-dimensional)e(T)-8 b(ransforms)954 4276 y Fr(.)16
 
9062
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9063
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
 
9064
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b
 
9065
Fv(26)748 4386 y(3.4.2)93 b(Computing)28 b(the)j(Real)f
 
9066
(One-dimensional)e(T)-8 b(ransform)954 4496 y Fr(.)16
 
9067
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9068
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
 
9069
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b
 
9070
Fv(27)748 4605 y(3.4.3)93 b(Destro)m(ying)31 b(a)f(Real)h
 
9071
(One-dimensional)c(Plan)g Fr(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)57
 
9072
b Fv(28)748 4715 y(3.4.4)93 b(What)31 b(RFFTW)g(Really)e(Computes)10
 
9073
b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
 
9074
39 b Fv(28)449 4824 y(3.5)92 b(Real)30 b(Multi-dimensional)d(T)-8
 
9075
b(ransforms)29 b(Reference)f Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9076
(.)g(.)g(.)57 b Fv(29)748 4934 y(3.5.1)93 b(Plan)28 b(Creation)g(for)h
8983
9077
(Real)g(Multi-dimensional)c(T)-8 b(ransforms)954 5044
8984
 
y Fq(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9078
y Fr(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8985
9079
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8986
9080
g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54
8987
 
b Fu(29)748 5153 y(3.5.2)93 b(Computing)28 b(the)j(Real)f
8988
 
(Multi-dimensional)d(T)-8 b(ransform)954 5263 y Fq(.)16
 
9081
b Fv(29)748 5153 y(3.5.2)93 b(Computing)28 b(the)j(Real)f
 
9082
(Multi-dimensional)d(T)-8 b(ransform)954 5263 y Fr(.)16
8989
9083
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
8990
9084
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)
8991
9085
f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b
8992
 
Fu(31)p eop
 
9086
Fv(30)p eop end
8993
9087
%%Page: -2 72
8994
 
-2 71 bop 150 -116 a Fu(ii)3270 b(FFTW)748 83 y(3.5.3)93
8995
 
b(Arra)m(y)30 b(Dimensions)f(for)h(Real)g(Multi-dimensional)930
8996
 
193 y(T)-8 b(ransforms)17 b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9088
TeXDict begin -2 71 bop 150 -116 a Fv(ii)3270 b(FFTW)748
 
9089
83 y(3.5.3)93 b(Arra)m(y)30 b(Dimensions)f(for)h(Real)g
 
9090
(Multi-dimensional)930 193 y(T)-8 b(ransforms)17 b Fr(.)d(.)h(.)g(.)g
8997
9091
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
8998
 
g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(32)748
8999
 
302 y(3.5.4)93 b(Strides)28 b(in)h(In-place)h(RFFTWND)c
9000
 
Fq(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9001
 
(.)54 b Fu(33)748 412 y(3.5.5)93 b(Destro)m(ying)31 b(a)f
9002
 
(Multi-dimensional)d(Plan)17 b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9003
 
(.)g(.)h(.)46 b Fu(33)748 521 y(3.5.6)93 b(What)31 b(RFFTWND)g(Really)f
9004
 
(Computes)c Fq(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)56
9005
 
b Fu(33)449 631 y(3.6)92 b(Wisdom)30 b(Reference)f Fq(.)15
 
9092
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46
 
9093
b Fv(32)748 302 y(3.5.4)93 b(Strides)28 b(in)h(In-place)h(RFFTWND)c
 
9094
Fr(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9095
(.)54 b Fv(32)748 412 y(3.5.5)93 b(Destro)m(ying)31 b(a)f
 
9096
(Multi-dimensional)d(Plan)17 b Fr(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9097
(.)g(.)h(.)46 b Fv(33)748 521 y(3.5.6)93 b(What)31 b(RFFTWND)g(Really)f
 
9098
(Computes)c Fr(.)15 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)56
 
9099
b Fv(33)449 631 y(3.6)92 b(Wisdom)30 b(Reference)f Fr(.)15
9006
9100
b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
9007
9101
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9008
 
g(.)58 b Fu(34)748 741 y(3.6.1)93 b(Exp)s(orting)28 b(Wisdom)g
9009
 
Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9010
 
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Fu(34)748
9011
 
850 y(3.6.2)93 b(Imp)s(orting)28 b(Wisdom)h Fq(.)15 b(.)g(.)g(.)g(.)g
9012
 
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9013
 
g(.)g(.)g(.)g(.)g(.)59 b Fu(35)748 960 y(3.6.3)93 b(F)-8
9014
 
b(orgetting)31 b(Wisdom)23 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
9015
 
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9016
 
g(.)53 b Fu(35)449 1069 y(3.7)92 b(Memory)31 b(Allo)s(cator)f
9017
 
(Reference)22 b Fq(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9102
g(.)58 b Fv(34)748 741 y(3.6.1)93 b(Exp)s(orting)28 b(Wisdom)g
 
9103
Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9104
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Fv(34)748
 
9105
850 y(3.6.2)93 b(Imp)s(orting)28 b(Wisdom)h Fr(.)15 b(.)g(.)g(.)g(.)g
 
9106
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
 
9107
g(.)g(.)g(.)g(.)g(.)59 b Fv(35)748 960 y(3.6.3)93 b(F)-8
 
9108
b(orgetting)31 b(Wisdom)23 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
 
9109
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
 
9110
g(.)53 b Fv(35)449 1069 y(3.7)92 b(Memory)31 b(Allo)s(cator)f
 
9111
(Reference)22 b Fr(.)15 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9018
9112
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51
9019
 
b Fu(36)449 1179 y(3.8)92 b(Thread)29 b(safet)m(y)16
9020
 
b Fq(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
 
9113
b Fv(35)449 1179 y(3.8)92 b(Thread)29 b(safet)m(y)16
 
9114
b Fr(.)h(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
9021
9115
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9022
 
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(36)150 1419 y
9023
 
Ft(4)135 b(P)l(arallel)47 b(FFTW)30 b Fa(.)18 b(.)h(.)h(.)f(.)g(.)h(.)f
 
9116
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)46 b Fv(36)150 1419 y
 
9117
Fu(4)135 b(P)l(arallel)47 b(FFTW)30 b Fa(.)18 b(.)h(.)h(.)f(.)g(.)h(.)f
9024
9118
(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)
9025
 
f(.)g(.)75 b Ft(37)449 1556 y Fu(4.1)92 b(Multi-threaded)29
9026
 
b(FFTW)10 b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
 
9119
f(.)g(.)75 b Fu(37)449 1556 y Fv(4.1)92 b(Multi-threaded)29
 
9120
b(FFTW)10 b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
9027
9121
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9028
 
g(.)g(.)g(.)39 b Fu(37)748 1665 y(4.1.1)93 b(Installation)28
 
9122
g(.)g(.)g(.)39 b Fv(37)748 1665 y(4.1.1)93 b(Installation)28
9029
9123
b(and)i(Supp)s(orted)e(Hardw)m(are/Soft)m(w)m(are)9 b
9030
 
Fq(.)17 b(.)e(.)38 b Fu(37)748 1775 y(4.1.2)93 b(Usage)31
9031
 
b(of)g(Multi-threaded)e(FFTW)f Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9032
 
g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fu(38)748 1885 y(4.1.3)93
9033
 
b(Ho)m(w)31 b(Man)m(y)g(Threads)e(to)i(Use?)22 b Fq(.)15
 
9124
Fr(.)17 b(.)e(.)38 b Fv(37)748 1775 y(4.1.2)93 b(Usage)31
 
9125
b(of)g(Multi-threaded)e(FFTW)f Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
 
9126
g(.)g(.)g(.)g(.)g(.)g(.)g(.)57 b Fv(38)748 1885 y(4.1.3)93
 
9127
b(Ho)m(w)31 b(Man)m(y)g(Threads)e(to)i(Use?)22 b Fr(.)15
9034
9128
b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9035
 
(.)g(.)51 b Fu(39)748 1994 y(4.1.4)93 b(Using)29 b(Multi-threaded)g
 
9129
(.)g(.)51 b Fv(39)748 1994 y(4.1.4)93 b(Using)29 b(Multi-threaded)g
9036
9130
(FFTW)i(in)e(a)i(Multi-threaded)930 2104 y(Program)24
9037
 
b Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
 
9131
b Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
9038
9132
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9039
 
g(.)g(.)g(.)g(.)g(.)g(.)54 b Fu(40)748 2213 y(4.1.5)93
9040
 
b(Tips)28 b(for)i(Optimal)f(Threading)22 b Fq(.)13 b(.)i(.)g(.)g(.)g(.)
 
9133
g(.)g(.)g(.)g(.)g(.)g(.)54 b Fv(40)748 2213 y(4.1.5)93
 
9134
b(Tips)28 b(for)i(Optimal)f(Threading)22 b Fr(.)13 b(.)i(.)g(.)g(.)g(.)
9041
9135
g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51
9042
 
b Fu(40)748 2323 y(4.1.6)93 b(P)m(arallelization)29 b(de\014ciencies)g
9043
 
(in)g(one-dimensional)930 2433 y(transforms)e Fq(.)15
 
9136
b Fv(40)748 2323 y(4.1.6)93 b(P)m(arallelization)29 b(de\014ciencies)g
 
9137
(in)g(one-dimensional)930 2433 y(transforms)e Fr(.)15
9044
9138
b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9045
9139
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9046
 
g(.)g(.)58 b Fu(40)449 2542 y(4.2)92 b(MPI)30 b(FFTW)d
9047
 
Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9140
g(.)g(.)58 b Fv(40)449 2542 y(4.2)92 b(MPI)30 b(FFTW)d
 
9141
Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9048
9142
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9049
 
g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)55 b Fu(40)748 2652
9050
 
y(4.2.1)93 b(MPI)30 b(FFTW)h(Installation)9 b Fq(.)k(.)i(.)g(.)g(.)g(.)
 
9143
g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)55 b Fv(40)748 2652
 
9144
y(4.2.1)93 b(MPI)30 b(FFTW)h(Installation)9 b Fr(.)k(.)i(.)g(.)g(.)g(.)
9051
9145
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9052
 
(.)38 b Fu(41)748 2761 y(4.2.2)93 b(Usage)31 b(of)f(MPI)g(FFTW)h(for)f
 
9146
(.)38 b Fv(41)748 2761 y(4.2.2)93 b(Usage)31 b(of)f(MPI)g(FFTW)h(for)f
9053
9147
(Complex)f(Multi-dimensional)930 2871 y(T)-8 b(ransforms)17
9054
 
b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
 
9148
b Fr(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9055
9149
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
9056
 
(.)g(.)g(.)g(.)46 b Fu(41)748 2980 y(4.2.3)93 b(MPI)30
9057
 
b(Data)i(La)m(y)m(out)9 b Fq(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9150
(.)g(.)g(.)g(.)46 b Fv(41)748 2980 y(4.2.3)93 b(MPI)30
 
9151
b(Data)i(La)m(y)m(out)9 b Fr(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9058
9152
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9059
 
g(.)g(.)38 b Fu(43)748 3090 y(4.2.4)93 b(Usage)31 b(of)g(MPI)f(FFTW)h
 
9153
g(.)g(.)38 b Fv(43)748 3090 y(4.2.4)93 b(Usage)31 b(of)g(MPI)f(FFTW)h
9060
9154
(for)f(Real)h(Multi-dimensional)930 3200 y(T)-8 b(ransforms)17
9061
 
b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
 
9155
b Fr(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9062
9156
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
9063
 
(.)g(.)g(.)g(.)46 b Fu(44)748 3309 y(4.2.5)93 b(Usage)31
 
9157
(.)g(.)g(.)g(.)46 b Fv(44)748 3309 y(4.2.5)93 b(Usage)31
9064
9158
b(of)g(MPI)f(FFTW)h(for)f(Complex)g(One-dimensional)930
9065
 
3419 y(T)-8 b(ransforms)17 b Fq(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9159
3419 y(T)-8 b(ransforms)17 b Fr(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9066
9160
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9067
 
g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fu(47)748
9068
 
3528 y(4.2.6)93 b(MPI)30 b(Tips)21 b Fq(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g
 
9161
g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)46 b Fv(47)748
 
9162
3528 y(4.2.6)93 b(MPI)30 b(Tips)21 b Fr(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g
9069
9163
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
9070
9164
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b
9071
 
Fu(48)150 3768 y Ft(5)135 b(Calling)46 b(FFTW)e(from)h(F)-11
 
9165
Fv(48)150 3768 y Fu(5)135 b(Calling)46 b(FFTW)e(from)h(F)-11
9072
9166
b(ortran)16 b Fa(.)j(.)g(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)
9073
 
g(.)61 b Ft(51)449 3905 y Fu(5.1)92 b(W)-8 b(rapp)s(er)30
9074
 
b(Routines)13 b Fq(.)h(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
 
9167
g(.)61 b Fu(51)449 3905 y Fv(5.1)92 b(W)-8 b(rapp)s(er)30
 
9168
b(Routines)13 b Fr(.)h(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
9075
9169
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9076
 
g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fu(51)449 4015 y(5.2)92
9077
 
b(FFTW)31 b(Constan)m(ts)g(in)e(F)-8 b(ortran)21 b Fq(.)16
 
9170
g(.)g(.)g(.)g(.)g(.)g(.)g(.)43 b Fv(51)449 4015 y(5.2)92
 
9171
b(FFTW)31 b(Constan)m(ts)g(in)e(F)-8 b(ortran)21 b Fr(.)16
9078
9172
b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9079
 
(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)50 b Fu(52)449
9080
 
4125 y(5.3)92 b(F)-8 b(ortran)31 b(Examples)20 b Fq(.)14
 
9173
(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)50 b Fv(52)449
 
9174
4125 y(5.3)92 b(F)-8 b(ortran)31 b(Examples)20 b Fr(.)14
9081
9175
b(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9082
9176
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9083
 
g(.)g(.)50 b Fu(52)150 4364 y Ft(6)135 b(Installation)47
 
9177
g(.)g(.)50 b Fv(52)150 4364 y Fu(6)135 b(Installation)47
9084
9178
b(and)e(Customization)35 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)
9085
 
f(.)h(.)78 b Ft(55)449 4501 y Fu(6.1)92 b(Installation)29
9086
 
b(on)h(Unix)19 b Fq(.)14 b(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
 
9179
f(.)h(.)78 b Fu(55)449 4501 y Fv(6.1)92 b(Installation)29
 
9180
b(on)h(Unix)19 b Fr(.)14 b(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
9087
9181
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9088
 
g(.)g(.)g(.)g(.)g(.)g(.)49 b Fu(55)449 4611 y(6.2)92
9089
 
b(Installation)29 b(on)h(non-Unix)f(Systems)13 b Fq(.)i(.)g(.)g(.)g(.)g
 
9182
g(.)g(.)g(.)g(.)g(.)g(.)49 b Fv(55)449 4611 y(6.2)92
 
9183
b(Installation)29 b(on)h(non-Unix)f(Systems)13 b Fr(.)i(.)g(.)g(.)g(.)g
9090
9184
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
9091
 
g(.)42 b Fu(56)449 4721 y(6.3)92 b(Installing)28 b(FFTW)j(in)e(b)s(oth)
9092
 
h(single)f(and)h(double)e(precision)14 b Fq(.)g(.)h(.)g(.)g(.)g(.)43
9093
 
b Fu(57)449 4830 y(6.4)92 b Fo(gcc)29 b Fu(and)h(P)m(en)m(tium)g(hac)m
9094
 
(ks)18 b Fq(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 
9185
g(.)42 b Fv(56)449 4721 y(6.3)92 b(Installing)28 b(FFTW)j(in)e(b)s(oth)
 
9186
h(single)f(and)h(double)e(precision)14 b Fr(.)g(.)h(.)g(.)g(.)g(.)43
 
9187
b Fv(57)449 4830 y(6.4)92 b Fp(gcc)29 b Fv(and)h(P)m(en)m(tium)g(hac)m
 
9188
(ks)18 b Fr(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
9095
9189
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
9096
 
47 b Fu(57)449 4940 y(6.5)92 b(Customizing)29 b(the)h(timer)16
9097
 
b Fq(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
 
9190
47 b Fv(57)449 4940 y(6.5)92 b(Customizing)29 b(the)h(timer)16
 
9191
b Fr(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
9098
9192
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45
9099
 
b Fu(58)449 5049 y(6.6)92 b(Generating)31 b(y)m(our)f(o)m(wn)g(co)s(de)
9100
 
c Fq(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
 
9193
b Fv(58)449 5049 y(6.6)92 b(Generating)31 b(y)m(our)f(o)m(wn)g(co)s(de)
 
9194
c Fr(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
9101
9195
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55
9102
 
b Fu(59)150 5289 y Ft(7)135 b(Ac)l(kno)l(wledgmen)l(ts)12
 
9196
b Fv(59)150 5289 y Fu(7)135 b(Ac)l(kno)l(wledgmen)l(ts)12
9103
9197
b Fa(.)20 b(.)g(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
9104
 
(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)57 b Ft(61)p eop
 
9198
(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)57 b Fu(61)p eop end
9105
9199
%%Page: -3 73
9106
 
-3 72 bop 3674 -116 a Fu(iii)150 83 y Ft(8)135 b(License)45
9107
 
b(and)g(Cop)l(yrigh)l(t)35 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h
9108
 
(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)79 b Ft(63)150
9109
 
353 y(9)135 b(Concept)45 b(Index)13 b Fa(.)20 b(.)f(.)g(.)h(.)f(.)h(.)f
9110
 
(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
9111
 
f(.)g(.)h(.)58 b Ft(65)150 623 y(10)135 b(Library)45
9112
 
b(Index)35 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h
9113
 
(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)80
9114
 
b Ft(67)p eop
 
9200
TeXDict begin -3 72 bop 3674 -116 a Fv(iii)150 83 y Fu(8)135
 
9201
b(License)45 b(and)g(Cop)l(yrigh)l(t)35 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h
 
9202
(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)79
 
9203
b Fu(63)150 353 y(9)135 b(Concept)45 b(Index)13 b Fa(.)20
 
9204
b(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h
 
9205
(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)58 b Fu(65)150
 
9206
623 y(10)135 b(Library)45 b(Index)35 b Fa(.)19 b(.)h(.)f(.)h(.)f(.)h(.)
 
9207
f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f
 
9208
(.)h(.)f(.)80 b Fu(67)p eop end
 
9209
%%Page: -4 74
 
9210
TeXDict begin -4 73 bop 150 -116 a Fv(iv)3248 b(FFTW)p
 
9211
eop end
9115
9212
%%Trailer
9116
9213
end
9117
9214
userdict /end-hook known{end-hook}if