C言語からFortran90への翻訳

アバター
コスモ
記事: 3
登録日時: 14年前
連絡を取る:

C言語からFortran90への翻訳

投稿記事 by コスモ » 14年前

うちの研究室ではCよりもFortran90の勢力の方が強いです。
休日と言うことでFortran90:自由形式の勉強もかねてC言語で書かれたKdV方程式の数値計算プログラムをFortran90への翻訳をしてみました。

ここで、結構落とし穴にはまってしまいました。
最初は配列の記述法が違うくらいだと思ってました。
Cでは
double a[3];
のように宣言しますが、
Fortran90だと
double precision,dimension(3) :: a
と宣言します。※文末のセミコロンは要りません。
配列の目印が[]から()に変わっただけかと思っていたのが甘かった・・。

これだけなら良かったのですが、最大の落とし穴は
Fortranでは配列が0ではなく1から始まること
でした。
Cと同じようにFortranでも配列の範囲外アクセスの例外が発生して落ちてしまいます。
これに気付くのに時間がかかりました。
言語を一つだけでなく、色々使う人はこういう細かいところにも気を配らないといけないみたいですねぇ。
ではこの辺で。
最後に編集したユーザー コスモ on 2010年11月03日(水) 18:22 [ 編集 1 回目 ]

アバター
shiro4ao
記事: 224
登録日時: 15年前

Re: C言語からFortran90への翻訳

投稿記事 by shiro4ao » 14年前

サブルーチン(?)とか文関数(?)とか副プログラム(?)とか
いろいろありすぎて混乱した記憶があります。
授業はFortran90だったのにコンパイラが
FORTRAN77でさらに混乱しました。

いくつも言語を使える人ってすごいですね~

アバター
コスモ
記事: 3
登録日時: 14年前
連絡を取る:

Re: C言語からFortran90への翻訳

投稿記事 by コスモ » 14年前

>shiro4aoさん
いくつも言語を使っている割には全然使いこなせていない感じがしている今日この頃です^^;

Fortran90・自由形式を使ってはいますが、固定形式とかFortran77は全くと言って良いほど読めませんし、書けません。バージョン&形式が違うと全くの別言語ですよね・・。

ISLe
記事: 2650
登録日時: 15年前

Re: C言語からFortran90への翻訳

投稿記事 by ISLe » 14年前

double precision,dimension(0:3-1) :: a
と宣言したら0~2になるのではないでしょうか?

アバター
コスモ
記事: 3
登録日時: 14年前
連絡を取る:

Re: C言語からFortran90への翻訳

投稿記事 by コスモ » 14年前

>ISLeさん
ちょっとコロンが気になって調べてみたら配列の開始位置を変える機能があったんですね。知らなかった・・。
でもdouble precision,dimension(0:3-1) :: a
よりは、直接
double precision,dimension(0:2) :: a
としてしまった方が良い気がします。あくまで気がするだけですが。

ISLe
記事: 2650
登録日時: 15年前

Re: C言語からFortran90への翻訳

投稿記事 by ISLe » 14年前

意味のある3は残しておきたい気持ちになります。
このような場合はたいてい即値ではなく識別子を与えるべきですが。