読者です 読者をやめる 読者になる 読者になる

fortran66のブログ

fortran について書きます。

Intel Fortran Ver.15.0 出る!

ベータ版が三月ぐらいから提供されていましたが、先日正式版が出ました。

一応 Fortran2003 完全対応となりました。しかし、まだバグが残っているようです。

また Fortran2008 対応も地味に進んでいます。今回は外部実行ファイルの実行コマンド execute_command_line が使えるようになりました。ようやくベンダー依存の拡張に頼らなくて済むようになります。

以前ベンダー依存で書いた、無理やりデータ列と Python のコマンド列を吐き出して絵を描くプログラムをまたやってみます。グラフは少し変えてみます。

本当は Visual Studio 内の iPyhon 窓に出したいのですが、残念ながらまだやり方が分かりません。

実行結果

f:id:fortran66:20140831012444p:plain


ソース・プログラム
    program Python
      implicit none
      integer :: i
      real, allocatable :: x(:), y0(:), y1(:)
      open(9, file = 'test.py', status = 'unknown')
      write(9, '(a)') 'import matplotlib.pyplot as plt'
      write(9, '(a)') 'import numpy as np'
      x = [(0.1 * i, i = 0, 200)]
      y0 = bessel_j0(x)          !  Fortran2008
      y1 = bessel_j1(x)          !  Fortran2008
      
      write(9, '(a, *(g0,","))') 'x =np.array([', x
      write(9, '(a)') '])'
      write(9, '(a, *(g0,","))') 'y0=np.array([', y0
      write(9, '(a)') '])'
      write(9, '(a, *(g0,","))') 'y1=np.array([', y1
      write(9, '(a)') '])'

      write(9, '(a)') 'plt.title("Bessel Function", fontsize = 25)'
      write(9, '(a)') 'plt.xlabel("x", fontsize = 20)'
      write(9, '(a)') 'plt.ylabel("Bessel J0, J1", fontsize = 20)'
      
      
      write(9, '(a)') 'plt.axhline(0, linewidth= 1, color="black")' 
      write(9, '(a)') 'plt.axis([0, 20, -0.6, 1.0])'
      write(9, '(a)') 'plt.grid(True)'
      write(9, '(a)') 'plt.plot(x, y0)'
      write(9, '(a)') 'plt.plot(x, y1)'
      
      write(9, '(a)') 'plt.show()'
      close(9)
      !
      print *, 'starting matplotlib'
      call execute_command_line('python test.py', wait = .false.) ! Fortran2008
      stop ' normal end'
    end program Python