くだすれFORTRAN(超初心者用)その4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/01/24(土) 18:32:01もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。
●注意事項
・質問する前にGoogle等の検索サイトで検索しましょう。
・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。
・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。
●前スレ
くだすれ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 �W
http://pc11.2ch.net/test/read.cgi/tech/1163319215/
0757デフォルトの名無しさん
2009/12/03(木) 14:29:43ベクトル化などの高速化・最適化を妨げるリスクはないと思っていいよね?
それとも、doループをいちいち書いた方がやっぱり速くなったりする?
0758デフォルトの名無しさん
2009/12/03(木) 21:10:12彗星の軌道をプログラミングしたいのですが上手くいきません
どこがおかしいか教えてくださいませんか?
program main
integer i,j
real ms,me,x,y,vx,vy,t,dt,G
ms=1.989*(10**30)
dt=100
G=6.673*(10**(-11))
K=G*ms/R**2
x=0.8826*(10**(11))
y=0.0
R=sqrt(x**2+y**2)
vx=0.0
vy=55000
do i=0,1000
x=x+vx*dt*i
y=y+vy*dt*i
R=sqrt(x**2+y**2)
vx=vx-K*(x/R)*dt*i
vy=vy-K*(y/R)*dt*i
write(6,*) x,y
enddo
end
0759デフォルトの名無しさん
2009/12/03(木) 21:42:09なるほど・・・ご指摘ありがとうございます。
では行列の4乗はどう書けばよいのでしょうか。。
0760デフォルトの名無しさん
2009/12/03(木) 22:15:52そういうサブルーチンを自作すれば良い。幸いなことにFortran90からは再帰も使えるしね!
0761デフォルトの名無しさん
2009/12/03(木) 23:25:57xnext=x+vx*dt*i
ynext=y+vy*dt*i
R=sqrt(xnext**2+ynext**2)
vx=vx-K*(x/R)*dt*i
vy=vy-K*(y/R)*dt*i
write(6,*) x,y
x=xnext
y=ynext
vx,vyはdtずらす前のx,yを使うのがオイラー法の正しいやり方ですよ。
これだけで直るかは自信がありませんが。
0762デフォルトの名無しさん
2009/12/04(金) 00:45:27どなたか本当にお願いします。
Zは3×3の行列で、V、Z、Iの各要素は複素数とするそうです。
確かに複素数を扱うにはCよりはフォートランだとは思うのですが…
[V1] [Z11 Z12 Z13] [I1]
[V2]= [Z21 Z22 Z23] [I2]
[V3] [Z31 Z32 Z33] [I3]
よろしくお願いします。
0763デフォルトの名無しさん
2009/12/04(金) 02:27:53たぶん弊害はない。たぶん、なのは実装によるので。ベクトルがでかくなると、
出来合いのルーチンの方が速いね。そういうチューンしてると期待していいとおもう。
3次元くらいだったら自分でループ書くか、
naiseki=a(1)*b(1)+a(2)*b(2)+a(3)*b(3)
みたく成分を明示したほうがいいことがおおいけど。
0764デフォルトの名無しさん
2009/12/04(金) 02:29:50複素数扱うならFortranのがいいよ。
んで、3x3行列なら (-1)^(i+j) * (小行列の行列式)_{j,i}/(全体の行列式)
を明示した方がいいよ。
0765デフォルトの名無しさん
2009/12/04(金) 11:04:54thx
そのうち自分で試してみようかな
0766デフォルトの名無しさん
2009/12/04(金) 19:50:53もちろん中身を読み込んで新しいファイルに書き込むなら出来ますが、
cat みたいな感覚で使える命令ってあるでしょうか?
0767デフォルトの名無しさん
2009/12/04(金) 23:14:56system() を使って cat で繋げるとか?
Fortranが内部で持っている方法は聞いた事が無いです。
0768デフォルトの名無しさん
2009/12/04(金) 23:47:25G=6.673*(10**(-11))
この辺は
G=6.673E-11
とするべし。
あと77なのか90なのか判然としないが、暗黙の型を破る気ならIMPLICIT NONEを
つけておくほうが吉。
>>766
catだって中では読んで書き出しているだけだろうに
0769デフォルトの名無しさん
2009/12/04(金) 23:54:43> >>766
> catだって中では読んで書き出しているだけだろうに
そういえばバイナリファイルをformattedで開く場合ってケッコウ難儀なことになりそうな気がして来た。
catはその辺はクリアしてるけど(でないとバイナリファイルの結合なんて出来ないよね?)。
自分だったらfortranでやらずにシェルでも書いてそっちで済ます。WindowsならPerlか何かを使うかな?
dosのコマンドで出来たっけ?やりたいことによって道具を使い分けるのが良いと思うけど。
0770デフォルトの名無しさん
2009/12/05(土) 00:05:00catと等価な、つまりバイナリレベルでの結合は無理じゃない?
fortranって、せいぜいレコードを扱うくらいで、バイトレベルでの操作は普通しないし、そもそもできないと思うけど
0771デフォルトの名無しさん
2009/12/05(土) 03:50:13追記するデータを別なファイルから読み込む段階でコケる事多々アリで面倒だよね。
Bit 単位での操作って Fortranで出来ない&やりにくい典型例だ。
0772デフォルトの名無しさん
2009/12/05(土) 05:12:47ファイルはレコードの集合という考え方をするから、
前提のないバイト列は扱いにくい。
0773デフォルトの名無しさん
2009/12/05(土) 05:57:03program main
print *, 'Hello World !'
stop
end
のクイック実行のコンパイル&リンクに12分50秒もかかります。
NAGのコンパイラはこういうものなんでしょうか?
それとも,もっと早くコンパイル&リンクのできる設定が何かあるのでしょうか?
私の環境は,OSはWindows XP,RAMは512MB,
HDDの空き領域は,Cドライブは706MB,Dドライブは1.92GB,
Fortran Builder は Dドライブにインストールしています。
# NAGの統合開発環境は,Intelのと違って,キーワード入力補完機能がありました。
0774デフォルトの名無しさん
2009/12/05(土) 10:00:550775デフォルトの名無しさん
2009/12/05(土) 10:02:09数字を規格化しようね
0776773
2009/12/05(土) 10:51:47NAGのホームページには 「メモリ:256MB以上(推奨 512MB以上)」 と
書いてあったので,大丈夫かなと思ったんですが,
やっぱり足りないですかね。
他に Fortran Builder 5.2 のユーザーさん,いませんか?
RAMはどれくらい積んでますか?
0777デフォルトの名無しさん
2009/12/05(土) 12:17:51キーワード補完だけじゃ、あってもなくてもほとんど変わらんよなぁ・・・
もっとリッチなFortranのIDEが早くでないものか
0778デフォルトの名無しさん
2009/12/05(土) 13:20:00その前に今どき512MBというのがなあ。増設はできないの?
0779773
2009/12/05(土) 13:38:40CPU: Pentium M 1.20GHz
RAM: 1GB
OS: Windows XP Pro. Ver.2002 SP3
これで
program hello
print *, 'Hello World'
stop
end program hello
をやってみたんですが,こちらのPCでもコンパイル&リンクに
12分25秒かかりました‥‥ orz
>>778
う〜ん,6年前のVAIOノートなんで,買い替えしたほうが良いかもしれません。
0780773
2009/12/05(土) 13:52:17RAM 1GB (2GB 推奨) と書いてあるんですが,
CPU: Pentium M 1.20GHz,RAM: 1GB のPCにインストールしても,
Fortran Builder と同じくコンパイル&リンクに10分くらい
時間かかっちゃうでしょうか?
0781デフォルトの名無しさん
2009/12/05(土) 14:01:23大量にスワップが発生しているせいなので、
一定量メモリを増やせば急に早くなるものだが、
512MBでもその有様とはすごいね。
fortran 77でよければ open watcom fortranとかいいんでない?
0782デフォルトの名無しさん
2009/12/05(土) 14:06:13まさかとは思うが、メモリの空きは大丈夫なんだよね?
動画のエンコしながらコンパイルとかはさすがにないだろうけどw
0783デフォルトの名無しさん
2009/12/05(土) 14:15:19IDEが重いのかもしれない。
0784デフォルトの名無しさん
2009/12/05(土) 14:20:090785773
2009/12/05(土) 16:01:16レスありがとうございます。>>783さんのレスを見て調べたら,
コマンドラインからコンパイルする方法が NAGのサイトの
FAQページに載っていました。
今度は数秒でコンパイルできました!
# しかも,できた実行ファイルのサイズが,IDEのときは 266KBだったのに対して,
コマンドラインからのときはわずか 18KBとずいぶん小さくなりました
ちなみに,g95でコンパイルしたときは 339KBでした。
本当にありがとうございました m(_ _)m
0786デフォルトの名無しさん
2009/12/05(土) 16:37:57でもそんな悪い評判は聞いたことないが・・・
0787デフォルトの名無しさん
2009/12/05(土) 17:25:08バイナリファイルも、F2003ならSTREAMファイルとしてあけることで扱える。
F2003以前でもベンダー拡張でSTREAMアクセスできることが多い。
また規格の範囲内でもDIRECTアクセス・ファイルの属性で代替できることがある。
(独自フォーマットのDirectFile形式のベンダーもあるが、垂れ流し的に書いているものも多いので、
実質ストリームとして使える)
ただFortranの規格ではレコード長が処理系依存なので、バイトかワードかが確定できない。
でもコンパイラのオプションで単位をバイトに指定出来ることが多い。
0788デフォルトの名無しさん
2009/12/05(土) 18:24:30それって単にランタイムDLLになっただけじゃ?
IDEの時はスタティックリンクなんでしょ
0789デフォルトの名無しさん
2009/12/05(土) 18:53:35IDE使ったことないんで分からないけど、そういうもんなのかね
でもスタティックリンクにしたら、サイズが増えるのはいいとして
10倍以上の時間がかかるなんて、あり得るの?
0790デフォルトの名無しさん
2009/12/06(日) 02:17:44それに実行ファイル自体が最適化がかかってないかもしれない
環境を聞かないと何とも堪えようがない
0791773
2009/12/06(日) 08:35:45> IDEの時はスタティックリンクなんでしょ
IDEの設定を見たら,おっしゃるとおりで,
「nagforランタイムライブラリの非共有(静的)バージョンを結合」
となっていました。ひとつ勉強になりました(汗)。
>>790
> 環境を聞かないと何とも堪えようがない
環境は……
【1つめのパソコン VAIOノート】
OS: Windows XP Home edition Ver.2002 SP3
RAM: 512MB
HDDの空き領域:Cドライブは 706MB,Dドライブは 1.92GB
Fortran Builder 5.2 は Dドライブにインストール。
【2つめのパソコン let's note ノート】
OS: Windows XP Professional edition Ver.2002 SP3
RAM: 1GB
CPU: Pentium M 1.20GHz
HDDの空き領域: Cドライブは数十GB
Fortran Builder 5.2 は Cドライブにインストール。
……です。
0792デフォルトの名無しさん
2009/12/06(日) 08:39:320793773
2009/12/06(日) 08:42:25Pentium 4 の 2.40GHzです。
0794デフォルトの名無しさん
2009/12/06(日) 19:59:53どなたか教えください。
[123] [13]
[ ]×[23]
[045] [46]
です。
わかりにくいのですが、2行3列と3行2列の乗算です。。
0795デフォルトの名無しさん
2009/12/06(日) 20:01:50[123] [13]
[ ]×[23]
[045] [46]
0796デフォルトの名無しさん
2009/12/07(月) 04:24:21real a(3,2), b(2,3), o(2,2)
a(1,1) = 1.0
|
a(3,2) = 5.0
b(1,1) = 1.0
|
b(2,3) = 6.0
do j = 1, 2
do i = 1, 2
o(i,j) = 0.0
do m = 1, 3
o(i,j) = o(i,j) + a(m,j) * b(i,m)
enddo
enddo
enddo
で o が結果の2x2行列ね。習慣で(i,j)=(列、行)の番地にしてもうたけどいいやね。
そういや行列のサイズ数をいうときの行と列をよく間違えてしまうw
0797デフォルトの名無しさん
2009/12/07(月) 23:28:25x=x+vx*dt*i
y=y+vy*dt*i
R=sqrt(x**2+y**2)
vx=vx-K*(x/R)*dt*i
vy=vy-K*(y/R)*dt*i
上のiがすべていらない。
0798デフォルトの名無しさん
2009/12/07(月) 23:42:02MATMUL 関数を使うんだw
0799デフォルトの名無しさん
2009/12/08(火) 08:40:35同意w
でも知らないうちにコードミスで転置行列にしてしまうことがあるw
0800デフォルトの名無しさん
2009/12/08(火) 08:58:02write(*,*) '800 get'
800 continue
0801デフォルトの名無しさん
2009/12/09(水) 18:00:32ド素人質問失礼します。
コンパイラはG95で、Fファイルで実行します。
OSはVISTAです。
N個の値(整数値0〜100)の中から最大・最小・偏差値を出したくてこうしました。
DO 10 I=1,N
READ(5,*) SC(I)
MA=MAX0(SC(I))
MI=MIN0(SC(I))
10 CONTINUE
するとエラーが
MA=MAX0(SC(I))
1
MI=MIN0(SC(I))
1
に
Intrinsic'max0'at(1)must have at least two arguments
Intrinsic'min0'at(1)must have at least two arguments
と出ます。
配列を組み込み関数の引数に使ってるのが違うのかと思うのですが、配列を使えるようにする方法が何かないかが主に知りたいです。
0802デフォルトの名無しさん
2009/12/09(水) 18:03:53すみません、、、
改行でずれました、、、
MA=MAX0(SC(I))
___1
MI=MIN0(SC(I))
___1
です。
0803デフォルトの名無しさん
2009/12/09(水) 18:10:43MAXと同じなら
MA = MAX( MA, SC( I ) )
MAは要初期値。
配列に全部読み込んでから最大値を求めるなら
MAXVAL( SC )
0804デフォルトの名無しさん
2009/12/09(水) 18:13:48関数が要求する引数の数が少なくとも2個だからじゃない?最も大きい(小さい)ものを返せ、という
関数なんだし。配列の要素は配列じゃないよ(OOPならそれもアリだろうけど)。
その前に折角g95を使っているのなら、F77式の書き方はするべきではない。
http://homepage.mac.com/galois21/fortran/ref.html
0805デフォルトの名無しさん
2009/12/14(月) 01:07:11http://www.salfordsoftware.co.uk/
のどこからダウンロードするのかみつからないんですけど教えてくれますか?
あとフォートランは遺産が多いと聞きましたがうちの研究室は転用が禁止らしいのですが
フォートランの意味はあまりないということでしょうか?
簡単な質問ですがお願いします
0806805
2009/12/14(月) 02:35:45スレ汚し失礼しました
0807デフォルトの名無しさん
2009/12/14(月) 05:06:180808デフォルトの名無しさん
2009/12/14(月) 10:09:27転用禁止は、遺産うんぬんの前に、「理解して勉強しろ」ということだろう。
0809デフォルトの名無しさん
2009/12/14(月) 17:32:4864ビットバージョンのwindowsでの非互換性のためプログラムまたは機能である〜〜を開始または実行できません
ソフトウェア製造元に問い合わせて64ビットWindows互換バージョンが利用可能であるかどうか確認してください
とでました。OSはwindows7です。7に対応していないんでしょうか?
こういった場合どういう解決策がありますか?お願いします。
0810デフォルトの名無しさん
2009/12/14(月) 20:45:06処理を入れた部分以外のところをコンパイルオプションでトラップしたいです。
が、オプションを入れると既に処理を入れた部分の判別条件で引っかかってしまいます。
未処理の部分だけトラップしたいんですが何かいい方法はないでしょうか。
0811デフォルトの名無しさん
2009/12/14(月) 23:06:1564ビットのがあるんでしょうか
0812デフォルトの名無しさん
2009/12/14(月) 23:34:04トラップって何?
具体的にどうしたいのか分からないけど、ソースの或る特定の部分を無視して
コンパイルしたいのであれば、プリプロセッサを使ってみたら?
0813デフォルトの名無しさん
2009/12/14(月) 23:50:42CALL IEEE_SET_HALTING_MODE(云々)
あたりでなんとかならんか?
Fortran2003の機能だが、最近のコンパイラはサポートしているので・・
0814デフォルトの名無しさん
2009/12/16(水) 22:03:20浮動小数点例外でcore吐いて停止していますが
ファイルがバッファに残ったままとまっている為
どこまで進んでから落ちたのか良く判りません
環境変数かなんかでバッファサイズを0若しくは充分小さく出来ないでしょうか?
ソースをゴタゴタと生成している部分がありコンパイルが容易ではなく
出来ればflushを挟んでの再コンパイルを避けたいのです
intelのfortranなら出来るチックな話はぐぐったら出てきましたが......
0815773
2009/12/17(木) 23:42:36program main
print *, 'Hello World !'
stop
end
のクイック実行のコンパイル&リンクに12分50秒もかかった現象について,先週の土曜日に
ここで質問をした者ですが,パソコンにインストールしているウイルス対策テスト
F-Secure Internet Security 2010 のメーカーであるエフセキュアのサポートセンターにも
問い合わせたところ,解決案を幾つか提示されました。
結局それらのうちの1つの『 ディープガードの無効化 』をすることで,
コンパイル&リンクにかかる時間が通常どおり大幅に短縮されて,約10秒で
終わるようになりました。
アドバイスを下さった方々,ありがとうございました。
0816773
2009/12/19(土) 11:37:10昨日,エフセキュアのサポートセンターとメールでやり取りし,
「『 ディープガードの無効化』をするとセキュリティレベルが下がるので,
その代わりに『高度なモニタリング』を無効化する。
それで駄目なら『ファイルを除外スキャン』でスキャン対象から除外したい
ファイル・フォルダを選択する」
という対処方法に変わりました。
これで F-Secure Internet Security 2010 の『 ディープガードの無効化』と
『高度なモニタリング』の両方が有効な環境下での NAG Fortran Builder の
動作の正常化が確保できました。
0817773
2009/12/19(土) 11:43:02(誤)『 ディープガードの無効化』と『高度なモニタリング』の両方が有効な環境下
(正)『 ディープガード』と『高度なモニタリング』の両方が有効な環境下
0818デフォルトの名無しさん
2009/12/19(土) 13:30:00なるほど、そっちか
0819デフォルトの名無しさん
2009/12/19(土) 15:41:50確かに最近のセキュリティソフトは色々とガチガチだからな
0820デフォルトの名無しさん
2009/12/22(火) 16:23:380821デフォルトの名無しさん
2009/12/26(土) 23:08:05fortranのプログラムみてると、ccccccc 〜〜 ccccccc
って感じでcに囲まれてる文字があるんだけど、このcの意味ってなんなんですか?
すいません。教えてください
0822デフォルトの名無しさん
2009/12/27(日) 00:28:151桁目が 'C' かアスタリスク '*' の行はコメント行。
だから 'CCC…' はプログラム上は意味はないけど、
人間が読む時に処理の内容や区切りをわかりやすくするため等によく使われる。
0823デフォルトの名無しさん
2009/12/27(日) 00:32:45ありがとうございます。
コメントは「!」とどこかでみたので、cは違うのかと思ってました。
本当にありがとうございました
0824デフォルトの名無しさん
2009/12/27(日) 04:29:33! で始まる部分をコメントとするのは,Fortran 90 以降の自由形式で書かれるソースコード。
この場合は ! は必ずしも1桁目でなくても良い。
2桁目以降でも良いし,実行分の後ろに付けるのでも構わない。
一方,1桁目が C か * で始まるのをコメント行とするのは,FORTRAN 77 の固定形式ソースコード。
0825デフォルトの名無しさん
2009/12/27(日) 09:11:20× 実行分
○ 実行文
0826デフォルトの名無しさん
2009/12/27(日) 22:37:19丁寧にありがとうございます。
すごい勉強になりました!
今日、入門用の本を買ってきたので、頑張って勉強したいとおもいます。
0827デフォルトの名無しさん
2010/01/09(土) 08:29:13ここにならご存知の方が誰かいるかもしれないと思ったので,
質問させていただきます。
Fortran の後継言語として Sun が開発中だった Fortress は
今はどうなってるんでしょうか? お蔵入りなのでしょうか?
0828デフォルトの名無しさん
2010/01/09(土) 09:14:52ttp://projectfortress.sun.com/Projects/Community/
0829デフォルトの名無しさん
2010/01/09(土) 14:04:39ありがとうございました。
0830デフォルトの名無しさん
2010/01/09(土) 17:33:310831デフォルトの名無しさん
2010/01/09(土) 20:11:52存在しなければ別の処理をする、という分岐を作りたいのですが
どうすればよいでしょうか?ファイルの有無で0か1を返すような
関数があれば手っ取り早いんですが、見つかりませんでした。
0832デフォルトの名無しさん
2010/01/09(土) 21:03:52stat() を使ってゴニョゴニョとできんじゃろうか?
0833デフォルトの名無しさん
2010/01/09(土) 21:22:060834デフォルトの名無しさん
2010/01/09(土) 23:28:240835デフォルトの名無しさん
2010/01/10(日) 18:43:43最後のinquire使うのが王道かのぅ。
logical lhoge
character*100 fname
do i = 1, 100
write(fname,'(i5.5,''.dat'')') i
inquire(file=fname,exist=lhoge)
if (lhoge) then
read.....
else
nanka....
endif
enddo
とか、いろいろ。
ERR子はたしか返す値がシステムごとに違った記憶があるから怖い。
・・・気のせいな気もするけどね。
0836デフォルトの名無しさん
2010/01/12(火) 17:11:51* ifort.f90 でコンパイルしていたのですが,
サブルーチンを別ディレクトリにし,コンパイルするにはどうしたらよいのでしょうか。
たとえばサブルーチンをSubというディレクトリに置き、
mainファイルをMainというディレクトリに置いて実行ファイルを作るにはどうしたらよいのでしょうか。
0837デフォルトの名無しさん
2010/01/12(火) 20:17:18ifort90 main.F90 Sub/sub1.F90 Sub/sub2.F90 ...
でいいんじゃね?あと Makefile 書いちゃうとかかな。
何をムズカシイと思っているのかがよく分からない。
0838デフォルトの名無しさん
2010/01/13(水) 15:03:32そうしたいのですが,mainファイルをコンパイルしようとするとサブルーチンが定義されていないと言われ,
サブルーチンをコンパイルしようとするとmainファイルがないとエラーがでるんです
0839デフォルトの名無しさん
2010/01/13(水) 15:47:14ifort90ってどこのコンパイラ?
-c付けて.oファイルがどこにできるか確認してみたら?
intel fortranだが普通にカレントディレクトリに全部の.oが出てくるけど
0840デフォルトの名無しさん
2010/01/13(水) 17:41:050841デフォルトの名無しさん
2010/01/13(水) 22:27:24> ifort90ってどこのコンパイラ?
ifort のことだろうけど、OS は何なんだろうな。どうにも挙動が変態だ。
Windows だと変な動きするとかあるんだろうか?
0842デフォルトの名無しさん
2010/01/14(木) 02:46:42それが他のと干渉して・・という事があった気がするけど、そのifort90 もそれの類の匂いがするが、
いかがか?
0843デフォルトの名無しさん
2010/01/14(木) 17:02:34ifort90はifortの打ち間違えです、申し訳ない
0844デフォルトの名無しさん
2010/01/15(金) 13:52:510845デフォルトの名無しさん
2010/01/15(金) 18:18:14じゃあ command not found って出てたはずだよな・・・
まぁ、頑張ってくれや
0846デフォルトの名無しさん
2010/01/16(土) 18:52:40インテル Visual Fortranコンパイラ9.1を使用したいのですが、インストール後
サンプルプログラム(int_sin.f90)をコンパイルしようとしたのですが、下記のエラーがでてしまい、うまくできません。
エラー内容:
ifort: error: unable to run '<Microsoft VC++ Dir>\\Bin'
Microsoft Visual C++ 2008 Express Editionはインストール済みです。
OSはVista Home premium32bitです。
どなたか助けてくださいorz
0847デフォルトの名無しさん
2010/01/17(日) 01:04:43大変遅くなりましたがありがとうございました。
inquire文で行けそうです。
もう一つ質問ですが、動的配列を宣言するときにある次元だけ固定って
できますか?まあ別にそうする必要は無いといえばないんですが、
宣言部を見ただけでどこが動的である必然性があるのか分かった方が
自分としてはスッキリするので。ちなみに
DOUBLE PRECISION,allocatable::a(10,:,:)
…
allocate (CS(10,10,10))
とやったら金比羅にしかられました。
よろしくおねがいします。
0848デフォルトの名無しさん
2010/01/17(日) 04:18:14> DOUBLE PRECISION,allocatable::a(10,:,:)
> …
> allocate (CS(10,10,10))
>
> とやったら金比羅にしかられました。
CS ってどこで宣言してんだ?
どう呵られたのかはしらんけども、こっちでも呵られた。
ということで無難に
DOUBLE PRECISION,allocatable::a(:,:,:)
としておけば良いと思う。それで問題になることは無いだろうから。
0849デフォルトの名無しさん
2010/01/17(日) 04:52:48すいません、CSじゃなくてaですね。中途半端にコピペしてしまった…
やっぱそうするべきみたいですね。コメントでもつけてそうしておきます。
ありがとうございました。
0850デフォルトの名無しさん
2010/01/17(日) 17:46:26中国系の上司の名前かとw
0851デフォルトの名無しさん
2010/01/18(月) 17:38:45算術関数 cos 及び derf に関する実験をしているのですが、
cosはreal(8) derf のような宣言が必要ないのはなぜでしょうか。
derfに関しては宣言をしないと、コンパイラ(pgf95 ,7.2-4)に文句を言われます。
program main
implicit none
real(8) derf
real(8) x
x = dble(0.7)
print*,derf(x)
print*,cos(x)
end
よろしくお願いいたします。
0852デフォルトの名無しさん
2010/01/18(月) 22:53:26COSはFORTRANの規格で規定されているINTRINSICな関数で、COSは総称名になっている。
引数の型で関数の値の型も決まる。
ただ、66時代の互換性などから、個別の型をあらわに指定するDCOSなどもある。
しかし77時代以降は総称名を使うのが推奨されていたはず。
さて、ERFの方だがこれはFORTRANの規格にはないベンダーの提供する独自関数である。
したがってその実装や用法はベンダーに依存する。
たとえばINTEL FORTRANの場合は、REAL(8)の宣言無しにDERFが使える。
PGIでは、外部関数扱いで、関数の型を宣言しておく必要があるのだろう。
なお、ERFというのはUNIX系の多くのFORTRANで使えた関数で、半ば標準化している。
Fortran2008ではそれらのエラー関数、ベッセル関数などが正規の規格に入ることになっている。
0854デフォルトの名無しさん
2010/01/19(火) 13:55:21>しかし77時代以降は総称名を使うのが推奨されていたはず。
マジ?
律儀にD*使ってた・・・
0855デフォルトの名無しさん
2010/01/19(火) 14:00:42普通にd* で明示してもいいと思うけどな。
単精度に揃えたい!とかはコンパイルオプションで出来るし。
0856デフォルトの名無しさん
2010/01/19(火) 21:03:41■ このスレッドは過去ログ倉庫に格納されています