Fortran

doxygenのインストールとDoxyfileの設定

UbuntuでDoxygenを使う方法と、普段、Fortranを使う際に使用しているDoxyfileの設定をメモしておこうと思います。Ubuntuへのインストールはapt-getを使えば簡単。グラフを描画するためのGraphvizも一緒にインストールします。 sudo apt-get install doxygen …

日付やシステム時間の取得方法

Fortran90以降の機能です。 忘れやすいので例によってサンプルプログラムにまとめました。日付の取得にはdate_and_time関数を使用します。 program main implicit none integer date_time(8) character(len=10) sys_time(3) call date_and_time(sys_time(1),…

ビット演算のサンプル(2)

前回のものはibsetやibclrが無かったので、改めて作りました。 C言語でいうsizeof関数の代わりにfortranではsize関数がありますが、配列の長さを確かめることにしか使えません。bit_sizeを使えばデバッグに役立ちそうだと思いました。 ! bit operations prog…

ビット演算のサンプル

Fortranでビット演算をするサンプルスクリプトを作りました。余りソースが無いので、サンプルを動かしながら動作を確かめた方が理解が早そう。 program main implicit none integer :: i, j, b1, b2, h1, h2, o1, o2 o1 = 5 o2 = 21 b1 = b'00000101' b2 = b…

配列構成子の書き方

なじみの薄い配列構成子ですが、うまく使えばコードが綺麗になりそうだったので、サンプルコードを書いてみた。 program main implicit none integer, pointer :: arr_p(:) integer :: arr(3) integer, parameter :: n = 3 allocate(arr_p(n)) arr_p = (/ 1,…

Fortran特有の行列演算の書き方

Fortran90で行列を扱ってみます。配列ではそれぞれの配列要素の演算を簡単な記述で表すことができます。main.f90 program main integer(kind=8), pointer :: matrix(:,:) integer(kind=8), parameter :: nele = 3 allocate(matrix(nele, nele)) call set_mat…

再帰のサンプル

超シンプルな再帰処理のサンプルです。Fortran90ではrecursiveをつける必要があります。C言語とC++は再帰の方法に違いはありませんが、念のため。recursion.f90 program main implicit none integer :: i = 0 call recursion(i) end program main recursive …

ポインタの挙動

fortran90のポインタの使い方がよくわかっていないので、テストプログラムを作成して実証してみる。2つのファイルを用意して、モジュールのprivateな変数の演算結果をサブルーチンの引数を通して取得できるかテスト。main.f90 program main use calc implici…

拡張子を取得するサブルーチン

Fortran90で任意のファイル名(文字列)から拡張子を取得するサブルーチンを作りました。ちょっとだけググってそれらしいものが無かったので。モジュールの形にして別ファイルにしています。extension.f90 module m_extension implicit none public parse_file…

2次元配列matrixのループの順番

よく言われているように、FortranではC言語とは違い第1次元目が先にループするので、メインメモリからレジストやスタックに呼び出される際の効率の問題から(この辺、まだよくわかってません)、For文で計算する際は気をつけなければいけません。それでどれ…

乱数発生のサンプルプログラム(種の設定方法)

Fortran90で乱数を使用するサンプルプログラムです。乱数の種(random seed)の設定方法が少しわかりづらかったので、微妙に条件を変えて3通りやってみました。ちょっと変に思ったのは、seedが配列である必要があること。random_seed関数でnrandにサイズを代…

moduleを使ったサンプルとMakefile

Fortran90でmoduleを使ってみました。Makefileもあります。 注意としては、最後に実行ファイルをコンパイルする際に、モジュールのオブジェクトファイル.oも一緒にリンクしないといけないという事です。そうしないと、 undefined reference to `matrix_mp_pr…

matrix(2次元配列)とallocateのテストプログラム

Fortran90のテストプログラムです。配列をサブルーチンに受け渡す方法と、メモリの動的確保の方法を整理するために簡単なテストプログラムを作りました。 簡単なプログラムなのでコメントはありません。 適当な2次元配列をセットするset_matrixとプリントす…