FORTRAN専用スレッド

このエントリーをはてなブックマークに追加
129仕様書無しさん:04/07/04 17:58
>>128
どうもです。ありがとうございました。
130仕様書無しさん:04/07/04 22:59
>>128
廃止"予定"事項なのでFortran95ではまだ使えます。

Fortran90で廃止予定事項として上がっていた物のうち
実数型制御変数を使ったDOループやPAUSE文などは
Fortran95で廃止されています。

ただ、規格上は廃止されていても実際のコンパイラでは
これらの機能を使える物がほとんどのようですが。
(オプション等でエラーや警告が出るようにはなります)
131仕様書無しさん:04/07/31 23:26
至急、質問があります。
FFT(高速フーリエ変換)のプログラムを作ってます。
今まで処理データ数が16000個くらいで、順調に計算できていました。
しかし、データ数を70000個くらいに増やすと、出力ファイルに
『*』印がたくさん出てきます。
ちなみに言語はフォートランで出力はCSV形式で出力してます。
これはフォーマットの設定が悪いんでしょうか?
132仕様書無しさん:04/07/31 23:59
>>131
マルチポストするような奴には教えてやらん。
133仕様書無しさん:04/08/04 22:55
申し訳ありませんが質問なのですが。

character*10 cc
real array(10)

array(5)=5.0

write(cc,'(A)') 'array'

として、character の cc を使ってarrayの中身を表示することは可能でしょうか?
イメージ的には

write(*,*) cc(5)

のような感じです。(上のままではコンパイル通りませんが)
134仕様書無しさん:04/08/04 23:34
>>133
最終的には,文字列が加工できるから使う変数を動的に変えられるだろうな,って話?
135仕様書無しさん:04/08/04 23:40
>134
その通りです。
でも、やり方がわかりません。何か別にうまい方法があるのかもしれませんが。
136仕様書無しさん:04/08/04 23:49
>>135
こういう方法を使わないアルゴリズムを作れませんか?
高級言語なら,文字列からシンボルを引くことができます.
C 言語でも似たようなことができ,関数へのポインタと文字列をメンバにした
構造体を用意します.

fortran はよく知りませんが,関数へのポインタを変数に入れられましたよね?
文字列の配列を作って,さらに関数へのポインタを入れる配列をインデックスを揃えて
作るとかは? ...できるのかな ;-D
137仕様書無しさん:04/08/04 23:55
>>136
すでに存在する巨大なfortranプログラム+巨大なinclude fileをベースに
一部変更する必要があり、その中で上のような事ができれば便利だと
感じたので質問してみました。

何か別の方法を考えてみます。
138仕様書無しさん:04/08/05 01:17
>>136-137
EXTERNALを使えば関数へのポインタを引数に取れるけど
変数に代入したり、配列にするのは無理。

intrinsic cos
external bar2, bar3
write(*,*) foo(cos, 0.)
a = 2.
write(*,*) foo(bar2, a)
write(*,*) foo(bar3, a)
end

real function foo(f,x)
external f
foo = f(x)
end

real function bar2(x)
bar2 = x**2
end

real function bar3(x)
bar3 = x**3
end

あとはこのページが参考になるかな?
ttp://user.ecc.u-tokyo.ac.jp/~tt37103/tips/f90/function_pointer.html
139仕様書無しさん:04/08/06 19:27
>>138
できないとなると悲しいな.
140仕様書無しさん:04/08/14 00:36
DIMENSION A(100)というのの100のところは最大で、どのくらいまでできるんでしょうか?

DIMENSION A(131072)までは、プログラムが実行されるのに、
DIMENSION A(262144)にすると、
「Stack Overflow Re-ling program with bigger stack value.
stack:reserve,commit.Will attempt to trace back」
「Stack Overflow: at address=541718,esp=547f6
00541718 routine at address 541718[+0000]」
って出てプログラムが実行できないんです。
141仕様書無しさん:04/08/14 22:13
>>140
処理系に依る。
FTN95だと
DIMENSION A(300000)
とかでもできた。
142仕様書無しさん:04/08/21 06:51
143仕様書無しさん:04/08/22 17:20
>>140
コンパイル・オプションで、スタックのサイズを変えられないの?
あとは、動的にメモリを取得するとか。
144仕様書無しさん:04/08/22 23:14
>>140
コンパイル・オプションで、スタックのサイズを変えられないの?
あとは、動的にメモリを取得するとか。
145仕様書無しさん:04/08/28 21:37
>>139
Fortran 2003ならprocedure pointer (関数・サブルーチンへのポインタ)が使えるんだけどね。
いかんせん、Fortran 2003準拠の処理系がまだないのが…
146仕様書無しさん:04/08/29 00:32
>>145
お、いつのまにかFortran2003なんて出てたんですね。っていうか2000は?
147仕様書無しさん:04/08/29 00:41
>>146
ttp://www.itscj.ipsj.or.jp/committees/sc22/sc22fortran.html
>従来,通称Fortran 2000と呼んできたが,2003年度に開催されたWG 5会議において,
>通称Fortran 2003と呼ぶことが決議された.

規格制定が遅れたんで名前が変わっちゃいました。
148仕様書無しさん:04/10/04 20:47:49
社会保険庁のシステムがFORTRANで組まれているという話をよく聞きますが、なんででしょう?
この手の業種はかつてはCOBOLが一般的だったような気がするのですが。。。
149仕様書無しさん:04/10/04 22:30:31
おいおい、ところどころ宿題スレになってんな。
もっとマ板らしいネタスレにしようぜ。

