fortran66のブログ

fortran について書きます。

【乞食週報】Google Colaboratory、Microsoft Azure での Fortran 利用

無料 Jupyter Noteboook での Fortran 利用

Binder では、apt.txt で明示的に指定しないと gfortran がインストールされず、Fortran が使えないのですが、GoogleMicrosoft の Jupyter サービスには、初めから Fortran がインストールされていてすぐに使えます。Google の Colaboratory には gfortran 7.2.0 が、Microsoft の Azure には gfortran 5.5.0 が入っていました。

特に Micrsoft の Azure は アドレスバーの notebook を lab に変えると、Jupyter Lab になるので、bash コンソールが開けて普通に unix 環境となります。gfortran の version が 5.5.0 と古いのが残念。せめて 6 系を。notebook でも New からターミナルを選べます。f:id:fortran66:20180923212850p:plain


Notebook 環境の場合は、Jupyter notebook の cell の ! コマンドを使うことで、! gfortran fn でコンパイルでき、!./a.out で実行もできます。ソースファイルは %%writefile fn で上書き保存、 %%writefile fn -a でアペンド保存できます。

Google colaboratory

https://colab.research.google.com/notebooks/welcome.ipynb
Google の方は Google Drive との連携や、共同作業の仕組みがあるようですが、notebook の外観がかなりカスタマイズされており、動作もかなりモッサリしています。コンパイラが新しい方なので、新文法を試したいならこちらでしょうか。

[追記] root なので apt 可能です。coarray fortran が install 実行可能です。

Microsoft Azure

https://studio.azureml.net/Home/
Microsoft の Azure は、素の notebook 形式になっていて、サクサク動きます。上述の通り、notebook 形式のまま terminal のタブも開けますし、Jupyter lab 形式にすることもできます。アカウント名を入れさせられるので、MS One Drive に保存できるのではないかと推測されます。

ID 紐づけされているので、あまり無茶な使い方をすると、バンされるかもしれませんw

[追記] julia 及び IJulia instal 可能で、kernel 統合されて使えます。fortran 用 kernel も使えます。下記参照。
fortran66.hatenablog.com

[追記」Julia Box

Julia Box でも Fortran が利用できることが分かりました。バージョンは古くて、5.4.0 でした。Notebook 形式ですが、ダッシュボードのメニューの new からコンソールが開けます。カーネルが完全独自のものになっているのでシェルコマンドは ; が役付き文字です。%%writefile が使えないなど、Cell 内からの利用は面倒です。

GNU Fortran (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609

[追記] Julia 0.6 の kernel.json を書き換えてやることで、Julia 0.6 を選択することで Python2 のカーネルとの置き換えは、少し見た限りでは、うまくいきました。fortran はうまく行きません。

なお gfortran のバージョンごとの文法対応状況は、以下のまとめ記事が参考になります。
www.scivision.co


元々 Python が動いているので作図はおkです。また Fortran のサブルーチンを Python の関数とする Fortran magic コマンドも、インストールすれば使えます。これは f2py を利用しているので、新しい Fortran 文法への対応が良くないです。が、f2py の後継を狙うようなものも出てきているようなので将来はより便利になるかもしれません。
pypi.org
【メモ帳】

!pip install fortran-magic 

%load_ext fortranmagic

%%fortran
subroutine f1(x, y, z)
real, intent(in) :: x,y
real, intent(out) :: z
z = sin(x+y)
end subroutine f1

f1(1.0, 2.1415)

github.com


ただ Fortranシンタックスカラーリングなどはないので、教育・学習目的にはイマイチですが、ちょっとした実行にはオンライン・コンパイラよりお手軽かもしれません。
[追記]参考:後付けで、cell magic 付与。
medium.com


MS Azure に Fortran カーネルを突っ込めればうれしいです。

Modern Fortran Explained: Incorporating Fortran 2018 (Numerical Mathematics and Scientific Computation)

Modern Fortran Explained: Incorporating Fortran 2018 (Numerical Mathematics and Scientific Computation)


邪神ちゃんドロップキック 邪神ちゃん 全高約135mm PVC製 塗装済み 完成品 フィギュア

邪神ちゃんドロップキック 邪神ちゃん 全高約135mm PVC製 塗装済み 完成品 フィギュア

実行例

コピペ用
%%writefile eratos.f90
program era
    implicit none
    integer, parameter :: n = 10**3
    logical :: tab(2:n)
    integer, allocatable :: ip(:)
    integer :: i
    tab = .true.
    do i = 2, int(sqrt(real(n)))
        if (tab(i)) tab(i**2::i) = .false.
    end do
    ip = pack([(i, i = 2, n)], tab)
    print '(10i6)', ip
    do i = 1, size(ip)
        write(11, *) i, ip(i)
    end do  
end program era 
import matplotlib.pyplot as plt
import numpy as np
x, y = np.loadtxt('fort.11', unpack = True)
plt.plot(y, x)
plt.show()

【メモ帳】Herok 無料枠

カーネルは付け足せそうですが、Fortran はどうかしらん・・・?
qiita.com
github.com