トップページ⇒tech
1001コメント411KB

FORTRAN III

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
FORTRAN総合スレッドです。
FORTRAN77/90/95/2003, HPF等、FORTRAN全般に関する話題を書き込んで下さい。

・前スレ
FORTRAN II
http://pc5.2ch.net/test/read.cgi/tech/1068351911/
Fortran
http://pc2.2ch.net/test/read.cgi/tech/1003214738/
0175デフォルトの名無しさん2005/05/24(火) 08:23:00
>>174
-fast -arch host -O5
ただ、これが最速とは限らない。
0176デフォルトの名無しさん2005/05/24(火) 08:26:45
fortranはO5まであるのね。C++はO3までしかないね
0177デフォルトの名無しさん2005/05/24(火) 09:58:46
C++は-O5まであるよ。
ただマニュアルには
-O4 and -O5 have the same effect.
ってあるので、実質-O4まで。
0178デフォルトの名無しさん2005/05/24(火) 19:22:55
LINUXでFORTRAN77のコンパイル〜実行ができません。

[k@localhost k]$ gedit test.f
[k@localhost k]$ g77 test.f

となって何もなりません。
a.outは作成されるのですが、クリックしてもなにもなりません。
よろしくお願いしします。
0179デフォルトの名無しさん2005/05/24(火) 19:39:46
$ ./a.out
0180デフォルトの名無しさん2005/05/24(火) 19:45:18
>>179
出来ました!
学校のだと ./ 必要ないので分かりませんでした。
ありがとうございました。
0181デフォルトの名無しさん2005/05/25(水) 09:12:10
>>180
おやおや。その学校のマシンって結構危ないのではなかろうか。
0182デフォルトの名無しさん2005/05/25(水) 10:55:23
なんで./が必要なのかを知ってれば別にいいんじゃね。

しかし、、「クリック」なのかぁ、、。
0183デフォルトの名無しさん2005/05/25(水) 20:33:06
>>182
すいません!
知りませんw
0184デフォルトの名無しさん2005/05/26(木) 12:00:37
カレントディレクトリはコマンドパスに入れてはいけない。
0185デフォルトの名無しさん2005/05/26(木) 19:06:37
変数を NaN で初期化するには、どうしたら良い?
0186デフォルトの名無しさん2005/05/26(木) 19:49:52
>>185
NaNでそんなアフォなことを?
01871852005/05/26(木) 20:01:44
>>186
いや、つい出来心でつ。
NaNをフラッグにして、条件分岐できるかなっと。

フラッグを -1 とか 999999 とかにすると、
いわゆる2000年問題的な問題がおきるしね。
フラッグの変数(boolean)をわざわざ作るのも面倒だし。
0188デフォルトの名無しさん2005/05/26(木) 21:06:24
>>167
character型は腐ってるということで、良いですかね。
0189デフォルトの名無しさん2005/05/27(金) 01:07:05
>>188
Cだとchar型の配列と変数は整合性があるけど、fortranの場合はそれが無い。
つまり、

character(len=10) choge

と

character(len=1) choge(10)

は全く違う内部構造になってるんだよね。
0190デフォルトの名無しさん2005/05/27(金) 15:37:30
ファイルの読み書きがよくわかりません。誰か教えてくだすれ
0191デフォルトの名無しさん2005/05/27(金) 15:38:05
f77で動的にメモリ領域を割り当てるにはどうしたらよいのでしょうか?
0192デフォルトの名無しさん2005/05/27(金) 16:39:01
>>190
open, read, write を勉強しる。

>>191
できない。f90からできる。
0193デフォルトの名無しさん2005/05/27(金) 23:45:07
HP FORTRANだと構造体を使ったプログラムがf77でもコンパイル
出来たっけな。あくまでHPの独自拡張だけど。
0194デフォルトの名無しさん2005/05/28(土) 19:07:44
>>189
FortranのCHARACTERは長さの属性を持っている。
「文字型」と言っても実質的には文字列型になる。

高級言語という観点からすれば整数型 charの配列を文字列とする
Cの方が手抜きである、とも言える。
0195デフォルトの名無しさん2005/05/30(月) 17:18:15
Fortranのsubroutineをc言語から呼び出すプログラムをWINDOWS XP用のフリーのコンパイラを
使用してコンパイルしたいです。
どのコンパイラを使ったらよいですか?
0196デフォルトの名無しさん2005/05/30(月) 23:43:52
>>195
cygwin
0197sage2005/06/01(水) 18:42:46
OPEN文でファイル名を指定すれば、新しいファイルを作ることはできますが、
ディレクトリを作成するにはどうしたらよいのでしょうか。
どなたかお教えくだされたまえ。
0198デフォルトの名無しさん2005/06/01(水) 20:21:47
>>197
call system('mkdir AAA')
0199デフォルトの名無しさん2005/06/01(水) 20:26:18
めちゃくちゃ処理系に依存しそうだな
0200デフォルトの名無しさん2005/06/01(水) 21:04:20
http://www.imslab.co.jp/products/products.html#F*FLOWER

こんなツールでf90対応のソフトを知りませんか?

0201デフォルトの名無しさん2005/06/02(木) 10:14:34
組み込み関数としてRAND()が認識されないのですがなんでなんでしょうか?
ヘルプを参照したりググッてみたけどわかりませんでした。

使っているのは
Microsoft Developer Studio 97
Visual Fortran Professional Edition5.0A
というやつです。
0202デフォルトの名無しさん2005/06/02(木) 15:42:06
http://web.archive.org/web/20040223051246/http://www1.jpn.hp.com/products/software/developme
02031972005/06/02(木) 17:56:17
198さん。できました。どうもありがとうございました。
0204デフォルトの名無しさん2005/06/02(木) 22:30:20
>>198
call systemを使わないやり方はありますか?
0205デフォルトの名無しさん2005/06/03(金) 17:06:24
初心者の質問です.
LAPACK95を入れてテストしたらこんなエラーが出るんですけど
詳しい人おしえて

>g95 sample01.f90 -llapack95
In file sample01.f90:2

 use la_precision, only: WP => SP
                     1
Fatal Error: Can't open module file 'la_precision.mod' at (1)
for reading: No such file or directory

ファイル la_precision.mod は c:\g95\lib にちゃんと存在するんですけど
0206デフォルトの名無しさん2005/06/03(金) 20:55:43
>>204
おそらくないと思うよ。

でも、たいがいのコンパイラで
call system('mkdir AAA')
または
ii=system('mkdir AAA')
のどちらかはサポートしてると思う(mkdirがない場合は知らんが)
0207デフォルトの名無しさん2005/06/03(金) 23:22:27
>>204
処理系依存のサブルーチンを使う。
Visual Fortran なら MAKEDIRQQ とか。
02082042005/06/03(金) 23:39:55
>>206,207
どうもです。以前、中身の不明なディレクトリ内のファイルを全て読む
プログラムを作った時も、命令を見付けられなかったので仕方なく

call system("ls hoge/ > list")
open(io,file="list")

とかやっていました。lsが無いMS-DOSプロンプトだったら実行出来ない
ですね。
0209デフォルトの名無しさん2005/06/04(土) 17:16:08
処理系依存性を吸収するためには、プリプロセッサを使う。
0210デフォルトの名無しさん2005/06/04(土) 17:20:06
おれなら、ディレクトリ操作なんかはPythonスクリプトなんかでやって、本質的なところでFortranを呼び出す形で解決するけどな
0211デフォルトの名無しさん2005/06/10(金) 04:34:35
Python つかうと、逆にポータビリティーが下がらないか?
基本は sh だろう。
0212デフォルトの名無しさん2005/06/10(金) 22:54:19
>>205
モジュールファイルのパスはライブラリとは別に指定します。

>g95 -Ic:\g95\lib sample01.f90 -llapack95

または
set G95_INCLUDE_PATH=c:\g95\lib
としてから
>g95 sample01.f90 -llapack95
0213デフォルトの名無しさん2005/06/10(金) 23:08:21
>>211
じゃあ、ディレクトリツリーを全て巡回しながらデータファイルを探し出し、それを読み込んでfortranで処理させるのshで作れよ。
0214デフォルトの名無しさん2005/06/11(土) 10:29:31
#!/bin/sh
~/bin/getfilelist ~/dat > filelist.txt
~/bin/hoge filelist.txt
0215デフォルトの名無しさん2005/06/11(土) 13:22:55
shの機能以外を使ってるから×
0216デフォルトの名無しさん2005/06/11(土) 23:48:44
Pythonっての知らないんだけどさ、
例えばどんなスクリプトになるか
見せてちょ。
0217デフォルトの名無しさん2005/06/11(土) 23:50:39
210=213ですか?
211が言っているのはshのみを使うというよりは
sh+一般的にどこでも使えそうなコマンド(ls等)で作るという意味では。

0218デフォルトの名無しさん2005/06/11(土) 23:55:23
外部プログラム呼ぶのがオケーなら、Pythonスクリプト呼ぶのと大差ないでしょ?
つまり、sh自体にディレクトリ巡回機能が付いてるのかどうかなんですが
0219デフォルトの名無しさん2005/06/12(日) 00:42:03
シェルスクリプトは複数のプログラムを組み合わせてバッチ処理を行うための
ものだと思うんだが。

ようは目的に合わせて自分の環境で使える道具を選択すればそれで良いんだよ。
0220デフォルトの名無しさん2005/06/12(日) 00:46:55
結論を急ぐと、

Fortran単体では柔軟な処理は不可能

ということです
0221デフォルトの名無しさん2005/06/12(日) 01:06:28
一昔前ならともかくFortran単体で全てやる必要性もないし。
Fortranに限らず何でもかんでも単一の言語でやろうと余計な策を弄するのは本末転倒だし。
0222デフォルトの名無しさん2005/06/12(日) 12:51:35
それがFortranクオリティ
0223デフォルトの名無しさん2005/06/12(日) 15:52:16
フォートラン (・∀・)カックイイ
0224デフォルトの名無しさん2005/06/12(日) 18:00:19
Fortranは真の高級言語だな。
0225デフォルトの名無しさん2005/06/12(日) 22:17:59
Fortranは真の高級言語だな。
0226デフォルトの名無しさん2005/06/12(日) 22:21:11
Fortranは真の高級言語だな。
0227デフォルトの名無しさん2005/06/12(日) 22:26:18
Fortranは真の高級言語だな。
0228デフォルトの名無しさん2005/06/12(日) 22:30:19
Fortranは真の高級言語だな。
0229デフォルトの名無しさん2005/06/12(日) 22:57:28
Fortranは真の高級言語だな。
0230デフォルトの名無しさん2005/06/12(日) 23:09:50
そうですが何か?
0231デフォルトの名無しさん2005/06/12(日) 23:41:47
Fortranは真の硬旧言語だな。
0232デフォルトの名無しさん2005/06/13(月) 01:48:11
SUBROUTINEに二次元配列が渡せないよ。なぜ。
0233デフォルトの名無しさん2005/06/13(月) 04:35:50
>>221
だな。
ポータビリティーのことも考えると、
なるべく使いそうな計算環境にありふれた言語を使うことかな?

以前、Cで書いたコードをFortranからリンクしたら、
共同研究者から怒られた。Cが読めないんだって(笑)
そいうのは、例外的事例ってことで。
0234デフォルトの名無しさん2005/06/13(月) 05:52:32
複数の人間でつくる時はどんな言語を使うかも含めて
事前にルールを決めとかないと…
0235デフォルトの名無しさん2005/06/14(火) 02:20:33
これからFortranをやろうとするのは無謀ですか?
C言語はコンソールアプリケーション程度、しかもあまりできない。
Basicはアプリケーション開発をしばらくやってたけど理解できてるのかどうかわからなくてやめた。

何故やりたいのか
ちょいと興味があった。さわり程度に使ってみたい。
後はMs−Dosのシンプルな画面に惚れている。
0236デフォルトの名無しさん2005/06/14(火) 11:08:18
>>235
無謀じゃないよ。古臭い手続き型言語だから、本やWebでいくつか例題やればすぐ習得できる。
でも、あんまり面白い言語じゃないし、エレガントでもない。
0237デフォルトの名無しさん2005/06/14(火) 20:29:50
formatなどを使って、2×2の行列を表示させるにはどうしたらいい
のでしょうか?ほぼ初心者です。
0238デフォルトの名無しさん2005/06/14(火) 20:38:39
FORMAT文の勉強をするといいと思います
02392372005/06/14(火) 22:42:45
勉強してもわからんとです。
0240デフォルトの名無しさん2005/06/14(火) 22:52:39
宿題は自分でやろうね
0241デフォルトの名無しさん2005/06/14(火) 23:14:27
Intel Fortran Compiler 9.0 出たようです。
ttp://www.intel.com/software/products/compilers/flin/flinux.htm
ttp://www.intel.com/software/products/compilers/fwin/fwindows.htm
0242デフォルトの名無しさん2005/06/14(火) 23:36:20
何かよくなったんやろか、、。
0243デフォルトの名無しさん2005/06/15(水) 03:08:56
Linux超初心者です
大学の卒研でFortran(今のところ77で十分)が必要になったんですが、インストールの段階で早くもつまづき、どうにも前へ進めません
gccが何のことかすらよくわかりません
Linuxユーザの方HELP ME
0244デフォルトの名無しさん2005/06/15(水) 03:29:23
Linuxのインストールがうまくいかないという話ならLinux板で質問したほうが
いいと思うよ。
0245デフォルトの名無しさん2005/06/15(水) 03:33:48
>>243
つ http://www.google.co.jp/search?hl=ja&q=g77+linux&lr=lang_ja
0246デフォルトの名無しさん2005/06/15(水) 19:19:23
>>241
ヒロシです。
9.0 のリリースの件,ダイレクト電子メールで勤務中に知ったとです。
3月に 8.1 を買ったばかりだったので,ちかっぱショックだったとです。
ヒロシです‥‥

