このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
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
396デフォルトの名無しさん
2014/04/25(金) 19:31:14.66ID:9DVeZXXS 「構造体の1成分だけfunctionで計算する」っていうのがよくわからない。
(1)function の引数として構造体の1成分を使うのか、(2)function の戻り値として構造体の1成分を得たいのか。
いずれにせよ、関数定義では構造体をあらわに使う必要がなさそう。
たとえば構造体の1成分 aaa(i,j)%a が real のばあいなら、関数定義は
function f(x)
real f, x
f = x**2
end function
のようにして、(1)なら呼び出し時に
b = f(aaa(i, j)%a)
のようにすればいいし、(2)なら呼び出し時に
aaa(i, j)%a = f(c)
のようにすればいいのではないでしょうか。
(1)function の引数として構造体の1成分を使うのか、(2)function の戻り値として構造体の1成分を得たいのか。
いずれにせよ、関数定義では構造体をあらわに使う必要がなさそう。
たとえば構造体の1成分 aaa(i,j)%a が real のばあいなら、関数定義は
function f(x)
real f, x
f = x**2
end function
のようにして、(1)なら呼び出し時に
b = f(aaa(i, j)%a)
のようにすればいいし、(2)なら呼び出し時に
aaa(i, j)%a = f(c)
のようにすればいいのではないでしょうか。
397デフォルトの名無しさん
2014/04/25(金) 19:54:42.69ID:nDom0mhY >>396
早速のレスありがとうございます
まだよくわかっておらずすいません
やりたかったことはおっしゃっていただいたまさに(2)です
教えていただいたやり方でできそうです
とても助かりました。ありがとうございました
また機会がありましたらよろしくおねがいします
早速のレスありがとうございます
まだよくわかっておらずすいません
やりたかったことはおっしゃっていただいたまさに(2)です
教えていただいたやり方でできそうです
とても助かりました。ありがとうございました
また機会がありましたらよろしくおねがいします
398デフォルトの名無しさん
2014/05/02(金) 21:33:28.65ID:ZxAJrCZC399デフォルトの名無しさん
2014/05/08(木) 01:43:46.59ID:akP1EH34 連休を利用してFortran2003用のCheet Sheetを作ってみた。
自分が使っていたメモと、このスレに出たこと等をギリギリ突っ込んでみた。
ttp://www.pdf-archive.com/2014/05/07/f2003quickref/f2003quickref.pdf
一応、プログラム片は、Intel Fortran 2015ベータで動くことを確かめたつもり。
誤り等があったら、やさしく指摘してくれ。
豆本になっているので両面印刷して、以下のサイトを参考にして本にしてくれ。
ttp://k.e-kuchikomi.info/K_140266/
自分が使っていたメモと、このスレに出たこと等をギリギリ突っ込んでみた。
ttp://www.pdf-archive.com/2014/05/07/f2003quickref/f2003quickref.pdf
一応、プログラム片は、Intel Fortran 2015ベータで動くことを確かめたつもり。
誤り等があったら、やさしく指摘してくれ。
豆本になっているので両面印刷して、以下のサイトを参考にして本にしてくれ。
ttp://k.e-kuchikomi.info/K_140266/
400デフォルトの名無しさん
2014/05/08(木) 22:20:11.32ID:GsOSKq7r intel fortranを使っていて、-parallelが速く使っているのですが、
以下のようなサブルーチンで、依存関係で自動並列化がされていないのですが、
並列化するためになにかヒントをご教授いただけないでしょうか。
(宣言後)
a=0
do k=1,kmax
do j=1,jmax
do i=1,imax
if(logical(j,i,k))then
a(j,k)=a(j,k)+1
endif
enddo
enddo
enddo
logicalはファンクションで別ファイルで書いています
勉強不足で申し訳ありませんがよろしくお願いします
以下のようなサブルーチンで、依存関係で自動並列化がされていないのですが、
並列化するためになにかヒントをご教授いただけないでしょうか。
(宣言後)
a=0
do k=1,kmax
do j=1,jmax
do i=1,imax
if(logical(j,i,k))then
a(j,k)=a(j,k)+1
endif
enddo
enddo
enddo
logicalはファンクションで別ファイルで書いています
勉強不足で申し訳ありませんがよろしくお願いします
401デフォルトの名無しさん
2014/05/08(木) 23:40:27.39ID:akP1EH34 LOGICALをPURE宣言すればいい。
PUREでないならコンパイラは判断できないので自動並列化は無理だろう。
手動でコンパイラ支持行で明示してやれ。
しかし、iは関数内にいれて
forall(j=1:jmax,k=1:kmax) a(j,k)=ifun(j,k)
pure function ifun(j,k)
...
do i = 1, imax
if (...) ifun = ifun + 1
end
みたいにしたほういい。
PUREでないならコンパイラは判断できないので自動並列化は無理だろう。
手動でコンパイラ支持行で明示してやれ。
しかし、iは関数内にいれて
forall(j=1:jmax,k=1:kmax) a(j,k)=ifun(j,k)
pure function ifun(j,k)
...
do i = 1, imax
if (...) ifun = ifun + 1
end
みたいにしたほういい。
402デフォルトの名無しさん
2014/05/09(金) 22:46:22.53ID:yQPNJst2 >>401
ご教授ありがとうございます
forallやpureなど使ったことがなく、書き方例など大変勉強になりました
ご教示いただいた内容で書いたのですが他との兼ね合いの依存関係なのかまた出てしまいました
(col. 58) remark: 並列依存関係: FLOW の依存関係が var$649 行 343 と var$649 行 91 の間に仮定されました。
などなど
どうも他のサブルーチンの書き方も並列化に悪いようで、教えていただいた並列化方法を頼りにまず勉強しなおして、
他のプログラム部分もいい機会なので見直そうと思います。
ありがとうございました。
ご教授ありがとうございます
forallやpureなど使ったことがなく、書き方例など大変勉強になりました
ご教示いただいた内容で書いたのですが他との兼ね合いの依存関係なのかまた出てしまいました
(col. 58) remark: 並列依存関係: FLOW の依存関係が var$649 行 343 と var$649 行 91 の間に仮定されました。
などなど
どうも他のサブルーチンの書き方も並列化に悪いようで、教えていただいた並列化方法を頼りにまず勉強しなおして、
他のプログラム部分もいい機会なので見直そうと思います。
ありがとうございました。
403デフォルトの名無しさん
2014/05/10(土) 00:07:21.90ID:ZxmW9Mt1 Linux 使いでEclipse + photran のフォートラン統合開発環境を構築しようかと考えているのですが、なかなかうまくいきません。
例えば、今までターミナル上で
Gfortran hoge.f90 main.f90 でコンパイルできたてのに、eclipse だと ant build not found とかででうまくいきません。
ちなみにhoge.f90 はモジュールファイルで、main.f90がメインプログラムです。
エクリプスでもhero.f90 (メインプログラム単体)単体のコンパイルは出来ています。
もしかして複数ファイルを同時に今コンパイルできないとか?
例えば、今までターミナル上で
Gfortran hoge.f90 main.f90 でコンパイルできたてのに、eclipse だと ant build not found とかででうまくいきません。
ちなみにhoge.f90 はモジュールファイルで、main.f90がメインプログラムです。
エクリプスでもhero.f90 (メインプログラム単体)単体のコンパイルは出来ています。
もしかして複数ファイルを同時に今コンパイルできないとか?
404デフォルトの名無しさん
2014/05/10(土) 01:44:31.61ID:X6uqaHXX プロジェクトにソースファイルを全部入れてビルドするだけだが駄目かい?
405デフォルトの名無しさん
2014/05/10(土) 05:24:00.09ID:ZxmW9Mt1406デフォルトの名無しさん
2014/05/11(日) 09:02:09.98ID:4C2ZppHJ407デフォルトの名無しさん
2014/05/11(日) 10:52:57.57ID:wJQWAvOW >>399
乙。いただいた
乙。いただいた
408デフォルトの名無しさん
2014/05/11(日) 12:54:27.66ID:a5cPk+x+409デフォルトの名無しさん
2014/05/11(日) 17:20:58.15ID:cyBk1jZ9 Implementing the Standards...including Fortran 2003
http://www.fortran.bcs.org/2007/jubilee/f50.pdf
Fortran 2003 and Beyond
パワポ
https://cug.org/5-publications/proceedings_attendee_lists/2005CD/S05_Proceedings/pages/Authors/Long-0517-1100/Long-0517-1100_slides.pdf
PDF
https://cug.org/5-publications/proceedings_attendee_lists/2005CD/S05_Proceedings/pages/Authors/Long-0517-1100/Long-0517-1100_paper.pdf
Intel Parallel Universe issue 11 p.22
https://software.intel.com/sites/default/files/parallel_mag_issue11.pdf
http://www.fortran.bcs.org/2007/jubilee/f50.pdf
Fortran 2003 and Beyond
パワポ
https://cug.org/5-publications/proceedings_attendee_lists/2005CD/S05_Proceedings/pages/Authors/Long-0517-1100/Long-0517-1100_slides.pdf
https://cug.org/5-publications/proceedings_attendee_lists/2005CD/S05_Proceedings/pages/Authors/Long-0517-1100/Long-0517-1100_paper.pdf
Intel Parallel Universe issue 11 p.22
https://software.intel.com/sites/default/files/parallel_mag_issue11.pdf
410デフォルトの名無しさん
2014/05/13(火) 00:50:14.94ID:X5XVCl1f fortranまとめwikiないよなそういえば
411デフォルトの名無しさん
2014/05/13(火) 11:18:46.53ID:Ml4tWcMx sin波のようななめらかな波形データから尖頭値を抽出するにはどうすればよいでしょうか。
波形データの入っている配列aから抽出したいのですが、sin波のような綺麗な周期を持っておらず、地震の観測波形のように不規則に連続して変化していっています。
波形データの入っている配列aから抽出したいのですが、sin波のような綺麗な周期を持っておらず、地震の観測波形のように不規則に連続して変化していっています。
412デフォルトの名無しさん
2014/05/14(水) 12:56:39.35ID:wOYwf617 こんなの来てた。
MODERN FORTRAN FOR SCIENTISTS AND ENGINEERS
By Damian Rouson
http://jolts.stanford.edu/72/modern_fortran_for_scientists_and_engineers
MODERN FORTRAN FOR SCIENTISTS AND ENGINEERS
By Damian Rouson
http://jolts.stanford.edu/72/modern_fortran_for_scientists_and_engineers
413デフォルトの名無しさん
2014/05/15(木) 01:14:31.34ID:cUF0eH5o >>406
いえ、そんなことおっしゃらず…
今までエディタ使って作成してたフォートランファイルをエクリプスのプロジェクトフォルダに入れてビルドしようとしてもうんともすんとも言わないです。
で、デバッグできないという…
いえ、そんなことおっしゃらず…
今までエディタ使って作成してたフォートランファイルをエクリプスのプロジェクトフォルダに入れてビルドしようとしてもうんともすんとも言わないです。
で、デバッグできないという…
414デフォルトの名無しさん
2014/05/15(木) 02:31:06.49ID:klLDqCtV Fortran90/95による実践プログラミング [単行本(ソフトカバー)]
安田 清和 (著), 水野 正隆 (著), 小野 英樹 (著)
http://www.amazon.co.jp/gp/product/4872594738
いつの間にかこんなのが出版されているんだが、見たやつ中身はどうよ?
目次からすると、おっおぅ!…ってかんじなんだがw
安田 清和 (著), 水野 正隆 (著), 小野 英樹 (著)
http://www.amazon.co.jp/gp/product/4872594738
いつの間にかこんなのが出版されているんだが、見たやつ中身はどうよ?
目次からすると、おっおぅ!…ってかんじなんだがw
415デフォルトの名無しさん
2014/05/16(金) 01:40:42.79ID:USQ/ZI5B なんかエクリプスとフォトランの詳しいマニュアルないかな?
本家でもversion古いし
本家でもversion古いし
416デフォルトの名無しさん
2014/05/16(金) 01:49:02.89ID:pE1PewlD417デフォルトの名無しさん
2014/05/16(金) 02:01:11.54ID:USQ/ZI5B418デフォルトの名無しさん
2014/05/16(金) 02:08:04.34ID:cU3+Idig fortranで書いたプログラムの出力ファイルを読み込んで、それを元にしたグラフを書かせたいのですが、1)それに適したグラフ描画ソフト2)そういったことを解説してある本はないでしょうか?
現状はExcelVBAで出力csvファイルを呼び出し、所定のExcelシートで編集してグラフにするためのデータを作成し、そのあと手動でグラフを作成しています。
Excelを挟まず、csvファイルをもとにグラフを描画してくれるプログラムがあるととてもありがたいのですが、何かできないでしょうか
現状はExcelVBAで出力csvファイルを呼び出し、所定のExcelシートで編集してグラフにするためのデータを作成し、そのあと手動でグラフを作成しています。
Excelを挟まず、csvファイルをもとにグラフを描画してくれるプログラムがあるととてもありがたいのですが、何かできないでしょうか
419デフォルトの名無しさん
2014/05/16(金) 07:25:49.77ID:USQ/ZI5B >>418
Gnuplot, R とか(´・_・`)
Gnuplot, R とか(´・_・`)
420デフォルトの名無しさん
2014/05/16(金) 15:01:20.39ID:GjdBspSJ 現在,windowsで大学の課題でmingwを使用してコードのコンパイルや実行しようとしています。
コンパイル自体は成功したようにみえたのですが実行する際に
「コンピュータにlibquadmath-0.dllがないため,プログラムを開始できません.
この問題を解決するには,プログラムを再インストールしてみてくだい.」
と表示され実行できません。
因みにコンパイルしたコード(hello.f90)は以下のようになります。
program hello
print *, 'Hello World!'
end program hello
またC言語(C++)のコードのコンパイルや実行には成功しています。
コンパイル自体は成功したようにみえたのですが実行する際に
「コンピュータにlibquadmath-0.dllがないため,プログラムを開始できません.
この問題を解決するには,プログラムを再インストールしてみてくだい.」
と表示され実行できません。
因みにコンパイルしたコード(hello.f90)は以下のようになります。
program hello
print *, 'Hello World!'
end program hello
またC言語(C++)のコードのコンパイルや実行には成功しています。
421デフォルトの名無しさん
2014/05/16(金) 19:43:53.43ID:xH+zzs4U path
422デフォルトの名無しさん
2014/05/16(金) 19:48:37.92ID:xH+zzs4U423デフォルトの名無しさん
2014/05/16(金) 21:38:59.32ID:HsLYY/75 >>420
以前、似たような(同じ?)エラーメッセージに遭遇した事があったが
その時は件のライブラリを強制再インストールしたら直ったように思う。
mingw-get update
mingw-get --reinstall upgrade mingw32-libquadmath
これを実行してMinGW(MSYS)のターミナルを再起動すればどうかな。
以前、似たような(同じ?)エラーメッセージに遭遇した事があったが
その時は件のライブラリを強制再インストールしたら直ったように思う。
mingw-get update
mingw-get --reinstall upgrade mingw32-libquadmath
これを実行してMinGW(MSYS)のターミナルを再起動すればどうかな。
424デフォルトの名無しさん
2014/05/17(土) 06:32:26.00ID:97dT5LKY >>419
gnuplotですかありがとうございます
gnuplotですかありがとうございます
425デフォルトの名無しさん
2014/05/17(土) 07:18:10.88ID:ScBioaGh 清書にはmatplotlibでね?
426デフォルトの名無しさん
2014/05/17(土) 14:11:28.79ID:6t+Gfvcv >>414
今日日出すなら2003と2008解説してほしい
今日日出すなら2003と2008解説してほしい
428デフォルトの名無しさん
2014/05/18(日) 18:58:17.41ID:8yAoHmFE >>426
ですよねー
ですよねー
429デフォルトの名無しさん
2014/05/30(金) 03:00:46.51ID:r0FrxYTY メモ帳のインプットファイルから一行ずつ読み込んでプログラムを回す時、読み込める一行の長さの限界というのは決まっているのでしょうか
例えば
有効数字8桁の数字を10個、一行に並べて書いた時はエラーで読みませんが、それらの桁を4桁まで減らして並べて書いたらプログラムが回るのです。
Excelで作ったものをメモ帳にはっつけて使っているので、セル間をタブキーによる空白で置き換えられます。
その空白を半角スペースに置き直して一行の長さを短くしても読むようになるので、読み込める一行に限りがあるように感じます。
CHARACTER CARD 100
という部分を200に変えても意味がなかったのでどこを変えれば読み込める一行を長くできるのかがわかりません。
例えば
有効数字8桁の数字を10個、一行に並べて書いた時はエラーで読みませんが、それらの桁を4桁まで減らして並べて書いたらプログラムが回るのです。
Excelで作ったものをメモ帳にはっつけて使っているので、セル間をタブキーによる空白で置き換えられます。
その空白を半角スペースに置き直して一行の長さを短くしても読むようになるので、読み込める一行に限りがあるように感じます。
CHARACTER CARD 100
という部分を200に変えても意味がなかったのでどこを変えれば読み込める一行を長くできるのかがわかりません。
430デフォルトの名無しさん
2014/05/30(金) 03:29:52.60ID:thFm9kuD read文が書かれた行をコピペして.
普通はcharacterなんか使わずにこう書く.
real(8) :: val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
open(10,file='ファイル名')
read(10,*) val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
write(*,*) val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
普通はcharacterなんか使わずにこう書く.
real(8) :: val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
open(10,file='ファイル名')
read(10,*) val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
write(*,*) val1, val2, val3, val4, val5, val6, val7, val8, val9, val10
431デフォルトの名無しさん
2014/05/30(金) 08:44:23.58ID:U3Y1cq1n >>430
20年以上前に書かれたプログラムを少し編集しようとしています。読み込み部分は他の人が書いていて、初心者の私はそれを少し編集したいのですが、自信がないです
とにかくやりたいことはinputファイルのうちあるブロックの読み込み部で1行につき10個読んでいるところを14個読むようにしたいのです
CHARACTER CARD 100という意味もよくわかっていません。調べてもCARDの意味が出ませんでした。
input.txtを読み込むよう指示するのですが、全体としてそのinputは数千行とあります。それでもそのような記述で大丈夫なのでしょうか。
20年以上前に書かれたプログラムを少し編集しようとしています。読み込み部分は他の人が書いていて、初心者の私はそれを少し編集したいのですが、自信がないです
とにかくやりたいことはinputファイルのうちあるブロックの読み込み部で1行につき10個読んでいるところを14個読むようにしたいのです
CHARACTER CARD 100という意味もよくわかっていません。調べてもCARDの意味が出ませんでした。
input.txtを読み込むよう指示するのですが、全体としてそのinputは数千行とあります。それでもそのような記述で大丈夫なのでしょうか。
432デフォルトの名無しさん
2014/05/30(金) 15:49:55.31ID:dCRThtZs どのような記述だよ
433デフォルトの名無しさん
2014/05/30(金) 19:59:51.61ID:1KLLWRFX >>431
あなたのすることは数字の大きさをかえるような小手先の対応ではなくて、
昔のプログラムの動作なり、コードを理解することではないでしょうか?
10から14に数を増やすためにすることが読み込み箇所の変更だけですむのかなと心配になります。
10前提で処理がコードとして記述されていないか、計算式があるなら数を増やして大丈夫なのか、
チェックすることはいろいろあると思います。
あなたに指示をされた先輩なり上司のかたが変更方針がわかっておられて、指示をされてればいいのですが。
あなたのすることは数字の大きさをかえるような小手先の対応ではなくて、
昔のプログラムの動作なり、コードを理解することではないでしょうか?
10から14に数を増やすためにすることが読み込み箇所の変更だけですむのかなと心配になります。
10前提で処理がコードとして記述されていないか、計算式があるなら数を増やして大丈夫なのか、
チェックすることはいろいろあると思います。
あなたに指示をされた先輩なり上司のかたが変更方針がわかっておられて、指示をされてればいいのですが。
434デフォルトの名無しさん
2014/05/31(土) 00:38:02.07ID:8hxwwbXy >>433
配列の上限や各プログラムでのループ処理で何個読めるのかを確認しました。その点は修正しても大丈夫でした。
しかしinputファイルから読み込む一行があまりに長いとエラーを起こすのは改善できませんでした。
配列の上限や各プログラムでのループ処理で何個読めるのかを確認しました。その点は修正しても大丈夫でした。
しかしinputファイルから読み込む一行があまりに長いとエラーを起こすのは改善できませんでした。
435デフォルトの名無しさん
2014/05/31(土) 01:01:49.98ID:yeEEhfSt どこからどこへどれだけデータを読み込むか書いてあるのが read 文なので
それが出ないとどうにも。それに input.txt が長くいろいろブロックがあるなら
対応する read 文もいくつもあるうちのどれかってとこだな。
それが出ないとどうにも。それに input.txt が長くいろいろブロックがあるなら
対応する read 文もいくつもあるうちのどれかってとこだな。
436デフォルトの名無しさん
2014/05/31(土) 01:45:38.26ID:3e7Yho2f 最初の質問
>読み込める一行の長さの限界というのは決まっているのでしょうか
に答えるとすれば,
「データをどう読むようにコーディングされているかによります」
かな.
何度もread文を書くように言われているのに書かないってことは,
知的財産の流出とかなんかを気にしているのかな?
ソースコードをほんの一部でも書けないなら,先輩なりに聞いた方がよい.
>読み込める一行の長さの限界というのは決まっているのでしょうか
に答えるとすれば,
「データをどう読むようにコーディングされているかによります」
かな.
何度もread文を書くように言われているのに書かないってことは,
知的財産の流出とかなんかを気にしているのかな?
ソースコードをほんの一部でも書けないなら,先輩なりに聞いた方がよい.
437デフォルトの名無しさん
2014/06/02(月) 00:07:12.28ID:vUSkffdq あ
438デフォルトの名無しさん
2014/06/02(月) 00:13:33.24ID:BIE796Bm439デフォルトの名無しさん
2014/06/02(月) 01:34:45.52ID:mPD7/eRQ 何度も書けと言われているものを書かないのはなんでだろう
書けば直したりしてくれるかも知れないのに
書かれている文はFortranの文法に合わないし
cardに一度読み込ませて、その後各変数に値を分配しているように思えるけど、これだけでは分からない
読み込みができているかreadの後に変数の値の確認とかしてなさそうだし
単純に1行でどこかまで読めるかテストプログラム組んで確認してなさそうだし
書けば直したりしてくれるかも知れないのに
書かれている文はFortranの文法に合わないし
cardに一度読み込ませて、その後各変数に値を分配しているように思えるけど、これだけでは分からない
読み込みができているかreadの後に変数の値の確認とかしてなさそうだし
単純に1行でどこかまで読めるかテストプログラム組んで確認してなさそうだし
440デフォルトの名無しさん
2014/06/02(月) 01:57:55.06ID:GuhykFKN プログラム作成者が存在するなら、現状どういう処理をしているのかを
コードと向き合いながら作成者に聞いて理解する。
200に増やせばなんとかなると結論つける根拠をプログラム作成者に確認する。
ソースを変更するのはそれからだと思うけど。
読み込める文字数に制限があると疑うなら、現在読み込めてるデータの文字列長の
範囲内で10から14に入力データ数を変更したコードでテストしてみる。
入力文字列長の制限なのかコードの変更ミスなのか切り分けができてない。
コードと向き合いながら作成者に聞いて理解する。
200に増やせばなんとかなると結論つける根拠をプログラム作成者に確認する。
ソースを変更するのはそれからだと思うけど。
読み込める文字数に制限があると疑うなら、現在読み込めてるデータの文字列長の
範囲内で10から14に入力データ数を変更したコードでテストしてみる。
入力文字列長の制限なのかコードの変更ミスなのか切り分けができてない。
441デフォルトの名無しさん
2014/06/02(月) 08:47:31.90ID:xxg6z98O card と云うと、FORTRAN IV時代の1枚80コラムのIBMカー
を思い出す。
最初の5コラムがラベル番号6コラム目がコメント用7コラム
から72コラムまでにステートメントを書く(打つ)
というものだった。
もしかして、
read card 100
というのは、データカードを100枚読み込むということ
でしょうか。
character 100
というのはデータカードが2枚ひと組になっていて、
2枚合わせて100文字をひと固まりとして処理する
ということかなとも思いますが、いずれにしても
FORTRAN IVの正規の文法には、このようなステートメント
はなかったと思います。
ある機種特有の方言かもしれません
を思い出す。
最初の5コラムがラベル番号6コラム目がコメント用7コラム
から72コラムまでにステートメントを書く(打つ)
というものだった。
もしかして、
read card 100
というのは、データカードを100枚読み込むということ
でしょうか。
character 100
というのはデータカードが2枚ひと組になっていて、
2枚合わせて100文字をひと固まりとして処理する
ということかなとも思いますが、いずれにしても
FORTRAN IVの正規の文法には、このようなステートメント
はなかったと思います。
ある機種特有の方言かもしれません
442デフォルトの名無しさん
2014/06/02(月) 09:19:02.24ID:/Y6F3YHx >>439
1万行超えるのでいったいどこを抜き出せばよいのかわかりません。全てを貼ることはできませんし、各サブルーチンに出てきているread文はこれです。
ご指摘の通りインプットファイルから取り込んだものを各変数へ分配していっています。
アウトプットファイルから、入力した値と読み込んだ値が一致しているかどうかは確認済です。
ただ、問題となっている入力部分における一行が長いと、そこを読み込めずにプログラムがそこで止まってしまうのです。入力する変数の個数の問題ではなく一行の長さに問題があるのではないかと考えているのです。
>>440
10→14に変えても読むことはためしてわかりました。有効桁数を減らして、一行の長さを短くすれば読むのです。
>>441
7マス目からプログラムを打ち始めていた頃に作られたものです。read cardというのはインプットファイルを読むという意味だそうです。いくら調べてもcardという命令分はないのでよくわかりませんが、read文といえばこれぐらいなのです
データカードというのはインプットファイルのことですよね?
今はabsoft11.0,fortran95でやっているのでそのようなことは気にしなくてよくなっています
1万行超えるのでいったいどこを抜き出せばよいのかわかりません。全てを貼ることはできませんし、各サブルーチンに出てきているread文はこれです。
ご指摘の通りインプットファイルから取り込んだものを各変数へ分配していっています。
アウトプットファイルから、入力した値と読み込んだ値が一致しているかどうかは確認済です。
ただ、問題となっている入力部分における一行が長いと、そこを読み込めずにプログラムがそこで止まってしまうのです。入力する変数の個数の問題ではなく一行の長さに問題があるのではないかと考えているのです。
>>440
10→14に変えても読むことはためしてわかりました。有効桁数を減らして、一行の長さを短くすれば読むのです。
>>441
7マス目からプログラムを打ち始めていた頃に作られたものです。read cardというのはインプットファイルを読むという意味だそうです。いくら調べてもcardという命令分はないのでよくわかりませんが、read文といえばこれぐらいなのです
データカードというのはインプットファイルのことですよね?
今はabsoft11.0,fortran95でやっているのでそのようなことは気にしなくてよくなっています
443デフォルトの名無しさん
2014/06/02(月) 10:21:47.52ID:yv/nHUfZ 昔は
_______read 6 100
とか書いてたな
_______read 6 100
とか書いてたな
444デフォルトの名無しさん
2014/06/02(月) 23:06:26.34ID:Ij4SzyXz 1つ言えるのは card とはそのプログラム内で定義された何らかの名前
そして今のところの常識的にその文法は Fortran とは異なるように見える
100 はその数字のラベルが付けられた行であるようにも考えられるが
その場合は 200 など別に変えられた場合にコンパイルエラーか
実行時の動作がぶっ壊れるだろうから、おそらく数値とみるべきか
そして今のところの常識的にその文法は Fortran とは異なるように見える
100 はその数字のラベルが付けられた行であるようにも考えられるが
その場合は 200 など別に変えられた場合にコンパイルエラーか
実行時の動作がぶっ壊れるだろうから、おそらく数値とみるべきか
445デフォルトの名無しさん
2014/06/03(火) 07:56:10.35ID:Bql6ya1H あ
446デフォルトの名無しさん
2014/06/04(水) 08:41:52.08ID:cjdS4ahW あ
447デフォルトの名無しさん
2014/06/04(水) 21:26:40.68ID:bCq7kX8R common/mat/a(20)
common/mat/a1,a2,…a25
と記述してもプログラムが動くのですがなぜでしょうか
matには20個の変数しか入れないから、a1〜a20までしか読み込まないと思ったのですが、なぜか読みます
common/mat/a1,a2,…a25
と記述してもプログラムが動くのですがなぜでしょうか
matには20個の変数しか入れないから、a1〜a20までしか読み込まないと思ったのですが、なぜか読みます
448デフォルトの名無しさん
2014/06/04(水) 23:26:31.63ID:OlqsO7Ca 文法上では、大きさの違う COMMON ブロックは、無名 COMMON ブロックでしか
許されていないのだが、まぁ昔はよくやられていた。
66時代は静的にメモリー領域が確保されるので、問題は少ない。
77時代には、文法上は COMMON ブロックも SAVE 指定しないと、
解放されるのでまずいのだが、過去との互換性から普通は静的に
確保されていたのでまぁ大丈夫だった。
COMMON 文はメモリー上の番地の共有になっている。それは先頭で位置合わせが
なされるので、より大きい方でメモリーが確保されていれば、一方が小さくても
問題ない。ただ、小さい大きさで確保されていると、エラーが出なくても
はみ出して読み書きしているだけなので、ファンタスティックな予期せぬ出来事
が起きる。
許されていないのだが、まぁ昔はよくやられていた。
66時代は静的にメモリー領域が確保されるので、問題は少ない。
77時代には、文法上は COMMON ブロックも SAVE 指定しないと、
解放されるのでまずいのだが、過去との互換性から普通は静的に
確保されていたのでまぁ大丈夫だった。
COMMON 文はメモリー上の番地の共有になっている。それは先頭で位置合わせが
なされるので、より大きい方でメモリーが確保されていれば、一方が小さくても
問題ない。ただ、小さい大きさで確保されていると、エラーが出なくても
はみ出して読み書きしているだけなので、ファンタスティックな予期せぬ出来事
が起きる。
449デフォルトの名無しさん
2014/06/04(水) 23:52:50.09ID:lml6F2RD >>448
すみません、あまり理解できず、いくつか教えてほしいことがあります。
common文はプログラム中に出てくる共通の変数を定義するために使うものだと考えています。
最初に定義する時に
common/mat/a(20)
としていれば20個の要素を入れる事ができます。その後別のサブルーチンで
common/mat/a1,a2,…a25
とすればa(20)に具体的に値を格納していっているものだと考えています。
プログラムでは共通してすべて、最大で20個の値を初期化したり記憶したり格納したりするよう記述されています。
しかしあるサブルーチンでmatを呼び出して25個の値を定義して放り込んで操作していても普通に使えているのです。
「先頭で一合わせがなされるので(どこの先頭でしょうか)、より大きい方(どこより大きいのでしょうか)でメモリーが確保されていれば」
のメモリーとははじめにglobal defineで定義する最大記憶容量のことでしょうか?
じつはこれもこの20を使って上限を決めており、ある程度は余裕をもたせているのですが、
条件を変えたりすれば、すりきりいっぱいになるかもしれないです。
「ただ、小さい大きさで確保されていると、エラーが出なくても はみ出して読み書きしているだけなので、ファンタスティックな予期せぬ出来事
が起きる。 」というのは小さい大きさというのはどこより小さいのでしょうか。はみ出して読み書きしているだけというのは今現在読み書きできていることとどうなのでしょうか。
すみません、あまり理解できず、いくつか教えてほしいことがあります。
common文はプログラム中に出てくる共通の変数を定義するために使うものだと考えています。
最初に定義する時に
common/mat/a(20)
としていれば20個の要素を入れる事ができます。その後別のサブルーチンで
common/mat/a1,a2,…a25
とすればa(20)に具体的に値を格納していっているものだと考えています。
プログラムでは共通してすべて、最大で20個の値を初期化したり記憶したり格納したりするよう記述されています。
しかしあるサブルーチンでmatを呼び出して25個の値を定義して放り込んで操作していても普通に使えているのです。
「先頭で一合わせがなされるので(どこの先頭でしょうか)、より大きい方(どこより大きいのでしょうか)でメモリーが確保されていれば」
のメモリーとははじめにglobal defineで定義する最大記憶容量のことでしょうか?
じつはこれもこの20を使って上限を決めており、ある程度は余裕をもたせているのですが、
条件を変えたりすれば、すりきりいっぱいになるかもしれないです。
「ただ、小さい大きさで確保されていると、エラーが出なくても はみ出して読み書きしているだけなので、ファンタスティックな予期せぬ出来事
が起きる。 」というのは小さい大きさというのはどこより小さいのでしょうか。はみ出して読み書きしているだけというのは今現在読み書きできていることとどうなのでしょうか。
450デフォルトの名無しさん
2014/06/04(水) 23:54:33.80ID:OlqsO7Ca character 命令があるということは FORTRAN77 だな。
文法的に成り立つ解釈としては、FORTRAN77では空白は無視されるから、
CHARACTER card 100 とは今でいうcharacter(len=1) :: card100
read card 100 は、read card100 だが、この時 card100 には Format文が
入らないとだめなので、1文字では無理w
CHARACTER CARD*100 の間違いかとも思ったが、READ CARD 100が成り立たず
終了w
文法的に成り立つ解釈としては、FORTRAN77では空白は無視されるから、
CHARACTER card 100 とは今でいうcharacter(len=1) :: card100
read card 100 は、read card100 だが、この時 card100 には Format文が
入らないとだめなので、1文字では無理w
CHARACTER CARD*100 の間違いかとも思ったが、READ CARD 100が成り立たず
終了w
451デフォルトの名無しさん
2014/06/05(木) 00:08:43.48ID:m2ykd6YT 同じプログラム単位に書いたなら
common/mat/a(20)
common/mat/a1,a2,…a25
は
common/mat/a(20),a1,a2,…a25
と同じだったかと
違うプログラム単位に書いたなら多分未定義だが
重なるメモリはそれっぽく読めて、多い分はそのまま使えるっぽい
common/mat/a(20)
common/mat/a1,a2,…a25
は
common/mat/a(20),a1,a2,…a25
と同じだったかと
違うプログラム単位に書いたなら多分未定義だが
重なるメモリはそれっぽく読めて、多い分はそのまま使えるっぽい
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の入門書を見てみたのですが,見当ら
なかったので,質問したしだいです。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否 [夜のけいちゃん★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★3 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 「タワマン天国」に飛びつく若者…SNSに転がる「成功体験」に続けるのか 湾岸エリアの業者が語った現実 [蚤の市★]
- 【悲報】日本人錯乱「集団的自衛権行使に賛成。けど自衛隊を戦わせるのは反対」 [237216734]
- 【悲報】高市効果で「1ドル=160円」が相場へwwwwwwwwwwwwwwwwwwwwwwwwwwwww 止まらぬ高市円安💥💥 [871926377]
- 小川彩佳アナ「高市総理はここまで影響が出ることを想像して発言したんでしょうか」高市ソルジャー「!!!!(シュババババ)」 [931948549]
- 今来た遊戯王やってる奴スレ
- FGOで好きなサーヴァントがアビゲイル、北斎、楊貴妃なんだが
- 自閉症が「んなっしょい」と連呼するお🏡
