FORTRAN Ⅳ

1デフォルトの名無しさん
FORTRAN総合スレッドです。
FORTRAN77/90/95/2003, HPF等、FORTRAN全般に関する話題を書き込んで下さい。

・FORTRAN関連情報
お約束だが、まずは自分で調べよう
http://www.google.co.jp/

x86で動作するFortranコンパイラ
http://www.nminoru.jp/~nminoru/programming/x86-fortran.html

The Fortran Company
http://www.fortran.com/
Polyhedron Software
http://www.polyhedron.co.uk/
Google Directory - Fortran
http://directory.google.com/Top/Computers/Programming/Languages/Fortran/

・前スレ
FORTRAN III
http://pc8.2ch.net/test/read.cgi/tech/1104724162/
FORTRAN II
http://pc5.2ch.net/test/read.cgi/tech/1068351911/
Fortran
http://pc2.2ch.net/test/read.cgi/tech/1003214738/
2デフォルトの名無しさん:2006/11/12(日) 17:14:45
・フリー/無料評価版のコンパイラ
The G95 project (Fortran95)
http://www.g95.org/
GCC (g77) (今のところ FORTRAN77)
http://gcc.gnu.org/
Salford FTN77/95 Personal Edition (Fortran77/95, Windows, 要登録)
http://www.salfordsoftware.co.uk/software/downloads/compilers.html
FTN77/95のインストール方法
http://www.coastal-env.k.u-tokyo.ac.jp/koibuchi/fortran.htm
the F Programming Language (Fortran90のサブセット, Win/Linux/Solaris)
http://www.fortran.com/F/compilers.html
Open Watcom Fortran Compiler (FORTRAN77)
http://www.openwatcom.org/
Intel Fortran Compiler (Fortran95, 無料評価版(Win)/非商用バージョン(Linux), 要登録)
http://www.xlsoft.com/jp/products/download/download.html
Lahey/Fujitsu Fortran (期限付きトライアル版は終了した模様)
http://www.lahey.com/downloads.htm

・ドキュメント
Compaq Visual Fortran オンライン・ドキュメント
http://www.xlsoft.com/jp/products/intel/cvf/docs/index.html
Intel Fortran Compiler 日本語版マニュアルのダウンロード (要登録)
http://www.xlsoft.com/jp/products/intel/download.html
富士通Fortranオンラインマニュアル
http://www.cc.nao.ac.jp/fsunman/japanese/Fortran/index.html

FORTRAN77 standard
http://www.swcp.com/~walt/F77_std/f77_std.html
http://www.fortran.com/fortran/F77_std/rjcnf0001.html

