[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 12:09 / Filesize : 350 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれFORTRAN(超初心者用)その2



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がよくわからん。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<350KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef