このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
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
223デフォルトの名無しさん
2013/07/12(金) NY:AN:NY.AN >>222
do k=0,28
f(3,k+1)=2*f(4,k)-f(5,k)+(f(4,k+1)-2*f(4,k)+f(4,k-1))/4.
end do
これでk=0の時、f(4,k-1)→f(4,-1)で配列はみだしだからじゃないか?
まずdebug mode サブスクリプト・チェックをかけて実行しろ!
do k=0,28
f(3,k+1)=2*f(4,k)-f(5,k)+(f(4,k+1)-2*f(4,k)+f(4,k-1))/4.
end do
これでk=0の時、f(4,k-1)→f(4,-1)で配列はみだしだからじゃないか?
まずdebug mode サブスクリプト・チェックをかけて実行しろ!
224デフォルトの名無しさん
2013/08/02(金) NY:AN:NY.ANID:Kz7Qk8/h! openmp を使って並列化しようと思ってるんですが、スレッドセーフな副プログラムを作るのに気をつけるのってどういう点ですか?
save と common を使わなければいいだけでしょうか。
save を避けなければならないばあい、擬似乱数のように前の状態を保存しておかなければならないような副プログラムはどうやって作ったらいいでしょうか。
save と common を使わなければいいだけでしょうか。
save を避けなければならないばあい、擬似乱数のように前の状態を保存しておかなければならないような副プログラムはどうやって作ったらいいでしょうか。
225デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.AN 引数で前の状態を渡し、引数に次の状態を戻す
呼び出し元スレッドと内容を共有するので、実引数は
private なのか share なのか明らかにすること
呼び出し元スレッドと内容を共有するので、実引数は
private なのか share なのか明らかにすること
226デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.ANID:zEmYUazP! なるほど。ありがとうございます。
227デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN OpenMPとの整合はよく分からんが、F95以降では
pure接頭子で依存性の無さを保証できる。
というかコンパイラがチェックしてくれる。
pure接頭子で依存性の無さを保証できる。
というかコンパイラがチェックしてくれる。
228デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN Visual Basicで下記のバイナリ出力したグリッドをfortranで読み込ませようとしてますが,
できません.input statement requires too much data, unit 10
とでます.
できません.input statement requires too much data, unit 10
とでます.
229デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN Dim doutpgrid As New System.IO.BinaryWriter(New System.IO.FileStream(Outputfile, IO.FileMode.Create, IO.FileAccess.Write))
For i = 1 To nz
For k = 1 To ny
For j = 1 To nx
doutpgrid.Write(nheader)
doutpgrid.Write(dblX(j, k, i)) : doutpgrid.Write(dbly(j, k, i)) : doutpgrid.Write(dblz(j, k, i))
doutpgrid.Write(nfooter)
Next j
Next k
Next l
For i = 1 To nz
For k = 1 To ny
For j = 1 To nx
doutpgrid.Write(nheader)
doutpgrid.Write(dblX(j, k, i)) : doutpgrid.Write(dbly(j, k, i)) : doutpgrid.Write(dblz(j, k, i))
doutpgrid.Write(nfooter)
Next j
Next k
Next l
230デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN open(10,file='grid.dat',form='unformatted')
do 115 k=1,kmax1
do 115 j=1,jmax1
do 115 i=1,imax1
read(10) xd(i,j,k),yd(i,j,k),zd(i,j,k)
115 continue
close(10)
です.誰か教えてくださいnheaderなどはinteger, dblXはdoubleです.
do 115 k=1,kmax1
do 115 j=1,jmax1
do 115 i=1,imax1
read(10) xd(i,j,k),yd(i,j,k),zd(i,j,k)
115 continue
close(10)
です.誰か教えてくださいnheaderなどはinteger, dblXはdoubleです.
231デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN VBの事は、よく分からんが、少なくともFortran側でnheaderとnfooterを読むか
読み飛ばすかしないと、つじつまが合わないだろう。
いきなりエラーが出るなら、nheaderのintegerを三個の倍精度で読もうとして
要素が足りないと叱られたと思われる。
バイナリだとずれたまま読みそうな気もするが・・・
読み飛ばすかしないと、つじつまが合わないだろう。
いきなりエラーが出るなら、nheaderのintegerを三個の倍精度で読もうとして
要素が足りないと叱られたと思われる。
バイナリだとずれたまま読みそうな気もするが・・・
232デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.AN unformatted で sequential なファイルは次のレコード(記録)の組を飛ばすのに
何バイト読み進めればいいかを各レコードの前後に整数値として記録しているらしい
レコードは1文の read/write で扱われる単位とみていいはず
(このせいで妙にファイルサイズが膨らんだりする)
>>229 nheader と nfooter の値を確認
何バイト読み進めればいいかを各レコードの前後に整数値として記録しているらしい
レコードは1文の read/write で扱われる単位とみていいはず
(このせいで妙にファイルサイズが膨らんだりする)
>>229 nheader と nfooter の値を確認
233デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN シーケンシャルなUnformattedなら、Fortran独自の形式だからVBの出力は
読めない気もする。
>>232の言うとおり、Fortranでは読みとばしとBACKSPACEでの逆行のために、
各レコードの前後にレコード長が記録されている。
F2003からの機能だが、STREAMモードで読むか、あるいはF77にこだわるなら
DIRECT形式で無理やり読む方法がある。どちらも読み込み単位が処理系によって
BYTEだったりWORDだったり依存性がるので調べる必要がある。
またDIRECT形式は大抵は普通にべた書きだが、処理系によってはヘッダが付いたりするので
これも調べる必要がある。
よく分かんないんだったら、素直に書式付とかCVS形式とかで出して
読むのが吉。
読めない気もする。
>>232の言うとおり、Fortranでは読みとばしとBACKSPACEでの逆行のために、
各レコードの前後にレコード長が記録されている。
F2003からの機能だが、STREAMモードで読むか、あるいはF77にこだわるなら
DIRECT形式で無理やり読む方法がある。どちらも読み込み単位が処理系によって
BYTEだったりWORDだったり依存性がるので調べる必要がある。
またDIRECT形式は大抵は普通にべた書きだが、処理系によってはヘッダが付いたりするので
これも調べる必要がある。
よく分かんないんだったら、素直に書式付とかCVS形式とかで出して
読むのが吉。
234デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN gfortranでポインタの初期値をnullにするコンパイルオプションをおしえていただけないでしょうか。
Linux上でintel fortran compilerでコンパイルしていたものを
windows上で動作させるために、g95とgfortranでコンパイルしようとしました。
ifortではデフォルトでポインタはallocateされていないのですが
g95やgfortranではそうではないようです。
g95では-fpointer=nullで初期値をnullにできるのですが
私のソースコードをコンパイルすると、コンパイラの内部エラーと言われます。
gfortranでは上記に対応するコンパイルオプションはないでしょうか
Linux上でintel fortran compilerでコンパイルしていたものを
windows上で動作させるために、g95とgfortranでコンパイルしようとしました。
ifortではデフォルトでポインタはallocateされていないのですが
g95やgfortranではそうではないようです。
g95では-fpointer=nullで初期値をnullにできるのですが
私のソースコードをコンパイルすると、コンパイラの内部エラーと言われます。
gfortranでは上記に対応するコンパイルオプションはないでしょうか
235デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN internal compilation error って要するにコンパイラーのバグなんじゃ…
236デフォルトの名無しさん
2013/08/28(水) NY:AN:NY.AN 初心者というか入り口にすら立ってないため質問させていただきます。
MUMPSっていうライブラリをMinGW環境で使いたいため
g95ってコンパイラをダウンロードしようとしているのですが
公式ページでもファイルが見つかりません。となって困ってます
みなさん、g95はどこから入手されているのでしょうか?
それともg95-MingW.exeが消されたのには何か理由があるのでしょうか?
MUMPSっていうライブラリをMinGW環境で使いたいため
g95ってコンパイラをダウンロードしようとしているのですが
公式ページでもファイルが見つかりません。となって困ってます
みなさん、g95はどこから入手されているのでしょうか?
それともg95-MingW.exeが消されたのには何か理由があるのでしょうか?
237デフォルトの名無しさん
2013/08/29(木) NY:AN:NY.AN g95は最近メンテされてないから、gFortranでいけ。
たぶん大丈夫。
たぶん大丈夫。
238デフォルトの名無しさん
2013/09/10(火) 14:58:43.49 do 1100 III=1,400
*
if(QQP(III).eq.0.) go to 1100
NP=ifix(QPP*QQP(III))
*
do 1000 I=1,NP
*
E0=float(III)*50.-25. !
* Incident point 4mmφ
60 do IJK=1,2
IY(KR)=mod(IY(KR)+IY(JR),mmd)
X(IJK)=float(IY(KR)+1)/dmd
JR=JR-1
if(JR.eq.0) JR=55
KR=KR-1
if(KR.eq.0) KR=55
end do
*
if(QQP(III).eq.0.) go to 1100
NP=ifix(QPP*QQP(III))
*
do 1000 I=1,NP
*
E0=float(III)*50.-25. !
* Incident point 4mmφ
60 do IJK=1,2
IY(KR)=mod(IY(KR)+IY(JR),mmd)
X(IJK)=float(IY(KR)+1)/dmd
JR=JR-1
if(JR.eq.0) JR=55
KR=KR-1
if(KR.eq.0) KR=55
end do
239デフォルトの名無しさん
2013/09/10(火) 15:00:46.05 CX00=(1.-X(1))*0.4
CY00=(1.-X(2))*0.4
*
CX0=25.+CX00 !
CY0=25.+CY00 !
CZ0=0. !
*
CA2=1.
SA2=0.
CB2=1.
SB2=0.
*
JJJ=1
JJJJ=0
*
* --------------------------------------------------------------
*
70 JJJJJ=0
*
if(E0.lt.10.) go to 880
*
XE0=log(E0)
ka=2
72 if(E0.lt.ATTEN(5,ka)) then
XAT11=log(ATTEN(1,ka))
CY00=(1.-X(2))*0.4
*
CX0=25.+CX00 !
CY0=25.+CY00 !
CZ0=0. !
*
CA2=1.
SA2=0.
CB2=1.
SB2=0.
*
JJJ=1
JJJJ=0
*
* --------------------------------------------------------------
*
70 JJJJJ=0
*
if(E0.lt.10.) go to 880
*
XE0=log(E0)
ka=2
72 if(E0.lt.ATTEN(5,ka)) then
XAT11=log(ATTEN(1,ka))
240デフォルトの名無しさん
2013/09/20(金) 09:08:24.47 なんだどうした?
241デフォルトの名無しさん
2013/09/26(木) 12:57:51.56 pointer(pvar,var(*))
これってどういう意図ですか?
これってどういう意図ですか?
242デフォルトの名無しさん
2013/09/26(木) 13:30:22.80 メモリポインタ
243デフォルトの名無しさん
2013/09/26(木) 22:50:44.43 それはクレイ・ポインタと呼ばれるもので、クレイのFortranにあった非標準命令。
だがクレイが普及していたアメリカでは準標準みたいになったので、いまでも結構多くのFortranで使える。
まぁFortran2003の命令で、(工夫すれば)置き換え可能なので、もうあまり使われない。
POINTER (pointer, pointee)
ポインタ(整数変数)にはポイントされるもの(pointee)の番地が入るようになる。
だがクレイが普及していたアメリカでは準標準みたいになったので、いまでも結構多くのFortranで使える。
まぁFortran2003の命令で、(工夫すれば)置き換え可能なので、もうあまり使われない。
POINTER (pointer, pointee)
ポインタ(整数変数)にはポイントされるもの(pointee)の番地が入るようになる。
244デフォルトの名無しさん
2013/10/01(火) 12:17:05.23245デフォルトの名無しさん
2013/10/02(水) 00:38:14.04 >>244
両方非標準。
FORTRAN77以前では動的にメモリーを確保するための拡張命令があったり、
あるいはCのルーチンをリンクしていた。
Fotran90以降ではallocate命令が入った。
そのプログラムが書かれた対象マシンが分かるなら、ググればそれ用のFORTRAN77のリファレンス・マニュアルが落ちていると思う。
両方非標準。
FORTRAN77以前では動的にメモリーを確保するための拡張命令があったり、
あるいはCのルーチンをリンクしていた。
Fotran90以降ではallocate命令が入った。
そのプログラムが書かれた対象マシンが分かるなら、ググればそれ用のFORTRAN77のリファレンス・マニュアルが落ちていると思う。
246デフォルトの名無しさん
2013/10/08(火) 10:10:31.65247デフォルトの名無しさん
2013/10/13(日) 00:13:41.19 77で書いてあるプログラムが今のコンパイラで動くようにデバックしているのですが
common文で宣言している変数をmoduleでグローバル変数に変えたら、equivalence文でエラーが出てしまいます。
そこでこのequivalence文のところを変えようと思うのですが、90/95ので代わりとなる構文ってありますか?
common文で宣言している変数をmoduleでグローバル変数に変えたら、equivalence文でエラーが出てしまいます。
そこでこのequivalence文のところを変えようと思うのですが、90/95ので代わりとなる構文ってありますか?
248デフォルトの名無しさん
2013/10/13(日) 01:48:53.15 >>247
直接の代替はない。
Fortran90/95で推奨されているEQUIVALENCEの代替は、TRANSFER関数でメモリー内容を別メモリーに
移せというもの。EQUIVALENCEのメモリー共有とは違い、二つの変数間の型変換を伴わない内容の代入にあたる。
古い時代にCOMMONやEQUIVALENCEがあったのはメモリーが少なくて、同じ領域を使いまわしたかったから。
COMMONやEQUIVALENCEによるメモリー共用が、コンパイラの最適化を妨げるから廃止に向かった。
COMMONを単なるグローバル変数とみなすと、移植で非常にめんどくさいことになることがままある。
なおFORTRAN77はFortran90に完全に含まれているので、今のコンパイラでも多少のオプション変更で書き直さなくても動くはず。
直接の代替はない。
Fortran90/95で推奨されているEQUIVALENCEの代替は、TRANSFER関数でメモリー内容を別メモリーに
移せというもの。EQUIVALENCEのメモリー共有とは違い、二つの変数間の型変換を伴わない内容の代入にあたる。
古い時代にCOMMONやEQUIVALENCEがあったのはメモリーが少なくて、同じ領域を使いまわしたかったから。
COMMONやEQUIVALENCEによるメモリー共用が、コンパイラの最適化を妨げるから廃止に向かった。
COMMONを単なるグローバル変数とみなすと、移植で非常にめんどくさいことになることがままある。
なおFORTRAN77はFortran90に完全に含まれているので、今のコンパイラでも多少のオプション変更で書き直さなくても動くはず。
249デフォルトの名無しさん
2013/10/13(日) 13:51:31.72250デフォルトの名無しさん
2013/10/15(火) 22:40:32.54 初期値も何も与えてない変数の値って0ですよね?
それが0ではなくとてつもなくおおきな値になることってありますか?
それが0ではなくとてつもなくおおきな値になることってありますか?
251デフォルトの名無しさん
2013/10/15(火) 22:51:06.34 いいえ
はい
はい
252デフォルトの名無しさん
2013/10/15(火) 23:17:41.03 >>251
まじっすか
まじっすか
253デフォルトの名無しさん
2013/10/16(水) 01:37:15.62 変数がゼロになってるなんて思ってたのかよw
コップや皿を洗わないで飲み食いするタイプか?
コップや皿を洗わないで飲み食いするタイプか?
254デフォルトの名無しさん
2013/10/16(水) 01:42:01.37 規格上は不定らしいよ。
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14106144349
ttp://ruby.gfd-dennou.org/products/ruby-dcl/ruby-dcl-doc/math1/node9.html
超初心者用スレなのに、みんな厳しいね…
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14106144349
ttp://ruby.gfd-dennou.org/products/ruby-dcl/ruby-dcl-doc/math1/node9.html
超初心者用スレなのに、みんな厳しいね…
255デフォルトの名無しさん
2013/10/16(水) 02:01:47.72 初心者スレだったか、めんごめんご、すまんこ、おまんこ。
昔の日本の大型計算機のFORTRANは0クリアしていることが多かった。
IBMはごみだらけの状態でよこしてた。
今もリンカのオプションでゼロクリアできるものが多い。
昔の日本の大型計算機のFORTRANは0クリアしていることが多かった。
IBMはごみだらけの状態でよこしてた。
今もリンカのオプションでゼロクリアできるものが多い。
256デフォルトの名無しさん
2013/10/16(水) 23:48:35.58 なるほろ〜不定なんですね。
いや実は昔のプログラムを今のコンパイラで動かしているところなんですが
通常なら0であるぺき変数が変な値になってしまいうまく動かなかったんです。
オプションで0クリアにしたらうごくかもしれません。ありがとうございました。
いや実は昔のプログラムを今のコンパイラで動かしているところなんですが
通常なら0であるぺき変数が変な値になってしまいうまく動かなかったんです。
オプションで0クリアにしたらうごくかもしれません。ありがとうございました。
257デフォルトの名無しさん
2013/11/07(木) 23:56:00.54 ほ
258デフォルトの名無しさん
2013/11/08(金) 11:47:40.89 デバッグしているのですが
THDFEというサブルーチンで仮引数(x)を動的割付け配列で宣言し直したところ
”THDFEにおいて存在しないもしくは誤った引数仕様ブロックです。ー仮引数x(第三番目)は割付け配列です。”
とエラーが出たんですが。意味がわかりません。詳しく教えて下さいm(__)m
THDFEというサブルーチンで仮引数(x)を動的割付け配列で宣言し直したところ
”THDFEにおいて存在しないもしくは誤った引数仕様ブロックです。ー仮引数x(第三番目)は割付け配列です。”
とエラーが出たんですが。意味がわかりません。詳しく教えて下さいm(__)m
259デフォルトの名無しさん
2013/11/09(土) 00:08:06.89 この質問じゃ情報少なすぎ。
せめてエラーメッセージそのものを貼るべき。
まぁ呼び出し側の配列が、割り付け属性を持っていないという程度の誤りだろう。
せめてエラーメッセージそのものを貼るべき。
まぁ呼び出し側の配列が、割り付け属性を持っていないという程度の誤りだろう。
260デフォルトの名無しさん
2013/11/09(土) 10:26:20.66 >>259
”THDFEにおいて存在しないもしくは誤った引数仕様ブロックです。ー仮引数x(第三番目)は割付け配列です。”
一応これがエラーメッセージそのものなんです。
>>まぁ呼び出し側の配列が、割り付け属性を持っていないという程度の誤りだろう。
THDFEは外部副プログラムなんですが。このブロックでの仮引数は割付属性を持たないってことでいいんでしょうか?
”THDFEにおいて存在しないもしくは誤った引数仕様ブロックです。ー仮引数x(第三番目)は割付け配列です。”
一応これがエラーメッセージそのものなんです。
>>まぁ呼び出し側の配列が、割り付け属性を持っていないという程度の誤りだろう。
THDFEは外部副プログラムなんですが。このブロックでの仮引数は割付属性を持たないってことでいいんでしょうか?
261デフォルトの名無しさん
2013/11/09(土) 13:01:13.70 それはエラーメッセージそのものじゃないだろ。
エラー番号とか全部込々で貼れよ。
質問の仕方が悪いといつまでも答えが出ないぞ。
大体、サブルーチン側で文句を言われているのか、呼び出し側で文句を言われているのか
それすら判然としないだろ。
エラー番号とか全部込々で貼れよ。
質問の仕方が悪いといつまでも答えが出ないぞ。
大体、サブルーチン側で文句を言われているのか、呼び出し側で文句を言われているのか
それすら判然としないだろ。
262デフォルトの名無しさん
2013/11/09(土) 16:41:00.84 >>261
すみません・・・
これがエラーメッセージです。
実行時エラー: ../sorcefile(先生)/HTHDFE.f90(1): THDFEにおいて存在しないもしくは誤った引用仕様ブロックです - 仮引数X(第3番目)は割付け配列です
致命的なエラーでプログラムが終了しました
サブルーチン(THDFE)側のほうでエラーメッセージがでます。
すみません・・・
これがエラーメッセージです。
実行時エラー: ../sorcefile(先生)/HTHDFE.f90(1): THDFEにおいて存在しないもしくは誤った引用仕様ブロックです - 仮引数X(第3番目)は割付け配列です
致命的なエラーでプログラムが終了しました
サブルーチン(THDFE)側のほうでエラーメッセージがでます。
263デフォルトの名無しさん
2013/11/09(土) 19:18:40.37 >>262
interface文を書いてないとか?
それと仮引数に割り付け配列を指定できるのはFortran2003以降のはず。
Fortran95の拡張仕様TR15581をコンパイラがサポートしていれば問題ないけど。
interface文を書いてないとか?
それと仮引数に割り付け配列を指定できるのはFortran2003以降のはず。
Fortran95の拡張仕様TR15581をコンパイラがサポートしていれば問題ないけど。
264デフォルトの名無しさん
2013/11/09(土) 19:54:41.21265デフォルトの名無しさん
2013/11/09(土) 20:33:20.29 integerfaceじゃなくてinterfaceなw
266デフォルトの名無しさん
2013/11/09(土) 21:14:09.73 >>264
手元にあるFortran2003の言語仕様(draft)の257頁から抜粋すると
"A procedure shall have an explicit interface if it is referenced and
The procedure has a dummy argument that has the ALLOCATABLE attribute"
となっている。"explicit interface"が必須だからinterface文を書けばいいと思う。
それと、紛らわしいのでFortran2003ならファイルの拡張子も変えたら?
手元にあるFortran2003の言語仕様(draft)の257頁から抜粋すると
"A procedure shall have an explicit interface if it is referenced and
The procedure has a dummy argument that has the ALLOCATABLE attribute"
となっている。"explicit interface"が必須だからinterface文を書けばいいと思う。
それと、紛らわしいのでFortran2003ならファイルの拡張子も変えたら?
267デフォルトの名無しさん
2013/11/10(日) 00:04:40.45268デフォルトの名無しさん
2013/11/10(日) 00:04:41.77 interface 書くより、サブルーチンをmoduleに入れたほうが楽でいいぞ。
269デフォルトの名無しさん
2013/11/10(日) 00:13:46.52 スレ違いかもしれないけど、とあるf77プログラムのクローンを作りたいのだけど、
どこまでやれば別のプログラムと認められるんだろう?
入出力仕様や数式まで立ち帰って、スクラッチから書けば完璧なんだろうけど、
作業量的に厳しいというのが本音。
固定形式から自由形式に書き換えた程度じゃダメかな。
参考になるようなサイトとか有れば教えてください。
どこまでやれば別のプログラムと認められるんだろう?
入出力仕様や数式まで立ち帰って、スクラッチから書けば完璧なんだろうけど、
作業量的に厳しいというのが本音。
固定形式から自由形式に書き換えた程度じゃダメかな。
参考になるようなサイトとか有れば教えてください。
270デフォルトの名無しさん
2013/11/10(日) 00:23:01.23 引用とか数行とかの範疇を超えて、見ながら書いたのなら原型を留めてなくても派生物じゃね?
極端な話他言語に移植しても、ロジックが同じなら派生物
極端な話他言語に移植しても、ロジックが同じなら派生物
271デフォルトの名無しさん
2013/11/10(日) 00:28:13.72 横からすまんが、Intel Fortranではソース・ファイルの拡張子は、
固定形式が.fないし.forで、自由形式は.f90になっていて、
.f95とか.f03とかは、存在が間違っているとされているんだが、
ホントのとこはどうなの?
固定形式が.fないし.forで、自由形式は.f90になっていて、
.f95とか.f03とかは、存在が間違っているとされているんだが、
ホントのとこはどうなの?
272デフォルトの名無しさん
2013/11/10(日) 00:35:04.17 >>271
Intel Fortran compiler 14.0のリファレンスではそうなっている。
Intel Fortran compiler 14.0のリファレンスではそうなっている。
273デフォルトの名無しさん
2013/11/10(日) 02:11:25.87274デフォルトの名無しさん
2013/11/10(日) 07:18:49.19 >>273
言語仕様では拡張子は規定していないのでコンパイラ依存。
言語仕様では拡張子は規定していないのでコンパイラ依存。
275デフォルトの名無しさん
2013/11/10(日) 19:10:31.00 すみません、equivalence が理解できず、もしご存じの方が
いらっしゃいましたら、アドバイスを頂けないでしょうか。
勉強のために下記のテストコードを書いてみました。
まず、整数型配列 a1 と a2、実数型配列 a3 に適当な値を代入し、
その後 equivalence文によって a1(1) と a(1) のアドレスを一致させ
配列 a に配列 a1 〜 a3 の値をコピーしてみました。
最後に write 文で配列 a と、配列 a1 〜 a3 までの値を
それぞれ出力させて比較したのですが、両者では実数型配列
a3 の値だけ異なっています。
私のつたない理解では、おそらく equivalence で実数型配列
a3 の値を整数型配列 a にコピーしたのが原因なのではないかと
思っているのですが、配列 a3 を用いずに 配列 a から実数型を
出力させるにはどのようにしたらよろしいのでしょうか?
(dble(a(i)) i=201〜300 としても駄目でした。)
お教え頂けますと大変ありがたいです。
どうぞよろしくお願い致します。
いらっしゃいましたら、アドバイスを頂けないでしょうか。
勉強のために下記のテストコードを書いてみました。
まず、整数型配列 a1 と a2、実数型配列 a3 に適当な値を代入し、
その後 equivalence文によって a1(1) と a(1) のアドレスを一致させ
配列 a に配列 a1 〜 a3 の値をコピーしてみました。
最後に write 文で配列 a と、配列 a1 〜 a3 までの値を
それぞれ出力させて比較したのですが、両者では実数型配列
a3 の値だけ異なっています。
私のつたない理解では、おそらく equivalence で実数型配列
a3 の値を整数型配列 a にコピーしたのが原因なのではないかと
思っているのですが、配列 a3 を用いずに 配列 a から実数型を
出力させるにはどのようにしたらよろしいのでしょうか?
(dble(a(i)) i=201〜300 としても駄目でした。)
お教え頂けますと大変ありがたいです。
どうぞよろしくお願い致します。
276275
2013/11/10(日) 19:11:25.56 なお、コードは以下になります。
どうぞよろしくお願い致します。
program test
implicit none
integer(kind = 4), dimension(300) :: a
integer(kind = 4), dimension(100) :: a1, a2
real(kind = 8), dimension(100) :: a3
equivalence ( a1(1), a(1) )
common /array/ a1, a2, a3
integer(kind = 4) :: i
do i = 1, 100
a1(i) = i*1
a2(i) = i*2
a3(i) = i*3.0d0
end do
do i = 1, 300
write(10, *) a(i)
end do
do i = 1, 100
write(11, *) a1(i), a2(i), a3(i)
end do
end
どうぞよろしくお願い致します。
program test
implicit none
integer(kind = 4), dimension(300) :: a
integer(kind = 4), dimension(100) :: a1, a2
real(kind = 8), dimension(100) :: a3
equivalence ( a1(1), a(1) )
common /array/ a1, a2, a3
integer(kind = 4) :: i
do i = 1, 100
a1(i) = i*1
a2(i) = i*2
a3(i) = i*3.0d0
end do
do i = 1, 300
write(10, *) a(i)
end do
do i = 1, 100
write(11, *) a1(i), a2(i), a3(i)
end do
end
277269
2013/11/10(日) 23:00:46.41278デフォルトの名無しさん
2013/11/10(日) 23:29:50.05 >>275
イマイチ何がしたのか分からんが、こうすれば一応望みの結果は得られる。
do i = 1, 300,2
write(10, *) transfer([a(i),a(i+1)], 0.0d0)
end do
これは、x86のようなリトル・エンディアンCPU向けの場合。
PowerPCとかビッグ・エンディアンの場合は、[a(i+1),a(i)]
イマイチ何がしたのか分からんが、こうすれば一応望みの結果は得られる。
do i = 1, 300,2
write(10, *) transfer([a(i),a(i+1)], 0.0d0)
end do
これは、x86のようなリトル・エンディアンCPU向けの場合。
PowerPCとかビッグ・エンディアンの場合は、[a(i+1),a(i)]
279デフォルトの名無しさん
2013/11/10(日) 23:56:18.99 [ ]はFortran2003、F90/95なら(/ /)で。配列構成子(array constructor)
倍精度実数と整数をEquivalenceで同じ番地を共有させているから、
整数2個毎が倍精度実数1個に対応している。
(KINDの数字は必ずしもバイト数に対応すると限らないが、慣習から仮定して)
エンディアンによって、メモリー上の倍精度実数の上位と下位が入れ替わるので
適宜対応する必要がある。
それをF90以降のTRANSFER関数で、メモリー内容を第二引数の型で解釈している。
単精度実数なら他に単にFORMATを実数用にして強行突破する方法も考えられる。
倍精度の時は難しいかな??
倍精度実数と整数をEquivalenceで同じ番地を共有させているから、
整数2個毎が倍精度実数1個に対応している。
(KINDの数字は必ずしもバイト数に対応すると限らないが、慣習から仮定して)
エンディアンによって、メモリー上の倍精度実数の上位と下位が入れ替わるので
適宜対応する必要がある。
それをF90以降のTRANSFER関数で、メモリー内容を第二引数の型で解釈している。
単精度実数なら他に単にFORMATを実数用にして強行突破する方法も考えられる。
倍精度の時は難しいかな??
280デフォルトの名無しさん
2013/11/14(木) 00:03:06.56 Fortran2015に関するまとめサイトとかないかね?
今度は何を付け加えるのさ?
今度は何を付け加えるのさ?
281デフォルトの名無しさん
2013/11/19(火) 00:19:07.21 すんません。
数値計算する際、expとかの値が大きすぎたり、小さすぎたりしてオーバーフローしたり、exp(x)のx が限りなくゼロに近い時とか、欲しい値が得られません。
みんなはどうやって回避してますか?
よくよく考えたらexp1000 とかオーバーフローしますよね。
数値計算する際、expとかの値が大きすぎたり、小さすぎたりしてオーバーフローしたり、exp(x)のx が限りなくゼロに近い時とか、欲しい値が得られません。
みんなはどうやって回避してますか?
よくよく考えたらexp1000 とかオーバーフローしますよね。
282デフォルトの名無しさん
2013/11/19(火) 10:23:13.29 ここの人はフォートランはわからないから他いけ
283デフォルトの名無しさん
2013/11/19(火) 18:58:29.45284デフォルトの名無しさん
2013/11/19(火) 19:01:27.99 書き込んでから気付いたが、もしexp(1000)の値を実際に表示したいのなら
多倍長計算とかしかないな
多倍長計算とかしかないな
285デフォルトの名無しさん
2013/11/19(火) 23:54:23.18286デフォルトの名無しさん
2013/11/21(木) 22:58:26.48 プランク常数とか絡むなら、それを1に規格化して計算するのが常識だろ。
まず少し基礎的な本から読め。
まず少し基礎的な本から読め。
287デフォルトの名無しさん
2013/11/23(土) 22:34:38.75 みんなどんな環境でやってるんだろ
Cygwin+Emacs?
Cygwin+Emacs?
288デフォルトの名無しさん
2013/11/24(日) 13:01:18.20 コマンドプロンプト+メモ帳 まじで
289デフォルトの名無しさん
2013/11/24(日) 17:24:01.41290デフォルトの名無しさん
2013/11/24(日) 17:42:02.66 >>289
言語の本より数値計算(数学)の本のがいいんでないか?
言語の本より数値計算(数学)の本のがいいんでないか?
291デフォルトの名無しさん
2013/11/26(火) 01:02:17.85 >>289
伊理正夫の「数値計算の常識」の中に無次元化の章があったはず。
大した事書いてないが常識として程度は知っておくべき。
大体、無次元化していないと、素人・非常識・DQN・支那チョン・ごみ・カス・クズ扱いされる。
この本の前半は面白いし為になるので買って損はない。
シュレディンガー方程式を解きたいんだったら、原子スペクトルの本なら大抵、原子単位系(atomic unit)への変換の章が
頭の方にある(エネルギーをハートリー、長さをボーア半径にする)。この辺は少し詳しい量子力学の本にもある。
まぁ今ではエネルギーの単位をハートリーでなくてリードベルグに取ることが多い気もするが。
クーロン項の分子が1になるか2になるかの違いだ。
伊理正夫の「数値計算の常識」の中に無次元化の章があったはず。
大した事書いてないが常識として程度は知っておくべき。
大体、無次元化していないと、素人・非常識・DQN・支那チョン・ごみ・カス・クズ扱いされる。
この本の前半は面白いし為になるので買って損はない。
シュレディンガー方程式を解きたいんだったら、原子スペクトルの本なら大抵、原子単位系(atomic unit)への変換の章が
頭の方にある(エネルギーをハートリー、長さをボーア半径にする)。この辺は少し詳しい量子力学の本にもある。
まぁ今ではエネルギーの単位をハートリーでなくてリードベルグに取ることが多い気もするが。
クーロン項の分子が1になるか2になるかの違いだ。
292デフォルトの名無しさん
2013/11/27(水) 07:09:22.09293デフォルトの名無しさん
2013/12/31(火) 13:22:54.27 データから近似式を出すソフトみたいのないですかね?できればフリーで。
Fitykではなんだかできなかった…
Fitykではなんだかできなかった…
294デフォルトの名無しさん
2014/01/01(水) 00:01:57.16 それはFORTRANスレで聞く内容じゃない
295デフォルトの名無しさん
2014/01/01(水) 02:29:24.68296デフォルトの名無しさん
2014/01/01(水) 12:29:00.04 >>295
何でそう思ったの?
何でそう思ったの?
297デフォルトの名無しさん
2014/01/01(水) 15:03:32.78 294ではないがプログラム板でフリーソフトのFitykを比較対象にするのは板違いでは?
「関数近似のFORTRANライブラリはありませんか?」ならわかるが
質問内容からすると自分でプログラムを作りたいのではなさそうだが
「関数近似のFORTRANライブラリはありませんか?」ならわかるが
質問内容からすると自分でプログラムを作りたいのではなさそうだが
298デフォルトの名無しさん
2014/01/03(金) 08:15:54.32 >>297
すんません、質問者です。
スレ違いなのはわかるんですが、学術的用途に精通してそうな人間が集まる板というかスレ住人が、フォートランスレに1番多いと考えたので質問しました。
今回は目をつむって、近似式出すソフトウェアってなんでしょうか?の質問に答えていただけたら幸いです
すんません、質問者です。
スレ違いなのはわかるんですが、学術的用途に精通してそうな人間が集まる板というかスレ住人が、フォートランスレに1番多いと考えたので質問しました。
今回は目をつむって、近似式出すソフトウェアってなんでしょうか?の質問に答えていただけたら幸いです
299デフォルトの名無しさん
2014/01/03(金) 11:47:30.77 君が欲しいソフトは無いよ
どの関数で近似するかは人間が決めること
ソフトが決めることではない
どの関数で近似するかは人間が決めること
ソフトが決めることではない
300デフォルトの名無しさん
2014/01/03(金) 15:49:36.03 Excelでやれば?あれで十分じゃない。
301デフォルトの名無しさん
2014/01/04(土) 13:39:47.75 gnuplot 使ってやったことありますがどうでしょう?私がやったのは多項式だけですが任意の関数に対してフィッティングできるようです。
302デフォルトの名無しさん
2014/01/04(土) 16:39:19.25 >301
gnuplotでは,splineとbezier補間してグラフを画く
機能がありますが,それ以外に任意の函数のフィッテイング
機能ってありますか?
gnuplotでは,splineとbezier補間してグラフを画く
機能がありますが,それ以外に任意の函数のフィッテイング
機能ってありますか?
303デフォルトの名無しさん
2014/01/04(土) 16:43:44.90304デフォルトの名無しさん
2014/01/10(金) 10:31:33.86 正月早々下層階級出身の発達障害みたいなのが湧いたなw
アスペ野郎は、よそのスレに行けよ、HaskellスレとかMLスレに行けば仲間がいっぱいいるぞ。
ここは毎年この時期は卒業研究で焦りまくった学生さんの駆け込み寺なんだからさ。
アスペ野郎は、よそのスレに行けよ、HaskellスレとかMLスレに行けば仲間がいっぱいいるぞ。
ここは毎年この時期は卒業研究で焦りまくった学生さんの駆け込み寺なんだからさ。
305デフォルトの名無しさん
2014/01/12(日) 15:17:29.69 だなwスレタイくらいは読めよと
306デフォルトの名無しさん
2014/01/14(火) 01:43:43.02 ちょっとお聞きしたいのですが、
読み込むファイルの数値データが"〜〜"のダブルクオーテーションで囲まれているのですが、
これを文字列でなく数値で読み込むことはできないでしょうか?
ファイルの"をすべて消すことも考えたのですが、文字列として読み込みたいところもあるので避けたいです
すいませんがよろしくお願いします。
読み込むファイルの数値データが"〜〜"のダブルクオーテーションで囲まれているのですが、
これを文字列でなく数値で読み込むことはできないでしょうか?
ファイルの"をすべて消すことも考えたのですが、文字列として読み込みたいところもあるので避けたいです
すいませんがよろしくお願いします。
307デフォルトの名無しさん
2014/01/14(火) 06:48:50.39 一度文字列として読み込んで、その文字列から数値として読み込む
例えばこんな感じ(valueが数値の変数、cvalueが文字列の変数)
read(*,*) cvalue
read(cvalue,*) value
例えばこんな感じ(valueが数値の変数、cvalueが文字列の変数)
read(*,*) cvalue
read(cvalue,*) value
308デフォルトの名無しさん
2014/01/14(火) 19:51:34.68309デフォルトの名無しさん
2014/01/18(土) 11:40:25.48 すいませんがご教示ください
integer,dimension(99999,20000000)::aaの配列でifortでコンパイルしようとすると
再配置がオーバーフローしないように切り詰められました
と出ます。配列の数を小さくするとコンパイルできます。
配列が大きいから出ているエラーと思うのですが、なにか対策はないでしょうか。よろしくお願いします。
integer,dimension(99999,20000000)::aaの配列でifortでコンパイルしようとすると
再配置がオーバーフローしないように切り詰められました
と出ます。配列の数を小さくするとコンパイルできます。
配列が大きいから出ているエラーと思うのですが、なにか対策はないでしょうか。よろしくお願いします。
310309
2014/01/18(土) 12:21:08.98 スレを読み直してallocatableを使うことでコンパイルはできました。
すいませんありがとうございました
すいませんありがとうございました
311デフォルトの名無しさん
2014/01/18(土) 13:05:10.95 乙 俺も勉強になった
312デフォルトの名無しさん
2014/01/20(月) 21:57:41.73 すみませんが、ちょっと教えてください。
Intel MKLのpardisoで、LU分解後のLとUを取り出すためにはどうしたらいいのでしょうか?
Intel MKLのpardisoで、LU分解後のLとUを取り出すためにはどうしたらいいのでしょうか?
313デフォルトの名無しさん
2014/01/21(火) 18:52:17.93 すみません。セグメンテーション違反って何ですか?
314デフォルトの名無しさん
2014/01/21(火) 21:15:53.71 OSがゴミってこと
315デフォルトの名無しさん
2014/01/30(木) 21:30:13.25 G95をダウンロードしたいのですが、
Windows版のFTPでは、
530 Login authentication failed
(認証に失敗)
とでるのですが、どこで認証を得られるのでしょうか。
Windows版のFTPでは、
530 Login authentication failed
(認証に失敗)
とでるのですが、どこで認証を得られるのでしょうか。
316デフォルトの名無しさん
2014/01/30(木) 22:40:27.48 httpじゃ何か問題あったの
317デフォルトの名無しさん
2014/01/31(金) 00:41:23.05 >316
httpではウンともスンとも言わないのです。
画面がフリーズしたままなので
httpではウンともスンとも言わないのです。
画面がフリーズしたままなので
318デフォルトの名無しさん
2014/01/31(金) 01:31:57.39 >>317
リンクが生きているのはcygwinとLinux系だけみたいだね
MinGW版がひつようなら
http://www.fortran.com/the-fortran-company-homepage/whats-new/g95-windows-download/
けど、このページでも言っているようにG95はメンテナンスが停止しているみたいだし
素直にgfortranを使った方が良い
リンクが生きているのはcygwinとLinux系だけみたいだね
MinGW版がひつようなら
http://www.fortran.com/the-fortran-company-homepage/whats-new/g95-windows-download/
けど、このページでも言っているようにG95はメンテナンスが停止しているみたいだし
素直にgfortranを使った方が良い
319デフォルトの名無しさん
2014/01/31(金) 08:17:46.37 >318
御教示ありがとうございます。
gfortranをダウンロードして使うことにします。
御教示ありがとうございます。
gfortranをダウンロードして使うことにします。
320デフォルトの名無しさん
2014/02/03(月) 00:35:08.25 上の方に無次元化の話が出ていましたが、これって数値計算の本ならちゃんと説明されているものですか?
ネットで検索してもあまりヒットしないし、あったとしてもやり方だけでそうする理由はあまり説明されていない気がします。
自分は先輩から教えてもらって初めて知りましたが、周りには知らない人が結構多いです。
伝統芸能の世界じゃないけど、「数値計算のテクニックは見て覚えろ」みたいな風潮を感じています。
とりあえず自分も「数値計算の常識」買ってみます。
ネットで検索してもあまりヒットしないし、あったとしてもやり方だけでそうする理由はあまり説明されていない気がします。
自分は先輩から教えてもらって初めて知りましたが、周りには知らない人が結構多いです。
伝統芸能の世界じゃないけど、「数値計算のテクニックは見て覚えろ」みたいな風潮を感じています。
とりあえず自分も「数値計算の常識」買ってみます。
321デフォルトの名無しさん
2014/02/03(月) 01:43:43.76 数値計算にかぎらず、適切なスケールで物理量を無次元化すると表式がすっきりするから、けっこう使われてるよ。
原子の議論をするときはオングストロームを使う、天文の議論をするときは光年を使う、つまり「対象に合わせた物差しを使いましょう」という程度の話だから、詳しく説明するほどのことではないかも。
「数値計算の常識」でも1ページくらいしか触れてなかった気がする。
原子の議論をするときはオングストロームを使う、天文の議論をするときは光年を使う、つまり「対象に合わせた物差しを使いましょう」という程度の話だから、詳しく説明するほどのことではないかも。
「数値計算の常識」でも1ページくらいしか触れてなかった気がする。
322デフォルトの名無しさん
2014/02/03(月) 02:32:24.50 でも、無次元化で数式を簡単にすることと、規格化をして数値誤差を防ぐことは別の話ではないのですか?
自分はこのへんの理解がまだ曖昧です。
数値計算系の研究室なので、無次元することが常識なのはよく知っていますが、
ちゃんと教えてもらったことは一度もないです。
自分で書いたコードをたまたま先輩が見る機会があって、そのときに指摘されて知りました。
他の人はどこでそういう常識を知っていったのかが気になります。
自分はこのへんの理解がまだ曖昧です。
数値計算系の研究室なので、無次元することが常識なのはよく知っていますが、
ちゃんと教えてもらったことは一度もないです。
自分で書いたコードをたまたま先輩が見る機会があって、そのときに指摘されて知りました。
他の人はどこでそういう常識を知っていったのかが気になります。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★5 [BFU★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【悲報】SANA、発言撤回拒否 [769931615]
- 米シンクタンク「アメリカは台湾問題で"あいまい戦略"を取っている。高市早苗はこの方針から逸脱している」 [603416639]
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
- お前ら「サクッとオナニーするか」←何分のイメージ?
- ジャーナリストがテレビで解説「台湾問題は高市総理から言ったのではなく、立憲民主が日本の対応可能能力を暴こうとしたから」 [359572271]
- 俺性格悪いなって思った瞬間あげてけ