JISデータベース
http://www.jisc.go.jp/
3デフォルトの名無しさん:2006/11/12(日) 17:48:19
  ヽ/l l ニ|ニ           ,.、-''"..;:;:;:;:;:;:;:... `'ヽ、
  (   ( ̄   ̄)      /....:::;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;.....ヽ、/ ̄ ̄ ̄ ̄\/
    ̄    ̄         i_;;、:_;、;_;、;、;、、ィッ.;:;:;:;:;: /  興  F     君
 ,.、-──-- 、.,_     ,、  |      ,,,,,,  / ;:;:;:;:;:;: |   味   O      :
          ``''--イ ,),、,! '''''        \ ;;;;;;;;;_|   が   R      :
              ヾー'゙ |ヒニニュ ャニ,ニニ、> 〉;; / _|   あ  T
       ノ l  ハ  l ヾ トイ `!゙l)_j   ' iリ__, `  }ii l f'ト〉   る  R
    _,,.ノ _ノ / ノ ノ ノノ!_丿 |   l   ` " '''   }ii リノ |   の   A  |\__
      ノ ,、ィ'-=z=F [_   .l! .{   、     ィ!ii;}' ノ|   か   N   |
   -‐''゙_ノ ,ノ  '゙ (ソ   ヽ   {! ゙ー<⌒'     ,ミi;i;}ー'゙ |   ね       |
  、 ィッ>f「  _,,二-   ヽ.  }i、  -===-'  リiii;ツ   |   ?       |
   `〒T〔!|       r ,_ノ _ノ}lli,  -r=‐  ,i;llilili|   > _____/`ヽ、
     ゙、ヽ`!  l   _ _」 // '}llli, ,;i|i;, ,,ii;ilililll'゙リ /  ̄ l l      ,、 ''⌒゙ヽ、
     `ト.、!  lj  (__l、/  |   ゙ト!llllllllllliillllllllヅ_、-゙    /,l l       /
     l ゙ト、     t'゙ |   |  | |、'lトllトllトツ "´    // l l       /
   ,ィ、化ァ ',\       l 〉  |   | | ゙、 //∧    / /  l l     l
(爪((、`ー'′ ', `''t‐--'′〉ト、 |   | |. Vハ彡 ∧  /    |_L、  i | /
 ̄ ̄ ̄`¨`''ー--ニL_   `!、 `! l ̄`''┴--┴'-'゙-─…''"´_,, ィ|  l |/
            丨   ヽ ` ', | O``''────…'''"´  O',゙:、  l |/
4デフォルトの名無しさん:2006/11/12(日) 18:34:32
機種依存文字使うなボケ失せろ
5デフォルトの名無しさん:2006/11/12(日) 19:07:04
>>4
きたねー言葉使うな糞野郎!

死ね!
6デフォルトの名無しさん:2006/11/12(日) 19:30:21
数値積分が使えるフリーの数値計算ライブラリありませんか?
7デフォルトの名無しさん:2006/11/12(日) 19:58:47
>>6
NetLibへ池。66時代のものがごまんとあるぜ。
8デフォルトの名無しさん:2006/11/12(日) 20:01:14
IMSLがあるんじゃね?
9デフォルトの名無しさん:2006/11/12(日) 20:02:08
>>8
IMSLは有料パッケージソフトだぞ。
10デフォルトの名無しさん:2006/11/12(日) 20:08:40
IMSLは10万以上する予感

LAPACKに積分はふくまれておらんの?
11デフォルトの名無しさん:2006/11/12(日) 20:08:54
コンパイラより高い・・・
12デフォルトの名無しさん:2006/11/12(日) 20:10:38
このスレのエキスパートたちは有料パッケージとか使っておられるのですか?
13デフォルトの名無しさん:2006/11/12(日) 20:13:17
>>7
Netlib行ったが数が多すぎて何がなんだかわからない。
これをどう使えばいいかすらわからない。
見た感じプログラム単体が落っこちているだけにしか見えないが
どうやってってこれを呼び出して使うんだろうか。
14デフォルトの名無しさん: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デフォルトの名無しさん:2006/11/12(日) 21:19:12
初心者は富士通のサブルーチン付きコンパイラ買うのがbestじゃね?
難易度も予算も
16デフォルトの名無しさん:2006/11/12(日) 21:25:25
Intel Math Kernel Libraryでok
17デフォルトの名無しさん:2006/11/12(日) 21:36:09
MKLって積分ルーチン入ってるの?
18デフォルトの名無しさん:2006/11/12(日) 21:39:47
多分ない

というか、フリーで有名どころのパッケージには積分ルーチンは無い予感
19デフォルトの名無しさん: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デフォルトの名無しさん:2006/11/13(月) 20:30:25
メインプログラムにLorentzの型定義がないからinteger扱いされてんじゃねーの?
2119:2006/11/13(月) 21:30:09
implicit noneで解決しました。
1時間も時間を食いました。
22デフォルトの名無しさん:2006/11/14(火) 00:43:00
自由書式で書くなら関数・サブルーチンは内部手続きにするか、MODULEにするか
INTERFACE宣言してから使おう。
23デフォルトの名無しさん:2006/11/14(火) 01:07:20
>>20,22
が正しい。

>>19はあまりに中途半端。きっちりと厳格なF90式で書くか、F77式に暗黙の型を守るべき。
24デフォルトの名無しさん:2006/11/14(火) 02:41:24
INTEL FORTRAN用のBLAS/LAPACKだが、AMDのcore-math-libraryにWindows用もうpされている。
昔はLinux用の一部ルーチンだけだったが、いまや全ルーチンを網羅したようだ。

漏れはAMDなので、誰かIntelChipでも使えるか試してくれ。

http://developer.amd.com/acml.jsp
25デフォルトの名無しさん:2006/11/14(火) 15:36:00
fortran中で他のexeを実行できるようにするにはどうしたら良いですか?
fortranで作られたexeなんだけどソースくっつけるのがめんどくさいんで・・・w
26デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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文で書かないといけないのですが
どうすればいいんでしょうか・・
3330:2006/11/15(水) 00:03:03
>>31
詳しいレスサンクス!
34デフォルトの名無しさん:2006/11/15(水) 00:35:58
>>26
残念ながらあまりいい本は無い。

今、手に入りやすいのはこれ。
http://www.amazon.co.jp/gp/product/4563014095
しかし、F77の癖を引きずっていて、あまりいい書き方をしていない。
著者は京大のおっさんらしく、WEBで同等の内容のものを見られる。
アドレスはアマゾンのレビューに書いてある。

英語でよければ、この辺とか、
http://www.lahey.com/elfpage.htm
この辺のEssential Fortranあたりが学習用サブセットになっていて、純粋F90を学べる。
http://www.fortran.com/F/books.html

しかし、現実世界ではF77ソースがあふれているので微妙ではある。
実際上記のものは教育用としてもはやらなかった。
35デフォルトの名無しさん: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デフォルトの名無しさん:2006/11/15(水) 18:31:55
>>37
read (*,*) x,log(x),log10(x)
どこに入れたいの?
たぶん、その穴じゃないわよ
39デフォルトの名無しさん: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デフォルトの名無しさん:2006/11/17(金) 00:48:27
>>40
タイトル一緒だから混乱しそうw
4237: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/11/17(金) 19:09:14
>>46
「変数の型」を再勉強してから出直してこい。
48デフォルトの名無しさん: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 つくってみた
http://www.moecity.jp/home/fortran/

wikiよく知らない。自由に使ってみてくれ。
51デフォルトの名無しさん:2006/11/18(土) 19:42:09
f90スタイルで学べるいい文書はありませんかね。
英語か日本語でお願い
52デフォルトの名無しさん: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デフォルトの名無しさん: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では(当然)
5554:2006/11/18(土) 22:12:21
× g95では(当然)
○ g95では(当然) A は配列全体と解釈された。
56デフォルトの名無しさん:2006/11/18(土) 23:02:07
>>54
そうじゃなくて
REAL A, A(10)
が可能だったと思う。
57デフォルトの名無しさん: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デフォルトの名無しさん:2006/11/20(月) 08:30:40
Fortran90なんですが,

integer a(1:100)=0

みたな初期化の仕方はよくやるんですか?
60デフォルトの名無しさん:2006/11/20(月) 08:32:30
×みたな
○みたいな

orz
61デフォルトの名無しさん:2006/11/20(月) 09:01:16
>>60
よくやる。
しかしその初期化はリンク・ロード時に行われるものなので、
実行行でa(1:100)=0と書くのとは微妙に違う。

6259:2006/11/20(月) 15:25:10
>>61
レスありがとう
63デフォルトの名無しさん: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

6759:2006/11/20(月) 21:40:21
>>63
そうでした

integer :: a(1:100)=0

じゃないと通らんです.
68デフォルトの名無しさん:2006/11/22(水) 00:03:15

くだすれFORTRAN(超初心者用)その2
http://pc8.2ch.net/test/read.cgi/tech/1164121236/
69デフォルトの名無しさん: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デフォルトの名無しさん:2006/11/22(水) 14:12:45
お前らが使っている計算機のスペックきぼんぬ

うちは
CPU:Pentium4 3.2GHz
メモリ:1GB
コンパイラ:Intel Fortran コンパイラ

メモリを2GBにしろと進言したが無理だった。
73デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/11/22(水) 16:51:21
>>76
わたしもよくわかんないけど、
DLAXRを呼んでるけど、このファイルではまだ定義されてないから
型・(引数の数とかの)形式があってるか不安・・・
よければファイルに書いといてね

たぶん他のファイルで定義されてるんだろうから
とりあえず適当にくっつけるけど、間違っても怒らないでね(byふぉとらんこんぱいら)
78デフォルトの名無しさん:2006/11/22(水) 17:24:56
>>74
DLAX, DLAXR って名前から察すると、富士通の数値計算ライブラリSSL II を使ってるっぽい。
79デフォルトの名無しさん:2006/11/22(水) 17:45:18
すれ違いかも知れないが、CoreDuo、Core2DuoでLinuxで動くの?
80デフォルトの名無しさん:2006/11/22(水) 18:00:54
>Core2DuoでLinuxで
シンタックス・エラー: 解決されない助詞「で」
81デフォルトの名無しさん: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デフォルトの名無しさん: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さんの言うとおり、富士通SSLⅡを使っている様子です。

>>82
LaheyやLAPACKとはどんなものですか??
91デフォルトの名無しさん:2006/11/24(金) 20:57:18
92デフォルトの名無しさん:2006/11/24(金) 23:12:56
>>90
Laheyはコンパイラの自社独自開発をやめて、今では富士通のフロントエンドを使っている。
富士通はLinux版しか出していないが、LaheyはWindows版も出している。
富士通が絡んでいるので、プロフェッショナルバージョンを買うとSSLがついてくる。

あとSSLは名古屋大学のNUPACKと密接な関係があるので、netNUMPACが参考に
なるかもしれないし、ならないかもしれないwww
漏れは富士通系はメインには使わなかったのでよく知らんw


LAPACKは固有地問題と線形問題用のサブルーチン集だ。これは国際標準と化してきているので
どこの機械でも動いている。
93デフォルトの名無しさん: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デフォルトの名無しさん:2006/11/25(土) 08:07:15
>>89
>確かに速く知りたいという気がはやりすぎて、いろんな所で質問していますね
それはマルチポストと言って、マナー違反だな。
ここをよーく読んどくように。
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88
95デフォルトの名無しさん: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デフォルトの名無しさん: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
では意味が違うのだ。
9896: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デフォルトの名無しさん: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
107105:2006/11/30(木) 22:29:33
ごめん 北緯と南緯の処理が間違ったままの古いのうpしてしまった。
ま、本質は変わらんから適当に処理しておいてくれ。

質問があれば、答えやすく論理的に聞いてくれ。
108105: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デフォルトの名無しさん:2006/12/01(金) 12:38:00
Mixi より vipper の方が上なのかよw 
110デフォルトの名無しさん :2006/12/01(金) 15:04:03
>105さんありがとうございます

今日だされた答えを見比べてみたら、合っています!!
でも、私が実際にやってみた所たくさんのエラー出てきてどうしようもない
状態です><
今、私が利用しているのは[fc pad FTR77]というfortran77のものなんですが
どうしてエラーが出てしまうのかがよくわかりません><

もしも今回のものがfortran77でないとしたら、今度から実際にやるとしたら
どのようなプログラムになるのですか?

よければ、教えてください><
111デフォルトの名無しさん:2006/12/01(金) 19:50:23
浮動小数点の値がでかすぎて整数型に変えられません
ってエラーが出てくるんですが、どうすれば回避できますか?
浮動小数点のままちっちゃくして(10で割るとか)整数型に変えてから10を
掛けるとかすれば回避できると思いますけど(端数は取っといて後で足すとして)
こんな妙なことする必要ないですよね…

くだすれに書き込むべきかと思いましたが落ちてますよね?
112デフォルトの名無しさん:2006/12/01(金) 20:10:12
くだすれFORTRAN(超初心者用)その2
http://pc8.2ch.net/test/read.cgi/tech/1164121236/

それから質問内容は「具体的に」な
113デフォルトの名無しさん:2006/12/01(金) 20:28:00
>>112
あれ?たってましたか…すみません。
そちらで聞いてきます、ありがとう。
114デフォルトの名無しさん:2006/12/01(金) 23:08:57
115デフォルトの名無しさん:2006/12/01(金) 23:14:37
>>111
今の一般のFORTRANの整数は32ビットの整数だ。
その場合表しうる数の範囲は-2^31~2^31-1だ。

2^31=2147483648~2*10^9→2ギガ だから、これより絶対値の大きい
実数を整数に変換しようとすればエラーが出る。

たとえ10で割ってうまく収まっても10倍したらオーバーフローするので無意味だ。
整数のオーバーフローは検知されないので(オプションにもよるが)実行時エラーが
出ないまま無意味な計算が続くことになる。

116デフォルトの名無しさん:2006/12/01(金) 23:23:55
>>110
それはFortran90のプログラムだから、Fortran77ではエラーが出るのは当然だ。
ちみは今度からは、くだスレの方に書きなさい。

しかしその程度のレベルで、あの座標回転を使って解いたプログラムを出したら
他人にやってもらったことがバレバレだwww

次からは最初にFORTRAN77でお願いしますと書いておきなさい。
117デフォルトの名無しさん:2006/12/03(日) 01:14:47
もっと初心者にやさしくしてやれよ。

Fortranユーザーを増やすために。
118デフォルトの名無しさん:2006/12/03(日) 04:16:33
>>117
同意・・・(どうでもいいがw)
119デフォルトの名無しさん:2006/12/03(日) 05:14:42
初心者っつーより只の宿題教えてクンっぽいが。
120デフォルトの名無しさん:2006/12/03(日) 18:07:18
FORTRAN77
のGOTO文とラベルの嵐に
いやになり,暫くC++系に浮気してたが
Fortran90当りからまたフォトランナーに戻った
121デフォルトの名無しさん:2006/12/03(日) 19:04:12
>>120
おかえりなさい。

C言語は、C99,D,C++,ObjectiveC,SecureなCなどに分裂してきているので、
煽ってこの分裂をいっそう深めて、Fortranを有利にしてくれ。

122デフォルトの名無しさん:2006/12/04(月) 03:38:34
>>121
それを発展ともいうんだがw
123デフォルトの名無しさん:2006/12/04(月) 17:38:37
計算量が増えてきたので、1台パソコンを増やそうとしているのですが、
(現在Pen4 3.6GHz、IntelVisualFortran9.0)
並列計算しそうにないコードなので、CPUの選択に迷っています。
今までPen4あたりのシングルコアで流していた方はこれから
どうされるつもりですか?
Core2Duoとかどうなんでしょう・・・
上の方ではCore2Duoの方が速いという書き込みがありますが・・・
一応予算は1式20万円位を想定しています.
124デフォルトの名無しさん:2006/12/04(月) 23:45:38
>>122
いや、ハッテンは結構なんだが、うまく同じくらいに枝分かれしてもらえると、内ゲバが始まって
全部衰退してくれて助かる。

あとC派生言語がSecureな方向に向かってくれると、最適化スピードが落ちてやがて自滅するだろう。
バッファーオーバーランの恐怖とかを煽って常にSUBCHKかけたまま走るように仕向けるべし。

JavaやC#などは結局根本的に方向を間違っていると思う。
UCSD p-code Pascalの昔から、VirtualMachineはとてもいいアイデアのように思えて、
それでいてうまく行ったためしがない。スピードがあればエミュレーションで十分だと、むかしから
言われてきたが、スピードが上がると新しい使い方が出てきて、ギリギリのCPU消費が
求められるからうまく行くはずがない。


もっともFortranも規格がどんどん肥大化していてかつてのPL/I型の破滅の道を
たどっている気がしなくも無いのだがw
125デフォルトの名無しさん: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デフォルトの名無しさん:2006/12/05(火) 22:54:37
>>126
>*** Unexpected continuation line (have you got more than 19?)
>*** Compilation failed

せっかくコンパイラがメッセージを出しているのだから、ちゃんと読むように。
128デフォルトの名無しさん:2006/12/06(水) 00:05:57
>>126
まったく>>127の言うとおりだ。
子供が泣いているのに、かまってやらない育児放棄の母親レベルだ。


漏れの診断では、2chからコピペしたので、6カラム文の字下げをしていない。
そのせいで継続行に勘違いされている。
129デフォルトの名無しさん:2006/12/06(水) 12:51:58
>>127
じゃあ英訳してあげたら??
子供が泣いているのに、かまってやらない育児放棄の母親レベルだ。
130デフォルトの名無しさん:2006/12/06(水) 13:02:29
>>129は母親に黙らせろって怒鳴るだけの親父。
131デフォルトの名無しさん:2006/12/06(水) 13:06:14
>>130
は事件があった後に
インタビューされる近所の人
「よくあの家の子は泣いていましたよ・・・ひどい親ですね
ま、私は関係ないんですけど」
132デフォルトの名無しさん:2006/12/06(水) 13:52:30
最初の人が馬鹿にした口調で書き込むからこんなくだらないレスが続いてしまったよ。

133デフォルトの名無しさん:2006/12/06(水) 14:08:59
>>132
>>127 は別に悪くないだろ。悪いのは>>128
134デフォルトの名無しさん:2006/12/06(水) 14:31:00
悪いのは>>126。説明を端折った質問をするからこうなる。
「プログラム」が何者かこちらには全く分からない。
135デフォルトの名無しさん:2006/12/06(水) 14:33:15
とりあえず、俺が悪いよ
みんなゴメソ
136デフォルトの名無しさん:2006/12/06(水) 14:40:20
>>134
でも内容も何もわからない人だったら質問をちゃんとしろってのも難しいんじゃないかな??
137デフォルトの名無しさん:2006/12/06(水) 20:08:27
質問をしている人間が自分のやってることの内容も何もわからない状態なら、
それこそ答えようがないだろ。

せめて基本的な文法なりソフトの簡単な使い方くらいは自分で調べて
それでもダメだったら、何がしたくて何を試したけどどう上手くいかなかったか
程度のことは書いて質問すべきじゃないか。
138デフォルトの名無しさん:2006/12/07(木) 04:08:19
>>137
もっともな意見だが、それが出来ればたいていは自己解決して2chになんか聞きにこなくてすむw
139デフォルトの名無しさん:2006/12/07(木) 07:46:51
>>137
Exactly
140デフォルトの名無しさん:2006/12/07(木) 17:42:48
>>139
(笑)
141デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/12/08(金) 23:52:39
>>143
やっぱりそうなりますかねー。
自分のOS以外で動作を確かめられないのでちょっと大変;;

どうもthx
145デフォルトの名無しさん:2006/12/09(土) 10:46:49
>>142
Three ways to get your MAC address.
http://www.codeguru.com/Cpp/I-N/network/networkinformation/article.php/c5451

Retrieving Information Using GetNetworkParams
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/creating_a_basic_ip_helper_application.asp

IPHLPAPIを使ってWindowsでネットワーク設定いじるプログラムを書く
http://www.geekpage.jp/programming/iphlpapi/

この辺だと思うが、PlatformSDKのライブラリをLINKすれば可能なようだ。
しかし自分でインターフェースを書かないと駄目なので難しそう。
TYPEとかの定義が深いので、インターフェースに必要な定義がどれだけあるのかわからん。
146デフォルトの名無しさん: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から取る方法は、最近は推奨されないらしい。
ただし取り方は書いてあった。
151150: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デフォルトの名無しさん:2006/12/12(火) 18:50:15
>>152
コードを変更するときには、ワークスペースも変更する必要があるはず。
手っ取り早くするには、コード変更=CVF を一旦終了。
154デフォルトの名無しさん: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デフォルトの名無しさん:2006/12/13(水) 20:25:50
>>153-154
親切にありがとうございました。
ちょっとvisual fortran自体はじめて使ったもので
よく分かりませんでしたが聞いて解決しました
156デフォルトの名無しさん:2006/12/15(金) 20:33:57
ノートパソコンでLAPACKコンパイルすると
ファンがぶんぶん回ってうるさいよ~
157デフォルトの名無しさん: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デフォルトの名無しさん:2006/12/18(月) 17:45:37
>>158
whileのループをgoto文を使って書いたら?
160デフォルトの名無しさん:2006/12/18(月) 23:10:13
計算終了時に、携帯電話へメールで知らせてくれるってことできますか??
161デフォルトの名無しさん:2006/12/18(月) 23:13:01
>>160
シェルスクリプトを書けばいい。

162f90: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デフォルトの名無しさん:2006/12/20(水) 15:45:48
Intel fortran9.1使ってるんだけど、system()で定期的に外部プログラムを呼ぶとコミットチャージが時間とともに増え続けてしまうという
症状に悩まされていた。ところが、system()の代わりにsystemqq()を使うと、その症状が出なくなった。
こんな経験した人いる?
164デフォルトの名無しさん:2006/12/21(木) 01:03:54
SYSTEMってPOSIX互換のルーチンかい?
SYSTEMQQはQUICKWINからみか?
どっちも使わんなぁw

165デフォルトの名無しさん:2006/12/21(木) 20:44:11
>>164
じゃあ、外部コマンド起動したいときはどうやってるの?
166デフォルトの名無しさん:2006/12/22(金) 00:31:25
外部コマンド呼ばないw
Win32で出来る物はWin32でやる。
できないものは諦めるw
167デフォルトの名無しさん:2006/12/22(金) 00:48:23
コンソールアプリ無視していきなりWin32かよw
168デフォルトの名無しさん:2006/12/22(金) 01:26:17
おまいら仲良くやれよ
スクリプトで妥協しとけw
169デフォルトの名無しさん:2006/12/28(木) 23:25:36
オッペン化粧品!

OpenMPのいい参考サイトか本はアルカイダ?

あぁそれとMPIにしろとか言うなヨーロッパ。
170デフォルトの名無しさん:2006/12/28(木) 23:46:15
コンパイラの自動並列化だけでがまんs

俺も教えて欲しい。
尼損で検索したら、和書は1冊しか無かった・・・
171デフォルトの名無しさん:2006/12/29(金) 00:00:47
>>169
いやさ、さっぱり自動並列化されないから、少し知恵をつけてやるかと思って。
2CPUシングルマシンで軽く行きたい。

QuadCoreを買う口実も欲しいw
172デフォルトの名無しさん:2006/12/29(金) 03:02:52
えー、かなり漠然とした質問ですがちょっとアドバイスをもらえませんか?
ある元となる計算コードでは、セルの幅や高さがすべての領域で一定です。
計算する領域は長方形で、

NCX:セルの行(X方向)
NCY:セルの列(Y方向)
CW:列方向へのセルの幅
CH:行方向へのセルの幅

といった感じです。
また、それぞれのセルには通し番号が割り振られています。
(最初の行を小さいほうから順に1.2.3…と割り振っていって
 端に行ったら次の行に移ります)

↑Y
9.......
5678
1234  →X

このコードを元に、任意の列以降でセルの大きさを縦横それぞれ
半分にする(面積を1/4)にして(もちろん以降の行、列数は倍になります)
計算するプログラムを書きたいと思います。セルの大きさの変化は何段階か行われます。
(具体的にはY座標依存のある物理量と比較してセルを小さくするかどうか判別します)
173172: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)に、
というようにセルの大きさで領域を分けて考えよう、と思ったのですが、
あるセルが何番目の領域に属するかをいちいち判別するのもめんどくさいですね。
ちょっと上記の判別の式が複雑になってきてしまいます。
(ループで非常に何度も通るところなので出来るかぎり簡単にしたいです)

各セルが何行何列目に属するかと何番目の領域に属するかを
配列に格納しておけばいいかとは思いますが、
プログラムの経験が浅いこともありかなり無駄なことをしていないか不安になってきました。

既存の構造を生かしたり(置換するだけですぱっと終了とか)
あまり余計なものを追加しないエレガントなやりかたってありますかね?
やっぱり地道にやるしかないでしょうか?長文すみません。
174172:2006/12/29(金) 03:14:28
すみません、

(誤)X=NY*CH
(正)Y=NY*CH

です。
175デフォルトの名無しさん:2006/12/29(金) 20:26:22
>>173
サイズに依存する。
小さいならいったん既存の計算式で求めたセルサイズをテーブルとして保存すればよい。

サイズが大きくてメモリーギリギリまで使っているなら、1回ごとに計算するほうがいい。


567
238  のちな形でサイトを指定してもいいなら、判別の計算式も簡単になるかもしれない。
149  計算機学科の人からはしかられるが、高速でやるにはデータ構造と処理が
     切り離せないので、まぁ問題を理解し整理して自分で良く考えろw
176172:2007/01/05(金) 18:17:30
>>175
遅レス申し訳ない。有難うございます。
やっぱりある程度地道にやるほか無さそうですね。
しこしこやってます。
177デフォルトの名無しさん:2007/01/08(月) 20:38:06
若干Fortranから逸れますが、わかる方ご教授ください。
IntelのVisual Fortranで作成したコンソールアプリから
VCで作ったLibファイルを呼び出したいです。

簡単に書くと、VCは
BOOL PrintMessage()
{
中略
}
という関数になっています。

これをFortranから呼び出すために、
自分なりにマニュアルを読み、
以下のようにコーディングしてみました。
178デフォルトの名無しさん: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デフォルトの名無しさん:2007/01/09(火) 00:52:12
>>178
呼び出し規約がSTDCALLの場合、外部名はデフォルトですべて小文字と解釈されてしまうので
大文字・小文字が混在する場合は以下の様にする

!DEC$ ATTRIBUTES STDCALL, DECORATE, ALIAS: 'PrintMessage' :: PrintMessage

C側の PrintMessage() 関数も __stdcall でコンパイルされている必要がある。
C++の場合は extern "C" も必要。

また、IVFではLOGICALの内部表現(整数値)が奇数のとき真、偶数のとき偽となるので
他言語の関数とLOGICALを受け渡しする場合は注意すること。
180178:2007/01/09(火) 21:34:40
>>179
レスありがとうございます。

なるほど・・。
F側の大文字小文字対策はマニュアルに書いてありましたが、
いろいろ調整しても結果が同じだったので関係ないと思ってました。
C側の対策は全く見えてませんでした^^
正直Cはド素人なので上記のようにいわれてすぐに対応できませんが
参考にして調べてみます!
ありがとうございました。


181デフォルトの名無しさん:2007/01/09(火) 23:27:06
>>180
IntelFortranのマニュアル見るとちまちまと書いてあるよ。

DECORATE修飾子が新設されたので、DEC時代に場合分けして書いていたのが
すっきりしてうれしい。

182デフォルトの名無しさん: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
てっとりばやく答えが欲しいなら
http://pc10.2ch.net/test/read.cgi/tech/1164121236/
に行くといいのでは?
186デフォルトの名無しさん:2007/01/16(火) 20:18:01
既に答えが出てる。 ていうかマルチ。
187デフォルトの名無しさん:2007/01/17(水) 03:15:36
>>184
Fortranの資産使えないのにFortran風にする意味がいまいち良く分からん。
188デフォルトの名無しさん:2007/01/19(金) 12:05:30
>>184
pseudocode をそのままコンパイルしてくれるならうれしい。
189デフォルトの名無しさん:2007/01/19(金) 12:55:53
>>187
え、使えないの?
190デフォルトの名無しさん:2007/01/19(金) 23:38:03
Salford ftn95でlapack95を使いたいねんけど、どーすればいいん??
191デフォルトの名無しさん: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デフォルトの名無しさん:2007/01/20(土) 11:45:48
77で動的配列ってできないの?
x(i,j)
ってしといて
ファイルからi,j読み込んでサイズ決めるみたいな感じにしたいんだけど・・
195デフォルトの名無しさん:2007/01/20(土) 13:15:50
>>194
言語規格としては出来ない。

ただ、コモンとか上のルーチンで大きなワーク配列を取っておいて、
いったん必要なサイズを知った上で下のサブルーチンで作業領域で整合配列を
切って使って似たようなことは出来る。

C言語もK&Rの付録を見るとmallocをそういう感じで実現する例を出している。
196デフォルトの名無しさん: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デフォルトの名無しさん:2007/01/20(土) 19:15:37
>>199
SUM() がF90の関数と混同されているんで内科医?
SUM0とかにすればおK
201デフォルトの名無しさん:2007/01/20(土) 19:22:59
>>199
External func → external func, SUM
202199:2007/01/20(土) 22:07:45
>>200>>201、ご指摘の方法で解決することが出来ました。
有難うございます。
203デフォルトの名無しさん:2007/01/20(土) 22:37:50
>>197,198
ありがとう~、格闘の末何とかなりました。
オレもあんたくらい、pcを自由にあやつりたいもんですわ!
204デフォルトの名無しさん:2007/01/21(日) 00:37:48
本来ならMakefileを書いて、テストプログラムも含めてmake(MK32)で処理させるべきなのだろうけど
FTN95の場合、他のコンパイラとオプションの指定方法が違ったりするから中々面倒くさい。
205デフォルトの名無しさん: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デフォルトの名無しさん:2007/01/28(日) 20:37:47
>>207
shell に g77 とか gfortran とか g95 とか ifort とか入れてみる。
使えるようなら no input files などと返ってくる。
なけりゃ自分でインストロールする。
209デフォルトの名無しさん:2007/01/28(日) 21:47:58
全部使えませんでした。
ifortいれたいのですが、どこでダウンロードできますか?
210デフォルトの名無しさん:2007/01/28(日) 21:54:39
>>209
つ google
211209: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デフォルトの名無しさん:2007/01/28(日) 22:39:51
>>211
> 解決方法を御存じのかたは教えてください。
夜間中学で英語を学びなおす。
213デフォルトの名無しさん:2007/01/28(日) 22:48:29
つーか lsが見つからんて、どんな環境やねん
214デフォルトの名無しさん:2007/01/30(火) 00:02:48
215デフォルトの名無しさん: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上では
うまく行きます。
217209: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デフォルトの名無しさん:2007/02/16(金) 15:57:03
全角英数は気持ち悪いというセンスを身に着けてから出直してくれ。
220デフォルトの名無しさん:2007/02/16(金) 19:36:46
>>219
おい、おまえ





同感
221デフォルトの名無しさん:2007/02/17(土) 00:00:33
>>219
ごめん 訂正させてもらう

NAGのFortranBuilderのNAGFortran九五コンパイラのVersionってⅤ.0?それともⅤ.Ⅰ?

Ⅴ.Ⅰなら買いたいんだけど、誰か知ってる人いる?

全角漢数字かローマ数字をつかえばいいわけだろ?
222デフォルトの名無しさん:2007/02/17(土) 00:07:15
つまらん
223デフォルトの名無しさん:2007/02/17(土) 00:22:25
フォートランって今でもリアルに使ってるとこあるのか?w
本物のプログラマは~、の時代でもすでに時代遅れのダメ言語だったのに
224デフォルトの名無しさん:2007/02/17(土) 01:16:58
>>223
おまえ、ちょっとそこに正座しろ。
この世間知らずがw


いいか、電子計算機の本流はFortranだぞ!
スパコン・ランキングの機械で動いているプログラムは基本的にFortranだ。

大体マルチコアで並列化といっているが、MPIもOpenMPも対応コンパイラはFortranか
Cしかなくて、Cはあくまでおまけだ。大多数の人間はFortranでプログラム書いてる。

これから並列化が主流になるにつれ、Fortranの天下が再びやってくるのは間違いない!
悔い改めよ!さもなくば地獄の業火に焼かれるべし!
詳しくはマタヨシイエスのサイトを熟知すべし。
225デフォルトの名無しさん:2007/02/17(土) 01:22:52
唯一神Fortran
226デフォルトの名無しさん:2007/02/17(土) 01:36:08
>>221
「全角英数」の意味がわかるようになってから出直してくれ。
227デフォルトの名無しさん:2007/02/17(土) 01:43:01
>>216
gfortran どやっていれたんですか?
俺のmacにははいってないんだてど
228デフォルトの名無しさん:2007/02/17(土) 01:53:16
>>227
君のMacはハズレだったんだよ。
229デフォルトの名無しさん:2007/02/17(土) 01:54:03
>>226
おまいら,うぜーから他所でやれ.
230デフォルトの名無しさん:2007/02/17(土) 10:54:58
>>229
うるせー、>>218>>221のようなグロは見たくねーんだよ。
231デフォルトの名無しさん: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
㌧クス!


nagのサイトに調べにいったんだが、Windows用はまだ5.0だったので、だめかと思ったが。

安いやつ買って見っかー でもライセンスがウゼーんだよな。
234デフォルトの名無しさん:2007/02/25(日) 00:31:39
Intel Visual Fortran 9.1に付属してくるデバッガ(idb)の詳しい日本語の資料や書籍ってないんでしょうか?
235デフォルトの名無しさん:2007/02/25(日) 17:39:49
エクセルソフトがコンパイラマニュアルの日本語訳を出していたが、デバッガもあったかな?
236デフォルトの名無しさん: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デフォルトの名無しさん:2007/03/11(日) 12:20:26
Interl Visual Fortranのデバッガは糞だと思う。HPやCompaqの頃までのが一番良かった。
239デフォルトの名無しさん: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デフォルトの名無しさん:2007/03/11(日) 19:28:32
>>240
インテル・コンパイラはデバッグオプションつけても自動的に最適化は抑止されないのか?
242デフォルトの名無しさん:2007/03/11(日) 20:07:27
>>241
ifort /debug:full hoge.f90
のようにデバッグ・オプション(/debug:full)だけ付けて最適化の指示を省略すると
すべての最適化が無効になる。

ifort /debug:full /O3 hoge.f90
のように最適化を明示(/On)すると、最適化した状態でデバッグ情報の生成を行う。
243デフォルトの名無しさん:2007/03/11(日) 22:03:02
>>242
そういった資料はどこかにあるものだろうか?
必死こいてググって見たがイマイチよく理解できなくて・・・
何かよいものがあれば教えてください
244デフォルトの名無しさん:2007/03/11(日) 22:43:38
>>243
XLsoftからDL出来る日本語マニュアルから。
>>242の内容なら、「アプリケーションのビルド」-「Debugging」-「デバッグと最適化」の所に載っています。
245デフォルトの名無しさん: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」開発者、ジョン・バッカスさん死去…米・オレゴン州
http://news22.2ch.net/test/read.cgi/newsplus/1174440079/
248デフォルトの名無しさん:2007/03/21(水) 13:16:33
ジョンさん、懐かしい
249デフォルトの名無しさん:2007/03/21(水) 14:02:59
【訃報】ジョン・バッカスさん死去 コンピューター言語「FORTRAN」開発
http://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デフォルトの名無しさん:2007/03/25(日) 10:32:06
>252
手は合わせたが、2chで語る話題でもなかろう。
254デフォルトの名無しさん:2007/03/25(日) 22:54:12
>>252
バッカスのヤオイ同人でも作ればいいのか?
255デフォルトの名無しさん:2007/03/25(日) 23:23:03
まあ、バッカスさん自身はあまりFORTRANを好きじゃなかったみたいだしな。
256デフォルトの名無しさん: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デフォルトの名無しさん:2007/04/11(水) 19:09:47
インテルのフォートランコンパイラifortを使ってコンパイルしています。
CPUはOpteronなのですが、-xWオプションをつけないとSSEやSSE2は全く使用されないのでしょうか?
259デフォルトの名無しさん:2007/04/12(木) 00:11:39
>>258
デフォでは使用されなかったと思う。詳しくはHelpで確かめよ。

SSEは厳格にはIEEE754の規約を満たしていないせいか、
あるいは全バイナリー対応のためか?w
260デフォルトの名無しさん:2007/04/12(木) 00:22:30
Mac用は-xPがデフォルトの様だから互換性のためなんでしょうね。
261デフォルトの名無しさん:2007/04/12(木) 13:06:13
FORTRANで書き出したバイナリファイルの読み出し方は分かるのですが、
実験機器がはき出したバイナリファイルを読み込むにはどうしたらよいのでしょうか?
なお、FORTRANで書き出すと、今使っているマシンでは先頭に4バイトほどの識別データが付加されますが、
実験機器がはき出したバイナリファイルにはこれがついていません。
262デフォルトの名無しさん:2007/04/12(木) 17:43:14
>>261
ファイルをOPENするときに form="binary" としたり (処理系依存)
access="stream" としたり (Fortran 2003)
263デフォルトの名無しさん:2007/04/13(金) 02:58:02
>>261
DIRECT形式を使って書くという裏技がある。昔のコンパイラでやるにはこれか。

ただ今は>>262の書くように、F2003拡張の先取りでSTREAMモードが大抵あるのでそれを使うがよろしい。
264デフォルトの名無しさん: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デフォルトの名無しさん:2007/04/26(木) 22:37:47
>>266
あらゆるものが統一されていなかった。
268デフォルトの名無しさん:2007/05/03(木) 14:36:07
今は統一されているといっていいのか?
269デフォルトの名無しさん:2007/05/03(木) 16:02:16
まあ昔に比べれば
270デフォルトの名無しさん:2007/05/07(月) 06:10:19
fortranで
webの結果を得ることできる?

get http://www.hoge.com
を行い
結果をファイルに残す

あるいは、戻り値 403 not found
かどうかの判定とか。
Linux *g77
です
271デフォルトの名無しさん:2007/05/07(月) 06:15:37
できなくはないだろうけど、
別の言語を使った方がいいと思う。
272デフォルトの名無しさん:2007/05/07(月) 08:01:53
うわ、返事はや!
ありがとう。

自由自在に書ける言語がFortranとVB系以外のbasicなんです。
検討してみます
273デフォルトの名無しさん:2007/05/07(月) 10:14:30
>>270
表示するだけならこんなので動くと思うけど

web2console.py
----------------------------
#!/usr/bin/env python
import urllib

conn = urllib.urlopen("http://www.yahoo.co.jp/")
data = conn.read()
print data
----------------------------

F2PY - Numerical Analysis with Python
http://scipy.dip.jp/index.php?F2PY
http://nihongo.homeip.net/word/scipy/

じぶんは fortran は使ったことないからよくわからないけど
fortran ともそれなりに相性も良いみたいだね…(正直よくわからん)
274デフォルトの名無しさん:2007/05/07(月) 11:18:23
>>270
外人がg77でのやり方を解説しているページがある。
環境変数を使って変数のやり取りをしていた。

LINKがみつかんねーw

fortran cgi でググルと色々引っかかる。
275274:2007/05/07(月) 11:24:19
>>270
ああごめん。
FORTRANでサーバー側のCGIを書くのかと思ったが逆か。
クライアントを書きたいのか。

Windows なら WinInet.Lib+Intel Visual Fortranでなら出来る。
Linuxでもその類のDLLをFortranから呼び出せば何とかなるのではないか?

276デフォルトの名無しさん:2007/05/08(火) 13:33:07
【科学技術計算】C言語とFortran どっちがいい?
http://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デフォルトの名無しさん:2007/05/08(火) 23:37:48
>>277
くだすれFORTRAN(超初心者用)その2
http://pc11.2ch.net/test/read.cgi/tech/1164121236/

どちらかというと、こっちの方がやさしくしてくれるお
279270:2007/05/09(水) 23:38:08
皆さんありがとう。

>>273
始め、pythonで「????」でしたが見ると便利ですね。
でもpythonのファイルIO知らないので調べてみます。

>>274
ええ、見る方です。でもcgi検索して見るとfortranでもcgi出来ますね。

FORTRAN(超初心者用)その2
でも聞いてみて良いのかな?
280デフォルトの名無しさん:2007/05/18(金) 23:30:44
Visual Fortran 9 を使用されている方いますか?
購入を検討しているのですが,アクティベーションあるんかな?
281デフォルトの名無しさん:2007/05/19(土) 00:48:26
>>280
ネット経由の認証も出来るし、ローカルでのライセンスファイルでの認証も出来る。
どちらかというとネット経由の認証へ移行したいと思っている節がある。

あと1年でライセンスは切れる。切れた後はインストールできない。再インストールも出来ない。
実行には問題ない。ただしバグフィックスは再インストールになるので出来ない。
うっかり消してしまうと、再インストールできない。
282デフォルトの名無しさん:2007/05/19(土) 01:03:43
ライセンスって単年契約なんですか?恒久権利だと思ってた・・・やっぱり今のVisual Fortran 6使い続けようかなあ.
283デフォルトの名無しさん:2007/05/19(土) 08:28:45
> 切れた後はインストールできない。再インストールも出来ない。
そんなことはない。
購入後、1年間の間にリリースされたマイナーバージョンアップまでは自由に使えるよ。
使えないのは、それ以降にリリースされた最新版とか、プレミアサポートとか。
284デフォルトの名無しさん:2007/05/19(土) 13:01:56
ネット経由の認証がいるってことは,複数台のPCにインスコして同時に計算走らせるとかできないわけですよね?
(認証なくてもやっちゃだめなんだろうが)
結局この理由でofficeも2000,visual studioも6のまま・・・
Fortranも6でいいかー
285デフォルトの名無しさん:2007/05/19(土) 14:30:29
>>284
契約したライセンス数を超えて(または契約した使用者以外が)「コンパイラ」を使うのはいけないが
コンパイルして出来た実行プログラムの方は配布が可能。
(評価版や非商用ライセンスの場合は別だが)

またそのプログラムの実行にIntelが定めた再配布可能ファイルが必要なら、それも含めて配布可能。

ちなみにシングル・ユーザー・ライセンスの場合、契約者個人が同時に1つしか使用しないのであれば
コンパイラを複数のPCにインストールすることも可能。

http://www.intel.com/cd/software/products/asmo-na/eng/compilers/295825.htm
286デフォルトの名無しさん:2007/05/19(土) 23:06:03
誰かeclipseを使ってフォートランのコンパイルしている人いませんか?
photranの使い方がわからなくて..
287デフォルトの名無しさん:2007/05/20(日) 13:33:53
>>286
それをやろうとして、諦めたw
設定いろいろいじろうと思うとeclipseまで勉強しなきゃならなくて時間の無駄だと感じた。

設定できたら報告よろ!
288デフォルトの名無しさん:2007/06/09(土) 00:09:26
空気読まずに言うけどフリーのリンク先にある

FTN77/95のインストール方法
http://www.coastal-env.k.u-tokyo.ac.jp/koibuchi/fortran.htm

95のインストール先とマニュアルの画面が全然違うのは仕様?
289デフォルトの名無しさん:2007/06/09(土) 02:12:36
通りすがりの者だが・・・・
>>288
提供先がSalfortから関連会社のSilverFrostに移行したときに変わってしまったのさ。
290デフォルトの名無しさん:2007/06/09(土) 17:02:26
>>286
fortranでeclipse使ってるとこってあるんかな?
fortranって科学技術系が多いし、他の一般業界の言語やコードに比べたらシンプルだからね・・
中にはviでガシガシの人もいるし
291デフォルトの名無しさん:2007/06/09(土) 19:33:49
>>289
サンクス。
じゃあ、あの状態でFortran95をダウンロードするにはどうすれば……?

本来なら説明しているサイトに報告すべきだと思うけど、
SilverFrostでのダウンロード方法を知っている人がいたら教えてください。
292デフォルトの名無しさん:2007/06/09(土) 19:55:34
293デフォルトの名無しさん:2007/06/11(月) 10:43:46
>>292
サンクス。
上段のページからダウンロードして後、VisualStugio2003をインストールしてたから同じく2003でインストールしました。

あとは複数あるシステムの中で、Fortran教科書に載ってるプログラムを書いて実行するのに選ぶべきシステムとその方法さえわかれば……
294デフォルトの名無しさん:2007/06/13(水) 22:07:13
Fortressについてどう思うよ?
295デフォルトの名無しさん:2007/06/13(水) 23:23:23
オワタ
296デフォルトの名無しさん:2007/06/14(木) 00:49:28
すいませんが、FORTRAN77で、二階非線形常微分方程式をルンゲ・クッタ法を使ってプログラムを組みたいのですが、
一階なら分かったのですが、高階になるとよくわかりませんorz
297デフォルトの名無しさん:2007/06/14(木) 00:54:41
>>296
それはプログラムがわからないの?
それとも数学がわからないの?
298デフォルトの名無しさん:2007/06/14(木) 23:34:11
>>296
ルンゲ喰ったなんて、数値計算の本の、頻出事項じゃんか。
図書館に行ったほうが2chに来るより効率的。
299デフォルトの名無しさん:2007/06/15(金) 00:09:50
ルンゲ警部を喰っちゃうなんて・・・
300デフォルトの名無しさん:2007/06/15(金) 10:39:29
ペッパーランチでペッパー警部に食われました(正笑
301デフォルトの名無しさん: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デフォルトの名無しさん:2007/07/07(土) 12:43:32
>>302
コンパイラなによ。

ま、マニュアル読んだほうが早いと思うけど。
304デフォルトの名無しさん: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デフォルトの名無しさん:2007/07/07(土) 14:54:26
>>303
pgiコンパイラだそうです。
ちょっとマニュアル探してみます。

>>304
コンパイラの問題なのかDELETEのところがちょっとエラーでできなかったのですが。
close(10)としたら変数に2を入れることができました。
ありがとうございました
306デフォルトの名無しさん:2007/07/07(土) 14:57:11
あ、すみません。
>>304でできました。
307デフォルトの名無しさん:2007/07/07(土) 15:06:41
あと、System関数を利用せずに外部ファイルの行数を取得する方法ってありますか?
例えばhoge.txtの中身が
----------
apple
123 456
pie
----------
であれば、そのファイルの行数を読み取りinteger型の変数に3を
代入するという操作を行いたいのです。

もちろんSystem関数の利用でできたのですが、それだとプラットフォームが
Linuxに限られてしまうので、Fortranでファイルの処理を行うようにすれば
各種プラットフォーム上でも使えるソースになって便利だなと思いました。
この操作に限らず、Fortranでファイルを編集するための勉強はどのような
ところで勉強すればいいのでしょうか?
308デフォルトの名無しさん:2007/07/07(土) 17:41:38
>>307
普通に空readでend of file が出るまでまわして、変数に一足していけばいい。
309デフォルトの名無しさん: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

ありがとうございました(><)
310TESTちゅう:2007/07/12(木) 17:03:55
フィボナッチのプログラムが急ぎで必要です。だれか教えてください!!!
311デフォルトの名無しさん: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デフォルトの名無しさん:2007/07/17(火) 22:54:57
Numerical Recipes の第3版が出るらしいな。
313デフォルトの名無しさん:2007/07/18(水) 03:14:53
確かに本家の看板に出てるね
http://www.nr.com/
情報さんくす
314デフォルトの名無しさん:2007/07/18(水) 03:17:27
↑ってC++がメインになってないか(笑)
微妙にスレちがいかも
315デフォルトの名無しさん:2007/07/18(水) 23:37:05
>>314
ホントだ
裏切られた!www
怪しからん奈!
316デフォルトの名無しさん:2007/07/20(金) 03:17:16
>>314
FORTRAN版は出す気あるのかな?

初版の非Fortran版はトランスレータにかけただけのような
gotoバリバリコードで出版していたのだから、無茶なFortranコードでも
著者は別に気にしないよなw
317デフォルトの名無しさん: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デフォルトの名無しさん:2007/07/20(金) 13:01:52
>>317
あれれ2版からも15年たってるのかよw

しかしアルゴリズムの進歩版とかのってはいないのかね?
第2版では、初版に無かったnon-numerical algorisms の章が一番役に立ったw

CRC16とかHuffman符号化とか、情報工学的なアルゴリズムが、数値計算との垣根を乗り越えてきた
タイミングだったのか。
319デフォルトの名無しさん:2007/07/20(金) 23:48:31
今日本屋に行ったらこんな本があった。

Fortress言語―マルチコア時代の並列化プログラミング言語

もう出すのかよw 
ざっと見た感じ糞本だったがw

320デフォルトの名無しさん:2007/07/22(日) 12:21:50
まったく話を聞かないしなぁ>Fortress
スラドでも議論があったけど、将来も普及する見込みは厳しそうね
321デフォルトの名無しさん:2007/07/23(月) 01:55:57
>>320
よく知らんが、SUNのマルチコアCPUに大量のスレッドをばら撒いて並列計算させるという
コンセプトの言語なんだろ?

アイデアとしては面白いんで内科医?

Haskellっぽい仕様も入れているらしいし、次世代の踏み台にwww
322デフォルトの名無しさん:2007/07/23(月) 10:15:40
>>321
オープンにしたからSUNの石専用ってわけじゃないのでは?

確かに踏み台ぽいなw
323デフォルトの名無しさん: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デフォルトの名無しさん:2007/07/24(火) 09:34:34
>日本(富士通)で拾う振りをして、アメリカに疑心暗鬼を起こさせる
スゲーwwww
策士っすねw
325デフォルトの名無しさん:2007/07/25(水) 00:35:12
>>324
最近の最速スパコン競争は、なんか土建屋の既得権争いっぽいから、
釣りに走って遊ぶほうが、たしかにいい気がするw
326デフォルトの名無しさん:2007/08/12(日) 22:19:24
「スカラ型とベクトル型を両輪に」,次世代スパコン構成の狙いを語る
ttp://techon.nikkeibp.co.jp/article/NEWS/20070808/137619/

327デフォルトの名無しさん: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デフォルトの名無しさん:2007/08/19(日) 02:10:13
Cygwin上で動くfortran90コンパイラってありませんか?
すみませんが どなたか情報をお持ちでしたら教えて下さい。
329デフォルトの名無しさん:2007/08/19(日) 18:45:37
>>328
以前
http://g95.sourceforge.net/
を試したら動いた
330デフォルトの名無しさん:2007/08/19(日) 19:08:37
>>328
ttp://g95.sourceforge.net/

でも、なんでパッケージに入ってないんだろう?
331デフォルトの名無しさん:2007/08/19(日) 20:03:47
CygwinのGCCが4.x.xになったらこっちが入るからじゃないかな
ttp://gcc.gnu.org/wiki/GFortran
332デフォルトの名無しさん:2007/08/19(日) 20:17:52
>>329 - 330
ありがとうございまs。試してみます!
333デフォルトの名無しさん:2007/08/23(木) 23:01:43
Steve Lionel のコラムで、FORTRANで書かれた(多分)世界初のアドベンチャーゲームネタが出ている。
http://softwareblogs.intel.com/2007/08/22/you-are-in-a-maze-of-twisty-little-passages-all-alike/
334デフォルトの名無しさん:2007/08/23(木) 23:11:05
マジカヨ
335デフォルトの名無しさん:2007/08/30(木) 23:10:18
Intel fortranて、バージョン10になってから、MKLがおまけで付いてくるようになったな。
MKL買った人カワイソス=おれ
336デフォルトの名無しさん:2007/08/30(木) 23:28:08
おまけと言ってもMKL有りとなしじゃ、けっこう価格差が…
337デフォルトの名無しさん:2007/08/31(金) 00:31:24
>>335
忘れたがMKLのライセンスからをコンパイラのライセンスに転換できて2個分になったんじゃ中田ッけ?
ガセだったら酢マンコw
338335:2007/08/31(金) 01:05:11
9→10へのバージョンアップのときに、スタンダード版からプロフェッショナル版への変更が
安く(1万円くらい)できただけだった。いずれにしても、MKL単体で買って損した気分だ。
339デフォルトの名無しさん:2007/09/07(金) 13:02:07
http://www.nag-j.co.jp/fortran_compiler.htm

NAGのcompiler IntelMac版登場 トライアルができる
340デフォルトの名無しさん:2007/09/08(土) 21:10:14
intel fortran compiler for windows 9.0 を使用していて

http://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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2007/09/09(日) 23:48:01
>>341
A = hoge + (/(i,i=1,size(A))/) * fuga
344デフォルトの名無しさん:2007/09/10(月) 17:01:44
>>343
ありがとうございます。こんな素直な方法があったんですね。
後者については今のところ難しいでしょうか。

あと配列演算に使える関数が作れるといいのですが、これも難しいですかね。
配列をもらって配列を返すようなタイプだと一次的に戻り値用の配列を確保しなくてはいけないので現実的ではないんです。
345デフォルトの名無しさん:2007/09/10(月) 19:36:29
>>344
しかし>>343のようにやると、いったん暗黙のテンポラリ配列が生成されて
それから積が取られることになるので、DO LOOPの展開式とは等価ではない。

>あと配列演算に使える関数が作れるといいのですが、これも難しいですかね。
elementalだったかpureオプションつければ可能だった気がする。
調べてくれw

346345: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デフォルトの名無しさん:2007/09/13(木) 12:33:44
>>345
試してみましたが確かにテンポラリ配列作られてますね。
elementalは便利ですね。ありがとうございました。
348デフォルトの名無しさん:2007/09/13(木) 19:16:35
>>347
a(1:n) とか部分配列の類もテンポラリを作ることが多いので、
ソースコードが短くなるからと調子に乗って、DO LOOPの代わりに乱用すると、
思わぬところでスタックオーバーフローとかで憤死する。

ベクトル機の場合は一旦テンポラリ配列に展開したほうが早くなるだろうが、
パイプラインのスカラー機の場合はDO LOOPのままの方が早いのではないかと思う。

まぁ勝手に最適化するかも知れんし、トレードオフが色々あるので、なんとも胃炎が。
349デフォルトの名無しさん:2007/09/18(火) 15:26:34
age
350デフォルトの名無しさん:2007/09/18(火) 22:17:04
ageも満足にできんのか!!
351デフォルトの名無しさん:2007/09/21(金) 00:26:58
intel Visual fortran 10.0 日本語版 発売
352デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2007/10/16(火) 02:17:02
>>356

くだすれFORTRAN(超初心者用)その2
http://pc11.2ch.net/test/read.cgi/tech/1164121236/355
358デフォルトの名無しさん:2007/10/23(火) 23:51:02
Intel Visual Fortranで/Qparallelを使って並列化したところ、
あまり高速化しませんでした。プログラムによってはむしろ遅くなることも。
サポートに問い合わせたら、こちらでも2コアでは確かにスピードダウンが
確認できましたが、4コアではスピードアップが確認できました、と回答。
まるでリフォーム詐欺のようだ・・・
単純な行列×ベクトルのみの計算でも最大30%アップ程度なのだが
並列計算ってそんなものですか?
359デフォルトの名無しさん:2007/10/24(水) 01:28:55
マシンの構成によるし・・・
QuadコアなCPU?
360デフォルトの名無しさん:2007/10/24(水) 01:48:48
>>358
自動並列化は、そんなもんだよ。スパコンでも同じ。

まぁ並列化よりSSEの方が簡単に簡単にスピードが出るようになる。
361デフォルトの名無しさん:2007/10/24(水) 03:04:44
SSEは適当に-O3とかするだけでも有効になるはず(多分

Qparallelって要するに自動でOpenMPディレクティブ入れてるだけだよね?
最近のOpenMPはどうなんだろう・・・古い古いとよく言われるけど、今後のマルチコアCPUで通用しなくなるのだろうか
362デフォルトの名無しさん:2007/10/24(水) 09:34:52
>>360
行列積とか素朴な演算ならSSEを入れれば単精度は4倍速、倍精度は2倍速とか、素直に早くなる。
コンパイル時のメッセージにベクトル化云々と出ればSSE使ってる。
363358:2007/10/24(水) 11:02:26
ありがとうございます。
現在はOpteron1210(DualCore)を使っています。
インテルからはまるでQuadCoreのCPUを買えというような回答だったので、
詐欺商法のように聞こえました。
SSEは使っています。
CPUのクロック数があがらなくなった現在では並列計算にしないと
スピードアップが望めなくなると思い、並列を検討しています。
自分の勉強不足も大きいのですが、誇大広告にがっかりです。
364デフォルトの名無しさん:2007/10/24(水) 11:20:56
Intelのサポートに聞いたの?
こういうのって大抵まともな(役に立つ)回答は期待できないものでは?
MSよりはマシだけど・・・

結局ググるなり2chなりどっかのコミュニティなりで探すしかないんだよね
365358:2007/10/24(水) 12:58:59
>>364
バージョンアップ込みで年間数万円(いくらか忘れた)のサポート料を払っているので、
使ってみたのですが、本当にがっかりです。
サポート料金を10倍にしてもいいので、まともな回答を期待したいです。
ググってますがなかなかいい情報が出てこないです。
私の最高は3割増が最高で、実務的な計算ではほとんど役に立ちません。
あれこれ考えている間に、時間をかけて計算したほうがいいのかと思えてきました。
366デフォルトの名無しさん:2007/10/24(水) 12:59:13
>>363
いや詐欺ではない。
既存プログラムを自動並列化して場合、スピードダウンするのはごく普通の現象。
はじめから並列化を前提に設計して、かつ指示行を入れまくってもいまいちなのは、実は常識だw
367デフォルトの名無しさん:2007/10/24(水) 15:53:27
>>365
スレ違いな話だけど、本気のガチンコサポートをするなら商売する側としては10倍でもペイしないと思うけどね・・・
そこはしょうがないっすよ
368358:2007/10/24(水) 16:19:19
日本語がおかしかった。失礼しました。

>>367
あるソフトベンダーは年間140万円のサポートでいたれりつくせり。
(何が原因でしょうね?と問い合わせたら修正されてかえってくる)
そこは最優先でサポートを継続している。
別の40万円のところは、それなりだけど解決のヒントはくれる。
(これらは言語ではなくてアプリケーションですが)
VisualFORTRANは「開発に問い合わせます」のまま放置・・・。
ただ、今回の件については決して特殊な質問ではなく
広告にうたってある性能が出ないよに始まり、
そちらのもっている理想的なプログラムでいいから出してくれといっても
出てこない。いったいどんな質問だったら答えることができるのだろう。
369デフォルトの名無しさん:2007/10/24(水) 19:20:01
>>368
言語のサポートの場合、コンパイラのバグに対する対応の早さだと思う。
そういう点でIntelはパッチの出方は早い。

あとサポート掲示板には、様々なレベルの質問が出ているのでこっちも見てみたらいいかも。
ttp://softwarecommunity.intel.com/isn/Community/en-US/forums/1005/ShowForum.aspx
370デフォルトの名無しさん: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
372デフォルトの名無しさん:2007/11/02(金) 13:20:39
このままPS2クラスタのようにお遊びで終わるのかと思ったが、そうでもないのか・・?
でも低価格の普及ゲーム機を使えるってのがそもそものウリなんだから、今のXboxやwiiに苦戦してる状況じゃ厳しいんじゃないか?
373デフォルトの名無しさん: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 シリーズを導入して以来、
ベクトル型スーパーコンピュータを採用している。
http://japan.internet.com/busnews/20071101/3.html
374デフォルトの名無しさん:2007/11/06(火) 14:00:01
375デフォルトの名無しさん:2007/11/06(火) 23:51:09
>>374
阪大センターはハッカーにやられてから、セキュリティーが強化されすぎて
使いにくくなったって知り合いが言ってたなー。
数年前のことだが。

376デフォルトの名無しさん:2007/11/23(金) 16:54:32
休みだし、何か新しいネタを出してくれ。
377デフォルトの名無しさん:2007/11/23(金) 17:13:22
暇ならFortran2003の処理系作ってくれ。
378デフォルトの名無しさん:2007/11/29(木) 13:22:06
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
     日本ニューメリカルアルゴリズムズグループ株式会社
      LAPACKサンプルプログラム集を公開開始
        LAPACKの利用がより身近に!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
日本ニューメリカルアルゴリズムズグループ株式会社(東京都中央区、以下
日本NAG)は、netlibにより公開されている線形代数パッケージ「LAPACK」の
サンプルプログラム集を公開いたします。これによりLAPACKを利用するユーザ
プログラムの開発が、よりスピーディーに行えるようになります。

公開URL:http://www.nag-j.co.jp/lapack.htm

また、日本ニューメリカルアルゴリズムズグループ株式会社ではより高性能な
LAPACKを、NAGライブラリ製品(NAG Fortran SMP Library)と共に提供してい
ます。

■ LAPACKについて
LAPACKはLinear Algebra PACKageの略で、netlib(http://www.netlib.org/
により公開されている高性能線形代数パッケージです。(日本語ではエルエー
パック、もしくはレイパックと発音されます)連立一次方程式、最少二乗問題
固有値問題、特異値問題を解くためのサブルーチンが含まれています。

■ NAG Fortran SMP Libraryについて
1500以上のサブルーチンから構成される並列科学技術、統計計算ライブラリ
です。1500のサブルーチンの中には並列化済みのLAPACKルーチンも数多く含ま
れており、LAPACKを利用するプログラムを1行も変更することなく、性能を
更に高めることが可能です。
379デフォルトの名無しさん:2007/12/06(木) 03:09:49
初心者で最小二乗法のプログラムが組めないんですがどうすればいいんでしょうか?
380デフォルトの名無しさん:2007/12/06(木) 10:03:56
>>379
図書館へ行って、データ処理の本を読むんだ!
381デフォルトの名無しさん:2007/12/06(木) 19:03:50
データ読み込んでΣ求めて公式通り計算すればおk
382デフォルトの名無しさん:2007/12/07(金) 22:27:07
>>379
いますぐ俺の口座に3000円振り込むんだ!
383デフォルトの名無しさん: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デフォルトの名無しさん:2007/12/12(水) 22:23:51
>>384
コプロの機械語の命令に対応物が無いのだから、コンパイル時に対象機種以外の命令が入るような
最適化をしたのではないかと思われる。
Pen4SSE2を無印ペンチアムで動かすとか、AMD用SSE命令をIntelで動かすとか。

そうだとすれば、最適化を落とすか、対象機種を明示的に指定するか、全機種対象にオプションを変えればいい。

386デフォルトの名無しさん:2007/12/13(木) 01:46:25
>>384
ちょうどfsqrtのところ(00401ef8)で例外が起きているので
GOENTRの中でSQRT()に負の数を渡す等の不正な計算を
しているように見えるが。
387デフォルトの名無しさん:2007/12/13(木) 16:42:46
386に一票
388デフォルトの名無しさん:2007/12/13(木) 23:13:02
コンパイラは何だろう?
389デフォルトの名無しさん:2007/12/14(金) 18:44:44
384です。
自己解決しました。
ありがとうございました。
390デフォルトの名無しさん: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デフォルトの名無しさん:2007/12/25(火) 23:51:38
最近の Intel Fortran って Traceback 機能が効いてなくね?
394デフォルトの名無しさん:2007/12/26(水) 21:28:28
そうか?
-traceback オプションででちゃんとソース名と行番号まで表示されるぞ。
395デフォルトの名無しさん:2007/12/26(水) 21:50:42
年明けでよかったらv10.1で試してみるよ
396デフォルトの名無しさん:2007/12/26(水) 23:18:42
>>395
頼む。やってみてくれ。

漏れの環境だと、Windows+VisualStudioのビルドオプションでtracebackをつけているのだが、
9.1だとTracebackを吐くが、Ver10.0やVer.10.1だと普通の実行時エラーしか出ない。

ツール+オプションでコンパイラだけ変えているはずなので、オプション指定は共通だと思うのだが・・
397デフォルトの名無しさん:2007/12/27(木) 01:48:12
手元のPCに10.1しか入ってないので他のバージョンと比較できないが、10.1の場合:

・VS上で[デバッグ] -> [デバッグ開始] (F5) で実行
 VSのデバッガ上でブレイクがかかる(「呼び出し履歴」にスタックトレースを表示)

・VS上で[デバッグ] -> [デバッグなしで開始] (Ctrl + F5) で実行
 トレースバック情報を表示せずに終了

・別途コマンドプロンプトを開いて実行
 トレースバック情報を表示して終了

となった。
398デフォルトの名無しさん:2007/12/28(金) 01:15:49
>>397
㌧クス
確認・把握した。

漏れは近年デバッグ実行をまったく使っていなかったのと、エラーの出る奴は
コマンドラインから実行したことがなかったので気づかなかったw

多分、デバッグなし実行でもトレースバックは呼び出し履歴に強制リダイレクトされているが、
(error出力かなんかで)
この場合呼び出し履歴を見るメニュー項目が無いというバグなのだろうw 空想だがw


399デフォルトの名無しさん:2007/12/29(土) 19:18:05
せっかくVisual Studioを使っているんだからデバッガも使おうぜ。
400デフォルトの名無しさん:2007/12/30(日) 11:51:04
>>399
いや、昔は使っていたけど、なんというか、Fortran向きでない感じがして。
巨大配列のはみだしとかの検出に向いてないせいかな?
401デフォルトの名無しさん:2008/02/21(木) 23:04:14
Fortran2003の処理系はよ出せ
402デフォルトの名無しさん:2008/02/21(木) 23:57:48
>>401
IBMのコンパイラが一番進んでるって聞いたんだけど。
どうなのかね?
NAGも最近おとなしいし。
403デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/16(日) 18:23:17
>>403

LAPACK か ATLAS ではダメ?そんな大規模な計算をやった事が
無いので、使い物になるかどうかは分かりません。

Linux ならパッケージでインストールできるはず。
ウチの Debian には aptitude で入れた。
405403:2008/03/16(日) 18:44:46
>>404さん
レスサンクスです。

LAPACKとATLASも使ってます!MKLもLAPACKとかLAPACK95を使います。素晴らしい
ライブラリだと思います。
漏れがやりたいのは、疎行列連立方程式なので、LAPACKとかATLASをベースにして
そのラッパーが欲しいという感じです。LAPACKがすでにBLAS/ATLASのラッパーなわけ
ですが。。。

406デフォルトの名無しさん:2008/03/16(日) 19:57:43
>>405
一般論からすれば、反復法か直説法かの選択は行列の内容によるんでね?
たちの悪い行列でなければ、反復法の方が有利だと思うけど。
直説法なら確実に有限回で終了することが分かっているが、反復法は直交性が数値誤差で腐るから
数学的にはおかしいが、現実には有限回で終わらなかったりするし。

行列が、ほんとにスカスカの疎か、singularに近いか、固有値が縮退しまくっているかとか、
その辺は使用者しか分からんから、なんともいえないような。

中身の分からん奴に機械的に使わせるから安全第一で行きたいとか、運用面にも依存するし。
407405:2008/03/16(日) 21:00:50
>>406さん
仰るとおりっす。
とりあえず、自分一人で使う(研究)ので、ブラックボックス的で安全なものでなくとも
高速で、導入やコーディングが楽なのが希望です。

行列の状態は悪いです。4x4のブロックに分かれてる感じで、離散化を細かくやると
主対角が卓越して、対角ブロックのみに不完全分解系の前処理掛けると、
それなりに収束しますが、係数行列のサイズが増大するというジレンマです。

疎行列性は、5万x5万で、非零要素が0.1%切ってるくらいです。

ご指摘のように、問題依存性が高いので、なかなかご意見いただくのは難しいかなとは
おもっております。

とりあえず、みなさん、10万x10万くらいの疎行列連立方程式(差分法や有限要素法
なら頻出だと思います)を解くときって、どんな言語で、どんな実装してるんですかね。。。
反復法ソルバもSaadのtemplateの擬似コードから自分で書いてるのか、とりあえず
いろいろソルバライブラリ試してるのか。。。たぶん、疎行列の格納形式から考える必要が
あると思うので、そのあたり、Fortran使いの皆さんがどうやってるのか知りたいです。
408デフォルトの名無しさん: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
http://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デフォルトの名無しさん:2008/05/17(土) 22:13:50
VB2008Expressでも使えば?
VBAよりはだいぶ速いしタダだよ
413デフォルトの名無しさん: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が勝っている。
http://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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2008/05/30(金) 16:32:44
本人はできるだけ鼻につかない文章で丁寧に質問してるつもりなんだろうな。
426デフォルトの名無しさん:2008/05/30(金) 17:59:33
>>424
それ、先生に聞いた方がいいよ。お金払ってるんでしょ。
427デフォルトの名無しさん: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デフォルトの名無しさん:2008/05/31(土) 00:19:23
>>427
hogeはUNIX系の連中の使う言葉だ。
メインフレームの誇りを持つFortrannerは使っちゃいかんw

429デフォルトの名無しさん:2008/05/31(土) 11:14:03
foo bar baz は?
430デフォルトの名無しさん:2008/05/31(土) 16:02:34
鋼鉄の撃墜王
431デフォルトの名無しさん:2008/06/01(日) 18:28:25
>>415
これみるとIntel C/C++使ったほうがいいみたいだな
432デフォルトの名無しさん:2008/06/01(日) 19:41:18
>>431
単にFortranの書き方知らないだけだべ。
433デフォルトの名無しさん:2008/06/01(日) 19:44:49
つまりFortranを知ってる人が少ないと。
技術者を集めにくいと。
434デフォルトの名無しさん:2008/06/04(水) 01:08:45
>>431
INTEL Fortran と C++ はバックエンド部は共通だろうから、そもそもそれほど大きな違いが
出るはずが無い。
435デフォルトの名無しさん:2008/06/07(土) 20:13:52
慶大の生協運営の書店に
FORTRAN入門(FORTRAN77入門)が普通において有って驚いた
436デフォルトの名無しさん:2008/06/07(土) 20:25:26
>>435
浦昭二君、名誉教授だから当然でしょ
437デフォルトの名無しさん:2008/06/07(土) 20:33:09
もうf77は教えないほうがいいだろ。常識的に考えて。
438デフォルトの名無しさん:2008/06/07(土) 20:50:45
>>437
講義の教科書ではなくて、研究室用だと思うよ。
研究室にはf77の遺産があるから、参考図書として必須。
439デフォルトの名無しさん:2008/06/07(土) 23:48:11
>>435
大学の生協なら売ってるのが普通だと思ってた。
俺は慶応じゃないけどね
440デフォルトの名無しさん:2008/06/08(日) 00:29:15
阪大にも置いてあるよ。
どこでも置いてあると思う。
441デフォルトの名無しさん:2008/06/08(日) 00:51:54
浦昭二のFortran66の方はさすがに絶版になってしまったな。

442デフォルトの名無しさん:2008/06/08(日) 01:30:36
>>441
遺産プログラムがFortran66(ブロックIFなし)で書かれていて驚愕した orz
443デフォルトの名無しさん:2008/06/08(日) 02:26:31
>>442
俺のもらった遺産プログラムは、拡張DO LOOPを使っていたせいでコンパイラを通らず
すごく困った。

拡張DO LOOPとは、DO LOOP の中からGOTOで飛び出して、なんかやった後DO LOOPの
中に帰ると、またさっきのLOOPの続きが出来るというもので、当時の俺の想定外の悶絶機能で
何がおきているのか全く理解できなかったw

FORTRAN77で廃止になったはずなんだが、たいがいのコンパイラは密かに対応していた。
まぁ、怖いので書き直したがw

そういう事もあるのでFORTRAN66の教科書も無くしてはいけないと思うですよ。
444デフォルトの名無しさん:2008/06/08(日) 11:39:03
そうか、塾生は君付けなんだなw
445デフォルトの名無しさん:2008/06/18(水) 02:23:23
今、本屋で買える範囲で、おすすめのFortranの教科書は何ですか?

絶版は困ります。アマゾンの古本で買えるならいいですが。
446デフォルトの名無しさん:2008/06/18(水) 04:13:42
Michael Metcalf, John Ker Reid, "Fortran 90/95 Explained"
447デフォルトの名無しさん:2008/06/18(水) 10:04:59
>>445
Fortranを勉強する目的などを明確にせよ。
 規格:わからない、f77、f90以上
 目的:講義対応、研究室対応、趣味、業務対応

以下はとりあえずの推薦
規格わからない 講義対応
 Fortran 90プログラミング 冨田博之
 http://www.amazon.co.jp/dp/4563014095/

f77規格 講義対応
 FORTRAN77入門 浦昭二
 http://www.amazon.co.jp/dp/4563013587

f90規格 研究室対応
 数値計算のためのFortran90/95プログラミング入門 牛島省
 http://www.amazon.co.jp/dp/4627847211/
448デフォルトの名無しさん:2008/06/18(水) 10:10:18
テンプレに追加きぼん
449デフォルトの名無しさん:2008/06/19(木) 00:50:25
>>446-447
さんくす
450デフォルトの名無しさん:2008/06/29(日) 02:12:38
>>434
バックエンド共通ってだけで速度が同じになるなんてありえない。
字句解析や最適化は言語仕様とコンパイラ実装に強く依存する。

Fortranのシンプルさはその点強みだったけど、
最近のFortranはその他言語にどんどん近づいているからねえ。
451デフォルトの名無しさん: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デフォルトの名無しさん:2008/09/21(日) 14:52:15
もともとIntel FortranとC++は非商用目的なら無料で使えるんじゃない?
455デフォルトの名無しさん:2008/09/21(日) 23:57:43
>>454
無期限はLinuxだけじゃないか?
456デフォルトの名無しさん:2008/09/22(月) 15:10:37
Linux版だけだな
Linux版ならIntel FortranとIntel C++が無期限で無償で使える
457デフォルトの名無しさん:2008/09/22(月) 15:12:37
非商用目的限定の話だけどね
458デフォルトの名無しさん:2008/10/07(火) 00:50:36
1秒間プロセスを寝かせるのはsleepという関数があるけど,
10msとか100msとか,ミリセカンドオーダーで寝かせるようにするには
どうすればいいですか?
Intelコンパイラを使っているので,Intelコンパイラ依存の関数でも
いいです.
今は,無駄な計算ループを作って待たせているのですが,
それだとCPU負荷になるので,できればCPU負荷にならないで
10msとか100msとか待たせられると嬉しいです.
459デフォルトの名無しさん:2008/10/07(火) 01:03:04
>>458
Windowsなら、USE IFWIN して Win32 の API の Sleep 関数でやれた気がする。
Linux は知らないが、同じようにやれると思う。
460デフォルトの名無しさん:2008/10/07(火) 01:30:30
nanosleep(2)
461デフォルトの名無しさん:2008/10/07(火) 03:06:27
>>458
ifort依存ならWin/Linux共に SLEEPQQ で
USE IFPORT
CALL SLEEPQQ(3000)
とミリ秒で指定できる。

但しあくまでも指定できるだけであって実際の休止時間をミリ秒単位の精度で
制御できるかどうかは別だが。
462458: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倍以上の高速化を実現するらす
http://journal.mycom.co.jp/articles/2008/07/23/gpgpu/
466デフォルトの名無しさん:2008/10/25(土) 10:45:52
倍精度に対応したのか
467デフォルトの名無しさん:2008/11/11(火) 02:36:04
CUDAよりインテルのLarrabeeが来そうだな。
ベクトル長を長くする方向だから80年代のプログラミングモデルが復活するし、
Intelのコンパイラは必ずサポートするだろうし。

468467: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デフォルトの名無しさん:2008/11/12(水) 00:29:13
>>468
長すぎて考える気にならん。
関数のパラメータも多すぎて、条件も分からん。

ある特定のパラメータで発散するのか?ルンゲ喰ったギル法だけで異常が出るのか?
どういう状況なのかも分からん。

答えようも考えようも無い。
もう少し親切心を持って聞けw
470468: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デフォルトの名無しさん:2008/11/12(水) 15:42:56
ブックオフで培風館のFORTRAN77入門が100円だった
さすがブックオフ本の価値が分かってない
472デフォルトの名無しさん: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デフォルトの名無しさん:2008/11/13(木) 01:00:09
>>471
教科書で使ってたりするから、古本の流通量は結構多い気がする。
474デフォルトの名無しさん:2008/11/13(木) 02:46:31
カバーの焼けはあるけどおそらく新品
改訂版じゃなくて初版の方だったので返品在庫の放出かしら

配列のとこやってるけど、配列への入力とかあってすごいね
宣言なしで唐突に出てくるループカウンタにもびっくりするが
475デフォルトの名無しさん:2008/11/13(木) 10:19:44
>>474
えぇ~?
暗黙に型宣言されてるぜ!

最近のスクリプト言語で、これに近い形に先祖がえりしているのがワロス
476デフォルトの名無しさん:2008/11/13(木) 14:07:56
implicit none しても結局は暗黙のやつに則ることは多いよね。
character,logicalは無いので c と l で始めるようにしたり。
暗黙の型宣言はあれはあれで良いものだ。
477デフォルトの名無しさん:2008/11/14(金) 21:11:06
いや、Cが複素数でZが倍精度複素数だろ
478デフォルトの名無しさん:2008/11/15(土) 00:55:13
>>476
lは1と見間違いやすいからあまり使わないが、貴重な整数型なのでもったいない。
479デフォルトの名無しさん:2008/11/15(土) 05:22:43
>>478
Lは大文字で使う
480デフォルトの名無しさん:2008/11/16(日) 00:36:10
>>479
ボーランド記法?
昔PASCALに散々いじめられたから嫌w
481デフォルトの名無しさん:2008/11/16(日) 12:49:36
>>477
c を複素数に振るときには character 型は s で始めるようにしてるな。
>>478
l は先頭でだけ使うようにしてる。 先頭が数字の変数ははじかれるから
混同しなくてすむ。
482デフォルトの名無しさん:2008/11/26(水) 01:24:43
東京で先週開かれたISOのFortran部会でCoArrayFortranに関する扱いで
何か進展はあったのでしょうか?

つまりCAFを排除できたのでしょうか?
483デフォルトの名無しさん:2008/11/29(土) 16:57:56
>>482
東京会議の結論がうpされたようだ。
http://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デフォルトの名無しさん:2008/12/13(土) 02:11:30
C Pad for Salford FTN77
でCPU TIME を出力できるようにする方法はありますか?
487デフォルトの名無しさん:2008/12/13(土) 18:02:53
>>486
HIGH_RES_CLOCK@

使い方は Library Reference に載ってる。
488デフォルトの名無しさん:2008/12/23(火) 09:11:38
>>487
亀ですが
ありがとうございます。
出来ました!
489デフォルトの名無しさん:2009/01/24(土) 19:01:34
関連スレが新しくなりました。

くだすれFORTRAN(超初心者用)その4
http://pc11.2ch.net/test/read.cgi/tech/1232789521/l50
490デフォルトの名無しさん:2009/02/12(木) 00:23:26
うちの研究室の人たちがFortranでプログラミングしているけれど
お前らgoto使いすぎ・・・
というか自分の提出したプログラムがgoto文に書き換えられている・・・

subroutine、functionを使いすぎるのはスパコン計算に向かないと言っていたけれど
勉強してきた構造化プログラミングの手法自体がfortran向きでないということなの?
491デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/13(金) 08:29:24
>>493
ありがとう。pure 属性は使い易そうだ。
495494:2009/02/13(金) 11:01:13
loop内で頻繁に呼ばれる4個つくらいの function や subroutine に pure 属性つけただけで
並列(OpenMP)の時にちょびっと速くなった。わーい。
もともとdo-loopで一つずつ処理しているので elemental を使える状況は少ないけど、
もう少し理解してから使ってみよう。
inlineを少し深くするようになったからかコンパイル時間がすこし長くなったけどまあ気にしない。
496デフォルトの名無しさん:2009/02/17(火) 22:12:50
>>491
なるほど、ためになったわ。サンキュー。PUREを付けるだけで簡単に速くなったわ。

担当のは基本的に古い人間だから、あまりコンパイラ任せにするなとか言うんよな…。
Fortran90っぽい77形式の文も、「完成した後で直します」とか言ってそのままだったり。
implicit realもcommon文もどうにかしたいけれど、きっと文句言うんだろうな。
497デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/26(木) 16:08:37
OpenMPを試してみてるんだけど、いまいちうまくいかないんだが・・・
ifort -QParallel でコンパイル+実行するとうまくいくんだけど、
同じソースをifort -Qopenmp でコンパイル+実行すると
Program Exception - stack overflow
っていうエラーが出る
ソース中にOpenMP構文は use omp_lib だけ
これってどうしたらいいのかな?
500499: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デフォルトの名無しさん:2009/02/26(木) 17:23:54
-openmpだとデフォで動的(-auto)になるんだっけか
>>499は単にスタック不足なだけでは?

ところで、KMP_STACKSIZEってunlimitedに設定できないの?
504デフォルトの名無しさん:2009/02/26(木) 17:58:56
動的っていってもヒープとスタックがあるよね。
Fotranの場合ってどういう風に割り当てられるんだろう・・・そういやあまり意識したことなかった。
505デフォルトの名無しさん:2009/02/27(金) 02:43:33
>>504
元々はAUTOMATIC変数の類はスタックに、ALLOCATE命令のときはヒープだった気がする。

ただ歴史的経緯のせいでサブルーチン側で巨大な配列をとっているプログラムが多くて
それがSTACKOVERFLOWを引き起こすから、IntelFortranなんかはデフォールトでは
スカラー変数はスタックで、配列の類はヒープで確保するようになった気がする。

インテルの掲示板に、デフォールト・オプション切り替えの話が出ていた旗もするのだが
昔のことなので記憶がはっきりしない。

OpenMPを指定すると、オプションが切り替わってしまう話はこのスレに出ている。
http://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/59627/


FortranはFORTRAN66時代がSTATICに変数をとっていた関係で、
FORTRAN77で規格の上ではサブルーチン類の変数はAUTOMATICでありうるように
なったにもかかわらず、互換性の観点からデフォールトでSTATICに変数を
とっていることが多くて、それはFortran90でもしばらく続いていたという歴史的経緯がある。
506デフォルトの名無しさん: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デフォルトの名無しさん:2009/02/27(金) 13:12:01
>>506
そうなんじゃないかな?
配列までスタックにとるからoverflowしていると考えるとつじつまが合う?
508506: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デフォルトの名無しさん:2009/02/27(金) 15:30:30
え、OpenMPだとサブルーチン内ではstatic配置ってできないわけ?
数値計算では馬鹿でかい配列は可能な限りstaticにするのが基本じゃない?
サブルーチン渡る度に配列をコピーとかやってられんでしょ?

その代わりメモリのアロケーションはコーディングする側がきちんと考えてあげないといけないけど。
この辺がリソースをある意味富豪的に使うことが前提とされるJavaやC#などのオブジェクト系言語との違いだね。
511デフォルトの名無しさん:2009/02/27(金) 16:56:15
510はちょっと尋ね方が変だな。
副プログラムが並列のloop内にあるのか、
副プログラム内で並列のloopがあるのかで答は変わる。
512510:2009/02/27(金) 19:38:52
的外れな質問してたのかな、ごめん・・・。
>>511の両方のケースとも知りたいので、よかったら教えてほしい。
流体とかの数値計算では行列の反復法とかはサブルーチン内でやるけど、
そういうケースでメモリのアロケーションはどうすべきなのか、という視点で興味があります。
513デフォルトの名無しさん:2009/02/28(土) 00:58:18
>>512
引数に載ってれば、Fortranは参照呼出しなんだから配列のコピーが生じるはずもない。
CやPASCALとは違う。(まぁ最近はVALUE属性も出来るようになったが)

ここでは副プログラム内で新たに割り付けられる配列の話だろう。
それが動的に取られるとして、スタックに取られるか、ヒープに取られるかの違い。

514510:2009/02/28(土) 01:28:49
>>513
>副プログラム内で新たに割り付けられる配列
あ、そういう話か・・・ありがとう。

自分は一時作業用の配列も全部メイン側で用意してやって引数渡ししてるんだけど、
そういうのはサブルーチン内でスタックやヒープで取ってやる方がいいのかな?
皆さんどうしてますか?
515デフォルトの名無しさん:2009/03/03(火) 06:16:03
allocatableを副プログラム内で作ってそれ(先頭アドレスやらサイズその他)を
メイン階層や他の副プログラムに行き渡らせるのが割りと
面倒臭いのでメイン階層でやってる。
メイン階層が長くなるのは正直あまり好みではない、けど
まあ好みの問題なだけなので気にしないようにしている。

allocatable使うと場合によってはプログラム内で明示するサイズより大きいメモリを扱えたり
(コンパイラはハンドルできるメモリサイズ < OSがハンドル出来るメモリサイズ、なので)、
格子数(データ数)の違う処理を同じ実行イメージで出来る(コンパイルしなおさなくて良い)のが
いいけど、最近ではサイズをプログラム内で固定変数で明示していちいちコンパイルしている。
その方がミスは少ない気がする。気のせいかもしれないけど。
516デフォルトの名無しさん: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デフォルトの名無しさん:2009/03/12(木) 04:57:59
>>517
気持ち悪いけど、下記のようにしてもだめかな?
クラシックな書き方だけど。

  write(*, '(100f10.5)') a(:)
519デフォルトの名無しさん:2009/03/12(木) 09:37:42
>518
ありがとん。
write(*,'(100f)') a(:)
でいけた。
520デフォルトの名無しさん:2009/03/15(日) 01:01:35
改行抑制なら、write文ならadvance='no'を付ければできるはず
出力するものが決まってるなら、改行してしまう書式の箇所に\(バックスラッシュ)を入れてもいい
521デフォルトの名無しさん:2009/03/15(日) 11:34:42
>520
advanceはフォーマット文がいるから、結局519と同じでは?
522デフォルトの名無しさん: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デフォルトの名無しさん: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の結果: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デフォルトの名無しさん: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デフォルトの名無しさん: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 ---


結論
①書式省略すると、適当な位置で改行してくれる(規格で決まってるんかな?)
②書式指定すると、書式の中身が終わる度に改行
③書式に\を付けると改行抑制
④書式にadvance='no'(デフォルトはyes)を付けるとwrite文が終了したときに行う改行を抑制(②との違いに注意)

って感じかな。
改行抑制の\と改行指定の/が混ざるとどんな出力になるんだろう。
528デフォルトの名無しさん: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デフォルトの名無しさん:2009/03/22(日) 10:23:20
>>529
他のコンパイラでは改行しないので、コンパイラのせいだと思います。
>>524-528
ありがとうございます。
参考になりました。
write(*,'(f\)') f
が良さそうですね。
531デフォルトの名無しさん:2009/03/23(月) 15:14:13
>>529
Fortranに限らず、プロンプトのサイズは関係ないよ
532デフォルトの名無しさん:2009/03/27(金) 05:59:41
亀だけど、Ifortなら<>がお勧め。
多次元配列の最初の数を入れることが多いです

program main
implicit none
integer,parameter :: num = 9
integer :: ii,jj
real :: arry(num,num)
do ii=1,num
do jj = 1,num
arry(ii,jj) = ii*jj
enddo
enddo

write(6,'(<num>F)') arry
end program
533デフォルトの名無しさん:2009/03/27(金) 09:10:33
>532
勉強になった。
ありがとん
534デフォルトの名無しさん:2009/03/28(土) 00:52:37
>>531
WindowsはDOS窓のサイズで改行位置が変わるぞ。

535デフォルトの名無しさん:2009/04/03(金) 21:43:51
>>532
<>で整数くくるとその数が使えるんだね・・・知らなかった。昔からあった機能?

>>534
そうなんだ。>>531はLinuxの場合ルだけかな
536デフォルトの名無しさん:2009/04/03(金) 22:09:05
>>535追加

<実数変数>でも勝手に整数にキャストしてくれるね。
あと他のところにも、例えば
num1=5
num2=1
write(6,'(<num>F<num1>.<num2>)') arry
みたいにして使えるね。
537デフォルトの名無しさん:2009/04/04(土) 02:01:36
>>536
Fortran2008 では、 *( i3, '-' ) 見たいな感じで * が無限反復の指定子になるらしい。
538デフォルトの名無しさん:2009/04/08(水) 09:50:52
*( i3, '-' )
を、スキー帽がぶったバカボンのパパっぽい大人と
すました子供に見えるようになると、やばいね。
539デフォルトの名無しさん:2009/04/08(水) 12:40:58
やばいな
540デフォルトの名無しさん:2009/04/17(金) 23:47:22
Fotranはじめようと思ってインストールして、
簡単なプログラムを実行しようとしたんだけど、

ld: crt2.o: No such file: No such file or directory

ってエラーが・・・。ググってもよくわからず・・・。
助けてください。
541540:2009/04/18(土) 00:12:28
アンインストールして、はじめからやり直したらでけた。
542デフォルトの名無しさん:2009/04/18(土) 20:15:44
>>542
おまえ、プログラムのセンスあるから、今後も缶ばれ!
543デフォルトの名無しさん:2009/04/19(日) 12:16:56
>>542
自画自賛?
544デフォルトの名無しさん:2009/04/23(木) 16:31:22
windowsXPでフォートラン90をフリーで使いたいのですけど、
cygwin以外でどうにか出来ますか?
545デフォルトの名無しさん:2009/04/23(木) 22:10:01
free Fortran でぐぐれ
546デフォルトの名無しさん:2009/04/24(金) 00:32:48
>>544
g95だな・・・
547デフォルトの名無しさん:2009/04/24(金) 23:53:11
windowsでVMWareを立ち上げてUbuntuいれてgfortran
548デフォルトの名無しさん:2009/05/13(水) 00:24:34
n次元配列をなめるルーチンを作成できる?
reshepe使って一次元に落とし込んで処理しようとしたら、segmentation faultになってしまった。
コードはこんな感じ。
-----------------------------
program main
integer :: arr(3,4,5)
integer :: i,j,k
do i=1,3
do j=1,4
do k=1,5
arr(i,j,k) = i+j+k
enddo
enddo
enddo
call check(arr)
end program main

subroutine check(arr)
integer,intent(in) :: arr(:,:,:)
integer,allocatable :: tmp(:)
integer :: i,elem=1
do i=1,size(ubound(arr))
elem = elem * (ubound(arr,i)-lbound(arr,i)+1)
enddo
allocate(tmp(elem))
tmp = reshape(arr,shape(tmp))
do i=lbound(tmp,1),ubound(tmp,1)
print *,tmp(i)
enddo
end subroutine check
-----------------------------
549デフォルトの名無しさん:2009/05/13(水) 01:22:27
>>548
PRINT *, arr
でだめなのか?
550デフォルトの名無しさん:2009/05/13(水) 20:37:56
>>548
ほらよ。つーかこれテンプレにしてちょ


・形状引継ぎ配列を引数に使う
・割り付け配列を引数に使う
・ポインタを引数に使う
・引数キーワードやoptional属性を使う
・関数の返値を配列にする

↑をしたいなら、副プログラムは明示的引用仕様にしなきゃならない。

■明示的引用仕様
・副プログラムを内部副プログラムにする(呼び出し側でcontains)
・副プログラムをモジュール副プログラムにする(モジュールでcontains)
・副プログラムが外部副プログラムならば、それを呼び出す側でinterfaceを用意する
■暗黙的引用仕様(FORTRAN77的なやり方)
・副プログラムが外部副プログラムで、それを呼び出す側でinterfaceを用意しない

なお、副プログラムとは関数やサブルーチンを指す。
551デフォルトの名無しさん:2009/05/13(水) 23:25:40
>>548
多次元配列を一次元にするには PACK UNPACK を使うのが一般的だと思う。
Fortran90 で導入されている。

例題はマニュアルをみてちょw
552デフォルトの名無しさん:2009/05/14(木) 23:40:08
FORTRAN90で引数の整合性をチェックする方法ってないかな?
よくそこでバグがおきるんだ。
553548:2009/05/14(木) 23:50:44
>>549
print の部分は、本番仕様ではガチャガチャ変更したいところなのでございます。
554デフォルトの名無しさん:2009/05/14(木) 23:51:21
555548:2009/05/14(木) 23:51:43
>>550>>551
って~ことは、呼び出し側でinterfaceを用意して、packで一次元化するということか。
------------------------------------------
program main
integer :: arr(3,4,5)
integer :: i,j,k
interface
subroutine check(arr)
integer,intent(in) :: arr(:,:,:)
end subroutine check
end interface
省略
call check(arr)
end program main

subroutine check(arr)
integer,intent(in) :: arr(:,:,:)
integer,allocatable :: tmp(:)
integer :: i
tmp=pack(arr,mask=(arr .ne. 0))
do i=lbound(tmp,1),ubound(tmp,1)
print *,tmp(i)
enddo
end subroutine check
------------------------------------------
これでできました。ありがとうございます。
余談だけど、gfortranでは期待通りに処理されるのに、intel fortranだとダメみたい。
pack()の返り値が壊れてしまうっぽい。バグか?
556デフォルトの名無しさん:2009/05/15(金) 00:45:08
>>555
tmpをALLOCATEしてないからかな?

ALLOCATE(tmp(SIZE([arr .ne. 0])))

これを入れておくと動く。
配列を返すものを、未割り当ての割りつけ配列に入れたときの挙動が、
F90の範囲ではプログラム側に問題があって悪いとおもうが、
新しい規格ではかなり自動で調整してくれるようになったので、
これがBugなのかどうか文法書を読み直さないと分からんw

[ ] はF2003で、f90なら(/ /) に対応。
557556:2009/05/15(金) 00:49:27
ああ、Fortran95/2003 Explained 17.5.2 に そのものずばり、PACKの結果を
未割り当てALLOCATABLEに突っ込む例題が載っていた。

Fortran95までは出来なくて、F2003で出来るようになるものだそうだ。

あと、>>556で [ ] は無くても良かったw 
558デフォルトの名無しさん:2009/05/15(金) 01:22:11
>>556.
>新しい規格ではかなり自動で調整してくれる
へーそうなんだ
いちいちallocateしなくてすむのは嬉しい
559548:2009/05/17(日) 22:24:17
>>556>>557
フォロー、ありがとうございます。
allocateでintel fortranでも無事動くようになりました。
てか、2003いいね。期待大。
560デフォルトの名無しさん:2009/05/21(木) 00:38:15
スレ違いだったら失礼します

FORTRANで他からデータを読み込むのに、そのデータの最初にデータ概要が書いてあるので
読み飛ばす方法があったら教えてください

初心者なので分かりにくくてすみません
561デフォルトの名無しさん:2009/05/21(木) 01:30:02
>>560
適当な変数を定義して、読み込みだけさせて、その中身を
使わなければいいぢゃない。嘘データで良いから実例だし
てくれ。

# リアルなのを晒すとマズいかもしれんし。
562デフォルトの名無しさん:2009/05/21(木) 01:54:07
>>561数字を読み込んで並べるだけなのですが


読み込むデータが

○月×日
気象データ
東京都日黒区

0.0001
0.0025
0.0025
0.0105
0.1568
1.5385
1.4657
12.368

こんな感じで数字の部分のみ読み込みをしたいです
563デフォルトの名無しさん:2009/05/21(木) 02:05:29
データ構造が既知ならば読みたいところまで回していけばいいし、
レコード長が分かってれば指定のレコード部を直接読みに行ける、はず

もっと良い方法あったらフォローよろ
564563:2009/05/21(木) 02:08:22
あ、sequentialで書いたファイルをdirectで読む(あるいはその逆)って、できないんだっけ?
自信なくなってきた><;
565デフォルトの名無しさん:2009/05/21(木) 02:15:57
>>563すみません、もう少し詳しくお願いできますか?
566デフォルトの名無しさん:2009/05/21(木) 09:45:54
>>562
いくつか方法はある。
最初のデータ概要の行数が決まっていて一定ならば簡単で、
CHARACTER TEXT*256
DO i = 1, 4
READ(7, *) TEXT
END DO
的に読み飛ばせばいい。

手抜きな方法としては、数値変数に文字列を読み込むとエラーが出ることを利用して、
10 CONTINUE
READ(7, *, ERR= 10) dat
で無理に読み飛ばすことも出来る。
本物のエラーのときや、データ概要が数値として読めてしまうと困るw

やや高度な方法としては、いったん文字列に読み込んで、その文字列の中身をしらべて
文字列を内部ファイルとして入力に使って数値を読むという方法もある。

データ開始地点まで適当にすすんで、BACKSPACEで適切なところまで戻る手もある。
567デフォルトの名無しさん:2009/05/21(木) 12:20:07
>>566
2つ目の手抜き法はオイラもよく使う。
念のため、

icount = 1
20 continue
read(7,fmt=*) string
read(string,fmt=*,err=10,end=999) dat(icount)
icount = icount + 1
goto 20
10 write(*,*) string
goto 20
continue 999

みたいに文字列を一度かまして
読み込みは内部ファイルで処理して、
飛ばされたケースは表示させて目でチェックするとか。
あまりほめられないスパゲッチ~だけど。
568デフォルトの名無しさん:2009/05/23(土) 20:59:00
>>562
本気でスピード求めるならdirectアクセスがベストだが
多分あなたの使い方じゃそうじゃなさそうだから、普通に次々読んでいって
使わないデータは破棄しちゃえばいいじゃん

>>562がASCIIデータだとすると、5行目からの数字が欲しいなら、
do i=1,5
read(unit) tmp
enddo
とやって捨てちゃえばいい
569デフォルトの名無しさん:2009/05/23(土) 21:16:21
読み捨てるなら

DO I = 1, 5
READ(NUNIT, *)
END DO

でおk
570デフォルトの名無しさん:2009/05/23(土) 23:01:20
そっか、捨てるんだから何もいらないか
571デフォルトの名無しさん:2009/06/09(火) 12:40:21
FORTRANがCOLUMN-MAJORなことを調べてみたいのですが、
変数のポインタ値を知る方法はありますか?
572デフォルトの名無しさん:2009/06/09(火) 12:49:09
>>571
無いが、サブルーチンに送ればわかる。
つまり、2次元配列を、サブルーチンの1次元形式引数の配列に渡せばよい。
573デフォルトの名無しさん:2009/06/09(火) 13:18:41
ありがとうございます。確かにWRITEなんかにわたすことで
順番を知ることはできるのですが、メモリ上の位置を知ることは
できないのですね
574デフォルトの名無しさん:2009/06/09(火) 13:32:54
>>573
標準文法ではないが、LOC 関数などがベンダー拡張として用意されていることが多い。

またリンカーでマップを出力させると静的な変数ならばアドレスが分からなくも無い。
配列のならびに関しては、そのままでは分からないが、さらに EQUIVALENCE でも
かければ分かるのかもしれない。
575デフォルトの名無しさん:2009/06/20(土) 14:16:58
IFort10.1+マルチコア環境で使ってる人いるかな
OPENMPで並列化してるんだけど、
デュアルコア環境でトータルCPU使用率が50%から上がらない理由わかる?
1コアしか使ってなくて2コア目がアイドルになっちゃう
576デフォルトの名無しさん:2009/06/20(土) 14:21:55
OSによるだろうけど、
setenv なんたら、
をちゃんとしてる?
577575:2009/06/21(日) 16:49:20
setenvはよくわからないんだけど、OPENMP+自動並列化で5スレッド走ってる
環境はOSがXPProSP3で、Core2DuoE8500
578デフォルトの名無しさん:2009/06/21(日) 18:23:29
OpenMPの場合は、環境変数でCPUの位置をbindしてやらないといけないんだっけ?
自動並列も同じだっけかな?

誰か詳しい人の降臨を待つしかないなw
579デフォルトの名無しさん:2009/06/22(月) 09:45:02
>>577
なぜ最初からWinXPだとかけないのだろうか?
自分が使ってるlinux+ifort9.1では、
setenv OMP_NUM_THREADS 8 (最後の8は適当なCPU数に置き換え)
で環境変数で並列数を指定することになってるけどな。Linuxでもシェルごとに違うはずだが。
実機がないのでWinXPだとどの程度違うのかわからんが、Intel提供の例では
setenv を set に換えるだけのようだ。
全体の監視&同期とり用のあまり忙しくないスレッドが1個走るはずだけど、
全部で5つはなんか多い気もするがそんなものかもしれない気もする。
>>578
CPUの位置のバインドは自動並列やらOpenMPの場合、Linuxでは dplace や taskset を使うな。
指定しないとふらふら移動することがあるからややこしい。

まあ詳しいWin機でいじくりまくってる神の降臨を待とう。Winでの並列に興味あるし。
580575:2009/06/22(月) 17:58:29
自己解決したので報告

ProcessExplorerでスレッドの状況を調べてたら、メインスレッド以外無負荷だた
並列化を見直して負荷をかけるようにしたら100%まで掛けられるようになった

迷惑掛けてスマソ
581デフォルトの名無しさん:2009/06/22(月) 23:05:58
>>579
WinでのCPUバインドは環境変数でできた。
マニュアルに載っているはず。
イ7でハイパースレッディングの8コア運用していると、ちゃんとバインドしないと
性能が全く出ない。デフォで8スレッド運行してバッティングするし、4スレッドにしても
物理コアに割り当たるとは限らないようで放置プレイでは性能でない。
582デフォルトの名無しさん:2009/06/23(火) 16:54:00
>>581
環境変数でCPUバインドっていうのは、別にWindowsに限らず他も同じだと思う。
Intel FortranだとKMP_AFFINITY、PGI FortranだとMP_BLISTかな。

というか、いい加減環境変数の設定とかをユーザにやらせるんじゃないくて、
コンパイラがシステム構成を見ながら勝手に使うCPUを指定してくれればいいのに…。
どういうスレッドの配置が効率がいいかなんて、予想できそうなもんなのに。
583556:2009/07/09(木) 23:41:32
>>555
最近になって、Intel掲示板を見ていてようやく分かったが、オプションをつけないと
駄目らしい。

/assume:realloc_lhs

これをつけるとFortran2003解釈、つけないとFortran90/95解釈になるらしい。
584デフォルトの名無しさん:2009/09/07(月) 13:50:42
age
585デフォルトの名無しさん:2009/09/08(火) 07:43:50
>>583
お、参考にしよう。

おまけ・・・になるのか知らないけどw
メインがCでFortranコードをサブルーチンとして呼び出してリンクするときは
締めの実行ファイル生成時には icc でリンクして実行ファイルつくってもいいけど、ifort で
ifort -nofor_main -no-ipo
ってやると振る舞いが礼儀正しい事が多い、気がする。
-no-ipo はリンクするときだけね。これがないとifortは無茶をするようだw
586デフォルトの名無しさん:2009/09/27(日) 01:29:32
>>nag の fortran 入門でおk
587デフォルトの名無しさん:2009/09/27(日) 05:35:56
CERNLIBのmathlibのラッパをモジュールで作ろうと思っているのだけれど、
gfortranで例えば自己完結している共有オブジェクト(.soファイル)って
作れるもんなの?
一々$(cernlib -G Motif mathlib)をつけてコンパイルするの
面倒くさい。
ライブラリ作ったこと無いんでアレゲな文章だが、もし誰かわかるのなら。

ちなみに、OSはUbuntu8.04な。
588デフォルトの名無しさん:2009/09/27(日) 07:43:50
追加で質問なんですが、
http://wwwasdoc.web.cern.ch/wwwasdoc/shortwrupsdir/b100/top.html
のラッパーとして
http://gist.github.com/194480
というのを書いて
program main
use FunctionBinom
implicit none
integer::x,y
x=5
y=2
print *,binom(x,y)
end program
でコンパイルしてみると(もち、$(cernlib mathlib)はつけて)
/tmp/ccdsgC3z.o: In function `__functionbinom__binom_integer':
binom.f95:(.text+0x14): undefined reference to `kbinom_'
/tmp/ccdsgC3z.o: In function `__functionbinom__binom_double':
binom.f95:(.text+0x34): undefined reference to `dbinom_'
/tmp/ccdsgC3z.o: In function `__functionbinom__binom_real':
binom.f95:(.text+0x54): undefined reference to `rbinom_'
collect2: ld returned 1 exit status
というエラー出る。何で参照先が無いのかさっぱりわからない。
589デフォルトの名無しさん:2009/09/29(火) 00:00:44
>>588
よく知らんが、関数呼び出しの名前規約が食い違っているとか。
エラーメッセージを見る限り、小文字でアンダースコア末尾付与の形式で
オブジェクトを探しに行っているが、確かに存在しているのかね?

名前一覧とか出力させるとか、バイナリエディターで直接のぞいてい見るとか。
590デフォルトの名無しさん:2009/09/29(火) 03:11:28
external binom
つけとく、とか
interface 文で前もって引数部を教えてあげるとか、
_binom みたく下付線つけとくとか、かなあ・・・違うな。う~ん。
591デフォルトの名無しさん:2009/09/29(火) 22:56:52
>>589
>関数呼び出しの名前規約が食い違っているとか。
他の関数(例えば、票にもあるATGという関数)だとエラー無くできるし、
自分がマニュアル読む限り名前規約の話もないのよね。

>名前一覧とか出力させるとか、バイナリエディターで直接のぞいてい見るとか。
バイナリエディタは避けたい。名前一覧どうやって出力させればいい?

>>590
モジュラー性上げたいのでexternalを使いたくないのよ。
引用仕様記述は書いてあるよ。
592デフォルトの名無しさん:2009/09/29(火) 23:04:23
スパコンの人じゃないのでわからないけれど、スパコンの人たちって
CERNLIBとかは使わず、何のライブラリ使っているの?NAG?
フリーであるならそのライブラリのラッパに鞍替えするわ。
593デフォルトの名無しさん:2009/09/30(水) 10:40:07
自作に決まってるだろ
他人のライブラリなんか遅くて使えないし
594デフォルトの名無しさん:2009/09/30(水) 12:41:03
>>593
なぬ。それスパコン業界の一般論?>>593が自作好きというわけじゃなく?
新しいアルゴリズムで作る、というのならわかるのだけれど、
それ以外の速度的にもう上げられないだろう、上げる必要も無いだろう的
関数も自作かい。
595デフォルトの名無しさん:2009/09/30(水) 15:42:43
行列ソルバに関しては、やっぱまだまだ自作の余地があるんじゃないの?
スパコンのアーキテクチャによって最適なアルゴリズムは違うだろうし。
x86なスパコン(クラスタというべきか?w)なら適当な余所様のライブラリでいいかもしれないけど。
596デフォルトの名無しさん:2009/10/01(木) 02:38:44
>>591
>バイナリエディタは避けたい。名前一覧どうやって出力させればいい?
ライブラリアン用のコマンドを使えば、一覧出せると思う。
メインフレームなら出来たw

>>594
ライブラリはその性質からどうしても汎用だから、自分の問題に合わせた
特殊条件を使って早くすることはあるな。
597デフォルトの名無しさん:2009/10/01(木) 12:47:41
なるほど。個人的な話だけど、いろんなことが繋がったわ。
ライブラリは確かに汎用的じゃないといけないわな。

行列ソルバ、つーか固有値計算は興味深い。
アルゴリズム色々調べているけど、最新のアルゴリズムってなによ?
まぁ特許とられて普通に使えないんだろうけど。
よく知らないけれど、アルゴリズムに特許はかけられるよね?
アルゴリズムを実装したアプリケーションに対してのみ特許かけられるんだけっけ?
598デフォルトの名無しさん:2009/10/01(木) 12:48:45
>>596
>ライブラリアン用のコマンドを使えば、一覧出せると思う。
お礼言うの忘れてた。トンクス!
599デフォルトの名無しさん:2009/10/01(木) 13:13:45
アルゴリズムなんかで特許とんのは浅ましい・・・
そんなふうに考えていた時期が(ry
600デフォルトの名無しさん:2009/10/06(火) 10:10:52
do 600 i = 1, 100
  write(*,*) '600 get'
600 continue
601デフォルトの名無しさん:2009/10/10(土) 13:11:05
module mod
interface iface
integer function func(i, j)
integer :: i, j
end function func
end interface iface
end module mod

integer function func(i, j)
use mod
integer :: i, j
func = i * j
return
end function func

program main
use mod
print *, iface(10, 20)
end program main
-------------------------------------------------------
func = i * j
1
Error: Name 'func' at (1) is an ambiguous reference to 'func' from current program unit

上記のようなエラーがでてコンパイルできません
moduleを使わない、あるいはfunctionではなくsubroutineならコンパイルできました
ひょっとして総称名はfunctionには使えないんでしょうか?
602デフォルトの名無しさん:2009/10/10(土) 14:29:25
>>601
integer function func(i, j)
の中の
use mod
が不要なのでは
603デフォルトの名無しさん:2009/10/10(土) 15:44:58
>>602
できました。ありがとうございます
参考にしたサイトが間違っていたようですね
604デフォルトの名無しさん:2009/10/10(土) 16:32:59
....その言い草はねぇだろうww
605デフォルトの名無しさん:2009/10/10(土) 22:01:30
>>604
だったらそのサイトのURLを教えて欲しい
606デフォルトの名無しさん:2009/10/10(土) 22:03:42
安価間違いました>>604じゃなく>>603です。すみません。
607デフォルトの名無しさん:2009/10/10(土) 22:14:02
さらしていいものなのかな?
ttp://www.geocities.jp/eyeofeconomyandhealth/homepage/module2.html#t
ここなんだけど副プログラムのほうにもuseしろって書いてありました
608デフォルトの名無しさん:2009/10/13(火) 03:37:16
まずはgeocitiesごときにあるサンプルを鵜呑みにした自分を責めるところから始めるんだ
609デフォルトの名無しさん:2009/10/14(水) 00:33:47
>>609 (インデント用)

module mod
contains
real function call_func(func, arg)
interface
real function func(arg)
real, intent(in) :: arg(2)
end function func
end interface
real, intent(in) :: arg(2)
call_func = func(arg)
return
end function call_func
end module mod

real function func(arg)
real, intent(in) :: arg(2)
func = arg(1) * arg(2)
return
end function func

program main
use mod
external func
real :: arg(2) = (/ 2.0, 3.0 /)
! dummy = func(arg)
print *, call_func(func, arg)
stop
end program main
610デフォルトの名無しさん:2009/10/14(水) 00:36:31
>>609のコメントアウトした部分のコメントをはずすとコンパイルも通り、正常に動作するんですが
コメントアウトするとなぜかコンパイルすらできません
理由がさっぱりわからないんですが、なにが問題なんでしょうか?

コンパイラはgcc 4.2.4

エラーメッセージは↓です
print *, call_func(func, arg)
1
Error: Type/rank mismatch in argument 'func' at (1)
611デフォルトの名無しさん:2009/10/14(水) 00:43:12
>>610
Intel VF 11.046 なら通る。
612デフォルトの名無しさん:2009/10/14(水) 01:54:59
回答有難う御座います
gccコンパイラのバグということでしょうかね
汎関数を引数にもってる関数の総称名をつけようとするとコンパイルできなかったり(これは仕様?)
613デフォルトの名無しさん:2009/10/14(水) 03:35:23
>>612
PRINT文のバグ臭いな。
FUNCTIONの返り値が、VALUEなのかADDRESSなのか今一不明なので
77時代からFUNCTIONの返り値を代入を経ずに使うと、機種依存の振る舞いを
することが良くあった。
最近は大丈夫なことが多いが。

関数引数の総称名は、IVFでは出来た。多分、仕様上では出来ておかしくないと思う。

MODULE m_unko

INTEGER, PARAMETER :: kd = SELECTED_REAL_KIND(14)

INTERFACE gen
MODULE PROCEDURE sub1, sub2
END INTERFACE

ABSTRACT INTERFACE
REAL FUNCTION x_f(a)
REAL, INTENT(IN) :: a
END FUNCTION x_f

REAL(kd) FUNCTION d_f(a)
IMPORT
REAL(kd), INTENT(IN) :: a
END FUNCTION d_f


END INTERFACE

614556:2009/10/14(水) 03:36:04
CONTAINS

REAL FUNCTION sub1(f, x)
REAL, INTENT(IN) :: x
PROCEDURE (x_f) :: f
sub1 = f(x)
RETURN
END FUNCTION sub1

REAL(kd) FUNCTION sub2(f, d)
REAL(kd), INTENT(IN) :: d
PROCEDURE(d_f) :: f
sub2 = f(d)
RETURN
END FUNCTION sub2

END MODULE m_unko
!
PROGRAM unko
USE m_unko
REAL :: x
REAL(kd) :: d
PROCEDURE (x_f), POINTER :: f
PROCEDURE (d_f), POINTER :: g
x = 4.0 * ATAN(1.0)
d = 4.0_kd * ATAN(1.0_kd)
f => SIN
g => DSIN
PRINT *, gen(f, x)
PRINT *, gen(g, d)
STOP
END PROGRAM unko
615デフォルトの名無しさん:2009/10/14(水) 21:01:13
>>613,612
サンプルコードありがたいんですが、コンパイルできませんでした
abstract interfaceのところで最初のエラーがでるので原因を調べたんですが
hpとintelのマニュアルを検索してもabstract interfaceの項目が見つからりませんでした・・・
616デフォルトの名無しさん:2009/10/15(木) 01:08:20
>>615
ABSTRACT INTERFACE はF2003の機能で、まだIntelのHelpに載ってないが、実装されている。
Crayとか(多分)IBMのマニュアルなら載っていると思う。まぁ素直にFortran95/2003 Explainedを
見るのがいいと思うが。GoogleBooksでもページが飛ばされてなければ見られる。
しかし、これは本質ではない。二度Interfaceを書くのが面倒だったから使ったまで。

これならどうだべ?
MODULE m_unko

INTERFACE gen
MODULE PROCEDURE sub1, sub2
END INTERFACE

CONTAINS

REAL FUNCTION sub1(f, x)
REAL, INTENT(IN) :: x
INTERFACE
REAL FUNCTION f(x)
REAL, INTENT(IN) :: x
END FUNCTION f
END INTERFACE
sub1 = f(x)
RETURN
END FUNCTION sub1
617デフォルトの名無しさん:2009/10/15(木) 01:09:15
INTEGER FUNCTION sub2(f, x)
REAL, INTENT(IN) :: x
INTERFACE
INTEGER FUNCTION f(x)
REAL, INTENT(IN) :: x
END FUNCTION f
END INTERFACE
sub2 = f(x)
RETURN
END FUNCTION sub2
!
REAL FUNCTION rmult2(x)
REAL, INTENT(IN) :: x
rmult2 = 2.0 * x
RETURN
END FUNCTION rmult2
!
INTEGER FUNCTION imult2(x)
REAL, INTENT(IN) :: x
imult2 = INT( 2.0 * x )
RETURN
END FUNCTION imult2
END MODULE m_unko
!
PROGRAM unko
USE m_unko
REAL :: x
x = 4.0
PRINT *, gen(rmult2, x)
PRINT *, gen(imult2, x)
STOP
END PROGRAM unko
618デフォルトの名無しさん:2009/10/15(木) 18:46:55
>>616,617
有難うございます。コンパイルできました。完璧です
主プログラムにinterfaceを書く方法は見つけたんですが
moduleにくくってしまえばinterfaceを書かなくてもできるんですね
619デフォルトの名無しさん:2009/10/16(金) 08:07:09
FORTRANやめますか?人間やめますか?
620デフォルトの名無しさん:2009/10/16(金) 08:50:16
つ DarkBASIC
621デフォルトの名無しさん:2009/10/16(金) 23:00:56
Windows版NetBeansの環境でgFortranを使いたいんだが、
実行ファイルの設定をg77.exeからgfortran.exeに変えるだけでok?

もし、そのほかに設定事項等あれば教えて欲しい
622デフォルトの名無しさん:2009/10/17(土) 20:44:18
moduleでオブジェクト指向っぽいことができるのはわかったんですが
c++とかでいうインスタンスを作ることはできないんでしょうか?
623デフォルトの名無しさん:2009/10/17(土) 22:43:57
>>622
F2003なら出来る。F95以前では出来ない。
624デフォルトの名無しさん:2009/10/17(土) 23:13:19
こんな感じかな?
とりあえず、IVF 11.1 では通った
誰か Fortran 95/2003 Explained の日本語訳作って

module mod1
implicit none
type Circle
real :: d
contains
procedure :: area => func1
end type Circle

contains
real function func1(this)
class(Circle) :: this
func1 = (this%d ** 2) * 3.14 / 4.0
end function func1
end module mod1

program main
use mod1
implicit none
type(Circle) :: c
c%d = 10.0
print *, c%area()
end program main
625デフォルトの名無しさん:2009/10/18(日) 16:52:26
>>624
ありがとうございます
残念ながらgfortranでは2003が使えないようなので試せませんが・・・
626デフォルトの名無しさん:2009/10/19(月) 14:40:01
実際、FortranでOOPはどうなの?
イラネって意見も散見するが・・・
627デフォルトの名無しさん:2009/10/19(月) 16:11:22
乱数とか行列?
628デフォルトの名無しさん:2009/10/19(月) 17:25:58
>>626
それで速度が落ちるならイラネ。落ちそうな気しかしないけど。

中田育男『基礎FORTRAN』(岩波書店)のコラムに

FORTRANでもCOMMON文とENTRY文を使って、オブジェクト指向設計に
従ったプログラムを書くことができる。

とあったけど、具体的なことは何も書いていなかった。
629デフォルトの名無しさん:2009/10/19(月) 17:54:29
FORTRANで無理矢理それっぽいことをやったらどうなるかという例が
「オブジェクト指向入門」34章にあるようだ
http://www.seshop.com/detail.asp?pid=9505&mode=spec

俺は初版しか読んでないけど、今でも事情は変わらんでしょ
630デフォルトの名無しさん:2009/10/19(月) 20:01:44
>>629
読んでみたいけど、ちょっとお値段が・・・
そういやまともなオブジェクト指向の本を読んだことは一度もないや
良い機会だから買ちゃおうかしら
631デフォルトの名無しさん:2009/10/19(月) 20:18:28
>>628
> COMMON文とENTRY文を使って、オブジェクト指向設計に

なぜかはわかりませんが、イヤな予感しかしません・・・
632デフォルトの名無しさん:2009/10/19(月) 20:42:47
というか、OOP用に作られてない言語で安全なOOPをするのって無理だし・・・
安全でないOOPなんてOOPのメリットないに等しいし・・・

素人は大人しくJavaやC#使うほうが幸せになれる
633デフォルトの名無しさん:2009/10/19(月) 21:13:30
>>629
初版のはFORTRAN77でトリッキーなカプセル化をする話だけだったから
たぶん>>631>>632の言う通り

今実際どうなのか
俺は2003とか不勉強なんでわからん
634デフォルトの名無しさん:2009/10/20(火) 00:37:24
>>633
そういわず、2003を勉強しようぜ!
ばりばりOOPでなくても
TYPE の拡張とかが、入れ子じゃなくて、同じ深さで構造体のメンバーを増やせるし。
OOPでない部分でも結構拡張があって便利。


日本語 パワポ
ttp://www.itscj.ipsj.or.jp/forum/forum2008SC22fortran/Fortran20032008.pdf
英語
ftp://ftp.nag.co.uk/sc22wg5/N1551-N1600/N1579.pdf
635デフォルトの名無しさん:2009/10/20(火) 01:07:43
正直、OOPとそうでないものの違いがよくわかんない。
暴力的な書き方だけど、「因果関係が一意」という点では同じだし。
C++しか扱ったことないしあまり深く触らなかったからだけど、
OOPの深淵に辿り着かないと判らない機微もあるのだろうけどな。
636デフォルトの名無しさん:2009/10/20(火) 02:20:34
>>629
どんな感じのことを言ってんすか?
簡単に教えてくだしあ
637デフォルトの名無しさん:2009/10/20(火) 05:21:22
>>636
たいした話じゃなくて
ENTRY文をメソッドの代わりにしてカプセル化をまねるだけ。
継承とかそういう話はないし、動的にオブジェクトを作れるわけでもない。
本来の使い方でもないから危なっかしい。
ただ、それでも素のPascalよりは気がきいてるってことなんだなw

今じゃ2003もあるし
第二版はどうなってるか知らないよ。
638デフォルトの名無しさん:2009/10/20(火) 05:43:47
>>635
自分で書く分にはOOPは邪魔なだけだよ
OOPが真価を発揮するのは他人のライブラリを使うとき。
639デフォルトの名無しさん:2009/10/20(火) 12:58:28
ENTRY文はバグでやすいな。
COMMONの代わりに、共有変数を実現するのに、77でENTRY使ったが、かえってめんどかったw


640デフォルトの名無しさん:2009/10/21(水) 10:41:26
>>637
thx
2003でOOPを謳ってるってことは、ある程度まともには作られてんだろうね多分。
アドレス指定で偶然にそのインスタンスを破壊しちゃう、なんてリスクはないように
出来てるんだろう・・・(どうやって実現してんのかさっぱり想像できないけど)
641デフォルトの名無しさん:2009/10/21(水) 21:31:44
すいません。最近始めた超初心者です。
簡単なシミュレートで
open(10,file='testout.out',status='unknown',form='formatted')
do n=0,nmax
   計算略
write(10,30) t, a(1),a(2),a(3)
30 format(1H ,4(1pe12.4))
enddo
こんな感じで配列の値を表示しようと思うのですが
なぜか出力ファイルが改行されません><
g77でコンパイルしています。コンパイルはできるのですが・・・
どなたかファイルに出力するときの改行の仕方をご教授していただきたいのです
お願いします
642デフォルトの名無しさん:2009/10/22(木) 18:39:19
>>641ですが
出力ファイルをdosに直してませんでした
自己解決しますた
フォートランはフォーマット文がわかりにくいなぁ
643デフォルトの名無しさん:2009/10/24(土) 00:54:54
>>642
FORMATの書き方が古い。
まぁg77だから仕方ないのか。
f90で学びなおせばFORMATもそれほどつらくない。
644デフォルトの名無しさん:2009/10/24(土) 03:17:58
Fortran77では動的メモリ割付け(allocate)は使えないの?
645デフォルトの名無しさん:2009/10/24(土) 03:48:06
>>644
使えない。
646デフォルトの名無しさん:2009/10/25(日) 00:06:12
>>644
大きくCOMMONを取って、必要に応じて自分で切り出して使うんだ。
647デフォルトの名無しさん:2009/10/25(日) 00:56:39
>>644
大きくCOMMONがとれない環境なのです。
allocateしないと最大メモリまで使えない。
648デフォルトの名無しさん:2009/10/25(日) 16:16:54
>>647
むかし過渡期の技術としてダイナミックコモンというのがあった。

ひょっとしたらコンパイラのオプションにあるかもしれない。
その場合、普通のスタティックなコモンより大きく領域が取れるかもしれない。


649デフォルトの名無しさん:2009/10/27(火) 14:20:53
>>646
そんなこと教えちゃらめ~
650デフォルトの名無しさん:2009/10/28(水) 20:57:22
allocateを使うとパフォーマンスが落ちるって本当ですか?
実際に使われるサイズに関わらず?
651デフォルトの名無しさん:2009/10/29(木) 00:56:45
>>650
多分誤解。
静的配列と比べるならば、それは実行時にアロケート処理するのだから余計な時間はかかるだろう。
しかし、それは計算時間に比べれば瑣末なはず。

POINTERで配列をとった場合は、メモリーの割付が連続したメモリー領域になるとは限らないので
最適化がバリバリなされず、ALLLOCATEでとった場合(連続にメモリーを取る)とくらべて
パフォーマンスが落ちる可能性があるとは言われている。
652651:2009/10/29(木) 02:15:09
書き方が悪かった。
POINTERにALLOCATEしたときは連続にメモリーを取るだろうが、
POINTERには、ストライド付きのとびとびメモリーを指示させることもできるので、
最適化には制限が係ることがあるようである。

653デフォルトの名無しさん:2009/10/29(木) 10:15:13
>>651,652
なる~。Fortran77で

i=10000
call hairetu(i)

subroutine hairetu(i)
integer i
real    data(i)

みたいな使い方で任意の大きさの配列data()をサブルーチン内で扱えるけど、
これがメモリ上でキチンと並んでいるとは限らない(とんだ部分
の取り扱いはOSがするのか?)からね。
77より後のallocatable属性は、出来るだけ連続して確保してね、の
おなじないというか願掛けと思えばいいのだろうな。
654デフォルトの名無しさん:2009/10/29(木) 10:49:44
http://codepad.org/lbdDTMLE

moduleが使う変数や関数、サブルーチンを外部から指定したいのですが可能でしょうか?上のコードは間違ってますが雰囲気を掴んでもらえたらいいかなと思い載せました
655デフォルトの名無しさん:2009/10/29(木) 21:41:04
>>651
じゃあもうallocate使わない理由はないな
コードも綺麗になるしな
656デフォルトの名無しさん:2009/11/02(月) 01:28:57
FORTRAN2008では、メモリー連続を保障する contiguous の属性が導入されるようだ。

まだ2003も碌にコンパイラが無い時点で言っても鬼も大笑いだが。
657デフォルトの名無しさん:2009/11/02(月) 01:52:59
>>653
FORTRAN95/2003 Explained 20.2.1 p.331
"A non-pointer array occupies a sequence of contiguous storage sequences 云々"
とあるので、ALLOCATABLE 配列や AUTOMATIC 配列は、連続メモリーが保障されているんじゃないかな。

658デフォルトの名無しさん:2009/11/02(月) 06:43:35
英語をみると、連続した”複数の”保存領域を数珠つなぎに占有する、だけど、
まあ、自動配列も連続したメモリに確保しようとAllocateの時と同じ程度の努力はするよん、ということか。

配列全部が”一つの”連続したメモリ空間に収まるかどうかは、その瞬間のメモリ使用状況によるんだろうな。
大きめの計算機だと、一つのマシンではOSやI/O以外の部分は排他的に使えるから問題は少ないのだろう
といってみるテスト。
659デフォルトの名無しさん:2009/11/02(月) 11:58:03
>>658
いや、完全にひとつの連続したメモリー領域なんで内科医?
努力義務ではなくて、必須義務だと思う。
660デフォルトの名無しさん:2009/11/03(火) 19:38:25
というか、contiguous と sequenceって意味的に似てるよなw
もう少し明確に書いて欲しいもんだ(書いてるのかもしれんが)
661デフォルトの名無しさん:2009/11/04(水) 03:39:24
・・・べっ別にあんたのために連続したメモリ領域を確保してるわけじゃないんだからね、
といったところか。努力はするしアテにしてくれてもいいけど、絶対じゃないぞなもし。
662デフォルトの名無しさん:2009/11/04(水) 04:25:42
フォートランってフォーミュラ・トランスフォーマーっていうくらいだから、
科学計算以外には向いていないのか?
663デフォルトの名無しさん:2009/11/04(水) 07:40:31
大昔は、他に言語がなかったから、なんでもFortranで書いてた。

現在では、向いてる向いてない以前に、言語として古い。
664デフォルトの名無しさん:2009/11/04(水) 12:39:17
そういえばなんでトランスフォーマーなんだろう

数式を変形せずになるべくそのままの書き方でコードにできるのが
Fortranのメリットだったはずなのに。
今では使っちゃいけないとされる文関数なんてモロその名残だよね。
665デフォルトの名無しさん:2009/11/04(水) 12:56:16
>>663
古いゆえにコンパイラもライブラリも枯れていて、まずバグはない
最適化も一番今の所進んでいる

というわけで信頼性と速度が要求される局面で現在も使われているわけだ
666デフォルトの名無しさん:2009/11/04(水) 13:02:36
トランスフォーマーじゃなくてトランスレータだぜ。
FORTRAN以前は演算式もアセンブリで書かなければならなかった、
数式そのものでプログラムを記述出来る事は画期的だったんだよ。
667デフォルトの名無しさん:2009/11/04(水) 13:47:03
= で代入、という規則をプログラミングの世界に普及させてしまった
張本人でもあるな。
668デフォルトの名無しさん:2009/11/04(水) 17:57:51
.eq.とか.and.とか使えるのはCよりも好き
669デフォルトの名無しさん:2009/11/04(水) 20:30:22
C++も and や or 使えるわい
670デフォルトの名無しさん:2009/11/04(水) 20:50:32
>>668
.eq.は==のほうが見やすくない?
.and.と.or.も早く&&と||が使えるようになって欲しいわ
671デフォルトの名無しさん:2009/11/05(木) 00:25:28
.EQ. はともかく .AND. とか .OR. は変な記号より文字の方がわかりやすいと思うがなぁ
672デフォルトの名無しさん:2009/11/05(木) 01:44:31
>>671
賛成。
等号不等号は数学記号のほうがいいが、.AND. .OR. はこっちのほうがいい。
&&、||は見てくれからしてイマイチ。
歴史的にもEBCDICに無い記号だから、FORTRANに入ろうはずも無かった。
APL端末使えばいいのかも知れんがw
673デフォルトの名無しさん:2009/11/05(木) 05:16:55
コンマが
10進数浮動小数点の小数点、理論演算子の飾り、structureの区切り
で使われるからメンドイw。

目の慣れだろうな。自分は .AND. .OR. の方がみやすいけど。
スペース無しだとみにくいけど。
674デフォルトの名無しさん:2009/11/05(木) 13:53:38
>>671,672
これはもう好みの問題だろうなぁ。
自分は記号のほうが、英数字に対して違いが際立つんで好きだな。
あと、文字数が少ないのもいい。.AND.は5文字もあるし。

>>673
>10進数浮動小数点の小数点、理論演算子の飾り
揚げ足じゃないが、これはコンマじゃなくてピリオドじゃ
675デフォルトの名無しさん:2009/11/05(木) 14:16:56
>>674
C言語は特殊事情があるんだよ

史上最も記号が多い言語はAPLで、未だにこの言語を超えるものは
出ていないが、第二位にC言語となっている(今はC++)

C言語はとにかく予約語をできるだけ減らしたくて、多くのワードを記号に
したと言われている

そのためC言語の予約語はわずか32個しかない

C++はCより記号が多いにも関わらず予約語はかえって増えた
C++0xでは更に増える
676デフォルトの名無しさん:2009/11/05(木) 17:40:23
そりゃ言語に機能をてんこもりにしてるんだから
記号も予約語も増えるよなぁ

FortlessはUnicodeで演算子を定義できるらしいから、もしかしたら使える記号の
数ではAPLを越えるかもw
677デフォルトの名無しさん:2009/11/05(木) 17:41:11
Fortressだったorz
678デフォルトの名無しさん:2009/11/05(木) 19:23:08
Fortressは死んだんじゃなかった?

Sun・・・(´;ω;`)ブワッ
679デフォルトの名無しさん:2009/11/05(木) 19:28:56
Guy Steele が blog 始めたりとかしてるけど...
ttp://projectfortress.sun.com/Projects/Community/blog
680デフォルトの名無しさん:2009/11/06(金) 02:10:17
>>675
そういわれるとFortranは0-9,a-Z以外に使う文字は少ないね。
{}[]@^_%~`;<>?|\ は使わないでも済むね。[]%\ は使う状況はあるけど代替があるし。
固定書式で継続行に使うとかしないと使わない文字が多い。
$は微妙。規格外だけどたまに使う。#はプリプロセスしてれば使うなけど標準ではないな。
681デフォルトの名無しさん:2009/11/06(金) 08:04:00
だからEBCDICだと
682デフォルトの名無しさん:2009/11/06(金) 11:19:25
>>680
ASCIIコードを使ってるのは、ミニコンとかWSとかパソコンとかしょぼいマシンだけだったんだよ。
F90の規格に、やたらと固有文字コードとASCIIコード変換とかあるのはそのため。
小文字が端末から使えないことも多かったし。

数値フォーマットもバラバラだったから、数値の基数や有効ビット数を尋ねる関数もそろってる。

683デフォルトの名無しさん:2009/11/06(金) 12:09:53
>>682
System/360にもASCIIとの切り替えスイッチは付いてたんだけどなw
684デフォルトの名無しさん:2009/11/06(金) 12:19:22
>>683
そうなのかwww


685デフォルトの名無しさん:2009/11/07(土) 02:57:41
ぱっとキーボードをみて・・・必須なのは
0-9 A-Z .,()=+-*/'
だけか。見落としなければ46文字。Spaceが必須でないところがなんともイカす。
使われる文字数が少ないのはパンチカード時代があるからだろうな。
Viで編集しやすいわけだw
686デフォルトの名無しさん:2009/11/07(土) 08:52:27
C言語だってパンチカード時代に設計されたんだよ
scanf()なんてあれはパンチカード時代の名残
とにかくタイプ量を減らしたくて多くの予約語を演算子に変えた
687デフォルトの名無しさん:2009/11/07(土) 10:01:38
それは違う。printfやscanfは、Fortran用のランタイムルーチンを流用したなごり。
C言語の発祥は主にミニコン文化圏で、パンチカードじゃなく、紙テープとテレタイプが主流。
記号だってEBCDICにないものを多用するし(そのせいでトライグラフなんてものも
できたりしたがw)
688デフォルトの名無しさん:2009/11/09(月) 03:54:20
creat(笑)
689デフォルトの名無しさん:2009/11/09(月) 09:36:45
>>685
機能の代替がない、という点では:の添字範囲指定もかな、ってあれ
1以外から範囲指定可なのはF77でも出来たっけ?
690デフォルトの名無しさん:2009/11/09(月) 09:37:57
標準の機能として、という意味ね。
691デフォルトの名無しさん:2009/11/09(月) 23:59:27
>>689
77では配列の宣言のところだけだったか、文字列では部分文字列の指定に使えた。
あとフォーマットでもコロンが使えたはず。
692デフォルトの名無しさん:2009/11/11(水) 02:45:21
character*7 mojiretu
mojiretu = 'smtwtfs'
write(*,*) mojiretu
mojiretu(2:6) = 'sssss'
write(*,*) mojiretu

みたいな使い方の事だね。規格が30年くらい前だけど、その後のベクトル表現の匂いがする。
そういう文字列取扱いの需要があったからだろうけど、先をいってたんだな・・・たぶん。

フォーマット中の例が思いつかなかった。
693デフォルトの名無しさん:2009/11/30(月) 16:44:28
今後GPGPU系のスパコンが主流になってきたら、いっそCに乗り換えたほうがいいのかな・・・
もうしばらくは様子見だけど

そういえば、CUDAが徐々にFortranに対応してきてるようだけど、使ってる人いる?
694デフォルトの名無しさん:2009/12/01(火) 00:04:39
>>693
PGI が CUDA 対応 Fortran2003 を出荷し始めたみたいだけど、誰か使ってないのかな?

GPGPU も昔のアレイプロセッサとよく似ているから、すぐ廃れて終わるとか言う話も聞いて
なんなんだかなーw 
695デフォルトの名無しさん:2009/12/01(火) 21:46:47
PGI頑張ってるよな
まぁ、うまくいけばIntelの二番煎じなポジションから脱却できるしな
696デフォルトの名無しさん:2009/12/14(月) 01:04:11
フォートランを研究室で指定されて使おうとしてるんですけど
>>2
http://www.salfordsoftware.co.uk/
のどこからダウンロードするのかみつからないんですけど教えてくれますか?お願いします
697696:2009/12/14(月) 01:05:55
間違えました
すみません
698デフォルトの名無しさん:2009/12/17(木) 14:58:51
http://www.ftc.gov/opa/2009/12/intel.shtm
Intel secretly redesigned key software, known as a compiler,
in a way that deliberately stunted the performance of competitors’CPU chips.

だってさ
699デフォルトの名無しさん:2009/12/18(金) 00:24:24
いろいろ考えるもんだねー
700デフォルトの名無しさん:2009/12/18(金) 22:51:01
Fujitsu製Fortran&C Package Windows版が製造・発売中止となったため、
今後Windows XPの提供が終了すると新しいPCに使用出来なくなるので
新たなコンパイラーと数値計算ライブラリを探しています。
どなたかお勧めのメーカを教えてください。
条件は、Windows Vista & 7上で動作するコンパイラーとライブラリで
リーズナブルなもの。
パソコンは私1人で70台くらい使っています。
(Fujitsu製のライセンスは使用する人数にかかり、
PCの台数には関係なかったので重宝していたのですが。)
よろしくお願いします。
701デフォルトの名無しさん:2009/12/18(金) 23:31:05
富士通がPC用Fortranやめるなら、OEMやってるアメリカのLaheyはどうすんだろ?
702デフォルトの名無しさん:2009/12/19(土) 15:46:30
>>698
HPCが盛んになりつつある時代にこんなことやってたら
某機関に目を付けられて即死なんじゃw
703デフォルトの名無しさん:2009/12/20(日) 05:34:39
某機関とは話をつけてからやらかしたのではw
704デフォルトの名無しさん:2009/12/21(月) 18:27:54
FORTRAN使いなんかホントにいるのかいな・・・
705デフォルトの名無しさん:2009/12/22(火) 10:23:48
cygwin、MPICH2でCompaq Visual fortran 6.6 を動作させる方法があれば教えてください。
MPICHのインストール時に set F90=~/Microsoft Visual Studio/DF98/Bin/f90
としてみたのですが、認識しませんでした。
706デフォルトの名無しさん:2009/12/26(土) 10:50:24
あっそう
707デフォルトの名無しさん:2010/03/28(日) 18:31:28
今,Intel Visual Fortran と PGI Visual Fortran のどちらを買おうか迷っています。
皆さんのお勧めはどちらですか?

実行速度とか,GPGPUとか,並列化とか,Visual Studio 2008 に統合してコーディングしているときの
使い勝手の良さとか,コンパイラの厳密さとか(← 変数宣言部で配列を a(3) と宣言しているのに,
実行部で a(4) = 1 と書いたとき,IVF のコンパイラはエラーを出してくれたけど,PVF のほうは
エラーなしでコンパイルが成功してしまった),その他色々な面でどうでしょう。
708デフォルトの名無しさん:2010/03/28(日) 21:32:36
個人的には PGI はあまり信用していない
つか、Windows 環境で Fortran が信用できていない
# Intel は, まぁ, ましな部類だと思う
709デフォルトの名無しさん:2010/03/29(月) 00:21:06
>>707
>実行部で a(4) = 1 と書いたとき,IVF のコンパイラはエラーを出してくれたけど,PVF のほうは
>エラーなしでコンパイルが成功してしまった),その他色々な面でどうでしょう。
66時代は整合配列が未整備だったので、サブルーチンとかの先では配列サイズを適当に固定して
はみ出して使うことがよくあった。歴史的事情から一概にエラーにするわけにもいかんのよ。

コンパイラのオプションとかで厳格な判断ができるはずだと思うから、調べてみてちょ。
IntelFortranにも90,95,2003毎の規格違反警告オプションが有る。

そういえば最近のPGI Fortranは米国大学研究機関に所属であれば、Win用が無償で使えたような?
キャンペーンはもう終わったかもしれないが。

710デフォルトの名無しさん:2010/03/29(月) 03:32:41
IVF って GPGPU ができるのですか?
711デフォルトの名無しさん:2010/03/29(月) 12:08:17
>>710
できない。

CUDAのAPIをCALLするという意味でならできなくも無い。
Fortranのラッパーを書くオープンソースなプロジェクトが動いていたはず。
GPU側で実行する部分は無論Cで用意するのだとおもうが。

712707, 710:2010/03/29(月) 21:38:52
>>708-709 >>711
レスありがとうございました。参考になりました。
713デフォルトの名無しさん:2010/03/30(火) 03:50:29
>>707 コンパイラの厳密さとか(← 変数宣言部で配列を a(3) と宣言しているのに,実行部で a(4) = 1

インテルのは添字範囲チェックが甘いよね。柔軟ともいえるけど・・・。
コンパイル時の警告のよさ?では gfortran -Wall あたりがいちばんかなぁ
以前はDEC系でいいのがあったんだけどね。さすがに今では。
714デフォルトの名無しさん:2010/03/31(水) 06:17:02
(メイン階層で)
real a(10)
call hoge(a)

subroutine hoge(a)
real a(2)
a(10) = 1.0

というのがあって、スルーする大人がインテル。実際メイン階層では配列a(10)の内容に問題ないわけだ。
文句いうのがGfortranやFujitsuやPGIやIBMやNEC
715デフォルトの名無しさん:2010/03/31(水) 16:56:36
>>714
そのsubroutineはモジュールじゃない、普通の外部サブルーチンという前提だよね
a(11)=1.0をやるとエラーになる?
716デフォルトの名無しさん:2010/04/01(木) 02:37:19
>>715
そ、ただのSubroutine.
Module は値の追跡が面倒臭いし、コンパイル時に順番が関係するし、
Commonと同じような奇妙な振舞をする事もあるので自分では使わない。なれると便利らしいけどね。

a(11)=1.0
そのものにたいしては、コンパイル・実行時ともに文句をいわなかった。(以下ぜんぶIntel.他のはしらない)。
でも実行時にはcall hoge()のあとに a 以外の変数が壊れたりw、 hoge() 内で Invalid なんたららが
でたり・・コンパイルオプションでも変わる。何事もなかったかのように実行終了することもあるw
Intel Fortran は速度的には良いコンパイラだとおもうけど、
開発中に使うには危険な香りがするのでふだんはgfortran。
Intel のでも Visual がつく方はまだいいのかなあ? HPはもうDEC系譜のFortranは終了だよね。
717デフォルトの名無しさん:2010/04/01(木) 11:50:28
>>716
MODULEつかえよw
型チェックとか便利だろ。
場合によっては最適化度もあがるはず。

まぁカスケード型のリコンパイルの嵐が起きるのがウザイのはわかるが、
あれもF2008でSUBMODULEが導入されてなんとかなる。
718デフォルトの名無しさん:2010/04/01(木) 13:34:16
2008興味あるけど、使ってる人が周りに誰もいない・・・
というかググってもあんま情報ない気が
どこで勉強すればいいの?
719デフォルトの名無しさん:2010/04/01(木) 14:28:48
716 の添字範囲うっかりさんはIntelだけの話ね。
他のはコンパイルエラーでそれ以上進めなかったから。

>>717
ある程度なれてマイModuleつくるともう戻れないくらいイイらしいね。
麻薬のようにもう抜けれなくなる、わけではないのだろうけどw
でも不慣れなときにコンパイルするだけにかなりもがいた
つらい経験をしてしまったので敬遠中。でもそのうち使うと思うよ!
>>718
F2008って規格の部分だけでも読めないのかな?
ベンダが対応するとかしないと商業レベルの本は出ないと思うので
(出ても日本語のがでるのかはあやしいが)せめて予習wくらいはしておきたい。
720デフォルトの名無しさん:2010/04/01(木) 16:57:44
>>719
初心者だけど動的割付配列のためにモジュール使ってます
やっぱりコンパイルエラーやらは多いですね
721デフォルトの名無しさん:2010/04/02(金) 01:32:14
>>718
それはたぶんF2003。
まだ完全対応コンパイラがCRAYしか出してない。
勉強の手始めは、PDF直リンだが
ttp://www.itscj.ipsj.or.jp/forum/forum2008SC22fortran/Fortran20032008.pdf 
The New Features of Fortran 2003
ttp://www.ipc.bas.bg/PPages/Bogi/newFortran2003.pdf

F2003は英文なら、なんぼか教科書もではじめている。しかし2003部分は1章程度だったりでいまいち。


F2008は
The new features of Fortran 2008
ftp://ftp.nag.co.uk/sc22wg5/N1701-N1750/N1729.pdf
こっちはまだ規格の最終ドラフトができた段階で、正式規格ではない。最終ドラフトはただで見れる。
ここで↓
ISO規格の議論をしている本家
ttp://www.nag.co.uk/SC22WG5/
722デフォルトの名無しさん:2010/04/02(金) 08:05:25
ナグさんちが本家なのか
723デフォルトの名無しさん:2010/04/02(金) 09:13:00
NAGが本家なのかよw
724デフォルトの名無しさん:2010/04/02(金) 10:58:31
本家っつっても書記だけど、まぁ議事録的情報はここに集約されてるな。
725デフォルトの名無しさん:2010/04/02(金) 12:15:07
softekみたいなもんか?w
726デフォルトの名無しさん:2010/04/06(火) 06:01:13
教えて頂きたいのですが、
2次元配列の一部分だけをサブルーチンに送った場合、その部分的な要素だけを
繋げた別の配列が一時的に作られて処理をされるのでしょうか?

例えば、主プログラム冒頭で
integer :: x(10 , 20)
とした場合、メモリ上に10 * 20 の配列が出来ますよね?
これを call hoge( x(3:8 , 12:19) , ... ) とすると、
6 * 8 の一時的な x’ が別途メモリ上に作られたうえで
それがサブルーチンへ送られるのでしょうか?

膨大な配列を扱うので、なるべく効率的なプログラムを書きたいのです.
勉強し始めの者なので、トンチンカンなことを言っていたら恐縮です...
727デフォルトの名無しさん:2010/04/06(火) 10:22:37
>>726
そういう連続していないのはcopy in - copy outで中間のテンポラリ配列が暗黙に作られる。

一次元に還元したときに連続している場合は、コピーを作るかどうかは場合によると思う。


728デフォルトの名無しさん:2010/04/06(火) 17:30:33
データがシーケンシャルだって指示するオプションあったような?
いずれにしても、call hoge( x(3:8 , 12:19) , ... ) だと「一次元に還元したときに連続」していないから、コピーは避けられないだろうな
729デフォルトの名無しさん:2010/04/06(火) 17:55:20
うひょー!Fortran!!11
730デフォルトの名無しさん:2010/04/06(火) 18:10:43
Fortran2011の策定が始まったのかと思った
紛らわしいぞw>>729
731726:2010/04/07(水) 07:28:05
>>727, 728
なるほど。どうもありがとうございます。
 
余計なメモリを消費させないためには、
call hoge( x(3:8 , 12:19) , ... ) は避け、
call hoge2( x, 3, 8, 12, 19, ...) などとして、サブルーチンへは x のまま渡して
実際に操作したい配列要素番号も別に指定するといった方法が良いって理解でよいでしょうか

もう一点質問があるのですが、
call hoge2( x, ... ) と call hoge2( x(:), ... ) は全く同じものでしょうか?
コンパイラーによりけりですか?
732デフォルトの名無しさん:2010/04/07(水) 19:52:50
>>731
あくまで自分の理解だけど
>理解でよいでしょうか
yes
>全く同じものでしょうか?
yes
733デフォルトの名無しさん:2010/04/08(木) 00:15:00
はとやまwwwwwwwww

天然バカwwww

734733:2010/04/08(木) 00:16:10
すまん、笑いすぎて、誤爆したwwwwww


★「政治家がばかでは国もたぬ」=公務員研修の訓示で鳩山首相

・鳩山由紀夫首相は7日の国家公務員合同初任研修開講式で訓示し、入省したばかりの
 新人を鼓舞したが、その中で「政治家がばか者の集団では(国は)もたない」などと
 脱線気味に発言する場面があった。

 首相は弟である鳩山邦夫元総務相が政治家を志した際、大蔵事務次官を経て
 政界入りした父威一郎元外相が「政治家なんてものは物ごいをする情けないばか者だ」と
 反対した話を紹介。「父親は役人だったことに誇りを感じていた」と語る一方で、
 「トップの首相が大ばか者であれば、そんな国がもつわけがない」と繰り返した。

 首相としては、政治主導への決意を示しつつ鳩山内閣の優秀さを強調したかったようだが、
 指導力不足や自らの発言をめぐる迷走が指摘されているだけに、新人公務員も複雑な
 表情だった。
 http://www.jiji.com/jc/c?g=pol_30&k=2010040700743
735デフォルトの名無しさん:2010/04/08(木) 08:05:38
スレタイも読めないバカ
736デフォルトの名無しさん:2010/04/08(木) 11:25:29
>>735
鳩山さんこそスレタイ見てください。
737デフォルトの名無しさん:2010/04/08(木) 17:04:56
>>736
バカ
738デフォルトの名無しさん:2010/04/09(金) 23:07:01
このスレ2000でも90でも77でも66でもなく、未だにIVかよ。
739デフォルトの名無しさん:2010/04/17(土) 01:15:02
    LOOPY = 737
    PRINT *, LOOPY
END
740デフォルトの名無しさん:2010/06/19(土) 00:14:19
test
741デフォルトの名無しさん:2010/07/05(月) 17:00:13
コンパイラのFortran2008対応時期っていつ頃になるでしょうかね?
GNU, Intel, PGIなどのメジャー所でいいので、ざっくり予想してくれませんか?
742デフォルトの名無しさん:2010/07/06(火) 00:14:50
>>741
F2003すらまだだというのにF2008を予想せよとはきつい。
そもそもまだISOのFinalDraftの段階で、正式な規格にすらなっていない。
ジェッターマルスの時代*1を超えて、ケムール人*2の時代くらいじゃないか?

*1 ttp://www.youtube.com/watch?v=Xpxb55WHx2s
*2 ttp://www.youtube.com/watch?v=S6q-lbd6WVM
743デフォルトの名無しさん:2010/07/06(火) 15:10:37
>>742
Intel Fortranを調べてみましたが、確かに2003は完全対応してないですね。
コンパイラの対応ってスピード的にもこんなもんなんですかね?

あと、ジェッターマルスっていうのは鉄腕アトムのリメイクなんですね。
40後半とお見受けしました。
744デフォルトの名無しさん:2010/07/08(木) 01:29:34
>>743
Intel掲示板のSteve Lionelのカキコでは、IVFの2003完全対応はv12.0になってからということだった気がします。
(ソースカキコが見つからないw) 今のところ新機能のうちでは、parametric type が全く手付かずなので、
今年中は完全対応は無理かな?

ただ規格への対応スピードはこんなもんじゃないですかね。C99なんかも10年くらいかかっていますし。

ACM SIGPLAN Fortran Forumに、コンパイラのF2003対応度の記事が毎号載っていますので、御参考までに。
ttp://portal.acm.org/browse_dl.cfm?coll=&dl=ACM&idx=J286&linked=1&part=newsletter
有料ですが・・・

ジェッターマルスは、著作権の関係で手塚治虫自身が作ったアトムのパチモンで、リメイクとはちと違うんです。
パチモンらしく、なんとも冴えない・・・
745デフォルトの名無しさん:2010/07/08(木) 13:03:50
VisualStudio2010ってもう出てるのね
IntelFortranには今度こそIntellisenseに対応してもらいたいものだ
746デフォルトの名無しさん:2010/07/08(木) 13:13:33
質問させて下さい。
64*64*128元の連立方程式Ax=bを解くためにmklを使っています。

係数行列の因子分解までは並列化して計算されるのですが、
求解の部分ではCPU使用率が100%になって並列化されません。

解を求めるところをコメントアウトするとCPU使用率が800%になるので
求解の部分で並列化されていないのは確かだと思います。

pardiso、dssを試しましたが、両方とも同じでした。

抽象的な質問で申し訳ないですが、どうして上のようなことが起きるのでしょうか?
そもそも求解の部分は並列化されていないのでしょうか

mklのバージョンは
Math Kernel Library 10.1 for Mac OS* X
ifortのバージョンは
ifort (IFORT) 11.0 20081105
計算機は
Mac OS X 10.4.11
Quad-Core Intel Xeon 3.0GHz x2
コンパイルオプションは
-ipo -O2 -unroll2 -openmp -openmp-report2 -lmkl_solver_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread
pardisoでは
export OMP_NUM_THREADS=8 とした上で、iparm(1)=0,iparm(3)=8としています。

よろしくお願いします。
747デフォルトの名無しさん:2010/07/08(木) 14:24:28
64x64x128
よりほんのり大きい数字の配列にして・・・・とか、かな?あてずっぽ。

MKL って最近使ってないけど同じく OpenMP で扱う予定なので・・・
偉い人の出現を一緒に待とうねw
748デフォルトの名無しさん:2010/07/08(木) 14:26:07
と思ったけど、
-unroll2

-unroll0 (アンローリング Off)
-unroll (適当なデフォ値、たぶん8)
にしても同じかな?
749デフォルトの名無しさん:2010/07/08(木) 14:29:52
さらに・・・
Inter-procedural Optimizer を切るか、
もし743さんの作ったソースが一個だけなら、
-ip にして自作ソース内だけにInline 最適化を控える・・とか。

・・・でも100%きっちりで止まってるのなら、あまり関係なさそうだw
750デフォルトの名無しさん:2010/07/08(木) 15:43:18
とうか何で解いてるの?
普通は行列のタイプ(粗密とか)で選ぶと思うけど
751デフォルトの名無しさん:2010/07/08(木) 19:29:00
レスありがとうございます

>>750
対象としている行列は疎行列です。
使ったのはmklの中にある
pardiso(並列化対応直接法スパース ・ ソルバー)と
dss(直接法スパース ソルバー)です。

>>747-750
すべて試してみましたが解決はできませんでした。。。
あと、ソースは複数あります。
752デフォルトの名無しさん:2010/07/09(金) 00:21:22
>>746
元がスパースでも、LU(あるいはコレスキー)分解した時に出る三角行列が余りスパースにならないこともあるが、
その場合paradisoはメモリー上に行列要素を置かないで、Diskに書き出して計算するようだ(Out Of Coreモード)。
この時はシングルスレッドで動くらし。

そういう状況かも?

小さめの行列で試してみるか、OOCにならないようにオプションを変えてみたら(メモリーが足りればだけど
Dual Xeonなら結構積んでんじゃないの?)。

直接法は使ったことないので、外してたらごめんw
753デフォルトの名無しさん:2010/07/09(金) 11:36:21
OOCモードって普通のスワップとは違くて、つまりちゃんとOOC用の処理をしてるんだよね?
でもそれって苦肉の策というか、結局スワップとほとんど変わらんくらい時間がかかる
イメージがあるんだけど、意外とそうでもないのかな?

自分は基本インコアに収まらないようなら素直に諦めてますがw
754デフォルトの名無しさん:2010/07/09(金) 11:57:52
>>753
外部記憶とのI/Oで地獄の遅さだろう。
755デフォルトの名無しさん:2010/07/09(金) 11:59:10
>>746 計算機は Mac OS X 10.4.11 Quad-Core Intel Xeon 3.0GHz x2

いいな。話それちゃうけど、いくらでした?
756デフォルトの名無しさん:2010/07/09(金) 12:18:47
Macはもう終了らしいよな
ジョブズの禿に踊らされた人カワイソス
757デフォルトの名無しさん:2010/07/09(金) 22:53:53
レスありがとうございます。

>>752
ttp://www.intel.com/software/products/mkl/docs/webhelp/ssr/functn_pardiso.html
私が使っているバージョンのmklのマニュアルにはout of coreモードについては書かれていませんでした。
上のサイトでは、デフォルトでin core モードになっているという様に書かれているので違う気がします。すいません


解決方法は分からないのですが、なんとなく原因がつかめてきました。
どうやらmklとは別の部分を、OpenMPを使って並列化をしていることが原因のようです。

mklで求解を行ったすぐ後のdoループをOpenMPで並列化しているのですが、
コンパイルオプションの-openmp -openmp-report2をコメントアウトしてmakeすると
求解の部分が並列化されるのが確認できました。

現状では、求解もその後のループも重いので、どちらも並列化できないとボトルネックになってしまいます。
OpenMPの代わりにMPIを使うことで、mklを騙せるのではと考えていますが、これだと8コアを使いきれなので困ってしまいます。

なにかよい方法があれば、どなたかよろしくお願いします。
758デフォルトの名無しさん:2010/07/09(金) 22:55:05
一応、プログラムの内容をもう少し具体的に書かせてください。

連立方程式をAx=bとして

Aを求めて、因子分解までする(mkl)

bを決める。

do
Aとbを使ってxを求める(mkl)

!$OMP parallel do
do
求めたxを使って新しいbを求める。
enddo
!$omp end parallel do
enddo


>>755
管理者に聞いたら60万くらいだそうです。
759デフォルトの名無しさん:2010/07/10(土) 00:16:30
>>758
2重DO-LOOPに入ってるからでないかい。
外のLOOPをGOTOにして味噌パン。
760名無しさん@そうだ選挙に行こう:2010/07/11(日) 04:23:57
Krylov?

do
!$OMP parallel
求めたxを使って新しいbを求める。
!$omp end parallel
enddo

と、do を抜いた OMP directive を MKL ルーチンの前後において
(do-loop の内側に持ち込んで)みて・・・もあんまり変わらんか、むしろ悪くなるかもしれんが・・。
761名無しさん@そうだ選挙に行こう:2010/07/11(日) 18:42:36
OpenMPと自動並列化の違いがよく分からないんですが、基本同じものですか?
762デフォルトの名無しさん:2010/07/12(月) 02:56:37
自動並列化はベンダごとに違うけど・・まあだいたいはOpenMPと同じようなものとおもっていいよ。
並列能率は一般的には手書きOpenMPより格段に劣るからあまり期待しないように。
763デフォルトの名無しさん:2010/07/14(水) 13:01:32
>>762
ありがとうございます。昨今、OpenMPとMPIのハイブリッドがイイ!って
方々で言われていますが、2つ考えるのは('A`)じゃないですか?
ノード間は自前でMPIを頑張るとしても、ノード内は勝手に
自動で最適化&並列化してほしいなと・・・そんな日は来ないんですかね?
764デフォルトの名無しさん:2010/07/14(水) 14:59:16
>>763
Earth Sim はノード間をMPIでかいて内部は自動並列らしいね
(使ったことないけど・・)。日電頑張った。

ふつうみかける8コアマシンをたくさんつないだ・・とかだと
ハイブリッドよりはMPIで全部書いてもあまりかわらないとも聞くね。
まあ書き方次第でもあるのだろうけど。
できれば最内ループの始まりと終わりを固定変数で
書いておかないとUnrolling が抑制されたりするから、
コンパイラ毎にいろいろ注意ね・・
粒度(一コア担当範囲の幅)にもよるんだろうけど。
ま~MPI使いこなせるならMPI一本でいいとおもうよ。
765デフォルトの名無しさん:2010/07/14(水) 15:29:04
そろそろprintf "%04d" 1 みたいな感じでゼロパディングするフォーマットを入れてくれ
ニーズあると思うが
766デフォルトの名無しさん:2010/07/14(水) 22:41:52
I6.6とか
767デフォルトの名無しさん:2010/07/14(水) 23:11:28
>>766
それで正解だよね?
768デフォルトの名無しさん:2010/07/15(木) 00:47:41
>>767
うむ。正解。
>>765は20年前の昭和の知識しか持っていない。
769デフォルトの名無しさん:2010/07/15(木) 01:32:20
すいません、FORTRAN90でブラック・ジャックのプログラムを組んでください。
770デフォルトの名無しさん:2010/07/15(木) 01:55:32
>>765
わらた
771デフォルトの名無しさん:2010/07/15(木) 02:35:15
>>769
ルールを定式化して教えろ。
772デフォルトの名無しさん:2010/07/15(木) 09:06:33
>>768
20年前は平成だYO!
773765:2010/07/15(木) 09:32:32
>>766-768
失礼しますた
774デフォルトの名無しさん:2010/07/15(木) 11:11:35
すいません。定式化は僕の頭じゃ無理なのでルールだけ…ルールはお互いがトランプを引いていって、合計点数が21点を越えずにプレイヤーがディーラーより高い点を競うゲームです。ちなみに21点を越えると負け決定です。
7751:2010/07/16(金) 03:36:52
>>774
コンピュータの思考まだ無し。

MODULE m_bj
IMPLICIT NONE
TYPE :: t_shuff
REAL :: x
INTEGER :: i
END TYPE t_shuff
INTEGER, SAVE :: icard(52), ipos, icards_mine(20) = 0, icards_dealer(20) = 0, ip_mine = 0, ip_dealer = 0
CONTAINS
SUBROUTINE shuffle()
TYPE (t_shuff) :: card(SIZE(icard))
INTEGER :: i
CALL RANDOM_SEED()
CALL RANDOM_NUMBER(card(:)%x)
card(:)%i = (/ (i, i = 1, SIZE(icard)) /)
card = qsort(card)
icard = card(:)%i
END SUBROUTINE shuffle

RECURSIVE FUNCTION qsort(c) RESULT(res)
TYPE (t_shuff), INTENT(IN) :: c(:)
TYPE (t_shuff) :: res(SIZE(c))
IF (SIZE(c) > 1) THEN
res = (/ qsort( PACK(c(2:), c(2:)%x < c(1)%x) ), c(1), qsort( PACK(c(2:), c(2:)%x >= c(1)%x) ) /)
ELSE
res = c
END IF
END FUNCTION qsort
7762:2010/07/16(金) 03:38:07
CHARACTER(10) FUNCTION to_card(k)
INTEGER, INTENT(IN) :: k
CHARACTER(5) :: suit( 4) = (/'Spade', 'Heart', 'Club ', 'Diamd'/)
CHARACTER(2) :: rank(13) = (/' A', ' 2', ' 3', ' 4', ' 5', ' 6', ' 7', ' 8', ' 9', '10', ' J', ' Q', ' K'/)
INTEGER :: k1, k2
k1 = (k - 1) / 13 + 1
k2 = MOD(k - 1, 13) + 1
to_card = suit(k1) // ' ' // rank(k2)
END FUNCTION to_card

INTEGER FUNCTION icount_sum(icards)
INTEGER, INTENT(IN) :: icards(:)
INTEGER :: i, k, nace, isum
nace = 0
isum = 0
DO i = 1, SIZE(icards)
isum = isum + num_card(icards(i))
IF (num_card(icards(i)) == 11) nace = nace + 1
END DO
DO i = 1, nace
IF (isum > 21) isum = isum - 10
END DO
icount_sum = isum
END FUNCTION icount_sum

INTEGER FUNCTION num_card(k)
INTEGER, INTENT(IN) :: k
SELECT CASE(MOD(k - 1, 13) + 1)
CASE (1)
num_card = 11
CASE (2:10)
num_card = MOD(k - 1, 13) + 1
7773:2010/07/16(金) 03:38:48
CASE (11:13)
num_card = 10
END SELECT
END FUNCTION num_card

INTEGER FUNCTION idraw(n)
INTEGER, INTENT(IN OUT) :: n
n = n + 1
ipos = ipos + 1
idraw = icard(ipos)
RETURN
END FUNCTION idraw

SUBROUTINE draw(text)
CHARACTER(*), INTENT(IN) :: text
SELECT CASE(text)
CASE('dealer')
icards_dealer(ip_dealer) = idraw(ip_dealer)
CASE('me')
icards_mine (ip_mine ) = idraw(ip_mine )
END SELECT
END SUBROUTINE draw

INTEGER FUNCTION iget_sum(text)
CHARACTER(*), INTENT(IN) :: text
SELECT CASE(text)
CASE('dealer')
iget_sum = icount_sum(icards_dealer(:ip_dealer))
CASE('me')
iget_sum = icount_sum(icards_mine(:ip_mine) )
END SELECT
END FUNCTION iget_sum
7784:2010/07/16(金) 03:39:35
SUBROUTINE pr_cards(text)
CHARACTER(*), INTENT(IN) :: text
INTEGER :: i
SELECT CASE(text)
CASE('dealer')
PRINT *, (to_card(icards_dealer(i)), ' ', i = 1, ip_dealer)
CASE('me')
PRINT *, (to_card(icards_mine(i) ), ' ', i = 1, ip_mine )
END SELECT
END SUBROUTINE pr_cards
END MODULE m_bj
!
PROGRAM Console2
USE m_bj
IMPLICIT NONE
INTEGER :: i, isum_me, isum_dealer
CHARACTER :: input
CALL shuffle()
CALL draw('me')
CALL draw('dealer')
CALL draw('me')
CALL draw('dealer')
DO
isum_me = iget_sum('me')
IF ( isum_me > 21) THEN
PRINT *, 'Fail!'
EXIT
END IF
CALL pr_cards('me')
PRINT *, 'sum =', isum_me
PRINT *
7795:2010/07/16(金) 03:43:46
PRINT *, 'draw or quit? (d or q)'
READ *, input
IF (input == 'q') EXIT
CALL draw('me')
END DO
PRINT *, '+++++++++++++++++++++++++++++++++'
PRINT *, 'Your cards'
CALL pr_cards('me')
PRINT *, 'sum =', isum_me
PRINT *
PRINT *, 'Dealer''s cards'
CALL pr_cards('dealer')
isum_dealer = iget_sum('dealer')
PRINT *, 'sum =', isum_dealer
IF (isum_me > isum_dealer .AND. isum_me <= 21) THEN
PRINT *, 'You win!'
ELSE
PRINT *, 'You lose!'
END IF
END PROGRAM Console2
780デフォルトの名無しさん:2010/07/22(木) 13:04:22
format記述子の実数のうち、ESとENというのがありますが、
これの倍精度版はまだ規格になっていないのでしょうか?
781デフォルトの名無しさん:2010/07/24(土) 04:35:45
>>780
誤解がある。
それらに倍精度も糞もない。
内部表現をそのフォーマットに変換するだけ。
よくマニュアルを読むべし。

例えば、単精度でも小数点以下50桁を指定すれば50桁書く。
有効数字は7~8桁しか無いが、内部表現を単に変換してなんぼでも書き出す。
782デフォルトの名無しさん:2010/07/24(土) 13:35:27
>>781
誤解してました。ありがとうございます。
783デフォルトの名無しさん:2010/07/26(月) 17:09:11
ハノイの塔のプログラムのソースを探しているんですが、どなたかご存知ですか?
784デフォルトの名無しさん:2010/07/26(月) 22:14:52
知ってるよ
785デフォルトの名無しさん:2010/07/26(月) 22:50:05
教えていただけませんか?
786デフォルトの名無しさん:2010/07/27(火) 01:16:05
>>783
"Guide to Fortran2003 Programming" W.S.Brainerd  (Springer)
の105ページに載ってる。

Google Books で当該ページが見られる。Hanoiで検索しろ。ソースコード自体は107pだ。
見た感じFortran90の範囲で書かれている。
787デフォルトの名無しさん:2010/07/27(火) 01:29:16
そういや再帰って速度的にはよろしくないって聞くなぁ
再帰を使わないアルゴリズムがあるのなら、そっちを使ったほうがいいのかな
ハノイの塔でできるかは知らないけど・・・(無理?
788デフォルトの名無しさん:2010/07/27(火) 06:52:52
> そういや再帰って速度的にはよろしくないって聞くなぁ

ほとんど迷信。
再帰で問題なのはスタックの消費とか。
789デフォルトの名無しさん:2010/07/27(火) 09:33:16
>>786
ありがとうございます。
790デフォルトの名無しさん:2010/07/27(火) 18:09:38
subroutineをcallするのって何秒くらいかかるんですか?
791デフォルトの名無しさん:2010/07/27(火) 19:30:52
誰が作った何をする subroutine なのかによる
おまえがわけも分からず作った subroutine だったら、一生帰ってこない可能性もある
792デフォルトの名無しさん:2010/07/27(火) 21:28:41
callしてから帰ってくるまでじゃなくて
callすること自体にどれくらい時間がかかるのかなぁ・・・と思ったわけです
793デフォルトの名無しさん:2010/07/27(火) 23:31:39
何秒と言われても環境によるし

コンパイラがインライン展開することもある
794デフォルトの名無しさん:2010/07/28(水) 01:06:32
>>792
>>791は文脈から質問の意味が理解出来ないアホ。
知りもしないくせに知っているとほざく>>784レベルのクズ。

>>787
>>788の言うとおり。70年代とかの言い伝えを信じているとバカをみる。
795デフォルトの名無しさん:2010/07/28(水) 01:24:04
>>787,794
recursive は新たに呼ばれるたびにメモリやL1キャッシュにコードを展開するので、
頻度次第では速度にテキメンに出るけど(ループ内で呼ぶとかw)・・
今のマシンでハノイ塔問題くらいなら気にしなくていいよ。
796デフォルトの名無しさん:2010/07/28(水) 06:56:31
> recursive は新たに呼ばれるたびにメモリやL1キャッシュにコードを展開する

そんなコンパイル技法ははつみみです。
797デフォルトの名無しさん:2010/07/28(水) 21:08:56
do i=1,100
z(i)=x(i)+y(i)
enddo
って書くのと
z(1:100)=x(1:100)+y(1:100)
って書くので計算の速さに違いはありますか?
798デフォルトの名無しさん:2010/07/28(水) 21:15:47
しょぼいコンパイラなら後者のように明示的に書く方がいいが
今時そういうのあるかなあ
799デフォルトの名無しさん:2010/07/28(水) 21:19:12
>>797
ない
800デフォルトの名無しさん:2010/07/28(水) 21:40:30
なんにせよ、そういうちょっとした書き方の違いを気にするより
アルゴリズムそのものを考えた方がいい、とか教科書に書いてないかい
801デフォルトの名無しさん:2010/07/28(水) 21:49:19
あるけれどコンパイラがなくしてくれるってことでいいですかね

あと
sum(x**2)

x(1)*x(1)+x(2)*x(2)+x(3)*x(3)
ならどっちが速いですかね
802デフォルトの名無しさん:2010/07/28(水) 21:57:42
xがx(10000)なら後者
x(3)なら同じ
803デフォルトの名無しさん:2010/07/28(水) 22:08:46
ありがとうございます
804デフォルトの名無しさん:2010/07/29(木) 00:03:04
>>801
あんた、なんか大昔の伝説みたいなのを盲信してないかい?
今はコンパイラの最適化で変わるから、環境依存でそういう質問意味ないよ。
本当の最後の最後に最適化するような所を気にしていてセンス悪すぎ。

気になるなら自分でテストプログラム書いて調べたほうが早い。己の質問の無意味さを噛みしめられる。

>>802も信用ならんw つーか今時x(1000)程度では、有意な差が出無い。

結局>>800が書いているように、適切なアルゴリズムを直截にソースコードに直したほうが、
実行時間もデバッグ時間でも結局早くなる。


QuickSortなんかも、再帰を使って素直に書いて実行すると、理論通りにO(NLogN)で動くから
再帰なしのO(N^2)なバブルソートだのよりよっぽど速いわさ。F77時代みたいに再帰無しでQuickSort
書いたら、ソースグチョグチョなイミフでバグ取り大変な上に、結局さして速くもなかろうさ。

QuickSortって再帰使えば10行だぜ。問題になるのはスタックオーバーフローだけ。

RECURSIVE FUNCTION qsort(x) RESULT(res)
REAL, INTENT(IN) :: x(:)
REAL :: res( SIZE(x) )
IF ( SIZE(x) > 1 ) THEN
res = (/ qsort(PACK( x(2:), x(2:) > x(1) )), x(1), qsort(PACK( x(2:), x(2:) <= x(1) )) /)
ELSE
res = x
END IF
RETURN
END FUNCTION qsort
805デフォルトの名無しさん:2010/07/29(木) 04:08:23
大昔だとすぐにStack 溢れたものだけど、今は気にしても。>>788,795 みたいに
Stack 展開のロスもそれほどでもないし。というかここが気になるというのはやりかたがまずい。

>>804 のとおり細かい最適化はベンダ任せでいいと思うよ。
unrolling やらいろいろ今のコンパイラはするもんね。
CPU メーカの作るコンパイラ(Intel とか・・Fujitsu は
SPARC 以外でも良好で好きだけど高けぇ)は特に。

gfortran はどちらかというと違うプラットホームでも同じ結果・使い心地に、に重点があるからか
その点ではだいぶ劣るけど、便利だし・・・タダなのがいい!
806デフォルトの名無しさん:2010/07/29(木) 04:25:19
Intel Fortran だと、9と11でまったく同じコード
(CPU最適化を /QxW あたりで古い世代のCPUに揃えて)とマシンでも
実効速度が2~3割はふつうに違うので・・・個人が「書き方」でなんとか
最適化しようという努力はあまり意味が無いのが実感できる。
807デフォルトの名無しさん:2010/08/09(月) 16:22:34
FortranとCどちらが良いかってのはある意味永遠のテーマかもしれんけど、
両者の総合的な善し悪しをきちんと整理して理解するには、やっぱ自分で
両方やらなきゃ駄目なんかな…。

研究者とか業界のリーダー的立場の人はこの辺をはっきり明らかにして
くれると助かるんだけどなぁ。もっと言えば、科学技術数値計算コードは
どのように開発すべきか、みたいな指針を示してくれると実にありがたい話
なんだけど、そういう動きってあんまりないような…。
808デフォルトの名無しさん:2010/08/11(水) 01:00:21
めんどうだもん
809デフォルトの名無しさん:2010/08/11(水) 14:53:17
物理系の年配の人達はFORTRANしか知らないし、またFORTRANが最速
と信じているから、Cとかには全然興味ないだろうね。

大学の物理系の研究室の教授はFORTRANしかわからないから、学生が
CやC++で数値計算プログラムを作成すると不機嫌になる。結局、そこの
研究室の学生達はFORTRANでプログラムを作ることになる。

CやC++はプリプロセッサやポストプロセッサの部分でしか出番がない
だろね。
810デフォルトの名無しさん:2010/08/11(水) 15:16:02
嫌だよFORTANなんか
811デフォルトの名無しさん:2010/08/11(水) 23:35:28
でもスパコンを使うならFortranでしょ。
この前も、スパコンの利用者のための講習で富士通やNECの人に言われた。
812デフォルトの名無しさん:2010/08/12(木) 01:30:04
スパコン向けのコンパイラ作る側としてはFortran は楽らしいね。

まあ、C と Fortran は共存しやすいし・・・
両方知ってれば何かと便利だ。面倒でもあるけど。
813デフォルトの名無しさん:2010/08/12(木) 01:45:51
仕方ねえなあFortranも文法は綺麗とは言えないが、長い間使われて来た
事から最適化技術が熟成しており、またライブラリも多数ある事から科学技術
計算にはFortran、その他のユーティリティはCのように棲み分けが出来てしまっている

しかしウィンドゥライブラリはCの方が豊富なので、>>812のいう通り共存しているのが
現実だ
C++は・・・うーん今の所Qt以外ではあまり用途がないんじゃね?
814デフォルトの名無しさん:2010/08/12(木) 12:40:02
ウィンドウライブラリって、要は可視化するってことだと思うが
cのライブラリを呼ぶこともいちおうは可能だし
既存の可視化ツール使う人はファイルをそれにコンバートすればいいし
そもそも可視化なんていらん、って人もいるし

棲み分けが出来てていいんじゃまいかと
というか、進化が完全に止まってるのに負の遺産としていまだに残ってる言語なんてざらにあるし、
発展が続いてるだけでも相当ありがたいことだよな
Fortranは死んだとか言うやついるけど、贅沢すぎるわ
815デフォルトの名無しさん:2010/08/13(金) 00:17:08
C++も右辺値参照が普及すればちょっとは速くなるだろうが、
数値計算の並列処理による高速化はFortranの方が一歩長じているからな。


CやC++はポインタを使うからコンパイラの最適化がやりにくいし。
816デフォルトの名無しさん:2010/08/13(金) 01:42:35
>>812 C と Fortran は共存しやすいし
コンパイラやらで、
副プログラムの名前に _ がついたり付かなかったり、
Case Sensitive だったりなかったり、
整数・実数以外の変数を渡すと悶絶することがあったり・・・
でも、まあそのへんに気をつければ、2言語を混在させるのは
他の組み合わせよりかなり楽だよね。
817デフォルトの名無しさん:2010/08/13(金) 09:36:22
_が一個から二個に変更された時に変えた奴を殺してやろうかと思った。
818デフォルトの名無しさん:2010/08/13(金) 18:08:18
行列反復などの重い処理はFortran、その外側はCって感じか?
でも外側Cにしてホントにやりやすくなるのかな。いまいちピンとこない。
819デフォルトの名無しさん:2010/08/14(土) 00:29:42
入出力はCの方が楽。マトリックス構築するのも、オレにとってはCの方が楽だけど、
こっちは、FORTRANのSTRUCTUREは使用経験が無いからよくわからない。
820デフォルトの名無しさん:2010/08/14(土) 00:51:10
まあ、好きずきでいいんじゃね?
個人的には818さん方式でWrapper をC にして、が多い。
まあ、 Fortran だけで済むならわざわざ包んだりはしないけど。
821デフォルトの名無しさん:2010/08/20(金) 23:53:01
NAGのFortran入門サイトってよくまとまってて好きなんだけど、
↓のFortran2003のページってすげー辿りにくいところにあるのな
ttp://www.nag-j.co.jp/fortran/fortran2003/index.html
なんか理由があるんだろうかと勘ぐってしまうw
822デフォルトの名無しさん:2010/08/21(土) 19:55:06
変形ベッセル関数を使いたいんですけど
fortranでフリーのものってありますか?
823デフォルトの名無しさん:2010/08/23(月) 12:53:50
ジュリア集合を作りたいんですけど

c julia set
complex z,z0,c
10 read(6,*)x,y
write(6,*)'x=,y='

if(x.gt.2) go to 10
if(y.gt.2) go to 10
read(6,*)a,b
write(6,*)'a=,b='
z0=(x,y)
c=(a,b)
do n=1,100
z=z0
z=z*z+c
abs(z).lt.10
Rez=real(z)
Imz=aimag(z)
write(6,*)Re(z),Im(z)
end do
end

これだとz0=(x,y)
c=(a,b)
の部分とabs(z).lt.10
がエラーになるんですけど、どうすればいいですか?
824デフォルトの名無しさん:2010/08/24(火) 00:35:04
自由形式のfortran90のソースコードから固定形式のCOMMONブロックが入ったFORTRAN77のファイルを"include"するにはどうすればいいのでしょうか?
コンパイラーはgfortran-4.4を使っています。デフォルトで自由形式で解釈させたらコメントの"C"や継続の"&"あたりでエラー出るし、-ffixed-formオプションで固定形式としてコンパイルしても当然ダメでした。
825デフォルトの名無しさん:2010/08/24(火) 09:56:29
>>824
同じ事をいろいろ試したけど・・自分の時はどうにもダメだった。
include って機械的にファイルを挿入するだけだから・・・どうにもならんような。

偉い人の降臨を待とう。
826824:2010/08/24(火) 13:13:26
分子動力学パッケージTinkerに基づいたレプリカ交換MDのプログラムTiReXのソースコードを見てそこそこ使えそうな解決法がありました。
Tinkerは77の固定形式でTiReXは95の自由形式です。

TiReXはTinkerのライブラリとCOMMONの定義が書いてあるインクルードファイルを使います。
インクルードファイルも77の固定形式ですが、TiReXの方で固定形式でModuleを作り(incmodとします)、
自由形式のmainルーチンの中で"use incmod"とすればいけるみたいです。
827デフォルトの名無しさん:2010/08/24(火) 13:37:53
それが正解か
コンパイル時にソースが自由形式固定形式ごっちゃになってなければいいわけで
828デフォルトの名無しさん:2010/08/24(火) 22:16:44
subroutineとfunctionの違いってなんですか?

もしどちらを使っても目的が達成できるならどっちを使うべきですか?
好みで決めていいですかね?
829デフォルトの名無しさん:2010/08/25(水) 07:25:39
お好きな方で。わしは
logical function func(a,b,c...)
みたいに正常終了だったかをわかりやすくするために
教科書的にはSubroutine で書くものも
logical な関数にすることが多いけど、
別にそのスタイルを他人に押し付けるほどは便利ではないし・・。
830デフォルトの名無しさん:2010/08/25(水) 13:51:33
まぁ教科書的にはsubroutine引数にierrとかエラー用変数を入れとくんだよな

>>828
単純にfunctionなら式中に含められる点じゃないか
どちらも副プログラムだし、値を返す以外に違いは“全くない”と思ってるんだけど
もし違うなら誰か指摘してください
831デフォルトの名無しさん:2010/08/25(水) 20:01:11
sin(x)/xを計算してくれるサブルーチンってありませんか?
832831:2010/08/25(水) 21:39:29
言うの忘れてました
sin(x)/xのxが小さいところを正確に計算してくれるサブルーチンです
833デフォルトの名無しさん:2010/08/25(水) 23:39:44
>>832
あるよ。
834デフォルトの名無しさん:2010/08/26(木) 06:19:41
どこにあるか教えてもらえませんか
835デフォルトの名無しさん:2010/08/26(木) 14:58:37
sinc関数だっけそれ
数学ライブラリとかには入ってるんじゃないの?
836デフォルトの名無しさん:2010/08/30(月) 03:58:09
>830 どちらも副プログラムだし、値を返す以外に違いは“全くない”と思ってるんだけど

わしもそう思う。・・なんかあるんかな?
837デフォルトの名無しさん:2010/09/08(水) 00:57:19
>836
838デフォルトの名無しさん:2010/09/08(水) 00:59:56
>>837 ごめん、ミスった。
>>836 function内では write(*,*)ができないのが唯一の違いと思ってたぜ。
839デフォルトの名無しさん:2010/09/08(水) 09:11:11
へえ、そういう違いがあるんだ・・・
でも、自分ところの Intel Fortran (10.??)はコンパイルの時に文句いってこないし、
ちゃんと無書式標準出力がはたらくよ。規格外なんかな?
840デフォルトの名無しさん:2010/09/09(木) 10:17:06
>>839 うーん、勘違いしてました。
write(*,*) "foo",func

function func()
func = 0.d0
write(*,*) "bar"
end function
とするとrecursive I/O errorがでるので駄目。
というのを脳内変換して、function内でwrite文が使えないという脳内ルールにしてました。
すみません。 subroutineではありえないこういうケースもあるよ、ということで...
841デフォルトの名無しさん:2010/09/10(金) 01:41:21
write(*,*) "foo",func
function func()

なるほど!
たしかにこれだと関数内I/O が引っ掛かるね。
おもしろい例だ。
842デフォルトの名無しさん:2010/09/10(金) 17:56:53
あ、ほんとだ。
ついsubroutineと同じ感覚でこの手のエラー用出力をやりがちだけど、気を付けなきゃw
本来ならエラー時も引数で対処すべきかもしれんけど、出力にこだわるならwirte(0,*)でもいいか。
かち合わなければいいわけで。

ちなみに write(*,*) "foo",func は正しくは func() だよね。
というか func のままだとrecursive I/O errorが出ないんだよね。よく分からん・・・

$ cat a.f90
implicit none
real func
write(*,*) "foo",func
end
real function func
func = 0.d0
write(*,*) "bar"
end function

$ ifort a.f90 -warn ; ./a.out
foo 0.0000000E+00
843デフォルトの名無しさん:2010/09/10(金) 19:31:20
>>842
> というか func のままだとrecursive I/O errorが出ないんだよね。

そりゃ、そのプログラムだと"foo"の後に 実数変数のfunc を表示することになるからだがや。
844842:2010/09/10(金) 20:58:29
>>843
ウッハ!こりゃ恥ずかしい・・・死んできます
845デフォルトの名無しさん:2010/09/13(月) 18:10:50
>>807
気象庁のFortran 標準コーディングルール
http://www.mri-jma.go.jp/Project/mrinpd/coderule.html
846デフォルトの名無しさん:2010/10/01(金) 20:25:26
はじめまして。
今、FORTRANでF検定後にT検定、等分散ではないT検定を行うものを作ろうかと考えています。
簡単に説明しますと、2つの独立した標本の平均の差の有意さをみるものなのですが、
私はまだまだ未熟者でして、そのような似たようなプログラムソースなどあれば参考にして書きたいのですが、
ないものでしょうか?
847デフォルトの名無しさん:2010/11/01(月) 23:24:50
入出力の装置番号の範囲を教えてください
848デフォルトの名無しさん:2010/11/02(火) 05:39:04
>>847
コンパイラによるんじゃね
849デフォルトの名無しさん:2010/11/06(土) 21:10:17
再現性のないエラーのデバッグとかどうすりゃいいのよ・・・
850デフォルトの名無しさん:2010/11/06(土) 23:11:41
>849
メモリアクセス疑ったら?
配列外参照してるとか
851デフォルトの名無しさん:2010/11/07(日) 17:33:37
>>849
開発するときは-warn系と-check系のオプションを付けることを強く勧める
852デフォルトの名無しさん:2010/12/16(木) 20:39:57
くだすれの方に書いたのですが、こっちの方がふさわしい気がしたので、
教えてください。
---
Windows版のifort (Intel Visual Fortran)でプロファイルを取る方法を教えてください。

検索すると、
ifort -pg hoge.f90
./a.out
gprof ./a.out gmon.out
というのがよく掲載されているのですが、Windows版には、下記のように
-pgの対応物がないようです。

map_opts -tw -lf -opts -pg

Intel(R) Compiler option mapping tool

mapping Linux options to Windows for Fortran

'-pg' Linux option maps to
--> no equivalent Windows option found
853デフォルトの名無しさん:2010/12/16(木) 23:37:20
ーdebug かな?
デバッガはidbじゃないの?Linuxだけなんかな。
854デフォルトの名無しさん:2011/01/07(金) 20:37:23
倍精度はdouble precisionですが、4倍精度はquadruple precisionでいいかというと
そうではないようですね。一部では対応してるそうですが。
real*8や real*16、もしくはkind指定で統一したほうがいいような気がするんですが。
だいいち~precisionとか書くのは冗長すぎますよね。何でそんなふうに決まったんだか・・・。

というか自分はコンパイルオプションで-real-size 64などとして強制的に統一してます。
式の実数で「d0」などと末尾に付けないで済むし。

質問というわけではないですが、皆様どう思いますかね?
855デフォルトの名無しさん:2011/01/08(土) 02:07:10
>>854
DOUBLE PRECISION はFORTRAN66時代に導入された倍精度の正規の宣言法でこちらが本家。
REAL*8などはFORTRAN77時代に使われるようになった記法。
またKINDはFortran90で導入された記法。
あと4倍精度はFORTRAN77までは規格外の拡張。90以降でも必須ではない。
よってKINDの一つとして存在していてもかまわないが、quadruple precisionのような
新たな命令を期待するのはお門違いとなる。
なお現在ではKIND方式で統一するのがよろしいとされている。

とにかく50年分くらい時代をごっちゃにしている。古文・漢文のノリで66、77を学ぶが吉。



AUTODBLの件だが、歴史的にFORTRANではINTEGERと単精度REALのワード長が一致することが
(暗黙に?)要求されてきたので、上品ならざる振る舞いをしていることになっていることを指摘しておきたい。

私個人は好みの問題で使うも使わぬも勝手だと思うが、しばらく前に
gfortranだったかg95だかのデフォールトREALが倍精度8byteで、デフォールトINTEGERの
4バイトと一致していなかったために、外人のおっさんたちがBizzare野郎呼ばわりで糞味噌に罵しっていたw
非常識かつ破廉恥な猥褻物陳列レベルの振る舞いとさみなされたようだ。
たしかにCOMMON、EQUIVALENCE、ホレリス使いまくりの昔のプログラムには不都合極まりない。
856デフォルトの名無しさん:2011/01/10(月) 17:25:06
>>855
レスどうもです。つか、詳しすぎる・・・

そういえば、real(8)やreal*8の数字の意味(精度なのかバイト数なのかそれ以外か)が
きちんと規格で統一されていないという話を聞いたことが。
たとえばcomplexだと、普通はcomplex*8で単精度だけど実装によっては倍精度の場合もあるとか。
その辺の解決策としてkindが導入されたんだと思うんだけど、苦肉の策というか
あんまスマートじゃないような・・・。つーか、complex(kind(0d0)) とか長ったらしいよw
857デフォルトの名無しさん:2011/01/17(月) 19:56:03
Fortran90~2003の和書がろくにないので洋書を買おうかと思うんですが、何かオススメないでしょうか?
基本的なことは知ってますが、あまり深くは使ってないレベルの人間です。
これ一冊ありゃOKっていうのが理想ですが・・・

Amazon.comで以下を見つけました。お持ちの方いますか?

Fortran 95/2003 Explained, Michael Metcalf (2004年)
http://www.amazon.com/Explained-Numerical-Mathematics-Scientific-Computation/dp/0198526938

Fortran 95/2003 for Scientists & Engineers, Stephen Chapman (2007年)
http://www.amazon.com/Fortran-95-2003-Scientists-Engineers/dp/0073191574/ref=pd_sim_b_3

The Fortran 2003 Handbook, Jeanne C. Adams (2008年)
http://www.amazon.com/Fortran-2003-Handbook-Complete-Procedures/dp/1846283787
858デフォルトの名無しさん:2011/01/19(水) 00:48:47
>>857
まあ概ねアマゾンの書評と同じような感想ですが

「Fortran 95/2003 Explained」
言語リファレンス代わりに使うならこれが最適。
さすがMichael Metcalfさん。その代わりサンプルコードが少なめ。

「Fortran 95/2003 for Scientists & Engineers」
サンプルコードや演習問題が多いので具体的な使い方が理解しやすい。
ただしFortran 2003で追加された機能については解説が少なめ。
ISO_C_BINDING や IEEE_* の説明が見当たらないんですが・・・
分厚いのでリファレンス代わりにするのは少々不向き。

「The Fortran 2003 Handbook」は読んだことないのでわかりません。


「~ Explained」はF2008に対応した新しい版がもうすぐ出る・・・と思ってたら
いつの間にか発売日が7月になってるのね・・・
859857:2011/01/19(水) 12:37:23
>>858
ありがとうございます。結局全部買ってしまいそうだ・・・w

>「~ Explained」はF2008に対応した新しい版
これですね。
Modern Fortran Explained
http://www.amazon.com/Explained-Numerical-Mathematics-Scientific-Computation/dp/0199601410

というか今知ったのですが、Michael MetcalfはISOの規格メンバーなんですね。
こりゃ信頼性という意味でこの上ないですね。
860デフォルトの名無しさん:2011/01/20(木) 08:59:54
>>857
Google Booksなんかでわりと中身がのぞけたりする。

Guide to Fortran 2003 Programming, Walter S. Brainerd が割と入門者むけの古典的な教科書に近いと思う。
OOPとか2003固有の部分はそれほど多くなく、Fortran全般に書かれている。

Introduction to Programming with Fortran: with coverage of Fortran 90, 95, 2003 and 77,
Ian Chivers & Jane Sleightholme
これは、Fortran77あたりから拡張していった本なのですっきりしていない。あんま良くない。

Fortran 95/2003 for Scientists & Engineers, Stephen Chapman (2007年)
もってない。が上のIan Chiversの本と同じく、温泉旅館式の肥大化本だと思う。


Fortran 95/2003 Explained, Michael Metcalf (2004年)
1冊買うならこれかな?大概この本しか見ない。
ただ、入門者向きではない。>>858の書いているようにリファレンスに近い。
しかし、肝となる部分をがっちり書いているので便利。

The Fortran 2003 Handbook, Jeanne C. Adams (2008年)
FortranXX Explained よりもさらに言語規格書よりに書かれている。
これも入門者向きでない。辞書っぽい感じ。
861857:2011/01/21(金) 22:22:14
>>860
色々とありがとうございます。まずはExplainedを買ってみます。
862デフォルトの名無しさん:2011/01/28(金) 22:24:29
はい
863デフォルトの名無しさん:2011/01/30(日) 10:16:20
いいえ
864デフォルトの名無しさん:2011/01/30(日) 12:05:30
どっちだよw
865デフォルトの名無しさん:2011/02/15(火) 13:15:27
FORTRANというとcommonブロックという言葉がセットで出てくるけど
なんだろう
866デフォルトの名無しさん:2011/02/16(水) 23:21:39
Cでガーベジコレクションが出てくるのと同じだべ?
COMMONは大域変数ではなく、自由に思いのままにガーベジコレクションのできる共有地だぜ!
867デフォルトの名無しさん:2011/02/18(金) 15:02:30
以下を、
ifort -c -warn all test.f90
でコンパイルすると、Ver.10.1だとエラーが出ないが、Ver.11.1だと
test.f90(9): error #7137: Any procedure referenced in a PURE procedure, including one referenced via a defined operation or assignmnent, must be explicitly declared PURE. [PURE_FF]
xxx = pure_ff()
というエラーが出る。規格上は、(C,F77で書かれた)外部関数はpureにできない?

!test.f90
module A
interface
elemental real(8) function pure_ff()
end function
end interface
contains
pure real(8) function xxx ()
xxx = pure_ff()
xxx = pure_ff()
end function
end module

868デフォルトの名無しさん:2011/05/02(月) 15:18:06.31
macにgfortranいれて、
ターミナルから
$ gfortran hoge.for
しました。それから$ ./a.outしてみましたが、
At line 22 of file hoge.f
Fortran runtime error: No such file or directory
22行目がおかしいってことみたいです。
本来であれば、ファイル名の入力を求められるらしいです。

しらべてみたら、.forって相当古いみたいですね。固定形式だとか。
もとはwindows用に書いたらしいのですが、OSやコンパイラの仕様に依存していたりするのでしょうか?

アドバイスよろしくお願いします。割り込みすいません。
869デフォルトの名無しさん:2011/05/02(月) 23:44:21.50
コンパイラ依存は確かにある。コンパイラを変えたらコンパイルエラーとか。
OS依存も、依存するようなコードの書き方をすれば依存する。

エラーメッセージの内容は理解できているかな?hoge.fの22行目は見てみた?
分からなければ、取り合えず22行目の前後数行をここにコピペしてみたらどうだろう。
870デフォルトの名無しさん:2011/05/03(火) 12:07:16.39
ありがとうございます。書き方によっては依存するんですね。
お言葉に甘え、hoge.fの19~26行目を張らせていただきます。

19 c
20 open(7,file='con')
21 write(7,'('' input filename'')')
22 open(8,file=' ')
23 write(7,'('' output file or devicename'')')
24 open(6,file=' ')
25 call input(ipro)
26 c

エラーに関しては、そんなファイルやディレクトリは無い!って怒ってるってことでいいんでしょうか。
取り合えず、cってのが昔のコメント行であること、openとwriteがファイル操作をしようとしてるってこと、7とか8とかが装置番号と呼ばれているってことは分かります。
871デフォルトの名無しさん:2011/05/03(火) 15:37:42.14
なんじゃこりゃ?!

ファイル名の入力を求めるメッセージを、なぜ標準出力ではなくconに書き出しているのか?
標準出力として予約されている装置番号6番が、なぜファイルとしてopenされるのか?
なぜファイル名が' 'なのか?(自分で適宜書き換えろってことなのか?
それとも、file=' 'とすると、自動的にファイル名を尋ねてくれるコンパイラがあるのか?)

22、24行目のfile=' 'を自分で書き直す必要があると思う。
おそらく8番が入力データが入ったファイルで、6番が出力を書き出すファイルだろうから、適宜じぶんで書き直して。

自分なら念のため、装置番号の使われ方を調べるために"read.*8"とか"write.*6"がコード内で使われているところを検索する。
grep -ine"read.*8" ./*.for
それを頼りに、プログラムの挙動を追跡する。macでgrepって使えるのかな?
872デフォルトの名無しさん:2011/05/03(火) 15:52:24.94
>>871
>それとも、file=' 'とすると、自動的にファイル名を尋ねてくれるコンパイラがあるのか?
良く分かんないですけど多分そうだと思います。

人のPCで実行した.exeは、

マイクロソフトかな漢字変換 バージョン2.51
(C)Copyright Microsoft Corp. 1992-1993
input filename
File name missing or blank - please enter file name
UNIT 8?

ってでます。input filenameはhoge.fにありますよね。

>適宣自分で書き直して
とありますが、ファイル名だけを指定した場合、a.outのあるディレクトリにあるファイルとして読み込まれるのでしょうか?
ま、とにかくやってみます。

どうもありがとうございます!
873デフォルトの名無しさん:2011/05/03(火) 16:13:07.68
>>871
grepなるものは分かりませんが、とりあえずエディタで検索かけてみました。

現在、hoge.fはディスクトップ上にあり、コンパイル後のファイルa.outと読み込ませたいデータB1.txtもディスクトップ上にあります。

19c
20 open(7,file='con')
21 write(7,'('' input filename'')')
22 open(8,file='B1.txt')
23 write(7,'('' output file or devicename'')')
24 open(6,file='b1.out')
25 call input(ipro)
26c

に変更してみました。
結局のところ、
At line 22 of file fem3.f
Fortran runtime error: No such file or directory
とのことです。22行目から進みません。
ていうか、なぜ、input filenameってメッセージすら出ないのか。

お手上げです。
874デフォルトの名無しさん:2011/05/03(火) 17:33:23.22
そんなときは、エラーメッセージとは関係ないところが問題になっているのかも知れない。
試しにソースコードの拡張子.fを.f90にしてコンパイルしてみて。
875デフォルトの名無しさん:2011/05/03(火) 17:36:12.73
>ていうか、なぜ、input filenameってメッセージすら出ないのか。
これは、conっていうファイルに書き込まれていないかな?
デスクトップにconっていうファイルができていると思う。
876デフォルトの名無しさん:2011/05/03(火) 17:56:02.74
>>874
.f90にしてコンパイルしてみました。結局エラーメッセージの嵐。
.fではcとすると、c言語でいう//になるみたいですが、.f90ではならないみたいです。fixcomという.fを.f90に変換するプログラムを見つけたので変換し、コンパイルしてみましたが、結果は変わらず。
At line 22 of file hoge.f90
Fortran runtime error: No such file or directory
ちなみに、変換後のコードは、ぱっと見、cを!に置き換えているだけみたいでした。

>>875
おっしゃるとおり、conってファイルができてました。
装置番号を6にかえてみましたが、ターミナルには出力されず、conってファイルができます。
877デフォルトの名無しさん:2011/05/04(水) 10:14:28.68
>>876
プログラムが極端に長くないならここに貼り付けちゃった方が早いかもよ
1行目から30行目ぐらいまででもいいけど
長文貼っても誰も怒らないしね

多分、22行目以外もバグってそう

他のモジュール(変数とかを書いておく所)を使ってグローバル変数があると面倒かな
878デフォルトの名無しさん:2011/05/04(水) 12:20:54.73
>>877
お言葉に甘えて、、、って全部で870行ぐらいあるので、、、
取り合えず、Cでいう、mainっぽいとこだけ張ります。必要があるようなら適宜。7~53行目です。

7 c main program
8 common/a/ ym1,ym2,pois1,pois2,thick,ntj,nte,npar,nst,nbc,nlc,
9 1 eqstx(5),eqsty(5),eqsts(5),mdir(5),mkind(5),jemk(600),
10 2 mtj(600,3),road(500),lc(500),mbc(500),p(800),lank(800),
11 3 disp(800),ddisp(800),foce(800),focem(800),ifail(600)
12 common/b/ ex(600),ey(600),ez(600),gxy(600),th(600),eqst(600),
13 1 sigmax(600),sigmay(600),sigmal(600),sigmat(600),
14 2 sigmaz(600),tauxy(600),tault(600),fract(600),
15 3 dela(3,3),com(3,6),elk(6,6)
16 common/c/ syk1(15000),index1(800)
17 common/d/ index2(800)
18c************************************************************************
19c
20 open(7,file='con')
21 write(7,'('' input filename'')')
22 open(18,file=' ')
23 write(7,'('' output file or devicename'')')
24 open(6,file=' ')
25 call input(ipro)
879デフォルトの名無しさん:2011/05/04(水) 12:22:57.32
続きです。
26c
27 do 1000 inc=1,nst
28c
29 write(7,50) inc
30 50 format(' **** No.',i4,' *****'/)
31c
32 call alloc
33 call clasfy
34 write(7,'('' calsyk running'')')
35 call calsyk
36c
37 do 40 i=1,2*ntj
38 foce(i)=focem(i)/nst
39 40 continue
40c
41 write(7,'('' solver running '')')
42 call solver
43 write(7,'('' result running '')')
44 call result
45 write(7,'(/)')
46c
47 if (ipro.eq.0) goto 1000
48 call output
49 1000 continue
50 if (ipro.eq.0) call output
51c
52 stop
53 end
880デフォルトの名無しさん:2011/05/05(木) 13:47:34.37
>>878
すでに、871さんが書かれているとおりです。
Fortranでは、C言語の標準入力は5番、標準出力は6番に割り当てられています。
openする必要はありません。これらは、'*'で書くことができます。
したがって、878,979の
write(7,
を、すべて、
write(*,
にすれば、画面に表示されます。

22行目、24行目のopen文でfile名を指定していないのはよくないので、
きちんとファイル名を指定して下さい。24行目についてはさらに番号を
6以外に変更して下さい。

その他、気になる点は:
47行目:この様な目的でgoto文を使用しないほうがいいでしょう。
goto文は、よっぽどのことがない限り使用しないでください。
文番号の使用も止めましょう。doループの終わりはend do文としましょう。
common文はなるべく使わないようにしましょう。

基本的に、日本でFortranと言えば、Fortran2003なので(JISでそのように
決まっている)、FORTRAN77ではなく、新しめの文法で書くのがいいと思います。

環境がmacのようですが、unix系のOSの場合には、特にファイルをopen文で
開く必要はありません。デフォルトで、例えば7番の場合はfort.7、
8番の場合はfort.8から読み書きしようとしています(コンパイラによりますが)。
プログラム実行前に、シェルスクリプトで、シンボリックリンクを使って
'fort.番号'のファイルを作っておけば問題ありません。
881デフォルトの名無しさん:2011/05/05(木) 18:20:02.26
>>880
どうもありがとうございます。
やってみます。
やはりこれはFortran77なのですね。平成元年に作成されたようです。
Fortranについて調べても、しょっぱなから違っているので途方に暮れていました。
882デフォルトの名無しさん:2011/05/05(木) 18:40:30.37
尻拭いさせられてるのか
883デフォルトの名無しさん:2011/05/05(木) 18:59:28.16
>>882
軽く説明すると、
「このソフトつかって課題やってきてね。つhoge.exe」
「(macなんですけど、、、)コードあります?」
「つhoge.f」
「gfortran hoge.fっと。コンパイルできたー。実行できないorz えーっと?Fortranなんて分からん、、、」
と、まあ、こんな感じで。
Fortranを調べてみても、明らかに違うしで困ったいた訳です。

個人的な結論は
コード自体がめっちゃ古い。
しかも環境依存くさい。
です。

みなさん、どうもありがとうございます。
884デフォルトの名無しさん:2011/05/05(木) 19:40:21.87
>>880
無事に動きました。
どうもありがとうございます。

やったあ!やったよぉ!
885デフォルトの名無しさん:2011/05/10(火) 04:05:10.32
>>884

あーあぁあ~はじめての~ちゅ~
君とちゅ~I need you for my love~
886デフォルトの名無しさん:2011/05/10(火) 15:33:36.57
大文字じゃないのだね
887デフォルトの名無しさん:2011/05/21(土) 09:53:33.09
5 名前:名無しさん@十一周年[sage] 投稿日:2011/05/21(土) 07:37:55.67 ID:55711cMv0
(人類の歴史として語り継がれるべき事実)

【 利用基準(年間20ミリシーベルト)の責任者一覧 】
 原子力災害対策本部本部長:菅直人(最高責任者)
 原子力安全委員会委員長:斑目春樹(実質的な判断の最高責任者)
 文部科学大臣:高木義明(当該通知に関する最高責任者)
 文部科学省生涯学習政策局長:板東久美子(当該通知に関する責任者)
 文部科学省初等中等教育局長:山中伸一(当該通知に関する責任者)
 文部科学省科学技術・学術政策局長:合田隆史(当該通知に関する責任者)
 文部科学省スポーツ・青少年局長:布村幸彦(当該通知に関する責任者)

※ 後で大問題になるから、このリストはみんなで共有しよう。全世界に拡散しよう。
888デフォルトの名無しさん:2011/07/22(金) 17:06:33.14
数値計算の得意な方助言をお願いします.
微分方程式をルンゲクッタを使って解こうと考えているのですが,
通常はt→∞方向に解くところを,今回t→0方向に解きたいのです.
刻み幅h等の符号を反転しただけでは,正しい答えがでません.
ざっくり書いたので,分からないところがあればコメントをお願いします.
889デフォルトの名無しさん:2011/07/23(土) 01:33:06.53
方程式系によっては、時間を負の方向に
とると本質的に発散するよ。
物理方程式は特に。時間に関して情報量が
単調減少(非増大)なので、
遡る、という事が無理ぽな事多々。
チェックしる
890デフォルトの名無しさん:2011/07/23(土) 07:42:53.84
スレ違いかもしれませんが、ご存じの方がおりましたら教えていただけないでしょうか

http://www.ffte.jp/
上記のサイトにあるFFTのサブルーチンをMPIとOpenMPのHybridで使おうと思っています。

tarをダウンロードして、解凍し、"ffte-4.1\mpi\tests\" にあるMakefileの
FFLAGS = -O3 -fomit-frame-pointer -I../.. を
FFLAGS = -O3 -fomit-frame-pointer -I../.. -openmp -openmp-report2
と書き換えてコンパイルをしました。

実行するとセグメンテーション違反と表示されてうまくいきません
-openmp -openmp-report2 を付け加えなければうまくいきます。

どうすれ、いいか教えていただけないでしょうか
よろしくお願いします。
891デフォルトの名無しさん:2011/07/23(土) 11:43:50.25
>>889
レスありがとうございます.
そうですか...別の方向からアプローチしてみます.
892デフォルトの名無しさん:2011/07/28(木) 14:58:20.15
3年ぶりあげ
893デフォルトの名無しさん:2011/08/06(土) 16:33:15.49
LinuxでFORTRANを使う際テキストエディタでプログラムを書き
\(ユーザー名)/FORTRANに保存し端末(コマンドライン端末)を使用し
そのプログラムへの入力と実行結果を生成する
ファイルのコマンドを忘れてしまいました
どなたかわかる方はいらっしゃいますでしょうか
894デフォルトの名無しさん:2011/08/08(月) 13:33:55.54
それはemacsでしょうか。
895デフォルトの名無しさん:2011/08/10(水) 00:07:13.86
>>893
日本語でおk
896デフォルトの名無しさん:2011/08/14(日) 17:20:24.31
FORTRAN77でスタック変更ってどうやるんだ?
でっかい配列定義するとエラる
897デフォルトの名無しさん:2011/08/14(日) 17:23:40.72
>>896
コンパイラの問題だから、一般解はない。マニュアルを見るしかない。
898デフォルトの名無しさん:2011/08/15(月) 07:44:26.69
unlimit
ulimit
ためすか、何か環境変数いじれば動くことがある、アル
899デフォルトの名無しさん:2011/08/16(火) 19:32:51.42
allocate文で動的に確保した変数っていつまで生き残りますか?

allocatable属性を指定した変数を宣言したプログラム単位の終わりまで来たら
自動的にdeallocateされるものですか?
900デフォルトの名無しさん:2011/08/16(火) 20:37:08.77
ALLOCATABLE 属性の配列でF95以降ならそうかな。F90の場合はそうではなかったような気がする。
F90からF95へのマイナー改訂で不便が無くなった記憶がある・・・
POINTERの時は解放されなかったと思う。

間違ってたらゴメンwww謝罪はしても賠償はしない
901デフォルトの名無しさん:2011/08/16(火) 20:51:47.70
ありがとうございます

さらにいくつか質問させてください

リスト構造を作ってなんらかの処理をするsubroutineを作り、
そのsubroutineをdoループで何度も呼び出すようなプログラムを考えています

allocateした変数が自動的に解放されないと仮定すると、

①subroutine呼び出すたびに使用しているメモリが増えて最終的にプログラムがストップすることになりますか?
②もしそうならsubroutineの最後でリスト構造を辿りながら手動でdeallocateしないといけないことになりますか?

③「allocatable属性を指定した変数を宣言したプログラム単位の終わりまで来たら自動的にdeallocateされるのかどうか」
を確かめる簡単な方法はありませんか?


よろしくお願いします。
902デフォルトの名無しさん:2011/08/16(火) 22:03:42.77
>>901
1.そういうことになる。いわゆる memory leak と呼ばれる状況。
2.そうなる。
3.1回試すだけなら、でっかい配列を allocate して、システムモニターやpsコマンドなどでメモリー使用量の変化を
  見てみればいい。

たぶん、最近の Fortran コンパイラは皆 F95 だから、ローカルに確保された ALLOCATABLE は自動解放されると思う。
903デフォルトの名無しさん:2011/08/16(火) 22:06:17.75
ただ同じ SUBROUTINE を何度も呼び出すつもりなら、もし前回解放されていなければ、
二回目は ALLOCATE できないと思う。
そういう場合配列の STATUS が不定なので、動作が処理系に依存しそうで断言できないが。
904デフォルトの名無しさん:2011/08/16(火) 22:38:39.47
ありがとうございます

使っているコンパイラはintelです

確認してみます。
ありがとうございました
905デフォルトの名無しさん:2011/08/18(木) 23:57:28.90
integer*4 gen(10)

の( )の中の数字ってなんですか?

初心者用参考書だと使ってなくて解説ないし
難しい参考書だと当たり前のように使ってるし

fortranって両極端ですね
906デフォルトの名無しさん:2011/08/19(金) 00:23:14.76
配列の要素数
907904:2011/08/19(金) 10:43:45.35
どうやらallocatable属性だとdeallocateされて
pointer属性だとdeallocateされないみたいです
908デフォルトの名無しさん:2011/08/19(金) 11:50:36.72
>>907
Fortran95の動作だとそうなると思います。
909デフォルトの名無しさん:2011/11/15(火) 01:30:19.44
gfortran, バージョン4:4.4.5-1 に関する質問です。

モジュールのバージョンが違うとかで下記のエラーメッセージが出てきます。
Fatal Error: Parse error when checking module version for file 'functions.mod'

これってどう解決すればいいですか?
910デフォルトの名無しさん:2011/11/15(火) 02:02:21.33
くだらない質問のようなのでくだ質に移動します
911デフォルトの名無しさん:2011/11/19(土) 16:31:55.93
いう
912デフォルトの名無しさん:2011/11/19(土) 18:35:25.27
913デフォルトの名無しさん:2011/12/31(土) 11:50:50.12
任意のリスト構造に対して
そのリストの内容を表示したり、リストを消したりするsubroutineを作るには
どうすればいいですか?


単方向リストを取り扱っています

subroutineにリストのrootを渡して
そのリストの内容を表示したり、リストを消したりしたいと思っています

しかし、リスト構造のtypeをあらかじめ知っていないと
subroutine側で仮引数を宣言できません

そうなるとtype毎にsubroutineを作らなければいけなくなります


そこで質問なのですが

任意のリスト構造に対して
そのリストの内容を表示したり、リストを消したりするsubroutineを作るには
どうすればいいですか?
914デフォルトの名無しさん:2011/12/31(土) 12:33:24.54
Fortran2003のclass(*)を使え。
915デフォルトの名無しさん:2011/12/31(土) 12:44:27.73
ぐぬぬ・・・
Fortran90がええのです・・・

とりあえず90じゃできないってことで理解します
お早い回答ありがとうございました
916デフォルトの名無しさん:2011/12/31(土) 17:40:16.11
>>915
どうしてもというなら、こういう論文がある。
A generic linked list implementation in Fortran 95
http://dl.acm.org/citation.cfm?id=1667141&CFID=75955509&CFTOKEN=91048213
内容はよく覚えていないが、確かTRANSFER関数で、ポインターを整数かなんかにいれて誤魔化してたと思う。

Fortran90/95はALGOL的になって、静的型チェックを厳しくしたから、任意構造を扱うには邪道をゆくしか無いと思う。
というわけでEQUIVALENCE的な意味でTRANSFER関数を使うしか無いんだと思う。
917デフォルトの名無しさん:2012/01/02(月) 18:59:30.43
ポインタを配列で用意したいんですけど、できませんか?

ポインタ配列ってのはあるみたいなんですけど
これは部分配列を作るのに使うみたいです

単純にポインタを整数で添字付けて
一度にたくさん用意したいだけなんですが
918デフォルトの名無しさん:2012/01/02(月) 21:31:26.40
>>917
出来ない。
ポインターを要素に持つ構造体を定義して、その構造体の配列を作るのが定石。
919デフォルトの名無しさん:2012/01/02(月) 22:09:01.22
なるほど、ありがとうございます

さらに質問したいのですが、

サブルーチンにポインタを渡す際に、直接渡すとエラーが出てしまいます

一時的に作ったポインタで、渡したいポインタの指している実体を指して
その一時的に作ったポインタをサブルーチンに渡すと上手く行きます。

要するに、下のコメントアウトしてるのだと上手く行くけれど
コメントアウトしていないものだとglibc detected とかいうエラーが出ます。

これはなんででしょうか?

implicit none
type(particle),pointer :: dumwork
type(particle),pointer :: tmpwork,aaa

! aaa=>dumwork
! call PrintParticleList(aaa,6)
call PrintParticleList(dumwork,6)

ソースファイルを以下のアップローダーに一週間ほど上げて起きますので
どなたかよろしくお願いします。
pmod.f90 の92行目と93行目です。
ttp://www1.axfc.net/uploader/Sc/so/306203
920デフォルトの名無しさん:2012/01/02(月) 22:51:02.65
すいません、上の質問を取り下げます

まだよく分かってないのですが
どうにも別のところに原因があって、エラーが出てるようです
921デフォルトの名無しさん:2012/01/02(月) 23:00:47.79
>>919
コンパイルは出来たぞ。Intel ifort 12.0.5.221
互換性チェックでもf95規格違反は見当たらない。
実行時エラーが問題なら、簡単なメインプログラムも頼む。
922921:2012/01/02(月) 23:04:41.86
ごめ、行き違いになったwww
923デフォルトの名無しさん:2012/01/02(月) 23:29:25.71
やっぱり、サブルーチンにポインタを渡す際に

直接渡すのと、別のポインタを使って間接的に渡すのことで違いが出ます。
なんでかは分かりません。

現在、以下の作業をしています。

2次元の粒子の座標を10個用意する
それを単方向リストにする  subroutine AddParticleList
リストを表示する        subroutine PrintParticleList
リストを解放する        subroutine FreeParticleList

これらを10回繰り返します

二つのparticle typeのポインタを用意して
type(particle),pointer :: proot, pwork

prootをallocateしました。

上に書いた3つのサブルーチンにポインタを渡す際に
pwork=>prootととして、pworkを渡した時と
prootを直接渡した時で異なる3つの結果がでます
924デフォルトの名無しさん:2012/01/02(月) 23:40:42.13
3つの結果は
①一回目は上手くいくが、二回目はリストが解放されず、三回目で止まる
②うまくいく
③十回全てで、リストは表示されるが、解放はされない

Add、Print、Freeに対するworkとrootの組み合わせをまとめると
(A, P, F)=
①(w, w, w)、(r , w, w)
②(w, w, r )、(r , w, r )
③(w, r , r )、(r , r , w)、(r , r , r)
です

ソースファイルは以下のURLです
どなたかよろしくお願いします

ttp://www1.axfc.net/uploader/Sc/so/306237
パスはfortranです

コンパイルするのは source comp です。
問題の箇所はtmod.f90の36行目あたりです。
925デフォルトの名無しさん:2012/01/03(火) 00:44:19.78
>>924
組み合わせというのがいまいちよく分からんのだが、
subroutine PrintParticleList(dumwork,filenum) で引数 dumwork が書き換えられて、リストの最後まで行ったまま返されるので、
解放しようにもできないように見える。
subroutine AddParticleList(dumwork,dumi,dumrr) でのように一旦テンポラリに入れないと駄目なのではないか?

あと、module tmod で、 np が real(dp),parameter :: np=10 と実数になってるが INTEGER の間違いじゃないか?
まぁ動くが規格からは外れている。
926デフォルトの名無しさん:2012/01/03(火) 01:30:34.90
fortranは値渡しじゃなくてアドレス渡しだから

ポインタをサブルーチンに渡して、
サブルーチンの中で指してる実体が変わると
サブルーチンを出たあとでも変わったまま

という理解でいいんでしょうか


組み合わせというのはsubroutineに渡す引数の組み合わせのことで

例えば
call AddParticleList(pwork, tmpnum, tmprr )
call PrintParticleList(proot, 6)
call FreeParticleList(proot)
と書いた時は

(A, P ,F)=(w, r , r )で
結果は③の
十回全てで、リストは表示されるが、解放はされない
となる。
というつもりです。

また、指摘された通り
subroutine PrintParticleList(dumwork,filenum)
でdumworkをtmpworkに入れるように書き換えて見ましたが
引数の組み合わせによっては>>924に書いた①と②の
どちらかの結果になります。
927デフォルトの名無しさん:2012/01/03(火) 02:02:18.49
>>926
そうFORTRANは参照渡し。F2003なら値渡しにもできるが・・(ポインタはできないかな)。

組み合わせを変えたときに、最後のdeallocateの名前も変えるとか(サブルーチンで尻までポインタが移動しているため)、
きっちり整合していないからエラーが出るのでは?見た感じ問題なく動いているぞよ。内容を問わずに見た目だけだがwww

サブルーチンごとに、引数のポインターが変更されては困るものと、変更されないと困るものが混じっている。
その辺で混乱しているのでは?

例(w,w,w)の時

pwork => proot
do i=1,np
tmpnum=i
tmprr(1:2)=rr(1:2,i)
call AddParticleList(pwork,tmpnum,tmprr)
end do

! pwork=>proot
call PrintParticleList(pwork,6)

! pwork=>proot
call FreeParticleList(pwork)

! deallocate(proot,stat=i)
deallocate(pwork,stat=i)
928デフォルトの名無しさん:2012/01/03(火) 04:51:51.85
>>927
解決できました!
ありがとうございます
929デフォルトの名無しさん:2012/01/03(火) 13:41:00.19
コード全く見てないけど、大きめに配列切っとけばいいんじゃないかしら?
メモリがかつかつと言うのなら仕方ないけど。
930デフォルトの名無しさん:2012/02/19(日) 02:02:25.68
てst
931デフォルトの名無しさん:2012/03/01(木) 07:57:57.88
スレ違いで大変申し訳ないのですが,このFortranスレなら
知ってる人がいるかもと思い,書きこませていただきます。

Fortran の後継言語として SUN が開発していた Fortress って,
今どうなっているのでしょうか?
ググっても2008年3月31日現在の仕様書(Ver.1.0) より新しい情報が
見つかりません。

開発中止?
932デフォルトの名無しさん:2012/03/01(木) 16:11:28.68
とりあえずここが現在のプロジェクトサイトのようなんだが、
ここは確認した? ttp://projectfortress.java.net/
933デフォルトの名無しさん:2012/03/01(木) 17:55:53.39
>>932
見たのは多分初めてです。ありがとうございました。

# それにしても,英単語をそのまま言語名にされると,
   うまく検索できないですね。" Fortran " みたいに
   造語にしてくれると検索しやすいのに‥‥     σ(-_-;)
934933:2012/03/01(木) 18:05:23.12
「見たのは多分初めて」と書きましたが,英語版の Wikipedia の
Fortress (programming language) ページからリンクが張られていましたね。
きっと,見たんだけど,よく見てなかったというパターンです。
お騒がせして,すみませんでした。
935デフォルトの名無しさん:2012/03/01(木) 18:30:12.25
下手に幅広く探さず、この例の場合なら site:sun.com か site:oracle.com を付けて、
有用度の高そうな情報を重点的に探すとかするとうまくいく(こともある)。
936デフォルトの名無しさん:2012/03/01(木) 22:20:28.28
おぼろげな記憶だから、細部は正確ではないが・・・
Fortress は、IBM,SUN,CRAYがそれぞれ米政府の次世代並列言語として
開発していたものの一つで、SUNはコンペに負けた。
X10とかChapelとかが競っていたような。これらもどうなったのかよく知らん。
UPC(Cの系統だが)とCAF(これはF2008に規格として入った)は地道に進んでいる

コンペに負けた頃に大々的に公開されてニュースになった。
SUNがコンペに負けた時点でもう開発中止に近いのでは。
SUN自体もオラクルに買収されたし。

Fortranの後継などと言われるが、それは(コンペ用の?)煽り文句で
JAVAの上にテスト実装されている状態では物好き言語マニア以外触らんだろう。

GuySteeleJr.も外の世界ではカリスマかもしれんが、Fortranの世界では
せいぜいイマイチだったHPFの規格をつくった人、くらいのイメージだし。
937933:2012/03/02(金) 08:48:59.25
>>935
なるほど,そうすればいいのですね (^ ^)

>>936
詳しい情報,ありがとうございます。
昨日,Amazon で見つけたんですが,去年の8月に
”Fortress (Programming Language) ”という洋書が出版されていました。
もしかして巻き返しを図っているんでしょうか (・_・)?
938デフォルトの名無しさん:2012/03/03(土) 10:40:15.77
テスト
939デフォルトの名無しさん:2012/03/03(土) 11:03:36.44
>>937
その本だけど、wikipediaとかをプリントしただけの本みたいよ。
なんかしらんけど、最近wikipediaとかネット情報丸コピーの100~200ページの妙に値段の高いオンデマンド出版本が山のように出ている。
詐欺なのか何なのか知らんがw
940デフォルトの名無しさん:2012/03/03(土) 12:10:42.33
とりあえず出版社名でググるように注意したほうがいいな。
ていうか、その本、「(Programming Language)」ってウィキペディアの記事名まんまじゃねぇかw

あと Fortress は日本語の本が俺の知ってる限りで 1 冊出てる。一応それなりの内容。
941デフォルトの名無しさん:2012/03/03(土) 13:36:41.17
前に、FORTRAN本探していた時に山のように出会ったのがこのネット丸写しオンデマンド詐欺本w
電子出版はせずサンプル立ち読みもさせないし値段が妙に高いから、プリント+バインドサービスとも思われぬ。
表紙絵を見ればとりあえず区別がつく。
Germain Adriaan 編集 
Brev Publishing 出版
ぐぐっても情報でない。

しかし、アマゾンが結構在庫を持っている所を見ると、こういうインチキ本を作って、機械的に在庫を買う
アマゾンとか大手小売に売りつける手口は、新世代詐欺のビジネススキームとしてありかもしれないw
ソフトバン○とかが始めそうw
942933:2012/03/03(土) 17:59:25.10
>>939-941
重要な情報,ありがとうございました。
昨日,Amazonで注文したのですが,今,慌ててキャンセルしました。
言われてみれば確かに,表紙には

High Quarity Content by WIKIPEDIA articles!

と書いてあるし,裏表紙にも

Please note that the content of this book primarily consists of
articles available from Wikipedia or other free sources online.

と書いてありました。まったく大損するところでした。
自分のメディア・リテラシーの低さを自覚しました‥‥。
ともあれ,アドバイスして下さり,本当にありがとうございました!
943デフォルトの名無しさん:2012/03/06(火) 20:11:36.89
Windows用の HPFってないんでしょうか?
944デフォルトの名無しさん:2012/03/06(火) 22:28:46.61
はい
945デフォルトの名無しさん:2012/03/06(火) 22:48:57.51
>>943
富士通だったかがHPFをMPIに変換するトランスレータをフリーで供給していた記憶がある。
もしかしたらLinuxだったかもしれない。

あとPGIのFortranCompilerの古いヴァージョンはHPFに対応していた。今のもしているかも。
946943:2012/03/07(水) 17:23:19.93
>>944-945
お答え,ありがとうございました m(_ _)m"
947デフォルトの名無しさん:2012/03/08(木) 00:08:02.12
∬dxdy[0:pi][0:pi]f(x)f(y)*(erf(a|x-y|)/|x-y|)
f(x) = x^2+1
f(y) = sin(x)
の積分をするにはどのようにプログラムすればいいでしょうか?

1, 変数を変換して積分 x-y = r
2, そのまま積分

どちらでやればいいでしょうか?
もしかしてどちらでもできますか?
948デフォルトの名無しさん:2012/03/14(水) 12:35:28.45
フォートラン in 原発?
949デフォルトの名無しさん:2012/03/14(水) 22:46:09.43
電力はFORTRAN。
社会保険庁の年金システムもFORTRAN。 
何年か前にANAがシステム入れ替えで発券機トラブルを起こしたけど、元の問題なく動いていたのはFORTRANだお。
950デフォルトの名無しさん:2012/03/14(水) 23:09:55.88
フォートラン光
951デフォルトの名無しさん:2012/03/14(水) 23:32:06.21
なぜか東八郎がおもいうかんだ
952デフォルトの名無しさん:2012/03/28(水) 23:46:43.47
「n個のデータを大きさの順番に並び替えたときに、同じ値が連続して出現する個数とその組数を出力」したいのですが
並び替えの後、エラトステネスのふるいの要領で求める値を出すプログラムを作ろうとしたところで頭がごちゃごちゃになって挫折しました

初心者が、求める結果の出せるプログラムを書くにはやはり参考書やネットの入門編を1から読んでFORTRANの体系のようなものから学ぶしかないのでしょうか。
自分の今まで作ったものとは全く異なる文章をプログラミングの上級者がプログラムにどうやって変換しているのか、そのプロセスというかコツをもしよければ教えてください。

息抜きがてらの愚痴ですみませんがお願いします
> 初心者が、求める結果の出せるプログラムを書くにはやはり参考書やネットの入門編を1から読んで
> FORTRANの体系のようなものから学ぶしかないのでしょうか。

全然何もしてないなら、それはやるべきだが。
アルゴリズムの勉強と、それをFORTRANで書く勉強とは別だからねー
前者ができていれば、極端な話、後者は泥縄でもいいんだけど
954952:2012/03/29(木) 01:36:02.22
>>953
やはりアルゴリズムの勉強がやや不足してたようで、
そこをはっきりさせてから書くようにしたら何とか出来そうです。

プログラミングに触れるのはFORTRANが初めてでアルゴリズムを勉強する、という意識がそもそもありませんでした…
(ifやdo文を覚えるだけで後は皆さん自力で何とかしてるものとorz
初歩の初歩ですが自分の躓いている所がはっきりしました、大変助かりました
955デフォルトの名無しさん:2012/04/11(水) 23:14:15.28
グローバル変数が嫌われている理由について、教えてください。
私は研究で流体力学の数値計算をしていますが、
どうもグローバル変数を使っていけない理由がわからないです。

自分で調べたところ、
1,変数名が増えると、重複する可能性が出る。
2,どこで値が変わったのか分からなくなる。
などが理由として挙げられていましたが、
数値計算に限ると、
1に関しては、密度ならrhoとか圧力ならprsとか
物理量に関する名前にすれば、中身がすぐに分かるし
文字制限もないので重複することは滅多にないのでは?と思います。
また、2の場合、基本的に物理量は値が変化するものなので
あまりデバッグの際に気にすることではないのでは?と思います。

私の業界で有名な方のコードを見たところ、
サブルーチンの引数はなく、
全ての変数がグローバル変数になっていたくらいです。
最も、90年代の古いコードなのですが。

時代の流れ的なものなのでしょうか?
956デフォルトの名無しさん:2012/04/12(木) 00:13:13.49
>>955
アルゴリズムとかの研究じゃないなら、計算結果が間違ってないことが
最優先だろうし、何より重要な部分は論文などでまとめてるから、
可読性や再利用のしやすさは二の次なんじゃない?
自分はグローバル変数使うのは定数くらいにするようにしてる
957デフォルトの名無しさん:2012/04/12(木) 01:11:42.78
利点・欠点がわかっていれば
杓子定規に嫌う理由はないと思う
958デフォルトの名無しさん:2012/04/12(木) 01:23:37.97
大域変数を使うなとか、GOTO文を使うなとか言うのは、ワンフレーズプロパガンダだから話半分でいい。
ただ、なんで駄目なのかピンとこないうちは使わないほうが良く、ヤバさを感じ取れるなら使っておk


77までのFORTRANで引数にしないで大域変数にしがちだったのは、構造体がなかったためでもある。

構造体が無いと、深いルーチンでしか使わないパラメータの束を、引き渡すためだけに、
それを使用しない親ルーチンの引数としてだらだら並べないといけなくなって見苦しく面倒になる。
そこで構造体がわりに名前付きCOMMONに固めて渡したりした。

何を引数で渡して、何をCOMMONで渡すかはセンスの問題なので、一定の方針を決めた上で好きにすればいい。
959デフォルトの名無しさん:2012/04/12(木) 01:30:46.57
言語の機能を知るにつれ意外に使わずにすむようになるものでもあって
使わない書き方を工夫してそれに慣れるのも教育的ではあるが
あくまで本業は流体力学だもんね
960デフォルトの名無しさん:2012/04/12(木) 02:08:29.69
小さいプログラムならどっちでもいい。
大きくて複雑になればすべてグローバルだと変数が増え把握管理が人間の手に負えなくなり
開発効率が下がりバグが増え読みにくくなり結局開発に失敗する
いいことなにもない
そういうソフトウェア工学の基本中の基本。
基本中の基本中の基本中の基本。
不味さがわからないなら経験とセンスの問題だから>>958の認識でいいだろう。
961デフォルトの名無しさん:2012/04/12(木) 02:46:18.53
皆様、コメントありがとうございます。
やはり、自分の経験不足なんですかね?

>>956
定数だけで書けるのですか?
例えば自分の場合、基本的な物理量だけでも
15個ほどあります。
それを、サブルーチンの引数にすると、とても長くなってしまい
逆に読みづらくなるんじゃないかと思ってしまいます。

>>960
管理というのは、例えば、ある一部分のサブルーチンを
他の人や未来の自分が入れ替える、といったことでしょうか?
私のボスは、コード全体を把握してないのなら、いじってはいけない
という方針だったのですが、
それはプログラムが小さかったから通用する話なのですかね?
962デフォルトの名無しさん:2012/04/12(木) 03:11:08.30
>>961
変数の管理・把握というのは:
何という名前・型の変数が何個あり、それはどこでどのような使われ、どういった意味の数値を記憶させる変数なのか
と言った、変数の仕様を人間が把握し管理すこと。

プログラムが大きくなりステップ数が何十万何百万となり、変数が半百何千何万となってきたときに、
すべてグローバルだとそれらの把握・管理人の手に負えなくなる。
しあkし真にグローバルであるべき物だけをグローバルにし、ローカルにすべき物はローカルにしておくと、
あるプログラムの一点から見える変数やサブルーチンの数は大幅に減り、人間の手に負えるレベルの複雑さに
できる。それによって大きいソフトウェアがなんとか作れるし、
ソースコードの見やすさ、改良や拡張のしやすさも向上する。

ボスが言う「コード全体を把握してないのなら、いじってはいけない」の真意は直接聞いていないので想像になるが、
良く理解できていないソフトウエアが正しく動いているのであればヘタにいじって
バグ入れたり劣化させるよりも、いじらない方がまだましみたいな意味じゃないかと思うよ。
963デフォルトの名無しさん:2012/04/12(木) 03:15:02.31
プログラムの各部分の意味が変数名だけで(どうにか)分かるのだとしたら
行数などの見た目はどうあれ、小規模で単純なプログラムということになるが

プログラミングじゃなくて数値計算が目的なんだろうしボスが付いてるようだし
現実問題として、規模とプログラミング教育上の問題以外に大域変数を使っていけない理由はない
964デフォルトの名無しさん:2012/04/12(木) 03:17:24.16
ん?全部グローバルにしていいかって意味じゃないよね?
965デフォルトの名無しさん:2012/04/12(木) 03:29:19.03
>>964
話の発端に書かれていたような、全部グローバルはさける「べき」でしょ
でも全部グローバルで差し障りがない規模のプログラム
たとえば数百~1000行くらいまでなら>>963の言うとおりかもでしょ。
966デフォルトの名無しさん:2012/04/12(木) 03:39:22.93
>>962
既存のコードを拡張する必要があったのですが、
そのときに、コードの最初から最後まで読んで把握しなきゃダメだよ、
と言われたんです。

>>963
確かにそうなんですが、
それゆえに、周りもプログラミング技術自体には無頓着だし、
また、お手本もfortran77で書かれた古いものが多いんです。

ですが、私はまだ院生なので、
将来のことを考えると、もっと新しい技術を取り入れたほうがいいのかな?と思いまして。
(最初はお手本通りに、全てをCOMMONでグローバルにしてたのですが、
そういうのは古いやり方ってのを知りまして・・・
モジュールとか構造体とか使ってみようかな、と。)
967デフォルトの名無しさん:2012/04/12(木) 07:22:01.47
OpenMP 使ってたときは、common で困ることはなかった。
MPI に移行する時、ちょっとというかだいぶ手間取った。
結局、いちど全変数をargument で渡すのにしてから
Module 化。

Module Use ってファイル内の前後関係に
気を使うので、嫌いだ。
968デフォルトの名無しさん:2012/04/12(木) 10:43:43.75
COMMONの注意点だが、規格の上では無名COMMONはSAVE属性が付いているが、名前付きCOMMONはデフォルトではSAVE属性無い。
ただ66以来の歴史的事情でSAVEが付いているように扱われることが多い。
そのうち規格原理主義みたいなのが出てくるとめんどくなる。コンパイラオプションで対応できるようになると思うが。
969955:2012/04/12(木) 19:39:46.64
955です。何度もすみません。
今、書いているプログラムについての情報を書くので、
みなさんならどういう構造にするか、具体的なアドバイスをいただけませんか?

今のプログラムは、100~200行程度のサブルーチンが10個ほどあります。
メインプログラムには、サブルーチンの呼び出しと簡単なdoループくらいしかなく、
流れが分かるようにしてあります。
サブルーチンは外部副プログラムとして、書いてあり、
順次、継ぎ足していきます。最終的には、今の2、3倍くらいになると思います。

・プログラムの内容は、流体計算で、物理量を時間発展させたい。
・プログラム全体にわたって出てくる物理量は15個程度。
・ファイルがバラバラになるのが嫌なので、一つのファイルに全て書きたい。

で、最初は全部グローバルにしていたのですが、
みなさんの話を聞いて、ローカルも取り入れてみようと思い、
パラメータと基本物理量だけを別ファイルにモジュールとして書いてみました。
ですので、今のプログラムは
プログラム+サブルーチン群と変数宣言のみのモジュール、の2つです。

問題は、変数の宣言についてなのですが
例えば、サブルーチンAからサブルーチンBに変数を引き渡すとき、
宣言を、メインプログラムとAとBの3つに書かなければいけないですよね?
それがとても冗長に感じてしまいます。
また、引数の数も10とか20とかあります。
モジュールにまとめればよいのかもしれませんが、
そのまで大規模なプログラムでもないし、という感じです。

皆さんならどうするか、アドバイスお願いいたします。
970デフォルトの名無しさん:2012/04/12(木) 23:40:39.30
>>969
一から自分で書くわけじゃないなら、見た目が悪くなるから
これまでのは人と同じようにcommonで書く
一から書き直すなら構造体で変数をまとめてcommonなしで書く
971デフォルトの名無しさん:2012/04/13(金) 00:36:58.32
冗長といっても、その外部副プログラムが
大域変数の存在と型とメモリ配置を知るには
書いてくれないと困るわけで。

include 文なり、プリプロセッサが使える環境なら
#include なりで、定義を1ファイルに纏めることはできる。
972デフォルトの名無しさん:2012/04/13(金) 16:13:29.35
お二人とも、アドバイスありがとうございます。

>>970
1から書いています。
昨日、パラメータと基本物理量以外は全てローカルに直すことに成功しました。
あとは、基本物理量をローカルにするだけです。

構造体は使ったことがないのですが、
おっしゃっていることは、このような感じのことでしょうか?
3つの流体変数を時間発展させていくサンプルプログラムです。(若干、端折っています
構造体の要素の代入文のせいで、サブルーチンが
長くなってしまうのは、仕方がないですよね?
まだ、削れるところありますか?
973デフォルトの名無しさん:2012/04/13(金) 16:15:27.76
program main
  implicit none
    type arg
       real(8) :: a(0:n),b(0:n),c(0:n)
    end type arg
  type(arg) :: old,new

  do i = 1, m
    call subevo(old,new)
    old = new
  end do
end program main
subroutine subevo(old,new)
  implicit none
    type arg
     real(8) :: a(0:n),b(0:n),c(0:n)
    end type arg
  type(arg),intent(in) :: old
  type(arg),intent(out) :: new
  old%a(0:n) = rho(0:n)
  old%b(0:n) = vel(0:n)
  old%c(0:n) = ene(0:n)
  ここで計算する
  new%a(0:n) = rho_n(0:n)
  new%b(0:n) = vel_n(0:n)
  new%c(0:n) = ene_n(0:n)
end subroutine subevo
974デフォルトの名無しさん:2012/04/13(金) 16:26:25.60
便乗の筆問だけど、972の例で
new%a new%b new%c
ってメモリ上はどういう順番で格納されるのかな?実装しだい?
つまり new 構造体と
なんか、 new(0:n,3) みたいに添え字で処理(これは型が同じでないと
いけないわけだけど)するのとで
計算のぱふぉーまんすとか変わるのかなぁ、と思った次第。
975デフォルトの名無しさん:2012/04/13(金) 22:45:21.31
>>974
実装次第だな。
Fortran2003で、Cとの相互運用用の命令が導入されてその中に、TYPEのSEQUENTCE属性が導入されて、
これが付いているとメモリー上で宣言順に並べて割り付けられる。
976デフォルトの名無しさん:2012/04/14(土) 01:51:10.69
>>972
サブルーチンもmainと同じファイルに書いているなら
contains使った方がいいかな
977デフォルトの名無しさん:2012/04/14(土) 01:58:19.31
構造体定義も module で持っていける

subevo() 内は old → rho →(計算)→ rho_n → new っぽく見えるけど
サブルーチン内部の配列は無駄じゃないか?

module my_struct
type arg
real(8) :: rho(0:n),vel(0:n),ene(0:n)
end type arg
end module my_struct
program main
use my_struct
implicit none
type(arg) :: old,new
!- 中略 -
end program
subroutine subevo(old,new)
use my_struct
implicit none
type(arg),intent(in) :: old
type(arg),intent(out) :: new
!- 中略 -
end subroutine subevo
978デフォルトの名無しさん:2012/04/14(土) 06:26:26.00
アドバイスありがとうございます。

>>976
わかりました。

>>977
二つ、質問が。

そのmoduleの使い方は、includeと同じだと考えてよいですか?

>subevo() 内は old → rho →(計算)→ rho_n → new っぽく見えるけど
ええと、これは old →(計算 → new のほうがすっきりする、てことであってますかね?
rho_nのほうはなくせるかもしれませんが、
方程式が
new = f(rho,vel,ene)みたいな感じの非線形連立方程式になっているので
右辺に出てくる変数を、arg%rho(0:n)とかarg%vel(0:n)とかで書いていくのは
大変じゃないかな?と思いました。
なので、引数のときは構造体で引き渡して
計算のときは要素にバラしたほうがいいのでは?と。
979デフォルトの名無しさん:2012/04/14(土) 06:32:15.86
すみません
>old%a(0:n) = rho(0:n)
>old%b(0:n) = vel(0:n)
>old%c(0:n) = ene(0:n)
ここ、左辺と右辺が逆でした
980デフォルトの名無しさん:2012/04/15(日) 00:08:24.22
>わかりました。
うーん、わかってもらえなかったみたいだな。
contains使って内部副プログラムとして書けば、oldだのnewだのを引数でやり取りする必要がなくなるんだけど。
981デフォルトの名無しさん:2012/04/15(日) 01:26:55.15
>>978
> include と use module
結果としては同じ

大雑把な言語解釈を言うと include は指定ファイルの"記載"を引用し
use module は module ブロックで記載された"定義"を引用する
ちなみに module を使うとコンパイラーに引数の型一致が保証できる、はず

> サブルーチン内配列
理由があるなら別に構わない

ただ、n が大きいならばそのぶんメモリ消費と
メモリコピーの処理時間が上乗せされると思う
先進的 (Fortran 2003) な手段が使える&使っていいなら
type に procedure を持たせて call old%propagate(new) みたいにするとか
982デフォルトの名無しさん:2012/04/15(日) 01:27:31.54
>>980
containsで引数がいらなくなるのは、
モジュールでグローバル変数化したときだけじゃないんですか?
自分的には、contrainsのメリットは
引数の型をチェックしてくれるってことだと思ってました
983デフォルトの名無しさん:2012/04/15(日) 05:30:24.59
引数型チェックは
Interface ブロックでやってる。

複数やり方があるのは
いうことなんだろうけど、面倒だよね
984デフォルトの名無しさん:2012/04/15(日) 13:55:55.84
981 だが
> type に procedure を持たせて call old%propagate(new) みたいにするとか
これ解決案になってなかったスマン
結局 new%rho = this%rho とか書くから意味ない

内部副プログラムはその親になるプログラムの変数定義を参照できるが
親以外からは呼び出せなかったかな
985955:2012/04/15(日) 22:33:34.13
もうすぐ1000いきますね。
皆さま、長く付き合ってくださりありがとうございます。

色んな機能を教えていただき、まだ全然理解していないのですが
COMMONをINCLUDEして全てをグローバル変数にしていたコードは
・パラメータのみをグローバル変数にし、モジュールで定義
・基本物理量は構造体にまとめる
・intent文をつけて構造体をサブルーチン間で引き渡す
という感じになりました。

containsとinterfaceについては、まだよくわからないので
これから調べてみます。
本当に、いろいろやり方があって
どれが最善なのかは、わかりませんね・・・
メモリ消費のことまでは、まだ頭が回ってないです
(小規模なプログラムなので、まだ大丈夫かな・・・)
986955:2012/04/15(日) 22:55:46.34
すみません、こんなの見つけたんですけど。
>2)親手続き中で使われている変数名,配列名などは内部手続き中でも有効で,共通
>の値を持つ。

>>982は間違ってました
もし、>>980さんのいうように、全てのサブルーチンをcontainsで
main programに入れたら、それって結局
全ての変数をグローバル化するのと同じになりませんかね?
よくわかんなくなってきた・・・
987デフォルトの名無しさん:2012/04/15(日) 23:38:01.86
>>986
そのとおりじゃ。
メインプログラムでのCONTAINSは危険だから止めとけというのが言い伝えじゃ。
ModuleでのCONTAINSと比べて、ループ変数のi,jの類を共有してしまうので危険がいっぱいおっぱい。
988955:2012/04/16(月) 03:38:45.38
>>987
さいきん、ネットにある色んな専門家の資料とか読んで勉強してるんですけど
外部サブプログラムは非推奨、っていう記述を良く見かけるんですよね
理由はよくわかりませんが、引数の受け渡しの際にバグが起きることを
危惧しているのかな?
でも、contrainsを使うと、変数は親子結合してしまうわけですよね
それって、グローバル変数と変わらないような。
人によって言ってることが違くて、わけがわからないっす・・・
989デフォルトの名無しさん:2012/04/16(月) 11:05:15.12
外部サブプログラムというのが何を指しているのか不明だが、たぶんMODULEの中に入っていない野良ルーチンのことだと思う。
これは分割コンパイル時の引数のチェックがなされないのでやめたほうがいい。
メインのPROGRAM中のCONTAINS中のサブプログラムもやめたほうがいい。
それはメインプログラムのローカル変数(DOLOOPのインデックスとか中間変数とか)もグローバルにサブプログラムに共有されて
しまうから。MUDULEの場合、まさかi,jとかtmpとかを共有変数にはしまい。

やや上級者向けだが、最近こういう本が出ている。 Modern Fortran: Style and Usage Norman S. Clerman、 Walter Spector
初級向けは、今は廃れてしまったが、いわゆる Essential Fortran / F と呼ばれるFortran90から過去互換性を捨てた教育用Fortranの
教則本が良かった。Essential Fortran 90 & 95 Loren P. Meissner
買わずともネットで関連の文書が読めた気がするのでその辺を見て見てはいかがか。

わしは大昔にLaheyのELF90を買ってそのマニュアル、(今はPDFしかないが昔は紙版がついてきたので)、それだけ見るようにして勉強した。
ただこれはF90でF95水準ですら無いので今はややおすすめできない。
990955:2012/04/16(月) 16:59:17.19
>>989
>これは分割コンパイル時の引数のチェックがなされないのでやめたほうがいい。
これだけが問題なら、>>983さんのやり方で解決しそうな気がします。
モジュールのなかに入れれば、すっきりしそうです
モジュールのなかぶサブルーチンをcontainsするのは
個人的に好きじゃないです・・・
中身を常に見ておきたいので(ブラックボックス化するのがオブジェクト指向?)

>MUDULEの場合、まさかi,jとかtmpとかを共有変数にはしまい。
え、すみませんw
doloopのintegerを普通に共有変数にしてました

991デフォルトの名無しさん
>>984
>内部副プログラムはその親になるプログラムの変数定義を参照できるが
>親以外からは呼び出せなかったかな

F2008から内部サブプログラムを引数(引関数?)として、別のサブルーチン
等に渡せるようになった。Intelは対応している模様。

しかし寿命が親ルーチンが動いている間なので、ポインターをつけて返り値
(返り関数?)とするとNULLになって死ぬ。

Modern Fortran Explained 20.5.5 p.370