2022年10月27日木曜日

Intel Fortran

量子物理学の授業は,前期の復習モードが終わりつつある。1次元の有限井戸型ポテンシャル問題の解となるエネルギー固有値と固有関数を求めるというものだった。とりあえず,普通の教科書にあるような,$y=-\frac{x}{\tan x}$と,$x^2+y^2=r^2$のグラフを描いて交点からエネルギー固有値を求めようというお話で終るわけだ。

ところで,現代的な量子力学の教科書ではどうなっているのだろうか。サクライの教科書では,井戸型ポテンシャルは,付録のシュレーディンガー方程式の解の例のところで,結果だけがほんの1pにまとめられていた。堀田さんの教科書では,第11章の粒子の量子的挙動の演習問題にチョロッと顔を出しているだけだった。まあそういうことだ。

気分を変えて1次元ポテンシャルの一般的な数値解法がないかと探してみると,インテルのフォートランを使った解説ページが見つかった。インテルのフォートランは有償だと思っていたけれど,どうやら無償で使えるし,macOSにもかろうじて対応しているようだ。そこで参考サイトにしたがって,早速インストールしてみた。

(1) Intel OneAPI Toolkitsで,Intel oneAPI Base Toolkit とIntel oneAPI HPC Toolkit の2つのパッケージをダウンロードする。その際にユーザ登録が必要となるが無償である。
(2) それぞれのToolkitを展開する(ネットワークインストール版を使った)。
(3) 下記の場所にある環境設定スクリプトに誘導されるのでこれを実行する。
https://www.intel.com/content/www/us/en/develop/documentation/get-started-with-intel-oneapi-base-hpc-macos/top/before-you-begin.html?cid=oth&campid=iags_install&source=installer?cid=oth&campid=iags_install&source=installer

. /opt/intel/oneapi/setvars.sh

 (4) 簡単なプログラム a.f を作って実行してみた。

      implicit complex*16(a-h,o-z)

      write(*,*) "input a,b,c"

      read(*,*) a,b,c

      x1=(-b+sqrt(b**2-4*a*c))/2

      x2=(-b-sqrt(b**2-4*a*c))/2

      write(*,*) " x1= ",x1," x2= ",x2

      end


$ ifort a.f

$ ./a.out

 input a,b,c

$  1,1,1

$   x1=  (-0.500000000000000,0.866025403784439)  x2= 

 (-0.500000000000000,-0.866025403784439)


できた。


SIN基底とQUADPACKによる1次元時間依存しないシュレーディンガー方程式のページの例題も試してみる。調和振動子のエネルギー準位が再現できた。なお,行列の対角化ライブラリがはいっているインテル・マス・カーネルライブラリのオプション -mkl を -qmkl にせよとの警告がでていた。


$ ifort -qmkl quadpack.f90 main.f90

$ ls

a.out main.f90 quadpack.f90

$ ./a.out

           1  0.499999999999997     

           2   1.50000000000004     

           3   2.50000000000008     

           4   3.50000000000073     

           5   4.50000000003176     

           6   5.50000000018886     

           7   6.50000000502383     

           8   7.50000002123218     

           9   8.50000037227348     

          10   9.50000121353051   


0 件のコメント: