このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。
●注意事項
・質問する前にGoogle等の検索サイトで検索しましょう。
・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。
・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。
●前スレ
くだすれFORTRAN(超初心者用)その5
http://toro.2ch.net/test/read.cgi/tech/1269704830/
●過去スレ
くだすれFORTRAN(超初心者用)その4
http://pc12.2ch.net/test/read.cgi/tech/1232789521/
くだすれFORTRAN(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1196384126/
くだすれFORTRAN(超初心者用)その2
http://pc11.2ch.net/test/read.cgi/tech/1164121236/
くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/
探検
くだすれFORTRAN(超初心者用)その6
■ このスレッドは過去ログ倉庫に格納されています
2012/08/16(木) 20:58:00.31
452デフォルトの名無しさん
2014/06/05(木) 00:38:07.03ID:a9B4CiIQ >>451のいう通り、同じプログラム単位に書かれたら、後ろに追加になる。
COMMONはグローバル変数とは違う。メモリー領域の共有。
COMMON/mat/a(20)とCOMMON/mat/a1,a2,....,a25が別々のプログラム単位に
あらわれたら、それはa(1)とa1の番地が等しくて、メモリー領域を共有している。
(ポインター風にいえば同じ番地を差している。)同様にa(2)はa2、a(3)はa3...
a(20)はa20とメモリー領域を共有している。
さてa21に対応する配列要素はないのだが、メモリー上では配列をはみ出した
a(21)にあたる番地を差すことになる。(配列はメモリー上で連続に確保される。
COMMON変数は、普通は、宣言順に詰めてメモリー上に配置される)
だから、コンパイラが気を利かせて、名前付きCOMMONであっても、
最大サイズのCOMMONブロックの大きさを確保してくれていれば、
なんら問題は生じない。しかし、昔のHITACとか気の利かない堅物は、
最初に出会ったCOMMONブロックの大きさで領域確保するので、ちとまずい。
(ACOS>FACOM>HITACの順でけつの穴が小さい。)
COMMONブロックの大きさが違っていいのは、名前付きCOMMONのみ。
今の質問者の場合はmatという名前がついているので、本来はサイズが違う
のは許されていない。が、昔はよく使われていた。
だから別に驚くことでも何でもない。
ちなみに無名COMMONとは(COMMON //a(20) とか COMMON a(20)とか)
COMMONはグローバル変数とは違う。メモリー領域の共有。
COMMON/mat/a(20)とCOMMON/mat/a1,a2,....,a25が別々のプログラム単位に
あらわれたら、それはa(1)とa1の番地が等しくて、メモリー領域を共有している。
(ポインター風にいえば同じ番地を差している。)同様にa(2)はa2、a(3)はa3...
a(20)はa20とメモリー領域を共有している。
さてa21に対応する配列要素はないのだが、メモリー上では配列をはみ出した
a(21)にあたる番地を差すことになる。(配列はメモリー上で連続に確保される。
COMMON変数は、普通は、宣言順に詰めてメモリー上に配置される)
だから、コンパイラが気を利かせて、名前付きCOMMONであっても、
最大サイズのCOMMONブロックの大きさを確保してくれていれば、
なんら問題は生じない。しかし、昔のHITACとか気の利かない堅物は、
最初に出会ったCOMMONブロックの大きさで領域確保するので、ちとまずい。
(ACOS>FACOM>HITACの順でけつの穴が小さい。)
COMMONブロックの大きさが違っていいのは、名前付きCOMMONのみ。
今の質問者の場合はmatという名前がついているので、本来はサイズが違う
のは許されていない。が、昔はよく使われていた。
だから別に驚くことでも何でもない。
ちなみに無名COMMONとは(COMMON //a(20) とか COMMON a(20)とか)
453デフォルトの名無しさん
2014/06/05(木) 01:27:46.66ID:a9B4CiIQ コンパイラのオプションでMAPファイルを書かせれば確かめられる。
Intel Fortranの場合、/MAPでいく。gfortran はちょっと見た感じ見つからんw
昔のコンパイラなら必ずあった。
MAPファイル内を探すと
0004:00000aa0 _MAT 00406aa0 <common>
0004:00000b20 ___native_startup_state 00406b20 <common>
0004:00000b24 ___native_startup_lock 00406b24 <common>
0004:00000b28 ___onexitend 00406b28 <common>
0004:00000b2c ___onexitbegin 00406b2c <common>
0004:00000b30 __NoHeapEnableTerminationOnCorruption 00406b30 <common>
0004:00000b34 ___dyn_tls_init_callback 00406b34 <common>
こんな感じの出力がある。
ここで実験した感じでは、単精度4バイト*8個=32バイトづつ、
領域を確保していっている。COMMONでa1..a25 の場合、本来は4*25バイト
あれば十分だが、8の倍数ごと確保しているようなので、
番地 00406aa0 から 00406b20 まで4*32バイト確保している。
COMMMONの現れる順番に関わらず、最大のサイズをとってくれている模様。
Intel子は気が利くなw 心ぴょんぴょん待ち〜
Intel Fortranの場合、/MAPでいく。gfortran はちょっと見た感じ見つからんw
昔のコンパイラなら必ずあった。
MAPファイル内を探すと
0004:00000aa0 _MAT 00406aa0 <common>
0004:00000b20 ___native_startup_state 00406b20 <common>
0004:00000b24 ___native_startup_lock 00406b24 <common>
0004:00000b28 ___onexitend 00406b28 <common>
0004:00000b2c ___onexitbegin 00406b2c <common>
0004:00000b30 __NoHeapEnableTerminationOnCorruption 00406b30 <common>
0004:00000b34 ___dyn_tls_init_callback 00406b34 <common>
こんな感じの出力がある。
ここで実験した感じでは、単精度4バイト*8個=32バイトづつ、
領域を確保していっている。COMMONでa1..a25 の場合、本来は4*25バイト
あれば十分だが、8の倍数ごと確保しているようなので、
番地 00406aa0 から 00406b20 まで4*32バイト確保している。
COMMMONの現れる順番に関わらず、最大のサイズをとってくれている模様。
Intel子は気が利くなw 心ぴょんぴょん待ち〜
454453
2014/06/05(木) 01:28:36.28ID:a9B4CiIQ テストプログラム
subroutine sub()
common/mat/a(20)
a = 1.0
print *, a
end
program Console1
real a
common/mat/a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,&
a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,&
a21,a22,a23,a24,a25
a = 0.0
print *, (Z'b20'-Z'aa0') / 4
end program Console1
subroutine sub()
common/mat/a(20)
a = 1.0
print *, a
end
program Console1
real a
common/mat/a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,&
a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,&
a21,a22,a23,a24,a25
a = 0.0
print *, (Z'b20'-Z'aa0') / 4
end program Console1
455デフォルトの名無しさん
2014/06/05(木) 01:40:20.97ID:ivUEXHmG Emacsでfortran のコマンド自動補完できるのかな?
456デフォルトの名無しさん
2014/06/05(木) 11:54:05.31ID:qVumrB9V457デフォルトの名無しさん
2014/06/05(木) 22:09:23.11ID:m2ykd6YT common/mat/a(20)
→ real * 20個 = 80 byte → 32 byte 単位で3つ分 (96 byte)
common/mat/a1,a2,…a25
→ real * 25個 = 100 byte → 32 byte 単位で4つ分 (128 byte)
Intelの場合は、プログラムのつじつま合わせに /mat/ には4つ分のメモリが必要だと判断した、ということ
32byte単位なのは、そうしたほうが「自分とこの最適化に有利」だから
気を利かせて余分に取ってるわけではない
→ real * 20個 = 80 byte → 32 byte 単位で3つ分 (96 byte)
common/mat/a1,a2,…a25
→ real * 25個 = 100 byte → 32 byte 単位で4つ分 (128 byte)
Intelの場合は、プログラムのつじつま合わせに /mat/ には4つ分のメモリが必要だと判断した、ということ
32byte単位なのは、そうしたほうが「自分とこの最適化に有利」だから
気を利かせて余分に取ってるわけではない
458453
2014/06/05(木) 23:04:15.60ID:a9B4CiIQ >>456
虚心に読めよw
1.名前付きCOMMONで長さがそろわないのは文法違反。
2.ゆえにそれがどう扱われるかは、処理系依存。
3.したがって、自分の利用しているコンパイラがどう扱っているか調べる必要あり。
4.調べる方法の一例はMAPファイルを書かせること。実例をIntelCompilerで示した。
結論:そなたの使っているコンパイラがわからなければここでは答えようがない。
大抵の処理系では適当に慮ってやってくれるが、昔のHITACのような凡例も
あるので何とも言えない。NAGとか文法にうるさいのを売りにしている処理系では
期待薄。
>>457
うむ。DECのαとか、64bit時代になってから、COMMON文の中までPaddingして
メモリー・アラインメントをそろえてくるので、昔のプログラムを動かそうとすると
やっかい。
Intelが32バイトづつ増やしているのは、AVXとかベクトル化の単位に合わせている
可能性が高いと思う。
虚心に読めよw
1.名前付きCOMMONで長さがそろわないのは文法違反。
2.ゆえにそれがどう扱われるかは、処理系依存。
3.したがって、自分の利用しているコンパイラがどう扱っているか調べる必要あり。
4.調べる方法の一例はMAPファイルを書かせること。実例をIntelCompilerで示した。
結論:そなたの使っているコンパイラがわからなければここでは答えようがない。
大抵の処理系では適当に慮ってやってくれるが、昔のHITACのような凡例も
あるので何とも言えない。NAGとか文法にうるさいのを売りにしている処理系では
期待薄。
>>457
うむ。DECのαとか、64bit時代になってから、COMMON文の中までPaddingして
メモリー・アラインメントをそろえてくるので、昔のプログラムを動かそうとすると
やっかい。
Intelが32バイトづつ増やしているのは、AVXとかベクトル化の単位に合わせている
可能性が高いと思う。
459デフォルトの名無しさん
2014/06/05(木) 23:32:23.89ID:ivUEXHmG 誰かいまっくすでフォートランのコマンド自動補完する方法しらんかいの?
460デフォルトの名無しさん
2014/06/06(金) 03:54:07.35ID:jaKSg6aA みんな Stallman のデブが嫌いだからな
それにスクリーンエディターに頼るのは甘え
俺は甘えん坊だがw
それにスクリーンエディターに頼るのは甘え
俺は甘えん坊だがw
461デフォルトの名無しさん
2014/06/06(金) 16:41:53.21ID:J0jnFElL 甘いと言うより古いな
462デフォルトの名無しさん
2014/06/06(金) 22:53:03.99ID:Bx53wjCJ メモ帳からデータを読み込む際、TABキーによる空白や全角による空白、半角による空白で違いはあるのですか?
数値を1 2 3 4と1行に入力したとき勝手に1、2、3、4と区別して読んでくれるのでどうやって判断しているのだろうと疑問に思いました。
試しにすべてのTABキースベースを半角1スペースに置換して読み込ませたところ、エラーで読みませんでした。
数値を1 2 3 4と1行に入力したとき勝手に1、2、3、4と区別して読んでくれるのでどうやって判断しているのだろうと疑問に思いました。
試しにすべてのTABキースベースを半角1スペースに置換して読み込ませたところ、エラーで読みませんでした。
463デフォルトの名無しさん
2014/06/08(日) 11:12:25.46ID:dwjjMbeb >>460
みんななに使ってるのかな?
みんななに使ってるのかな?
464デフォルトの名無しさん
2014/06/09(月) 23:14:56.35ID:p2A2eKRk >>429ですが、解決しました。
CHARACTER*120という部分だけを変えていて、FORMAT文まで変えていなかったりときちんとすべて変えていなかったのが原因でした。
そこここにローカルな記述方法が多く困りましたが、とても助かりました。ありがとうございました。
CHARACTER*120という部分だけを変えていて、FORMAT文まで変えていなかったりときちんとすべて変えていなかったのが原因でした。
そこここにローカルな記述方法が多く困りましたが、とても助かりました。ありがとうございました。
465デフォルトの名無しさん
2014/06/10(火) 00:00:20.47ID:uCkYRtw5 みんなずっこけるよ…
466デフォルトの名無しさん
2014/06/11(水) 22:05:12.93ID:HeH2upb6 プログラムが長くなってきて、
いくつかのファイルに分けてサブルーチンを書いているのですが、
わかりやすい整理方法、命名方法などないでしょうか
同じ機能群のサブルーチンは
同じファイルにまとめるぐらいはしているのですが
だんだん分からなくなってきて
多分このまま続けたら発散するんだろうな・・と思います
スレ違いかもしれませんがもしコツなどありましたらお願いします
いくつかのファイルに分けてサブルーチンを書いているのですが、
わかりやすい整理方法、命名方法などないでしょうか
同じ機能群のサブルーチンは
同じファイルにまとめるぐらいはしているのですが
だんだん分からなくなってきて
多分このまま続けたら発散するんだろうな・・と思います
スレ違いかもしれませんがもしコツなどありましたらお願いします
467デフォルトの名無しさん
2014/06/12(木) 00:49:36.30ID:iuJue+V7 あるプログラムの一部を修正している途中なのですが、触っていないところでエラーが起きるようになり、困っています。
build自体は問題がなくて、build後のプログラムを実行すると以下のエラーメッセージが出て止まります
illegal character in numeric input
read(unit=1,...)
修正前のプログラムでは滞りなく回るのですが修正中のプログラムでは回らなくなっています。
触っていないところなのでどこから手をつけて良いかわかりません。
build自体は問題がなくて、build後のプログラムを実行すると以下のエラーメッセージが出て止まります
illegal character in numeric input
read(unit=1,...)
修正前のプログラムでは滞りなく回るのですが修正中のプログラムでは回らなくなっています。
触っていないところなのでどこから手をつけて良いかわかりません。
468デフォルトの名無しさん
2014/06/12(木) 01:11:55.34ID:37CEZRmy >>467に追記です。
修正前のプログラムは
absoft fortran 9.0(windows7)
修正後のプログラムは
absoft fortran11.0(windows8)で作られています
修正前のバージョンに自信がないですが、バージョンが異なるのは確かです
もともと、修正後のプログラムはビルドできるのに、そのプログラムをwindws7、9.0のパソコンでビルドしようとするとなぜかビルドできないという状況です
そこがエラーを起こす原因なのかもしれません
プログラムが止まるところはインプットファイル中にある、ある数を0にしておけば回るようになり、0じゃなくて数を与えるとエラーを吐きます。
修正前のプログラムは
absoft fortran 9.0(windows7)
修正後のプログラムは
absoft fortran11.0(windows8)で作られています
修正前のバージョンに自信がないですが、バージョンが異なるのは確かです
もともと、修正後のプログラムはビルドできるのに、そのプログラムをwindws7、9.0のパソコンでビルドしようとするとなぜかビルドできないという状況です
そこがエラーを起こす原因なのかもしれません
プログラムが止まるところはインプットファイル中にある、ある数を0にしておけば回るようになり、0じゃなくて数を与えるとエラーを吐きます。
469デフォルトの名無しさん
2014/06/12(木) 02:49:22.16ID:KPlz8uhx おおかた、全角文字でも入っているのだろう。
470デフォルトの名無しさん
2014/06/12(木) 07:38:50.36ID:IkGTnMqV >>469
どうすればそこを見つけられるのでしょうか
どうすればそこを見つけられるのでしょうか
471デフォルトの名無しさん
2014/06/12(木) 22:00:13.35ID:1yO42ooY >>468ですが、修正は関係ないことがわかりました。
もともとの渡されたソースファイルをabsoft fortran 11.0でbuildするとbuild自体はうまくいきますが、同じ箇所でruntime errorとなりました
コピーして新規ファイルを作ってbuildしても同様の結果となりました。.f95.f77.fの3パターンで新規ファイルを作ってbuildしましたが、同じ結果でした
verはおそらく9.0で拡張子は.fで渡されています。
.fファイルだけでなくguiやgviという拡張しのついたファイルも一緒に渡されているのですが、それを11.0では必要としていないので使っていません。
これが何か悪さをしているのでしょうか?
もともとの渡されたソースファイルをabsoft fortran 11.0でbuildするとbuild自体はうまくいきますが、同じ箇所でruntime errorとなりました
コピーして新規ファイルを作ってbuildしても同様の結果となりました。.f95.f77.fの3パターンで新規ファイルを作ってbuildしましたが、同じ結果でした
verはおそらく9.0で拡張子は.fで渡されています。
.fファイルだけでなくguiやgviという拡張しのついたファイルも一緒に渡されているのですが、それを11.0では必要としていないので使っていません。
これが何か悪さをしているのでしょうか?
472デフォルトの名無しさん
2014/06/13(金) 08:46:16.45ID:YPxIZA8y もともとのファイルは9.0でビルドすると正しく動くということ?
環境を変えるときコンパイラが生成したものを運んだりしてないか
ある数が0の時回るとあるけど、その変数周りを調べていくしかないと思う
なんの数字か知らないが、例えばその数が読み込むデータの数を表してて、その数字と実際のデータ数があってない
そして型の合わない次のデータを読もうとしてとまるとか
環境を変えるときコンパイラが生成したものを運んだりしてないか
ある数が0の時回るとあるけど、その変数周りを調べていくしかないと思う
なんの数字か知らないが、例えばその数が読み込むデータの数を表してて、その数字と実際のデータ数があってない
そして型の合わない次のデータを読もうとしてとまるとか
473デフォルトの名無しさん
2014/06/13(金) 08:59:26.44ID:XnqRfLRO >>472
はい。同じ読み込みデータでも正しく動きます。
runtime error
illegal character in numeric input
ある数というのは出力してほしいデータを指定する数です。
データの種類が5種類ほどあって、ある1種のデータを出力するよう指示をすると止まってしまいます。
一行中に
300 400 200 0 0
というように出力してほしいデータの数を指定しますが、みぎから2番目のデータを変えるとダメです
正しいアウトプットでは
<< 出力するデータの情報 >>
出力データ
...
というように進むのですが、ある数字では
>>
だけが延々と繰り返されたり、別の数字では上記の通りruntime error illegal character in numeric inputと出て止まったり
というような感じです
はい。同じ読み込みデータでも正しく動きます。
runtime error
illegal character in numeric input
ある数というのは出力してほしいデータを指定する数です。
データの種類が5種類ほどあって、ある1種のデータを出力するよう指示をすると止まってしまいます。
一行中に
300 400 200 0 0
というように出力してほしいデータの数を指定しますが、みぎから2番目のデータを変えるとダメです
正しいアウトプットでは
<< 出力するデータの情報 >>
出力データ
...
というように進むのですが、ある数字では
>>
だけが延々と繰り返されたり、別の数字では上記の通りruntime error illegal character in numeric inputと出て止まったり
というような感じです
474デフォルトの名無しさん
2014/06/13(金) 09:10:39.79ID:YPxIZA8y475デフォルトの名無しさん
2014/06/15(日) 17:47:40.77ID:QZWVyVFy476デフォルトの名無しさん
2014/06/16(月) 04:00:13.60ID:fWvfMn7M477デフォルトの名無しさん
2014/06/16(月) 10:00:44.78ID:juShtlay cuda fortranについて初歩的な質問なのですが、
PGI workstationで、-cublasとオプションを付けてコンパイルしようとすると、
『fatal error LNK1104: cannnot open file 'libcublas.lib'』とエラーが出てしまいます。
この場合、どうしたら良いですかね?
どなたか教えてくださると助かります。
PGI workstationで、-cublasとオプションを付けてコンパイルしようとすると、
『fatal error LNK1104: cannnot open file 'libcublas.lib'』とエラーが出てしまいます。
この場合、どうしたら良いですかね?
どなたか教えてくださると助かります。
478デフォルトの名無しさん
2014/06/16(月) 10:13:18.23ID:3pyBJ4C4479デフォルトの名無しさん
2014/06/16(月) 15:38:44.47ID:juShtlay >>478
探して見たところ、'libcublas.ipl'、'libcublasemu.lib'という名前のファイルしか見つかりませでした。
そこで、これらのファイルが保存されているフォルダのパスを追加してコンパイルしたところ、
『error lnk2019: unresolved external symbol referenced in function』
というようなエラーが出てきてしまったのですが、
どうすれば良いか教えていただけませんか?
探して見たところ、'libcublas.ipl'、'libcublasemu.lib'という名前のファイルしか見つかりませでした。
そこで、これらのファイルが保存されているフォルダのパスを追加してコンパイルしたところ、
『error lnk2019: unresolved external symbol referenced in function』
というようなエラーが出てきてしまったのですが、
どうすれば良いか教えていただけませんか?
480デフォルトの名無しさん
2014/06/16(月) 15:50:37.89ID:Q+b6M39D481デフォルトの名無しさん
2014/06/16(月) 16:27:09.31ID:juShtlay コード中の'cublas'を'cublasemu'に変更し、
'-lcublas'を'-lcublasemu'に変更してコンパイルしたところ、
『unable to open MODULE file cublasemu.mod
compilation aborted』
と出てしまいました。。。
'-lcublas'を'-lcublasemu'に変更してコンパイルしたところ、
『unable to open MODULE file cublasemu.mod
compilation aborted』
と出てしまいました。。。
482デフォルトの名無しさん
2014/06/16(月) 16:43:59.97ID:vxzjg7XS483デフォルトの名無しさん
2014/06/16(月) 16:54:43.67ID:juShtlay >>482
元のコードでやってもやはり出てしまいますね。
元のコードでやってもやはり出てしまいますね。
484デフォルトの名無しさん
2014/06/16(月) 17:46:47.99ID:vxzjg7XS >>483
use cublasemuになっていませんか?
use cublasemuになっていませんか?
485デフォルトの名無しさん
2014/06/17(火) 09:43:20.11ID:W5zFtzyB >>484
いえ、ちゃんとuse cublasってなっています。
いえ、ちゃんとuse cublasってなっています。
486デフォルトの名無しさん
2014/06/17(火) 13:19:25.73ID:gUXRuUGZ use cudafor
use cublas
が指定されている
-Mcudaまたは-Mcuda:4.0あるいは-Mcuda=emu
unresolved external symbolと言われたら
libが足りないので-lで追加
*.libがないと言われたら
-Lなどでパス追加
*.modがないと言われたら
-Iでパス追加
参考
http://www.softek.co.jp/SPG/Pgi/TIPS/opt_cudaF.html
http://www.softek.co.jp/SPG/Pgi/TIPS/public/accel/cublas40.html
use cublas
が指定されている
-Mcudaまたは-Mcuda:4.0あるいは-Mcuda=emu
unresolved external symbolと言われたら
libが足りないので-lで追加
*.libがないと言われたら
-Lなどでパス追加
*.modがないと言われたら
-Iでパス追加
参考
http://www.softek.co.jp/SPG/Pgi/TIPS/opt_cudaF.html
http://www.softek.co.jp/SPG/Pgi/TIPS/public/accel/cublas40.html
487デフォルトの名無しさん
2014/06/17(火) 16:58:12.46ID:W5zFtzyB >>486
-Lパスでディレクトリを指定して、-cublasemuをつけてコンパイルしたところ、
"libcublasemu.lib : error lnk2019: unresolved external symbol referenced in function"
が、ものすごい数のが出てきたのですが、どうしたらいいですかね?
一個ずつ-lで追加していくしか無いのでしょうか。
-Lパスでディレクトリを指定して、-cublasemuをつけてコンパイルしたところ、
"libcublasemu.lib : error lnk2019: unresolved external symbol referenced in function"
が、ものすごい数のが出てきたのですが、どうしたらいいですかね?
一個ずつ-lで追加していくしか無いのでしょうか。
488デフォルトの名無しさん
2014/06/17(火) 17:24:37.11ID:AhgC7kyl cublas使わなければ普通に動くの?
489デフォルトの名無しさん
2014/06/18(水) 11:22:33.36ID:nvOujYC+ >>488
はい。cublasが関わるところを全てコメントアウトしたところ、動きました。
はい。cublasが関わるところを全てコメントアウトしたところ、動きました。
490デフォルトの名無しさん
2014/06/18(水) 18:11:03.14ID:s+RQ8hIL >>489
可能な限り少しずつコメントアウトを外していき
その都度コンパイルが通るようにオプションを調整してみてください
最初はuse cublasだけなど
大量のエラーが少しずつ出ることを期待します
cublasは呼び出し方法が旧いものや新しいもので3種あるようですが
呼び出し方と CUDA toolkit のバージョン指定はあっていますか?
pgi cuda Fortranはデバッグ用にGPUを使わないエミュレートモードが用意されています
コンパイルオプションとリンクするライブラリの両方で切替えるようです
どちらを使用していますか?
cublasemuはエミュレートモード用で
オプションに-Mcuda=emuを併せて指定します
可能な限り少しずつコメントアウトを外していき
その都度コンパイルが通るようにオプションを調整してみてください
最初はuse cublasだけなど
大量のエラーが少しずつ出ることを期待します
cublasは呼び出し方法が旧いものや新しいもので3種あるようですが
呼び出し方と CUDA toolkit のバージョン指定はあっていますか?
pgi cuda Fortranはデバッグ用にGPUを使わないエミュレートモードが用意されています
コンパイルオプションとリンクするライブラリの両方で切替えるようです
どちらを使用していますか?
cublasemuはエミュレートモード用で
オプションに-Mcuda=emuを併せて指定します
491デフォルトの名無しさん
2014/06/20(金) 16:00:17.10ID:utkwlJ0p Cのatoiとかatofのように,文字列としての数字の列を
integerなりrealの値に変換してくれる函数はあるでしょうか。
当方は,MinGWのgfortran95を使っています。
integerなりrealの値に変換してくれる函数はあるでしょうか。
当方は,MinGWのgfortran95を使っています。
492デフォルトの名無しさん
2014/06/20(金) 19:25:02.85ID:bxod4dQ6 >>491
内部ファイルを使うのがセオリー
NAG Fortran入門 19.5 数値と文字の変換を行う方法
ttp://www.nag-j.co.jp/fortran/FI_18.html#ConvertingBetweenNumbersAndStrings
内部ファイルを使うのがセオリー
NAG Fortran入門 19.5 数値と文字の変換を行う方法
ttp://www.nag-j.co.jp/fortran/FI_18.html#ConvertingBetweenNumbersAndStrings
493デフォルトの名無しさん
2014/06/20(金) 21:53:29.14ID:utkwlJ0p >492
ありがとうございます。
こういう裏ワザがあったのですね。
さっそく使わせていただきます。
ありがとうございます。
こういう裏ワザがあったのですね。
さっそく使わせていただきます。
494デフォルトの名無しさん
2014/06/21(土) 17:36:05.91ID:L2qICpES 裏ワザというかFORTRAN77の頃からあったし、
66時代にはENCODE/DECODE関数が用意されていたんだがな。
マニュアルをよく読めば、内部ファイルの項目が昔から書いてある。
66時代にはENCODE/DECODE関数が用意されていたんだがな。
マニュアルをよく読めば、内部ファイルの項目が昔から書いてある。
495デフォルトの名無しさん
2014/06/21(土) 20:05:31.04ID:6Ae9RUEd >464
そうでしたか。なにしろわたしが FORTRANを学生時代に始めた
ころはFORTRAN IVのころで80桁のパンチカードにパンチした
カードデックを窓口の届けると2日程で,棚にカードとラインプリ
ンタで打ち出した結果がおいてあるという時代(東大の計算センター
にあったHITAC 5020)のころで,FORTRAN77の出る前
ダイクストラの構造化プログラミングが騒がれ始めて,
カーニハンとリッチーの『ソフトウエア作法』をよんで,
構造化出来るRATFORを大学にあった小さなコンピュータで
実験しているころからの進歩を知りませんでした。
その後,CおよびC++に興味が移りFROTRANをご無沙汰してい
たのですが,最近のFORTRANで128bit処理ができることを
知り,まいもどってきた次第です。
市販のfortran90,95の入門書を見てみたのですが,見当ら
なかったので,質問したしだいです。
そうでしたか。なにしろわたしが FORTRANを学生時代に始めた
ころはFORTRAN IVのころで80桁のパンチカードにパンチした
カードデックを窓口の届けると2日程で,棚にカードとラインプリ
ンタで打ち出した結果がおいてあるという時代(東大の計算センター
にあったHITAC 5020)のころで,FORTRAN77の出る前
ダイクストラの構造化プログラミングが騒がれ始めて,
カーニハンとリッチーの『ソフトウエア作法』をよんで,
構造化出来るRATFORを大学にあった小さなコンピュータで
実験しているころからの進歩を知りませんでした。
その後,CおよびC++に興味が移りFROTRANをご無沙汰してい
たのですが,最近のFORTRANで128bit処理ができることを
知り,まいもどってきた次第です。
市販のfortran90,95の入門書を見てみたのですが,見当ら
なかったので,質問したしだいです。
496デフォルトの名無しさん
2014/06/21(土) 22:49:19.55ID:jwjy0CXq はろけくも来つるものかなフォートラン
あっ季語がない
あっ季語がない
497デフォルトの名無しさん
2014/06/24(火) 20:49:58.43ID:vNnfb12N Gfortran 使ってるんだが、データを読み込ませる際、2行ごとにデータを読み込ませることって可能?
498デフォルトの名無しさん
2014/06/25(水) 01:47:13.51ID:2uAyyXu5 素直に全部読みなさい
変数に入った値は、必ず使えとも使うなとも言われてないだろう
変数に入った値は、必ず使えとも使うなとも言われてないだろう
499デフォルトの名無しさん
2014/06/26(木) 00:45:30.86ID:oXHKxD2l まぁ空のread文で1行飛ばせるけどな。
Fortmatの/でも行けたっけかな?曖昧みー
Fortmatの/でも行けたっけかな?曖昧みー
500デフォルトの名無しさん
2014/06/26(木) 01:01:48.05ID:pqUjp/UA awkなりsedなりで一行飛ばしの中間ファイル作って、それをデータファイルにするとかじゃだめなの?
入力関係でつまづくなら、fortranにあわせたファイルを作成する方が早いのではと思ってしまう。
バイナリデータだとテキストみたいにいかないのか。バイナリデータだったらごめん。
入力関係でつまづくなら、fortranにあわせたファイルを作成する方が早いのではと思ってしまう。
バイナリデータだとテキストみたいにいかないのか。バイナリデータだったらごめん。
501デフォルトの名無しさん
2014/06/26(木) 08:16:37.95ID:MILdybit >>498->>500
レスどもです。直接n行ごとに読み込むという作業はできないみたいですね。
私も中間ファイルを作って…と思いましたが、読み込みデータをいじってはいけないらしく断念しました。
解決案は以下の通り、(n行ごとに読みたい場合)
If(mod(i,n) .eq. 0) then
Read(20,*) hoge(i)
Else
Read(20, *)
Endif
レスどもです。直接n行ごとに読み込むという作業はできないみたいですね。
私も中間ファイルを作って…と思いましたが、読み込みデータをいじってはいけないらしく断念しました。
解決案は以下の通り、(n行ごとに読みたい場合)
If(mod(i,n) .eq. 0) then
Read(20,*) hoge(i)
Else
Read(20, *)
Endif
502デフォルトの名無しさん
2014/06/26(木) 21:08:20.99ID:2skFYUOi 詰めないと使いにくくない?
i=1
do m=1, linenum
if(mod(m,n) .eq. 1) then
read(20,*) hoge(i)
i = i +1
else
read(20,*)
endif
enddo
i=1
do m=1, linenum
if(mod(m,n) .eq. 1) then
read(20,*) hoge(i)
i = i +1
else
read(20,*)
endif
enddo
503デフォルトの名無しさん
2014/06/27(金) 00:10:25.56ID:kJEq6I8z >>499の言うとおり、formatを'(i,5/)'とかにすれば良いのでは?
504デフォルトの名無しさん
2014/06/27(金) 00:38:41.62ID:iFH1F/Cx505デフォルトの名無しさん
2014/06/27(金) 00:42:32.62ID:P3Dz9sSW formatのスラッシュでskipできるぞ。
program test
implicit none
character(len = 132) :: text
open(10, file = 'test.f90')
1 read(10, '(a, /)', end = 999) text
print *, trim(text)
goto 1
999 stop
end program test
program test
implicit none
character(len = 132) :: text
open(10, file = 'test.f90')
1 read(10, '(a, /)', end = 999) text
print *, trim(text)
goto 1
999 stop
end program test
506デフォルトの名無しさん
2014/06/27(金) 01:05:20.13ID:iFH1F/Cx >>505
おお!スラがスキップすると言う指示内容なんですね。
おお!スラがスキップすると言う指示内容なんですね。
507デフォルトの名無しさん
2014/06/27(金) 02:12:24.88ID:P3Dz9sSW508デフォルトの名無しさん
2014/06/27(金) 09:18:57.76ID:F3h4qtWf 久しぶりにfortranのプログラム見たが、FORTRAN77の時代と違って気持ち悪い。
これならC++の方がまだいい。テンプレート関係を除けば。
でも、fortranは4倍精度計算ができるからなあ。
並列処理やGPGPUに対応したライブラリも出ているし。
まあ、年寄はfortranからMatlabに移行しているみたいだが。
これならC++の方がまだいい。テンプレート関係を除けば。
でも、fortranは4倍精度計算ができるからなあ。
並列処理やGPGPUに対応したライブラリも出ているし。
まあ、年寄はfortranからMatlabに移行しているみたいだが。
509デフォルトの名無しさん
2014/06/28(土) 00:46:11.64ID:PIVLw57u おじいちゃん。
あんま結論を急がない方がいい。
配列演算気持ちいい。PUREでELEMENTALなら最高。
4倍精度は精度は4倍だが計算時間は10倍超だから、
10倍の時間の合間にアルゴリズム見直した方が吉。
あんま結論を急がない方がいい。
配列演算気持ちいい。PUREでELEMENTALなら最高。
4倍精度は精度は4倍だが計算時間は10倍超だから、
10倍の時間の合間にアルゴリズム見直した方が吉。
510デフォルトの名無しさん
2014/06/28(土) 02:59:17.00ID:EHQFW5QP gccにもquadmathがあるんだからあまりFORTRANを高く評価しない方がいいよ
511デフォルトの名無しさん
2014/06/28(土) 13:41:05.28ID:1f0E4KM2 並列計算させてdoループの中でwrite文でファイル書き込みしたら中身の順番めちゃくちゃで泣きました。
どーにもなんないんですかね?
どーにもなんないんですかね?
512デフォルトの名無しさん
2014/06/28(土) 15:42:05.65ID:cJj78OR7 >>510
そもそもlibquadmathはFortranのために追加されたんだが
そもそもlibquadmathはFortranのために追加されたんだが
513デフォルトの名無しさん
2014/06/28(土) 16:56:46.35ID:DtEJ1AXR >>511
write文だけ逐次処理させるか、ループの外に出すしかないと思う。
write文だけ逐次処理させるか、ループの外に出すしかないと思う。
514デフォルトの名無しさん
2014/06/28(土) 22:06:02.07ID:mzWdk+zj >>509
はぁ。。。
配列演算気持ちいい、って何? それ。
C**なら行列演算クラスライブラリ作って、演算子オーバーロード使えば終わりじゃん。
まさか、行列積が「・」でできると言うんじゃないだろな?
>4倍精度は精度は4倍だが計算時間は10倍超だから、
>10倍の時間の合間にアルゴリズム見直した方が吉。
何言ってんだ?この馬鹿。
物理計算によっては4倍精度の計算が必要なの。計算時間やアルゴリズム
の問題じゃない。人の言ってることをそのまま受け売りするな。阿呆
はぁ。。。
配列演算気持ちいい、って何? それ。
C**なら行列演算クラスライブラリ作って、演算子オーバーロード使えば終わりじゃん。
まさか、行列積が「・」でできると言うんじゃないだろな?
>4倍精度は精度は4倍だが計算時間は10倍超だから、
>10倍の時間の合間にアルゴリズム見直した方が吉。
何言ってんだ?この馬鹿。
物理計算によっては4倍精度の計算が必要なの。計算時間やアルゴリズム
の問題じゃない。人の言ってることをそのまま受け売りするな。阿呆
515デフォルトの名無しさん
2014/06/28(土) 22:07:05.28ID:mzWdk+zj516デフォルトの名無しさん
2014/06/29(日) 00:26:55.37ID:S1guW8MB517デフォルトの名無しさん
2014/06/29(日) 10:07:26.16ID:zjmbmtCs libquadmathの中を覗いてみたら、x86版はFPU使ってるけどx64版はSSE2使ってるな
518デフォルトの名無しさん
2014/06/29(日) 12:17:10.06ID:eLJ+YA5h519デフォルトの名無しさん
2014/06/29(日) 12:46:18.15ID:eLJ+YA5h > C++なら行列演算クラスライブラリ作って、演算子オーバーロード使えば終わりじゃん。
> まさか、行列積が「・」でできると言うんじゃないだろな?
冗長だけど、〜すれば終わり、程度には書けますぜセンセー。
function dotp_r8(A, x) result(y)
double precision, intent(in) :: A(:,:), x(:,:)
double precision :: y( size(A,1), size(A,2) )
y = matmul(A, x)
end function
!----====----====----====----====----====----====----====
program test
interface operator(.dot.)
function dotp_r8(A, x) result(y)
double precision, intent(in) :: A(:,:), x(:,:)
double precision :: y( size(A,1), size(A,2) )
end function
end interface
double precision :: A(2,2), x(2,2), y(2,2)
A = reshape( (/1.D0, 1.D0, 1.D0, 1.D0/), (/2,2/) )
x = reshape( (/1.D0, 3.D0, 2.D0, 4.D0/), (/2,2/) )
y = A .dot. x
write (*, '(2F8.3)'), transpose(A); print *
write (*, '(2F8.3)'), transpose(x); print *
write (*, '(2F8.3)'), transpose(y)
end
> まさか、行列積が「・」でできると言うんじゃないだろな?
冗長だけど、〜すれば終わり、程度には書けますぜセンセー。
function dotp_r8(A, x) result(y)
double precision, intent(in) :: A(:,:), x(:,:)
double precision :: y( size(A,1), size(A,2) )
y = matmul(A, x)
end function
!----====----====----====----====----====----====----====
program test
interface operator(.dot.)
function dotp_r8(A, x) result(y)
double precision, intent(in) :: A(:,:), x(:,:)
double precision :: y( size(A,1), size(A,2) )
end function
end interface
double precision :: A(2,2), x(2,2), y(2,2)
A = reshape( (/1.D0, 1.D0, 1.D0, 1.D0/), (/2,2/) )
x = reshape( (/1.D0, 3.D0, 2.D0, 4.D0/), (/2,2/) )
y = A .dot. x
write (*, '(2F8.3)'), transpose(A); print *
write (*, '(2F8.3)'), transpose(x); print *
write (*, '(2F8.3)'), transpose(y)
end
520デフォルトの名無しさん
2014/06/29(日) 13:09:54.23ID:RUBiLoi5 クラスライブラリで演算子オーバーロードって・・・遅そう。
素人が書いたマクロじゃ最適化効かないでしょ。
ソースの見かけで書けたって意味ないの。
大体、高速行列演算ライブラリを自分で作れるくらいなら、四倍精度のライブラリ
も自作すればいい。昔の爺さん世代はよく倍精度・四倍精度自作ライブラリを自慢していたw
まぁC++のBlitzなんて10年以上前から夢を語ってノロノロ開発して
ようやく最近なんですけどね。
素人が書いたマクロじゃ最適化効かないでしょ。
ソースの見かけで書けたって意味ないの。
大体、高速行列演算ライブラリを自分で作れるくらいなら、四倍精度のライブラリ
も自作すればいい。昔の爺さん世代はよく倍精度・四倍精度自作ライブラリを自慢していたw
まぁC++のBlitzなんて10年以上前から夢を語ってノロノロ開発して
ようやく最近なんですけどね。
521デフォルトの名無しさん
2014/06/29(日) 14:46:16.10ID:qF+KN0J6522デフォルトの名無しさん
2014/06/29(日) 15:59:56.49ID:l4jNLVEs 並列化は普通に物理の数値計算につかうけど、、、
523デフォルトの名無しさん
2014/06/29(日) 17:26:15.54ID:rvrpBbGm >>519
あ、そう。matlabみたいに糞な「:」が好きなのね。もういいから、死んでね
お爺ちゃんからこんな言葉を言われたお前はすでに終わっている。
>>520
その通り。面倒くさかったから書かなかったけど。
とにかく、一時オブジェクトの生成と.消滅、データのコピーが頻繁におきる。
それを避けるために右辺値参照が使えるかどうか。でも行列乗算や線形連立代数方程式
を解く場合には使えないかも。まだ、やってみてないからわからんが。
作業用行列のポインタ値を管理するグローバルオブジェクトを使うと
上の問題は回避できるが、残念ながらマルチスレッドには対応できてない。
これをどのようにグローバルスレッド対応にしたらいいか、戦略が
立たない状態です。
あ、そう。matlabみたいに糞な「:」が好きなのね。もういいから、死んでね
お爺ちゃんからこんな言葉を言われたお前はすでに終わっている。
>>520
その通り。面倒くさかったから書かなかったけど。
とにかく、一時オブジェクトの生成と.消滅、データのコピーが頻繁におきる。
それを避けるために右辺値参照が使えるかどうか。でも行列乗算や線形連立代数方程式
を解く場合には使えないかも。まだ、やってみてないからわからんが。
作業用行列のポインタ値を管理するグローバルオブジェクトを使うと
上の問題は回避できるが、残念ながらマルチスレッドには対応できてない。
これをどのようにグローバルスレッド対応にしたらいいか、戦略が
立たない状態です。
524デフォルトの名無しさん
2014/06/29(日) 17:29:17.08ID:rvrpBbGm525デフォルトの名無しさん
2014/06/29(日) 17:34:36.24ID:qF+KN0J6526デフォルトの名無しさん
2014/06/29(日) 17:57:50.26ID:RUBiLoi5 David BaileyがFortran用とC++用の4倍、8倍、多倍精度ルーチン公開してた気がする。
http://crd-legacy.lbl.gov/~dhbailey/
http://crd-legacy.lbl.gov/~dhbailey/
527デフォルトの名無しさん
2014/06/29(日) 17:59:34.52ID:rvrpBbGm 間違えた
グローバルスレッド対応→スレッド対応
グローバルスレッド対応→スレッド対応
528デフォルトの名無しさん
2014/06/29(日) 21:18:38.95ID:UItnk67i529デフォルトの名無しさん
2014/06/29(日) 21:46:47.56ID:eLJ+YA5h はいはいソーデスネーでっかい一時領域作ってなにしてんでしょーねorz
pure で elemental とゆーと配列を引数に放り込むとその全要素に
関数定義された処理が適用される、各処理は独立なのでまとめるなり
並列化なりをコンパイラーに期待、かな。演算子全然関係ないしorz
過去のシサンガーとかもう辛いだけ。
どこまでも未来に生きてください、Fortran スレになんか戻らないでください。
>>521
出力の順序だけ重要ならバッファして後から並べ替えるとか
浮動小数点演算的に結果を変えられないなら仕方ないかもだが
だって人口少ないし交流少ないし機会もないし意味すらないかもしれない、
たまに発言すれば馬鹿にされるから凄い人しか残らないわけで。
pure で elemental とゆーと配列を引数に放り込むとその全要素に
関数定義された処理が適用される、各処理は独立なのでまとめるなり
並列化なりをコンパイラーに期待、かな。演算子全然関係ないしorz
過去のシサンガーとかもう辛いだけ。
どこまでも未来に生きてください、Fortran スレになんか戻らないでください。
>>521
出力の順序だけ重要ならバッファして後から並べ替えるとか
浮動小数点演算的に結果を変えられないなら仕方ないかもだが
だって人口少ないし交流少ないし機会もないし意味すらないかもしれない、
たまに発言すれば馬鹿にされるから凄い人しか残らないわけで。
530デフォルトの名無しさん
2014/06/30(月) 00:33:26.64ID:8S3fud89531デフォルトの名無しさん
2014/06/30(月) 02:26:19.67ID:fawqTnic Fortranの強みは常に時代の最先端ハードウェアに対応していることじゃないかな。
最近でもIntelはDECのFortran買ったし、NvidiaはPGIを買収したし。
両社ともGPUアクセレレータを含む自分らの最新ハードとセットで、
同じタイミングで対応したコンパイラを出してきている。
本来ハードウェアとソフトウェアは表裏一体、精神と肉体のような
不可分の関係にあるはず。そしてFortranは未だその密接さを保っている。
ソフトウェアの人たちは、ソフトウェア単体での独立価値を信じたいようだけど
現実は違っている。
この現実認識の歪が過剰なFortranディスカウントキャンペーンとして噴出して
いるのではないだろうか・・・と新聞並に論理を飛躍させて終わるw
最近でもIntelはDECのFortran買ったし、NvidiaはPGIを買収したし。
両社ともGPUアクセレレータを含む自分らの最新ハードとセットで、
同じタイミングで対応したコンパイラを出してきている。
本来ハードウェアとソフトウェアは表裏一体、精神と肉体のような
不可分の関係にあるはず。そしてFortranは未だその密接さを保っている。
ソフトウェアの人たちは、ソフトウェア単体での独立価値を信じたいようだけど
現実は違っている。
この現実認識の歪が過剰なFortranディスカウントキャンペーンとして噴出して
いるのではないだろうか・・・と新聞並に論理を飛躍させて終わるw
532デフォルトの名無しさん
2014/06/30(月) 13:21:06.69ID:V1UUNHQo >>529
そういうのに向かない計算アルゴリズム(隣のセルの計算結果を使う。つまり独立ではない。
そうなると同期の問題も発生する)もあるんだ。
>過去のシサンガーとかもう辛いだけ。
>どこまでも未来に生きてください、Fortran スレになんか戻らないでください。
で、お前何が言いたいんや?日本語大丈夫か?
そういうのに向かない計算アルゴリズム(隣のセルの計算結果を使う。つまり独立ではない。
そうなると同期の問題も発生する)もあるんだ。
>過去のシサンガーとかもう辛いだけ。
>どこまでも未来に生きてください、Fortran スレになんか戻らないでください。
で、お前何が言いたいんや?日本語大丈夫か?
533デフォルトの名無しさん
2014/07/01(火) 01:36:55.46ID:DMO1kVAm 1 :デフォルトの名無しさん:2012/08/16(木) 20:58:00.31
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。
534デフォルトの名無しさん
2014/07/03(木) 20:06:28.12ID:Ct9dkTzH つかぬことをお聞きしますが
皆さんのfortranの本の勉強履歴はどんな流れですか?
私は冨田さんfortran90の本→辞書的にfortran90入門をかいつまむぐらいしか
やっておらずとりあえず拙いなりに読み書きはするのですが
なにか良い本あればおしえていただけないでしょうか
皆さんのfortranの本の勉強履歴はどんな流れですか?
私は冨田さんfortran90の本→辞書的にfortran90入門をかいつまむぐらいしか
やっておらずとりあえず拙いなりに読み書きはするのですが
なにか良い本あればおしえていただけないでしょうか
535デフォルトの名無しさん
2014/07/04(金) 01:38:26.65ID:41RxNfGp 故岡村先生の授業テキスト
やーっふぉ、やっふぉ、ふぉーとらんらんらん
やーっふぉ、やっふぉ、ふぉーとらんらんらん
536デフォルトの名無しさん
2014/07/04(金) 01:45:11.81ID:cNJNO1xN Fortran95/2003 Explained --> Modern Fortran Explained
537デフォルトの名無しさん
2014/07/05(土) 07:04:30.09ID:sNpoyHpR emacsでコメントアウトに使う関数fortran-comment-regionのデフォルトの動作が
行頭にCを挿入するのではなく,C$$(自由形式では!!$)を挿入するのは何か理由があるのでしょうか?
$つけたほうがメリットとかあるの?
行頭にCを挿入するのではなく,C$$(自由形式では!!$)を挿入するのは何か理由があるのでしょうか?
$つけたほうがメリットとかあるの?
538デフォルトの名無しさん
2014/07/07(月) 01:06:30.37ID:1zKRZTH9 absoft 9.0でf77fileをコンパイル成功、プログラム自体も上手く行く
absoft11.0でコンパイル成功、プログラム自体もインプットファイルのある部分の記述次第で上手く行く
ある記述部というのはアウトプットするデータ個数を指定するところです。20個程度なら上手くいくのですが数百個と増やすとうまくいきません。
エラーメッセージは
illegal character in numeric input
で、インプットファイルにおかしい部分があると言っています。しかし9.0でコンパイルしたものはきちんとうまくいくのです
何かアドバイスいただけないでしょうか。プログラム自体は3万行程度あるというのと内容だけに書き写すのは難しいです。
absoft11.0でコンパイル成功、プログラム自体もインプットファイルのある部分の記述次第で上手く行く
ある記述部というのはアウトプットするデータ個数を指定するところです。20個程度なら上手くいくのですが数百個と増やすとうまくいきません。
エラーメッセージは
illegal character in numeric input
で、インプットファイルにおかしい部分があると言っています。しかし9.0でコンパイルしたものはきちんとうまくいくのです
何かアドバイスいただけないでしょうか。プログラム自体は3万行程度あるというのと内容だけに書き写すのは難しいです。
539デフォルトの名無しさん
2014/07/07(月) 01:25:39.47ID:VWd7ewX/540デフォルトの名無しさん
2014/07/07(月) 09:24:44.41ID:1zKRZTH9541デフォルトの名無しさん
2014/07/08(火) 00:03:54.23ID:DZPoMbBV Gfortran で定義してない変数があってもたまにエラーはかない時あって焦った。
デバッグで小一時間汗流したわ。
gfortranってたまにアホな子になるの?
デバッグで小一時間汗流したわ。
gfortranってたまにアホな子になるの?
542デフォルトの名無しさん
2014/07/08(火) 23:44:01.37ID:0sSau+NY543デフォルトの名無しさん
2014/07/09(水) 03:16:15.11ID:i/yEgb7/ >>538
出ているエラーメッセージは、入力ファイルの問題で、数字の代わりに
(たぶん)文字が来ているということ。
F77時代(かそれ以前)のプログラムの用だから、入力ファイルの数値の
フォーマットも指定されていると推測される。数値が指定カラムから
はみ出していないか見て味噌。
以前
300 400 200 0 0
これで右から2番目でおかしくなると言っていたが、たぶん4カラムづつ
入力にとってある。300 400 200 000 000 ならたぶん動くだろう。
今は 0 0 を読んで、数値Formatがおかしいと文句を言われているのだと思う。
出ているエラーメッセージは、入力ファイルの問題で、数字の代わりに
(たぶん)文字が来ているということ。
F77時代(かそれ以前)のプログラムの用だから、入力ファイルの数値の
フォーマットも指定されていると推測される。数値が指定カラムから
はみ出していないか見て味噌。
以前
300 400 200 0 0
これで右から2番目でおかしくなると言っていたが、たぶん4カラムづつ
入力にとってある。300 400 200 000 000 ならたぶん動くだろう。
今は 0 0 を読んで、数値Formatがおかしいと文句を言われているのだと思う。
544デフォルトの名無しさん
2014/07/09(水) 03:17:43.97ID:i/yEgb7/ ではなぜ Absoft9 ではよくて、11では駄目なのかと問うかもしれない。
考えられることとしては、入力データの空白の扱いのデフォルトが変わった
ことが考えられる。FORTRAN最初期からの伝統で、入力データの空白は
数値としてはゼロを意味している。文法書のFORMAT分のところをよく読むと、
BZとBNというオプションがある。BZはBLANK ZEROでBNはBLANK NULL(NONE)
を意味していて、解釈を変えられる。昔のデフォルトはBZだった。
しかしF95かF2003くらいでたしかデフォルトをBNにしていた気がする。
今、手元に資料がないので確認できないがw
というわけで、absoft9は空白を0として読んで、0 0 を000と解釈したが、
Absoft11は0 0を数値として解釈不能とみなして、illegal character in numeric input
の実行時エラーをはいているのだろう。
またそうだとするとAbsoft9では0入力の実行回数が1回少ないはずである。
ちなみに、なぜ空白がゼロなのか?これは昔は、紙テープ、パンチカードの
穴あき不良や読み取り不良が多くて、パンチカードのスペース(穴なし)
が出やすかったからと聞いたことがある。ホントかは知らない。
あとメール欄にsage と書くように。
スレが上がると、冷やかしが紛れ込んできてスレが荒れる原因になる。
考えられることとしては、入力データの空白の扱いのデフォルトが変わった
ことが考えられる。FORTRAN最初期からの伝統で、入力データの空白は
数値としてはゼロを意味している。文法書のFORMAT分のところをよく読むと、
BZとBNというオプションがある。BZはBLANK ZEROでBNはBLANK NULL(NONE)
を意味していて、解釈を変えられる。昔のデフォルトはBZだった。
しかしF95かF2003くらいでたしかデフォルトをBNにしていた気がする。
今、手元に資料がないので確認できないがw
というわけで、absoft9は空白を0として読んで、0 0 を000と解釈したが、
Absoft11は0 0を数値として解釈不能とみなして、illegal character in numeric input
の実行時エラーをはいているのだろう。
またそうだとするとAbsoft9では0入力の実行回数が1回少ないはずである。
ちなみに、なぜ空白がゼロなのか?これは昔は、紙テープ、パンチカードの
穴あき不良や読み取り不良が多くて、パンチカードのスペース(穴なし)
が出やすかったからと聞いたことがある。ホントかは知らない。
あとメール欄にsage と書くように。
スレが上がると、冷やかしが紛れ込んできてスレが荒れる原因になる。
545デフォルトの名無しさん
2014/07/09(水) 04:42:58.29ID:2jkWCmKB546デフォルトの名無しさん
2014/07/10(木) 18:28:18.82ID:pJ0O1Ur0 FORTRAN77のCOMMON文とEQUIVALENCE文について質問です.
!---
DIMENSION A(4)
EQUIVALENCE (A, V1)
COMMON /VS/ V1, V2, V3, V4
のようなコードをfortran90風に書き直したいのですがAをCOMMONブロックの変数で置換する以外にいい方法は無いでしょうか?
できればSubroutine等を増やすのではなく,Moduleの変数宣言部分だけで解決したいのですが...
!---
DIMENSION A(4)
EQUIVALENCE (A, V1)
COMMON /VS/ V1, V2, V3, V4
のようなコードをfortran90風に書き直したいのですがAをCOMMONブロックの変数で置換する以外にいい方法は無いでしょうか?
できればSubroutine等を増やすのではなく,Moduleの変数宣言部分だけで解決したいのですが...
547デフォルトの名無しさん
2014/07/10(木) 20:24:35.98ID:2hSWNwRP548デフォルトの名無しさん
2014/07/10(木) 22:05:54.56ID:pJ0O1Ur0 >>547
ありがとうございます
早速以下のように使ってみたんですが
module VS
real :: V1, V2, V3, V4
end module VS
program
use VS, A => V1
...
A(1) = 1.0d0
...
end program
↑コードのA(1)に代入する部分で
error #6410: この名前は配列または関数として宣言されていません。
とgfortranのコンパイルエラーになります
dimension A(4)などと変数宣言すると
error #6401: この名前の属性が USE 文によってアクセス可能な属性と矛盾しています。
でコンパイルエラーになります
あと
use VS, A(1) => V1
のような書き方もだめでした
nag-j.co.jpのコード例だとAは変数とは扱われていないように思うのですがAを配列として扱うことはできないでしょうか?
ありがとうございます
早速以下のように使ってみたんですが
module VS
real :: V1, V2, V3, V4
end module VS
program
use VS, A => V1
...
A(1) = 1.0d0
...
end program
↑コードのA(1)に代入する部分で
error #6410: この名前は配列または関数として宣言されていません。
とgfortranのコンパイルエラーになります
dimension A(4)などと変数宣言すると
error #6401: この名前の属性が USE 文によってアクセス可能な属性と矛盾しています。
でコンパイルエラーになります
あと
use VS, A(1) => V1
のような書き方もだめでした
nag-j.co.jpのコード例だとAは変数とは扱われていないように思うのですがAを配列として扱うことはできないでしょうか?
549デフォルトの名無しさん
2014/07/10(木) 22:50:41.50ID:Te+Dpsre >>546
無理なんじゃないかな。
それはそれで最小にまとまっている。
最適化に問題があるとはいえ、無理してCOMMONやEQUIVALENCEを直す必要もない。
そのコードが意味しているのは、V1,V2,V3,V4を4つの実数変数として共有しているが、
これをエイリアスとして配列に結び付けて使いたいということになっている。
ところが、COMMONでないとV1,V2,V3,V4のメモリー上の番地が連続することを保証できない。
だから配列へのポインタを充てることができない。
(TYPEの中に入れれば、sequence属性で番地の連続性を保証できるが…
f2003のC言語との互換性機能も使えるかもしれないが、COMMONよりひどい気もする。)
ばらばらの番地いる変数を個々にFortranにはポインタの配列はない。
(配列へのポインタはある。これを使うにはV1~V4が連続した番地にいる必要がある。)
実変数へのポインタを要素として持つ構造体を定義して、その配列を作れば
いいが、それでは大幅な書き換えで意味がない。
あとは、Fortranの規格を外れるが、どの処理系もほぼ必ず持っている
Cray Pointer を使う手もあるが、これもModuleの中では納まらない。
実行文が必要。
COMMONとかEQUIVALENCEはメモリーの番地共有だから、便利なことができる。
最適化を抑止してしまうから、主要部分には使わない方がいいが、
技巧的小技としては、うまく使うと短く書けるので、使えばいいんでね?
無理なんじゃないかな。
それはそれで最小にまとまっている。
最適化に問題があるとはいえ、無理してCOMMONやEQUIVALENCEを直す必要もない。
そのコードが意味しているのは、V1,V2,V3,V4を4つの実数変数として共有しているが、
これをエイリアスとして配列に結び付けて使いたいということになっている。
ところが、COMMONでないとV1,V2,V3,V4のメモリー上の番地が連続することを保証できない。
だから配列へのポインタを充てることができない。
(TYPEの中に入れれば、sequence属性で番地の連続性を保証できるが…
f2003のC言語との互換性機能も使えるかもしれないが、COMMONよりひどい気もする。)
ばらばらの番地いる変数を個々にFortranにはポインタの配列はない。
(配列へのポインタはある。これを使うにはV1~V4が連続した番地にいる必要がある。)
実変数へのポインタを要素として持つ構造体を定義して、その配列を作れば
いいが、それでは大幅な書き換えで意味がない。
あとは、Fortranの規格を外れるが、どの処理系もほぼ必ず持っている
Cray Pointer を使う手もあるが、これもModuleの中では納まらない。
実行文が必要。
COMMONとかEQUIVALENCEはメモリーの番地共有だから、便利なことができる。
最適化を抑止してしまうから、主要部分には使わない方がいいが、
技巧的小技としては、うまく使うと短く書けるので、使えばいいんでね?
550549
2014/07/10(木) 22:53:27.62ID:Te+Dpsre 修正ミスwww
>ばらばらの番地いる変数を個々にFortranにはポインタの配列はない。
ばらばらの番地いる変数を個々に、ポインタの配列の要素に結び付けようにも、
Fortranにはポインタの配列はない。
>ばらばらの番地いる変数を個々にFortranにはポインタの配列はない。
ばらばらの番地いる変数を個々に、ポインタの配列の要素に結び付けようにも、
Fortranにはポインタの配列はない。
551デフォルトの名無しさん
2014/07/11(金) 03:55:49.85ID:wFVmEw9F ちょいと手間だがこれじゃダメかい
module VS
real :: A(4)
real :: V1, V2, V3, V4
equivalence (V1, A(1)), (V2, A(2)), (V3, A(3)), (V4, A(4))
end module VS
module VS
real :: A(4)
real :: V1, V2, V3, V4
equivalence (V1, A(1)), (V2, A(2)), (V3, A(3)), (V4, A(4))
end module VS
552デフォルトの名無しさん
2014/07/11(金) 04:36:13.83ID:gSvcXiep■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【裁判】山上徹也被告の妹「この人は母のふりをした旧統一教会の信者だと思いました」「でも、母の形をしているから突き放せなかった」 [1ゲットロボ★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★5 [樽悶★]
- 【速報】 米大使声明 「日本を支えていく」「中国が威圧的手段に訴えるのは断ち難い悪癖」 [お断り★]
- 【7リメイク】『ドラゴンクエストVII Reimagined』では「プレイヤーの時間」を尊重したい…“100時間超”だった原作をテンポ良く現代化 [おっさん友の会★]
- 【安倍晋三元首相銃撃事件】山上被告、45歳まで「生きているべきではなかった」 傍聴席は満席 [ぐれ★]
- 【テレビ】佐野岳 TBS『最強スポーツ男子頂上決戦』収録で重傷… 右膝半月板損傷と靭帯断裂 全治8カ月~9カ月間 [冬月記者★]
- 「あれ?円安加速の戦犯って高市じゃなくて岸田と石破じゃね?」という風潮、急速に高まるwww [759043982]
- 高市コインまもなく158円 [931948549]
- 甘利来日🤗沖縄でトークショー [993451824]
- 日本「中国のレアアースに71%依存してます。2024年のデータです」 ネトウヨ「え?youtube解説と違うんだけど」 [633746646]
- 珍🏡珍
- 名前は早苗です。歳は64歳の総理大臣です。 [358382861]