安値でアップグレードできるんだろうか?
今まではどうだったか,ご存じのかた教えて下さい。
0247デフォルトの名無しさん2005/06/15(水) 20:08:44
>>246
インテルにユーザー登録すれば、購入後1年間は無償で最新版をダウンロード出来ます。
2年目以降は保守ライセンス契約の更新(有償、新規価格の約半分)という形で
このサポートサービスを継続していくことが出来ます。

ttp://www.xlsoft.com/jp/products/intel/register.html
ttp://www.xlsoft.com/jp/products/intel/support/index.html
0248デフォルトの名無しさん2005/06/15(水) 20:29:47
>>247
あっ Σ( ̄□ ̄ ;
そういえばそうでした! そのことをすっかり忘れていました。
情報ありがとうございました。大感謝 m(_ _)m"
0249デフォルトの名無しさん2005/06/16(木) 01:37:06
Fortranで作ったプログラムの中に外部ソフトを組み込むことって可能ですか?
exeでしか存在していない外部ソフトです。
自分で作ったプログラムならソースがあるから、include出来ました。
ソースが無くても可能なのでしょうか?
0250デフォルトの名無しさん2005/06/16(木) 01:40:35
>>249
dllをリンクとかで出来るでしょ
02512492005/06/16(木) 02:00:08
>>250
返信ありがとうございます。でも、その方法がわかりません。
状況としては、
A(自作Fortranプログラム)とB(外部)があって、
Aで計算した結果を用いて、Bで計算をする。そしてBでの結果をまたAに返して計算。
Aは起動させたまま、ということを考えています。

dllはどうやればリンク出来るのか教えていただけますか?
0252デフォルトの名無しさん2005/06/16(木) 08:34:24
>>251
>Aで計算した結果を用いて、Bで計算をする。そしてBでの結果をまたAに返して計算。
>Aは起動させたまま、ということを考えています。

大抵の処理系では外部コマンドを起動するためのサブルーチンが用意されているので
それを使えば良い。
02532512005/06/16(木) 18:35:50
>>252
ごめんなさい。VF6.6でオンラインヘルプとか見たのですが、わかりません。
普通のサブルーチンみたいに、
call (B.exe)
は無理ですよね?
どう記述するのですか?またコンパイル時に何かやるのですか?
0254デフォルトの名無しさん2005/06/16(木) 19:41:51
VFならこんな感じ↓

program test
 use DFPORT

 integer :: ios
 integer(kind=4) :: r
 character(len=80) :: str

 r = system("dir > flist.txt")
 print *, "終了コード = ", r

 open(unit=1, file="flist.txt", status="OLD")
 do
  read(unit=1, fmt="(A)", iostat=ios) str
  if (ios /= 0) exit
  if (str(1:1) /= " ") print *, trim(str)
 end do
 close(1)
end program test

詳細はオンラインヘルプ等で「SYSTEM」または「SYSTEMQQ」を参照のこと。
0255デフォルトの名無しさん2005/06/18(土) 05:25:02
g77で乱数の発生のさせ方を教えてください!

      real x
integer l
do=1,5
call rand(x)
write(*,*) x
enddo
end

とすると、サブルーチンの使い方がおかしい!みたいなことを言われてしまいます。
よろしくお願いします!
0256デフォルトの名無しさん2005/06/18(土) 05:45:06
自己解決しました!
      real x
      integer l
      call srand(1234)
      do=1,5
       call rand(x)
       write(*,*) x
      enddo
      end
こんな感じであってますよね?
失礼しました
0257デフォルトの名無しさん2005/06/18(土) 05:51:50
あれ?コンパイルできない・・・。
      real x
      integer l
      call srand(1234)
      do=1,5
       x= rand()
       write(*,*) x
      enddo
      end
とするとできるのですが、普通のサブルーチンと扱いが違うのですかね?
あたふたしてすみません。
02582352005/06/18(土) 10:31:23
今現在CPadで一人で勉強中。
このコンパイルの瞬間がC言語でも味わったけど、好きだ。
無機質にDos画面で表示されている瞬間なぜか技術者気分だ。
コード自体は入門サイトからのだからそんな難しいものではない。
だけどいつかは大学の言語解析ソフトくらいはつくれるようになりたい。
・・・というかプログラムか。
なんか英語辞書が組み込まれててテキストの中に入っている文書から英単語を読み出して、それの個数を読み出すソフト。
そしたらメモ帳に出力させてた。
一定のスペースをつけて読み出してるからエクセルでも処理可能。
それくらいは作ってみたい。
ただそのソフト、日本語はサポートされてないからひとつの文書にある文字ベースのエントロピーが求められん・・。
日本語入れた瞬間バグ起こしたもんで教授から大目玉とはこれいかに・・。
0259デフォルトの名無しさん2005/06/18(土) 11:39:36
>>257
      do=1,5

のとこじゃない?
0260デフォルトの名無しさん2005/06/21(火) 08:44:06
古いフォートランのコードで、Cに直したいのですがコードが読めません。
もし分かる方いらっしゃったら確認お願いします。
以下コード

FUNCTION RAND(K)

INTEGER K, M, CONST1
REAL RAND, CONST2
PARAMETER (CONST1 = 2147483647, CONST2 = .4656613E-9)
SAVE
DATA M /0/

IF(M .EQ.0) M = K
M = M * 65539
IF(M .LT. 0) M = (M + 1) + CONST1
RAND = M*CONST2

END

以下私の理解している事: 参考にしたページ: http://www.g.dendai.ac.jp/lecture/fortran/fort12.html

任意のKが関数に渡される。
関数は K*65539*CONST2をいつも返す。

でもいくつか疑問点があります。
どうして型宣言が行われていないのでしょうか?
どうして関数は特定の値をいつも返すのに、IFの分岐が必要なのでしょうか?
困ってます。アドバイスをよろしくお願いしますm(__;)m
0261デフォルトの名無しさん2005/06/21(火) 12:00:40
「暗黙の型宣言」てやつで、RAND自体は単精度実数になってる。
関数が持ってるMという変数の値はSAVE宣言されてるから、関数から抜けても値が保存される。
呼び出されるごとに関数が返す値は違う。IF文は乱数発生アルゴリズムを理解すれば意味がわかる。
0262デフォルトの名無しさん2005/06/22(水) 00:33:44
>>260
・DATA 文による初期化は、プログラムの実行前(?)に1度しか実行されない

・SAVE 文があるので、関数内の変数はすべて static

(例外はあるが、FORTRANのローカル変数はSAVEがあろうが無かろうが
すべて static と考えたほうがよい)
0263デフォルトの名無しさん2005/06/22(水) 16:09:12
> (例外はあるが、FORTRANのローカル変数はSAVEがあろうが無かろうが
> すべて static と考えたほうがよい)
>

え−っ! すごい昔の話じゃないの?

0264デフォルトの名無しさん2005/06/22(水) 17:32:08
address errorがでるときの原因を教えてください!
お願いします。
0265デフォルトの名無しさん2005/06/22(水) 18:01:09
>>264
OSやコンパイラの種類を教えてくれないと分らん。
0266デフォルトの名無しさん2005/06/22(水) 18:55:48
それでもエスパーなら、エスパーなら何とかしてくれる
0267デフォルトの名無しさん2005/06/22(水) 18:58:08
配列の範囲外をアクセスしようとしたとか
0268デフォルトの名無しさん2005/06/22(水) 19:04:57
>>265
ウィンドウズです。
コンパイラは77だと思います。
0269デフォルトの名無しさん2005/06/22(水) 19:18:36
それはコンパイラとは言わない
0270デフォルトの名無しさん2005/06/22(水) 19:20:06
>>264,268
これらの情報から考えられる原因:

お前のプログラムがカスだから
0271デフォルトの名無しさん2005/06/22(水) 22:09:40
address errorというのはコンパイル時に出るものなのか、
実行時に出るものなのか。address errorというだけで自明の
ことなのだろうか。
0272デフォルトの名無しさん2005/06/22(水) 22:19:24
【科学技術計算】C言語とFortran どっちがいい?
http://science3.2ch.net/test/read.cgi/sim/1042715803/476
476 名前:名無しさん@3周年[] 投稿日:2005/06/22(水) 17:26:14
fortran使って作ったプログラムがコンパイルできるんだが
実行するとaddress errorって出るあるよ
どうしてあるか?
0273デフォルトの名無しさん2005/06/22(水) 22:42:32
>>263
たしかに、保証はされてないですね。
そのための save 属性だし。
0274デフォルトの名無しさん2005/06/22(水) 23:18:30
>>261
>>262
ありがとうございました!!周りに知ってる人がいなくて困ってました。
m(_ _)m 重ね重ねお礼申し上げます。。
■ このスレッドは過去ログ倉庫に格納されています