1 名前:デフォルトの名無しさん [2006/11/22(水) 00:00:36 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 FORTRAN使いが優しくコメントを返しますが、 お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。 ●注意事項 ・質問する前にGoogle等の検索サイトで検索しましょう。 ・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。 ・エラーの場合は起きた状況、環境(OS・コンパイラ)、エラーメッセージも詳しく書きましょう。 ●前スレ くだすれFORTRAN(超初心者用) pc8.2ch.net/test/read.cgi/tech/1138063703/ ●関連スレ FORTRAN W pc8.2ch.net/test/read.cgi/tech/1163319215/
684 名前:677 [2007/06/30(土) 00:30:41 ] 結局.datファイルで入力することにしました… 出力の方は24×4のはずが96×1で出てしまいますが手作業で直しました。 月曜にまた学校でいろいろ試してみますね。
685 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 14:21:05 ] >>684 >出力の方は24×4のはずが96×1で出てしまいますが つ 改行コード Windows側で LFのみの改行に対応したエディタか変換ツールを使うヨロシ。
686 名前:デフォルトの名無しさん [2007/06/30(土) 16:58:07 ] >>685 ftpソフトでwin-unix lf-cr+lf対応を使った方が早いと思う。
687 名前:デフォルトの名無しさん [2007/07/01(日) 22:28:27 ] フォートラン初心者です. BLASを使っていろいろ計算しようとしたんですが,内積で何故か良く分からない数値がでます. PARAMETER ( N = 4) REAL*8 e(N)/N*1.0/ inc = 1 WRITE(6,*) DDOT(N,e,inc,e,inc) END 実行結果が 2.25000000 1,1,1,1と1,1,1,1の内積だから4になってほしいんですが・・・ C言語なら少しは分かります. だれかぼすけて
688 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 01:09:45 ] >>687 適当なので気休めまでに。 REAL*8 e(N)/N*1.0/ これを REAL*8 e(N)/N*1.0d0/ にしてみそ。 コンパイラによっては、単精度4バイト4つ分を頭から詰めているのかもしれない。 別に考えられるのは、関数を直接WRITE文で書き出しているが、一旦変数に入れるのもよろし。 Cと違ってValueでは返さないので、関数をサブルーチンの引数にしたりすると コンパイラによって受け付けたり、受け付けなかったり、暴走したりすることがある。 ただ、Write文だから大丈夫だと思うが。あとf90になってからは、おkのことが多い気が駿河。
689 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 01:55:33 ] >>687 Intel Fortran Ver.10.026 + MKL 9,1 では、ちゃんと4が出たwww おぬしのコンパイラ環境等は何ぞや。
690 名前:687 [2007/07/02(月) 06:56:16 ] >>688 >REAL*8 e(N)/N*1.0d0/ 変化無しOrz 初期化は上手く行ってるみたいです. それといったん変数に入れても同じ. ここでさらに気になるのは,DDOTの戻りが単精度っぽいところ・・・ >>689 よくわからないんですが適当にHPを漁ってみると 本体:FUJITSU PRIMEPOWER HPC2500 OS:Solaris 8 コンパイラFortran JIS X3001-1:1998 (Fortran95) マニュアルとかのリンクが富士通なので,コンパイラも富士通だと思います コンパイル時は, %frt test.f90 -SSL2 -O0 でやってます スパコンでベクトルの内積一本とか,なにやってんだ俺\(^o^)/
691 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 11:29:11 ] >>690 %frt -SSL2 -O0 test.f90 こうとかwwwww >ここでさらに気になるのは,DDOTの戻りが単精度っぽいところ・・・ これが気になるな。症状的にはサブルーチンの単精度倍精度の割り当て違いっぽいので。 DDOTにもDOUBLE指定が必要な仕様かw IMPLICIT REAL*8 (a-h,o-z) もつけてみるかw
692 名前:デフォルトの名無しさん [2007/07/02(月) 14:26:52 ] pgf90のコンパイルで困っています。 makeを実行すると PGF90-W-0119-Redundant specification for name_size (Size_Class.f90: 101) のようなエラーがでてきます。 これはコンパイルオプションでなんとかできるものなのでしょうか? 教えてください。
693 名前:デフォルトの名無しさん [2007/07/02(月) 16:34:13 ] >IMPLICIT REAL*8 (a-h,o-z) かもね。 ただ、最適化するな。それで答えはどうなる? 最適化の問題か
694 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:12:58 ] >>693 オプション -O0 使ってるから、最適化はして無いだろう。 多分DDOTもdble宣言しておかないと駄目なんだろ。EXTERNALと合わせて。 前にも似たような症状がスレに出ていた希ガス。 この辺は、NEC<<<Fujitsu<Hitachi の順でコンパイラのケツの穴が狭いという 昔の言い伝えにあるように、Fujitsuはコンパイラが宣言にうるさいんだろ。 NECはゆるすぎて、ホモの尻穴のごとく何でもホイホイ容れてしまうのだがwww ところで、おまいら 京速コンピュータがNEC、日立、富士通の三社合同になったことをどう思う? 完全に破滅コースに入ったと思うんだがwwwwwwww
695 名前:デフォルトの名無しさん [2007/07/03(火) 00:16:01 ] >>694 最適化しないというオプションは効いてない場合もある。-Oは書かない。 京速?北海、九州コンピュータに頑張ってもらおう。
696 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:44:22 ] >>695 >北海、九州コンピュータに頑張ってもらおう。 意味分からん。解説よろ。
697 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 04:54:07 ] linpackのMPI版はありませんか?
698 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:07:37 ] >>697 あるべ。
699 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 02:02:05 ] 最近WINDOWS版g95をインストールし問題なく動いていたのですが、 突然エラーが出るようになってしまいました。 g95: installation problem, cannot exec 'as': No such file or directry とでて、コンパイルができなくなっている状態です。 pathは通っていますし、インストールもうまくいったはずなのですが・・・ なにより最近まできちんど動いていたので、全く原因がつかめません。
700 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 12:03:12 ] >>699 動いていたときと動かなくなった間に、何をしたのかを書かなければ誰にも分からん。 何もしていないというのは無し。 XPだったら復帰ポイントで戻れw
701 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 16:24:12 ] 自宅でfortran77を使うために、CPad for FTN77をダウンロードしたんですが コンパイルして実行すると コンパイルに失敗しました。 ファイル"〜〜test.exe”は存在しません。 と言われるのですがどうすれば解決できますか?
702 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:25:56 ] >>701 バグ取りすれば解決できます。
703 名前:701 mailto:sage [2007/07/06(金) 21:35:33 ] >>702 度々すみません 具体的にどういうことをすればいいんでしょうか?
704 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:38:10 ] >>703 自分の入力したプログラムをじっくり眺めて間違ってるところを直せばいいだけだよ。
705 名前:701 mailto:sage [2007/07/06(金) 23:49:35 ] >>704 学校ではコンパイルも実行もできたやつなんですが… といっても間違いがないとは限らないということでしょうか 簡単なもので試したんですが write(*,*)'test' end でもできませんでした。 下のメッセージに ■C:\〜〜〜〜〜〜〜〜〜\data> ftn77 /link test.f Cannot open authorisation file c:\〜〜〜\ftn77.ser: (文字化けしてる) System error (3): 指定されたパスが見つかりません。 と出てました。 ftn77.exeにつなげてるんですが…。
706 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 00:03:08 ] >>705 FTN77は日本語の入っていないパスにインストールしろ。
707 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 03:10:21 ] >>701 同じ質問がこのスレだけですでに2,3回出ているw >>65 あたりみろ
708 名前:701 mailto:sage [2007/07/07(土) 12:56:23 ] できましたー! 一番の原因は>>706 さんが言ってることでした 答えてくれた方々、本当にありがとうございました
709 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 13:45:18 ] 今度質問することがあったら、最初からエラーメッセージをコピペしような。
710 名前:デフォルトの名無しさん [2007/07/08(日) 13:09:06 ] 粘IN/1-T の式をTを0から3まで0.5刻みでとって さらにN=1、2、3、4、5について別々に求めたいのですが、わかりませんどなたかよろしくお願いします
711 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 13:16:07 ] すいません↑の式は 粘IN30/1-T-n 狽ヘn=1からNまでです
712 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 21:33:21 ] DO 10 T=0,3,0.5 S=0 WRITE(*,100) T DO 10 N=1,5 S=S+SIN(30*3.14159/180)/1-T-N 10 WRITE(*,101) N, S STOP 100 FORMAT(1H , 'T=', F6.2) 101 FORMAT(1H ,'N=',I2,F12.3) END
713 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 01:34:10 ] 神です!ありがとう
714 名前:デフォルトの名無しさん [2007/07/09(月) 08:16:24 ] まー>>711 の式が悪いので、本当に計算したいモノと違うだろうな と思うが、ある程度書いて貰ってるから後は自分で変えろ。 おれは712では、ないけど。>>711 を指摘しようと思ったけどヤメタ
715 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 01:30:43 ] 何時も気になるんだけど、このスレの住人はFORTRAN77とかFORTRAN95とか 明示せずに質問したり、解答したりしてるけど問題に成らないのか?
716 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 02:28:56 ] 回答する分には答えやすい方(主にF95)に勝手に脳内補完するから無問題。 問題になるなら>>1 をよく読んでから質問しろと言いたい。
717 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 11:49:19 ] >>715 宿題はを聞く奴は違いが分からないw 結局は77になるようだが。 そうでない場合は90で答えて大丈夫だろう。さすがに90処理系はたいがいどこにでもある。
718 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 11:52:16 ] 77で答えておけばそれより上位でもだいたい問題ない。
719 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 23:08:26 ] >>694 すごく・・・買vロジェクトです。
720 名前:デフォルトの名無しさん [2007/07/12(木) 01:20:37 ] GNUのfortranって何であんなに遅いの?
721 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 09:40:57 ] >>720 素人が作ってるからでないの? GNU-Cだって倒産した商用コンパイラを引き継ぐまではf2c+gccで、小さなサンプル以外は まともに走ったことが無かったような記憶が。
722 名前:デフォルトの名無しさん [2007/07/13(金) 18:39:06 ] ↓この問題が全くわかりません。 教えてください。 よろしくお願いします。 ...... call rndm0 ( ) ...... a = rndm ( ) ...... b = rndm ( ) このルーチンを使って、乱数を 100 回発生させて それをファイルに書き込む プログラムを作成せよ。それを実行し、ファイルに正しく書き込まれたことを 確認せよ。なお、メインプログラムと独立したファイルにサブプログラムが 書かれている場合は、メインプログラムを違う名前のファイルで作成した後に、 コンパイルすればよい。
723 名前:デフォルトの名無しさん [2007/07/14(土) 10:48:45 ] 自分で調べるのを前提に書く サブルーチンを使ったプログラム書けってことじゃ? PROGRAM HOGE ファイルを開く(OPEN文) ループスタート 100回 CALL RNDM() Aを書く エンドループ ファイルを閉じる(CLOSE文) STOP END SUBROUTINE RNDM 乱数発生するぞするぞ! RETURN END 「メインプログラムと独立したファイルにサブプログラムが書かれている場合」 てのは、ライブラリが有るって事 調べて分からない場合は又書き名。調べた痕跡が分かれば俺は答える。
724 名前:722 [2007/07/14(土) 14:32:45 ] >>723 ありがとうございます。 調べてみます!
725 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 03:39:15 ] ボコボコにしてやんお .∧_∧ ( ^ω^)=つ≡つ (っ ≡つ=つ / ) ババババ ( ノ ̄∪
726 名前:デフォルトの名無しさん [2007/07/19(木) 11:52:59 ] たとえば、 WRITE(*,'(E10.4)') 0.0001234 とすると、出力結果は0.1234E-03となります。 この出力結果を、1.234E-04とするにはどうしたらいいのでしょうか?
727 名前:デフォルトの名無しさん [2007/07/19(木) 14:40:44 ] そうするメリットは何? 文字として扱うかですね。
728 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 17:24:04 ] E形編集を使ったこと無いから、気付かなかったけど E形編集ってメイドコスプレしたオッサン並に気持ち悪い。
729 名前:デフォルトの名無しさん [2007/07/20(金) 00:09:39 ] >>727 おい! クソ豚! わかりもしないことに口出しするな! しょんべん飲んで、とっとと死にやがれ! >>726 その要望は多くの人が持っていたので、Fortran90で対応がなされた。 ただしFORTRAN77でも出来ることは出来る。 Fortran90なら、ESフォーマットを使えばよい。SはScientificのSだ。 工学と科学では表記の伝統が違うようだ。詳しくはマニュアル嫁。 Fortran77の場合は、1P, E10.4, 0P を使えばよい。Pフォーマットは思わぬ副作用があるので、 使用後はすぐに 0P で元に戻しておいたほうが間違いが無い。 詳しくはマニュアル嫁。
730 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 01:19:02 ] >>727 そりゃ少ない文字数で多くの桁を表現できるからだろ。
731 名前:デフォルトの名無しさん [2007/07/20(金) 14:49:51 ] >>729 0.123...... 1.234...... と小数点以下を同じ桁数でして、桁数も大きくすると 仮数分の限界を越すと思うが
732 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 16:49:58 ] 何が言いたいのか分からない
733 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 21:14:08 ] 無視でおk
734 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 23:45:57 ] >>731 WRITE(*,'(E10.4)') 0.0001234 〜〜〜 ちゃんと>>726 を読んだらどうだ? 2chなんか見てないで、精神病院でも逝って来い!
735 名前:デフォルトの名無しさん [2007/07/22(日) 03:13:48 ] r(i)をreal(8)の配列として、 sin(r(i))の値を求めたいのですが、出力が0になります。 どなたかどうすればちゃんとした値が帰ってくるのか教えてください。
736 名前:デフォルトの名無しさん [2007/07/22(日) 03:55:29 ] r(i) がゼロなんじゃね?
737 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 03:57:02 ] 整数に代入した後に出力してるとか。
738 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:18:36 ] >>735 ソース見せろ
739 名前:デフォルトの名無しさん [2007/07/25(水) 20:50:00 ] 配列の宣言で、REAL A(10,5)とすべところをA(5,10)と間違って宣言したままコンパイルし、 しかもboundのチェックしないオプションでコンパイルしてエラー等は起きずに動いた場合、 たとえば、A(7,7)にアクセスした結果は、 どちらの宣言でも同じなのでしょうか? C言語の場合は同じというような話をきいたことがあるのですが、FORTRANの場合 いかがでしょうか? 処理系に依存して結果が不定なのでしょうか?
740 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 20:52:54 ] 同じなわけがない。C でも。
741 名前:デフォルトの名無しさん [2007/07/25(水) 21:53:51 ] C言語なら5×10=50のエリアに連続的に並んでいるだけだから、 A(7,7)は49番目というつもりなら境界を越えない限りは アプリの実行結果は同じになるんじゃないか。
742 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 21:55:50 ] A(10,5) で A(7,7) はおもっくそ境界越えとるがな。
743 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 00:22:18 ] >>742 従来のFORTRANでは、境界はあまり気にしなくていい。 というか、サブルーチンに渡したりするときは次元すら気にしない。 どうせ先頭番地しか渡してないので。自己責任でGo! >>740 >>741 が正しい。 どうせメモリー上では1次元に展開されているので、どう展開されるか分かっていれば 本来不正な添え字でも、目的の配列要素をアクセスすることが可能。 ただ、FORTRANとCでは、1次元に展開される時の列と行の順序が逆になっている。 FORTRANは縦書き。A(1,1),A(2,1),A(3, 1),.....,A(1,2), A(2,2), A(3, 2),.....という風にメモリー上に 並んでいる。 .
744 名前:デフォルトの名無しさん [2007/07/26(木) 07:24:32 ] FORTRANの他に数値解析に向いてる言語って何がありますかね?
745 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 08:43:53 ] >>743 いや、配列のために確保されているメモリ領域を越えちゃってるという意味で・・・
746 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 10:30:25 ] >>745 今回に限って言えば、50>7*7=49でぎりぎりセーフでね?
747 名前:デフォルトの名無しさん [2007/07/26(木) 12:17:43 ] >>746 Cは0から始まるから A(7,7) は (7+1)*(7+1)=64番目なのよ。 まあ、>>739 のは Cの場合はA(6,6)と読み替えてやるのがよろし。
748 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 12:23:45 ] >>746 A(10,5) で A(7,7) にアクセスするってのは、 10 * (7 - 1) + 7 = 66 番目のメモリ領域にアクセスするってことで、 50 要素しかない A(10,5) のメモリ領域は余裕で越える。
749 名前:747 mailto:sage [2007/07/26(木) 12:32:02 ] >>748 確かにそうだ。何で1行7要素だと思ったのか。 馬鹿だった。
750 名前:デフォルトの名無しさん [2007/07/26(木) 14:56:16 ] じゃA(5,10)なら良いのか? violationになりそうだけど
751 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 19:32:06 ] 5 * (7 - 1) + 7 = 37 だから、 確保したメモリ領域を越えないという点に関してのみは問題は無い。
752 名前:739 [2007/07/26(木) 19:38:10 ] >740-751 皆さんありがとうございました。 考え方がよくわかりました。 変な質問になってしまい申し訳有りません。 A(7,7)は例が悪かったと反省しています。
753 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 19:58:59 ] >>744 お金があったらMATLAB 貧乏人ならOctave
754 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 23:33:09 ] >>748 んだ。おまいが正しい。わしが間違ってた。すまんこw
755 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:32:54 ] >>743 >どうせメモリー上では1次元に展開されているので、 そうなんすか・・・知らんかった つまり、A(7,7)は単に先頭から7*7=49番目を見るってことですか? >ただ、FORTRANとCでは、1次元に展開される時の列と行の順序が逆になっている。 つまりFORTRANは左から、Cは右から1,2,3,・・・と展開していくってことですか
756 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:37:39 ] >>755 ちょっと前のレスくらい読めよ・・・
757 名前:755 mailto:sage [2007/07/27(金) 12:39:52 ] >>756 すいません新着し忘れてましたすいません
758 名前:747 mailto:sage [2007/07/27(金) 12:51:34 ] まだ混乱しているようだから、整理すると SUBROUTINE A(X) INTEGER X(10,5) WRITE(*,*) X(7,3) END SUBROUTINE PROGRAM INTEGER Y(5,10) Y(2,6)=10 CALL A(Y) STOP END とかやると ちゃんと 10って表示されるってことでしょ。 Y(2,6) は前から27番目。 X(7,3)も27番目だから。 メインルーチンの中で Y(7,7) とかやるとコンパイル時にエラーが出ると思う、さすがに FORTRAN77の頃は結構利用されていたような気がする。 普通は1次元配列で作って2次元で受け取るとかその逆だと思うけど。
759 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 13:42:25 ] すいません.Fortran90で複数行をまとめてコメントアウトすることはできないのでしょうか?
760 名前:755 mailto:sage [2007/07/27(金) 13:55:30 ] >>758 ありがとうございます。もんすごい良く分かりました。 Y(7,7)でやってみたところ、g77だとやはり out of defined rangeとなりましたが、 ifort9ではコンパイルでき結果も一致しました。 SUBROUTINE A(X) INTEGER X(10,5) WRITE(*,*) X(7,4) END SUBROUTINE PROGRAM INTEGER Y(5,10) Y(7,7)=10 CALL A(Y) STOP END ifortって緩いんですかね?
761 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 14:18:10 ] >>760 配列の範囲チェックに限らず、ifortは微妙にいろいろ緩いよ。少なくともg77よりは。 オプションで変わるのかも知れないが、デフォではそう。 最初のうちはg77で練習した方がいいかもね。
762 名前:デフォルトの名無しさん [2007/07/27(金) 17:14:05 ] Fortran77で、Do文を利用して配列に値(1or0)を代入して ファイルにはいたら途中から?????とか巨大な数が でてしまうのですが、 何か初期化などが必要なのでしょうか? Do文の前にx(i,j,k)=0とか入れてるのですが、 これでは駄目なのでしょうか?
763 名前:デフォルトの名無しさん [2007/07/27(金) 17:51:26 ] >>762 1か0を代入した配列要素を参照すれば1か0を返すと思います。 予期せぬ値を吐いているのは、配列が宣言されてから、 その要素に一度も値が代入されていないからだと思います。 予期せぬ値が配列のどの要素にあたるのか考えてみれば 大抵あっさり解決すると思いますよ。
764 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 20:02:58 ] Intel fortranだと初期化してない変数は自動で0になるんよね
765 名前:762 mailto:sage [2007/07/27(金) 20:22:52 ] >>763 ,764 ありがとうございます。 使用しているのはSalfordのftn77peです。 配列要素は代入したものを参照しているはずなのですが。。。 以下の内容ですが間違いありますか? integer h parameter(ilimit=10) parameter(jlimit=20) parameter(klimit=2) real Conc(ilimit+1,jlimit+1,klimit+1) open(10,file='tests1.csv') i=0 j=0 k=0 h=5 Do 300, i=0,ilimit Do 200, j=0,jlimit if(j.lt.h) then Conc(i,j,k)=0.0 else Conc(i,j,k)=1.0 endif write(*,*)i,j,k,Conc(i,j,k) write(10,*)i,j,k,Conc(i,j,0) 200 Continue 300 Continue c close(10) stop end
766 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 22:09:46 ] >>765 FORTRANの配列は特に指定しない場合は 1から。 >使用しているのはSalfordのftn77peです。 >>765 のプログラムを/CHECK オプションを付けてコンパイルすると実行時エラーが出る。 /FULLCHECK オプションを付けるとコンパイル時にエラーになる。 配列を0から始めたいのなら以下のようにする。 real Conc(0:ilimit,0:jlimit,0:klimit)
767 名前:762 [2007/07/28(土) 13:05:47 ] >>766 アドバイスありがとうございます。 教えていただいたオプションつけると 実行時エラーが確かにでますね・・・ どこに間違いがあるのでしょう?
768 名前:762 mailto:sage [2007/07/28(土) 13:09:51 ] >>766 初期化したら大丈夫でした。 何から何までありがとうございました。
769 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 17:13:16 ] gfortran, ifort で NaN を検出したいのですが、 どうすればよいでしょうか。 program test real(8) :: x,y x=1. y=0. write(*,*) x/y,isnan(x/y) end $ gfortran test.f90 /tmp/ccABo1qT.o: In function `MAIN__': test.f90:(.text+0xa3): undefined reference to `isnan_' collect2: ld はステータス 1 で終了しました $ i$ ifort test.f90 $ ./a.out Infinity F 鳥は Linux 2.6.20-gentoo-r8 SMP x86_64 Intel(R) Xeon(TM) CPU 3.80GHz GenuineIntel GNU/Linux $ gfortran --version GNU Fortran 95 (GCC) 4.1.2 (Gentoo 4.1.2) $ ifort --version ifort (IFORT) 9.1 20070215 です。
770 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 20:48:12 ] >>769 Intel Fortran, g95 なら program test real(8) :: x,y x=0. y=0. write(*,*) x/y,isnan(x/y) end gfortranの場合は知らん。
771 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 21:18:08 ] >>770 thanks. infinity は NaN ではなかった。小手先の工夫で program test real(8) :: x,y x=0. y=0. x=x/y if(x-x.ne.0.) then write(*,*) x else write(*,*) x-x endif end を考えたのですが gfortran は NaN を返し、ifort は 0.000000000000000E+000 を, ifort -O0 は NaN を返しました。例外をトラップしようと思うと、 c のプログラムをリンクせざるとえないのかな。
772 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 23:20:20 ] >>771 マニュアル味噌。 Module: USE IFPORT Syntax result = IEEE_FLAGS (action, mode, in, out) gfortranの方は知らんが、F2003対応のIEEEモジュールを誰かが作ったとか書いてあったような。 記憶違いだったら、ごめんw
773 名前:デフォルトの名無しさん [2007/08/02(木) 03:31:02 ] わざわざNanを検出する理由は何か?
774 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 09:17:03 ] >>773 なんもない
775 名前:726 mailto:sage [2007/08/09(木) 12:58:16 ] >>729 ずいぶん遅くなってしまいました。 私のやりたいことはデータを並び替えるだけなのですが、もともとの出力データは役所が絡んでいるので、 出力形式がオリジナルのものと違うと何かと説明が面倒なのです。 ありがとうございました。
776 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 10:45:29 ] 標準入力でファイル名入れるときに、普通のシェルみたいに、タブによるインクリメントサーチ使えたらなぁ やっぱり無理だよね?
777 名前:デフォルトの名無しさん [2007/08/10(金) 14:36:40 ] だれかこのプログラムの使い方教えてください cera-www.dkrz.de/IPCC_DDC/info/Readme.gzip ASCIIデータをなにかに変換するプログラムなのですが 自分無知でよくわかりません。 おねがいしますm(__)m
778 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 16:19:46 ] ノットあナンバーはコンピューータサイエンスやるなら覚えとけボケ
779 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:15:35 ] >>777 只のデータフォーマットの説明とサンプルプログラムのようだが。 よくわからないなら使うなよ。
780 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 00:51:39 ] >>778 Fortran利用者はコンピュータ・サイエンスなんか知らない。 計算機自体をサイエンスだなんて何言ってんの?あんた馬鹿?って認識だろw IEEEフォーマットが普及したのはありがたい。 IBMとクレイのフォーマットが最後までがんばっていたようだが、 各社の糞数値フォーマットもようやく死滅したようで、まずはめでたい。 Infのおかげで、ゼロ割エラーで止まらなくなったのはうれしい。 IF文で避けているはずなのに、投機的実行して0割エラーでアボンとか、ウンコ漏れそうになるw 正直NaNはあんまり助けにならん。 >>777 その質問じゃ答えようが無い。 もう少し具体的に質問すれば誰か答えてくれるだろう。 書いてあることは、>>779 の言うとおりだ。 1.gzipで圧縮してあるからばらすが良い。解凍するとASCIIファイルが出る。 2.そのASCIIファイルのデータの書式。および読み込みサンプル。 の2点だ。
781 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 07:47:23 ] 中二病?
782 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 18:38:47 ] 夏休みで暇だから、宿題を持ってきたまえ。
783 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:27:55 ] >>777 中身もちゃんと見ていないが、たぶん、IPCC(国際的な専門家でつくる気候変動に関する政府間パネル) が、シミュレーションした結果をGRIB形式とかいうので保存してあるというやつの 中身の説明と、サンプルプログラムじゃないかな。
784 名前:デフォルトの名無しさん [2007/08/21(火) 11:56:55 ] OPEN(5,FILE='C:\\test-data.txt') DO 20 K=1,200 READ(5,25)X(K),Y(K) 25 FORMAT(2F20.0) 20 CONTINUE のとき、test-data.txtはどんなデータを与えればいいのだ? 2F20.0がよくわからん。