トップページ⇒tech
991コメント434KB

FORTRAN �W

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/12(日) 17:13:35
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/
0002デフォルトの名無しさん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/
0003デフォルトの名無しさん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 |/
            �h   ヽ ` ', | O``''────…'''"´  O',゙:、  l |/
0004デフォルトの名無しさん2006/11/12(日) 18:34:32
機種依存文字使うなボケ失せろ
0005デフォルトの名無しさん2006/11/12(日) 19:07:04
>>4
きたねー言葉使うな糞野郎!

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

LAPACKに積分はふくまれておらんの?
0011デフォルトの名無しさん2006/11/12(日) 20:08:54
コンパイラより高い・・・
0012デフォルトの名無しさん2006/11/12(日) 20:10:38
このスレのエキスパートたちは有料パッケージとか使っておられるのですか?
0013デフォルトの名無しさん2006/11/12(日) 20:13:17
>>7
Netlib行ったが数が多すぎて何がなんだかわからない。
これをどう使えばいいかすらわからない。
見た感じプログラム単体が落っこちているだけにしか見えないが
どうやってってこれを呼び出して使うんだろうか。
0014デフォルトの名無しさん2006/11/12(日) 20:32:24
>>10
LAPACKは元々、LINPACK+EISPACKで、それぞれ密行列の線形方程式と固有値問題の
ルーチン集なので積分は主題から外れていると思う。

LINPACK、EISPACKは60年代の米英の国家プロジェクトだったように記憶している(記憶曖昧w)。
LAPACKは基本的にそれを77化してBLASの上に統一化し、一部アルゴリズムを改良・拡充した
ものだろう。その辺の経緯や順序はよくわかんね。


>>13
NetLibとはそういうところだw 埃の積もった土蔵見たいなもんだ。
結局、膨大すぎて何が欲しいか分かってないと使えないw

NumericalRecipesのページへ行ってみるのが吉かもしれない。
とりあえず専門家的にはベストで無いにしろ、素人が馬鹿な外れを引かされることは無いはず。
ただ本版のソースはしばしばBug入りなのでめくらめっぽう使うのはヤヴァス
有料ソースは直っていたりするw
0015デフォルトの名無しさん2006/11/12(日) 21:19:12
初心者は富士通のサブルーチン付きコンパイラ買うのがbestじゃね?
難易度も予算も
0016デフォルトの名無しさん2006/11/12(日) 21:25:25
Intel Math Kernel Libraryでok
0017デフォルトの名無しさん2006/11/12(日) 21:36:09
MKLって積分ルーチン入ってるの?
0018デフォルトの名無しさん2006/11/12(日) 21:39:47
多分ない

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

>>19はあまりに中途半端。きっちりと厳格なF90式で書くか、F77式に暗黙の型を守るべき。
0024デフォルトの名無しさん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
0025デフォルトの名無しさん2006/11/14(火) 15:36:00
fortran中で他のexeを実行できるようにするにはどうしたら良いですか?
fortranで作られたexeなんだけどソースくっつけるのがめんどくさいんで・・・w
0026デフォルトの名無しさん2006/11/14(火) 16:32:26
>>23
FORTRAN(90)の書籍で、定番の物ってありますか?
0027デフォルトの名無しさん2006/11/14(火) 16:53:09
これからフォートランを勉強するのですが、
とても解りやすい入門書を教えていだたけませんか?
プログラミング自体、あまり経験がありません。
Cを少しやりました。
よろしくお願いします。
0028デフォルトの名無しさん2006/11/14(火) 18:18:30
xの値を、1,10,100,1000,10000,100000,1000000の順に変えて
その常用対数、自然対数の値を計算して表示するプログラムを作れ

という課題が出たのですがサッパリ分かりません。
どうかお力添えください。
0029デフォルトの名無しさん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
0030デフォルトの名無しさん2006/11/14(火) 23:23:10
倍精度実数と4倍精度実数では実行速度は変わってしまいますか?
0031デフォルトの名無しさん2006/11/14(火) 23:28:24
>>30
死ぬほど違う。 
倍精度までは数値演算プロセッサの助けでハードウェア演算するが、
4倍精度はソフトウェアで浮動小数点演算をするので遅くなる。

64BitCPUなら若干状況は改善するが本質においては変わらない。
DECのアルファーCPUは4倍精度も微妙に早かったが、特殊な命令セットがあったためらしく、
64bitCPUだからといってよくなるわけでもないようだ。
0032デフォルトの名無しさん2006/11/14(火) 23:31:25
>>29
DO文で書かないといけないのですが
どうすればいいんでしょうか・・
0033302006/11/15(水) 00:03:03
>>31
詳しいレスサンクス!
0034デフォルトの名無しさん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ソースがあふれているので微妙ではある。
実際上記のものは教育用としてもはやらなかった。
0035デフォルトの名無しさん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
0036デフォルトの名無しさん2006/11/15(水) 14:47:06
  complex(8) c

において,

  c=(0.d0, 0.d0)

として初期化するのも,

  c=0.d0

として初期化するのも全く同じことなのですか?
0037デフォルトの名無しさん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

何処がおかしいんでしょうか?
0038デフォルトの名無しさん2006/11/15(水) 18:31:55
>>37
read (*,*) x,log(x),log10(x)
どこに入れたいの?
たぶん、その穴じゃないわよ
0039デフォルトの名無しさん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つの手だ。


だれかくだすれの次スレ立ててくれ。
0040デフォルトの名無しさん2006/11/15(水) 23:55:01
>>37
>>35をもういっぺん見ろ!

>>39
重複スレをクダスレにするか?
0041デフォルトの名無しさん2006/11/17(金) 00:48:27
>>40
タイトル一緒だから混乱しそうw
0042372006/11/17(金) 10:16:25
>>35
WRITE (6,*) が分かりません
>>37の問題の書式の指定はこれでいいんでしょうか
0043デフォルトの名無しさん2006/11/17(金) 11:23:12
WRITE(6, '(I10, F15.7, F15.7)') x, y, z

もう少し教科書嫁!!

こんな感じでw
0044デフォルトの名無しさん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
0045デフォルトの名無しさん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
こうですか?
0046デフォルトの名無しさん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


おかげさまでここまで出来たんですが、どうしても*******が出てしまいます><
0047デフォルトの名無しさん2006/11/17(金) 19:09:14
>>46
「変数の型」を再勉強してから出直してこい。
0048デフォルトの名無しさん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を整数表示に指定することはできない.
0049デフォルトの名無しさん2006/11/18(土) 00:44:07
>>48
>>37の問題を読む感じでは、
write(*, '(i7, f15.7 f15.7)') int(x), log10(x), log(x)
を予期していると思われる。

>>46はもう少し貰った回答例をよく吟味しろw
0050デフォルトの名無しさん2006/11/18(土) 01:00:15
PukiWiki つくってみた
http://www.moecity.jp/home/fortran/

wikiよく知らない。自由に使ってみてくれ。
■ このスレッドは過去ログ倉庫に格納されています