We fourier-transform eight complex data sampled at eight points (X=0a, 1a, 2a, 3a, 4a, 5a, 6a, 7a, where a is the unit cell length). Answer following questions.
Here, $
indicates the command-line prompt.
Keywords: Born-von Karman boundary condition, first Brillouin zone, phonon, k-point
Using the command git(1)
,
$ git clone https://gist.github.com/831940161039db8a9da6.git fft8exercise
you can download 6+ files of Makefile
, fft8.dat
, fft8.f
, fft8.gp
,
fft8_fwd.f
, fft8_inv.f
in fft8exercise/
.
The command make(1)
comiles and executes files according to the
dependences written in Makefile
.
$ make clean
$ make -n
shows
gfortran -g -Wall -ffree-form -c -o fft8.o fft8.f
gfortran -g -Wall -ffree-form -c -o fft8_fwd.o fft8_fwd.f
gfortran -g -Wall -ffree-form -c -o fft8_inv.o fft8_inv.f
gfortran -o fft8 -g -Wall -ffree-form fft8.o fft8_fwd.o fft8_inv.o
./fft8 < fft8.dat > fft8.coefficients
gnuplot fft8.gp
Describe the meanings of each lines and roles of 6 files.
Describe each lines in main program fft8.f
.
You can
$ make
fft8.coefficients
and fft8.eps
. Then,
$ gv fft8.eps &
$ lpr fft8.eps
$ epstopdf fft8.eps
you can preview or print out the figure of fft8.eps
.
You can also convert fft8.eps
into fft8.pdf
(Fig.1).
Describe each lines in fft8.gp
.
Why c5 is not the coefficient for exp(i (5/8) (2π/a) x) but for
exp(-i (3/8) (2π/a) x).
Fig.1: Periodic eight complex data, which is connected with a linear combination of sin and cos.
Compare the input file fft8.dat
and the output file fft8.coefficients
.
フーリエ係数 c0 はデータの平均値になっていることを確認せよ.また,それはなぜか.
exp(i k x) (where k/(2π/a) = -3/8, -2/8, -1/8, 0, 1/8, 2/8, 3/8, 4/8)
の線形結合で作った曲線(図1)はfft8.dat
中の8つのデータを再現している.
しかしながら,fft8.dat
中のデータの虚部は偶関数(x=0で対称)でかつx=4aで対称なのに,
曲線はそのようになっていない.改善せよ.
入力ファイルfft8.dat
中のデータの虚部をすべてゼロにしてから,もういちど
$ make
とせよ.新しいfft8.coefficients
を見て,c4の虚部が0であることを確認せよ.
conjg(c(-k)) = c(k)
であることを確認せよ.データが実数の場合,上の式が成り立つことを証明せよ.
サンプリング点が9個や16個のときに同様のことができるプログラムを作れ. 高速フーリエ変換のサブルーチンは自分で作るなり,ネットでみつけてくるなり工夫せよ. 「高速フーリエ変換 (fast Fourier transform)」「FFT」「FFTW」などを キーワードとして検索すると見つかるかもしれない.
FFTの準備として sin(2πi/N) と cos(2πi/N) を 0<=i<N について計算しておく必要がある. しかし,浮動小数点演算の性質から sin(π/2)=1, cos(π/2)=0, sin(π/4)=cos(π/4) 等が必ずしも保障されない.よって、0<=i<=N/8,すなわち 0<=θ<=π/4のsinθ, cosθ と 三角関数の対称性を使って計算するほうが,直截に(straight forwardに)計算するより, 速くてよい精度が得られることを説明せよ.