fortran66のブログ

fortran について書きます。

2012-04-01から1ヶ月間の記事一覧

Modern Fortran 入門用文書

最近、Modern Fortran という単語を見かけるようになってきました。Fortran2003 までは書名などに、FORTRAN66、FORTRAN77、Fortran90、Fortran95、Fortran2003というような規格名が使われてきましたが、Fortran2008 の代からは Modern Fortran という語が多…

OOP 的な win32 plotter routine

自分の昔のプログラムを見ていたら callback routine (MainWndProc) へスレッドローカル記憶域(TLS)を使ってパラメータを渡していました。昔の自分の真似をして問☆題☆解☆決!基底クラスの動的変数を、win32 型で領域確保して図を描いています。それぞれの…

do concurrent で Mandelbrot 集合

do concurrent は、Fortran2008 で導入された構文で、forall とよく似たループ変数の形を取りますが、forall と違って配列への代入文だけではなく、他の pure な命令を記述できます。forall より記述できる範囲が広がっています。 コンパイラは do concurren…

Getting started in CM Fortran のサンプルプログラム

http://www.sthmuseum.org/downloads/CM5/GettingStartedinCMFortran.pdf 42ページ Primes:Second CM Fortran Versionこれは Fortran95 の文法にかなっているので無修正で動きます。今のコンピュータだとシリアル実行でも一瞬w 実行結果 長いので見切れ画像…

array constructor triplet

暇つぶしにネットにあったコネクションマシンのCM-Fortranのマニュアルを見ていたら、array constructor の節に A = [1:10:2] に類する記述がありました。よもやと思って Intel Fortran で試したところ通るwww 前々から出来たらいいなと思っていた機能な…

CoArray Fortran を試す。

暇つぶしに Fortran2008 で導入された並列化機能 CoArray Fortran を試してみました。例として江戸時代の暴れん坊将軍の頃にオイラーが証明したというの値を、並列に和をとって求めることにします。n個あるイメージのi番でiから始めてn個飛びに10**8個のデー…

EISPACK及びLINPACKの歴史

NETLIB に Jack Dongarra による EISPACK 及び LINPACK の歴史についての記述を含む文書がありました。それぞれ、Matrix Eigensystem Routines -- EISPACK GuideとLINPACK User's guideの一章のようです。http://www.netlib.org/utk/people/JackDongarra/PAP…

Fortranに於けるfilterとmap

Fortranは配列がいわゆる first class object になっており、配列の扱いに長けています。Fortran90 以降、ほとんどの組み込み関数は elemental 属性を持っており、定義上スカラーを引数として取る関数に配列を渡すと、結果を配列として返します。これは、LIS…

MASKオプションのある組み込み関数

配列操作とBit操作との対応のあるもの(フラグ関連) all iall any iany parity iparity merge imerge_bits count popcnt*1 配列の位置にかかわるもの maxloc minloc maxval minval findloc 演算にかかわるもの sum product フィルター関数 pack unpack 参考…

配列代入のLOOP構造分類

Fortranは配列操作が得意なわけですが、配列に要素を計算して代入するときに、その要素が配列のインデックスにどの程度依存するかで並列化に適したLOOP構造を選べます。 配列の要素が全くインデックスによらない場合、インデックスを省略した記法が使えます…

select type

万能型 class(*) と select type による処理。F90でせっかく型チェックを厳しくしたのに、OOPのせいでまたゆるゆるにwww 実行結果 ソースプログラム program test implicit none class(*), allocatable :: d integer :: i allocate(real(8)::d) do i = 1,…

allocatebleな文字型変数の文字列長のallocateについて

F2003からできるようになりました。 出力結果 ソースプログラム program test_challoc implicit none character(len=:), allocatable :: d(:) allocate(character(len = 10)::d(5)) print *, len(d), size(d) stop end program test_challoc

再帰を使わないquicksortその2

前回のものに比べて、必要なワーク配列を減らしました。ここでは最悪の場合に必要になるサイズ、すなわち並べ替えるデータと同じ大きさの整数配列二つを用意しています。しかし、実験的に調べてみると。ランダムなデータの場合、並べ替える数が十分に増える…

NaNから普通の数字に戻れる関数SIGN

NaNを入力とする時の関数の出力は、規格上の仕様が定まっていないらしくベンダー依存のようです。Intel Fotranの場合、ほとんどの関数はNaNが出力になるようですが、SIGN関数は符号ビットだけをみているようで、NaNから実数へよみがえることができるようです…

Fortran2008に採用されたCAFの課題

2008年の古い話題ですが・・・ http://www.hpcsw.org/pi_meeting/presentations/John Mellor-Crummey, Rice University Programming Models for Scientific Computing on Leadership Computing Platforms: The Evolution of Coarray Fortran http://www.hpcs…

再帰を使わない quick sort

再帰を使わない Quicksort を書いてみたのですが、ついでなのでFORTRAN77 に書き直してみました。再帰を使わない分、作業領域として入力配列とほぼ同じ長さの作業配列が3本使っています。再帰を使っていないので大幅にスピードアップしました。また、同じ再…

ソース

module m_kahan implicit none contains function sum_kahan(xx) result(s) real, intent(in) :: xx(:) real :: c, s, x, t integer :: i c = 0.0 s = 0.0 do i = 1, size(xx) x = xx(i) - c t = s + x c = (t - s) - x s = t end do return end function su…

Kahan和

Intel Fortran の intrinsic function の SUM は、大きな配列の和をとる時、配列の並びで大きく値が変わる。(浮動小数点では交換則が成り立っていないが、その誤差が大きく見えてくる。)これは、倍精度変数をアキュームレータにするか、いわゆる Kahan 和…

Windows窓絵もOOPで。

やっつけで。Win32窓用のコールバックルーチン等への変数の受け渡し方がきれいにかけてません。 intel fortran の問題だと思いますが、構造体の要素として構造体を持つ場合の生成子でコンパイラのエラーが出ます。Win32で実行時に表示されるwindowの図。 フ…

OOP2

[Fortran2003]オブジェクト指向でplot メインルーチンで、異なる出力デバイスをALLOCATEするところで出力先の切り替えをすることで、それ以外の記述を共通化できました。ポストスクリプトとHTML5を切り替えています。 program oop use m_plot implicit none …

HTML5 canvas 書き出しをオブジェクト指向化

module m_oop implicit none type, abstract :: t_device character(len = 80) :: title = 'Plotter' integer :: nsize_x = 640, nsize_y = 480 contains procedure (device_on), deferred, pass :: on procedure (device_off), deferred, pass :: off proce…

memo

非標準関数 LOC(x) を標準関数で表すには iaddress = TRANSFER(C_LOC(x), iaddress)。 eps? 1行目 %!PS-Adobe-3.0 EPSF-3.0 GhostView OPTIONS->EPS CLIP

図の出力をWindowsとHTML5で互換出力

昔懐かしい XY-plotter 方式(ペンアップ・ペンダウン・直線移動)で作図するようにすれば、デバイスによらないで共通の絵が描けるはずです。字のフォントを用意するのが面倒ですが、我慢して作りました。アルファベットは10画以内、ギリシア文字は15画…