fortran66のブログ

fortran について書きます。

Chapman 本 第4版

いつの間にか Stephen Chapman の FORTRAN FOR SCIENTISTS & ENGINEERS の第4版が出ていたようです。目次を見た感じでは coarray の章が付け加わったものと思われます。値段はアマゾン3万円越えという豪奢な仕様。米アマゾン価格は $230 位なので何故なのか?

米アマゾンでは第3版が値崩れしているようなので欲しいなら狙い目かも?重たい本を頼むと、運送中に粗雑に扱われて、大抵は角がつぶれたり、背表紙の所が外れたりして送られてくるので、クソ中古で十分な気がします。
 
FORTRAN FOR SCIENTISTS & ENGINEERS (General Engineering) 4th Edition
by Stephen Chapman (Author)

NHK 朗読の時間「草枕」

www4.nhk.or.jp

いま夏目漱石の「草枕」を NHK のラジオ第二放送でやっていて、ストリーミングでも聞けます。ずいぶん昔に放送されたものの再放送だと思います。

昔FM放送で聞いた時は、本で読んだ時と印象が違って聞こえて、その辺が面白かった記憶があります。

しかし今聞くと、非人情といいながら下世話なことに首を突っ込んで、メンヘラ―女にちょっかいを出すニートなおっさん(自称画家)が出てきて、ヘラヘラしょーもないことを語っていて、ネット時代にはおなか一杯感が無きにしも非ずw

ラジオ第二放送のストリーミングは結構面白くて重宝します。最近では吉田茂元首相のインタビューなども興味深く聞けました。第二回では再軍備についても語っています。食料さえなく先の戦争で嫌気がさしているのに、朝鮮戦争で米英の走狗にされてはかなわんということだったようです。金のある今は再軍備に一気に加速して思う存分中原に鹿を逐いたいものです。

chapel 1.15.0

年二回の cray の chapel の更新がありました。犬の毛が抜け替わる頃に更新があります。

Docker 対応など地味に進歩し続けています。Docker は Virtual PC では何とかなるようですが VMwareと共存できなさそうなので困ります。気のせいか最近 VMware に落ち目感が漂っている気がします。

chapel は bash on windows でもコンパイルできました。しかし私の環境では udp 利用 GASnet がうまく動作せず multi locale では機能しませんでした。VMware 上では GASnet が機能してテストを通りました。

並列Fortranシンポジウム第三回

並列Fortranに関するシンポジウムのご案内(第3回)

「並列Fortranの現状と展望」
~現代化か肥大化か?~

並列Fortranに関するシンポジウムのご案内(第3回) - 高性能Fortran 推進協議会

年一回で順調に今年も会合が開かれるようです。

高抽象度のプログラムから出発して、同一言語内で適宜低レベル最適化してゆけるのが良い気がします。Fortran はその方向に進んでほしいと思います。

整数の集合和

二つの整数配列があって、それぞれを集合の要素だと思って、二つの配列の集合和をとることを考える。

それは二つの配列を単純に合併したあとで quick sort の微妙な変形で、重複する要素を省きながら sort する関数に掛けることで実現できる。

実行結果

再帰そのままのへっぽこ quick sort モドキなので遅いが、まぁ百万と百万で 1~2 秒くらい?

空集合空集合の和
空集合と集合の和
・集合と集合の和
・乱数で生成した大きな集合(百万要素)同士の和の重ならない率

 1 2 3
 1 2 3 4 5 7
 86.49100 %
続行するには何かキーを押してください . . .

ソース・プログラム

Fortran 2003 / 手抜きなのでスタックサイズを大きくしないとまずい。

    module m_sub
      implicit none
    contains
      function iset_union(ia, ib)
        integer, allocatable :: iset_union(:)
        integer, intent(in) :: ia(:), ib(:)
        iset_union = pseud_qsort([ia, ib]) 
      end function iset_union
      
      recursive function pseud_qsort(m) result(iret) ! deletes duplicate element
        integer, intent(in) :: m(:)
        integer, allocatable :: iret(:) 
        iret = [integer::]
        if (size(m) < 1) return 
        iret = [pseud_qsort(pack(m, m < m(1))), m(1), pseud_qsort(pack(m, m > m(1)))]
      end function pseud_qsort  
    end module m_sub
    
    program test
      use m_sub
      implicit none
      integer, parameter :: n = 10**6
      integer, allocatable :: ia(:), ib(:)
      real   , allocatable :: tmp(:)
      print *, iset_union([integer::], [integer::])
      print *, iset_union([integer::], [3,2,1])
      print *, iset_union([1,3,5,7], [4,3,2,1])
      
      allocate(ia(n), ib(n), tmp(n))
      call random_number(tmp)
      ia = n * tmp
      call random_number(tmp)
      ib = n * tmp
      print *, size(iset_union(ia, ib)) * 100.0 / n, '%'
    end program test

ACM SIGPLAN Fortran Forum 4月号出る!

年三回発行の Fortran 同人誌の最新号が出ました。

今号も記事2本ですが、枯れ木も山の賑わいw

ACM SIGPLAN Fortran Forum


  • Pointers for handling input and output

Arjen Markus

  • Compiler Support for the Fortran 2003 and 2008 Standards Revision 21

Ian Chivers, Jane Sleightholme

Bash on Windows 上の gfortran + F03GL + FreeGlut による OpenGL

Bash on Windows

Windows10 では、ベータですが Ubuntu 系の bash が使えるようになっています。次の大型 update で正式になるという噂です。

その bash 上では gfortran が簡単にインストールできます。sudo apt-get install gfortran

ここで OpenGL で作画することに挑戦してみます。

X-window

まず windows 側に Xming X Server for Windows という X Server ソフトをインストールします。 無料版は10年前のバイナリを使うようです。Xming-mesa-6-9-0-31-setup.exe (mesa がついている方が OpenGL に良いようですが、詳しくはわかりません。フォントもインストールする必要があるのかよくわかりません。)

export DISPLAY=localhost:0.0 (~/.bashrc に付加)

bash on Windows

fortran66.hatenablog.com 手順メモ 1.sudo apt-get install freeglut3-dev
2. f03gl.tgz download
3.f03gl 展開 
  必要ファイル取り出し i. OpenGL_gl.f90, ii. OpenGL_glu.f90, iii. OpenGL_Freeglut.f90 ⇒ OpenGL_glut.f90 に改名。
4.コンパイル gfortran OpenGL_gl.f90 OpenGL_glu.f90 OpenGL_glut.f90 nnnn.f90 -lGL -lGLU -lglut -o nnnn.x

FreeGlut

Bash on Windows 側に FreeGLUT をインストールします。sudo spt-get install freeglut3-dev

f03gl.tgz

f03gl.tgz を windows 側でダウンロードして、bash on windows 側からアクセスできるディレクトリにコピーし、展開します。

Compile & Go

FreeGLUT に対応したファイルを選択する必要があります。

20170327024227