俺はFORTRAN使ったことない
150仕様書無しさん:04/10/04 22:50:45
おれはある
151仕様書無しさん:04/10/05 00:45:27
俺は今でも使ってる
152仕様書無しさん:04/10/05 07:52:17
俺はFORTRANで書かれている
153仕様書無しさん:04/10/05 23:58:42
>>152
名前は6文字以下ね
154仕様書無しさん:04/10/13 02:36:04
FORTRAN77(の方言)で、メモリを動的確保するサブルーチン/関数
はありますか。

155仕様書無しさん:04/10/15 18:27:05
Fortranでいいフリーのデバッガってないですかね?

gdbも一応Fortranに対応しているようですが,世の中の情報が少なくて困ります.

あと,静的なツールもフリーでご存知の方いらっしゃったらお願いします.当方はctagsを使っているのですが...

156仕様書無しさん:04/10/16 10:04:18
open watcom
157仕様書無しさん:04/11/02 00:33:15
わからない問題がいくつかあるんですが暇つぶしに解いてくれる猛者はいませんか??
158仕様書無しさん:04/11/02 01:35:39
いないか(´Д⊂グスン
159仕様書無しさん:04/11/02 01:42:26
sdf
160仕様書無しさん:04/11/02 01:44:21
助けてくれるんですか??
161仕様書無しさん:04/11/18 11:11:48
分からない問題があるのですが助けてくれる方いませんか??
162仕様書無しさん:04/11/18 23:28:45
>>161
タダじゃいや。
163仕様書無しさん:04/11/20 07:05:07
以下のようなプログラでは、配列Aの部分配列(スライス)をポインタPと結合しています。

このとき、ポインタの下限値 lbound(P)が1、上限値 ubound(P) が 4 になってしまうんだけど、なんとかポインタの下限値を結合先と一致させる方法はありませんか?ポインタの下限値と上限値をそれぞれ 0 と 3にしたいのです。

program main
integer,dimension(0:3,0:3,0:3,0:10),target :: A
integer,dimension(:,:,:),pointer :: P
p => A(:,:,:,2)
print *, lbound(P), ubound(P)
print *, lbound(A), ubound(A)
end program main

ちなみに、以下のように、配列A全体を結合させると、結合先と添字の下限値が一致しますが、目的はこのようなコードではありません。

program main
integer,dimension(0:3,0:3,0:3),target :: A
integer,dimension(:,:,:),pointer :: P
p => A
print *, lbound(P), ubound(P)
print *, lbound(A), ubound(A)
end program main





164仕様書無しさん:04/11/23 19:11:21
フリーのfortranコンパイラを探しています。
Windows用の。
165仕様書無しさん:04/11/23 19:12:10
フリーのfortranコンパイラを探しています。
Windows用の。
166仕様書無しさん:04/11/24 22:59:55
フリーのfortranコンパイラを探しています。
Windows用の。
















全裸で
167仕様書無しさん:04/11/25 00:34:13
ここはプログラ「マ」板ですから,>>164 は釣りだと思います.
いや,「探しているプログラマ」というのを演出しているのかも.
168仕様書無しさん:04/11/25 01:02:59
フリーのfortranプログラマを探しています。
Windows用の。
169164:04/11/25 20:47:12
フリーの100万円探しています。
Windows用の
170仕様書無しさん:04/11/26 00:05:48
まだVisualFortranってあるの?
171仕様書無しさん:04/11/26 19:26:28
Power Stationって何
172仕様書無しさん:04/12/03 01:47:29
>>171
1. かつてMicrosoftで出してたWindows 上のFORTRAN

Microsoft Fortran

Microsoft Fortran Powerstation
(↓ 実は別物)
DEC Visual Fortran

Compaq Visual Fortran

(HPに会社ごと身売り HPブランドではVFは放置)
(↓ 実は別物?)
Intel Visual Fortran




2. 昔のIBMのEWS(RS/6000)も、POWERSTATION という名前だったような気がする。
173仕様書無しさん:04/12/03 20:15:04
>>172
おお、サンクス

流れが良くわかったよ
174仕様書無しさん:04/12/11 07:53:55
>>172
CVFとIVFの関係は、フロントエンド部がCVFを元にしており、
バックエンドがIntel独自という関係ではないかな?
つまり半分別物。
175仕様書無しさん:04/12/18 09:12:10
>>163
一般的には、部分配列を取ると、コンパイラ側でいったん非明示的ワーク配列に展開してそれを改めて引き渡したりしている。
今の状況では、本来メモリー的にはすでに連続しているので必要ないのだが、多分ワークに展開されていると思う。

非明示的ワーク配列の添え字が1から始まるという事情で、ポインター側の添え字も1から始まることになってしまうのだろう。
1個目と2個目のプログラムの挙動の違いはそういうことだと推測される。

したがって、手動で明示的に3次元の0から始まるワーク配列に展開して、それにポインタを割り付けるしかないと言うことになる。
多分オーバーヘッド的にはあまり変わらないと思う。

ただし、以上はいくつか他の場合の挙動に基づく推測なので、正しくないかも。
176175:04/12/18 09:14:47
>>175 の補足
program main
integer,target :: A(0:3,0:3,0:3)
integer,pointer :: P(:,:,:), q(:,:,:)
p => A
q => A(:,:,:)
print *
print *, lbound(P), ubound(P)
print *
print *, lbound(q), ubound(q)
print *
print *, lbound(A), ubound(A)
end program main


出力結果 by DVF
0 0 0 3 3 3

1 1 1 4 4 4

0 0 0 3 3 3
177仕様書無しさん:04/12/22 07:37:50
♪おおブレネリ あなたのおうちはどこ
わたしのおうちは スイッツァランドよ
きれいな湖水の ほとりなのよ
ヤッ〜ホ〜
178仕様書無しさん
FORTRAN IV YOU !