1 名前:デフォルトの名無しさん [2006/11/12(日) 17:13:35 ] FORTRAN総合スレッドです。 FORTRAN77/90/95/2003, HPF等、FORTRAN全般に関する話題を書き込んで下さい。 ・FORTRAN関連情報 お約束だが、まずは自分で調べよう www.google.co.jp/ x86で動作するFortranコンパイラ www.nminoru.jp/~nminoru/programming/x86-fortran.html The Fortran Company www.fortran.com/ Polyhedron Software www.polyhedron.co.uk/ Google Directory - Fortran directory.google.com/Top/Computers/Programming/Languages/Fortran/ ・前スレ FORTRAN III pc8.2ch.net/test/read.cgi/tech/1104724162/ FORTRAN II pc5.2ch.net/test/read.cgi/tech/1068351911/ Fortran pc2.2ch.net/test/read.cgi/tech/1003214738/
7 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 19:58:47 ] >>6 NetLibへ池。66時代のものがごまんとあるぜ。
8 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 20:01:14 ] IMSLがあるんじゃね?
9 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 20:02:08 ] >>8 IMSLは有料パッケージソフトだぞ。
10 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 20:08:40 ] IMSLは10万以上する予感 LAPACKに積分はふくまれておらんの?
11 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 20:08:54 ] コンパイラより高い・・・
12 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 20:10:38 ] このスレのエキスパートたちは有料パッケージとか使っておられるのですか?
13 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 20:13:17 ] >>7 Netlib行ったが数が多すぎて何がなんだかわからない。 これをどう使えばいいかすらわからない。 見た感じプログラム単体が落っこちているだけにしか見えないが どうやってってこれを呼び出して使うんだろうか。
14 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 20:32:24 ] >>10 LAPACKは元々、LINPACK+EISPACKで、それぞれ密行列の線形方程式と固有値問題の ルーチン集なので積分は主題から外れていると思う。 LINPACK、EISPACKは60年代の米英の国家プロジェクトだったように記憶している(記憶曖昧w)。 LAPACKは基本的にそれを77化してBLASの上に統一化し、一部アルゴリズムを改良・拡充した ものだろう。その辺の経緯や順序はよくわかんね。 >>13 NetLibとはそういうところだw 埃の積もった土蔵見たいなもんだ。 結局、膨大すぎて何が欲しいか分かってないと使えないw NumericalRecipesのページへ行ってみるのが吉かもしれない。 とりあえず専門家的にはベストで無いにしろ、素人が馬鹿な外れを引かされることは無いはず。 ただ本版のソースはしばしばBug入りなのでめくらめっぽう使うのはヤヴァス 有料ソースは直っていたりするw
15 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 21:19:12 ] 初心者は富士通のサブルーチン付きコンパイラ買うのがbestじゃね? 難易度も予算も
16 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 21:25:25 ] Intel Math Kernel Libraryでok
17 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 21:36:09 ] MKLって積分ルーチン入ってるの?
18 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 21:39:47 ] 多分ない というか、フリーで有名どころのパッケージには積分ルーチンは無い予感
19 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 19:48:52 ] 以下のプログラムを実行すると、 結果が 1016010618 となります。 なぜでしょうか?訳が分かりません 環境はg95@cygwinです。 program Interpolation print *,Lorentz(1.5) end program Interpolation real function Lorentz(x) real :: x Lorentz = 1/(1+25*x*x) return end
20 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 20:30:25 ] メインプログラムにLorentzの型定義がないからinteger扱いされてんじゃねーの?
21 名前:19 mailto:sage [2006/11/13(月) 21:30:09 ] implicit noneで解決しました。 1時間も時間を食いました。
22 名前:デフォルトの名無しさん [2006/11/14(火) 00:43:00 ] 自由書式で書くなら関数・サブルーチンは内部手続きにするか、MODULEにするか INTERFACE宣言してから使おう。
23 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 01:07:20 ] >>20 ,22 が正しい。 >>19 はあまりに中途半端。きっちりと厳格なF90式で書くか、F77式に暗黙の型を守るべき。
24 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 02:41:24 ] INTEL FORTRAN用のBLAS/LAPACKだが、AMDのcore-math-libraryにWindows用もうpされている。 昔はLinux用の一部ルーチンだけだったが、いまや全ルーチンを網羅したようだ。 漏れはAMDなので、誰かIntelChipでも使えるか試してくれ。 developer.amd.com/acml.jsp
25 名前:デフォルトの名無しさん [2006/11/14(火) 15:36:00 ] fortran中で他のexeを実行できるようにするにはどうしたら良いですか? fortranで作られたexeなんだけどソースくっつけるのがめんどくさいんで・・・w
26 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 16:32:26 ] >>23 FORTRAN(90)の書籍で、定番の物ってありますか?
27 名前:デフォルトの名無しさん [2006/11/14(火) 16:53:09 ] これからフォートランを勉強するのですが、 とても解りやすい入門書を教えていだたけませんか? プログラミング自体、あまり経験がありません。 Cを少しやりました。 よろしくお願いします。
28 名前:デフォルトの名無しさん [2006/11/14(火) 18:18:30 ] xの値を、1,10,100,1000,10000,100000,1000000の順に変えて その常用対数、自然対数の値を計算して表示するプログラムを作れ という課題が出たのですがサッパリ分かりません。 どうかお力添えください。
29 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 20:51:20 ] >>24 Core Duoでもイゴイタ 32bit ifort版はシングルプロセッサ用に最適化されているみたいだが SSE/SSE2が使えればIntel CPUでもOKのようだ。 >>25 SYSTEM とかそんな感じの関数なりサブルーチンなりが用意されている(ことが多い)。 >>28 X の値を 1 に変える(X に 1 を代入する) X = 1. X の常用対数を計算して Y に代入する Y = LOG10(X) X の自然対数を計算して Z に代入する Z = LOG(X) X, Y, Z の値を順に表示する WRITE(*,*) X, Y, Z
30 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 23:23:10 ] 倍精度実数と4倍精度実数では実行速度は変わってしまいますか?
31 名前:デフォルトの名無しさん [2006/11/14(火) 23:28:24 ] >>30 死ぬほど違う。 倍精度までは数値演算プロセッサの助けでハードウェア演算するが、 4倍精度はソフトウェアで浮動小数点演算をするので遅くなる。 64BitCPUなら若干状況は改善するが本質においては変わらない。 DECのアルファーCPUは4倍精度も微妙に早かったが、特殊な命令セットがあったためらしく、 64bitCPUだからといってよくなるわけでもないようだ。
32 名前:デフォルトの名無しさん [2006/11/14(火) 23:31:25 ] >>29 DO文で書かないといけないのですが どうすればいいんでしょうか・・
33 名前:30 mailto:sage [2006/11/15(水) 00:03:03 ] >>31 詳しいレスサンクス!
34 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 00:35:58 ] >>26 残念ながらあまりいい本は無い。 今、手に入りやすいのはこれ。 www.amazon.co.jp/gp/product/4563014095 しかし、F77の癖を引きずっていて、あまりいい書き方をしていない。 著者は京大のおっさんらしく、WEBで同等の内容のものを見られる。 アドレスはアマゾンのレビューに書いてある。 英語でよければ、この辺とか、 www.lahey.com/elfpage.htm この辺のEssential Fortranあたりが学習用サブセットになっていて、純粋F90を学べる。 www.fortran.com/F/books.html しかし、現実世界ではF77ソースがあふれているので微妙ではある。 実際上記のものは教育用としてもはやらなかった。
35 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 00:43:57 ] >>32 PROGRAM chinpopo DO 10 i = 0, 6 x = 10.0**REAL(i) y = LOG10(x) z = LOG(x) WRITE(6, *) INT(x), y, z 10 CONTINUE END >>35
36 名前:デフォルトの名無しさん [2006/11/15(水) 14:47:06 ] complex(8) c において, c=(0.d0, 0.d0) として初期化するのも, c=0.d0 として初期化するのも全く同じことなのですか?
37 名前:デフォルトの名無しさん [2006/11/15(水) 17:59:05 ] DO文を使用して,xの値を,1,10,100,1000,10000,100000,1000000 の順に変えて その常用対数および自然対数の値を 計算して表示するプログラムを作れ. なお,計算結果は書式の指定をして,x, log10(x), log(x) の順に表形式で表示すること. また,計算結果が整数となるものは整数型(In),実数となるものは実数型(Fn.m)または指数型(En.m)で出力すること. program report5 implicit none integer :: x real :: y,z write (*,*) 'x=' read (*,*) x,log(x),log10(x) do 10 i = 0.6 x=10.0**real(i) y=log(x) z=log10(x) write (6,) end do stop end program report5 何処がおかしいんでしょうか?
38 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 18:31:55 ] >>37 read (*,*) x,log(x),log10(x) どこに入れたいの? たぶん、その穴じゃないわよ
39 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 19:20:43 ] >>37 >read (*,*) x,log(x),log10(x) >do 10 i = 0.6 >x=10.0**real(i) >y=log(x) >z=log10(x) >write (6,) ここら辺が間違ってる。 どこが間違いなのかわからないときは、とりあえずコンパイラ様にソースを渡して 文句を言われたところを上から順に直していくのも1つの手だ。 だれかくだすれの次スレ立ててくれ。
40 名前:デフォルトの名無しさん [2006/11/15(水) 23:55:01 ] >>37 >>35 をもういっぺん見ろ! >>39 重複スレをクダスレにするか?
41 名前:デフォルトの名無しさん mailto:sage [2006/11/17(金) 00:48:27 ] >>40 タイトル一緒だから混乱しそうw
42 名前:37 [2006/11/17(金) 10:16:25 ] >>35 WRITE (6,*) が分かりません >>37 の問題の書式の指定はこれでいいんでしょうか
43 名前:デフォルトの名無しさん [2006/11/17(金) 11:23:12 ] WRITE(6, '(I10, F15.7, F15.7)') x, y, z もう少し教科書嫁!! こんな感じでw
44 名前:デフォルトの名無しさん mailto:sage [2006/11/17(金) 12:00:23 ] >>37 がんばったけど書式がうまくいかなかった。ゴメン c DO文を使用して,xの値を, c 1,10,100,1000,10000,100000,1000000 の順に変えて c その常用対数および自然対数の値を 計算して表示する c 計算結果は書式の指定をして,x, log10(x), log(x) の順に c 計算結果が整数となるものは整数型(In), c 実数となるものは実数型(Fn.m)または指数型(En.m)で出力. Program report5 Implicit none INTEGER i REAL x do i = 0, 6 x = 10.0**i write(*, *) aint(x), log10(x), log(x) end do stop end c 実行結果 c 1.00000 0.000000E+00 0.000000E+00 c 10.0000 1.00000 2.30259 c 100.000 2.00000 4.60517 c 1000.00 3.00000 6.90776 c 10000.0 4.00000 9.21034 c 100000. 5.00000 11.5129 c 0.100000E+07 6.00000 13.8155
45 名前:デフォルトの名無しさん [2006/11/17(金) 12:28:48 ] program report5 implicit none integer :: x real :: y,z write (*,*) 'x=' DO 10 i = 0, 6 x = 10.0**REAL(i) y = LOG10(x) z = LOG(x) WRITE(6, '(I10, F15.7, F15.7)') x, y, z 10 CONTINUE END do stop end program report5 こうですか?
46 名前:デフォルトの名無しさん [2006/11/17(金) 17:12:34 ] Program report5 Implicit none real :: i,x do i=0, 6 x=10.0**i write(*, '(i7, f15.7 f15.7)') x, log10(x), log(x) end do stop end 結果 ******* 0.0000000 0.0000000 ******* 1.0000000 2.3025851 ******* 2.0000000 4.6051702 ******* 3.0000000 6.9077554 ******* 4.0000000 9.2103405 ******* 5.0000000 11.5129251 ******* 6.0000000 13.8155107 おかげさまでここまで出来たんですが、どうしても*******が出てしまいます><
47 名前:デフォルトの名無しさん mailto:sage [2006/11/17(金) 19:09:14 ] >>46 「変数の型」を再勉強してから出直してこい。
48 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 00:05:43 ] >>46 write(*, '(i7, f15.7 f15.7)') x, log10(x), log(x) ↓ write(*, '(f15.7, f15.7 f15.7)') x, log10(x), log(x) にしてみよう・・・ xはrealで宣言されてるからformatを整数表示に指定することはできない.
49 名前:デフォルトの名無しさん [2006/11/18(土) 00:44:07 ] >>48 >>37 の問題を読む感じでは、 write(*, '(i7, f15.7 f15.7)') int(x), log10(x), log(x) を予期していると思われる。 >>46 はもう少し貰った回答例をよく吟味しろw
50 名前:デフォルトの名無しさん [2006/11/18(土) 01:00:15 ] PukiWiki つくってみた www.moecity.jp/home/fortran/ wikiよく知らない。自由に使ってみてくれ。
51 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 19:42:09 ] f90スタイルで学べるいい文書はありませんかね。 英語か日本語でお願い
52 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 20:03:11 ] >>51 Fortran 標準コーディングルール ttp://www.mri-jma.go.jp/Project/mrinpd/coderule.html European Standards For Writing and Documenting Exchangeable Fortran 90 Code ttp://www.meto.gov.uk/research/nwp/numerical/fortran90/f90_standards.html 上の和訳 ttp://www.mri-jma.go.jp/Project/mrinpd/eurostand.html
53 名前:デフォルトの名無しさん [2006/11/18(土) 21:18:26 ] >>52 >推奨する書き方 real:: x(n), y(n) >x(1:n) = y(1:n) > > >×推奨しない書き方 x(:) = y(:) または x = y これはかなりうそ臭いと思う。 x=y の場合と違って、コロン指定子を使うと、いったん暗にコンパイラが テンポラリ配列にコピーするのでたいてい余分な時間がかかる。 しかし漏れが疑問に思うのは、F77では変数と配列に同じ名前をAとA(10)を指定できて 別物に扱われる様に規格で決まっていたと思うのだが、F90で矛盾が起きないのか・・・ それとも、これはJIS規格だけでANSIやMILでは違っていたのか?
54 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 22:09:41 ] >>53 REAL A DIMENSION A(10) DO 10 I=1,10 A(I) = REAL(I) 10 CONTINUE A = 1.23 WRITE(*,*) A WRITE(*,*) (A(I), I=1,10) END 規格上どうなってたかは知らないが g77だと A = 1.23 の部分でコンパイルエラーになった。 g95では(当然)
55 名前:54 mailto:sage [2006/11/18(土) 22:12:21 ] × g95では(当然) ○ g95では(当然) A は配列全体と解釈された。
56 名前:デフォルトの名無しさん [2006/11/18(土) 23:02:07 ] >>54 そうじゃなくて REAL A, A(10) が可能だったと思う。
57 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 00:16:02 ] hoge.f: In program `MAIN__': hoge.f:1: REAL A,A(10) 1 2 Invalid declaration of or reference to symbol `a' at (2) [initially seen at (1)]
58 名前:デフォルトの名無しさん [2006/11/19(日) 01:39:12 ] たしか変数名と配列名は規格上の定義では別物だった記憶がある。 実際のコンパイラでどうなっていたかは知らん。
59 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 08:30:40 ] Fortran90なんですが, integer a(1:100)=0 みたな初期化の仕方はよくやるんですか?
60 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 08:32:30 ] ×みたな ○みたいな orz
61 名前:デフォルトの名無しさん [2006/11/20(月) 09:01:16 ] >>60 よくやる。 しかしその初期化はリンク・ロード時に行われるものなので、 実行行でa(1:100)=0と書くのとは微妙に違う。
62 名前:59 mailto:sage [2006/11/20(月) 15:25:10 ] >>61 レスありがとう
63 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 17:30:12 ] integer a(1:100)=0 ↑これって通る? integer:: じゃないと通らなかった気が。
64 名前:質問1/3 [2006/11/20(月) 18:45:56 ] 拡散方程式の境界値問題をオイラー陽解法で解くための 参考プログラムというものが教科書にあり、まわしたのですが errorは出ないものの上手くまわりませんでした。 アドバイスを願います。 ちなみにMX=41,KM=30,DT=0.01としています。 PARAMETER(NX=51) DIMENSION U(NX),UU(NX) C**** INPUT & CALCULATE PARAMETERS WRITE(*,*) 'MX (<52: MESH POINTS) ? KM (NUMBER OF TIME STEP) ?' READ(*,*) MX,KM WRITE(*,*) 'DELTA T: DT ? ' READ(*,*) DT DX=1./FLOAT(MX-1) R=DT/DX**2 IH=(MX+1)/2 I5=.05/DT IF(I5.EQ.0) I5=1 CALL OUTPUT(U,NX,MX,1) C**** INITIAL CONDITION DO 10 I=1,MX X=FLOAT(I-1)/FLOAT(MX-1) IF(I.LE.IH) THEN U(I)=X ELSE U(I)=1.-X END IF 10 CONTINUE
65 名前:質問2/3 [2006/11/20(月) 18:46:56 ] C**** MAIN LOOP DO 20 K=1,KM U(1)=0. U(MX)=0. IF(MOD(K,I5).EQ.1) CALL OUTPUT(U,NX,MX,2) C DO 30 I=2,MX-1 UU(I)=R*U(I-1)+(1.-2*R)*U(I)+R*U(I+1) 30 CONTINUE DO 40 I=2,MX-1 U(I)=UU(I) 40 CONTINUE C IF(ABS(U(IH)).GE.10000.) THEN WRITE(*,*) 'DIVERGE!' STOP END IF C 20 CONTINUE C CALL OUTPUT(U,NX,MX,3) STOP END C SUBROUTINE OUTPUT(U,NX,MX,MM) CHARACTER Z(60,23) DIMENSION U(NX)
66 名前:質問3/3 [2006/11/20(月) 18:48:34 ] IF(MM.EQ.1) THEN DO 10 J=1,23 DO 10 I=2,MX-1 Z(I,J)=' ' 10 CONTINUE DO 20 J=1,23 Z(1,J)=':' Z(MX,J)=':' 20 CONTINUE DO 30 I=1,MX Z(I,1)='-' Z(I,23)='-' 30 CONTINUE END IF IF(MM.EQ.2) THEN DO 40 I=1,MX J=U(I)*40+.001 IF(J.GT.23) GO TO 40 Z(I,J)='*' 40 CONTINUE END IF IF(MM.EQ.3) THEN DO 50 J=23,1,-1 WRITE(*,600) (Z(I,J),I=1,60) 50 CONTINUE 600 FORMAT(1H ,60A1) END IF RETURN END
67 名前:59 mailto:sage [2006/11/20(月) 21:40:21 ] >>63 そうでした integer :: a(1:100)=0 じゃないと通らんです.
68 名前:デフォルトの名無しさん [2006/11/22(水) 00:03:15 ] くだすれFORTRAN(超初心者用)その2 pc8.2ch.net/test/read.cgi/tech/1164121236/
69 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 01:57:44 ] 今度、計算機を3台ばかし構築せねばならないんだが、 CPUはcore2duoとXeonのどちらが良いのだろうか コンパイラはインテルの非商用フリーのやつを使おうと思っている
70 名前:デフォルトの名無しさん [2006/11/22(水) 03:56:04 ] Xeon5000番台と比較するならXeon、 Xeon3000番台と比較するならCore2Duoかな
71 名前:デフォルトの名無しさん [2006/11/22(水) 11:20:02 ] キャッシュに載るならそれでもいいが、メモリーアクセス多いならItanium2で池
72 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 14:12:45 ] お前らが使っている計算機のスペックきぼんぬ うちは CPU:Pentium4 3.2GHz メモリ:1GB コンパイラ:Intel Fortran コンパイラ メモリを2GBにしろと進言したが無理だった。
73 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 14:54:28 ] 便乗しようじゃあないか. CPU: Pentium4 3.4GHz RAM: 1.5GB (DDRPC3200デュアル) コンパイラ: Intel Fortran Compiler 9.1 OS: Windows XP pro SP2 友人のC2D (T7200) 搭載機使って計算したらノートPCのくせに俺の デスクより2倍以上速くて鬱ry
74 名前:デフォルトの名無しさん [2006/11/22(水) 15:35:21 ] これはなんですか???教えてください!! NO ERRORS,4 WARNINGS [<TDOFS>FTN77 Ver 4.03] NO ERRORS [<FORVIB>FTN77 Ver 4.03] NO ERRORS [<COEF0>FTN77 Ver 4.03] NO ERRORS [<COEF1>FTN77 Ver 4.03] NO ERRORS [<SOLU>FTN77 Ver 4.03] NO ERRORS [<F_TAN>FTN77 Ver 4.03] NO ERRORS [<Z_GK>FTN77 Ver 4.03] NO ERRORS [<INTARG>FTN77 Ver 4.03] NO ERRORS [<INTARG3>FTN77 Ver 4.03] NO ERRORS [<INTARG4>FTN77 Ver 4.03] NO ERRORS [<INTARG5>FTN77 Ver 4.03] WARNING the following symbols are missing: DLAX D:\MyDo\Fortran\1122test.obj (D:\MYDO\FORTRAN\1122TEST.FOR) DLAXR D:\MyDo\Fortran\1122test.obj (D:\MYDO\FORTRAN\1122TEST.FOR)
75 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 15:50:10 ] >>74 エラーはない(おめでと♪)けど、変なのが4つあったよ。 なんか、1122testっていうファイルのDLAX, DLAXRっていう名前が変な感じ。 ちょっと見た方がいいかも・・・(byふぉとらんこんばいら4.03号)。
76 名前:デフォルトの名無しさん [2006/11/22(水) 16:07:08 ] ありがとうございます☆ 今昔の先輩のプログラミングを解析中なだけで、FORTRAN自体を理解してませんが、恥を忍んでお伺いします。 DLAXRというのはたぶんこの部分ですが、どこか変でしょうか? c **** DLAXR *************************************** call DLAXR(XX,A,k,hmn,ALU,b,IPP,VWW,icond) do 110 j=1,mn+1,1 jj=j-1 X(jj)=XX(j) 110 continue do 111 j=mn+2,hmn,1 jj=j-mn-1 Y(jj)=XX(j) 111 continue c *********************************************************** return end
77 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 16:51:21 ] >>76 わたしもよくわかんないけど、 DLAXRを呼んでるけど、このファイルではまだ定義されてないから 型・(引数の数とかの)形式があってるか不安・・・ よければファイルに書いといてね たぶん他のファイルで定義されてるんだろうから とりあえず適当にくっつけるけど、間違っても怒らないでね(byふぉとらんこんぱいら)
78 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 17:24:56 ] >>74 DLAX, DLAXR って名前から察すると、富士通の数値計算ライブラリSSL II を使ってるっぽい。
79 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 17:45:18 ] すれ違いかも知れないが、CoreDuo、Core2DuoでLinuxで動くの?
80 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 18:00:54 ] >Core2DuoでLinuxで シンタックス・エラー: 解決されない助詞「で」
81 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 20:45:13 ] >>80 nice
82 名前:デフォルトの名無しさん [2006/11/22(水) 23:35:23 ] >>74 それは>>78 にあるように、SSLIIのライブラリを読んでいるので、それが無いと言っている。 SSLIIのライブラリがあるコンパイラ(Fujitsu、Lahey)の奴でやるか、 あるいは他のライブラリで置き換える必要がある。 LU分解っぽいので、LAPACKとか何でもあるべ。
83 名前:デフォルトの名無しさん [2006/11/23(木) 14:05:27 ] n行m列の行列があり、そこからn行m列のそれぞれの値を一列に直して、それぞれに値について大きい順に並べなおし、元のn行m列に直してみたいのですけどどんなプログラムの方法がありますか? よければ、教えてください>< ちなみにfortran77を使っています></
84 名前:デフォルトの名無しさん [2006/11/23(木) 16:00:07 ] >>83 言ってることがよく分からないが、2次元行列を列ごとにソートして、 上から下へ大きい順に並べなおしたいということか? それなら簡単だ。 1.まず1次元ソートのサブルーチンを用意する。これを SORT(n, x) としよう。 2.列ごとにソートする。 DO 10 i = 1, m CALL SORT(N, X(1, i)) 10 CONTINUE これでおk。
85 名前:デフォルトの名無しさん [2006/11/23(木) 18:03:09 ] >>84さん指摘ありがとうございます でもちょっと違うのです>< たとえば、1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 について、 1 2 3 … 16 といってから順番を変更して 16 12 8 4 15 11 7 3 14 10 6 2 13 9 5 1 という風に並べたいのです
86 名前:デフォルトの名無しさん [2006/11/23(木) 19:56:32 ] >>85 それならもっと簡単だ。FORTRAN77は配列の先頭アドレスしか渡さない。 次元数とか大きさは気にしない。 また、FORTRANの配列はメモリー上では、列方向に隣り合って1次元に並んでいる。 ゆえに、N*Mの要素数で1次元のソートをすればいい。 1.1次元のソートを用意する。 2.CALL SORT(N*M、X) これでOK
87 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 11:12:38 ] >>83 元々mixiに書き込んだんだから、解決したらmixiにも書くように。
88 名前:デフォルトの名無しさん [2006/11/24(金) 11:44:03 ] >>87 つーか>>83 のレベルでは>>86 の回答は理解できないんじゃないか。 FORTRANはこういうイカサマ技によって、1次元整数0クリアをつっかって 多次元整数、実数などのクリアーに使えた。一種のPolymorphism wwwww
89 名前:デフォルトの名無しさん [2006/11/24(金) 14:36:03 ] >86さんありがとうございます 確かに速く知りたいという気がはやりすぎて、いろんな所で質問していますね ちゃんと自分で理解できたら書いていきたいとは思っているのですけどね でも、やはりちょっと理解できません^^; よければ、何か例とかあるとありがたいのですけど><
90 名前:デフォルトの名無しさん [2006/11/24(金) 14:36:17 ] >>77 ありがとうございます! >>78 さんの言うとおり、富士通SSLUを使っている様子です。 >>82 LaheyやLAPACKとはどんなものですか??
91 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 20:57:18 ] >>90 ttp://www.google.co.jp/search?q=lahey+fortran ttp://www.google.co.jp/search?q=lapack+fortran
92 名前:デフォルトの名無しさん [2006/11/24(金) 23:12:56 ] >>90 Laheyはコンパイラの自社独自開発をやめて、今では富士通のフロントエンドを使っている。 富士通はLinux版しか出していないが、LaheyはWindows版も出している。 富士通が絡んでいるので、プロフェッショナルバージョンを買うとSSLがついてくる。 あとSSLは名古屋大学のNUPACKと密接な関係があるので、netNUMPACが参考に なるかもしれないし、ならないかもしれないwww 漏れは富士通系はメインには使わなかったのでよく知らんw LAPACKは固有地問題と線形問題用のサブルーチン集だ。これは国際標準と化してきているので どこの機械でも動いている。
93 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 23:33:34 ] >>89 PROGRAM unko REAL a(5, 2) CALL kintama(5 * 2, a) DO 10 i = 1, 5 PRINT *, a(i, 1), a(i, 2) 10 CONTINUE END C SUBROUTINE kintama(n, x) REAL x(n) DO 10 i = 1, n x(i) = REAL(i) 10 CONTINUE RETURN END 実行結果 1.000000 6.000000 2.000000 7.000000 3.000000 8.000000 4.000000 9.000000 5.000000 10.00000 Press any key to continue サブルーチン 金玉 で、1次元配列xに1〜nまで順番に数を代入している。 一方、メインルーチンから呼び出すときは、2次元配列を引数(ひきすう)に与えている。 要素数は行×列=10個で渡している。 返ってくる結果を見ると、列方向に連続した値で戻って来ている。 同様のことをSORTでやれば、はじめ二次元にランダムだった数が、 列方向にソートされて戻ってくる。
94 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 08:07:15 ] >>89 >確かに速く知りたいという気がはやりすぎて、いろんな所で質問していますね それはマルチポストと言って、マナー違反だな。 ここをよーく読んどくように。 ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88
95 名前:デフォルトの名無しさん mailto:sage [2006/11/26(日) 17:18:04 ] FORTRANのエロゲとかないの?
96 名前:デフォルトの名無しさん [2006/11/27(月) 19:00:46 ] >>53 >x(1:n) = y(1:n) この書き方って例えば次のような漸化式に使うと ちゃんと計算してくれない. x(1)=0 x(2)=1 x(3:n) = 2*x(2:n-1) - 4*x(1:n-2) 自分に自分を代入するような 式だと駄目っぽい (途中から全部0になる).なんで??
97 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 21:01:20 ] >>96 配列の演算はすべて並列計算として処理されるので x の要素が 0 で初期化されていた場合、 x(3) = 2*x(2) - 4*x(1) = 2*1 - 4*0 = 2 x(4) = 2*x(3) - 4*x(2) = 2*0 - 4*1 = -4 x(5) = 2*x(4) - 4*x(3) = 2*0 - 4*0 = 0 x(6) = 2*x(5) - 4*x(4) = 2*0 - 4*0 = 0 ・・・ となる。 do i=2,n x(i) = x(i-1) + 1 end do と x(2:n) = x(1:n-1) + 1 では意味が違うのだ。
98 名前:96 mailto:sage [2006/11/27(月) 22:18:19 ] >>97 おお〜よくわかりました! ありがとう
99 名前:デフォルトの名無しさん [2006/11/28(火) 00:17:59 ] >>96 REAL::A(N, N), B(N, N) A = A * B のような状況を考えれば、今のFORTRANの仕様がもっともだと分かる。 行列操作がらみで、この仕様はとても便利。いちいち自分でテンポラリにコピーしなくていい。 あと一応、並列化されたときのことも考慮されてそういう仕様になっているらしい。
100 名前:デフォルトの名無しさん [2006/11/29(水) 13:24:49 ] >>74 のプログラムにおいて、ファイルの定義とはどの部分にどのように書き込むものなのですか? 全体のプログラムの中のどこかに隠れているのでしょうか?
101 名前:デフォルトの名無しさん [2006/11/29(水) 21:16:59 ] 次の条件のうちから他の位置の緯度(θ2)と経度(λ2)を求めるプログラムを作成せよ。 1.元の場所の緯度(θ1)を北緯35度40分、経度(λ1)を東経139度12分 2.距離(s)を6242.2kmとする s=R×α°×π/180 (R=6370km) 3.方位角(ν)を86.6度とする sinν=cosθ2×sin刄ノ/sinα (刄ノ=λ2-λ1) (利用できるのであればcosα=sinθ1sinθ2+cosθ1cosθ2cos刄ノを利用してもよい) また、他の方法があるのであればそのプログラムを作成せよ。 正直言って、ちんぷんかんぷんなのです>< わかる方がいればよければ、教えてくださいませんか><
102 名前:デフォルトの名無しさん [2006/11/29(水) 23:12:10 ] >>100 基本的にリンカーに対してライブラリを指定するだけである。 最近のコンパイラは、コンパイラ・ドライバというものが、コンパイラやリンカーなどを 自動的に次々呼び出しているので、そのヘルプをよく読んで、リンカーにライブラリを 指定するオプションを探すべし。 コンパイラ・ドライバには、コンパイラへのオプションと、リンカーへのオプションを 個々に与えることができる。 この辺は、便利になった分かえって昔より何やってるのかわからなくなってる。 >>101 球面三角がんばれw
103 名前:デフォルトの名無しさん [2006/11/30(木) 02:28:58 ] >>101 どうも熱海の島から射程約6000kmのテポドンを発射しているようだが、 方位角(ν)の定義が分からん。もう少し詳しく。 まぁ式が与えられているので情報としてはすでに十分なのだが、 数式から逆算する気力がない。 cosα=sinθ1sinθ2+cosθ1cosθ2cos刄ノ は内積から出た。
104 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 21:33:37 ] >>101 今度は2ちゃんに書いた後mixiですか。
105 名前:デフォルトの名無しさん [2006/11/30(木) 22:25:56 ] >>101 答えは、ハワイのオアフ島だ。 北緯21度24分 西経157度53分だ。 ついでに発射地点は熱海ではなく、八王子のあたりだな。 PROGRAM vipper IMPLICIT NONE REAL :: theta1, theta2, phi1, phi2, alpha, anu, pi REAL :: rot_z(3, 3), rot_y(3, 3), vec1(3), vec2(3) CHARACTER :: ns, ew pi = 4.0 * ATAN(1.0) alpha = 6242.2 / 6370.0 anu = ( 180.0 - 86.6 ) * pi / 180.0 theta1 = ( 90.0 - ( 35.0 + 40.0 / 60.0 ) ) * pi / 180.0 phi1 = ( 139.0 + 12.0 / 60.0 ) * pi / 180.0 ! rot_z(1, :) = (/ COS(phi1), -SIN(phi1), 0.0 /) rot_z(2, :) = (/ SIN(phi1), COS(phi1), 0.0 /) rot_z(3, :) = (/ 0.0, 0.0, 1.0 /) ! rot_y(1, :) = (/ COS(theta1), 0.0, SIN(theta1) /) rot_y(2, :) = (/ 0.0, 1.0, 0.0 /) rot_y(3, :) = (/ -SIN(theta1), 0.0, COS(theta1) /) ! vec1(1) = SIN(alpha) * COS(anu) vec1(2) = SIN(alpha) * SIN(anu) vec1(3) = COS(alpha) ! vec2 = MATMUL(rot_z, MATMUL(rot_y, vec1)) !
106 名前:デフォルトの名無しさん [2006/11/30(木) 22:27:15 ] theta2 = ASIN(vec2(3)) * 180.0 / pi phi2 = ATAN2(vec2(2), vec2(1)) * 180.0 / pi ! PRINT *, theta2, phi2 ns = 'N' IF (theta2 < 0.0) ns = 'S' ew = 'E' IF ( phi2 < 0.0) ew = 'W' PRINT '(i4, a, i2, 1x, a)', INT(ABS(theta2)), ' ', NINT(( ABS(theta2) - INT(ABS(theta2)) ) * 60.0), ns PRINT '(i4, a, i2, 1x, a)', INT(ABS( phi2)), ' ', NINT(( ABS( phi2) - INT(ABS( phi2)) ) * 60.0), ew STOP END PROGRAM vipper
107 名前:105 [2006/11/30(木) 22:29:33 ] ごめん 北緯と南緯の処理が間違ったままの古いのうpしてしまった。 ま、本質は変わらんから適当に処理しておいてくれ。 質問があれば、答えやすく論理的に聞いてくれ。
108 名前:105 mailto:sage [2006/11/30(木) 22:33:40 ] スレ汚し すまんこw 出力結果だ。 21.39687 -157.8804 21 24 N 157 53 W Press any key to continue あと、方位角νは真北から時計回りに測ることとした。 つまり今の問題では、八王子からほぼ真東に、地球の半径とだいたい同じだけ飛ぶと ハワイのホノルル近辺に着くという事だ。 Google Earthで確かめて味噌。定規を使うと2地点間の距離を測れる。
109 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 12:38:00 ] Mixi より vipper の方が上なのかよw
110 名前:デフォルトの名無しさん [2006/12/01(金) 15:04:03 ] >105さんありがとうございます 今日だされた答えを見比べてみたら、合っています!! でも、私が実際にやってみた所たくさんのエラー出てきてどうしようもない 状態です>< 今、私が利用しているのは[fc pad FTR77]というfortran77のものなんですが どうしてエラーが出てしまうのかがよくわかりません>< もしも今回のものがfortran77でないとしたら、今度から実際にやるとしたら どのようなプログラムになるのですか? よければ、教えてください><
111 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 19:50:23 ] 浮動小数点の値がでかすぎて整数型に変えられません ってエラーが出てくるんですが、どうすれば回避できますか? 浮動小数点のままちっちゃくして(10で割るとか)整数型に変えてから10を 掛けるとかすれば回避できると思いますけど(端数は取っといて後で足すとして) こんな妙なことする必要ないですよね… くだすれに書き込むべきかと思いましたが落ちてますよね?
112 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 20:10:12 ] くだすれFORTRAN(超初心者用)その2 pc8.2ch.net/test/read.cgi/tech/1164121236/ それから質問内容は「具体的に」な
113 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 20:28:00 ] >>112 あれ?たってましたか…すみません。 そちらで聞いてきます、ありがとう。
114 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 23:08:57 ] >>110 つ ttp://ace.phys.h.kyoto-u.ac.jp/~tomita/education/fortran90/sec0.html これ見て77に直せ。
115 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 23:14:37 ] >>111 今の一般のFORTRANの整数は32ビットの整数だ。 その場合表しうる数の範囲は−2^31〜2^31−1だ。 2^31=2147483648〜2*10^9→2ギガ だから、これより絶対値の大きい 実数を整数に変換しようとすればエラーが出る。 たとえ10で割ってうまく収まっても10倍したらオーバーフローするので無意味だ。 整数のオーバーフローは検知されないので(オプションにもよるが)実行時エラーが 出ないまま無意味な計算が続くことになる。
116 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 23:23:55 ] >>110 それはFortran90のプログラムだから、Fortran77ではエラーが出るのは当然だ。 ちみは今度からは、くだスレの方に書きなさい。 しかしその程度のレベルで、あの座標回転を使って解いたプログラムを出したら 他人にやってもらったことがバレバレだwww 次からは最初にFORTRAN77でお願いしますと書いておきなさい。
117 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 01:14:47 ] もっと初心者にやさしくしてやれよ。 Fortranユーザーを増やすために。
118 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 04:16:33 ] >>117 同意・・・(どうでもいいがw)
119 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 05:14:42 ] 初心者っつーより只の宿題教えてクンっぽいが。
120 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 18:07:18 ] FORTRAN77 のGOTO文とラベルの嵐に いやになり,暫くC++系に浮気してたが Fortran90当りからまたフォトランナーに戻った
121 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 19:04:12 ] >>120 おかえりなさい。 C言語は、C99,D,C++,ObjectiveC,SecureなCなどに分裂してきているので、 煽ってこの分裂をいっそう深めて、Fortranを有利にしてくれ。
122 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 03:38:34 ] >>121 それを発展ともいうんだがw
123 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:38:37 ] 計算量が増えてきたので、1台パソコンを増やそうとしているのですが、 (現在Pen4 3.6GHz、IntelVisualFortran9.0) 並列計算しそうにないコードなので、CPUの選択に迷っています。 今までPen4あたりのシングルコアで流していた方はこれから どうされるつもりですか? Core2Duoとかどうなんでしょう・・・ 上の方ではCore2Duoの方が速いという書き込みがありますが・・・ 一応予算は1式20万円位を想定しています.
124 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 23:45:38 ] >>122 いや、ハッテンは結構なんだが、うまく同じくらいに枝分かれしてもらえると、内ゲバが始まって 全部衰退してくれて助かる。 あとC派生言語がSecureな方向に向かってくれると、最適化スピードが落ちてやがて自滅するだろう。 バッファーオーバーランの恐怖とかを煽って常にSUBCHKかけたまま走るように仕向けるべし。 JavaやC#などは結局根本的に方向を間違っていると思う。 UCSD p-code Pascalの昔から、VirtualMachineはとてもいいアイデアのように思えて、 それでいてうまく行ったためしがない。スピードがあればエミュレーションで十分だと、むかしから 言われてきたが、スピードが上がると新しい使い方が出てきて、ギリギリのCPU消費が 求められるからうまく行くはずがない。 もっともFortranも規格がどんどん肥大化していてかつてのPL/I型の破滅の道を たどっている気がしなくも無いのだがw
125 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 10:31:13 ] >>124 PL/Iかw VMはわしらのように計算機として使う人には無理だが 普通に遊ぶ程度ならいいんじゃないか? っていうか大丈夫なくらいPCの性能があがったんじゃないか? もちろん、FortranでVM使われたら根本的な間違いだが Javaの方向もアリなんじゃないか? Fortranと用途が重ならないし・・・ ちょっとPL/Iがなつかしくなって書きコ
126 名前:デフォルトの名無しさん [2006/12/05(火) 14:26:13 ] C Pad for Salford FTN77 をつかっていますが、プログラムを実行すると RUN TIME ERROR 00402c50 SOLU [+0174] [recur= 1] 00401000 TDOFS [+09ca] が出ます。 RUN TIME ERRORとはなんでしょうか?? メッセージ欄には 「 Licensed to: FTN77 Personal Edition Department: Non-commercial use only 0001) omega1 theta0 theta1 alph beta theta g()/kG *** Unexpected continuation line (have you got more than 19?) *** Compilation failed ^C 」 とでますが、よくわからないです(−−;) どなたか教えてください!!
127 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 22:54:37 ] >>126 >*** Unexpected continuation line (have you got more than 19?) >*** Compilation failed せっかくコンパイラがメッセージを出しているのだから、ちゃんと読むように。
128 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 00:05:57 ] >>126 まったく>>127 の言うとおりだ。 子供が泣いているのに、かまってやらない育児放棄の母親レベルだ。 漏れの診断では、2chからコピペしたので、6カラム文の字下げをしていない。 そのせいで継続行に勘違いされている。
129 名前:デフォルトの名無しさん [2006/12/06(水) 12:51:58 ] >>127 じゃあ英訳してあげたら?? 子供が泣いているのに、かまってやらない育児放棄の母親レベルだ。
130 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 13:02:29 ] >>129 は母親に黙らせろって怒鳴るだけの親父。
131 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 13:06:14 ] >>130 は事件があった後に インタビューされる近所の人 「よくあの家の子は泣いていましたよ・・・ひどい親ですね ま、私は関係ないんですけど」
132 名前:デフォルトの名無しさん [2006/12/06(水) 13:52:30 ] 最初の人が馬鹿にした口調で書き込むからこんなくだらないレスが続いてしまったよ。
133 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 14:08:59 ] >>132 >>127 は別に悪くないだろ。悪いのは>>128
134 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 14:31:00 ] 悪いのは>>126 。説明を端折った質問をするからこうなる。 「プログラム」が何者かこちらには全く分からない。
135 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 14:33:15 ] とりあえず、俺が悪いよ みんなゴメソ
136 名前:デフォルトの名無しさん [2006/12/06(水) 14:40:20 ] >>134 でも内容も何もわからない人だったら質問をちゃんとしろってのも難しいんじゃないかな??
137 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 20:08:27 ] 質問をしている人間が自分のやってることの内容も何もわからない状態なら、 それこそ答えようがないだろ。 せめて基本的な文法なりソフトの簡単な使い方くらいは自分で調べて それでもダメだったら、何がしたくて何を試したけどどう上手くいかなかったか 程度のことは書いて質問すべきじゃないか。
138 名前:デフォルトの名無しさん [2006/12/07(木) 04:08:19 ] >>137 もっともな意見だが、それが出来ればたいていは自己解決して2chになんか聞きにこなくてすむw
139 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 07:46:51 ] >>137 Exactly
140 名前:デフォルトの名無しさん [2006/12/07(木) 17:42:48 ] >>139 (笑)
141 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 22:56:54 ] Silverfrost (Salford) FTN95 Version 5.00 キタコレ ttp://www.download.com/Silverfrost-FTN95/3000-2069_4-10614581.html?tag=pub ttp://forums.silverfrost.com/viewtopic.php?t=676&start=0&postdays=0&postorder=asc&highlight= .NET 2.0とVisual Studio 2005に対応したらしいが、VS2005は使ってないので詳細は知らん。
142 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 22:06:05 ] Intel FortranでMacアドレス取得する方法ありますか? マニュアル見ても載ってなかったです・・。
143 名前:デフォルトの名無しさん [2006/12/08(金) 23:44:07 ] >>142 C言語でも難しいようだ。標準のWIN32APIでは出来ないので、他の方法をやっているようだ。 安直な方法は、SYSTEM関数でDOSコマンドのipconfig/all を実行し、 その出力からMACアドレスを切り出す方法ジャマイカ?
144 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 23:52:39 ] >>143 やっぱりそうなりますかねー。 自分のOS以外で動作を確かめられないのでちょっと大変;; どうもthx
145 名前:デフォルトの名無しさん mailto:sage [2006/12/09(土) 10:46:49 ] >>142 Three ways to get your MAC address. www.codeguru.com/Cpp/I-N/network/networkinformation/article.php/c5451 Retrieving Information Using GetNetworkParams msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/creating_a_basic_ip_helper_application.asp IPHLPAPIを使ってWindowsでネットワーク設定いじるプログラムを書く www.geekpage.jp/programming/iphlpapi/ この辺だと思うが、PlatformSDKのライブラリをLINKすれば可能なようだ。 しかし自分でインターフェースを書かないと駄目なので難しそう。 TYPEとかの定義が深いので、インターフェースに必要な定義がどれだけあるのかわからん。
146 名前:デフォルトの名無しさん mailto:sage [2006/12/09(土) 17:06:14 ] winだったら昔NetBIOSでとったことがある。
147 名前:デフォルトの名無しさん [2006/12/09(土) 20:54:36 ] PROGRAM MAC USE ifwinty IMPLICIT NONE ! INTEGER, PARAMETER :: MAX_ADAPTER_DESCRIPTION_LENGTH = 128 !// arb. INTEGER, PARAMETER :: MAX_ADAPTER_NAME_LENGTH = 256 !// arb. INTEGER, PARAMETER :: MAX_ADAPTER_ADDRESS_LENGTH = 8 !// arb. ! TYPE :: IP_ADDRESS_STRING CHARACTER (4) :: String(4) END TYPE TYPE :: IP_MASK_STRING CHARACTER (4) :: String(4) END TYPE ! TYPE :: t_IP_ADDR_STRING INTEGER (LPLONG) :: pNext TYPE (IP_ADDRESS_STRING) :: IpAddress TYPE (IP_MASK_STRING) :: IpMask INTEGER (DWORD) :: Context END TYPE !
148 名前:デフォルトの名無しさん [2006/12/09(土) 20:55:07 ] TYPE :: t_IP_ADAPTER_INFO INTEGER (4) :: pNext INTEGER (DWORD) :: ComboIndex CHARACTER (LEN = MAX_ADAPTER_NAME_LENGTH + 4) :: AdapterName CHARACTER (LEN = MAX_ADAPTER_DESCRIPTION_LENGTH + 4) :: Description INTEGER (UINT) :: AddressLength INTEGER (BYTE) :: Address(MAX_ADAPTER_ADDRESS_LENGTH) INTEGER (DWORD) :: Index INTEGER (ULONG) :: iType INTEGER (ULONG) :: DhcpEnabled INTEGER (LPLONG) :: pCurrentIpAddress TYPE (t_IP_ADDR_STRING) :: IpAddressList TYPE (t_IP_ADDR_STRING) :: GatewayList TYPE (t_IP_ADDR_STRING) :: DhcpServer INTEGER (BOOL) :: HaveWins TYPE (t_IP_ADDR_STRING) :: PrimaryWinsServer TYPE (t_IP_ADDR_STRING) :: SecondaryWinsServer INTEGER (ULONG) :: LeaseObtained INTEGER (ULONG) :: LeaseExpires; END TYPE ! INTERFACE INTEGER (BOOL) FUNCTION GetAdaptersInfo(arg1, arg2) USE ifwinty !DEC$ ATTRIBUTES DEFAULT, STDCALL, DECORATE, ALIAS:'GetAdaptersInfo' :: GetAdaptersInfo INTEGER (LPLONG) :: arg1 INTEGER (LPLONG) :: arg2 END FUNCTION END INTERFACE
149 名前:デフォルトの名無しさん [2006/12/09(土) 20:56:42 ] ! TYPE (t_IP_ADAPTER_INFO) :: AdapterInfo(16) TYPE (t_IP_ADDR_STRING) :: CurrentIpAddress INTEGER (DWORD) :: dwRetVal INTEGER (PULONG) :: pdwRetVal INTEGER (BOOL) :: iret CHARACTER (LEN = 128) :: Description dwRetVal = sizeof(AdapterInfo) iret = GetAdaptersInfo(LOC(AdapterInfo), LOC(dwRetVal) ) !PRINT *, AdapterInfo(1)%pNext !PRINT *, AdapterInfo(1)%ComboIndex !PRINT *, AdapterInfo(1)%AddressLength !PRINT *, AdapterInfo(1)%Description(1:128) PRINT '(6Z3)', AdapterInfo(1)%Address(1:AdapterInfo(1)%AddressLength) !PRINT *, AdapterInfo(1)%IpAddressList !PRINT *, AdapterInfo(2)%pNext !PRINT *, AdapterInfo(2)%ComboIndex !PRINT *, AdapterInfo(2)%AddressLength !PRINT *, AdapterInfo(2)%Description(1:128) PRINT '(6Z3)', AdapterInfo(2)%Address(1:AdapterInfo(2)%AddressLength) !PRINT *, AdapterInfo(2)%IpAddressList STOP END PROGRAM MAC とりあえず、これでMACアドレスが取れた。
150 名前:デフォルトの名無しさん [2006/12/09(土) 21:09:05 ] >>142 雪が降っていたので暇つぶしにがんばってみた。 4時間ぐらいかかったが、MACアドレスがIntelFortranで取れた。 方法は>>145 の1番目のリファレンスの3番目の方法を用いた。 型などは、2番目のMSDNに書いてある情報から自分で適当に作ってみた。 TYPEのサイズがC++版で求めているのと一致したので多分OKだろう。自信はないw 漏れはメインフレーム育ちの生粋のFORTRANerで、CもC++はHelloWorld以上のものは 書いたことが無いので、文字列とかポインターの扱いとかが今一自信がない。 コンパイルに必要なのはPlatformSDKだが、漏れはインストールのときに 勝手にインスコされていたようだ。この中のライブラリ IPHlpApi.lib をライブラリに 加えておく必要がある。 Linker>Input>Additional Dependency に、そのまま書けばOKだった。 プロジェクトタイプはコンソールでおk。 >>146 >>145 の記事によるとNetBiosから取る方法は、最近は推奨されないらしい。 ただし取り方は書いてあった。
151 名前:150 [2006/12/09(土) 22:27:56 ] >>149 のメインプログラム部分は、以下に直しておいてくれ。 デバッグ用のゴミを削った。複数のネットワークアダプタにも(とりあえず16個以下だが)対応。 TYPE (t_IP_ADAPTER_INFO) :: AdapterInfo(16) TYPE (t_IP_ADDR_STRING) :: CurrentIpAddress INTEGER (DWORD) :: dwRetVal INTEGER (BOOL) :: iret INTEGER :: i dwRetVal = sizeof(AdapterInfo) iret = GetAdaptersInfo(LOC(AdapterInfo), LOC(dwRetVal) ) IF (iret /= 0) STOP 'Error' DO i = 1, 16 PRINT '(5(Z2.2,"-"), Z2.2)', AdapterInfo(i)%Address(1:AdapterInfo(i)%AddressLength) IF (AdapterInfo(i)%pNext == NULL) EXIT END DO STOP END PROGRAM MAC
152 名前:デフォルトの名無しさん [2006/12/12(火) 14:31:56 ] compaq visual fortran 6.1を使っています。 1つのプロジェクトの中のsource fileのなかには、二つ以上プログラム ファイルを入れてはだめなのでしょうか?ためしに片方のプログラム をコンパイルすると実行時に引っかかってしまいます。 一つを消すと上手くいくのですが…。 では平行して二つのプログラムを作りたい場合どうすればいいのでしょうか? どうかご返答お願いします。
153 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 18:50:15 ] >>152 コードを変更するときには、ワークスペースも変更する必要があるはず。 手っ取り早くするには、コード変更=CVF を一旦終了。
154 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 23:08:08 ] >>152 実行ファイル毎にProjectを作成して、1つのWorkspaceに'Insert Projects into Workspace'で Projectを追加、または'Add New Project to Workspace'で新しいプロジェクトを追加する。 Buildするときは'Set Active Project'でProjectを選んでからBuildするか または'Batch Build'でまとめてBuildする。 CVF6.6の場合だが、6.1でもたぶん同じだろう。
155 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 20:25:50 ] >>153-154 親切にありがとうございました。 ちょっとvisual fortran自体はじめて使ったもので よく分かりませんでしたが聞いて解決しました
156 名前:デフォルトの名無しさん mailto:sage [2006/12/15(金) 20:33:57 ] ノートパソコンでLAPACKコンパイルすると ファンがぶんぶん回ってうるさいよ〜
157 名前:デフォルトの名無しさん mailto:sage [2006/12/16(土) 01:01:54 ] >>156 LAPACKで計算をするうようになれば同じこと。
158 名前:デフォルトの名無しさん [2006/12/18(月) 16:58:00 ] 下記の文章をfortran77で表すとどうなるか、教えていただけませんか? ex=2.0**((-1)*(l+1)) i=0 k=0 do 210 while(i.lt.n) i=i+1 k=k+1 if(k.gt.p)then call delay(ivw,p,q,j) else j=k end if if(ivw(j).ne.0) then a(i)=ivw(j)*ex else i=i-1 end if 210 continue
159 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 17:45:37 ] >>158 whileのループをgoto文を使って書いたら?
160 名前:デフォルトの名無しさん [2006/12/18(月) 23:10:13 ] 計算終了時に、携帯電話へメールで知らせてくれるってことできますか??
161 名前:デフォルトの名無しさん [2006/12/18(月) 23:13:01 ] >>160 シェルスクリプトを書けばいい。
162 名前:f90 mailto:sage [2006/12/19(火) 13:07:00 ] do if(i>=n) exit i=i+1 k=k+1 if(k>p) then call delay(ivw,p,q,j) else j=k end if if(ivw(j)/=0) then a(i)=ivw(j)*ex else i=i-1 end if enddo
163 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 15:45:48 ] Intel fortran9.1使ってるんだけど、system()で定期的に外部プログラムを呼ぶとコミットチャージが時間とともに増え続けてしまうという 症状に悩まされていた。ところが、system()の代わりにsystemqq()を使うと、その症状が出なくなった。 こんな経験した人いる?
164 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 01:03:54 ] SYSTEMってPOSIX互換のルーチンかい? SYSTEMQQはQUICKWINからみか? どっちも使わんなぁw
165 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 20:44:11 ] >>164 じゃあ、外部コマンド起動したいときはどうやってるの?
166 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 00:31:25 ] 外部コマンド呼ばないw Win32で出来る物はWin32でやる。 できないものは諦めるw
167 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 00:48:23 ] コンソールアプリ無視していきなりWin32かよw
168 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 01:26:17 ] おまいら仲良くやれよ スクリプトで妥協しとけw
169 名前:デフォルトの名無しさん [2006/12/28(木) 23:25:36 ] オッペン化粧品! OpenMPのいい参考サイトか本はアルカイダ? あぁそれとMPIにしろとか言うなヨーロッパ。
170 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 23:46:15 ] コンパイラの自動並列化だけでがまんs 俺も教えて欲しい。 尼損で検索したら、和書は1冊しか無かった・・・
171 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 00:00:47 ] >>169 いやさ、さっぱり自動並列化されないから、少し知恵をつけてやるかと思って。 2CPUシングルマシンで軽く行きたい。 QuadCoreを買う口実も欲しいw
172 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 03:02:52 ] えー、かなり漠然とした質問ですがちょっとアドバイスをもらえませんか? ある元となる計算コードでは、セルの幅や高さがすべての領域で一定です。 計算する領域は長方形で、 NCX:セルの行(X方向) NCY:セルの列(Y方向) CW:列方向へのセルの幅 CH:行方向へのセルの幅 といった感じです。 また、それぞれのセルには通し番号が割り振られています。 (最初の行を小さいほうから順に1.2.3…と割り振っていって 端に行ったら次の行に移ります) ↑Y 9....... 5678 1234 →X このコードを元に、任意の列以降でセルの大きさを縦横それぞれ 半分にする(面積を1/4)にして(もちろん以降の行、列数は倍になります) 計算するプログラムを書きたいと思います。セルの大きさの変化は何段階か行われます。 (具体的にはY座標依存のある物理量と比較してセルを小さくするかどうか判別します)
173 名前:172 mailto:sage [2006/12/29(金) 03:03:23 ] (続き) しかし、元のコードには例えばセルが何行、何列目かを判別するために NY=(N-1)/NCX+1 NX=N-(NY-1)*NCX のような表現が多様されています。(Nはセルの通し番号) また、逆に行や列の指定からセル番号を判別するようなものもありますし、 座標指定に X=NY*CH みたいな事もしています。 NCX,NCY,CW,CHを配列にして、初期の大きさのセルの領域の行、列数を NCX(1)、NCY(1)に、次の大きさのセルの行、列数をNCX(2)、NCY(2)に、 というようにセルの大きさで領域を分けて考えよう、と思ったのですが、 あるセルが何番目の領域に属するかをいちいち判別するのもめんどくさいですね。 ちょっと上記の判別の式が複雑になってきてしまいます。 (ループで非常に何度も通るところなので出来るかぎり簡単にしたいです) 各セルが何行何列目に属するかと何番目の領域に属するかを 配列に格納しておけばいいかとは思いますが、 プログラムの経験が浅いこともありかなり無駄なことをしていないか不安になってきました。 既存の構造を生かしたり(置換するだけですぱっと終了とか) あまり余計なものを追加しないエレガントなやりかたってありますかね? やっぱり地道にやるしかないでしょうか?長文すみません。
174 名前:172 mailto:sage [2006/12/29(金) 03:14:28 ] すみません、 (誤)X=NY*CH (正)Y=NY*CH です。
175 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 20:26:22 ] >>173 サイズに依存する。 小さいならいったん既存の計算式で求めたセルサイズをテーブルとして保存すればよい。 サイズが大きくてメモリーギリギリまで使っているなら、1回ごとに計算するほうがいい。 567 238 のちな形でサイトを指定してもいいなら、判別の計算式も簡単になるかもしれない。 149 計算機学科の人からはしかられるが、高速でやるにはデータ構造と処理が 切り離せないので、まぁ問題を理解し整理して自分で良く考えろw
176 名前:172 mailto:sage [2007/01/05(金) 18:17:30 ] >>175 遅レス申し訳ない。有難うございます。 やっぱりある程度地道にやるほか無さそうですね。 しこしこやってます。
177 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 20:38:06 ] 若干Fortranから逸れますが、わかる方ご教授ください。 IntelのVisual Fortranで作成したコンソールアプリから VCで作ったLibファイルを呼び出したいです。 簡単に書くと、VCは BOOL PrintMessage() { 中略 } という関数になっています。 これをFortranから呼び出すために、 自分なりにマニュアルを読み、 以下のようにコーディングしてみました。
178 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 20:39:25 ] INTERFACE LOGICAL FUNCTION PrintMessage() !DEC$ ATTRIBUTES STDCALL :: PrintMessage END FUNCTION END INTERFACE LOGICAL LX LX = PrintMessage() しかし、リンク時に_PrintMessageが見つかりません、と リンクエラーが出ます。 解決方法はあるでしょうか? なお、VCから上記VCを呼び出すケースもあるため、 両方Fortranで書けば?というのは無しでお願いしたいです。 一応環境としては、 Visual Studio .NET 2003 + Intel Visual Fortran v9.0 になります。 よろしくお願いします。
179 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 00:52:12 ] >>178 呼び出し規約がSTDCALLの場合、外部名はデフォルトですべて小文字と解釈されてしまうので 大文字・小文字が混在する場合は以下の様にする !DEC$ ATTRIBUTES STDCALL, DECORATE, ALIAS: 'PrintMessage' :: PrintMessage C側の PrintMessage() 関数も __stdcall でコンパイルされている必要がある。 C++の場合は extern "C" も必要。 また、IVFではLOGICALの内部表現(整数値)が奇数のとき真、偶数のとき偽となるので 他言語の関数とLOGICALを受け渡しする場合は注意すること。
180 名前:178 mailto:sage [2007/01/09(火) 21:34:40 ] >>179 レスありがとうございます。 なるほど・・。 F側の大文字小文字対策はマニュアルに書いてありましたが、 いろいろ調整しても結果が同じだったので関係ないと思ってました。 C側の対策は全く見えてませんでした^^ 正直Cはド素人なので上記のようにいわれてすぐに対応できませんが 参考にして調べてみます! ありがとうございました。
181 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 23:27:06 ] >>180 IntelFortranのマニュアル見るとちまちまと書いてあるよ。 DECORATE修飾子が新設されたので、DEC時代に場合分けして書いていたのが すっきりしてうれしい。
182 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 19:42:57 ] >>180 ATTRIBUTES STDCALL, ... ではなく ATTRIBUTES C, ... を使えばC言語の方はいじらなくてもおk。
183 名前:デフォルトの名無しさん [2007/01/12(金) 23:52:31 ] 三つの数値データを与えてその三つの数値の最大値、最小値、中央値、 平均値、標準偏差、不偏分散を求められるプログラムを作成せよ。 わからなくて大変です。 お願いします
184 名前:デフォルトの名無しさん [2007/01/16(火) 12:41:49 ] Fortressどう思います? 数式をそのまま書けるとか、並列化にコンパイラレベルで対応とか・・・ なかなかよさそげですが。 ttp://japan.zdnet.com/news/devsys/story/0,2000056182,20340715,00.htm ttp://slashdot.jp/developers/07/01/15/1521236.shtml
185 名前:デフォルトの名無しさん [2007/01/16(火) 12:45:26 ] >>183 てっとりばやく答えが欲しいなら pc10.2ch.net/test/read.cgi/tech/1164121236/ に行くといいのでは?
186 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 20:18:01 ] 既に答えが出てる。 ていうかマルチ。
187 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 03:15:36 ] >>184 Fortranの資産使えないのにFortran風にする意味がいまいち良く分からん。
188 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 12:05:30 ] >>184 pseudocode をそのままコンパイルしてくれるならうれしい。
189 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 12:55:53 ] >>187 え、使えないの?
190 名前:デフォルトの名無しさん [2007/01/19(金) 23:38:03 ] Salford ftn95でlapack95を使いたいねんけど、どーすればいいん??
191 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 00:43:01 ] >>190 1.NetlibからLAPACKを拾ってくる。 2.どうにかしてblas.libとlapack.lib
192 名前:デフォルトの名無しさん [2007/01/20(土) 00:44:49 ] >>190 1.NetlibからLAPACKを拾ってくる。 2.どうにかしてblas.libとlapack.libをつくる。 3.NetlibからLAPACK95を拾ってくる。 4.どうにかしてlapack95.libとモジュールファイルをつくる。 5. > ftn95 hoge.f90 6. > slink hoge.obj lapack95.lib lapack.lib blas.lib
193 名前:デフォルトの名無しさん [2007/01/20(土) 08:07:50 ] >>192 どもども! どうにかしてってところが問題だが、どうにかしてみます。 どうにかする方法がわかったら、またよろしゅ〜!
194 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 11:45:48 ] 77で動的配列ってできないの? x(i,j) ってしといて ファイルからi,j読み込んでサイズ決めるみたいな感じにしたいんだけど・・
195 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 13:15:50 ] >>194 言語規格としては出来ない。 ただ、コモンとか上のルーチンで大きなワーク配列を取っておいて、 いったん必要なサイズを知った上で下のサブルーチンで作業領域で整合配列を 切って使って似たようなことは出来る。 C言語もK&Rの付録を見るとmallocをそういう感じで実現する例を出している。
196 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 13:38:47 ] 90ならポインター使える。 PGIとか77でもポインター使える処理系もある。 ポインターの使えない77でもCとの合わせ技で可能。
197 名前:デフォルトの名無しさん [2007/01/20(土) 16:25:44 ] >>193 LAPACK(BLAS): ・netlibから lapack-3.1.0.tgz を取ってくる。 blas.lib: ・lapack-3.1.0\BLAS\SRC の中のソース(*.f)を全部コンパイルする。 ・出来たオブジェクトファイルを slim で blas.lib にまとめる。 slim *.obj /file:blas lapack.lib: ・lapack-3.1.0\INSTALL の中の dlamch.f, dsecnd.f, ilaver.f, lsame.f, second.f, slamch.f を lapack-3.1.0\SRC にコピーする。 但し、FTN95には second.f, dsecnd.f で使われている ETIME関数が無いので ETIMEを自作するか CPU_CLOCK, SYSTEM_CLOCK辺りを使って書き換える。 ・lapack-3.1.0\SRC の中のソースを全部コンパイルする。 この際、slaruv.f, dlaruv.f をコンパイルするときは最適化オプションを外す。 ・出来たオブジェクトファイルを slim で lapack.lib にまとめる。 tmglib.lib: ・lapack-3.1.0\TESTING\MATGEN の中のソースを全部コンパイルする。 この際、slaran.f, dlaran.f をコンパイルするときは最適化オプションを外す。 ・出来たオブジェクトファイルを slim で tmglib.lib にまとめる。
198 名前:デフォルトの名無しさん [2007/01/20(土) 16:27:59 ] (>>197 の続き) LAPACK95: ・netlibから lapack95.tgz を取ってきて展開する。 ・lapack95\SRCに移動。 ・la_auxmod.f90 をコンパイルする。 → la_auxmod.mod, la_precision.mod が出来る。 ・f77_lapack_single_double_complex_dcomplex.f をコンパイルする。 → f77_lapack.mod が出来る。 ・f95_lapack_single_double_complex_dcomplex.f をコンパイルする。 → f95_lapack.mod が出来る。 ・la_csygst.f90, la_csygv.f90, la_csygvd.f90, la_csytrd.f90, la_zsygst.f90, la_zsygv.f90, la_zsygvd.f90, la_zsytrd.f90 以外の la_*.f90 をコンパイルする。 ・出来たオブジェクトファイルを slim で lapack95.lib にまとめる。 以上で出来たライブラリファイル(*.lib)を環境変数 LIB で指定したフォルダへ、 モジュールファイル(*.mod)を環境変数 MOD_PATH で指定したフォルダへそれぞれ移す。
199 名前:デフォルトの名無しさん [2007/01/20(土) 17:04:13 ] 関数名を引数に使いたいのですが、EXTERNAL文を呼び出し側で使っても うまくいきません。 下のプログラムなのですが、何処が間違っているんでしょう? External func real func,SUM write(*,*) SUM(func) end real Function SUM(f) External func real f SUM = f(1.0)+f(2.0) return end real Function func(x) real x func = x return end
200 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 19:15:37 ] >>199 SUM() がF90の関数と混同されているんで内科医? SUM0とかにすればおK
201 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 19:22:59 ] >>199 External func → external func, SUM
202 名前:199 mailto:sage [2007/01/20(土) 22:07:45 ] >>200 >>201 、ご指摘の方法で解決することが出来ました。 有難うございます。
203 名前:デフォルトの名無しさん [2007/01/20(土) 22:37:50 ] >>197 ,198 ありがとう〜、格闘の末何とかなりました。 オレもあんたくらい、pcを自由にあやつりたいもんですわ!
204 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 00:37:48 ] 本来ならMakefileを書いて、テストプログラムも含めてmake(MK32)で処理させるべきなのだろうけど FTN95の場合、他のコンパイラとオプションの指定方法が違ったりするから中々面倒くさい。
205 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 07:14:03 ] 質問です。 OPEN (4,FILE=RESULT.OUT,FORM='FORMATTED') このRESULT.OUTを、あるIと言う数値を読み込んで 例えばI=5000ならRESULT5000.OUTのようにしたいんですが、 出来るでしょうか?要するに計算のステップ数に応じて 自動的にファイル名をつけて出力してやりたいんですが、 OPENの中身をいじるだけじゃダメですかね?
206 名前:デフォルトの名無しさん [2007/01/26(金) 10:04:30 ] >>205 その質問は千回くらい出ている。 過去ログ見れ
207 名前:デフォルトの名無しさん [2007/01/28(日) 18:26:34 ] 自分のマシンのフォートランコンパイラコマンドを汁にはどうしたら良いですか? VINELINUX使ってます。
208 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 20:37:47 ] >>207 shell に g77 とか gfortran とか g95 とか ifort とか入れてみる。 使えるようなら no input files などと返ってくる。 なけりゃ自分でインストロールする。
209 名前:デフォルトの名無しさん [2007/01/28(日) 21:47:58 ] 全部使えませんでした。 ifortいれたいのですが、どこでダウンロードできますか?
210 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 21:54:39 ] >>209 つ google
211 名前:209 [2007/01/28(日) 22:35:38 ] 何度もすみません。 インテルのコンパイラ入れようとしたら下記のメッセージで止まってしまいます。 解決方法を御存じのかたは教えてください。 ./.././data/install_fc.sh: line 1459: ERROR: unable to find command "ls" !: command not found ./.././data/install_fc.sh: line 1463: Please add the location to the above commands to your PATH and re-run the script.: command not found ./.././data/install_fc.sh: line 1464: Please press Enter to continue...: command not found
212 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 22:39:51 ] >>211 > 解決方法を御存じのかたは教えてください。 夜間中学で英語を学びなおす。
213 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 22:48:29 ] つーか lsが見つからんて、どんな環境やねん
214 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 00:02:48 ] >>211 ttp://www.google.co.jp/search?hl=ja&q=%22unable+to+find+command%22&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
215 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 01:02:12 ] EclispのPhortranってどうよ? とくにLinux上のIntelコンパイラとの組み合わせの使い心地 知りたい
216 名前:デフォルトの名無しさん [2007/02/03(土) 07:25:11 ] Mac OS X 上のgfortran 4.0でコンパイルした時に gfortran: spec failure: unrecognized spec option 'M' というエラーがでるのですが何がまずのでしょう? ちなみに他のマシン(LINUX)のgfortranでは エラーはでません。一応、走るのですが、writeでposition='append'を指定しても既存ファイルに データを付け加えず、完全に上書きしてしまうので困っています。ちなみにLINUX上では うまく行きます。
217 名前:209 [2007/02/04(日) 11:51:06 ] >>214 ありがとうございます。 感謝します。
218 名前:デフォルトの名無しさん [2007/02/15(木) 00:11:54 ] NAGのFortranBuilderのNAGFortran95コンパイラのVersionって5.0?それとも5.1? 5.1なら買いたいんだけど、誰か知ってる人いる?
219 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 15:57:03 ] 全角英数は気持ち悪いというセンスを身に着けてから出直してくれ。
220 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 19:36:46 ] >>219 おい、おまえ 同感
221 名前:デフォルトの名無しさん [2007/02/17(土) 00:00:33 ] >>219 ごめん 訂正させてもらう NAGのFortranBuilderのNAGFortran九五コンパイラのVersionってX.0?それともX.T? X.Tなら買いたいんだけど、誰か知ってる人いる? 全角漢数字かローマ数字をつかえばいいわけだろ?
222 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 00:07:15 ] つまらん
223 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 00:22:25 ] フォートランって今でもリアルに使ってるとこあるのか?w 本物のプログラマは〜、の時代でもすでに時代遅れのダメ言語だったのに
224 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 01:16:58 ] >>223 おまえ、ちょっとそこに正座しろ。 この世間知らずがw いいか、電子計算機の本流はFortranだぞ! スパコン・ランキングの機械で動いているプログラムは基本的にFortranだ。 大体マルチコアで並列化といっているが、MPIもOpenMPも対応コンパイラはFortranか Cしかなくて、Cはあくまでおまけだ。大多数の人間はFortranでプログラム書いてる。 これから並列化が主流になるにつれ、Fortranの天下が再びやってくるのは間違いない! 悔い改めよ!さもなくば地獄の業火に焼かれるべし! 詳しくはマタヨシイエスのサイトを熟知すべし。
225 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 01:22:52 ] 唯一神Fortran
226 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 01:36:08 ] >>221 「全角英数」の意味がわかるようになってから出直してくれ。
227 名前:デフォルトの名無しさん [2007/02/17(土) 01:43:01 ] >>216 gfortran どやっていれたんですか? 俺のmacにははいってないんだてど
228 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 01:53:16 ] >>227 君のMacはハズレだったんだよ。
229 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 01:54:03 ] >>226 おまいら,うぜーから他所でやれ.
230 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 10:54:58 ] >>229 うるせー、>>218 や>>221 のようなグロは見たくねーんだよ。
231 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 23:09:57 ] 最近くだスレのほうがレベルが高いなw
232 名前:デフォルトの名無しさん [2007/02/21(水) 15:40:26 ] >>218 5.1を搭載
233 名前:デフォルトの名無しさん [2007/02/21(水) 22:54:23 ] >>232 dクス! nagのサイトに調べにいったんだが、Windows用はまだ5.0だったので、だめかと思ったが。 安いやつ買って見っかー でもライセンスがウゼーんだよな。
234 名前:デフォルトの名無しさん [2007/02/25(日) 00:31:39 ] Intel Visual Fortran 9.1に付属してくるデバッガ(idb)の詳しい日本語の資料や書籍ってないんでしょうか?
235 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 17:39:49 ] エクセルソフトがコンパイラマニュアルの日本語訳を出していたが、デバッガもあったかな?
236 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:30:36 ] >>235 XLsoftから日本語マニュアルを落としてみましたが、 詳しく載っているのはVisual StudioでのデバッグだけでIDBについては主要なコマンドの説明のみでした。 >IDB に関する詳細は、[スタート] メニューから利用可能なインテル・デバッガーのオンラインマニュアル (英語) を参照してください。 とのことで・・・このマニュアル、完全に日本語訳されてる訳じゃないんですね。 Language Referenceとか英文のままだし。
237 名前:デフォルトの名無しさん [2007/03/11(日) 12:16:05 ] >>236 ttp://www.xlsoft.com/jp/products/intel/compilers/compiler_j.html 日本語版スペシャルエディションでもなんか中途半端だし、しょうがないんじゃない? コンパイルする時のオプションてなに使ってる?/O3とか普通に使って大丈夫なのかな・・・
238 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 12:20:26 ] Interl Visual Fortranのデバッガは糞だと思う。HPやCompaqの頃までのが一番良かった。
239 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 15:45:54 ] Compaq Visual Fortranの頃はVisual Studioのデバッガだけじゃなかったっけ
240 名前:デフォルトの名無しさん [2007/03/11(日) 17:16:03 ] idbは概ねUNIX/Linuxのdbx/gdb互換(のコマンド体系)なので これらについて書かれた資料を探せば参考になるかも知れん。 >>237 >/O3とか普通に使って大丈夫なのかな・・・ 同時にデバッグ・オプションも付けとけばとりあえずおk、だが 最適化による命令の並べ替えやループのアンロールなどの影響で ソースファイル通りにトレースできなくなる所が出てくる。
241 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 19:28:32 ] >>240 インテル・コンパイラはデバッグオプションつけても自動的に最適化は抑止されないのか?
242 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 20:07:27 ] >>241 ifort /debug:full hoge.f90 のようにデバッグ・オプション(/debug:full)だけ付けて最適化の指示を省略すると すべての最適化が無効になる。 ifort /debug:full /O3 hoge.f90 のように最適化を明示(/On)すると、最適化した状態でデバッグ情報の生成を行う。
243 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 22:03:02 ] >>242 そういった資料はどこかにあるものだろうか? 必死こいてググって見たがイマイチよく理解できなくて・・・ 何かよいものがあれば教えてください
244 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 22:43:38 ] >>243 XLsoftからDL出来る日本語マニュアルから。 >>242 の内容なら、「アプリケーションのビルド」−「Debugging」−「デバッグと最適化」の所に載っています。
245 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 23:44:47 ] >>244 まさかそんなところに!! ありがとうございます、熟読してきます。
246 名前:デフォルトの名無しさん [2007/03/20(火) 19:03:09 ] ジョン・バッカス追悼age John W. Backus, 82, Fortran Developer, Dies John W. Backus, who assembled and led the I.B.M. team that created Fortran, the first widely used programming language, which helped open the door to modern computing, died on Saturday at his home in Ashland, Ore. He was 82. ttp://www.nytimes.com/2007/03/20/business/20backus.html?_r=2&hp=&adxnnl=1&oref=slogin&adxnnlx=1174384848-yna0f27jrkZeyETCJGvVNQ
247 名前:デフォルトの名無しさん [2007/03/21(水) 11:13:38 ] 【訃報】コンピュータ言語「FORTRAN」開発者、ジョン・バッカスさん死去…米・オレゴン州 news22.2ch.net/test/read.cgi/newsplus/1174440079/
248 名前:デフォルトの名無しさん [2007/03/21(水) 13:16:33 ] ジョンさん、懐かしい
249 名前:デフォルトの名無しさん [2007/03/21(水) 14:02:59 ] 【訃報】ジョン・バッカスさん死去 コンピューター言語「FORTRAN」開発 news23.2ch.net/test/read.cgi/news/1174434397/
250 名前:デフォルトの名無しさん [2007/03/21(水) 14:50:05 ] バッカスって酒飲みの
251 名前:デフォルトの名無しさん [2007/03/23(金) 19:54:29 ] すいません、初心者です。 ↓のようなデータを画面に出したいのですが 参考プログラムを教えていただけませんか? 1964/1/1 115 89 80 81 104 154 209 256 287 298 285 260 229 199 176 170 189 1964/1/2 155 111 89 81 91 124 171 227 266 293 292 274 252 221 190 174 181 1964/1/3 191 147 112 92 94 113 151 194 241 271 290 283 267 241 214 189 176 1964/1/4 222 185 147 117 101 107 134 168 208 248 274 284 274 256 233 208 185 1964/1/5 238 213 184 156 134 127 139 164 193 227 259 276 274 267 249 226 204 1964/1/6 248 234 214 190 165 151 149 161 181 206 234 257 267 266 257 243 222 1964/1/7 234 236 229 215 199 184 175 175 184 203 224 241 256 264 259 248 233 1964/1/8 216 228 234 229 221 213 203 192 190 197 210 225 239 252 258 254 243 1964/1/9 193 212 227 237 238 231 220 209 199 194 195 205 217 232 243 250 246 1964/1/10 163 181 203 226 238 243 240 229 217 205 195 196 202 215 232 245 251
252 名前:デフォルトの名無しさん [2007/03/24(土) 07:34:06 ] 開発者死んだのにお前ら流石にスルーし過ぎw
253 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 10:32:06 ] >252 手は合わせたが、2chで語る話題でもなかろう。
254 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 22:54:12 ] >>252 バッカスのヤオイ同人でも作ればいいのか?
255 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 23:23:03 ] まあ、バッカスさん自身はあまりFORTRANを好きじゃなかったみたいだしな。
256 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 08:28:32 ] writeをつかってバイナリデータを書き出しているのですが、 マシンによって出力されるバイナリが微妙に違い、 互換性のないバイナリファイルができてしまいます。 どのマシンでも共通のバイナリファイルを読み書きできるようにするには どのようにしたらよいのでしょうか?
257 名前:デフォルトの名無しさん [2007/04/10(火) 10:59:24 ] >>256 無理言うなw どうしてもやりたければ、自分でビット列を生成して、それを1文字にして書け。 それでもあわせるのは不可能。 テキスト文字で出してIBM単密度形式の磁気テープでやり取りするのが一番確実だ。 大体、マシン毎にワード数(バイト数)が異なる場合がある。 昔のACOSは9ビット、CDCも妙なワード長だった。 文字コードにしても、IBM互換のEBCDIC系と(ただしメーカー毎に微妙に違う)、 DECやACOSのASCII系などが入り乱れている。 数値のフォーマットは会社毎にマシン毎にコンパイラ毎に異なるのが普通だ。 さらにはIBM、モトローラ系列BigEndianビット列LittleEndian、DEC、Intel系のLittleEndian系に 分かれている。これらもビット並びでさらに分裂するらしい。 とはいえ、明るい話もある。数値計算の世界では、もはやACOSもCDCもほとんど使われていない。 EBCDICもめったに見なくなった。ワード長は32ビットが普通だし、1バイトは8ビットに統一された。 数値のフォーマットもIEEE754にほぼ統一された。 残る問題はエンディアンだけだ。そのエンディアンすらコンパイラのオプションで大抵は、マシンの 自然体に関わらず、Big/Littleのどちらでも読み書きできるのが普通だ。 ゆえに、『エンディアン』をマニュアルで調べれば、チミの問題は解決する。
258 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 19:09:47 ] インテルのフォートランコンパイラifortを使ってコンパイルしています。 CPUはOpteronなのですが、-xWオプションをつけないとSSEやSSE2は全く使用されないのでしょうか?
259 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 00:11:39 ] >>258 デフォでは使用されなかったと思う。詳しくはHelpで確かめよ。 SSEは厳格にはIEEE754の規約を満たしていないせいか、 あるいは全バイナリー対応のためか?w
260 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 00:22:30 ] Mac用は-xPがデフォルトの様だから互換性のためなんでしょうね。
261 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:06:13 ] FORTRANで書き出したバイナリファイルの読み出し方は分かるのですが、 実験機器がはき出したバイナリファイルを読み込むにはどうしたらよいのでしょうか? なお、FORTRANで書き出すと、今使っているマシンでは先頭に4バイトほどの識別データが付加されますが、 実験機器がはき出したバイナリファイルにはこれがついていません。
262 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 17:43:14 ] >>261 ファイルをOPENするときに form="binary" としたり (処理系依存) access="stream" としたり (Fortran 2003)
263 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 02:58:02 ] >>261 DIRECT形式を使って書くという裏技がある。昔のコンパイラでやるにはこれか。 ただ今は>>262 の書くように、F2003拡張の先取りでSTREAMモードが大抵あるのでそれを使うがよろしい。
264 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 21:39:29 ] 面倒なのでCで読み込む。
265 名前:デフォルトの名無しさん [2007/04/25(水) 16:57:37 ] STDCALL の関数を g95 から呼びたいのですが、どうするのがよいでしょうか。
266 名前:デフォルトの名無しさん [2007/04/25(水) 21:35:56 ] >>257 >1バイトは8ビットに統一された。 以前は統一されてなかったの?
267 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 22:37:47 ] >>266 あらゆるものが統一されていなかった。
268 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 14:36:07 ] 今は統一されているといっていいのか?
269 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 16:02:16 ] まあ昔に比べれば
270 名前:デフォルトの名無しさん [2007/05/07(月) 06:10:19 ] fortranで webの結果を得ることできる? get www.hoge.com を行い 結果をファイルに残す あるいは、戻り値 403 not found かどうかの判定とか。 Linux *g77 です
271 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 06:15:37 ] できなくはないだろうけど、 別の言語を使った方がいいと思う。
272 名前:デフォルトの名無しさん [2007/05/07(月) 08:01:53 ] うわ、返事はや! ありがとう。 自由自在に書ける言語がFortranとVB系以外のbasicなんです。 検討してみます
273 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 10:14:30 ] >>270 表示するだけならこんなので動くと思うけど web2console.py ---------------------------- #!/usr/bin/env python import urllib conn = urllib.urlopen("www.yahoo.co.jp/" ) data = conn.read() print data ---------------------------- F2PY - Numerical Analysis with Python scipy.dip.jp/index.php?F2PY nihongo.homeip.net/word/scipy/ じぶんは fortran は使ったことないからよくわからないけど fortran ともそれなりに相性も良いみたいだね…(正直よくわからん)
274 名前:デフォルトの名無しさん [2007/05/07(月) 11:18:23 ] >>270 外人がg77でのやり方を解説しているページがある。 環境変数を使って変数のやり取りをしていた。 LINKがみつかんねーw fortran cgi でググルと色々引っかかる。
275 名前:274 mailto:sage [2007/05/07(月) 11:24:19 ] >>270 ああごめん。 FORTRANでサーバー側のCGIを書くのかと思ったが逆か。 クライアントを書きたいのか。 Windows なら WinInet.Lib+Intel Visual Fortranでなら出来る。 Linuxでもその類のDLLをFortranから呼び出せば何とかなるのではないか?
276 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 13:33:07 ] 【科学技術計算】C言語とFortran どっちがいい? science6.2ch.net/test/read.cgi/sim/1042715803/ 629 名前:名無しさん@5周年[] 投稿日:2007/05/08(火) 07:49:36 FortranかCかなんて議論は馬鹿げているよ。 Fortranなんてもはや化石言語。 だから消去法でCを選ぶ他ない。 しかし君たち。 実はもっとも身近で簡単な科学計算用言語があるのだ。 それがExcelVBA。 答えは案外足元にあったわけだ。 いわゆる青い鳥ってやつだね。 (#^ω^)
277 名前:デフォルトの名無しさん [2007/05/08(火) 21:42:56 ] fortranプログラムの作成依頼はこのスレでできますか?
278 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 23:37:48 ] >>277 くだすれFORTRAN(超初心者用)その2 pc11.2ch.net/test/read.cgi/tech/1164121236/ どちらかというと、こっちの方がやさしくしてくれるお
279 名前:270 [2007/05/09(水) 23:38:08 ] 皆さんありがとう。 >>273 始め、pythonで「????」でしたが見ると便利ですね。 でもpythonのファイルIO知らないので調べてみます。 >>274 ええ、見る方です。でもcgi検索して見るとfortranでもcgi出来ますね。 FORTRAN(超初心者用)その2 でも聞いてみて良いのかな?
280 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 23:30:44 ] Visual Fortran 9 を使用されている方いますか? 購入を検討しているのですが,アクティベーションあるんかな?
281 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 00:48:26 ] >>280 ネット経由の認証も出来るし、ローカルでのライセンスファイルでの認証も出来る。 どちらかというとネット経由の認証へ移行したいと思っている節がある。 あと1年でライセンスは切れる。切れた後はインストールできない。再インストールも出来ない。 実行には問題ない。ただしバグフィックスは再インストールになるので出来ない。 うっかり消してしまうと、再インストールできない。
282 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 01:03:43 ] ライセンスって単年契約なんですか?恒久権利だと思ってた・・・やっぱり今のVisual Fortran 6使い続けようかなあ.
283 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 08:28:45 ] > 切れた後はインストールできない。再インストールも出来ない。 そんなことはない。 購入後、1年間の間にリリースされたマイナーバージョンアップまでは自由に使えるよ。 使えないのは、それ以降にリリースされた最新版とか、プレミアサポートとか。
284 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 13:01:56 ] ネット経由の認証がいるってことは,複数台のPCにインスコして同時に計算走らせるとかできないわけですよね? (認証なくてもやっちゃだめなんだろうが) 結局この理由でofficeも2000,visual studioも6のまま・・・ Fortranも6でいいかー
285 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 14:30:29 ] >>284 契約したライセンス数を超えて(または契約した使用者以外が)「コンパイラ」を使うのはいけないが コンパイルして出来た実行プログラムの方は配布が可能。 (評価版や非商用ライセンスの場合は別だが) またそのプログラムの実行にIntelが定めた再配布可能ファイルが必要なら、それも含めて配布可能。 ちなみにシングル・ユーザー・ライセンスの場合、契約者個人が同時に1つしか使用しないのであれば コンパイラを複数のPCにインストールすることも可能。 www.intel.com/cd/software/products/asmo-na/eng/compilers/295825.htm
286 名前:デフォルトの名無しさん mailto:sage [2007/05/19(土) 23:06:03 ] 誰かeclipseを使ってフォートランのコンパイルしている人いませんか? photranの使い方がわからなくて..
287 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 13:33:53 ] >>286 それをやろうとして、諦めたw 設定いろいろいじろうと思うとeclipseまで勉強しなきゃならなくて時間の無駄だと感じた。 設定できたら報告よろ!
288 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:09:26 ] 空気読まずに言うけどフリーのリンク先にある FTN77/95のインストール方法 www.coastal-env.k.u-tokyo.ac.jp/koibuchi/fortran.htm 95のインストール先とマニュアルの画面が全然違うのは仕様?
289 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:12:36 ] 通りすがりの者だが・・・・ >>288 提供先がSalfortから関連会社のSilverFrostに移行したときに変わってしまったのさ。
290 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 17:02:26 ] >>286 fortranでeclipse使ってるとこってあるんかな? fortranって科学技術系が多いし、他の一般業界の言語やコードに比べたらシンプルだからね・・ 中にはviでガシガシの人もいるし
291 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 19:33:49 ] >>289 サンクス。 じゃあ、あの状態でFortran95をダウンロードするにはどうすれば……? 本来なら説明しているサイトに報告すべきだと思うけど、 SilverFrostでのダウンロード方法を知っている人がいたら教えてください。
292 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 19:55:34 ] >>291 >>141
293 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 10:43:46 ] >>292 サンクス。 上段のページからダウンロードして後、VisualStugio2003をインストールしてたから同じく2003でインストールしました。 あとは複数あるシステムの中で、Fortran教科書に載ってるプログラムを書いて実行するのに選ぶべきシステムとその方法さえわかれば……
294 名前:デフォルトの名無しさん [2007/06/13(水) 22:07:13 ] Fortressについてどう思うよ?
295 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:23:23 ] オワタ
296 名前:デフォルトの名無しさん [2007/06/14(木) 00:49:28 ] すいませんが、FORTRAN77で、二階非線形常微分方程式をルンゲ・クッタ法を使ってプログラムを組みたいのですが、 一階なら分かったのですが、高階になるとよくわかりませんorz
297 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 00:54:41 ] >>296 それはプログラムがわからないの? それとも数学がわからないの?
298 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:34:11 ] >>296 ルンゲ喰ったなんて、数値計算の本の、頻出事項じゃんか。 図書館に行ったほうが2chに来るより効率的。
299 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 00:09:50 ] ルンゲ警部を喰っちゃうなんて・・・
300 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 10:39:29 ] ペッパーランチでペッパー警部に食われました(正笑
301 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 13:00:52 ] >>300 アッー?
302 名前:デフォルトの名無しさん [2007/07/07(土) 05:25:58 ] FortranからLinuxのsystem関数を利用して出力したモノを 変数に納めたいのですが、どうすればよいのでしょうか? 例えば call system('echo 2') でa.outを実行すると正常に2が出力されるのですが、 その2を変数に代入しようと。 integer var call system('echo 2',var) のようにしてみたのですが、エラーになりました。 character型も試してみたのですが、やはりエラーになりました。
303 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 12:43:32 ] >>302 コンパイラなによ。 ま、マニュアル読んだほうが早いと思うけど。
304 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 13:22:12 ] >>302 call system('echo 2 > hoge.txt') open(10, file='hoge.txt', status='OLD') read(10,*) var close(10,status='DELETE') write(*,*) var
305 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 14:54:26 ] >>303 pgiコンパイラだそうです。 ちょっとマニュアル探してみます。 >>304 コンパイラの問題なのかDELETEのところがちょっとエラーでできなかったのですが。 close(10)としたら変数に2を入れることができました。 ありがとうございました
306 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 14:57:11 ] あ、すみません。 >>304 でできました。
307 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 15:06:41 ] あと、System関数を利用せずに外部ファイルの行数を取得する方法ってありますか? 例えばhoge.txtの中身が ---------- apple 123 456 pie ---------- であれば、そのファイルの行数を読み取りinteger型の変数に3を 代入するという操作を行いたいのです。 もちろんSystem関数の利用でできたのですが、それだとプラットフォームが Linuxに限られてしまうので、Fortranでファイルの処理を行うようにすれば 各種プラットフォーム上でも使えるソースになって便利だなと思いました。 この操作に限らず、Fortranでファイルを編集するための勉強はどのような ところで勉強すればいいのでしょうか?
308 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 17:41:38 ] >>307 普通に空readでend of file が出るまでまわして、変数に一足していけばいい。
309 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 08:19:26 ] >>308 できました。 [Fortran]$ cat num_of_tmp sfejoiwa seflkew sfepo pweko wsefk sefpowe posef sdf s;ef [Fortran]$ ./a.out x = 8 ありがとうございました(><)
310 名前:TESTちゅう [2007/07/12(木) 17:03:55 ] フィボナッチのプログラムが急ぎで必要です。だれか教えてください!!!
311 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 21:18:17 ] WRITE(*,*) 'N=' READ (*,*) N DO 10 I=1,N IF0=IF1 IF1=IF2 IF ( I.GT.2 ) THEN IF2=IF1+IF0 ELSE IF2 = 1 END IF 10 WRITE(*,*) I,IF2 STOP END
312 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 22:54:57 ] Numerical Recipes の第3版が出るらしいな。
313 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 03:14:53 ] 確かに本家の看板に出てるね www.nr.com/ 情報さんくす
314 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 03:17:27 ] ↑ってC++がメインになってないか(笑) 微妙にスレちがいかも
315 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 23:37:05 ] >>314 ホントだ 裏切られた!www 怪しからん奈!
316 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 03:17:16 ] >>314 FORTRAN版は出す気あるのかな? 初版の非Fortran版はトランスレータにかけただけのような gotoバリバリコードで出版していたのだから、無茶なFortranコードでも 著者は別に気にしないよなw
317 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 04:09:06 ] >>316 どうだろ?C++の機能をつかって実装しているようだから、 以前の FORTRAN -> それ以外の言語 の移植とは訳が違いそう NRの2nd(1992)から3rd(2007)への以降に15年掛かっているね たぶん3rdに取り組み始めた頃は、まだC++が輝いてたんだろ 複素数の取り扱いが、クソややこしいテンプレートになっていたり、 整合配列に問題があったりと、C++は数値計算に向いてない c99の方がずっとマシ(ただし、こっちは対応コンパイラがPGIぐらいしか無い) Fortran90かFORTRAN77のまま、アルゴリズムだけ進歩させた方が良かったと思うよ NRのメリットは安い値段とソースコード付きってとこだったが、 C++のみになると、あんまりメリット感じないね C言語だとGSLとかあるしね どうせ自由に配布できないんだったら NAG, IMSLの方がいいんじゃないか? 少なくとも漏れはNR 3rdイラネ
318 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 13:01:52 ] >>317 あれれ2版からも15年たってるのかよw しかしアルゴリズムの進歩版とかのってはいないのかね? 第2版では、初版に無かったnon-numerical algorisms の章が一番役に立ったw CRC16とかHuffman符号化とか、情報工学的なアルゴリズムが、数値計算との垣根を乗り越えてきた タイミングだったのか。
319 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 23:48:31 ] 今日本屋に行ったらこんな本があった。 Fortress言語―マルチコア時代の並列化プログラミング言語 もう出すのかよw ざっと見た感じ糞本だったがw
320 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 12:21:50 ] まったく話を聞かないしなぁ>Fortress スラドでも議論があったけど、将来も普及する見込みは厳しそうね
321 名前:デフォルトの名無しさん [2007/07/23(月) 01:55:57 ] >>320 よく知らんが、SUNのマルチコアCPUに大量のスレッドをばら撒いて並列計算させるという コンセプトの言語なんだろ? アイデアとしては面白いんで内科医? Haskellっぽい仕様も入れているらしいし、次世代の踏み台にwww
322 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 10:15:40 ] >>321 オープンにしたからSUNの石専用ってわけじゃないのでは? 確かに踏み台ぽいなw
323 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:44:19 ] Thoughts on Language Design New challenges require new solutions Guy L. Steele Jr. ttp://www.ddj.com/dept/architect/184406382 まぁ、それなりに考えがあってFortressを作っているようだ。 Sunがアメリカのスパコン助成から脱落したので、さいさきは暗いだろう。 日本(富士通)で拾う振りをして、アメリカに疑心暗鬼を起こさせるのが吉だと思うwwww
324 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 09:34:34 ] >日本(富士通)で拾う振りをして、アメリカに疑心暗鬼を起こさせる スゲーwwww 策士っすねw
325 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 00:35:12 ] >>324 最近の最速スパコン競争は、なんか土建屋の既得権争いっぽいから、 釣りに走って遊ぶほうが、たしかにいい気がするw
326 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 22:19:24 ] 「スカラ型とベクトル型を両輪に」,次世代スパコン構成の狙いを語る ttp://techon.nikkeibp.co.jp/article/NEWS/20070808/137619/
327 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 21:56:30 ] >>326 53. 次世代、ペタスケール、T2K (2007/8/12) ttp://grape.mtk.nao.ac.jp/~makino/articles/future_sc/note054.html#rdocsect59 すっぱいぶどうの更新w
328 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 02:10:13 ] Cygwin上で動くfortran90コンパイラってありませんか? すみませんが どなたか情報をお持ちでしたら教えて下さい。
329 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:45:37 ] >>328 以前 g95.sourceforge.net/ を試したら動いた
330 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:08:37 ] >>328 ttp://g95.sourceforge.net/ でも、なんでパッケージに入ってないんだろう?
331 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:03:47 ] CygwinのGCCが4.x.xになったらこっちが入るからじゃないかな ttp://gcc.gnu.org/wiki/GFortran
332 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:17:52 ] >>329 - 330 ありがとうございまs。試してみます!
333 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:01:43 ] Steve Lionel のコラムで、FORTRANで書かれた(多分)世界初のアドベンチャーゲームネタが出ている。 softwareblogs.intel.com/2007/08/22/you-are-in-a-maze-of-twisty-little-passages-all-alike/
334 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:11:05 ] マジカヨ
335 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:10:18 ] Intel fortranて、バージョン10になってから、MKLがおまけで付いてくるようになったな。 MKL買った人カワイソス=おれ
336 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:28:08 ] おまけと言ってもMKL有りとなしじゃ、けっこう価格差が…
337 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:31:24 ] >>335 忘れたがMKLのライセンスからをコンパイラのライセンスに転換できて2個分になったんじゃ中田ッけ? ガセだったら酢マンコw
338 名前:335 mailto:sage [2007/08/31(金) 01:05:11 ] 9→10へのバージョンアップのときに、スタンダード版からプロフェッショナル版への変更が 安く(1万円くらい)できただけだった。いずれにしても、MKL単体で買って損した気分だ。
339 名前:デフォルトの名無しさん [2007/09/07(金) 13:02:07 ] www.nag-j.co.jp/fortran_compiler.htm NAGのcompiler IntelMac版登場 トライアルができる
340 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 21:10:14 ] intel fortran compiler for windows 9.0 を使用していて icl.cs.utk.edu/lapack-for-windows/nmake_install.html の手順に従いlapackとblasを導入しようとしてますが 1. C:\Program Files\LAPACK_3.1.1_for_Windows\LAPACK 3.1.1 for Windows\ に移動 2. set_environment.bat x86 Intel と入力(Blasはデフォルトを使用) 4. nmake /nologo all とすると xilib.exe /OUT:"C:\Program Files\LAPACK_3.1.1_for_Windows\LAPACK 3.1.1 for Windows\blas.lib" *.obj が実行されているときに次の旨の表示がでてうまくいきません。 "lib"を実行しています "lib"がみつかりません >>197 の slim に相当する形でxilibが使われているものだと思うんだけど、どう使用すればうまくいくのかわかりません。 ちなみにxilib に代えて xilink /lib を使っても同じです。 blas.lib lapack.lib を作るにはどうすればよいでしょうか?
341 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:51:43 ] 質問です。 fortran95を使っているのですが do i=1, size(A) A(i) = hoge + i * fuga end do みたいのを A = hoge + [なにか] * fuga のようにして添字を配列演算に用いて一行にまとめられないのでしょうか? それと do i=1, size(A) hoge = 複雑な式 A(i) = hoge * fuga B(i) = hoge * piyo end do のような場合、 A = 複雑な式 * fuga B = 複雑な式 * piyo と書く事で二度計算されてしまうのは無駄ですし 式が長くなって読みづらいのですが、配列演算に対する一時変数のようなものは無いのでしょうか。
342 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 21:33:40 ] >>340 Visual Studioに含まれているlib.exe/link.exeへのパスが通ってない。 通常はset_environment.batから呼ばれている "%IFORT_COMPILER91%\IA32\Bin\ifortVars.bat" の中でVSへの設定も行われるはずだが 環境変数 IFORT_COMPILER91 はIVF9.1用の設定なので IVF9.0なら IFORT_COMPILER90、10.0なら IFORT_COMPILER10 に変更する必要がある。 ifortVars.bat を実行してもlib.exe/link.exeが使えない場合は ifortVars.bat を修正するか、予めVS中の VSVars32.bat か VCVars32.bat を実行しておく必要がある。
343 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 23:48:01 ] >>341 A = hoge + (/(i,i=1,size(A))/) * fuga
344 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 17:01:44 ] >>343 ありがとうございます。こんな素直な方法があったんですね。 後者については今のところ難しいでしょうか。 あと配列演算に使える関数が作れるといいのですが、これも難しいですかね。 配列をもらって配列を返すようなタイプだと一次的に戻り値用の配列を確保しなくてはいけないので現実的ではないんです。
345 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 19:36:29 ] >>344 しかし>>343 のようにやると、いったん暗黙のテンポラリ配列が生成されて それから積が取られることになるので、DO LOOPの展開式とは等価ではない。 >あと配列演算に使える関数が作れるといいのですが、これも難しいですかね。 elementalだったかpureオプションつければ可能だった気がする。 調べてくれw
346 名前:345 mailto:sage [2007/09/11(火) 01:37:16 ] >>344 MODULE m_elemental CONTAINS ELEMENTAL REAL FUNCTION watson(x) IMPLICIT NONE REAL, INTENT(IN) :: x watson = x**2 RETURN END FUNCTION watson END MODULE m_elemental ! PROGRAM holmes USE m_elemental IMPLICIT NONE INTEGER :: i REAL :: x(10), y(10) DO i = 1, 10 x(i) = REAL(i) END DO y = watson(x) PRINT '(10f7.1)', x PRINT '(10f7.1)', y STOP END PROGRAM holmes 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 1.0 4.0 9.0 16.0 25.0 36.0 49.0 64.0 81.0 100.0 Press any key to continue . . . elemental ⊂ pure だったw
347 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 12:33:44 ] >>345 試してみましたが確かにテンポラリ配列作られてますね。 elementalは便利ですね。ありがとうございました。
348 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 19:16:35 ] >>347 a(1:n) とか部分配列の類もテンポラリを作ることが多いので、 ソースコードが短くなるからと調子に乗って、DO LOOPの代わりに乱用すると、 思わぬところでスタックオーバーフローとかで憤死する。 ベクトル機の場合は一旦テンポラリ配列に展開したほうが早くなるだろうが、 パイプラインのスカラー機の場合はDO LOOPのままの方が早いのではないかと思う。 まぁ勝手に最適化するかも知れんし、トレードオフが色々あるので、なんとも胃炎が。
349 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 15:26:34 ] age
350 名前:デフォルトの名無しさん [2007/09/18(火) 22:17:04 ] ageも満足にできんのか!!
351 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 00:26:58 ] intel Visual fortran 10.0 日本語版 発売
352 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 01:08:09 ] 「日本語版」つーてもFortranの場合、コンパイラのメッセージは英語のままだからありがたみがないなぁ。 日本語マニュアルは別途ダウンロードできるし。
353 名前:デフォルトの名無しさん [2007/09/21(金) 23:56:06 ] 質問です。 fortran77を使っているのですが、コンパイラ時にはノーエラーで、実行のときランタイムエラーと表示されるのですが、 WARNING - Label 170 has not been referenced NO ERRORS,1 WARNINGS [<MAIN@>FTN77 Ver 4.03] Creating executable: sinchouryuu.exe *** Unable to create executable file: sinchouryuu.exe 実行可能なファイルの作り方を教えて下さい。 あと、実行時のエラーの 00401000 MAIN# [+174f] て書いてあるのですが、どういう意味でしょうか? 因みに170行は 166:* cnbの転置行列 167: 168: do 70 j=1,10 169: do 80 i=1,6 170: 171: cbn(j,i)=cnb(i,j) 172: 173: 80 continue 174: 70 continue こんなんなんです。
354 名前:デフォルトの名無しさん [2007/09/22(土) 00:01:51 ] ヤコビアン行列がつくれません!! どういった風に作るのか、作り方をどなたかおしえてください!
355 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 21:55:29 ] >>353 >fortran77を使っているのですが それは「規格の種類」であってこの場合、それよりも使用しているコンパイラや OSの名前を書いてくれた方がありがたい。 > WARNING - Label 170 has not been referenced 「170行」ではなく文番号の170が参照されていない。 > *** Unable to create executable file: sinchouryuu.exe > 実行可能なファイルの作り方を教えて下さい。 おそらくsinchouryuu.exeを実行中で書き換えられないのだろう。 すべてのsinchouryuu.exeを終了させてからコンパイルするのだ。 > 00401000 MAIN# [+174f] > て書いてあるのですが、どういう意味でしょうか? MAIN#(プログラムの開始位置)から 5919バイト目の位置でエラーが発生した。 エラーの種類はFTN77の場合、ダイアログの上の方に書いてある。 >>354 つ google
356 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:37:18 ] FTN95をインストールしました。 plato3(日本語不使用)でコンパイル実行可能でした ↓ fcpadを利用しては出来ないですか? コンパイラパス C:\Program Files\Silverfrost\FTN95\ftn95.exe と入力 *** Invalid executable file suffix - only .EXE is permitted とでてコンパイルできない。 秀丸でマクロを使おうかと思いきや、 PATHが通らず失敗。 誰か、ご指導願います・・・。
357 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 02:17:02 ] >>356 くだすれFORTRAN(超初心者用)その2 pc11.2ch.net/test/read.cgi/tech/1164121236/355
358 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:51:02 ] Intel Visual Fortranで/Qparallelを使って並列化したところ、 あまり高速化しませんでした。プログラムによってはむしろ遅くなることも。 サポートに問い合わせたら、こちらでも2コアでは確かにスピードダウンが 確認できましたが、4コアではスピードアップが確認できました、と回答。 まるでリフォーム詐欺のようだ・・・ 単純な行列×ベクトルのみの計算でも最大30%アップ程度なのだが 並列計算ってそんなものですか?
359 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 01:28:55 ] マシンの構成によるし・・・ QuadコアなCPU?
360 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 01:48:48 ] >>358 自動並列化は、そんなもんだよ。スパコンでも同じ。 まぁ並列化よりSSEの方が簡単に簡単にスピードが出るようになる。
361 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 03:04:44 ] SSEは適当に-O3とかするだけでも有効になるはず(多分 Qparallelって要するに自動でOpenMPディレクティブ入れてるだけだよね? 最近のOpenMPはどうなんだろう・・・古い古いとよく言われるけど、今後のマルチコアCPUで通用しなくなるのだろうか
362 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 09:34:52 ] >>360 行列積とか素朴な演算ならSSEを入れれば単精度は4倍速、倍精度は2倍速とか、素直に早くなる。 コンパイル時のメッセージにベクトル化云々と出ればSSE使ってる。
363 名前:358 mailto:sage [2007/10/24(水) 11:02:26 ] ありがとうございます。 現在はOpteron1210(DualCore)を使っています。 インテルからはまるでQuadCoreのCPUを買えというような回答だったので、 詐欺商法のように聞こえました。 SSEは使っています。 CPUのクロック数があがらなくなった現在では並列計算にしないと スピードアップが望めなくなると思い、並列を検討しています。 自分の勉強不足も大きいのですが、誇大広告にがっかりです。
364 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 11:20:56 ] Intelのサポートに聞いたの? こういうのって大抵まともな(役に立つ)回答は期待できないものでは? MSよりはマシだけど・・・ 結局ググるなり2chなりどっかのコミュニティなりで探すしかないんだよね
365 名前:358 mailto:sage [2007/10/24(水) 12:58:59 ] >>364 バージョンアップ込みで年間数万円(いくらか忘れた)のサポート料を払っているので、 使ってみたのですが、本当にがっかりです。 サポート料金を10倍にしてもいいので、まともな回答を期待したいです。 ググってますがなかなかいい情報が出てこないです。 私の最高は3割増が最高で、実務的な計算ではほとんど役に立ちません。 あれこれ考えている間に、時間をかけて計算したほうがいいのかと思えてきました。
366 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 12:59:13 ] >>363 いや詐欺ではない。 既存プログラムを自動並列化して場合、スピードダウンするのはごく普通の現象。 はじめから並列化を前提に設計して、かつ指示行を入れまくってもいまいちなのは、実は常識だw
367 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:53:27 ] >>365 スレ違いな話だけど、本気のガチンコサポートをするなら商売する側としては10倍でもペイしないと思うけどね・・・ そこはしょうがないっすよ
368 名前:358 mailto:sage [2007/10/24(水) 16:19:19 ] 日本語がおかしかった。失礼しました。 >>367 あるソフトベンダーは年間140万円のサポートでいたれりつくせり。 (何が原因でしょうね?と問い合わせたら修正されてかえってくる) そこは最優先でサポートを継続している。 別の40万円のところは、それなりだけど解決のヒントはくれる。 (これらは言語ではなくてアプリケーションですが) VisualFORTRANは「開発に問い合わせます」のまま放置・・・。 ただ、今回の件については決して特殊な質問ではなく 広告にうたってある性能が出ないよに始まり、 そちらのもっている理想的なプログラムでいいから出してくれといっても 出てこない。いったいどんな質問だったら答えることができるのだろう。
369 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:20:01 ] >>368 言語のサポートの場合、コンパイラのバグに対する対応の早さだと思う。 そういう点でIntelはパッチの出方は早い。 あとサポート掲示板には、様々なレベルの質問が出ているのでこっちも見てみたらいいかも。 ttp://softwarecommunity.intel.com/isn/Community/en-US/forums/1005/ShowForum.aspx
370 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 20:49:16 ] NEC:世界最高性能のスパコン「SX−9」を発売 NECは25日、世界最高レベルの計算能力を持つスーパーコンピューター「SX−9」を開発し、 発売を始めたと発表した。1秒160億回の計算能力を持ち、最大限の512台を連結して運用し た場合、1秒839兆回の計算が可能なシステムが完成する。 新開発の高性能CPU(中央演算処理装置)を搭載した。国内外の大学や研究機関などが、 気象予測やロケットの設計、核融合のシミュレーションなどに利用することを想定している。 価格は1億5000万円。 現在の世界最速のコンピューターシステムは米IBMが開発し、秒間280兆回の計算ができる。 NECは、10年の完成を目指す世界最速スパコンの開発計画を、日立製作所や富士通と進めて いる。 ttp://mainichi.jp/select/biz/news/20071026k0000m020076000c.html
371 名前:デフォルトの名無しさん [2007/11/02(金) 00:54:14 ] プレステ3用FORTRANが動くようになった? ttp://www.ibm.com/developerworks/power/cell/downloads.html ttp://cell.fixstars.com/ps3linux/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8
372 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 13:20:39 ] このままPS2クラスタのようにお遊びで終わるのかと思ったが、そうでもないのか・・? でも低価格の普及ゲーム機を使えるってのがそもそものウリなんだから、今のXboxやwiiに苦戦してる状況じゃ厳しいんじゃないか?
373 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 23:44:01 ] 東北大学が NEC の世界最速スパコン「SX-9」16台導入へ 著者: japan.internet.com 編集部 プリンター用 記事を転送 NEC は1日、東北大学情報シナジー機構情報シナジーセンターから、世界最速の ベクトル型スーパーコンピュータ「SX シリーズ モデル SX-9」16台からなる大規模 スーパーコンピュータシステムを受注したことを発表した。新システムは、最大性能 26.2テラフロップス(テラフロップス:1秒間に1兆回の浮動小数点演算能力)に達し、 SX シリーズでは国内最大規模のシステムになるという。 同センターは、全国の大学や研究機関の研究者が利用する共同施設として、常に 最高・最新鋭の計算機システムを設置し、航空宇宙、地球環境、IT、ナノテク分野など 最先端の学術研究を支援。他では実行できない大規模シミュレーションの実行環境の 整備、専門的立場からの利用者プログラムの高速化推進を積極的に行い、長年研究者 にとって使い勝手の良いシステムが構築されている。現在、センターの利用者は学内外で1,500人を超えるという。 同センターは、その前身である大型計算機センターが1986年に SX シリーズを導入して以来、 ベクトル型スーパーコンピュータを採用している。 japan.internet.com/busnews/20071101/3.html
374 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 14:00:01 ] 阪大は10ノードらしい。 opentechpress.jp/enterprise/07/10/26/0340253.shtml
375 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 23:51:09 ] >>374 阪大センターはハッカーにやられてから、セキュリティーが強化されすぎて 使いにくくなったって知り合いが言ってたなー。 数年前のことだが。
376 名前:デフォルトの名無しさん [2007/11/23(金) 16:54:32 ] 休みだし、何か新しいネタを出してくれ。
377 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 17:13:22 ] 暇ならFortran2003の処理系作ってくれ。
378 名前:デフォルトの名無しさん [2007/11/29(木) 13:22:06 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 日本ニューメリカルアルゴリズムズグループ株式会社 LAPACKサンプルプログラム集を公開開始 LAPACKの利用がより身近に! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 日本ニューメリカルアルゴリズムズグループ株式会社(東京都中央区、以下 日本NAG)は、netlibにより公開されている線形代数パッケージ「LAPACK」の サンプルプログラム集を公開いたします。これによりLAPACKを利用するユーザ プログラムの開発が、よりスピーディーに行えるようになります。 公開URL:www.nag-j.co.jp/lapack.htm また、日本ニューメリカルアルゴリズムズグループ株式会社ではより高性能な LAPACKを、NAGライブラリ製品(NAG Fortran SMP Library)と共に提供してい ます。 ■ LAPACKについて LAPACKはLinear Algebra PACKageの略で、netlib(www.netlib.org/ ) により公開されている高性能線形代数パッケージです。(日本語ではエルエー パック、もしくはレイパックと発音されます)連立一次方程式、最少二乗問題 固有値問題、特異値問題を解くためのサブルーチンが含まれています。 ■ NAG Fortran SMP Libraryについて 1500以上のサブルーチンから構成される並列科学技術、統計計算ライブラリ です。1500のサブルーチンの中には並列化済みのLAPACKルーチンも数多く含ま れており、LAPACKを利用するプログラムを1行も変更することなく、性能を 更に高めることが可能です。
379 名前:デフォルトの名無しさん [2007/12/06(木) 03:09:49 ] 初心者で最小二乗法のプログラムが組めないんですがどうすればいいんでしょうか?
380 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 10:03:56 ] >>379 図書館へ行って、データ処理の本を読むんだ!
381 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 19:03:50 ] データ読み込んでΣ求めて公式通り計算すればおk
382 名前:デフォルトの名無しさん [2007/12/07(金) 22:27:07 ] >>379 いますぐ俺の口座に3000円振り込むんだ!
383 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 12:57:37 ] 最小二乗法くらいならいくらでも転がってるだろ・・・
384 名前:デフォルトの名無しさん [2007/12/12(水) 20:46:38 ] コンパイルはできたのですが、こんなメッセージが出てきて 途中で止まってしまいます。 Runtime error from program:c:\users\○○○○\documents\fortran\traje_0point.exe Unknown floating point exception 91a1 Floating point co-processor fault at address 00401ef8 00401ad0 GOENTR [+0428] 00401000 main [+059c] eax=00000b77 ebx=00000096 ecx=00000000 edx=0365fc38 esi=0365fcdc edi=0365fcd8 ebp=0365fc94 esp=0365fbd8 IOPL=0 ds=0023 es=0023 fs=003b gs=0000 cs=001b ss=0023 flgs=00010206 [NC EP NZ SN DN NV] 00401ef8 fsqrt 00401efa fmulp st(1) 00401efc fmul [0044a2c0] 誰かこのエラーの意味ならびに解決策をご教授していただけないでしょうか? ちなみに○○○○のところは私の名前が入ってるので、伏せておきました。
385 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 22:23:51 ] >>384 コプロの機械語の命令に対応物が無いのだから、コンパイル時に対象機種以外の命令が入るような 最適化をしたのではないかと思われる。 Pen4SSE2を無印ペンチアムで動かすとか、AMD用SSE命令をIntelで動かすとか。 そうだとすれば、最適化を落とすか、対象機種を明示的に指定するか、全機種対象にオプションを変えればいい。
386 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:46:25 ] >>384 ちょうどfsqrtのところ(00401ef8)で例外が起きているので GOENTRの中でSQRT()に負の数を渡す等の不正な計算を しているように見えるが。
387 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 16:42:46 ] 386に一票
388 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 23:13:02 ] コンパイラは何だろう?
389 名前:デフォルトの名無しさん [2007/12/14(金) 18:44:44 ] 384です。 自己解決しました。 ありがとうございました。
390 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:00:18 ] >>389 今後、他の方の問題解決に役立つこともありますので 出来ればコンパイラの種類や解決方法を公開できる範囲で良いので 書き込んでもらえると有難いです。
391 名前:デフォルトの名無しさん [2007/12/22(土) 10:35:08 ] CONTINUE
392 名前:デフォルトの名無しさん [2007/12/23(日) 10:22:03 ] stop end
393 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 23:51:38 ] 最近の Intel Fortran って Traceback 機能が効いてなくね?
394 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:28:28 ] そうか? -traceback オプションででちゃんとソース名と行番号まで表示されるぞ。
395 名前:デフォルトの名無しさん [2007/12/26(水) 21:50:42 ] 年明けでよかったらv10.1で試してみるよ
396 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:18:42 ] >>395 頼む。やってみてくれ。 漏れの環境だと、Windows+VisualStudioのビルドオプションでtracebackをつけているのだが、 9.1だとTracebackを吐くが、Ver10.0やVer.10.1だと普通の実行時エラーしか出ない。 ツール+オプションでコンパイラだけ変えているはずなので、オプション指定は共通だと思うのだが・・
397 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 01:48:12 ] 手元のPCに10.1しか入ってないので他のバージョンと比較できないが、10.1の場合: ・VS上で[デバッグ] -> [デバッグ開始] (F5) で実行 VSのデバッガ上でブレイクがかかる(「呼び出し履歴」にスタックトレースを表示) ・VS上で[デバッグ] -> [デバッグなしで開始] (Ctrl + F5) で実行 トレースバック情報を表示せずに終了 ・別途コマンドプロンプトを開いて実行 トレースバック情報を表示して終了 となった。
398 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 01:15:49 ] >>397 dクス 確認・把握した。 漏れは近年デバッグ実行をまったく使っていなかったのと、エラーの出る奴は コマンドラインから実行したことがなかったので気づかなかったw 多分、デバッグなし実行でもトレースバックは呼び出し履歴に強制リダイレクトされているが、 (error出力かなんかで) この場合呼び出し履歴を見るメニュー項目が無いというバグなのだろうw 空想だがw
399 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 19:18:05 ] せっかくVisual Studioを使っているんだからデバッガも使おうぜ。
400 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 11:51:04 ] >>399 いや、昔は使っていたけど、なんというか、Fortran向きでない感じがして。 巨大配列のはみだしとかの検出に向いてないせいかな?
401 名前:デフォルトの名無しさん [2008/02/21(木) 23:04:14 ] Fortran2003の処理系はよ出せ
402 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:57:48 ] >>401 IBMのコンパイラが一番進んでるって聞いたんだけど。 どうなのかね? NAGも最近おとなしいし。
403 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 17:47:06 ] 中規模疎行列連立方程式を解くのにFortran (Intel Win & Linux)を使おうとしてます。 小規模のものは、MATLABで、不完全三角分解前処理+BiCGSTABとかGMRESで解いてきました。 しかし方程式の大きさが1万を超えるあたりから、MATLABの組み込みソルバーのメモリ効率が悪くて Fortranに戻ってきた次第です。 今、とりあえずMKLを入れてみて、その中でおすすめ(?)ぽかったPARDISOを使ったコードを組んでみて サイズ5万くらいだとそれなりの速さで解いてくれることがわかりました。MKLのマニュアルには、普通の 疎行列用反復ソルバもあると書いてありますが、サイズが10万とか超えるようになると、PARDISOのような 疎行列直接法より、反復法の方が良いのでしょうか。 ほかのソルバライブラリでは、並列用PETScを試しています。ただ、解いている問題の係数行列が良くないのか PETScだと収束しないことがあって、PARDISOやMKLを使おうかと思っています。 並列計算に移行するちょっと前くらいの大きさの疎行列連立方程式を解くのにおすすめのライブラリあったら 教えてください。
404 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:23:17 ] >>403 LAPACK か ATLAS ではダメ?そんな大規模な計算をやった事が 無いので、使い物になるかどうかは分かりません。 Linux ならパッケージでインストールできるはず。 ウチの Debian には aptitude で入れた。
405 名前:403 mailto:sage [2008/03/16(日) 18:44:46 ] >>404 さん レスサンクスです。 LAPACKとATLASも使ってます!MKLもLAPACKとかLAPACK95を使います。素晴らしい ライブラリだと思います。 漏れがやりたいのは、疎行列連立方程式なので、LAPACKとかATLASをベースにして そのラッパーが欲しいという感じです。LAPACKがすでにBLAS/ATLASのラッパーなわけ ですが。。。
406 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:57:43 ] >>405 一般論からすれば、反復法か直説法かの選択は行列の内容によるんでね? たちの悪い行列でなければ、反復法の方が有利だと思うけど。 直説法なら確実に有限回で終了することが分かっているが、反復法は直交性が数値誤差で腐るから 数学的にはおかしいが、現実には有限回で終わらなかったりするし。 行列が、ほんとにスカスカの疎か、singularに近いか、固有値が縮退しまくっているかとか、 その辺は使用者しか分からんから、なんともいえないような。 中身の分からん奴に機械的に使わせるから安全第一で行きたいとか、運用面にも依存するし。
407 名前:405 mailto:sage [2008/03/16(日) 21:00:50 ] >>406 さん 仰るとおりっす。 とりあえず、自分一人で使う(研究)ので、ブラックボックス的で安全なものでなくとも 高速で、導入やコーディングが楽なのが希望です。 行列の状態は悪いです。4x4のブロックに分かれてる感じで、離散化を細かくやると 主対角が卓越して、対角ブロックのみに不完全分解系の前処理掛けると、 それなりに収束しますが、係数行列のサイズが増大するというジレンマです。 疎行列性は、5万x5万で、非零要素が0.1%切ってるくらいです。 ご指摘のように、問題依存性が高いので、なかなかご意見いただくのは難しいかなとは おもっております。 とりあえず、みなさん、10万x10万くらいの疎行列連立方程式(差分法や有限要素法 なら頻出だと思います)を解くときって、どんな言語で、どんな実装してるんですかね。。。 反復法ソルバもSaadのtemplateの擬似コードから自分で書いてるのか、とりあえず いろいろソルバライブラリ試してるのか。。。たぶん、疎行列の格納形式から考える必要が あると思うので、そのあたり、Fortran使いの皆さんがどうやってるのか知りたいです。
408 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:41:03 ] Steve Lionel (Intel) のコラムで、A=B+CとA(:)=B(:)+C(:)での後者の問題点について 触れられていた。最近のインテルコンパイラは少し賢くなって、この程度の単純な場合なら 後者で無駄なテンポラリへのコピーをしないようになったようだ。 とはいえ、まだ問題ありと。 ttp://softwareblogs.intel.com/2008/03/31/doctor-it-hurts-when-i-do-this/
409 名前:デフォルトの名無しさん [2008/05/17(土) 02:00:17 ] EXCEL VBAである計算をしてたのですが、時間がかかって仕方がないので PCにFORTRANをインストールしてfortranでプログラミングやろうかと 思っています。学生時代にFORTRAN 77を使った経験がある程度。 たしかMS FORTRAN ぱわーすてーしょんつうのも使ったことがあります。 専門家の多そうなこのスレで恐縮なのですが、現行のwinXPが入ってるPCで 動かすとよさげなFORTRANコンパイラは何がいいでしょうか・・。 計算内容は簡単なモンテカルロ法です。
410 名前:デフォルトの名無しさん [2008/05/17(土) 10:28:08 ] >>409 www.nminoru.jp/~nminoru/programming/x86-fortran.html 見れ。無料でとりあえず試すならcygwin+g77 かminGW+g77でしょう。 コストパフォーマンスならインテルコンパイラか。 どっちにせよ今EXCEL VBAで組めているのなら、今からわざわざFortranなんぞやらずに、 コンパイラ買う金で速いCPU買ったほうがマシだと思うけどね。
411 名前:デフォルトの名無しさん [2008/05/17(土) 22:05:46 ] >>どっちにせよ今EXCEL VBAで組めているのなら、今からわざわざFortranなんぞやらずに、 >>コンパイラ買う金で速いCPU買ったほうがマシだと思うけどね。 レスありがとうです。 VBAって異常に遅いなと思っていたのですが、CPU速くすれば FORTRANに追いつける程度なのか・・・。 そこらへんがよくわかってないので。
412 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:13:50 ] VB2008Expressでも使えば? VBAよりはだいぶ速いしタダだよ
413 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:41:52 ] どのくらいスピードを要するのか知らんがVBはインタープリタだろう? SilverFrostのFTN95とかフリーコンパイラも転がっていることだし、 77でよければWatcomとか昔なつかしいのもあるし、g77のWin用もあるし、 Fortranで素直にやらせてやれw
414 名前:デフォルトの名無しさん [2008/05/19(月) 22:54:50 ] モンテカルロ法とかだとCPU周波数にほぼ比例して 速くなると思っておいていいのですか・・・
415 名前:デフォルトの名無しさん [2008/05/19(月) 23:35:44 ] >>411 その速いCPUで動かせばFortranはもっと速くwwww マジレスするとパラメータサーベイとかなら今の4コアとか使えばかなり効率はあがる。 さすがにBASICがFORTRANを超えることは無理。 自分のプログラミングスキルと作るコードの複雑さから、コーディングやデバッグの 労力を見積もって自分で判断すべし。別にfortranとかVBAに限らんけどな。 VBAはクソ遅いと聞くが使ったことがないのでなんともだが、 Free BASIC VS intel Fortran ではFORTRANが速いといっても高々数倍程度〜コードによってはBASICが勝っている。 shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all&lang=ifc&lang2=fbasic さすがにIntel Fortranはgnu fortranやJava, Mono Ruby なんかには楽々勝利。 >>414 だいだいYES。と言いたいがモンテカルロ法だけでは「乱数を使った確率的解法」ぐらいしか わからんからなんとも。ランダムウォークのシミュレーションなんかだとCPU周波数に 比例してくれるようなコーディングができる場合が多い。
416 名前:デフォルトの名無しさん [2008/05/22(木) 09:28:10 ] 質問です。 salfordのf77を使っているのですがgoto文のループ内で配列を毎回初期化してたら ループが途中で終わってしまうのですがどうしたら良いでしょうか? 何でか分からないのですが、初期化しないと繰り返してくれます。あと、以下のプログラムの文 で初期化がi,j共に31の繰り返しだと少し長く繰り返します。 goto文の中にはガウスの消去法のサブルーチンがあります。 100 continue do i=1,32 do j=1,32 kakunou(i,j)=0 enddo enddo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 中略(以下このkakunou(32,32)に計算値を代入してます) 途中でガウスの消去法のサブルーチンを呼び出してます ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ goto 100 すいませんが、どなたか教えてください。
417 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 11:44:17 ] >>416 正直質問の意味がよく分からん。 コンパイラのバグでなければ、ありえない症状なので ここに書いてない部分がおかしいとしか言いようが無い。 f77の範囲ならg77とか他のコンパイラもあるのでそれで試してみるとか、 salfordのf95で試してみるとかして見るのも一つの案。
418 名前:初心者 [2008/05/23(金) 15:40:54 ] 失礼します. Compaq Visual fortran 6.1を使用しているものですが, 練習で以下のプログラムを書いたのですが,cpmpileを押し, 「.F」に変換しても「1errors」が出てしまいます. なぜ出るのか教えていただけないでしょうか? 初歩中の初歩で申し訳ないです. INTEGER WIDTH,HEIGHT,AREA READ(5,*) WIDTH,HEIGHT AREA=WIDTH*HEIGHT WRITE(6,*) WIDTH,HEIGHT,AREA STOP END
419 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:58:39 ] >>418 エラーでないぞw エラーメッセージをコピーしてみせてくれ。
420 名前:初心者 [2008/05/26(月) 12:58:26 ] デフォルトの名無しさん 早速の返信ありがとうございます. エラーは以下のように出ます --------------------Configuration: Text1 - Win32 Debug-------------------- Compiling Fortran... C:\Documents and Settings\Admin\デスクトップ\Text1.F f90: Severe: Invalid argument ... file is 'C:\Documents and Settings\Admin\デスクトップ\Text1.F' Error executing df.exe. Text1.obj - 1 error(s), 0 warning(s) 自分も以前OSが2000を使用していたときは何のエラーも出なかったのですが, XPに変えてからエラーが出るようになったように感じます. お手数をかけて申し訳ないです. よろしくお願いします.
421 名前:デフォルトの名無しさん [2008/05/26(月) 17:55:54 ] そりゃおめぇ,”デスクトップ”で実行しようたって無理な話よ マイドキュメントに移動させな
422 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:07:33 ] >>421 お前ひどい奴だなwww >>420 最初ッからそう言ってくれれば、すぐに答えられる。 それはCVF時代のFAQで、日本語のパスやファイル名が入るとコンパイラが対応していない のでエラーを吐く。2バイト文字を使わないディレクトリでやればおk。
423 名前:初心者 [2008/05/27(火) 13:41:47 ] デフォルトの名無しさん 解決しました!!! 簡単な質問に親切に答えていただいてありがとうございました!!!
424 名前:初心者 [2008/05/30(金) 15:38:10 ] 重ね重ね質問すみません. fortranをまわした結果をexcelかテキストファイルに出力したいのですが, どのようなコマンドを打てばよいのでしょうか? また,長い結果(10万桁以上)をファイルに出力したいのですが, 御教授お願いします.
425 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 16:32:44 ] 本人はできるだけ鼻につかない文章で丁寧に質問してるつもりなんだろうな。
426 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 17:59:33 ] >>424 それ、先生に聞いた方がいいよ。お金払ってるんでしょ。
427 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 19:26:16 ] program main integer :: i = 1 open(unit=10,file='hoge.txt',status='unknown') do write(10,'(i4)') i i = i + 1 end do close(10) end program main 「ご教示」を「ご教授」って書いちゃう男の人って。。。
428 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:19:23 ] >>427 hogeはUNIX系の連中の使う言葉だ。 メインフレームの誇りを持つFortrannerは使っちゃいかんw
429 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 11:14:03 ] foo bar baz は?
430 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:02:34 ] 鋼鉄の撃墜王
431 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 18:28:25 ] >>415 これみるとIntel C/C++使ったほうがいいみたいだな
432 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:41:18 ] >>431 単にFortranの書き方知らないだけだべ。
433 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:44:49 ] つまりFortranを知ってる人が少ないと。 技術者を集めにくいと。
434 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 01:08:45 ] >>431 INTEL Fortran と C++ はバックエンド部は共通だろうから、そもそもそれほど大きな違いが 出るはずが無い。
435 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:13:52 ] 慶大の生協運営の書店に FORTRAN入門(FORTRAN77入門)が普通において有って驚いた
436 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:25:26 ] >>435 浦昭二君、名誉教授だから当然でしょ
437 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:33:09 ] もうf77は教えないほうがいいだろ。常識的に考えて。
438 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:50:45 ] >>437 講義の教科書ではなくて、研究室用だと思うよ。 研究室にはf77の遺産があるから、参考図書として必須。
439 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:48:11 ] >>435 大学の生協なら売ってるのが普通だと思ってた。 俺は慶応じゃないけどね
440 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:29:15 ] 阪大にも置いてあるよ。 どこでも置いてあると思う。
441 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:51:54 ] 浦昭二のFortran66の方はさすがに絶版になってしまったな。
442 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 01:30:36 ] >>441 遺産プログラムがFortran66(ブロックIFなし)で書かれていて驚愕した orz
443 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 02:26:31 ] >>442 俺のもらった遺産プログラムは、拡張DO LOOPを使っていたせいでコンパイラを通らず すごく困った。 拡張DO LOOPとは、DO LOOP の中からGOTOで飛び出して、なんかやった後DO LOOPの 中に帰ると、またさっきのLOOPの続きが出来るというもので、当時の俺の想定外の悶絶機能で 何がおきているのか全く理解できなかったw FORTRAN77で廃止になったはずなんだが、たいがいのコンパイラは密かに対応していた。 まぁ、怖いので書き直したがw そういう事もあるのでFORTRAN66の教科書も無くしてはいけないと思うですよ。
444 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 11:39:03 ] そうか、塾生は君付けなんだなw
445 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 02:23:23 ] 今、本屋で買える範囲で、おすすめのFortranの教科書は何ですか? 絶版は困ります。アマゾンの古本で買えるならいいですが。
446 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 04:13:42 ] Michael Metcalf, John Ker Reid, "Fortran 90/95 Explained"
447 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 10:04:59 ] >>445 Fortranを勉強する目的などを明確にせよ。 規格:わからない、f77、f90以上 目的:講義対応、研究室対応、趣味、業務対応 以下はとりあえずの推薦 規格わからない 講義対応 Fortran 90プログラミング 冨田博之 www.amazon.co.jp/dp/4563014095/ f77規格 講義対応 FORTRAN77入門 浦昭二 www.amazon.co.jp/dp/4563013587 f90規格 研究室対応 数値計算のためのFortran90/95プログラミング入門 牛島省 www.amazon.co.jp/dp/4627847211/
448 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 10:10:18 ] テンプレに追加きぼん
449 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:50:25 ] >>446-447 さんくす
450 名前:デフォルトの名無しさん [2008/06/29(日) 02:12:38 ] >>434 バックエンド共通ってだけで速度が同じになるなんてありえない。 字句解析や最適化は言語仕様とコンパイラ実装に強く依存する。 Fortranのシンプルさはその点強みだったけど、 最近のFortranはその他言語にどんどん近づいているからねえ。
451 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 03:11:59 ] >>450 >>415 のベンチマークの話だから。
452 名前:デフォルトの名無しさん [2008/07/03(木) 00:26:47 ] >>450 ベンチマークサイトのような、汎用アルゴリズムならfortranは速くなくて不思議は無いですよ。 C/C++とfortranのユーザー数考えたら、intelだってどちらにリソース割くかは自明でしょう。 ナンバークランチング用途ならfortranは多分まだ速いと思いますけど。
453 名前:デフォルトの名無しさん [2008/09/06(土) 00:53:21 ] Intel Fortran の次期バージョンベータテストが始まっている。 V.11が来年一月までの期限付きだが、無条件に配布されている。 Windows版はVisualStudio(Fortran 専用)つきで。 気になる人はチェキラ!w
454 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 14:52:15 ] もともとIntel FortranとC++は非商用目的なら無料で使えるんじゃない?
455 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 23:57:43 ] >>454 無期限はLinuxだけじゃないか?
456 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 15:10:37 ] Linux版だけだな Linux版ならIntel FortranとIntel C++が無期限で無償で使える
457 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 15:12:37 ] 非商用目的限定の話だけどね
458 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:50:36 ] 1秒間プロセスを寝かせるのはsleepという関数があるけど, 10msとか100msとか,ミリセカンドオーダーで寝かせるようにするには どうすればいいですか? Intelコンパイラを使っているので,Intelコンパイラ依存の関数でも いいです. 今は,無駄な計算ループを作って待たせているのですが, それだとCPU負荷になるので,できればCPU負荷にならないで 10msとか100msとか待たせられると嬉しいです.
459 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:03:04 ] >>458 Windowsなら、USE IFWIN して Win32 の API の Sleep 関数でやれた気がする。 Linux は知らないが、同じようにやれると思う。
460 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:30:30 ] nanosleep(2)
461 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 03:06:27 ] >>458 ifort依存ならWin/Linux共に SLEEPQQ で USE IFPORT CALL SLEEPQQ(3000) とミリ秒で指定できる。 但しあくまでも指定できるだけであって実際の休止時間をミリ秒単位の精度で 制御できるかどうかは別だが。
462 名前:458 mailto:sage [2008/10/07(火) 10:32:59 ] >>459-461 皆さん,ありがとうございます. 461さんのやり方でできました. それほど正確性を求めていないので,このやり方で十分です. ありがとうございました.
463 名前:デフォルトの名無しさん [2008/10/24(金) 15:08:54 ] おまいら、CUDAでFORTRANがサポされたらどうする?逝く?
464 名前:デフォルトの名無しさん [2008/10/24(金) 17:01:26 ] キュダってなに?
465 名前:デフォルトの名無しさん [2008/10/24(金) 20:17:32 ] >>464 GPGPUの開発環境 >CUDA GPUを計算に転用して10倍以上の高速化を実現するらす journal.mycom.co.jp/articles/2008/07/23/gpgpu/
466 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 10:45:52 ] 倍精度に対応したのか
467 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:36:04 ] CUDAよりインテルのLarrabeeが来そうだな。 ベクトル長を長くする方向だから80年代のプログラミングモデルが復活するし、 Intelのコンパイラは必ずサポートするだろうし。
468 名前:467 [2008/11/11(火) 14:06:01 ] ルンゲ・クッタ・ギル法を用いて連立の方程式を解きたいのですが, 時間刻みを小さくしても発散してしまうのですが,何かサブルーチン内に欠陥があるのでしょうか? QA0=QA CKA0=H*FNCT1(X0,YA0,YB0,W0,W1,A,A0,A1,B,B1,H0,L,PI) RA1=(CKA0-2.0*QA0)/2.0 YA1=YA0+RA1 QA1=QA0+RA1*3.0-CKA0/2.0 XX=X0+H/2.0 CKA1=H*FNCT1(XX,YA1,YB1,W0,W1,A,A0,A1,B,B1,H0,L,PI) RA2=(1.0-1.0/sqrt(2.0))*(CKA1-QA1) YA2=YA1+RA2 QA2=QA1+RA2*3.0-(1.0-1.0/sqrt(2.0))*CKA1 CKA2=H*FNCT1(XX,YA2,YB2,W0,W1,A,A0,A1,B,B1,H0,L,PI) RA3=(1.0+1.0/sqrt(2.0))*(CKA2-QA2) YA3=YA2+RA3 QA3=QA2+3.0*RA3-(1.0+1.0/sqrt(2.0))*CKA2 XX=X0+H CKA3=H*FNCT1(XX,YA3,YB3,W0,W1,A,A0,A1,B,B1,H0,L,PI) RA4=(CKA3-2.0*QA3)/6.0 YA=YA3+RA4 X=X0+H QA=QA3+3.0*RA4-CKA3/2.0 return end function FNCT1(X0,YA0,YB0,W0,W1,A,A0,A1,B,B1,H0,L,PI) FNCT1=-2.0*W1*H0*YA0-(W1**2.0+(W0**2.0)*(A/A0+(B**2.0)/(2.0*L*A0)-(L*A1*B)/(2.0*A0)))*YB0+((W0**2.0)*(3.0*L*A1)*(YB0**2.0))/(PI*A0) * -((W0**2.0)*(PI**2.0)*(YB0**3.0))/(4.0*L*A0)+(W0**2.0)*((-2.0*B1)/(PI*(W0**2.0))+(4.0*(L**2.0)*A1*A)/((PI**3.0)*A0)+(2.0*L*A1*(A**2.0))/((PI**3.0)*A0) * -(2.0*(L**3.0)*(A1**2.0)*B)/((PI**3.0)*A0)) return end 長々と申し訳ないです.お願いします
469 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:29:13 ] >>468 長すぎて考える気にならん。 関数のパラメータも多すぎて、条件も分からん。 ある特定のパラメータで発散するのか?ルンゲ喰ったギル法だけで異常が出るのか? どういう状況なのかも分からん。 答えようも考えようも無い。 もう少し親切心を持って聞けw
470 名前:468 [2008/11/12(水) 03:21:51 ] >>469さん すみません.どう書いたらよく伝わるのか分からず,書いてしまいました. 反省しております. 方程式は,T"(t)+T'(t)+ωT(t)+B1(t)T(t)+B2(t)T^2(t)+B3(t)T^3(t)=B4(t) のような方程式で, B1〜B4の中にも変数が存在してtが変化した際には変数も変化させたいのです. パラメータを変えた際には異常が現れなかったりします. わかりにくくて申し訳ありません.よろしくお願いします
471 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:42:56 ] ブックオフで培風館のFORTRAN77入門が100円だった さすがブックオフ本の価値が分かってない
472 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 00:52:36 ] >>471 古本屋での相場は美本で350円くらいだったと思う。 漏れは66版を150円で買ったような気がするw >>470 >T"(t)+T'(t)+ωT(t)+B1(t)T(t)+B2(t)T^2(t)+B3(t)T^3(t)=B4(t) よく分からんが、第三項はω^2じゃ無いか? それでBx(t)が微小量だとすれば、なんとなく意図が分からなくも無い。 減衰振動の単振り子に非線形項と強制振動項が加わったものなるので、 なんとなく動きのイメージがつかめるのでは。 パラメータによっては、当然発散も大いにありうるだろう。 そもそも正しく計算できているのか自信が無いのなら、Bx(t)を全部0に置けば、 へたれて行く減衰振動になるので、そういう解析解のあるところからチェックしてゆけば 自分のプログラムの挙動に自信がもてるのでは? 詳しく知りたければランダウ=リフシッツの力学の非線形振動における共鳴の節を読めwwwww
473 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:00:09 ] >>471 教科書で使ってたりするから、古本の流通量は結構多い気がする。
474 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 02:46:31 ] カバーの焼けはあるけどおそらく新品 改訂版じゃなくて初版の方だったので返品在庫の放出かしら 配列のとこやってるけど、配列への入力とかあってすごいね 宣言なしで唐突に出てくるループカウンタにもびっくりするが
475 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 10:19:44 ] >>474 えぇ〜? 暗黙に型宣言されてるぜ! 最近のスクリプト言語で、これに近い形に先祖がえりしているのがワロス
476 名前:デフォルトの名無しさん [2008/11/13(木) 14:07:56 ] implicit none しても結局は暗黙のやつに則ることは多いよね。 character,logicalは無いので c と l で始めるようにしたり。 暗黙の型宣言はあれはあれで良いものだ。
477 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 21:11:06 ] いや、Cが複素数でZが倍精度複素数だろ
478 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 00:55:13 ] >>476 lは1と見間違いやすいからあまり使わないが、貴重な整数型なのでもったいない。
479 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 05:22:43 ] >>478 Lは大文字で使う
480 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 00:36:10 ] >>479 ボーランド記法? 昔PASCALに散々いじめられたから嫌w
481 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:49:36 ] >>477 c を複素数に振るときには character 型は s で始めるようにしてるな。 >>478 l は先頭でだけ使うようにしてる。 先頭が数字の変数ははじかれるから 混同しなくてすむ。
482 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 01:24:43 ] 東京で先週開かれたISOのFortran部会でCoArrayFortranに関する扱いで 何か進展はあったのでしょうか? つまりCAFを排除できたのでしょうか?
483 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:57:56 ] >>482 東京会議の結論がうpされたようだ。 www.nag.co.uk/sc22wg5/
484 名前:デフォルトの名無しさん [2008/12/06(土) 18:55:27 ] The shapes of the array expressions do not conform. って出てくるのですが、どういうことですか?
485 名前:デフォルトの名無しさん [2008/12/11(木) 16:23:19 ] 配列間違ってないか?
486 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 02:11:30 ] C Pad for Salford FTN77 でCPU TIME を出力できるようにする方法はありますか?
487 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:02:53 ] >>486 HIGH_RES_CLOCK@ 使い方は Library Reference に載ってる。
488 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 09:11:38 ] >>487 亀ですが ありがとうございます。 出来ました!
489 名前:デフォルトの名無しさん [2009/01/24(土) 19:01:34 ] 関連スレが新しくなりました。 くだすれFORTRAN(超初心者用)その4 pc11.2ch.net/test/read.cgi/tech/1232789521/l50
490 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 00:23:26 ] うちの研究室の人たちがFortranでプログラミングしているけれど お前らgoto使いすぎ・・・ というか自分の提出したプログラムがgoto文に書き換えられている・・・ subroutine、functionを使いすぎるのはスパコン計算に向かないと言っていたけれど 勉強してきた構造化プログラミングの手法自体がfortran向きでないということなの?
491 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 02:32:22 ] >>490 インラインされるようにしろw コンパイラが安心してグローバル最適化できるように、付加的な情報を与えてやれ。 グローバルな構造が人間が見て分かりやすいならコンパイラも見て分かりやすい。 INTENT指定はつける。 FUNCTIONは、PURE (可能ならELEMENTAL)にする とかすればDO..LOOP内で関数呼び出しとかしても並列化やベクトル化してくれるはず。 コンパイラによるが。 実際にベンチマークを取って、自分が勝利すれば、後は文句いわれないべw
492 名前:デフォルトの名無しさん [2009/02/12(木) 12:52:18 ] >>491 intent属性つけると微妙に速くなるよね。 特にloop内で頻繁に呼ばれるやつだと全体で5から20%くらい違ってくる。 最近のコンパイラはF77で書いててもintentをわかってくれるから楽だ。 で・・・・pure,elementalの事はよくわからないので詳しく!
493 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:04:13 ] >>492 PUREもELEMENTALもFortran95で導入されたキーワードで、関数やサブルーチンの 副プログラムの性質をコンパイラに教える修飾語。 PURE FUNCTION unko(x) などのように宣言の頭につけて使う。 PUREというのは、大雑把には副作用がないこと。それゆえ、並列に動作させても 値が変わらないので、コンパイラは並列化など最適化をやれる。 (PUREを満たさねばならない条件はいくつかあるので、kwskはマニュアル見てくれ) ELEMENTALはPUREの中でさらにいい性質を持ったもの。 本来は1変数で定義してあっても、配列を引数にとって、配列を返すように使ってもいいもの。 たとえば、 REAL :: a(10), b(10) b = SIN(a) こういう使い方が組み込み関数では出来るわけだが、自作の関数でもこうやって使っても いい場合にELEMENTAL (要素毎の意味) をつける。 これもコンパイラが利口なら、最適化をかけてくれるはず。 普通、DO..LOOP内に関数やサブルーチンの呼び出しがあると、呼び出し先で何が あるかわからないので、最適化が抑止されるが、PUREやELEMENTALがあれば、 安心してコンパイラが最適化できる。(原理的にはw)
494 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 08:29:24 ] >>493 ありがとう。pure 属性は使い易そうだ。
495 名前:494 mailto:sage [2009/02/13(金) 11:01:13 ] loop内で頻繁に呼ばれる4個つくらいの function や subroutine に pure 属性つけただけで 並列(OpenMP)の時にちょびっと速くなった。わーい。 もともとdo-loopで一つずつ処理しているので elemental を使える状況は少ないけど、 もう少し理解してから使ってみよう。 inlineを少し深くするようになったからかコンパイル時間がすこし長くなったけどまあ気にしない。
496 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 22:12:50 ] >>491 なるほど、ためになったわ。サンキュー。PUREを付けるだけで簡単に速くなったわ。 担当のは基本的に古い人間だから、あまりコンパイラ任せにするなとか言うんよな…。 Fortran90っぽい77形式の文も、「完成した後で直します」とか言ってそのままだったり。 implicit realもcommon文もどうにかしたいけれど、きっと文句言うんだろうな。
497 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 02:22:54 ] >>496 PURE 属性はもともと HPF で導入されたものなので、それなりのメーカならコンパイラ にも最適化のノウハウの蓄積があるはず? ELEMENTAL も一変数用にサブルーチン書いて、配列を渡せばいいので、DO..LOOPを あからさまに書かずにすむ。時々ソースがすごくすっきりして楽になることがある。 でも、ついでだから古い人間を擁護してみるかw FORTRAN77 にも、むきだしの良さがあるw Fortran90 以降だとソース上は簡潔になっても、影で動的にテンポラリ配列とか取るので 気持ち悪いところもある。長時間並んだJOB がStackOverflow とかで止まっていたり すると殺してやりたくなる。古い時代の人はその辺が嫌なのかもしれないw COMMON もグローバル変数だと思うとむかつくだろうが、 自分でガベージコレクション しながら、変数領域を自由自在に再利用して操っていると思うと、結構気持ち良い。 メモリーが貴重だった時代には、利用価値が高かった。 IMPLICIT に関していえば IMPLICIT NONE をつけた上で、頭文字を守ればいい。 C と違ってローカルスコープの捨て変数が使えないから、頭文字を守らないと いちいち宣言部に戻って型を確かめないといけないのでめんどい。 Fortran では数値の精度が致命的に重要で、倍精度計算中に1個単精度が混じるだけでも すべての結果が単精度のゴミになるのだから、数値精度に無頓着の他のおしゃれ言語の 連中の言説を信じると痛い目に会わされるw
498 名前:デフォルトの名無しさん [2009/02/18(水) 13:19:26 ] pure属性付けたサブルーチン内で pure属性付けた他のサブルーチン呼ぶ時には interfaceで引数部分の性質を教えて置かないといけないんだね。 f77書式で書いてるのに interface intent が 現れるのでムズムズするけどムズムズするだけなのでそのまま。
499 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 16:08:37 ] OpenMPを試してみてるんだけど、いまいちうまくいかないんだが・・・ ifort -QParallel でコンパイル+実行するとうまくいくんだけど、 同じソースをifort -Qopenmp でコンパイル+実行すると Program Exception - stack overflow っていうエラーが出る ソース中にOpenMP構文は use omp_lib だけ これってどうしたらいいのかな?
500 名前:499 mailto:sage [2009/02/26(木) 16:22:10 ] おk事故解決 -auto_scalar オプションでいけた
501 名前:デフォルトの名無しさん [2009/02/26(木) 16:49:38 ] >>500 だたの -auto や -static でうまく行くこともあるよ。あとは実行時の環境変数の setenv KMP_STACKSIZE 16M とかデフォより大きめに取ると幸せなことが多い気がする。
502 名前:デフォルトの名無しさん [2009/02/26(木) 16:50:50 ] >>500 ていうか、 -auto_scalar ってデフォルトになってない?
503 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 17:23:54 ] -openmpだとデフォで動的(-auto)になるんだっけか >>499 は単にスタック不足なだけでは? ところで、KMP_STACKSIZEってunlimitedに設定できないの?
504 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 17:58:56 ] 動的っていってもヒープとスタックがあるよね。 Fotranの場合ってどういう風に割り当てられるんだろう・・・そういやあまり意識したことなかった。
505 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 02:43:33 ] >>504 元々はAUTOMATIC変数の類はスタックに、ALLOCATE命令のときはヒープだった気がする。 ただ歴史的経緯のせいでサブルーチン側で巨大な配列をとっているプログラムが多くて それがSTACKOVERFLOWを引き起こすから、IntelFortranなんかはデフォールトでは スカラー変数はスタックで、配列の類はヒープで確保するようになった気がする。 インテルの掲示板に、デフォールト・オプション切り替えの話が出ていた旗もするのだが 昔のことなので記憶がはっきりしない。 OpenMPを指定すると、オプションが切り替わってしまう話はこのスレに出ている。 software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/59627/ FortranはFORTRAN66時代がSTATICに変数をとっていた関係で、 FORTRAN77で規格の上ではサブルーチン類の変数はAUTOMATICでありうるように なったにもかかわらず、互換性の観点からデフォールトでSTATICに変数を とっていることが多くて、それはFortran90でもしばらく続いていたという歴史的経緯がある。
506 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 11:54:19 ] >>505 そのスレのSteveさんが言ってるlocal scalar variablesって、配列じゃない(次元1の)フツーの変数のことだよね? だとしたら、 If you say /Qopenmp (or /Qopenmp-stubs), this changes to /automatic - ALL local scalar variables are allocated on the stack. のALL local scalar variablesはALL local variables(つまりローカルスカラ変数だけじゃなく、ローカル配列変数も含む)の間違いじゃないかな? 勘違いしてたらすいません
507 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 13:12:01 ] >>506 そうなんじゃないかな? 配列までスタックにとるからoverflowしていると考えるとつじつまが合う?
508 名前:506 mailto:sage [2009/02/27(金) 13:52:41 ] >>507 そうだよね。SteveさんIntelのスタッフなんだし書き間違わないでくれよぉ・・・ OpenMPの場合にデフォルトで全てのローカル変数(スカラも配列も)がスタックになるのは スレッドセーフのためってあるけど、逆に言えばそれらをstaticに扱ったらスレッドセーフに ならないってことだよね。それってやっちゃまずいことなんだろうか? OpenMPまともに使った経験がないもんで・・・識者の方コメントおながいします
509 名前:デフォルトの名無しさん [2009/02/27(金) 14:48:49 ] -openmp つけてコンパイルすると、仮にautomaticは嫌いだっと -noauto つけても消されるはず。なのでopenMPを読んだ状態だと 有無をいわさずにぜんぶautomaticになる・・・と理解しているけど。 shared属性をつけてかつcommonブロックに貼り付けるとかして やや無理なことをしないとstatic領域には配置されないと思ふ。 -staticはその名のイメージとは違って共有ライブラリを使わない (というか実行ファイルに埋め込んじゃう)オプションだし。 spec.orgにあるOMP2001の情報のところに試した人たちが 実際に使ったオプションが載ってるので、自分のところのシステムに 近い(or 同じ)マシンがあったらそれと同じモノをだいたい使っているけど、 まあ大間違いではないと思う。お薦めできるのかは分らないけど・・・。
510 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 15:30:30 ] え、OpenMPだとサブルーチン内ではstatic配置ってできないわけ? 数値計算では馬鹿でかい配列は可能な限りstaticにするのが基本じゃない? サブルーチン渡る度に配列をコピーとかやってられんでしょ? その代わりメモリのアロケーションはコーディングする側がきちんと考えてあげないといけないけど。 この辺がリソースをある意味富豪的に使うことが前提とされるJavaやC#などのオブジェクト系言語との違いだね。
511 名前:デフォルトの名無しさん [2009/02/27(金) 16:56:15 ] 510はちょっと尋ね方が変だな。 副プログラムが並列のloop内にあるのか、 副プログラム内で並列のloopがあるのかで答は変わる。
512 名前:510 mailto:sage [2009/02/27(金) 19:38:52 ] 的外れな質問してたのかな、ごめん・・・。 >>511 の両方のケースとも知りたいので、よかったら教えてほしい。 流体とかの数値計算では行列の反復法とかはサブルーチン内でやるけど、 そういうケースでメモリのアロケーションはどうすべきなのか、という視点で興味があります。
513 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 00:58:18 ] >>512 引数に載ってれば、Fortranは参照呼出しなんだから配列のコピーが生じるはずもない。 CやPASCALとは違う。(まぁ最近はVALUE属性も出来るようになったが) ここでは副プログラム内で新たに割り付けられる配列の話だろう。 それが動的に取られるとして、スタックに取られるか、ヒープに取られるかの違い。
514 名前:510 mailto:sage [2009/02/28(土) 01:28:49 ] >>513 >副プログラム内で新たに割り付けられる配列 あ、そういう話か・・・ありがとう。 自分は一時作業用の配列も全部メイン側で用意してやって引数渡ししてるんだけど、 そういうのはサブルーチン内でスタックやヒープで取ってやる方がいいのかな? 皆さんどうしてますか?
515 名前:デフォルトの名無しさん [2009/03/03(火) 06:16:03 ] allocatableを副プログラム内で作ってそれ(先頭アドレスやらサイズその他)を メイン階層や他の副プログラムに行き渡らせるのが割りと 面倒臭いのでメイン階層でやってる。 メイン階層が長くなるのは正直あまり好みではない、けど まあ好みの問題なだけなので気にしないようにしている。 allocatable使うと場合によってはプログラム内で明示するサイズより大きいメモリを扱えたり (コンパイラはハンドルできるメモリサイズ < OSがハンドル出来るメモリサイズ、なので)、 格子数(データ数)の違う処理を同じ実行イメージで出来る(コンパイルしなおさなくて良い)のが いいけど、最近ではサイズをプログラム内で固定変数で明示していちいちコンパイルしている。 その方がミスは少ない気がする。気のせいかもしれないけど。
516 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:11:34 ] 何がスタックやヒープに割り当てられるのか分からんかったのでググった。 ブログだけどw ttp://monologuemidnight.blogspot.com/2009/01/blog-post_03.html module中の大域的な変数、save属性付きの変数→.bss allocatable属性な配列→ヒープ 普通にサイズが宣言されている自動配列→スタック 手続き中の変数(mainでも同様)→スタック ってことらしいが…。 この辺は規格ではないっぽいので、コンパイラの仕様をちゃんと確認したほうがいいな。
517 名前:デフォルトの名無しさん [2009/03/11(水) 18:46:48 ] ifortで複数の数字を出力すると勝手に改行されるんだけど、改行を抑制するオプションってある? gforntranでは改行されないんだけど。 real(8) a(5) write(*,*) a(:) とするとa(3)とa(4)の間で改行されちゃう。
518 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 04:57:59 ] >>517 気持ち悪いけど、下記のようにしてもだめかな? クラシックな書き方だけど。 write(*, '(100f10.5)') a(:)
519 名前:デフォルトの名無しさん [2009/03/12(木) 09:37:42 ] >518 ありがとん。 write(*,'(100f)') a(:) でいけた。
520 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:01:35 ] 改行抑制なら、write文ならadvance='no'を付ければできるはず 出力するものが決まってるなら、改行してしまう書式の箇所に\(バックスラッシュ)を入れてもいい
521 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 11:34:42 ] >520 advanceはフォーマット文がいるから、結局519と同じでは?
522 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 03:12:33 ] >>521 '(100f)' なんて書くよりはスマートな気がするけど? ま、どうでもいいことだな
523 名前:デフォルトの名無しさん [2009/03/18(水) 04:24:12 ] do i = 1, 5 write(*, '(f10.5,$)') a(i) enddo write(*,*) '' はダメかな? 改行するなよ、の$は非標準だけどDEC以来ほぼ標準と思っていいのではないだろうか
524 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 21:51:40 ] ちょっとテストしてみた@Intel Fortran 10.1 integer::i integer,parameter::imax=5 real(8)::f(imax) do i=1,imax ; f(i)=i ; enddo print *, "print *,f" print *, f print *, '---' print *, "write(*,'(f)') f" write(*, '(f)') f print *, '---' print *, "write(*,'(f)') (f(i),i=1,imax)" write(*, '(f)') (f(i),i=1,imax) print *, '---' print *, "write(*,'(f\)') f" write(*, '(f\)') f print *, '---' print *, "write(*,'(f)',advance='no') f" write(*, '(f)',advance='no') f print *, '---' print *, "write(*,'(f)',advance='no') (f(i),i=1,imax)" write(*, '(f)',advance='no') (f(i),i=1,imax) print *, '---' end
525 名前:>>524の結果 mailto:sage [2009/03/18(水) 21:52:34 ] print *,f 1.00000000000000 2.00000000000000 3.00000000000000 4.00000000000000 5.00000000000000 --- write(*,'(f)') f 1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 --- write(*,'(f)') (f(i),i=1,imax) 1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 --- write(*,'(f\)') f 1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 --- write(*,'(f)',advance='no') f 1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 --- write(*,'(f)',advance='no') (f(i),i=1,imax) 1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 ---
526 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:07:03 ] ごめん。 print文かwrite文か、また出力並びをfとするか(f(i),i=1,imax)とするかで、 出力結果が違うのかと思ってやってみたが、違いはないっぽい。 というわけで、>>524 をもっとすっきりさせた。 integer::i real(8)::f(3) do i=1,3 ; f(i)=i ; enddo print *, "write(*,*) f" write(*,*) f print *, '---' print *, "write(*,'(f)') f" write(*,'(f)') f print *, '---' print *, "write(*,'(f\)') f" write(*,'(f\)') f print *, '---' print *, "write(*,'(f)',advance='no') f" write(*,'(f)',advance='no') f print *, '---' end
527 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:19:08 ] ↑の結果 write(*,*) f 1.00000000000000 2.00000000000000 3.00000000000000 4.00000000000000 5.00000000000000 --- write(*,'(f)') f 1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 --- write(*,'(f\)') f 1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 --- write(*,'(f)',advance='no') f 1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 --- 結論 @書式省略すると、適当な位置で改行してくれる(規格で決まってるんかな?) A書式指定すると、書式の中身が終わる度に改行 B書式に\を付けると改行抑制 C書式にadvance='no'(デフォルトはyes)を付けるとwrite文が終了したときに行う改行を抑制(Aとの違いに注意) って感じかな。 改行抑制の\と改行指定の/が混ざるとどんな出力になるんだろう。
528 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:20:24 ] ごめん、>>526 は real(8)::f(3) do i=1,3 ; f(i)=i ; enddo は↓に修正。 real(8)::f(5) do i=1,5 ; f(i)=i ; enddo
529 名前:デフォルトの名無しさん [2009/03/22(日) 01:30:43 ] >@書式省略すると、適当な位置で改行してくれる(規格で決まってるんかな?) コマンドプロンプトの右端で改行だと思う 違うかなー
530 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:23:20 ] >>529 他のコンパイラでは改行しないので、コンパイラのせいだと思います。 >>524-528 ありがとうございます。 参考になりました。 write(*,'(f\)') f が良さそうですね。
531 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 15:14:13 ] >>529 Fortranに限らず、プロンプトのサイズは関係ないよ