FORTRAN III

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
FORTRAN総合スレッドです。
FORTRAN77/90/95/2003, HPF等、FORTRAN全般に関する話題を書き込んで下さい。

・前スレ
FORTRAN II
http://pc5.2ch.net/test/read.cgi/tech/1068351911/
Fortran
http://pc2.2ch.net/test/read.cgi/tech/1003214738/
2デフォルトの名無しさん:05/01/03 12:50:01
・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/
3デフォルトの名無しさん:05/01/03 12:50:32
・フリー/無料評価版のコンパイラ
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 (期限付きトライアル版, Win/Linux, 要登録)
http://www.lahey.com/downloads.htm
4デフォルトの名無しさん:05/01/03 12:51:04
・ドキュメント
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/
5デフォルトの名無しさん:05/01/03 12:51:35
・チュートリアル等
Fortran90プログラミング
http://www.ip.media.kyoto-u.ac.jp/htomita/
Fortran 90 言語マニュアル
http://www.rs.kagu.tus.ac.jp/yama/
やさしいフォートラン講座
http://www.g.dendai.ac.jp/kouza/top.htm
Fortran ResQ - Fortran初心者に捧ぐ
http://homepage.mac.com/galois21/fortran/index.html
FORTRANプログラミング初級編
http://svr01.damp.tottori-u.ac.jp/~akimoto/Fortran/
FORTRAN 77 入門
http://www-aos.eps.s.u-tokyo.ac.jp/~takagi/f77-enshu/index.html
6デフォルトの名無しさん:05/01/03 12:51:57
71:05/01/03 13:05:33
前スレが落ちたようなので、立ててみました。

というわけで、後は任せた。
オレはもう寝る。
8デフォルトの名無しさん:05/01/04 03:23:17
とりあえず乙>>1
9デフォルトの名無しさん:05/01/06 02:18:46
>>1

print *,"乙"
10デフォルトの名無しさん:05/01/13 13:20:51
配列変数の宣言なんですが、引数の範囲を実数で指定すればうまくいく。
引数の範囲を同じ値の変数で指定すれば範囲が大きいときにstackoverflowがでる。
という現象が起こっています。
なぜでしょうか?
11デフォルトの名無しさん:05/01/14 04:20:26
>>10
>配列変数の宣言なんですが、引数の範囲を実数で指定すればうまくいく。
>引数の範囲を同じ値の変数で指定すれば範囲が大きいときにstackoverflowがでる。

いまいちよく解らないんだが。

SUBROUTINE FOO(A, N)
REAL A(N)
・・・

とかやってるってこと?
1277:05/01/15 03:25:49
どうも失礼します・・・ fortran77使ってます。
temp = v(im,jm,km)*(x(number)-r(1))*(z(number)-r(2))*(y(number)-r(3))
& +v(im,jm,kp)*(x(number)-r(1))*(z(number)-r(2))*(r(3)-y(number-1))
& +v(ip,jm,km)*(r(1)-x(number-1))*(z(number)-r(2))*(y(number)-r(3))
& +v(ip,jm,kp)*(r(1)-x(number-1))*(z(number)-r(2))*(r(3)-y(number-1))
& +v(ip,jp,km)*(r(1)-x(number-1))*(r(2)-z(number-1))*(y(number)-r(3))
& +v(ip,jp,kp)*(r(1)-x(number-1))*(r(2)-z(number-1))*(r(3)-y(number-1))
& +v(im,jp,km)*(x(number)-r(1))*(r(2)-z(number-1))*(y(number)-r(3))
& +v(im,jp,kp)*(x(number)-r(1))*(r(2)-z(number-1))*(r(3)-y(number-1))
この括弧の数はあってると思うんですが、最後の行で、
Syntax error, found END-OF-STATEMENT when expecting one of: , )
& +v(im,jp,kp)*(x(number)-r(1))*(r(2)-z(number-1))*(r(3)-y(number-1))
-----------------------------------------------------------------------------------^
というエラーが。。。括弧以外に原因があるのでしょうか??
13デフォルトの名無しさん:05/01/15 08:20:16
>>12
72桁超えてる。
1410:05/01/15 14:38:24
>>11
全くそのとおりです。説明が不足でした。
サブルーチン呼び出し時に値を渡し、
サブルーチン内でその変数を使って配列を宣言しているのです。
15デフォルトの名無しさん:05/01/16 00:15:25
>>10
>引数の範囲を実数で指定すればうまくいく。

整数だよね

>引数の範囲を同じ値の変数で指定すれば範囲が大きいときにstackoverflowがでる。

日本語がよく分からんが、配列の次元を馬鹿でかくするという意味なら、関数またぐ時だし、仕様かな。
ただ、ソースも具体的な数字もないので、何とも言えんが。
http://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/pg/pg04_02_43.htm


16デフォルトの名無しさん:05/01/17 00:05:24
想像するに 10 は

「配列変数の宣言なんですが、添え字の範囲を定数で指定すればうまくいく。
添え字の範囲を、引数で渡される変数で指定すれば範囲が大きいときにstackoverflowがでる。
という現象が起こっています。
なぜでしょうか? 」
といいたいのでは?

であれば、
・前半は、配列は、ふつーの配列であり、ヒープからメモリが割り当てられる
・後半は、配列は、自動割付配列となり、スタックからメモリが割り当てられる


対処法は
>>15にあるように、スタックサイズをあげる
・F90で書き、配列をALLOCATEによって確保する
あたりか?

17勉強になります:05/01/19 16:57:20
ここの過去ログはどこかに置いていませんか?
18デフォルトの名無しさん:05/01/20 06:07:45
>>17
Fortran
http://pc5.2ch.net/tech/kako/1003/10032/1003214738.html

「FORTRAN II」(2スレ目)の方はもうしばらくしてhtml化されるのを待つか、●を買え。
1917:05/01/21 14:13:37
>>18
どうもありがとうございます。
20デフォルトの名無しさん:05/01/27 08:36:09
3次関数の最小自乗法による係数決定のやり方はどこかにありませんか?
21デフォルトの名無しさん:05/01/27 10:08:32
22デフォルトの名無しさん:05/01/28 00:38:31
>>20
>>2の一番上にあります。
23デフォルトの名無しさん:05/01/28 03:34:05
unformattedなファイル読み込みルーチン作製中です。
unformattedで書き込んだファイルのreadは全く問題ないのですが、
openの際に、うっかりそうでないファイルを指定した時の振舞で悩んでます。

やりたいことは「ファイル先頭をチラっと見る。意図してないファイル形式なら
その旨のエラー出して終了」です。ですが、ウチの環境で不適切なファイルを
unformattedでopenすると、readの段で強制的にプログラムが停止してしまいます。
これではエラー出すヒマが無く、一方で(私の知識の範囲内では)ファイルの判断には
readをするしかないため、どうにもジレンマに陥ってしまいました。

何かイイ方法御存知の方いらっしゃいますでしょうか?
当方 RHEL3(amd64) + Intel Fortran 8.1 であります。
24デフォルトの名無しさん:05/01/28 21:29:21
>>23
iostatでチェック
25デフォルトの名無しさん:05/01/29 20:10:08
データファイルから読み込むのに、一行に一つのデータでファイルを作ると
読み込むのに、一行に "," 区切りで複数のデータを与えたら一つ目のデータ
しか正しく読めず、あとのデータが????に成ります。
どうしたらいいのでしょうか。
Salford FTN77です。
26デフォルトの名無しさん:05/01/29 22:03:34
Fortranで
 ・Cの仕様書工房
 ・Cppunit
みたいなツールってないでしょうか?
27デフォルトの名無しさん:05/02/07 13:19:58
変数 / 関数の型を表示したり、変数の共有のされ具合が分かる
emacs lisp を探しています。
fortran はハンパじゃないので etags だけではちょっと無理です。。。
28デフォルトの名無しさん:05/02/07 21:02:21
>>25
データの数かFORMATの指定が間違ってない?
うちの環境では","で区切っても正しく読み込めたけど。
29デフォルトの名無しさん:05/02/14 17:13:31
基礎的なことなんですがx^nを求める関数は何でしょうか?
30デフォルトの名無しさん:05/02/14 17:28:22
x**n
31デフォルトの名無しさん:05/02/15 20:35:27
Fortranの規格名称のことでちょっと教えてください。
『Fortran 95』というふうに95の前にスペースを入れるのと,
『Fortran95』というふうにスペースを入れないのと,
どちらが正しいのでしょうか?
32デフォルトの名無しさん:05/02/15 21:32:04
どちらも正しくない。それは通称だ。
33デフォルトの名無しさん:05/02/15 21:33:18
特に決まりは無いと思うよ。ぐぐる君の意見だと『Fortran 95』の勝ちだね。

"Fortran 95" の検索結果 約 107,000 件
"Fortran95" の検索結果 約 12,800 件
3431:05/02/15 21:44:34
>>32-33
THANX!
35デフォルトの名無しさん:05/02/15 21:55:33
>>31
ちなみに Fortran 95 の規格は
 ANSI X3J3/96-007
 JIS X 3001:1998
 ISO/IEC 1539-1:1997
内容は全部同じ。
3631:05/02/15 22:56:25
>>35
わ,そうだったんですか!
詳しいフォロー,ありがとうございました。
37デフォルトの名無しさん:05/02/19 02:09:05
WinXP のパソコンで Fortran 90 のコーディングをしたいのですが,
Salford FTN95 を使うか,それとも,うちの職場にあった唯一の
PC用Fortranコンパイラである Fortran PowerStation 4.0 を使うか,
迷っています。
(他の商品版を買うのは高くて,今のところは躊躇しています)

Win95の頃に発売された Fortran PowerStation 4.0 は Win XP に
インストールしてもコンパイルなどは正常に行われるのでしょうか?
38デフォルトの名無しさん:05/02/19 09:22:14
>>37
WindowsXP上で、FORTRAN77のソースをコンパイル、正常実行できた記憶があるよ

39デフォルトの名無しさん:05/02/20 09:27:24
> 37
cygwin上でgcc-4.0(CVS版ですが)をmakeしてみる. gfortranができるが
これがf90. 簡単なやつでテストしてみましたが, よっぽどf90の機能を
使ってない限り, 大丈夫そうでした.
40デフォルトの名無しさん:05/02/20 13:45:59
g95 の linux バイナリがあるということは,
cygwin か coLinux を入れればフォートランランランってことなんじゃないかな.
41デフォルトの名無しさん:05/02/20 18:31:41
g95なら >>3 にWindows用のバイナリも置いてあるわけだが。
4237:05/02/21 20:45:14
>>38-41
レスありがとうございました m(_ _)m"
43デフォルトの名無しさん:05/02/22 19:47:40
Windows XP をサポートしている商用版の Fortran 90 或いは Fortran 95 コンパイラで
お薦めのものがあったら教えてください。
4443:05/02/22 19:49:48

できれば日本語マニュアルがあって,便利なライブラリも付属しているものが良いですが‥‥。
ご存じのかた,よろしくお願いします m(_ _)m"
45デフォルトの名無しさん:05/02/22 20:58:15
>>43
Intel の Visual Fortran

何をするのに「便利な」ライブラリが欲しいのか知らないが
Windows上でグラフィックが使える QuickWin や
Pro版にはIMSLも付いている。

また付属ではないが、Windows上の事実上の標準なので
MKL や Lapack(95) 、 f90gl 等、有名どころのライブラリは
大抵使える。
4643:05/02/22 22:16:45
>>45さん,ありがとうございました。
ライブラリの件ですが,目指しているのは地球のダイナモの成因となる
外核のMHDシミュレーションなので,その数値計算に便利なライブラリが
あればと考えています(地球流体電脳ライブラリが既に存在してはいますが)。
47デフォルトの名無しさん:05/02/22 23:28:18
g95って,ホームページには There are still bugs buried here and there. (あちらこちらに
バグがまだ埋まっている)と書いてありますが,どういうバグなのでしょうか?
コンパイルや計算が正しく行われなかったりするのでしょうか?
48デフォルトの名無しさん:05/02/23 09:47:51
>> 43
ttp://www.polyhedron.co.uk
にベンチマークも含めてのっていますよ
4943:05/02/23 19:04:02
>>48
情報ありがとうございました。
早速見てみます。
50デフォルトの名無しさん:05/02/25 08:41:43
あるsubroutineの中からその属するsubroutineと同じsubroutineを呼び出したのですが
どうすればいいでしょう?

下記のようなプログラムを書きたいのですが
コンパイルできません。

program main
call hoge
end
subroutine hoge
write(6,*) "hello world"
call hoge
return
end
51デフォルトの名無しさん:05/02/25 12:27:16
>>50
f90の場合だと再帰的呼び出しにすれば大丈夫でしょう。サブルーチン宣言の頭に recursive をつけるだけでいいんじゃないでしょうか?

recursive subroutine hoge
52デフォルトの名無しさん:05/02/27 15:50:53
>>50
ちゃんと再帰から抜けるようにしとけよ。
無限ループやるなよ。
53デフォルトの名無しさん:05/03/02 20:44:06
ちょっとお聞きしたいのですが,write文でcsv形式を書くにはどうしたらいいでしょう?

write (10,'(50d15.7)') TT,(U(j)/K(j), j=1,NMax)

上のようなwrite文を書くとします.その際,csv形式で出力したいのですが,'(50d15.7)'というような書き方をするときに「カンマ」をどうやって紛れこませるか?--ということをお聞きしたいのです.

write(10,1000) TT,(U(j)/K(j), j=1,NMax)
1000 format(d15.7,',',d15.7,','d15.7)
というような形式で書くのならわかるのですが...何十回も繰りかえすのはメンドイもので.御存じの方よろしくお願いします.
54デフォルトの名無しさん:05/03/02 21:22:25
>>53
自己レスです.

write (10,"(49(d15.7,','),d15.7)") TT,(U(j)/K(j),j=1,NMax)

と書けばうまく逝きました.
失礼しました.
55名無しさん:05/03/03 14:57:29
すみませんご教授下さい。
Fortranで作られたプログラムWindowsで(DOSで)動かしたいんですが、一応データファールとかも揃えて走らせると、
最初の1行だけ読んで「cannot open file "F90.EER" #__」みたいなメッセージが出て計算されません。
これはいったいどういうことなのでしょうか?

ちなみにファイルはここの「TWINSPAN」です。

http://cc.oulu.fi/~jarioksa/softhelp/softalist.html
56デフォルトの名無しさん:05/03/03 15:20:57
>>55
もっと詳しく
57名無しさん:05/03/03 15:26:46
>>56
すんません。

昔、同じプログラムをNEC98(5インチ時代)に使ったことあってそん時は問題なかったんですよね。
DOSプロンプトのあとにexeファイル名(TWINSPAN)を入れて実行させると、inputデータファイルを尋ねてくるのでそのファイル名を入れてリターンすると
「Cannot Open Error file "F90.EER", error #151」
てのが出て終わってしまいます。

中身はそのまま触ってないので、これ以上のことはわからないのですが・・・
58デフォルトの名無しさん:05/03/03 17:51:40
>>57
> 「Cannot Open Error file "F90.EER", error #151」
"F90.EER" ではなく "LF90.EER" では?

Run time error messages from LF90
ttp://agbu.une.edu.au/~kmeyer/errmsg.html
> 151 File specified STATUS= "OLD" doesn't exist (see "Input/Output" in the Essential Lahey Fortran 90 Reference).

ようするに、入力ファイルが無い or 名前が違う。
59名無しさん:05/03/03 18:10:54
>>58
ありがとうございます。

そうです「LF90.EER」でした。済みません。
入力ファイルがないとは、inputデータファイルが読めていないということでしょうか。
データ行の1文目は読んでいるんですが。
それか、もはや元のファイルがないのかな。
済みませんあまりに素人で。
60デフォルトの名無しさん:05/03/13 09:11:58
gfortran(GCC4.0)でnamelist読みこませた人います?
&abc
de=5
fg=3.1
&end
だと読み込まず
&abc de=5 fg=3.1/
でもだめでした。
方言があるんですかね。
61デフォルトの名無しさん:05/03/15 11:12:48
↑です。
使っているプログラムでうまくいかなかったのでテストプログラムを作ってみました。
その結果、結果が異なりましたので訂正します。
以下のプログラムコンパイルして実行するとエラーになります。
FC3 gcc4-gfortran-4.0.0.29.x86_64.rpm


programe main
integer i,j,k
dimension j(10)
character*20 c
namelist /n1/i,j,k,c
read(5,nml=n1)
write(6,n1)
end


./hoge
&n1
i=20
k=3
j=1,2,3,4,5,6,7,8,9,0
c='test'
&end
cannot match a namelist variable

g77だとコンパイルして実行すると、正常に動きます。
いろいろ探したらg95に行き当たりました。これだと正常にコンパイル,実行できました。
g95(gcc 4.0.0 20050124 (g95) Mar 12 2005)

gcc4.1コレクションも試しましたが、このバグは、直っていませんでした。
62デフォルトの名無しさん:05/03/20 05:03:23
ずいぶん前のことですみませんが,ご存じのかた教えて下さい。

MS-FORTRAN Ver.5.1 は Fortran 90 に似て非なる物だったという記憶があるのですが,
ふと思い立って,8年くらい前に買った森北出版の 「FORTRAN 77 と Fortran 90」 の
「2部:Fortran 90編 Fortran 90とMS・FORTRAN」を見て
自分で確かめようとしたら,本棚から行方不明になってて
確かめることができませんでした。

MS-FORTRAN Ver.5.1 は Fortran 90 と同一のものだったのか,
あるいは Fortran 90 に独自拡張を加えただったのか,
それとも,似ているけど違うものだったのか
ご存じのかた,教えて下さい。
63デフォルトの名無しさん:05/03/20 08:30:04
>>62
実際にMS-FORTRANを使ったことはないですのが
手元に「FORTRAN 77 と Fortran 90」があったので
確認してみたところ、MS-FORTRANは
"Fortran 90 の一部機能を含む独自拡張仕様"
のようです。

F90との主な違いは
・継続行の指示記号は "&" ではなく "-"
・構造体の宣言は TYPE ではなく SURUCTURE
・ポインタ、WHERE文、モジュール等がない
などだそうです。
6462:05/03/20 10:12:45
>>63
解説情報をアップして下さって,本当にありがとうございました。助かりました。
日曜の朝早くから妙な話題につきあわせてしまい,すみませんでした。
6562:05/03/20 10:48:26
再度すみません。
もうひとつ教えていただきたいことがあるのですが,「FORTRAN 77 と Fortran 90」 の本で
扱われている MS-FORTRAN について,本の中でバージョン番号は書かれていますでしょうか?
66デフォルトの名無しさん:05/03/20 11:15:39
>>65
書籍では「Microsoft FORTRAN V5.1」を用いたということで、巻末の参考図書に
 マイクロソフトの「Microsoft FORTRAN - Reference -」(1991)
が挙げられています。
ちなみに Fortran 90 の方は「NAGWare f90 Compiler」でテストしたということです。
(2003年5月20日発行の第1版第7刷で確認)
6762:05/03/20 11:47:08
>>66
詳細な情報をいただき,感謝申し上げます。
二度もお答え下さり,本当にありがとうございました。
68デフォルトの名無しさん:2005/03/27(日) 01:22:58
GUI WindowsアプリにFORTRANのソースを組み込みたいのだけれど、どうしたらいい?
69デフォルトの名無しさん:2005/03/27(日) 15:29:34
>>68
@VFで、GUI WIN32アプリをFortranで組む。
AC/C++でGUI組んで、C/C++からFortranの関数を呼ぶ。
70デフォルトの名無しさん:2005/03/27(日) 20:37:33
>>68
VFならDLLをつくるという手もある。
71デフォルトの名無しさん:2005/03/29(火) 00:06:04
>>68
CVFならCOM DLLをつくるという手もある。
72デフォルトの名無しさん:2005/03/29(火) 01:30:03
>>68
ほとんどのコンパイラが DLL を作れます.
あとはシンボルを調べれば好きな言語から呼べます.
73デフォルトの名無しさん :2005/03/31(木) 23:09:58
Intel fortran compiler 8.0 for linuxを使っています。
プログラムの中でサイズの大きいファイルを開こうとすると、
forrtl: File too large
forrtl: severe (30); open failure , unit 10, file 〜
というエラーが出て止まってしまいます。
このような場合はどう対処すればいいのでしょうか。
どなたかご存知の方がおられましたら、どうかよろしくお願いします。
74デフォルトの名無しさん:int 2ch =05/04/02(土) 08:51:56
>>73
100Gのファイルでも開こうとしたのか?
7573:2005/04/03(日) 01:07:16
約4Gです。
76デフォルトの名無しさん:2005/04/03(日) 10:41:19
2G以下のファイルに分ける
77分かんにゃいからHELP。:2005/04/03(日) 11:02:57
例えば、「Input No.:」と出力させた直後に改行せず入力したい場合には
どのようなコードにすればいいのでしょうか?
いろんなテキストを見たけど載ってない…。
78分かんにゃいからHELP。:2005/04/03(日) 11:06:24
あと、もう一つあります。
「write(*,*) 'へろー,わーるど?'」と
「print*, 'へろー,わーるど?'」とでは本質的にどう違うんですか?
79デフォルトの名無しさん:2005/04/03(日) 12:34:39
>>77
advanc='NO'を出力時に指定する。

>>78
77か90か
80デフォルトの名無しさん:2005/04/03(日) 13:34:12
write(*,*) 顔に見える
print*, 顔に見えない
81分かんにゃいからHELP。:2005/04/03(日) 19:03:17
>>79
ヒント、アリガトウございました。使っているのは 90 の方です。
「character NO」を宣言しなければならないんですね。
あと、「advance」ですよね。

「write(*,'(A)',advance='NO')」のように使っていますが、「'(A)'」は
文字列の指定を意味しているんですか?
例えば「'(I)'」の時なんかは整数かな、と推測できるのですが「'(A)'」に
ついては馴染みがないんで教えて欲しいです。
8273:2005/04/03(日) 21:36:34
2GB以上のファイルを読むためのオプションみたいなものはないものでしょうか。
83デフォルトの名無しさん:2005/04/03(日) 23:31:52
>>82
一般的な32 ビットプラットフォームのLinuxでは,最大ファイルサイズが2Gバイトに制限されているので、

@64 ビット環境でコンパイルする。
A32 ビットアーキテクチャなら、LinuxのカーネルをLarge File Supportが有効な新しいものに変える。
8473:2005/04/04(月) 17:54:48
アドバイスありがとうございます。
こちらでも調べてみましたが、Large File Supportはカーネル2.4から組み込まれているみたいです。
今私が使っているlinuxのカーネルは2.6なのですが、Large File Supportは有効にはなっていないのでしょうか。
それとも他に何か原因があるのでしょうか。
85デフォルトの名無しさん:2005/04/04(月) 17:58:18
86デフォルトの名無しさん:2005/04/08(金) 18:26:56
87デフォルトの名無しさん:2005/04/12(火) 10:09:32
fortran用のeclipseプラグインだって

http://www.photran.org/
88デフォルトの名無しさん:2005/04/15(金) 00:08:45
>>87
ダウンロード画面にベトナム料理屋が表示されるね。
フォーのレストランてことか。
89デフォルトの名無しさん:2005/04/17(日) 00:48:05
スレ汚しですみませんが…… Fortranプログラミングに煮詰まったときの
現実逃避で『 諸君 私はFortranが好きだ 』というネタ演説を作ってみました。
先月,私がガイドライン@2ch板に投稿したものに少々手直し。
>>63 & >>66 さん,先月は失礼いたしました。実はあの朝はこれを打っていました。)

ttp://www.geocities.co.jp/Technopolis/4404/i_love_fortran.html

スレ汚し,大変失礼いたしました m(_ _)m"
9089:2005/04/20(水) 01:07:42
↑をギコナビじゃなく IE で見て,いま初めて気がついた‥‥
何故 h が抜けてたんだか‥‥ orz

演説 『 諸君 私はFortranが好きだ 』
http://www.geocities.co.jp/Technopolis/4404/i_love_fortran.html

再度のスレ汚し,本当に! 本当に失礼いたしました m(_ _;)m"
91ega:2005/04/20(水) 03:43:26
課題で、適当な数字をキーボードから入力して、
文字列に変換して出力するサブルーチンを作れ
といわれたんですが、だれか教えてくらさい。
92デフォルトの名無しさん:2005/04/20(水) 08:02:09
93デフォルトの名無しさん:2005/04/20(水) 12:29:53
>>91
ヘンな課題ですね。
9489:2005/04/20(水) 18:45:03
>>91
VAX FORTRAN という Fortranコンパイラの文法を解説した Webページの
http://www3.jpn.hp.com/upassist/ktree/cr/vms/v030/v030-04-08.html
で,「メモリ内部入出力」という方法で行う 数値型 ⇔ 文字型 の型変換が
紹介されていました。

要するに,WRITE文を使って「メモリ内部入出力」というのを行うことで
数値型から文字型へ変換しています。すなわち,

WRITE(文字型変数名,FORMAT文番号) 数値型変数名

というようにコーディングすると,数値型変数の値が文字型に変換できるというものです。
以下にプログラム例を示します。
(WindowsXP上の Cygwin の g77 で動作確認しました。
ただし,他のどんな Fortranコンパイラでも動く普遍的な Fortran文法なのか
どうかは知りません。ご存知の方,フォローして下さると助かります。)
9589:2005/04/20(水) 18:46:23
● 整数の場合
例えばマイナス符号を含めて5文字以内の整数なら
      WRITE(moji,100) seisuu
  100 FORMAT(I5)
とコーディングして型変換します。

【プログラム例1】

      PROGRAM main
      INTEGER seisuu
      CHARACTER*5 moji
      CALL int2char(seisuu,moji)
      STOP
      END

      SUBROUTINE int2char(seisuu,moji)
      INTEGER seisuu
      CHARACTER*5 moji
      WRITE(*,*) 'マイナス符号を含めて5文字以内の整数をキー入力せよ'
      READ(*,*) seisuu
      WRITE(moji,100) seisuu
  100 FORMAT(I5)
      WRITE(*,*) 'あなたが入力した整数は',moji,'です'
      RETURN
      END
9689:2005/04/20(水) 18:47:26
● 実数の場合
例えばマイナス記号を含めて整数部が4文字以内,小数部が3桁以内の実数なら
      WRITE(moji,100) jissuu
  100 FORMAT(F8.3)
とコーディングして型変換します。

【プログラム例2】

      PROGRAM main
      REAL jissuu
      CHARACTER*8 moji
      CALL real2char(jisuu,moji)
      STOP
      END

      SUBROUTINE real2char(jisuu,moji)
      REAL jissuu
      CHARACTER*8 moji
      WRITE(*,*) 'マイナス記号を含めて整数部が4文字以内で'
      WRITE(*,*) '小数部が3桁以内の実数をキー入力せよ'
      READ(*,*) jissuu
      WRITE(moji,100) jissuu
  100 FORMAT(F8.3)
      WRITE(*,*) 'あなたが入力した実数は',moji,'です'
      RETURN
      END
97デフォルトの名無しさん:2005/04/20(水) 19:28:17
文字に変換してなんか意味あるのかな?
9889:2005/04/20(水) 19:31:48
訂正というか補足というか蛇足というか。
>>94 での

WRITE(文字型変数名,FORMAT文番号) 数値型変数名

の「FORMAT文番号」の部分は正しくは,

WRITE(文字型変数名,FMT=書式識別子) 数値型変数名

ですね。FMT= を省略してコンマのあとにすぐ書式識別子を置いても可。
なので,>>95 のプログラム例1での

      WRITE(moji,100) seisuu
  100 FORMAT(I5)

の二行は

      WRITE(moji,'(I5)') seisuu

また,>>96 のプログラム例2での

      WRITE(moji,100) jissuu
  100 FORMAT(F8.3)

の二行は

      WRITE(moji,'(F8.3)') jissuu

というように一行にまとめてもOKです。
むしろ 文番号を使わないで済むので,特に Fortran 90 以降なら
こちらのほうがすっきりして良いかもしれません。
9989:2005/04/20(水) 19:41:47
>>97
僕も最初そう思ったんですが,ついさっき,
「commonで定義した変数を文字型に変換してファイル名に使いたい」という例を見つけました。
http://okweb.jp/kotaeru.php3?q=797367

>>91さんには,その課題の出された背景を教えてほしいです。
どんな使われ方をするのか興味があります (^ ^)
10089:2005/04/20(水) 20:11:57
>>94
> ただし,他のどんな Fortranコンパイラでも動く普遍的な Fortran文法なのか
> どうかは知りません。ご存知の方,フォローして下さると助かります。

‥‥に対する自己レス (うざくてすみません)。

WRITE文とREAD文の装置番号のところに文字変数を置くやり方は,
培風館から出版されている「Fortran90プログラミング」の
著者・冨田博之先生の同名サイトの中の
http://www.ip.media.kyoto-u.ac.jp/htomita/sec7.html#7.2.
で,「内部ファイルの方法」として紹介されていました。

(装置番号が)文字変数:プログラム中で使われている文字変数に読み書きできる。
                「内部ファイルの方法」といい,必ず書式を指定すること。
101ega:2005/04/20(水) 20:32:26
>>89さん
サンクスです。助かりました。課題は、fortranを覚えるために出された数問のなかにありました。
何に使うかはわからないのですが、私がc言語を知っているという背景を配慮して、
cとfortranを関連付けるためなのかとも思いました。私自身もまだよくプログラムに関しては
よく理解してないのでわかりませんが、研究とかにはまず使わないと思います。

本当になんでこんな変な問題がでたんでしょうね。
とにかくありがとうございました。
10289:2005/04/20(水) 21:15:51
>>101 egaさん
いえいえ,お役に立てたようで何よりです。
こちらこそ,今まで知らなかった WRITE 文と READ 文の使い方が判って勉強になりました。
僕は Fortran と VB がメインなので C のことはよく判らないのですが,
VB なら Str 関数で一発だから,Fortran にも似たのがあるんだろうと思って
軽い気持ちで調べ始めたら,これが見つからない見つからない (^ ^;
やっぱり Fortran は科学技術計算用の言語なんだなと改めて思いました(笑)
103デフォルトの名無しさん:2005/04/20(水) 21:23:53
でも、write文で文字列変数をファイルに見立ててカキコするなんてヘンなん仕様だな。
全角で数字入れたらどうなるんだろう?
104デフォルトの名無しさん:2005/04/20(水) 21:54:13
>>103
WRITE(moji,100) seisuu
100 FORMAT(I5)
に行く前にすぐ前の
READ(*,*) seisuu
のところでエラーになるんじゃないの?
105デフォルトの名無しさん:2005/04/20(水) 22:47:57
>>90 の Fortranが好きだ演説、笑ったw
そういや意外と今まで無かったんだな。C言語が好きだバージョンなら見たことあるが。

ところでF言語って初めて知ったが、拡張子は何なん?
106デフォルトの名無しさん:2005/04/21(木) 10:01:30
ちなみに、内部ファイルはFORTRAN77でもある。
それ以前でもあるかどうかは知らない。

文字から数値への変換はたまに使った。
CSV読む時とか。
107デフォルトの名無しさん:2005/04/23(土) 17:56:04
ちょっと質問、

複数の実数型多次元配列(a, b, c,...)を1つの1次元配列にパックしたり、
アンパックしたいのだけど、できれば、元の多次元配列の形も一緒にパックして

{ aの次元数, size(a,1), size(a,2), ... , a(1,1,...), a(2,1,...), ...
bの次元数, size(b,1), size(b,2), ... , b(1,1,...), b(2,1,...),...
cの次元数, size(c,1), size(c,2), ... , c(1,1,...), c(2,1,...), ....}

みたいにしたい。 Fortran90では無理?
108デフォルトの名無しさん:2005/04/24(日) 01:28:23
win上で動く早いコンパイラで無料のってなんですか?
cygwinは遅いと聞いたので不安になって・・・・
109デフォルトの名無しさん:2005/04/24(日) 04:09:09
>>108

>>2 の 「x86で動作するFortranコンパイラ」 に評価版などの紹介がある。
http://www.nminoru.jp/~nminoru/programming/x86-fortran.html

あと,Salford の FTN95 Personal Edition (英語版) なら 個人用途限定・非商用用途・サポート無し で 無料・無期限
http://www.salfordsoftware.co.uk/software/downloads/compilers.html
110デフォルトの名無しさん:2005/04/24(日) 04:13:47
>>108

>>3 に 「フリー/無料評価版のコンパイラ」 一覧があったや。
111108:2005/04/24(日) 13:44:59
もちろんそれらのサイトは見ました。
質問がわかりにくくてごめんなさい。

現在数値計算をしているんですがcygwinは
FORTRANコードをF2Cみたいなもので一度C言語に書き換えて
それをコンパイルするみたいなこと(よって遅い)を聞いたので、
無料の中でも早いもの。。はなんですか?という質問です。

ごめんなさい。
112デフォルトの名無しさん:2005/04/24(日) 14:58:38
>>111
PolyhedronのベンチマークではFTN77/95ともにg77より良好な結果が出ている。
OpenWatcomもほとんどの場合、g77よりも速いようだ。

実際にどの位速くなるかは自分の環境で試してみないとわからない。
#物によってはほとんど変わらない/かえって遅くなるということもなきにしもあらず。

とにかく速い物が欲しいのであれば財布と相談して商用の物を購入するか
Linuxを入れてIntel Fortranの非商用版を使う方がいい。
113108:2005/04/24(日) 16:47:27
>>112
ありがとうございます。
FTN95入れてみます。
114デフォルトの名無しさん:2005/04/24(日) 21:29:34
>>112
すみません,Linux版 Intel Fortran の非商用版(無期限フリー?)はどこで入手できるのでしょうか?
Intel(日本)とエクセルソフトのサイトを見ても情報が見つからなかったので‥‥。
115デフォルトの名無しさん:2005/04/24(日) 22:26:34
>>114
Free Non-Commercial Software Development Products for Linux
ttp://www.intel.com/software/products/noncom/index.htm

ここから登録とダウンロードが出来る
…はずなんだけど、今つながらない?
116114:2005/04/24(日) 22:39:30
>>115
アクセスできました。情報ありがとうございました m(_ _)m"

117デフォルトの名無しさん:2005/04/25(月) 01:03:19
ftn77やftn95を使ってMS-DOS上のコマンドプロンプトでプログラムを
コンパイル、実行したいのですが「ftn77(ftn95) 〜〜.f」
とうつだけでは〜.exeの実行ファイルができません。〜.obj
というファイルはできるようなのですが。どのようにしたら
コマンドプロンプト上でコンパイル・実行できるのかどなたか
教えていただけますか?
118デフォルトの名無しさん:2005/04/25(月) 02:24:19
>>117
ググッてみたところ,FTN77 についてなら,
ttp://www28.tok2.com/home/kasayan86/fortran/fortran.htm
の ページ中ほどの 『2 Salford FTN77』 で簡潔に説明されていました。
119デフォルトの名無しさん:2005/04/25(月) 02:49:21
>>118
この方法でftn77のみでなくftn95に関しても実行ファイルを
作成してプログラムをまわすことができました。
問題も解決して気持ち良く寝れそうです。大変ありがとうございました。
120118:2005/04/25(月) 03:06:29
>>119
FTN95 については先ほど http://www.silverfrost.com/23/ftn95/ftn95_documentation.asp から
Salford FTN95 User Guide (Including Clearwin+ and Plato3 documentation) をダウンロードして
ざっと見てみたんですが,
・The /LINK compiler option
・Compiler options on a command line
という2つのオンラインヘルプによると,

FTN95 <pathname> /LINK

としてやれば,コンパイラが <pathname>.F95 (or .F90) という名前のファイルを探してコンパイルした後に
リンカが自動的に起動して,<pathname>.EXE を生成するらしいです (この場合は .OBJファイルは保存されないらしい)。

例えば,MYPROG.F95 から MYPROG.EXE を生成したいなら

FTN95 MYPROG /LINK

但し,こちらの手元では試していないので間違ってたらすみません。
また,僕の訳も間違っているかもしれないので,念のためにご自身で上述のユーザ・ガイドをダウンロードして
・The /LINK compiler option
・Compiler options on a command line
その他,コンパイルに関係しそうなヘルプを検索して,一読されることを強くお薦めします。
121117:2005/04/25(月) 23:57:36
>>120
確かにftn95 〜〜.f /link とすると直接実行ファイルが生成されました。
まだ、プログラムを始めたばかりでまだまだ分からないことだらけで。。。
ご丁寧に説明して頂きありがとうございました。
ヘルプを一読してみたいと思います。
122sage:2005/04/27(水) 19:42:23
FORTRAN90で、

INTEGER :: ARRAY(5)
ARRAY(1) = 1
ARRAY(2) = 2
ARRAY(4) = 4
DO I = 1,5
WRITE(*,*) ARRAY(I)
END DO
END

のように、ところどころ値のない配列をDOループで出力
(値の無いときは空行)したいのですが、値のないところで
Reference to undefined character
のエラーを出さないように対処するにはどうしたらよいかどなたかご教授下さい。
コンパイラはSalfordのFTN95です。
123デフォルトの名無しさん:2005/04/27(水) 22:13:24
-999とかですべてを初期化して、-999なら空行を書けばいいだけでは
-NaNが入ってるともかぎらんしね。
124デフォルトの名無しさん:2005/04/27(水) 22:39:33
>>122
write文の引数に「err=行番号orラベル」を追加して、
そこでエラー処理(今の場合は空行出力)。


125デフォルトの名無しさん:2005/04/28(木) 16:53:33
>>122
INTEGER,PARAMETER :: IUNDEF = HUGE(1)
INTEGER :: ARRAY(5) = IUNDEF
ARRAY(1) = 1
ARRAY(2) = 2
ARRAY(4) = 4
DO I = 1,5
IF (ARRAY(I) /= IUNDEF) WRITE(*,*) ARRAY(I)
END DO
END

コンパイラの未定義チェックの多くは、へんてこな値を未定義に予約して
それを参照したりすると、警告を出す仕組み。上記のように、自前でやってもいい。
126デフォルトの名無しさん:2005/04/28(木) 21:33:32
普通、不定値があるような配列を操作しないだろ。データ構造から勉強したほうがいいかと。
127122:2005/04/29(金) 08:59:58
初心者質問に答えてくださりありがとうございました。たすかりました。
128デフォルトの名無しさん:2005/04/29(金) 15:28:21
Opteronつかってるのですがインテルのfortranコンパイラでも最適化は適切な物になるのでしょうか?

129デフォルトの名無しさん:2005/05/03(火) 08:58:20
>>128
あまり速くならない。
最新のAMD64ならよいかも。
それよか、gfortranかg95をつかったら。
gfortran(gcc 4.1)は、g77の1.5倍位速い。

130デフォルトの名無しさん:2005/05/05(木) 10:22:43
gfortranは、バグがある。
ひとつは、namelistで配列を使うと正しく読めない。
もうひとつは、清水氏の作った、column-row読み込み速度プログラムが
g77 col 254MB/s row 641MB/s
g95 col 227MB/s row 612MB/s
なのに
gfotran col 37MB/s row 35MB/s
col 65MB/s row 58MB/s
などばらつくし、桁が違う。
どっかおかしい。
131デフォルトの名無しさん:2005/05/05(木) 22:03:47
手許のプログラムはgfortran-4.0ではコンパイル出来なくて,
g95だと出来る.g95のサイトから,毎日のようにコンパイル
済みバイナリをダウンロードしている.
132デフォルトの名無しさん:2005/05/07(土) 02:05:36
自作PGの精度をH/W、コンパイラ両面でいろいろ評価しています。

CompaqコンパイラやIntelコンパイラの場合、
実数や整数を0で(勝手に)初期化してくれてるんですが
PGIやXL Fortranだと初期化してくれない場合があって
精度があいません。

もちろん初期化処理を入れてないのが悪いっちゃあ悪いんですが、
このようなコンパイラの細かい仕様についての情報がある
サイトご存じの方おりましたら教えてください。

ヨロシクお願いします。
133デフォルトの名無しさん:2005/05/08(日) 08:56:48
130だけど
5月1日版のgcc-4.1のgfortranでは、namelistのバグは、なおっていた。
2つめの、配列のアクセス速度のほうは、まだなおっていない。
134デフォルトの名無しさん:2005/05/08(日) 22:49:02
>>132
初期化しないおまえが悪い。
Fortran90なら宣言文で初期化できるので、修正は簡単だよ。

integer :: i=0, j=0

とかね。
135デフォルトの名無しさん:2005/05/08(日) 23:00:00
>PGIやXL Fortranだと初期化してくれない場合があって
>精度があいません。

それは変数初期化ではなく、
使用する浮動小数点フォーマットとか、ライブラリの違い
に起因するものだと思った。
136デフォルトの名無しさん:2005/05/10(火) 06:43:30
FORTRANのよい入門書を教えてください
137デフォルトの名無しさん:2005/05/11(水) 06:37:42
>>136
入門ということで、

ttp://www.amazon.co.jp/exec/obidos/ASIN/4894713217/qid=1115760491/sr=8-1/ref=sr_8_xs_ap_i1_xgl/250-9355971-7357068
読みやすいが、付録の組み込み手続きの説明が、親切じゃない。

ttp://www.amazon.co.jp/exec/obidos/ASIN/4890524932/qid=1115760948/sr=1-9/ref=sr_1_10_9/250-9355971-7357068
非常に良いが、廃刊なのか?
138デフォルトの名無しさん:2005/05/11(水) 17:56:03
はじめまして、教えていただきたいことがあり書き込みします。
計算が途中でおかしくなりデータが NaN になった場合,プログラムが終了するようにしたいのですが、良い方法はないでしょうか?
データの上限下限を設定し, その値からはずれた場合に止まるようにプログラムを書き直すことも考えましたが、
NaNが現れた場合に強制終了するための、もっと簡単な方法がありましたら教えていただけると助かります。
よろしくおねがいします(ノД`) 
139デフォルトの名無しさん:2005/05/11(水) 18:42:38
>>138
コンパイルオプションで一発。
どういうオプションかは、コンパイラのマニュアルに書いてある。
140138:2005/05/11(水) 19:08:10
>139さん
-fpe0 で良いのでしょうか
最適化の後ろにオプションをつけてみたのですが、何かうまくいかなくて
すみません、よく分かってませんで・゚・(ノД`)・゚・。 
141138:2005/05/11(水) 20:17:59
すみません、また138です。もう少し勉強してみました・゚・(ノД`)・゚・。 
-qflttrap で終了させることができることまでわかったのですが、
最適化と同時に使った場合、0/0では終了するのですが、1/0で素通りしてしまいます。
最適化と同時に使う場合、どうすればよいのでしょうか。
なんども申し訳ありませんがよろしくお願いします(⊃д⊂)
142デフォルトの名無しさん:2005/05/11(水) 20:22:56
>>141
1/0はNaNじゃなくて、Infじゃないのかな?

っていうか、もまえがどこのコンパイラ使ってるかわからんし、
俺の家に、お前が使っているコンパイラのマニュアルがあるわけじゃない。

がんばって、マニュアル読んでくれ。
143デフォルトの名無しさん:2005/05/11(水) 20:35:23
>>138
つ IF (ISNAN(x)) STOP
144138:2005/05/11(水) 21:03:38
>>142
がんばって読んでみてます・゚・(ノД`)・゚・。 
コンパイルオプションでできることがわかっただけで大収穫です。
ありがとーー

>>143
それをやると、すべての変数に対して全部書いていかないといけなくなるので・゚・(ノД`)・゚・。 
145デフォルトの名無しさん:2005/05/12(木) 13:23:28
質問です。
intel Visual Fortran ver.8をインストール後
ハロープロジェクトで試そうとしたのですが、
以下のようなメッセージが出て終了してしまいます。
誰か詳しい人お願いします。

-out:hello.exe
-subsystem:console
-entry:mainCRTStartup
hello.obj
LINK : final error LNK1104: コンパイラは、ファイル'ifconsol.lib'を開くことができません。

LNK1104というのはどうもVisual C++のiostream関連のエラーであるらしいのですが、よく判りません…
146デフォルトの名無しさん:2005/05/12(木) 13:24:07
ソースコードは以下のものです。

PROGRAM HELLO
INTEGER I
DO I=1,3
WRITE (*,*) 'HELLO WORLD!'
END DO
END PROGRAM
147デフォルトの名無しさん:2005/05/12(木) 18:16:19
ifconsol.libはIntel付属のコンソールライブラリ。
LNK1104とは単にライブラリファイルが開けないと
VCが言っているだけ。ライブラリのパスが通っていない
とかVCとFortranのバージョンが違うとか。
148デフォルトの名無しさん:2005/05/13(金) 21:44:38
>>145
つ 「インストールと入門」 ガイド 3-8〜3-9
149デフォルトの名無しさん:2005/05/19(木) 08:24:51
簡単にマルチスレッド化する方法を教えてください
150デフォルトの名無しさん:2005/05/19(木) 08:29:07
研究者、大学院生、プロのプログラマのいずれかの方にお聞きします。
興味本位の質問ですが、貴方の職業(ご身分)もあわせて教えていただ
けるとうれしいです。

1)いま仮に何かの物理現象を扱っている1000行ぐらいのフォートラン
プログラムを「ホイ」と渡されたとき、このプログラムの中で実際
何がどういう風に処理されているか、読み解き、必要に応じて
中身をいじれるくらいになるまで、どのくらいの時間がかかりますか?
数時間?数日?数週間?数ヶ月?永遠に無理?

2)上記の作業を効率よくするのにどのようなツールを使っておられ
ますか?例えば、印刷したものをじっくり見るとか、テキストエディタ
で画面を見ながらとか、デバッガーみたいなのとか、その他いい方法が
あったら教えてください。

3)こういったプログラミングの業界は世界と比べて日本は進んでいる
と感じますか?

ちなみに自分は学生なのですが、ある程度フォートランの文法の基礎は
分かってるつもりです。でも、1000行の見ただけで、もうついてけない、
と思ってしまう根性なしで最近落ち込み気味です。

151デフォルトの名無しさん:2005/05/19(木) 08:39:18
hpfの良書を教えてください
152デフォルトの名無しさん:2005/05/19(木) 08:40:03
ファイルの読み柿がよくわかりません。
どこかによい解説はないでしょうか?
153デフォルトの名無しさん:2005/05/19(木) 08:40:53
自由形式でかけるFORTRANはありませんか?
154デフォルトの名無しさん:2005/05/19(木) 08:43:20
千行の道も一行から。
155デフォルトの名無しさん:2005/05/19(木) 12:59:39
FTN77 Personal Edition Compilerをダウンロードしたいんですが
download FTN77 Personal Editionをクリックしても
名前やメールアドレス,住所などを入力するフォームが表示されないんですが
どうすればいいんでしょうか?
156デフォルトの名無しさん:2005/05/19(木) 13:28:32
157デフォルトの名無しさん:2005/05/19(木) 23:09:27
>>156
ありがとうございます!
158デフォルトの名無しさん:2005/05/20(金) 00:42:16
教えて君ウザイ
159デフォルトの名無しさん:2005/05/20(金) 23:34:24
intel fortran (Linux版)の質問です。
ランタイムオプション -check をつけてコンパイルして、実行すると、

forrtl: warning (402): fort: (1): In call to [サブルーチン名], an array temporary was created for argument #1

という警告がでます。マニュアルによると、
『ルーチンが呼び出される前に、実引数が一時的な記憶域にコピーされる場合、ランタイム情報を含むメッセージを発行します。』
ということらしいのですが、何故引数がコピーされるのでしょうか?Fortranって call by reference (call by value の対義語)じゃないの?また、コピーされることの弊害として、どのような事が考えられるでしょうか?

160 ◆atMKiSyUTU :2005/05/21(土) 00:34:49
>150
まあ似たような立場のモンです。

あっしもいくつかプログラム渡されて数週間解読しましたでつ。
やったこととしては印刷してじっくり読むのは基本として

文法が分かるのなら
・似たような処理をしてるところがあったら吐き出す結果が違わないように
注意しつつ出来る限りサブルーチンや関数にまとめる。
まあ、これはあっしが渡されたプログラムは結構スパゲッティだったから通用したのかも
知れませんが…

あと、
・研究で使ったプログラムならその結果を元に論文が書かれてると思うのでその論文や
そこに上げられた参考文献も読んでみる。
というのも重要かも。あっしはこれで転送行列法なるものを知ったです。
161 ◆atMKiSyUTU :2005/05/21(土) 00:53:04
ついでに質問です。

……
real(8),dimension(1:3)::bar
……
call foo(…,bar)
……
end program

subroutine foo(…,bar)
real(8),dimension(:),intent(INOUT)::bar
……
end subroutine

という感じにプログラムを組んだんですが、実行してみるとbarの値や形状が
正常に受け渡しされてないことが判明しました。原因がさっぱり分かりません。
何か分かる方がいらっしゃいましたらご教授お願いします。

使用コンパイラはIntel Fortran Compiler8.1 for Windowsです。

162デフォルトの名無しさん:2005/05/21(土) 01:19:45
>>161
interface文書いてやらんと、整合配列は通らないんじゃないの?
163デフォルトの名無しさん:2005/05/21(土) 01:27:26
>>149,153
つ [ifort]

>>151,152
つ [google]
164デフォルトの名無しさん:2005/05/21(土) 02:03:11
>>159
>何故引数がコピーされるのでしょうか?
サブルーチン側が連続した配列を想定しているのに
連続していない(可能性がある)配列が渡されたから。

program test
 integer, dimension(5,4) :: a = 1
 integer, dimension(3,2) :: b = 2
 call foo(a(2:4,2:3))
 call foo(b)
 print *, a
 print *, b
contains
 subroutine foo(x)
  integer, dimension(3,2), intent(inout) :: x
  x = 3
 end subroutine foo
end program test

>Fortranって call by reference (call by value の対義語)じゃないの?
この場合、ちゃんと「一時的な配列の先頭アドレス」が渡されます。

>また、コピーされることの弊害として、どのような事が考えられるでしょうか?
配列のコピー・書き戻しによるオーバーヘッドの増加、使用メモリ量の増加等。
165159:2005/05/21(土) 14:55:33
>>164
わかりやすい例示をありがとうございます。
具体的には、以下のコードで困っています。
ちなみに、character型配列ではなく、integer型にすると、一時配列は作られません。
また、以下の例では、b は2次元配列ですが、1次元配列に変更しても一時配列は作られます。
--------------------------------------------------------
program test
character,dimension(:,:),pointer :: b
allocate(b(3,2:3))
call foo(b, size(b))
print *, b
end program test

subroutine foo(x,nmax)
integer,intent(in) :: nmax
character, dimension(nmax),intent(inout) :: x
x = '3'
end subroutine foo
--------------------------------------------------------
実行すると以下のようになります。

$ ifort -check test2.F90
fortcom: Info: Feature not yet implemented: check pointer
fortcom: Info: Feature not yet implemented: check shape
$ ./a.out
forrtl: warning (402): fort: (1): In call to FOO, an array temporary was created for argument #1

333333



166デフォルトの名無しさん:2005/05/21(土) 21:25:27
x = '3'

のとこが

x(:) = '3'

と解釈され実行されたんじゃないの?
つまり、2*3の配列すべてに’3’が書き込まれたと。

character,dimension(:,:),pointer :: b

って明示的に書くと

character(len=1), dimension(:,:),pointer :: b

なんだけど、これでいいんですか?
167デフォルトの名無しさん:2005/05/21(土) 22:59:33
>>165
character型は特殊なんだよ。とても変な仕様になってる。
168デフォルトの名無しさん:2005/05/22(日) 11:04:47
gcc4.0.0で同じようなコードをコンパイルしてもfortranの方がC++より高速に感じるのだが
169デフォルトの名無しさん:2005/05/22(日) 14:19:33
厳しいフォートラン講座はどこかにありませんか?
170デフォルトの名無しさん:2005/05/22(日) 15:17:35
171デフォルトの名無しさん:2005/05/22(日) 17:24:34
>>170
たしかに厳しい。何かいてあるのかまったくわからん。
172 ◆atMKiSyUTU :2005/05/23(月) 01:01:43
>162
この件についてはご教授の通りで解決いたしました。
どうもありがとうございます。
173デフォルトの名無しさん:2005/05/23(月) 17:55:43
>>168
そりゃそうでしょ。
174デフォルトの名無しさん:2005/05/24(火) 08:07:22
alphaプロセッサを使っている場合、速度の最適化を最高にするオプションは何ですか
175デフォルトの名無しさん:2005/05/24(火) 08:23:00
>>174
-fast -arch host -O5
ただ、これが最速とは限らない。
176デフォルトの名無しさん:2005/05/24(火) 08:26:45
fortranはO5まであるのね。C++はO3までしかないね
177デフォルトの名無しさん:2005/05/24(火) 09:58:46
C++は-O5まであるよ。
ただマニュアルには
-O4 and -O5 have the same effect.
ってあるので、実質-O4まで。
178デフォルトの名無しさん:2005/05/24(火) 19:22:55
LINUXでFORTRAN77のコンパイル〜実行ができません。

[k@localhost k]$ gedit test.f
[k@localhost k]$ g77 test.f

となって何もなりません。
a.outは作成されるのですが、クリックしてもなにもなりません。
よろしくお願いしします。
179デフォルトの名無しさん:2005/05/24(火) 19:39:46
$ ./a.out
180デフォルトの名無しさん:2005/05/24(火) 19:45:18
>>179
出来ました!
学校のだと ./ 必要ないので分かりませんでした。
ありがとうございました。
181デフォルトの名無しさん:2005/05/25(水) 09:12:10
>>180
おやおや。その学校のマシンって結構危ないのではなかろうか。
182デフォルトの名無しさん:2005/05/25(水) 10:55:23
なんで./が必要なのかを知ってれば別にいいんじゃね。

しかし、、「クリック」なのかぁ、、。
183デフォルトの名無しさん:2005/05/25(水) 20:33:06
>>182
すいません!
知りませんw
184デフォルトの名無しさん:2005/05/26(木) 12:00:37
カレントディレクトリはコマンドパスに入れてはいけない。
185デフォルトの名無しさん:2005/05/26(木) 19:06:37
変数を NaN で初期化するには、どうしたら良い?
186デフォルトの名無しさん:2005/05/26(木) 19:49:52
>>185
NaNでそんなアフォなことを?
187185:2005/05/26(木) 20:01:44
>>186
いや、つい出来心でつ。
NaNをフラッグにして、条件分岐できるかなっと。

フラッグを -1 とか 999999 とかにすると、
いわゆる2000年問題的な問題がおきるしね。
フラッグの変数(boolean)をわざわざ作るのも面倒だし。
188デフォルトの名無しさん:2005/05/26(木) 21:06:24
>>167
character型は腐ってるということで、良いですかね。
189デフォルトの名無しさん:2005/05/27(金) 01:07:05
>>188
Cだとchar型の配列と変数は整合性があるけど、fortranの場合はそれが無い。
つまり、

character(len=10) choge



character(len=1) choge(10)

は全く違う内部構造になってるんだよね。
190デフォルトの名無しさん:2005/05/27(金) 15:37:30
ファイルの読み書きがよくわかりません。誰か教えてくだすれ
191デフォルトの名無しさん:2005/05/27(金) 15:38:05
f77で動的にメモリ領域を割り当てるにはどうしたらよいのでしょうか?
192デフォルトの名無しさん:2005/05/27(金) 16:39:01
>>190
open, read, write を勉強しる。

>>191
できない。f90からできる。
193デフォルトの名無しさん:2005/05/27(金) 23:45:07
HP FORTRANだと構造体を使ったプログラムがf77でもコンパイル
出来たっけな。あくまでHPの独自拡張だけど。
194デフォルトの名無しさん:2005/05/28(土) 19:07:44
>>189
FortranのCHARACTERは長さの属性を持っている。
「文字型」と言っても実質的には文字列型になる。

高級言語という観点からすれば整数型 charの配列を文字列とする
Cの方が手抜きである、とも言える。
195デフォルトの名無しさん:2005/05/30(月) 17:18:15
Fortranのsubroutineをc言語から呼び出すプログラムをWINDOWS XP用のフリーのコンパイラを
使用してコンパイルしたいです。
どのコンパイラを使ったらよいですか?
196デフォルトの名無しさん:2005/05/30(月) 23:43:52
>>195
cygwin
197sage:2005/06/01(水) 18:42:46
OPEN文でファイル名を指定すれば、新しいファイルを作ることはできますが、
ディレクトリを作成するにはどうしたらよいのでしょうか。
どなたかお教えくだされたまえ。
198デフォルトの名無しさん:2005/06/01(水) 20:21:47
>>197
call system('mkdir AAA')
199デフォルトの名無しさん:2005/06/01(水) 20:26:18
めちゃくちゃ処理系に依存しそうだな
200デフォルトの名無しさん:2005/06/01(水) 21:04:20
http://www.imslab.co.jp/products/products.html#F*FLOWER

こんなツールでf90対応のソフトを知りませんか?

201デフォルトの名無しさん:2005/06/02(木) 10:14:34
組み込み関数としてRAND()が認識されないのですがなんでなんでしょうか?
ヘルプを参照したりググッてみたけどわかりませんでした。

使っているのは
Microsoft Developer Studio 97
Visual Fortran Professional Edition5.0A
というやつです。
202デフォルトの名無しさん:2005/06/02(木) 15:42:06
203197:2005/06/02(木) 17:56:17
198さん。できました。どうもありがとうございました。
204デフォルトの名無しさん:2005/06/02(木) 22:30:20
>>198
call systemを使わないやり方はありますか?
205デフォルトの名無しさん:2005/06/03(金) 17:06:24
初心者の質問です.
LAPACK95を入れてテストしたらこんなエラーが出るんですけど
詳しい人おしえて

>g95 sample01.f90 -llapack95
In file sample01.f90:2

 use la_precision, only: WP => SP
                     1
Fatal Error: Can't open module file 'la_precision.mod' at (1)
for reading: No such file or directory

ファイル la_precision.mod は c:\g95\lib にちゃんと存在するんですけど
206デフォルトの名無しさん:2005/06/03(金) 20:55:43
>>204
おそらくないと思うよ。

でも、たいがいのコンパイラで
call system('mkdir AAA')
または
ii=system('mkdir AAA')
のどちらかはサポートしてると思う(mkdirがない場合は知らんが)
207デフォルトの名無しさん:2005/06/03(金) 23:22:27
>>204
処理系依存のサブルーチンを使う。
Visual Fortran なら MAKEDIRQQ とか。
208204:2005/06/03(金) 23:39:55
>>206,207
どうもです。以前、中身の不明なディレクトリ内のファイルを全て読む
プログラムを作った時も、命令を見付けられなかったので仕方なく

call system("ls hoge/ > list")
open(io,file="list")

とかやっていました。lsが無いMS-DOSプロンプトだったら実行出来ない
ですね。
209デフォルトの名無しさん:2005/06/04(土) 17:16:08
処理系依存性を吸収するためには、プリプロセッサを使う。
210デフォルトの名無しさん:2005/06/04(土) 17:20:06
おれなら、ディレクトリ操作なんかはPythonスクリプトなんかでやって、本質的なところでFortranを呼び出す形で解決するけどな
211デフォルトの名無しさん:2005/06/10(金) 04:34:35
Python つかうと、逆にポータビリティーが下がらないか?
基本は sh だろう。
212デフォルトの名無しさん:2005/06/10(金) 22:54:19
>>205
モジュールファイルのパスはライブラリとは別に指定します。

>g95 -Ic:\g95\lib sample01.f90 -llapack95

または
set G95_INCLUDE_PATH=c:\g95\lib
としてから
>g95 sample01.f90 -llapack95
213デフォルトの名無しさん:2005/06/10(金) 23:08:21
>>211
じゃあ、ディレクトリツリーを全て巡回しながらデータファイルを探し出し、それを読み込んでfortranで処理させるのshで作れよ。
214デフォルトの名無しさん:2005/06/11(土) 10:29:31
#!/bin/sh
~/bin/getfilelist ~/dat > filelist.txt
~/bin/hoge filelist.txt
215デフォルトの名無しさん:2005/06/11(土) 13:22:55
shの機能以外を使ってるから×
216デフォルトの名無しさん:2005/06/11(土) 23:48:44
Pythonっての知らないんだけどさ、
例えばどんなスクリプトになるか
見せてちょ。
217デフォルトの名無しさん:2005/06/11(土) 23:50:39
210=213ですか?
211が言っているのはshのみを使うというよりは
sh+一般的にどこでも使えそうなコマンド(ls等)で作るという意味では。

218デフォルトの名無しさん:2005/06/11(土) 23:55:23
外部プログラム呼ぶのがオケーなら、Pythonスクリプト呼ぶのと大差ないでしょ?
つまり、sh自体にディレクトリ巡回機能が付いてるのかどうかなんですが
219デフォルトの名無しさん:2005/06/12(日) 00:42:03
シェルスクリプトは複数のプログラムを組み合わせてバッチ処理を行うための
ものだと思うんだが。

ようは目的に合わせて自分の環境で使える道具を選択すればそれで良いんだよ。
220デフォルトの名無しさん:2005/06/12(日) 00:46:55
結論を急ぐと、

Fortran単体では柔軟な処理は不可能

ということです
221デフォルトの名無しさん:2005/06/12(日) 01:06:28
一昔前ならともかくFortran単体で全てやる必要性もないし。
Fortranに限らず何でもかんでも単一の言語でやろうと余計な策を弄するのは本末転倒だし。
222デフォルトの名無しさん:2005/06/12(日) 12:51:35
それがFortranクオリティ
223デフォルトの名無しさん:2005/06/12(日) 15:52:16
フォートラン (・∀・)カックイイ
224デフォルトの名無しさん:2005/06/12(日) 18:00:19
Fortranは真の高級言語だな。
225デフォルトの名無しさん:2005/06/12(日) 22:17:59
Fortranは真の高級言語だな。
226デフォルトの名無しさん:2005/06/12(日) 22:21:11
Fortranは真の高級言語だな。
227デフォルトの名無しさん:2005/06/12(日) 22:26:18
Fortranは真の高級言語だな。
228デフォルトの名無しさん:2005/06/12(日) 22:30:19
Fortranは真の高級言語だな。
229デフォルトの名無しさん:2005/06/12(日) 22:57:28
Fortranは真の高級言語だな。
230デフォルトの名無しさん:2005/06/12(日) 23:09:50
そうですが何か?
231デフォルトの名無しさん:2005/06/12(日) 23:41:47
Fortranは真の硬旧言語だな。
232デフォルトの名無しさん:2005/06/13(月) 01:48:11
SUBROUTINEに二次元配列が渡せないよ。なぜ。
233デフォルトの名無しさん:2005/06/13(月) 04:35:50
>>221
だな。
ポータビリティーのことも考えると、
なるべく使いそうな計算環境にありふれた言語を使うことかな?

以前、Cで書いたコードをFortranからリンクしたら、
共同研究者から怒られた。Cが読めないんだって(笑)
そいうのは、例外的事例ってことで。
234デフォルトの名無しさん:2005/06/13(月) 05:52:32
複数の人間でつくる時はどんな言語を使うかも含めて
事前にルールを決めとかないと…
235デフォルトの名無しさん:2005/06/14(火) 02:20:33
これからFortranをやろうとするのは無謀ですか?
C言語はコンソールアプリケーション程度、しかもあまりできない。
Basicはアプリケーション開発をしばらくやってたけど理解できてるのかどうかわからなくてやめた。

何故やりたいのか
ちょいと興味があった。さわり程度に使ってみたい。
後はMs−Dosのシンプルな画面に惚れている。
236デフォルトの名無しさん:2005/06/14(火) 11:08:18
>>235
無謀じゃないよ。古臭い手続き型言語だから、本やWebでいくつか例題やればすぐ習得できる。
でも、あんまり面白い言語じゃないし、エレガントでもない。
237デフォルトの名無しさん:2005/06/14(火) 20:29:50
formatなどを使って、2×2の行列を表示させるにはどうしたらいい
のでしょうか?ほぼ初心者です。
238デフォルトの名無しさん:2005/06/14(火) 20:38:39
FORMAT文の勉強をするといいと思います
239237:2005/06/14(火) 22:42:45
勉強してもわからんとです。
240デフォルトの名無しさん:2005/06/14(火) 22:52:39
宿題は自分でやろうね
241デフォルトの名無しさん:2005/06/14(火) 23:14:27
242デフォルトの名無しさん:2005/06/14(火) 23:36:20
何かよくなったんやろか、、。
243デフォルトの名無しさん:2005/06/15(水) 03:08:56
Linux超初心者です
大学の卒研でFortran(今のところ77で十分)が必要になったんですが、インストールの段階で早くもつまづき、どうにも前へ進めません
gccが何のことかすらよくわかりません
Linuxユーザの方HELP ME
244デフォルトの名無しさん:2005/06/15(水) 03:29:23
Linuxのインストールがうまくいかないという話ならLinux板で質問したほうが
いいと思うよ。
245デフォルトの名無しさん:2005/06/15(水) 03:33:48
246デフォルトの名無しさん:2005/06/15(水) 19:19:23
>>241
ヒロシです。
9.0 のリリースの件,ダイレクト電子メールで勤務中に知ったとです。
3月に 8.1 を買ったばかりだったので,ちかっぱショックだったとです。
ヒロシです‥‥

安値でアップグレードできるんだろうか?
今まではどうだったか,ご存じのかた教えて下さい。
247デフォルトの名無しさん:2005/06/15(水) 20:08:44
>>246
インテルにユーザー登録すれば、購入後1年間は無償で最新版をダウンロード出来ます。
2年目以降は保守ライセンス契約の更新(有償、新規価格の約半分)という形で
このサポートサービスを継続していくことが出来ます。

ttp://www.xlsoft.com/jp/products/intel/register.html
ttp://www.xlsoft.com/jp/products/intel/support/index.html
248デフォルトの名無しさん:2005/06/15(水) 20:29:47
>>247
あっ Σ( ̄□ ̄ ;
そういえばそうでした! そのことをすっかり忘れていました。
情報ありがとうございました。大感謝 m(_ _)m"
249デフォルトの名無しさん:2005/06/16(木) 01:37:06
Fortranで作ったプログラムの中に外部ソフトを組み込むことって可能ですか?
exeでしか存在していない外部ソフトです。
自分で作ったプログラムならソースがあるから、include出来ました。
ソースが無くても可能なのでしょうか?
250デフォルトの名無しさん:2005/06/16(木) 01:40:35
>>249
dllをリンクとかで出来るでしょ
251249:2005/06/16(木) 02:00:08
>>250
返信ありがとうございます。でも、その方法がわかりません。
状況としては、
A(自作Fortranプログラム)とB(外部)があって、
Aで計算した結果を用いて、Bで計算をする。そしてBでの結果をまたAに返して計算。
Aは起動させたまま、ということを考えています。

dllはどうやればリンク出来るのか教えていただけますか?
252デフォルトの名無しさん:2005/06/16(木) 08:34:24
>>251
>Aで計算した結果を用いて、Bで計算をする。そしてBでの結果をまたAに返して計算。
>Aは起動させたまま、ということを考えています。

大抵の処理系では外部コマンドを起動するためのサブルーチンが用意されているので
それを使えば良い。
253251:2005/06/16(木) 18:35:50
>>252
ごめんなさい。VF6.6でオンラインヘルプとか見たのですが、わかりません。
普通のサブルーチンみたいに、
call (B.exe)
は無理ですよね?
どう記述するのですか?またコンパイル時に何かやるのですか?
254デフォルトの名無しさん:2005/06/16(木) 19:41:51
VFならこんな感じ↓

program test
 use DFPORT

 integer :: ios
 integer(kind=4) :: r
 character(len=80) :: str

 r = system("dir > flist.txt")
 print *, "終了コード = ", r

 open(unit=1, file="flist.txt", status="OLD")
 do
  read(unit=1, fmt="(A)", iostat=ios) str
  if (ios /= 0) exit
  if (str(1:1) /= " ") print *, trim(str)
 end do
 close(1)
end program test

詳細はオンラインヘルプ等で「SYSTEM」または「SYSTEMQQ」を参照のこと。
255デフォルトの名無しさん:2005/06/18(土) 05:25:02
g77で乱数の発生のさせ方を教えてください!

      real x
integer l
do=1,5
call rand(x)
write(*,*) x
enddo
end

とすると、サブルーチンの使い方がおかしい!みたいなことを言われてしまいます。
よろしくお願いします!
256デフォルトの名無しさん:2005/06/18(土) 05:45:06
自己解決しました!
      real x
      integer l
      call srand(1234)
      do=1,5
       call rand(x)
       write(*,*) x
      enddo
      end
こんな感じであってますよね?
失礼しました
257デフォルトの名無しさん:2005/06/18(土) 05:51:50
あれ?コンパイルできない・・・。
      real x
      integer l
      call srand(1234)
      do=1,5
       x= rand()
       write(*,*) x
      enddo
      end
とするとできるのですが、普通のサブルーチンと扱いが違うのですかね?
あたふたしてすみません。
258235:2005/06/18(土) 10:31:23
今現在CPadで一人で勉強中。
このコンパイルの瞬間がC言語でも味わったけど、好きだ。
無機質にDos画面で表示されている瞬間なぜか技術者気分だ。
コード自体は入門サイトからのだからそんな難しいものではない。
だけどいつかは大学の言語解析ソフトくらいはつくれるようになりたい。
・・・というかプログラムか。
なんか英語辞書が組み込まれててテキストの中に入っている文書から英単語を読み出して、それの個数を読み出すソフト。
そしたらメモ帳に出力させてた。
一定のスペースをつけて読み出してるからエクセルでも処理可能。
それくらいは作ってみたい。
ただそのソフト、日本語はサポートされてないからひとつの文書にある文字ベースのエントロピーが求められん・・。
日本語入れた瞬間バグ起こしたもんで教授から大目玉とはこれいかに・・。
259デフォルトの名無しさん:2005/06/18(土) 11:39:36
>>257
      do=1,5

のとこじゃない?
260デフォルトの名無しさん:2005/06/21(火) 08:44:06
古いフォートランのコードで、Cに直したいのですがコードが読めません。
もし分かる方いらっしゃったら確認お願いします。
以下コード

FUNCTION RAND(K)

INTEGER K, M, CONST1
REAL RAND, CONST2
PARAMETER (CONST1 = 2147483647, CONST2 = .4656613E-9)
SAVE
DATA M /0/

IF(M .EQ.0) M = K
M = M * 65539
IF(M .LT. 0) M = (M + 1) + CONST1
RAND = M*CONST2

END

以下私の理解している事: 参考にしたページ: http://www.g.dendai.ac.jp/lecture/fortran/fort12.html

任意のKが関数に渡される。
関数は K*65539*CONST2をいつも返す。

でもいくつか疑問点があります。
どうして型宣言が行われていないのでしょうか?
どうして関数は特定の値をいつも返すのに、IFの分岐が必要なのでしょうか?
困ってます。アドバイスをよろしくお願いしますm(__;)m
261デフォルトの名無しさん:2005/06/21(火) 12:00:40
「暗黙の型宣言」てやつで、RAND自体は単精度実数になってる。
関数が持ってるMという変数の値はSAVE宣言されてるから、関数から抜けても値が保存される。
呼び出されるごとに関数が返す値は違う。IF文は乱数発生アルゴリズムを理解すれば意味がわかる。
262デフォルトの名無しさん:2005/06/22(水) 00:33:44
>>260
・DATA 文による初期化は、プログラムの実行前(?)に1度しか実行されない

・SAVE 文があるので、関数内の変数はすべて static

(例外はあるが、FORTRANのローカル変数はSAVEがあろうが無かろうが
すべて static と考えたほうがよい)
263デフォルトの名無しさん:2005/06/22(水) 16:09:12
> (例外はあるが、FORTRANのローカル変数はSAVEがあろうが無かろうが
> すべて static と考えたほうがよい)
>

え−っ! すごい昔の話じゃないの?

264デフォルトの名無しさん:2005/06/22(水) 17:32:08
address errorがでるときの原因を教えてください!
お願いします。
265デフォルトの名無しさん:2005/06/22(水) 18:01:09
>>264
OSやコンパイラの種類を教えてくれないと分らん。
266デフォルトの名無しさん:2005/06/22(水) 18:55:48
それでもエスパーなら、エスパーなら何とかしてくれる
267デフォルトの名無しさん:2005/06/22(水) 18:58:08
配列の範囲外をアクセスしようとしたとか
268デフォルトの名無しさん:2005/06/22(水) 19:04:57
>>265
ウィンドウズです。
コンパイラは77だと思います。
269デフォルトの名無しさん:2005/06/22(水) 19:18:36
それはコンパイラとは言わない
270デフォルトの名無しさん:2005/06/22(水) 19:20:06
>>264,268
これらの情報から考えられる原因:

お前のプログラムがカスだから
271デフォルトの名無しさん:2005/06/22(水) 22:09:40
address errorというのはコンパイル時に出るものなのか、
実行時に出るものなのか。address errorというだけで自明の
ことなのだろうか。
272デフォルトの名無しさん:2005/06/22(水) 22:19:24
【科学技術計算】C言語とFortran どっちがいい?
http://science3.2ch.net/test/read.cgi/sim/1042715803/476
476 名前:名無しさん@3周年[] 投稿日:2005/06/22(水) 17:26:14
fortran使って作ったプログラムがコンパイルできるんだが
実行するとaddress errorって出るあるよ
どうしてあるか?
273デフォルトの名無しさん:2005/06/22(水) 22:42:32
>>263
たしかに、保証はされてないですね。
そのための save 属性だし。
274デフォルトの名無しさん:2005/06/22(水) 23:18:30
>>261
>>262
ありがとうございました!!周りに知ってる人がいなくて困ってました。
m(_ _)m 重ね重ねお礼申し上げます。。
275デフォルトの名無しさん:2005/06/26(日) 00:38:58
質問なんですが、Windows で動くフリーの Fortran9x コンパイラ(FTN95など) で
Lapack をライブラリにして使用することってできるんでしょうか?

現在はcygwinでg77+Lapackっていう組み合わせで使ってますが、
もともとはC/C++使いだったんで、Fortran77が使いにくく感じて仕方ないです…。
276デフォルトの名無しさん:2005/06/26(日) 00:50:38
Intel Fortran Compiler買えばいいのに…
277275:2005/06/26(日) 01:24:54
>>276
Intelのコンパイラは速いらしいですね。
Math Kernel Library なんていうありがたいものまで販売されてるし。
しかし、私の所属する研究室(私は大学院生です)では
行列演算をするのは自分だけだし、他の人はFortran77で満足してるみたいなので微妙です。
一人でFortran77派の先生を説得できそうにはないですね・・・。

278デフォルトの名無しさん:2005/06/26(日) 03:04:44
>>275
MinGW版のg95でBLAS/Lapack/Lapack95のコンパイルは一応エラーなしで通った。
(ライブラリのみ)
ただ、テストはしてないので正常に機能するかどうかまではわからん。
279デフォルトの名無しさん:2005/06/26(日) 16:27:49
>>277
Linux使えば?compilerもMKLも学生ならただで使えるよ。
280275:2005/06/27(月) 13:13:06
レスありがとうございます。
>>278
g95プロジェクトって遅々として進んでないような印象があるんですけど、
いつになったら完成するんでしょうね。
完成or完成間近で、バグがほとんどないようなら使いたいと思ってるんですが・・・。

>>279
MKLもタダでしたか!
これを機にLinuxとWinのデュアルブートにしちゃおうかな…。
281デフォルトの名無しさん:2005/06/27(月) 16:29:20
ttp://www.g95.org/
を見ると毎日のように更新されているね。
Linux上で動かしている手元のプログラムは、gfortran-4.0では
コンパイル出来なくて、g95では大丈夫。実行するとAlphaの
Compaq Fortranとほぼ同じ結果を返してくれる。Intel Fortran
でもコンパイル出来たけど、実行すると異常終了して、デバッグを
諦めた。
282デフォルトの名無しさん:2005/06/30(木) 15:12:38
Intel Fortran9 買った。Visual Studio .NET上で使うと訳分らん。今までCVF6.5使ってたから。
283デフォルトの名無しさん:2005/06/30(木) 18:37:02
俺もVF6.6使ってたけど、まだ慣れないよ。

IntelというかVC.NETで
6列目と73列目以降の色分けがしたいんだけど、
できるのかな・・
284デフォルトの名無しさん:2005/06/30(木) 22:25:24
>>283
固定フォーマット(*.for, *.f)ならVS.NETで桁の色分けしてくれてますが。
285デフォルトの名無しさん:2005/07/02(土) 19:09:00
  WindowsでプログラミングをしてみようとSalford FTN95 Personal Editionをインストールしたのですが、
コマンドラインでコンパイルしようとして「ftn95 test.f」のように入力してもEXEなどの実行ファイルが作成できないんですがこのやり方ってなんかまずいのでしょうか?
なんか画面みると問題ないようなのですが肝心の実行ファイルがないんです。
しかも「/Lgo」というコンパイル成功時に一度実行させるコマンドラインオプションをつけるときちんとプログラムは実行されているんです。
  なんかものすごく初歩的な質問のような気がするのですが、調べても逆に初歩過ぎるのか解決方法が見つかりません。
すみませんが解決方法を教えてください。お願いします。
286デフォルトの名無しさん:2005/07/02(土) 19:14:07
>>285
/LINK オプションは試した?
287285:2005/07/02(土) 19:20:18
>>286
 解決しました。ありがとうございます。
 意外と簡単なところに限って躓くものですね…。
いままでunixで使っていてそのコンパイラーがオプション無しで実行ファイルa.outを作ってくれてたので盲点でした。
288デフォルトの名無しさん:2005/07/02(土) 23:01:28
コンパイルして./a.outで出力すると「セグメンテーション違反です。」とか出るんですけど、解決策は無いですかね?
289デフォルトの名無しさん:2005/07/02(土) 23:12:03
>>288
再現出来る最小限のソース
290デフォルトの名無しさん :2005/07/03(日) 19:11:41
逆にCをFortranへ変換するソフトってあるんですかね?
291デフォルトの名無しさん:2005/07/03(日) 19:36:35
>>290

>>6 の C2F
292デフォルトの名無しさん:2005/07/05(火) 00:18:41
Salford FTN95で実行ファイルを作ろうとしてCommand Promptで、
「ftn95 "main.f90" "sub.f90" /link」
と打ったら、
more than one source file specified
  1 error [main.f90] compilation failed
とかいうエラーメッセージが出たんですが、
複数のファイルに分かれた場合のコンパイル法ってこれじゃまずいんですか?
とりあえず、Salford以外じゃ問題ないんで、ファイル自体には問題なくて
単純にSalfordの操作ミスのようなのですが。
293デフォルトの名無しさん:2005/07/05(火) 01:34:44
>>292
個別にコンパイルして最後にリンク

ftn95 main.f90
ftn95 sub.f90
slink main.obj sub.obj -FILE:prog.exe

面倒くさかったら mk32やバッチファイルで処理。
294デフォルトの名無しさん:2005/07/05(火) 18:46:46
OPEN文を使って次のプログラムを実行してみたのですが、うまくいきません。
(「中断しました。」とでます)
どなたかよろしくおねがいします

OPEN(1,FILE='701')
READ(1,*)X,Y
S=0.0
DO 100 I=1,15
READ(1,*)U,V
S=S+(U-X)*(Y+V)/2.0
X=U
Y=V
100 CONTINUE
WRITE(*,*)S
CLOSE(1)
END
295デフォルトの名無しさん:2005/07/05(火) 18:55:31
ちなみに計算したいデータは↓のものです。
ヒントなどでもうれしいです。

ttp://lcofao.hp.infoseek.co.jp/Output.pdf
296デフォルトの名無しさん:2005/07/05(火) 20:00:53
>>294
見た目間違ってなさそう。

それだけ短いプログラムだったら
計算過程を全部writeで出力したら?
変数の計算式やreadの式の直後に全部writeで
write(*,*)"S=",S
みたいに出力すればいいんじゃん?
297デフォルトの名無しさん:2005/07/05(火) 21:39:11
>>296さん
返信ありがとうございます。
大学でしかフォートランできない状態なのでまた明日確認してみます

ひょっとしたらOPEN対称ファイルがダメなのかもしれないですよね。
別テキストで数字だけを羅列していったのですが。。。
↓みたく。
0,10.5
125,8.2
307,7.5
420
以下同様
298デフォルトの名無しさん:2005/07/05(火) 23:59:25
>>294

READ(1,*,END=200)U,V

.
.
.

100 CONTINUE
200 CONTINUE
299292:2005/07/06(水) 00:30:10
>>293
ありがとうございました。
300デフォルトの名無しさん:2005/07/06(水) 01:14:31
>>298さん
返信頂きありがとうございます。
READ(1,END=200)ですよね?
明日さっそく試してみたいと思いますが、見てみた感じ
READ文の中にこのような命令が入っているのは初めてで、
本やウェブでいろいろ見てみたのですが、どういう処理をしているのかよくわかりません。

あるところで、READ文とCLOSE文の間にWRITE文があるとうまくいかないことがある。とあったのですが、
それと関係あるのでしょうか?
301デフォルトの名無しさん:2005/07/06(水) 01:54:07
302300:2005/07/06(水) 19:46:30
どうもありがとうございます。
今日学校でやってみたところ、解決しました。
303デフォルトの名無しさん:2005/07/06(水) 20:25:41
>>302
>>298の方法で実行時エラーが出なくなったと言うことは
データの個数が足りないか、正しく読み込まれていない
可能性があるのでは?
304300:2005/07/07(木) 00:19:37
>>303
実はOPEN(1,FILE='701')
の部分ですが、保存していたのが701.TXTだったので、
それがアボートの原因だったのかも知れません。

そこを変更して、教えていただいたやり方でやっても、元の形でやっても
うまくいきました。
305デフォルトの名無しさん:2005/07/07(木) 20:15:29
すいません。
自分でなんとか書いてみたんですが、合ってるかどうか見てもらえますか?
本当ならこれを学校のFortranでやってみて、確かめて、gnuplotでグラフ。
とまでやりたかったんですが、学校のが使えませんでした。(家も使えません。)
どなたか数値計算していただけない・・ですよね。。
もし計算結果がでたらエクセルでグラフを書けばなんとかできるかなと思っているんですが、
↓こんなんです
306デフォルトの名無しさん:2005/07/07(木) 20:16:11
program prog036
implicit real*8
write(*,*) 'a, b, n, dt = ?'
read(*,*) a, b, n, dt
write(*,*) 'a, b, n, dt = ',a,b,n,dt
c
x1 = a
x2 = b
y1 = 0
y2 = 0
c
do k = 0,n
call subroutine bibunkoshiki(x,y,z,dt)
end do
end
c ***********************************************************
subroutine bibunkoshiki(x,y,z,dt)
c ***********************************************************
x1 = x1 + y1*dt
x2 = x2 + y2*dt
y1 = y1 + z1*dt
y2 = y2 + z2*dt
c
write(*,*) x1,x2
end
c ***********************************************************
function z(x)
c ***********************************************************
implicit real*8(a-h,o-z)
z1 = (-11*x1 + x2)/10
z2 = ( x1 - 11*x2)/10
end
307だめだめやがな:2005/07/07(木) 20:46:56
>>305
[Salford FTN77/Win32 v4.03, Copyright (c) Salford Software Ltd. 1988-1998]
Licensed to: FTN77 Personal Edition
Department: Non-commercial use only
0002) implicit real*8
*** Invalid list
1 ERRORS [<PROG036>FTN77 Ver 4.03]
0025) end
WARNING - Z2 has not been given an initial value (see -undef and
-only_undef options)
WARNING - Y2 has not been given an initial value (see -undef and
-only_undef options)
WARNING - X2 has not been given an initial value (see -undef and
-only_undef options)
WARNING - Z1 has not been given an initial value (see -undef and
-only_undef options)
WARNING - Y1 has not been given an initial value (see -undef and
-only_undef options)
WARNING - X1 has not been given an initial value (see -undef and
-only_undef options)
NO ERRORS,6 WARNINGS [<BIBUNKOSHIKI>FTN77 Ver 4.03]
0032) end
0033)
WARNING - X1 has not been given an initial value (see -undef and
-only_undef options)
WARNING - X2 has not been given an initial value (see -undef and
-only_undef options)
WARNING - Z has not been given an initial value (see -undef and -only_undef
options)
NO ERRORS,3 WARNINGS [<Z>FTN77 Ver 4.03]

*** Compilation failed
308305:2005/07/07(木) 20:52:11
うはwひどいなw
>>307さんありがとうございますw
なおそなおそ(ソソクサ..
309305:2005/07/07(木) 21:08:33
(´・ω・`)サッパリ
310デフォルトの名無しさん:2005/07/07(木) 21:12:54
>>305

>>3
311デフォルトの名無しさん:2005/07/09(土) 19:31:32
積分を行うときに区分数を大きくしすぎると、逆に誤差がでてきてしまうのは
どうしてですか?
312デフォルトの名無しさん:2005/07/09(土) 19:46:12
サブルーチンの並びはこんな感じでいいですか?
IMPLICIT REAL*8(X,Y)
REAL*8 FUNCTION FUNC(X,Y)
FUNC=SIN(X)+COS(X)
RETURN
END
313デフォルトの名無しさん:2005/07/09(土) 20:52:00
314デフォルトの名無しさん:2005/07/09(土) 23:37:06
>>313さん
ありがとうございましたが、
REAL*8 FUNCTION FUNC(X,Y)
IMPLICIT REAL*8(X,Y)
FUNC=SIN(X)+COS(X)
RETURN
END
となるんですね?

てか関数の場合サブルーチンいいませんね。
315デフォルトの名無しさん:2005/07/10(日) 11:50:04
ケタ落ちは整数同士の割り算のとき、あまりが切り捨てられること。→×割り算だけでない
ケタ溢れはおもに掛け算で発生するが、加減や割り算で発生することもある。→○
整数の加減ではケタ溢れが起こらない限りは正しい結果である。→○


ですよね?
316デフォルトの名無しさん:2005/07/10(日) 16:05:55
ふつう、実数として浮動小数点演算を使うとき、気をつけるものだと思うが・・・
317デフォルトの名無しさん:2005/07/11(月) 22:25:32
独学で初心者ですが,「外部関数を用いてeuler法により微分方程式を解く」
といったプログラムを作ってみましたが,エラーがでてしまいます.
エラーを見たのですが,どうしてエラーなのかいまいちわかりません.
使用しているコンパイラはvisualfortranです.どうしてエラーが出るのかわかる方,回答よろしくお願いします.
318317:2005/07/11(月) 22:26:17
program euler
implicit none
integer :: i
real :: h

interface
function f(x,y)
implicit none
real :: f
real,dimension(1:1000),intent (in) :: x,y
end function f
end interface

x(1)=0.0
y(1)=1.0
h=0.1

do i=1,1000
y(i+1)=y(i)+h*f(x(i),y(i))
x(i+1)=x(i)+h
write(*,*) 'i=',i
write(*,*) 'x=',x(i)
write(*,*) 'y=',y(i)
end do

end program euler
319317:2005/07/11(月) 22:26:47

function f(x,y)
implicit none
real :: f
integer,dimension(1:1000),intent(in) :: x,y
f=0.5*(1.0+x)*y*y
return
end function f
320317:2005/07/11(月) 22:27:19
長くてごめんなさい.エラーはこんな感じです.
C:\Program Files\Microsoft Visual Studio\MyProjects\7_11_2\7_11_2\euler.f90(14) : Error: This name does not have a type, and must have an explicit type. [X]
x(1)=0.0
--------^
C:\Program Files\Microsoft Visual Studio\MyProjects\7_11_2\7_11_2\euler.f90(15) : Error: This name does not have a type, and must have an explicit type. [Y]
y(1)=1.0
--------^
C:\Program Files\Microsoft Visual Studio\MyProjects\7_11_2\7_11_2\euler.f90(19) : Error: This name has not been declared as an array. [Y]
y(i+1)=y(i)+h*f(x(i),y(i))
--------^
C:\Program Files\Microsoft Visual Studio\MyProjects\7_11_2\7_11_2\euler.f90(20) : Error: This name has not been declared as an array. [X]
x(i+1)=x(i)+h
--------^
C:\Program Files\Microsoft Visual Studio\MyProjects\7_11_2\7_11_2\euler.f90(32) : Error: The shapes of the array expressions do not conform.
f=0.5*(1.0+x)*y*y
--------^
Error executing df.exe.

7_11_2.exe - 5 error(s), 0 warning(s)
321デフォルトの名無しさん:2005/07/11(月) 23:05:02
>>317
・・・エラー見たら英語分からなくても、変数XとYがおかしいことくらいわかるでしょ?
参考までにexciteでエラーを翻訳しといたよ。

This name does not have a type, and must have an explicit type
→ この名前には、タイプを持たないで、明白なタイプがなければなりません。
This name has not been declared as an array.
→ この名前は配列として宣言されていません。
The shapes of the array expressions do not conform.
→ 配列式の形は従いません。

2番目の訳がexciteにしてはうまく訳せてるよね。
これを参考にXとYの何がおかしいか考えてみて。
頑張れ!
322317:2005/07/11(月) 23:11:11
>>321
ありがとうございます.
確かに変数xとyに問題があることはエラーからわかるのですが,
配列や型は宣言しているのに,なぜエラーなんだろうと思ってしまいまして・・・
もう少し粘って考えてみます.
323デフォルトの名無しさん:2005/07/12(火) 01:00:36
>>322
そういう疑問だったのか。
じゃあ function f(x,y) の2つの引数x,yを、 function f(a,b) のように別の文字a,bを使って
書き換えてみればエラーの原因が分かるかもね。

ちなみにこれ、iを1000まで回してるけど、i=20程度でy(i)が発散するよ。
324317:2005/07/12(火) 01:45:33
>>323
ありがとうございます.
色々チャレンジしましたがだめでした・・・
このような簡単なプログラムが組めないようでは
まだまだ勉強不足ですね.
また明日から頑張ります.
325デフォルトの名無しさん:2005/07/12(火) 20:01:17
>>315
あってますか?
過去問にあったので教えてください。
326デフォルトの名無しさん:2005/07/12(火) 20:46:54
>>315,325
○×はあってるが、1問目の理由が違う。
1問目は「丸め誤差」、桁落ちではない。

tp://e-words.jp/w/E6A181E890BDE381A1.html
327デフォルトの名無しさん:2005/07/12(火) 21:04:57
>>326
ありがとうございました。
ややこしいですが、大分とわかってきた気がします。
328デフォルトの名無しさん:2005/07/14(木) 12:11:52
最初にキーボードからintegerを読み込ませて(例えば100とします)、
保存対象のファイルをこのintegerによって変えたいのですが(この場合'100.dat'に保存したい)、
下のようにするとうまくいきません。どこがおかしいのでしょうか?
教えてくださいお願いします。
implicit none
integer :: i
character*16 :: name
read(*,*) i
name = (char(i))//'.dat'
open(11,file = name)
write(11,*) 'ここに書き込む内容をかく'
close(11)
stop
end
329デフォルトの名無しさん:2005/07/14(木) 18:31:04
非対称行列の固有値と固有ベクトルを求めるprogramを
作りたいのですが、どこかにプログラム例などありませんか?
ありましたら、教えてください。
330デフォルトの名無しさん:2005/07/14(木) 19:23:44
>>329
LAPACK ( http://www.netlib.org/ ) は?
固有値問題の数値計算について研究してるんじゃなかったら、
自分で作ると言わずそのまま使った方がいいよ。
作るの面倒だし、作っても確実にLAPACKの方が速いし。

331デフォルトの名無しさん:2005/07/14(木) 19:26:19
>>328
Fortranには整数型や実数型の変数を文字型変数に変換する関数はありません(多分)。
代わりに「内部ファイルの方法」というのを使います。
こういうのです

WRITE(文字型変数名,書式識別子) 数値型変数名

例えば整数型変数 i ( = 100 とする) を,3文字の文字型変数 kazu に変換するとしたら,

implicit none
integer :: i
character*7 :: name
character*3 :: kazu
read(*,*) i
write(kazu,'(i3)') = i
name=kazu//'.dat'
open(11,file = name)
write(11,*) 'ここに書き込む内容をかく'
close(11)
stop
end

ただ,こちらの手元に今,Fortranコンパイラがないので,試せていません。
ダメだったらごめんなさい。

【参考】
http://www.ip.media.kyoto-u.ac.jp/htomita/sec7.html#7.2.
332デフォルトの名無しさん:2005/07/14(木) 20:49:26
>>329
ARPACKとか使えば?
333デフォルトの名無しさん:2005/07/14(木) 22:17:32
>>328
char()って、「文字コード→文字(≠文字列)」な変換関数じゃない?
ASCIIコードなら、100→「d」。
334デフォルトの名無しさん:2005/07/14(木) 22:59:43
>>331
内部ファイルを使うなら >>328のプログラムで
> name = (char(i))//'.dat'
の部分を

WRITE(name,'(I3,A)') i, '.dat'
または
WRITE(name,'(I3,''.dat'')') i

とすればOK
335デフォルトの名無しさん:2005/07/15(金) 12:44:20
>>329 です。
LAPACKをインストールするまでに時間を使ってしまいそうですが、やってみます。

336328:2005/07/15(金) 23:26:39
>>331 >>333 >>334
みなさんありがとうございます。
337デフォルトの名無しさん:2005/07/21(木) 01:23:08
メモリの動的割り当てと解放について、初心者でもわかるようにわかりやすく説明されたサイト
はないか教えて下さい。
テストがあるんで急ぎです
338デフォルトの名無しさん:2005/07/21(木) 08:14:57
>>337
宿題は自分でやろう。
これを見てゆっくり考えよう。
http://h18009.www1.hp.com/fortran/docs/lrm/dflrm.htm
339デフォルトの名無しさん:2005/07/23(土) 09:16:56
サブルーチンの並びを考える問題なのですが、これで問題ないですよね?

REAL*8 FUNCTION FUNC(X,Y)
IMPLICIT REAL*8(X,Y)
FUNC=SIN(X)+COS(X)
RETURN
END

よろしくおねがいします
340デフォルトの名無しさん:2005/07/23(土) 12:39:43
試してから書き込めばいいじゃん
341デフォルトの名無しさん:2005/07/23(土) 19:49:44
IMPLICIT は NONE 以外使うな。
変数宣言使え。
342デフォルトの名無しさん:2005/07/23(土) 21:15:16
implicit none 以外の implicit の使い方初めて見た希ガス
343age:2005/08/06(土) 18:51:34
age
344デフォルトの名無しさん:2005/08/15(月) 13:44:47
プログラムを動かすと、REAL*8 FUNC(A,A)のAの値を変えるごとにプログラムの速度が違う様なんです。
配列数を変えることによってプログラム実行速度はかわってくるのでしょうか?
6000>10秒
5800>5秒
5600>10秒
5400>4.8秒
もう何が何やらorz

環境はWindows pen4 メモリ1Gの環境です。
345デフォルトの名無しさん:2005/08/15(月) 14:26:22
>>344
配列各要素に操作をしているなら実行速度に正の相関関係が生じるのは当然ですが、
秒数を見るとそれに起因したものではなさそうですね
気になるのは「その秒数はどうやって/何を計ったか」なのですが。
マルチプロセスのOSで応答時間を測定する事はあまり意味がない ということをご存知か?
346デフォルトの名無しさん:2005/08/15(月) 16:54:24
秒数は目安としてdtimeで計測しています。

繰り返し計算で一回の計算が終わるたびに値をDos窓に表示させているのですが
それを見ていても明らかに遅いのが判るので・・・・・。
347デフォルトの名無しさん:2005/08/16(火) 02:02:37
同じ配列数場合、いつも実行しても、時間は変わらないのでしょうか?

348デフォルトの名無しさん:2005/08/16(火) 04:38:49
はい、変わってないですね。6000で10秒くらい、5400で5秒付近です。
dtimeなので信用はできませんが
明らかに時間差があるため・・・謎ですね。

サブルーチンの時間計測してるのですがやはり一から書き直したほうが良さそうですねorz
解はまちがってないんだけどなぁー。

349344:2005/08/16(火) 13:37:38
解決しました!

サブルーチンのプログラムの中にある配列数を曖昧に今まで取ってたんですが
一番余分に配列組んでそうなところを少なくしてあげたら6000にしようが5100にしようが
4秒代で回るようになりましたorz
きちんとした原因がそこかは判らないのですがコンパイルの種類、f77,f90にしたりといろいろ
変化させた結果、それで安定したので・・・。

>>345、347 ありがとう。
350デフォルトの名無しさん:2005/08/19(金) 15:39:49
キャッシュのせい?
351デフォルトの名無しさん:2005/08/27(土) 14:40:29
夏休みも残りわずか。
皆さん、宿題は終わりましたか?
352デフォルトの名無しさん:2005/08/28(日) 00:17:27
>351
宿題っつうか学会発表のためのプログラム(fortran製)の
ぶん回し中ですが何か?
353デフォルトの名無しさん:2005/08/29(月) 23:31:50
>>352
何学会? 一寸興味あり (・∀・)
354デフォルトの名無しさん:2005/08/29(月) 23:42:53
すみませんがちょっと教えて下さい。
学生向けだと無料になる Linux 用 Fortran コンパイラがあった気が
するんですが‥‥ありませんでしたっけ?
Intel だったかなと思ったのですが,9.0 のアカデミック価格は \46,725 (税込)でしたし‥‥
355352:2005/08/30(火) 00:23:53
>353
応物

>354
>3
356デフォルトの名無しさん:2005/09/03(土) 08:35:10
研究で、Fortran IVで書かれた古いプログラムを使う必要が有ります。
プログラムといえば、関数電卓のBASICくらいしかやったこと無いので、
自分でそのプログラムを書き換えることは無理だと思います。
Fortran IVのプログラムが動くソフトって有りますか?
357356:2005/09/03(土) 08:40:04
Windows XPか、Linux上で
358デフォルトの名無しさん:2005/09/03(土) 09:41:52
コンパイルできればどんなOS上でも動くんじゃないの?
359デフォルトの名無しさん:2005/09/03(土) 11:09:09
>>356
>Fortran IVのプログラムが動くソフト
それは、通常コンパイラと呼ばれるソフトです。
私があなたなら、該当プラットフォーム(OS)上で動くFortranコンパイラを販売している会社を調べ、
その会社に問い合せる。
360デフォルトの名無しさん:2005/09/06(火) 20:52:23
ファイルの中身を全部コピーしたいんですけど、
read文を使う場合、読み込ませる変数を細かく設定しなければいけませんよね?

例えば、
"do i=1,10"
を読ませたかったら、
read(1,*)a1,a2となりますよね?

毎回ファイルの中身が変わるので、それは面倒なんですよ。
とにかく、そのままコピーしたいんですけど、いい手ありませんか?
361デフォルトの名無しさん:2005/09/06(火) 20:56:52
>>360
call system("cp hoge fuga")
362デフォルトの名無しさん:2005/09/06(火) 23:06:16
>>360
ファイルの中身をコピーしてから「何をしたい」のかを
示さないと、>>361のような恐らく望んでいない回答を
されて、再度質問をすることになりはしないか?
363360:2005/09/07(水) 14:22:24
>361,362
申し訳ありませんでした。
ファイルに、新たな内容を追加したいということです。
A.datというファイルがあり、そのファイルの最下部にフォートランで計算
した値を追加したいのです。

ですから、新たなファイルをopen文で作成して、A.datファイル全体をコピーして
、そして追加内容をwrite文で書き込もうかと考えています。そのコピーの方法
を教えていただきたかったということです。

もし他にわかりやすい方法があれば、是非教えていただきたいです。
364360:2005/09/07(水) 17:54:05
ちなみに、コンパイラはCompaq Visual Fortran 6.6.0使用してます。
365デフォルトの名無しさん:2005/09/07(水) 18:11:12
>>363
単純に A.datに追加書き込みするだけで良いのなら

open(UNIT=1, FILE='A.dat', POSITION='APPEND')
  :
write(1, *) hoge
  :
close(UNIT=1)
366デフォルトの名無しさん:2005/09/07(水) 21:01:12
>>360
ttp://www.uopmu.ees.osakafu-u.ac.jp/~yabu/soft/fortran.html
12. 文字型変数に対する read
15. read 文実行時のエラー処理

でどうですか?
367デフォルトの名無しさん:2005/09/07(水) 21:20:50
>>360
別のファイル名で作成して、call systemを使わないなら
FORTRAN90で

character(len=100) :: buf
open(io1,file='hoge',status='old')
open(io2,file='fuga',status='new')
do
read(io1,'(a)',iostat=iostat) buf
if(iostat/=0) exit
write(io2,'(a)') trim(buf)
enddo
close(io1)
write(io2,'("tekito")')
....
close(io2)
368デフォルトの名無しさん:2005/09/10(土) 01:23:52
配列の大きさを求めた後で配列宣言したいのですが、
プログラムの途中で real::配列 としてもエラーになります。
どうすればよいですか? 
369デフォルトの名無しさん:2005/09/10(土) 02:05:28
自己解決しました
370デフォルトの名無しさん:2005/09/10(土) 14:34:18
>>368
エスパー募集をやめる。
エラーと言っても様々なエラーがある訳で。
371デフォルトの名無しさん:2005/09/14(水) 20:05:19

work_dir に a.out と 01,02…,099,100というディレクトリが既にある
として下さい。その時に、

do j=1,100
i = system("./a.out > memo")
i = system("mv memo ./j")
end do

のような事をしたいのですが、何か上手い方法を御存知の方はいないでしょうか?
system=("")の中で変数を使えないかという事なのですが、どうでしょうか?
ちなみに訳合ってshell scriptで、というのは無理なんです。
372デフォルトの名無しさん:2005/09/14(水) 20:21:41
>371

内部WRITEで文字列を生成してsystemにわたせば?


373371:2005/09/14(水) 20:52:12
372さん、書き込みありがとう御座います。
仰ってるのってこんな感じですか?

character ccc*3
do j=1,9
write(ccc,10)j
i = system("./a.out > memo")
i = system("mv memo ./ccc")
end do
10 format('00',i1)

でもこれでは普通に ccc ってファイルができてしまいます・・・。
変数であることをどう認識させるのですか??
$ccc でも @ccc でもうまくいってません。
基本的な質問ですいません。。
374デフォルトの名無しさん:2005/09/14(水) 23:27:39
system("mv memo ./"//ccc)

character*100 cbuf
cbuf = "mv memo ./"//ccc
call system(cbuf)
とかでいけるかな

自信はないけど、こんな感じでいけるんじゃね


375371:2005/09/15(木) 00:07:02
374様
Thanks a lot !!
これで納期に間に合いそうです!w
m(__)m
376デフォルトの名無しさん:2005/09/15(木) 00:48:33
VBからFortranのdllを呼び出すサンプルプログラムをうpしていただけませんでしょうか?
変数(配列になっているやつも)の引渡しの部分も書かれているやつで。

ネットでサンプルプログラムを探しているのですが、なかなか見つからなくて困っております。
377デフォルトの名無しさん:2005/09/15(木) 01:40:16
378デフォルトの名無しさん:2005/09/16(金) 17:17:32
fortran で表形式のデータに対して SQLの sort やjoin みたいなことが出来るライブラリ等は無いでしょうか?
行列演算と、データベース的な処理の両方が必要なのですが、fortranは行列に偏っているように思われます。
(科学技術分野では当然か)
379デフォルトの名無しさん:2005/09/16(金) 19:36:47
>>378
使用したことはないので目的に合うかどうか判りませんが
Windows用ならODBCデータベースにアクセスするライブラリがあるようです。

f90SQL
ttp://www.canaimasoft.com/f90sql/index.htm

Windows Fortranによるデータベースの利用 (3月2日 5-10)
ttp://platypus.lns.tohoku.ac.jp/Program.htm#5th
380デフォルトの名無しさん:2005/09/22(木) 15:33:19
>>379 ありがとうございます。しかしDB操作で無くて、プログラム中でSQL的なデータの加工がしたいので、
それは使えません。自作するしかないかもしれません。
381デフォルトの名無しさん:2005/09/25(日) 12:02:40
Intel FORTRAN9を購入した。
自動で並列化してくれつという宣伝につられた。
確かにタスクマネージャーをみると2個とも計算しているっぽい。
しかし、COMPAQのCVF8でコンパイルしたものと比べて(これは1つのCPUが動いている)
全然変わらない。
試したのはCAVITY流れの非定常計算(自作)で、同じマシンで両者を比較。
PentiumD 820を残った少ない予算で購入したのに・・・。
これまで使っていたPentium4 560のほうが速い。意味がなかった。
FORTRAN77形式で書いたのがまずいのかな。
(でも並列化してくれているし)
382デフォルトの名無しさん:2005/09/25(日) 14:19:03
自動並列化がうまくいく確率なんて相当低そう。
PenDを無駄にしたくないならOpenMPで並列化してみ。
たいして難しくないはず。
383デフォルトの名無しさん:2005/09/25(日) 17:43:00
>>381
自動並列化は全然役に立たない。多分、非常にシンプルなプログラムに限ってその効果が現れると思われ。
382の言うようにOpenMPで自分で並列化していくしかない。
384デフォルトの名無しさん:2005/09/25(日) 19:54:51
>>383
多分、並列化の技術の使いかたをイメージできてないんじゃない?
自動並列化は役に立たないんじゃなくて、上手く並列化されるようにプログラムを変える
数式を解きやすいように変形するのと一緒
385デフォルトの名無しさん:2005/09/26(月) 00:43:42
>>384
それでうまくいけば誰もOpenMPやpthread使わない。

数百行のソースなら簡単だけど。
386381:2005/09/26(月) 09:40:25
並列化計算は概要を読んだだけでほとんど勉強していない。
インテルのホームページを読むとこれまでのプログラムのままでも
多少の効果は期待できそうなことが書いてあったので。

自動並列化: インテルVisual Fortran コンパイラには、
ループを自動的にスレッド化する自動並列化機能が搭載されています。
このため、並列化によるマルチプロセッサ上でのアプリケーション・パフォーマンスの改善を
手軽に実現できます。自動並列化機能は安全に並列実行できるループを検出し、
これらのループに関してマルチスレッド・コードを自動的に生成するため、
イタレーションのパーティショニング、データの共有、スレッドのスケジューリング、
同期化といった低レベルの細かい作業をユーザが行わなくても並列化が可能となり、
マルチプロセッサ・システムやハイパー・スレッディング・テクノロジ対応システムの強力な
パフォーマンスを活かすことができます。並列実行ループのベクトル化機能や、
ソフトウェア・ベースのスペキュレーティブ・プリコンピュテーション新機能など、
ハイパー・スレッディング・テクノロジ対応インテルプロセッサでのパフォーマンスの
向上につながる最適化の改良が行われました。


それにしても一応デュアルで動いているのに効果が全くないのは
どういうこと?思ったほど高速化しなかったな、というのは
よくあることだけど、計算が振り分けられれば多少は高速化すると
思うのだが。
タスクマネージャーをみる限りでは2個ともフルに動いていそうなのだが。
387デフォルトの名無しさん:2005/09/26(月) 13:01:56
次のような単純ループのプログラムを自動並列化オプション付きでコンパイルしても、
CPU占有率は75パーセントがいいとこだったよ orz...

program Console1
implicit none
integer i, j, k
integer, parameter :: NLOOP=1000
real(8) :: dum

dum=0.0d0
do i=1, NLOOP
do j=1, NLOOP
do k=1, NLOOP
dum=dum+sin(k*1.0d0)
enddo
enddo
enddo
write(*,*) dum

end program Console1
388デフォルトの名無しさん:2005/09/26(月) 13:20:29
sinなんて関数呼んだら、ループが並列化していいかどうか
判断できないんじゃ?
389381:2005/09/26(月) 14:08:23
行列の積だと100%になったよ。
ただし、行列×ベクトルだとコンパイルした時点で並列化してくれない。
もっとも多い計算が行列×ベクトルなのに・・・。
たとえば、これだと100%になった。


PROGRAM REI
IMPLICIT NONE
INTEGER ::I,J
REAL(8),DIMENSION (5000,5000) :: A,B,C
DO I=1,5000
DO J=1,5000
A(I,J) = 1.1d0
B(I,J) = 2.1d0
END DO
END DO
C = MATMUL(A,B)
STOP
END PROGRAM REI
390デフォルトの名無しさん:2005/09/26(月) 14:41:03
>>389
MKLに入ってるblasだったら並列化されてるから、それ使えばいいんじゃない?
391デフォルトの名無しさん:2005/09/26(月) 19:31:31
コンパイラに金を出したみたいだし、タスクマネージャとかいってるから
Winユーザでしょ?
てことはMKLも有償じゃぁ…
392デフォルトの名無しさん:2005/09/26(月) 23:44:50
>>389
って事はベクトルは行列にしてから計算しろってことじゃね?
393381:2005/09/27(火) 00:05:57
>>391
お察しの通りWindows版です。
Linuxは扱い方がよくわからず、いろいろ不便なので
(インストールしてネットワークの基本的な設定ができる程度)
軟派ですがWindowsを使っています。
>>392
B(5000,1)にしろということでしょうか?(単純すぎ?)
この方法では並列化しませんでした。
うまいアルゴリズムを考えなくては。
並列化とOpenMP勉強します。
皆様、アドバイスありがとうございました。
394デフォルトの名無しさん:2005/09/27(火) 00:29:17
>>393
なんとなくだがB(5000,5000)のB(x,x)だけ使えばいいんじゃね?
395デフォルトの名無しさん:2005/09/27(火) 15:26:06
>>388
自動並列化がそんなにバカなら使い物にならないな。
396デフォルトの名無しさん:2005/09/29(木) 01:31:25
ご教授おねがいします.

module variables
    real(8),dimension(:,:),allocatable :: x
    integer :: i,j
end module
としてモジュールをつくり,
program main
    use variables
    implicit none
    read(*,*) i,j
    allocate( x(i,j) )
    !ここで配列xに値を代入する操作を行う
    call test()
end program
subroutine test()
    use variables
    implicit none
    !配列xに対する操作・演算を行う
end subroutine

というプログラムを実行した場合,
配列xに代入された値は,サブルーチン内から確実に参照できるのでしょうか?
(正確な値が参照できる保障はあるのでしょうか)
また,モジュール内でallocatable属性の変数を宣言し,
プログラム内で動的確保,サブルーチン等で共有することは
プログラミングの作法として許されているものなのでしょうか?
なお,コンパイラはCompaq Visual Fortran 6.1を使用しています.
よろしくお願いします.
397デフォルトの名無しさん:2005/09/29(木) 20:37:20
>>396
普通はmodule内に、allocateするためのルーチンを作っておいて、それを呼びます。例えば

module variables
implicit none
    real(8),dimension(:,:),allocatable :: x

contains
subroutine alloc_x(n1,n2)
implicit none
integer, intent(IN) :: n1, n2
allocate(x(n1,n2))
end subroutine

end module

みたいな感じで作っておいて、呼び出し側では

use variables
read(i,j)
call alloc_x(i,j)

で配列確保します。メリットはC++ライクなカプセル化ですかね。
398396:2005/09/29(木) 23:35:56
>>397
ありがとうございました.

Fortran90で,とりあえず動くプログラムを作ることばかりを考えてやってきてたので,
一度プログラミング作法やFortran90の仕様などをきっちり勉強したいと思います.
399デフォルトの名無しさん:2005/09/30(金) 00:45:16
fortran90でOOPぽいプログラミングするなら

http://www.cs.rpi.edu/~szymansk/OOF90/F90_Objects.html
http://www.amath.washington.edu/~lf/software/CompCPP_F90SciOOP.html

も読んどいたらいいかもね。
400デフォルトの名無しさん:2005/09/30(金) 03:57:35
>>399
そういえば、Fortran2000だったか2005だったかで、OOP支援機能がなんか入るんじゃなかったっけ?
401デフォルトの名無しさん:2005/10/01(土) 12:38:09
>>396
module variables
    real(8),dimension(:,:),allocatable :: x
    integer :: i,j

CONTAINS
subroutine test()
    use variables
    implicit none
    !配列xに対する操作・演算を行う
end subroutine

end module
とするのがこの場合の本来的な型。
402デフォルトの名無しさん:2005/10/02(日) 10:32:07
>>396
module variables
    real(8),dimension(:,:),allocatable :: x
    integer :: i,j
!
CONTAINS
subroutine test()
    use variables
    implicit none
    !配列xに対する操作・演算を行う
end subroutine
!
end module
とするべし。
allocateに関しては問題なし。
403デフォルトの名無しさん:2005/10/02(日) 11:20:50
>>402
subroutine test() 内の use文は不要じゃない?

後、配列の大きさは size() で調べられるから
モジュール内の i, j は不要な気もするけど
そこら辺は好みの問題か。
404デフォルトの名無しさん:2005/10/02(日) 11:47:08
variable::test() みたいに呼べればいいのにな。
405デフォルトの名無しさん:2005/10/02(日) 18:27:28
質問

学生時代ずっとf77ばっかりで
会社に入ってようやくf90をやりました。

配列式、メモリの動的確保、do-enddoとか
便利なところは感じますが疑問もあります。

moduleってどんなメリットがあるのでしょう?

使い方も難しくて利点がよくわかりません。
406デフォルトの名無しさん:2005/10/03(月) 14:12:09
commonとincludeを使わないで良くなるからmoduleのほうが好きだ。
コードもきれいに書けるし。
407デフォルトの名無しさん:2005/10/03(月) 23:05:56
>>405
メリットとしてはcommonに比べて安全に変数を共有できる、とか
モジュール内のサブルーチンを使う時にコンパイラが引数の型チェックをしてくれる
などかな。

使い方はここらへんを参考にして
ttp://ace.phys.h.kyoto-u.ac.jp/~tomita/education/fortran90/sec9.html#9.3.
ttp://www.mri-jma.go.jp/Project/mrinpd/coderule.html
408デフォルトの名無しさん:2005/10/04(火) 18:54:50
研究でVAX FORTRANという言語を使わないといけないんですが
開発環境はどこでダウンロードできますか?
探したんですが見当たらなくて 誰か教えてください。。。
409405:2005/10/04(火) 21:26:05
>>406
>>407
ありがとう。

理解したとは言えないけど、なんとなくわかった気がします。

学生時代、研究でドイツ人の書いたf90ソースを改良しなくてはならないのに
f77しか知らずに、moduleとかすごい嫌いになったんですよね、、。

勉強してみようかな、、。

410405:2005/10/04(火) 21:27:35
>>407
すいません、追加で質問です。
commonはなぜ危険なのでしょうか?
411デフォルトの名無しさん:2005/10/04(火) 21:40:36
どこで変更しているかが明示されないから
412デフォルトの名無しさん:2005/10/04(火) 21:55:13
commonとequivalenceはgoto文と同じくらい凶悪です。
413デフォルトの名無しさん:2005/10/05(水) 00:20:57
>>408
はい、これ↓。Hobbyistなら非商用に限り無料で使えるOpenVMS
ttp://www.openvmshobbyist.com/

AlphaかVAX用だけどね。

VAX互換で良ければIntel Fortranあたりでも使えば?
(一応、DEC→Compaq→HP→Intelの流れでVAX FORTRANがご先祖様だし)
414デフォルトの名無しさん:2005/10/05(水) 00:23:19
Microsoftがfortranに手を出さないのは何故でしょうか?
415デフォルトの名無しさん:2005/10/05(水) 00:53:36
>>414
つ 【Microsoft Fortran PowerStation】
416デフォルトの名無しさん:2005/10/05(水) 08:05:03
>>413
ありがとうございます
助かりますっ
417デフォルトの名無しさん:2005/10/05(水) 13:15:25
>>415
なんで廃れたのかね?
418デフォルトの名無しさん:2005/10/05(水) 20:48:45
売れないからでしょ
419デフォルトの名無しさん:2005/10/06(木) 00:43:28
姫野ベンチってさ、FortranのよりCの方が30パーセントくらい速いんだけど、そんなもんなの?
420デフォルトの名無しさん:2005/10/06(木) 22:53:30
どのFortranやねん
421デフォルトの名無しさん:2005/10/07(金) 21:05:19
intel visual Fortranの購入を考えているんですが、これのマニュアルにはネット接続環境でないと
アップデートができないとありますが、インストールしたあとでアップデートを受けたい場合には
ネットに接続し、手動でオンライン認証を受ける必要があるんでしょうか?
422デフォルトの名無しさん:2005/10/07(金) 21:49:31
Visual FortranオンリーでGUIなプログラムつくっている人っているのかな?
423デフォルトの名無しさん:2005/10/08(土) 00:39:21
>>421
アップデート方法は基本的に
インテルのプレミアサポートから新しいバージョンを丸ごとダウンロードして
古いバージョンをアンインストール→新しいバージョンをインストール

プレミアサポートにログインするためには予め登録しておいたIDとパスワードが必要。
424デフォルトの名無しさん:2005/10/09(日) 10:49:17
c2fはどこにあるんでしょうか?
>6のリンク先のリンク先は切れているし
c2f.zipでググってもリンク切ればっかりで見当たりませんでした
425デフォルトの名無しさん:2005/10/09(日) 13:39:08
>>424
ttp://home.earthlink.net/~dave_gemini/c2f.zip

ttp://www.talkaboutprogramming.com/group/comp.lang.fortran/messages/161252.html
> I lost my copy of C2F.ZIP file when I changed computers/ISP in last year,
> and now have a request to make it available again.

・・・(´Д`;)
426デフォルトの名無しさん:2005/10/10(月) 00:57:00
>425
ありがとうございます
427デフォルトの名無しさん:2005/10/10(月) 17:34:42
簡単な質問ですいませんが、正の実数Xを入力して
その小数部を出力するにはどうすればいいんですか?
428デフォルトの名無しさん:2005/10/10(月) 17:39:46
簡単な質問ですいませんが、正の実数Xを入力して
その小数部を出力するにはどうすればいいんですか?
429デフォルトの名無しさん:2005/10/10(月) 18:17:14
(Xの小数部) = (実数X) - (Xの小数部を切り捨てた値)
430デフォルトの名無しさん:2005/10/10(月) 18:39:24
x = x - real(int(x))
431デフォルトの名無しさん:2005/10/10(月) 21:41:12
文字処理でcharacter型変数に格納されている文字数を取得したい場合
どうすればよいでしょうか?
C言語ではヌル文字があって比較的簡単だったのですが,Fortranでは無いようなので…
432デフォルトの名無しさん:2005/10/10(月) 21:56:15
WRITE(*,*) LEN_TRIM(' Hello, World! ')
433431:2005/10/10(月) 22:00:38
>>432
即レスありがとうございます.
できました!
434デフォルトの名無しさん:2005/10/11(火) 00:37:49
>>429さん>>430さん
ありがとうございます。
お礼を言うのが遅くなってすいません…。
435デフォルトの名無しさん:2005/10/13(木) 08:25:31
Fortran90/95
の入門書としてお勧めの書籍があれば教えてください.

http://www.amazon.co.jp/exec/obidos/ASIN/4894713217/
一応これがいいかなって思っているんですが.
436デフォルトの名無しさん:2005/10/13(木) 12:14:08
IntelのMKLって試用期間過ぎてもスタティックライブラリをリンクして使えてるんだが、こんなもんなの?
437デフォルトの名無しさん:2005/10/13(木) 20:15:15
>>435
俺もその本使ってる。
分かりやすくはないんだけど、本屋で立ち読みした他の本は
もっと分かりにくかったのでその本を買ったよ。

でも、ちょっとFortranに慣れてきたらその本より
ttp://www.rs.kagu.tus.ac.jp/yama/f90/f90-lang.html
の方がよっぽど役に立つよ。
438435:2005/10/13(木) 22:47:23
>>437
おおありがとう.
リンク先も参考にさせて頂きます.
439デフォルトの名無しさん:2005/10/18(火) 15:29:33
エラーが出てしまい、自力での解決が難解なので、皆さんの知恵を貸してください。

プログラムの一部に

E(I)=1.0D00/DSQRT(DREAL(X(I,I)))

という行があるのですが、新型のPC&コンパイラにしたところ、今までは出てこなかったエラーが出てきてしまいました。
エラー表示は

fortcom: Warning: ファイル名.f line 2401: This argument's data type is incompatible with this intrinsic procedure; procedure assumed EXTERNAL. [DREAL]
E(I)=1.0D00/DSQRT(DREAL(X(I,I)))
------------------------------^
/tmp/ifortIC65Ir.o(.text+0x18f5d): In function `secula_':
: undefined reference to `dreal_'
/tmp/ifortIC65Ir.o(.text+0x19264): In function `secula_':
: undefined reference to `dreal_'

といった感じです。dreal、dsqrtの両方のdを外せば解決はしますが、精度が低くなりすぎて使えません。
dをつけた状態でコンパイル時にエラーが出なくなるにはどうしたらよろしいでしょうか。

PC構成は、OSがsuse9.1、コンパイラが無料版のintel fortran 9.0です。
古いPCですと、OSがredhat6.2、コンパイラがabsoftのpro fortranです。

よろしくお願いします。
440デフォルトの名無しさん:2005/10/18(火) 15:49:49
dをつけた状態と書きましたが、精度が失われなければ問題ありません。
あるいはより高い精度になる分にも一向に構いません。

ただ、これよりも精度が劣ることがないようにしていただきたいのです。
441デフォルトの名無しさん:2005/10/18(火) 17:39:45
>>439
種別型パラメタがあってないのかも。
・E(I)=1.0D00/DSQRT(DREAL(X(I,I),KIND=8))
・E(I)=1.0D00/DSQRT(DBLE(X(I,I)))
のどっちかでコンパイル通ったりしない?

種別型パラメタって、
REAL*8の"*8"とかREAL(8)の"(8)"ってやつね。
442439:2005/10/18(火) 18:27:56
>>441
ありがとうございます。
下の方法にてコンパイルが成功いたしました。

現在実際に計算しています。
精度については結果待ちなので明日にならなければ分かりませんが、
いい結果が出ることを祈ってます。
443439:2005/10/19(水) 12:05:12
精度に関しても特に問題ありませんでした。
本当にありがとうございました。
444ハーピィ:2005/10/20(木) 01:07:50
E・∇・ヨノシ <444ゲット♫
445デフォルトの名無しさん:2005/10/22(土) 04:25:33
form='binary' で open して読み書きしたいんだけど g95 だとコンパイルエラーになる・・・
何か対策無い?
446デフォルトの名無しさん:2005/10/22(土) 11:35:33
>>445
form='binary' のかわりに access='stream' を使うとか。
447デフォルトの名無しさん:2005/10/22(土) 14:46:03
普通、 unformatted使わないか?
448デフォルトの名無しさん:2005/10/22(土) 15:51:40
>>446
ありがとー。
access='stream' で望んだ結果が得られました。
449デフォルトの名無しさん:2005/10/24(月) 13:01:06
450デフォルトの名無しさん:2005/10/28(金) 00:21:02
WinXPユーザーなんですが、
Salford FTN95でコンパイルしたものと
g95でコンパイルしたexeのサイズがぜんぜん違うんです。(10倍ぐらい)
(30行くらいのものです)
Salford FTN95はいちいち最初にメッセージが出るんでコンパイラーを変えたいんですが
g95をこのまま使い続けてもいいんでしょうか。
451デフォルトの名無しさん:2005/10/28(金) 00:26:13
>>450
どっちかがスタティックリンクをしているから大きくなる?
452450:2005/10/28(金) 00:47:24
>>451
そうなんですか。気にしないでおきます。たいしたプログラムは組みませんし。
ありがとうございました。

ところで、gfortranとg95はどちらが優れているのでしょうか。
とにかく早く計算したいんです。
別にこの二つに限らないのでWinXPで動くフリーのFortran90コンパイラーを紹介してください。
453451:2005/10/28(金) 00:52:20
「早く」ということは、実行速度はともかく短期間で
実行可能なプログラムを作りたいということと考えれば
g95でないかな。gfortranではコンパイル出来なかった
プログラムがg95では出来たことがある。
フリーのコンパイラの件は知らん。
454デフォルトの名無しさん:2005/10/28(金) 12:06:54
>>452
貧乏なら無償のIntel FortranをLinuxにインストール。
金があるなら、Windows版Intel Fortranを買え。アカデミック版なら大した金額じゃない。
お遊び程度なら、Linux上でgfortranかな。
455デフォルトの名無しさん:2005/10/28(金) 16:17:00
>>454
Linux上で、っていう要件を満たせるなら、遊びでも素直にIntel Fortran使ったほうが吉かと。
456デフォルトの名無しさん:2005/10/28(金) 17:37:07
>>452
coLinux上でIFC
457デフォルトの名無しさん:2005/10/28(金) 17:53:22
>>456
IFCってIntel Fortran のバージョン7までだよね?
8からはifort。7系列をダウンロード出来る場所を
見付けられなかったよ。premierサポートに登録して
いて8と9はダウンロード出来た。
458デフォルトの名無しさん:2005/10/29(土) 00:48:17
いやバージョン関係なくIntel Fortran Compilerの略でIFCって使ったんだけど。
8以降はifortって言わないといけないのか。
459450:2005/10/29(土) 02:06:35
みなさん、ありがとうございます。
LinuxのIntel製コンパイラーが優秀なのは知っているのですが、
なぜかインストールに失敗してしまいます。
Linuxに関してはかなり初心者なのでインストール方法があっているかも
自信はありません。
Vine Linux3.2はとっつきやすそうなので挑戦したいと考えてはいます。
LinuxになれたらIntelコンパイラーを入れてみようと思います。
460デフォルトの名無しさん:2005/10/30(日) 18:00:19
すいません、わからないので教えてください。
使ってるのは「fortran90」です。

「0度から90度まで5度刻みで、小数点以下5桁の精度の
三角関数sinとcosとtanの表を作れ。ただし、tan90°の
値には・・・・(中点4つ)を表示させること。」

途中まで作ったんですが…、最後の「tan90°の
値には・・・・(中点4つ)を表示させる」がわかりません…。

real, parameter :: rad=3.1415926/180.0
real :: r,s,c,t
integer :: k
print*, "角度 sin cos tan"
do k=0,90,5
r=k*rad
s=sin(r)
c=cos(r)
t=tan(r)
print'(1x,i3,2x,3f10.5)',k,s,c,t
end do
end
461デフォルトの名無しさん:2005/10/30(日) 19:50:53
IF文使えば?
462デフォルトの名無しさん:2005/10/31(月) 18:50:35
FORTRANというより数学の問題じゃないか。
なんで90度のtanだけ特別扱いになるか分かってるか?
463デフォルトの名無しさん:2005/11/01(火) 10:16:29
こんなの宿題か何かだろ?いちいち助言してたらキリがないよ。
>>460も自分で考えな。
プログラムを書くことからじゃなくて、アルゴリズムを先に考えるんだぞ。
464デフォルトの名無しさん:2005/11/01(火) 19:35:49
そういえばFortran 2003 には Floating-point exception handling が有るそうだが
どんな感じになるの?
調べてもようわからんかった・・・
465デフォルトの名無しさん:2005/11/02(水) 03:14:05
intelのサイトしか見てないけど
intelのwindows版コンパイラはvisual fortran版しかないの?
linux経験がないので非商用版を使う前に評価版で性能とかを
win上で確かめたかったけど
466デフォルトの名無しさん:2005/11/02(水) 20:33:02
>>465
どういう意味?
Windows版でもコマンドライン環境で使えるよ。
467465:2005/11/05(土) 01:12:52
>466
http://www.xlsoft.com/jp/products/intel/compilers/index.html
みたらwin版はvisual fortran ってかいてて
linux版はfortranとしか書いていないから
ちがうものかと思ってました。
なんかlinux版にもvisual fortranがあると思いこんでました
468デフォルトの名無しさん:2005/11/08(火) 21:30:20
質問です。
今までCompaq Visual Fortran 6.6(以降CVF)を使っていましたが
最近Intel Visual Fortran(以降IVF)に乗り換えました。

ところがデバッグの仕方がわからず四苦八苦しています。

例えば
real*4 x(100)
に対して
do i = 1, 101
x(i) = 0.0
enddo
と書きます。
CVFを使って、この状態でデバッグ実行すると、配列オーバーで止まり
その時点での変数iの値などを見れました。

ですが、IVFだと止まることは止まるのですが
変数の中身が見れません。
Visual Studio関連のソースだと思うのですが
Cのソースコードが表示された状態からどうしたらよいかわかりません。

IVFでこの問題解決する方法ってありますか?

マニュアル読むにしてもキーワードもわからないので
何かアドバイス頂けたら、、と思います。
469デフォルトの名無しさん:2005/11/10(木) 22:17:41
数値解析や3Dグラフの描画にフォートランを使おうかと考えています。
いろいろと調べてみたところ、ヒューリンクスのプロフォートランが
良いかと思いました。
これを使っている人はいますか
http://www.hulinks.co.jp/software/pf/plplot.html
470デフォルトの名無しさん:2005/11/10(木) 23:52:35
>>468
Intel Visual Fortranでよくありますね。
エラーが出てプログラムが止まった時にDOS窓に戻ったら、
どこでエラーが出たかメッセージが書いてませんか?
サブルーチン名みたいなのと行番号みたいなのがあわせて書いてあると思うのですが。

それがないようなら、PAUSE文をたくさん挿入するなり、
「カーソルの行まで実行」で順に見ていくなりして、
様子を見るしかないと思います。
471デフォルトの名無しさん:2005/11/11(金) 01:00:31
cvfも残しておいたほうがデバッグがしやすいよな
472468:2005/11/12(土) 10:27:22
>>470
>>471
レスありがとうございます。

機能的に無理なのですかね〜。
上位互換ということでCVFでできたことは全部できるかと予想していたのですが。


行番号などは確かにプロンプトに出ていますね。
それがループの中とかじゃなければ、その情報でも作業できるんですけどね〜。
473デフォルトの名無しさん:2005/11/15(火) 16:46:43
g77のときには無事コンパイルできていたのですが、gfortranになってからコンパイルエラーになります。

INTEGER MASKA
DATA MASKA/'377'0/
END
某プロフラムのソースで見かけたのですが、勉強不足なのか、このDATA行の意図することが分かりません。
MASKA
はINTEGERで、DATAにある
'377'
は「377というCHARACTER」を入れようとしているように読めるのですが…。
「377*0」でもなさそうですし、「3770」なら、そのまま書けばいいように思うのですが、どういった意味になるのでしょうか。
474デフォルトの名無しさん:2005/11/15(火) 19:30:33
>>473
自己レス

「'377'0」ではなく「'377'O」でした。
で、これは8進定数 (octal constant) というものでした。
gfortranでは「O"377"」と書いてやらないとコンパイルエラーを起こします。
475デフォルトの名無しさん:2005/11/16(水) 10:13:46
ちょっとお聞きしたいです。fortran77です。
format文でデータを5個横に羅列し、
改行してまた5個、以後繰り返しというプログラムのはずなんですが、4個目で改行、
5個目がひとつ書いてあって改行、以後繰り返し、という感じになってしまいます。
format文なしでやっても一緒でした。
一行あたりの文字量の問題かとも思ったのですが・・
なにかヒントいただけたら幸いです。
476デフォルトの名無しさん:2005/11/16(水) 18:15:57
>>475
WRITE(*,*) 0.1, 0.2, 0.3, 0.4, 0.5
と、書式を指定しない場合は、(コンパイラ依存かもしれないけど)
1行72文字 or 80文字で自動的に改行が入る。
(ファイルへの出力、標準出力いずれでも結果は同じ。)

WRITE(*,'(4F12.6)') 0.1, 0.2, 0.3, 0.4, 0.5
と、Format文で4つ分の書式しか指定していなければ
5つ目のデータ(ここでは0.5)が改行されてから出力される。

WRITE(*,'(5F12.6)') 0.1, 0.2, 0.3, 0.4, 0.5
と、ちゃんと5つ分の書式をしていれば、必ず改行なしで出力される。
80桁を超えてももちろんOK。

なんで、Format文でデータ5つ分の書式を指定していることをチェックしてみれば?
477デフォルトの名無しさん:2005/11/17(木) 13:49:11
>>476
ありがとうございました!5つ分の式が書いていませんでした。。
というか、出力6個あったのに5個と勘違いしていました。。
非常に助かりました。ご丁寧にありがとうございました。
478デフォルトの名無しさん:2005/11/17(木) 22:49:39
Sun、C/C++およびFortranの開発環境「Sun Studio 11」も無償化
http://www.itmedia.co.jp/enterprise/articles/0511/17/news025.html

太っ腹ですね。
479デフォルトの名無しさん:2005/11/18(金) 13:18:52
>>478
お、すげー!x86でSolaris試したかったんだけど、CコンパイラはともかくFortranコンパイラがないのがネックだったんだよね。
480デフォルトの名無しさん:2005/11/21(月) 17:31:03
rand() を使わずに乱数を作りたいのですが、
誰かわかるかた教えていただけませんか?お願いします。
481デフォルトの名無しさん:2005/11/21(月) 18:07:45
>>480
「乱数」伏見正則,東京大学出版会がいいと思う。
482デフォルトの名無しさん:2005/11/21(月) 18:16:56
乱数発生するPCIカードとかあるよ。
483デフォルトの名無しさん:2005/11/21(月) 18:21:28
>>481
ありがとうございます!調べてみます
>>482
できればプログラムの書き換えだけで済ませたいのです、、、。
でも書き込みありがとうございます!
484デフォルトの名無しさん:2005/11/21(月) 23:23:40
>>481
Numerical Recipe に解説+プログラムが
数パターン載ってる。
485デフォルトの名無しさん:2005/11/22(火) 10:52:26
なんとか解決できそうです。
みなさんありがとうございました!!
486デフォルトの名無しさん:2005/11/22(火) 23:54:47
>>485
どう解決するの?
487デフォルトの名無しさん:2005/11/23(水) 01:19:40
学校でFortranを習っているのですが、レポートがわかりません。

..以下のプログラムを作成しメールで提出
..「級数展開によりsin(xπ) を求め、表示する」
.. x とn は実行時にキーボードから入力
.. 実数の計算はすべて倍精度で行う

という内容です。級数展開の内容は次の通りです。
sin(xπ) ≒ xπ - ((xπ)^3)/3! + ((xπ)^5)/5! - ((xπ)^7)/7! + ((xπ)^9)/9! - ・・・・ ((xπ)^(2n-1))/(2n-1)!
488487:2005/11/23(水) 01:21:00
授業で習った文法(?)で使えそうなものは、doとifぐらいです。
作ってみたのですが、これで合っているかどうかわかりません。
御指導お願いします。


program taylor_expansion
implicit none
interger :: i, j, n, kai
real(8) :: pi, x, result
intrinsic atan, sin

pi = 4.0D0 * atan(1.0D0)

write(*,*) "input x"
read(*,*) x
write(*,*) "input n"
read(*,*) n
489487:2005/11/23(水) 01:21:46

if (n<=0.0D0) then
write(*,*) "error! n must be natural number!"

else

kai = 1
result = 0
do i = 1, n
do j = 1, 2*i-1
kai = kai*j
end do
result = result + (-1.0D0)**(i+1.0D0) * (x*pi)**(2.0D0*i-1.0D0) / kai
end do

write(*,*) "sin(x*pi) is about",result
write(*,*) "sin(x*pi) is",sin(x*pi)

end if

stop
end program
490デフォルトの名無しさん:2005/11/23(水) 15:30:00
>>487-489
kaiの初期化の位置がおかしい。
このままでは i のループの2回目以降で前回の値が持ち越されてしまう。

それから n を大きくすると階乗の値がオーバーフローする恐れがあるので
kai は倍精度実数の方がいいかも。
491487:2005/11/23(水) 18:38:10
>>490
考えてくださって本当にありがとうございます!
「kai」の初期化の位置については全く気がついていませんでした。

result = 0
do i = 1, n
kai = 1
do j= 1, 2*i-1

と書くべきですよね。
明日学校でコンパイル・実行して試してみます。
ありがとうございました。
492デフォルトの名無しさん:2005/11/23(水) 19:49:18
級数展開でsin関数を計算する意図が良く分からない。手計算しかできないときは役立つけどさ。
その先生、頭悪いんだろうな。
ご愁傷様。
493デフォルトの名無しさん:2005/11/23(水) 21:10:50
>>492
ただの練習問題なんだろう。
そんなのの内容にまで一々ツッコミ入れてたらきりがないよ。

>>487
それよりも、ここに書き込み出来る環境があるなら
机上だけで悩んでないでフリーのコンパイラでも入れて
自分でも試すようにした方がいいよ。
494デフォルトの名無しさん:2005/11/23(水) 23:26:28
>>492
287を積んでない286マシンで極座標とか円筒座標の座標計算するときには役に立つと思う。
今はありがたみを感じないかも知れないけど。

たぶんセンセはその時代の人なんでしょう。
495デフォルトの名無しさん:2005/11/23(水) 23:37:27
>>494
コプロ世代か。
496デフォルトの名無しさん:2005/11/23(水) 23:38:15
つか、その世代だとテーブルに格納してたと思うけど。
497487:2005/11/24(木) 22:18:26
>>490
今日学校でコンパイルして実行してみると、うまく動いてくれました。
まだプログラミングを始めて間もなく、自分で作ったプログラムの中ではいちばん難しかったのでとてもうれしかったです。
アドバイスしていただきありがとうございました。

>>492-493
ただの練習問題です。
フリーのコンパイラを入れて自分のパソコンでもコンパイルできるようにしようと思って試したのですが、
コンパイラの設定がうまくいってないのか、挫折してしまいました。
また今度やってみます。
498デフォルトの名無しさん:2005/11/25(金) 00:56:27
sage
499デフォルトの名無しさん:2005/11/25(金) 17:04:17
質問いたします。
fortranからmatlabを呼び出して関数を使えるらしいのですが、うまくいきません。
コンパイル時に undefined symbols として engopen などが認識されないようです。
当方はfortran77 , matlab7.0.1 を使っていますが、そのせいなのでしょうか?
↓参考にしました
ttp://www.cybernet.co.jp/matlab/support/helpdesk/r14/toolbox/matlab/matlab_external/ch_engi5.shtml#25618
500デフォルトの名無しさん:2005/11/26(土) 22:48:00
real A( 5, 2 )

call s( A )

subroutine s( A )
real A( 4, 2)

・・・

end

上のようなプログラムを作った場合、例えばメインプログラムのA(1,2)と
サブルーチンのA(1,2)は違うものになってしまいます。C言語と配列の
メモリ上配置が違うためというのは分かったのですが、これに対処するために
どうすればよいでしょうか?

・配列の添え字を逆にする。
・最後の添え字の次元をサブルーチンに渡す。

この2つしか思いつかないのですがどちらもわずらわしいです。
なにかいい方法は無いですか?
501デフォルトの名無しさん:2005/11/27(日) 00:05:41
>>500
最初の次元の長さが固定なら、
PARAMETER (N=5)
とか書いたヘッダファイルparm.hを用意して、
PROGRAM MAIN
INCLUDE 'param.h'
REAL A(N,2)
...
END

SUBROUTINE S(A)
INCLUDE 'parm.h'
REAL A(N,*)
...
END
とか書けば?

Cから書き直してるなら添え字を逆にしないと性能が大きく変わる
可能性があることは知っておくべし。
502デフォルトの名無しさん:2005/11/27(日) 00:40:52
>>499
ライブラリがつながっていないのではないかな?
HELPのUNIXでのコンパイルとリンクないしWindowsでのコンパイルとリンクのところをみて
ライブラリのリンクするための環境変数の設定を確かめてみれば?

>>500
FORTRAN90以降ならサブルーチン側での宣言を
real A(;,;)
で次元だけ合わせる形にしておけばとりあえず呼び出し側と同じサイズに自動的になる。

FORTRAN77なら整合配列を使う。呼び出し側で配列の大きさも渡す。
call(n1, n2, a)
...
sub(a)
real a(n1, n2)
...

ただし、FORTRAN77はサイズのチェックをしないから、サブルーチン側で擬寸法仮配列として
宣言しておけば、添え字の最後の大きさを明示的に渡さなくてもいい。
real(5,4)
...
call(5, a)
...
sub(n1, a)
real a(n1, *)
...

さらにいえば、FORTRAN66時代に書かれている既存のプログラムの場合、最後の次元を
擬寸法で与えることも無く、任意の整数値を入れてあることがある。(1とか10のことが多い。)

503500:2005/11/29(火) 20:52:43
>502

解決しました。どうもありがとうございました。
504デフォルトの名無しさん:2005/11/29(火) 20:55:37
プログラム全体を通してのパラメータの定義をする方法というのは
ありますか?
サブルーチン、関数ごとに
parameter ( a=10, b=20 )
という風に何回も書いているのですが、バグの元になっています。
505デフォルトの名無しさん:2005/11/29(火) 21:14:59
use か include を使う。
506499:2005/11/30(水) 22:23:09
>>502
遅くなりましたが、ありがとうございます。
調べてみます・・・。
507デフォルトの名無しさん:2005/12/11(日) 11:20:44
 999 CONTINUE
508デフォルトの名無しさん:2005/12/11(日) 11:56:42
条件分岐で
例えば
変数 i,j,k,l
が1から10までそれぞれとりうるとき
その各々について
分岐させたいんだけど
なにかいい命令文ない?

それぞれで内容がおおきく異なったり、おなじになったりするから

if,select case,do,where

どれも適当なものにならない
(書く量が莫大になる)
なにかいい命令文ない?




509508:2005/12/11(日) 11:58:00
ちなみにfortran90
です
510デフォルトの名無しさん:2005/12/11(日) 14:23:44
>>508
いまいち状況がよく分からないけど、
num=(i-1)*1000+(j-1)*100+(k-1)*10+(l-1)
ってな感じでひとつの変数にまとめてから、
select caseを使って分岐するってのはだめ?
511デフォルトの名無しさん:2005/12/11(日) 15:35:38
if文だらけの状態でここにサンプル書いてみれば?
効率的にできるアドバイスもらえるんじゃね?
512デフォルトの名無しさん:2005/12/12(月) 18:23:59
Microsoft Visual .NET でFortranコンパイラを使っているのですが,
実行すると
 ifort: Command line warning: ignoring option '-extfor'; argument required

 ifort: Command line warning: unrecognized source type
  'C:\Documents and Settings\aoyama\My Documents\Visual Studio
  Projects\yabai\shallowgtemp3d8_new'; object file assumed
 ifort: Command line warning: no action performed for specified object file(s)

というエラーメッセージが表示されてしまいます。
これはどういう意味なのでしょうか?
またその解決法があれば教えていただきたいです。
お願いします。
513デフォルトの名無しさん:2005/12/12(月) 19:47:07
>>512
ソースのファイル名が「-extfor」になってない?
ファイル名と拡張子(固定形式なら .for か .f、自由形式なら .f90)を確認してみて下さい。
514デフォルトの名無しさん:2005/12/13(火) 13:23:04
>>513
ファイル名を.f90にしたところ上のようなエラーメッセージがなくなりました。
ありがとうございます!
515デフォルトの名無しさん:2005/12/14(水) 10:30:50
10個の数字を大きい順に並べる方法を教えてくれい
516デフォルトの名無しさん:2005/12/14(水) 14:31:23
>>515
「ソートアルゴリズム」とGoogle先生に聞けば即答してくれるよ。
しかも何通りも出てくる。
517デフォルトの名無しさん:2005/12/16(金) 16:16:56
f2cを使ってfortranのソースをc言語のソースに変換したいんだが、redumeが英語で
使い方が良く分からん!f2cってどうやって使うの?
518デフォルトの名無しさん:2005/12/16(金) 18:28:35
>>517
f2c -A -c hoge.f
519デフォルトの名無しさん:2005/12/19(月) 13:21:14
>>518
? よくわかんないッス
520デフォルトの名無しさん:2005/12/19(月) 18:32:49
>>519
せめて自分の環境と何をどこまでやったのかくらい書いてくれや。
>>517だけじゃ回答する方もよくわかんないッス
521デフォルトの名無しさん:2005/12/20(火) 14:42:34
プログラム終了時にsendmail等を使ってメールを送信することは出来ますか?
(fortran77)
522デフォルトの名無しさん:2005/12/20(火) 14:52:18
シェルスクリプト組めば何でもできるでしょ。
523521:2005/12/20(火) 14:59:40
>>522
具体的にソースにどのように書けばいいのかを教えて欲しいのですが。
524デフォルトの名無しさん:2005/12/20(火) 15:21:14
#! /bin/sh

(fortranの実行ファイル名)
cat finish.txt | mail -s 'pugaaa' someone@somewhere


とでも書いておけ。つか、Unix勉強汁
525521:2005/12/20(火) 16:15:33
>>524
出来ました!
どうもありがとうございます!
526デフォルトの名無しさん:2005/12/20(火) 21:48:13
intel visual fortran 9.0と visual c++ .net 2003の連携って
どうやったらできるのでしょうか?
いきなりの質問ですいません
教えてくださいm(__)m
527デフォルトの名無しさん:2005/12/20(火) 21:54:17
IVFに連携用のインストーラあるから、それ入れると自動的にできるよ。
528デフォルトの名無しさん:2005/12/21(水) 19:23:44
Fortranがタダで手に入りますよ

サン、Solaris 10対応開発環境最新版「Sun Studio 11」の無償提供を開始
http://japan.zdnet.com/news/devsys/story/0,2000052522,20093324,00.htm?ref=rss

>Sun Studio 11は、C/C++およびFortranを使用するアプリケーション開発ツール。
>最新のマルチコアUltraSPARC、x64およびx86プラットフォームを含むサンの
>最新ハードウェア上で稼働する32ビットおよび64ビットの高性能アプリケーションを開発できる。
529デフォルトの名無しさん:2005/12/21(水) 19:29:39
× Fortranがタダで手に入りますよ
○ 商用Fortranがタダで手に入りますよ
530デフォルトの名無しさん:2005/12/21(水) 20:54:27
>>528-529
Solaris版ね。
Linux版の方にはコンパイラは含まれていない。
531デフォルトの名無しさん:2005/12/22(木) 13:10:27
電気工学の研究をしている者です。
非常に基本的な質問で恐縮なのですが、
誰かご存知の方がいましたら教えてください。

ある数値データファイルおいて、
数値データファイルの1行目から20行目まで、
そのデータの測定情報が記載されていて(つまり文字データ)、
22行目から数値データの羅列が始まっている数値データファイルがあります。

この数値データファイルを読み込ませて処理をする場合、
21行目までを無視して、22行目から読み込むようにする方法はあるでしょうか?

自分でも色々やってみましたが、結局同じファイルをコピーして、
文字データ部分を削除したファイルを作成し、使用しています。
これは面倒だし、ファイル数も多くなるので、
直接元のデータファイルを処理できれば便利なのです。
532デフォルトの名無しさん:2005/12/22(木) 14:37:06
>>531
行頭から、ASCII文字が21文字詰まっているものとして読み込み&無視
533デフォルトの名無しさん:2005/12/22(木) 14:37:53
>>532
ごめん、行じゃなくて列だと思ってた。
534デフォルトの名無しさん:2005/12/22(木) 15:11:37
>ASCII文字がつまっているものとして処理

すいません。具体的にどうやればよいのでしょうか。
これを応用すれば、1行目から21行目まで、
IF文で「数値データでないとき、次の行にうつる」
といったことができそうですね。
535デフォルトの名無しさん:2005/12/22(木) 16:47:42
>>531
WRITE文で後ろに変数を書かなければ
自動的に1行スキップしてくれる。
> OPEN(10,FILE='hoge.dat')
> DO i=1,21
> WRITE(10,*)
> END DO
> (…このあとデータ読み込み)
> CLOSE(10)

あと、>>532 が言っているように行頭の20文字を無視したい場合は
CHARACTER型の変数を用意して
> CHARACTER*20 chr
> WRITE(10,*) chr, (データを格納する変数)
って感じに書けばOK。
536デフォルトの名無しさん:2005/12/22(木) 17:02:02
>>535
writeでやると、ファイルに空白行書き込んじゃうことにならない?
537デフォルトの名無しさん:2005/12/22(木) 18:25:12
>>535
>> WRITE(10,*) chr, (データを格納する変数)
WRITE→READの間違いだとして
書式指定なしでやると途中でスペースやカンマが出てきた場合
そこで文字列の読み込みを止めて変な値を読んじゃうよ。

READ(10, '(A20,3G8.0)') chr, x, y, z
または
READ(10, '(20X,3G8.0)') x, y, z
538535:2005/12/22(木) 20:19:09
間違いだらけだし…。すまん。

>>536
WRITE→READの間違いです。

>>537
それは知らなかった。指摘ありがと。
539デフォルトの名無しさん:2005/12/23(金) 01:38:19
みなさん。ありがとうございました。
みなさんの意見を参考に、以下のようなプラグラムをつくり、解決できました。


OPEN(10.FILE='file.csv',STATUS='OLD')
DO 100 K=1,LEN+21,1
IF(K.LE.21) THEN
READ(10,*)
ELSE
READ(10,*) T,C
HAIRETSU(K-21)=C
END IF
100 CONTINUE
    …
CLOSE(10)

LENというのは、数値データの個数です。
読み込むデータファイル「file.csv」は、
一列目が空白で、2列目に数値データファイルが入ってるので、
一列目にTというダミーの変数を用い、2列目のCの値を配列に格納するプログラムです。

ここでまた質問なのですが、このプログラムだと、1列目の空白をTという変数に読み込むという
無駄な操作をしていることになり、効率が悪いと思われます。
この操作をなくして、直接2列目の数値データだけを読み込ませる方法というのはあるのでしょうか?
540デフォルトの名無しさん:2005/12/23(金) 12:33:54
>>539
データが馬鹿でかくて読み込みにものすごい時間がかかってるのでないなら気にすんな。
データが馬鹿でかくて読み込みにものすごい時間がかかってるとしても、
そのプログラムを何回も実行しないなら気にするな。
そのプログラムを何回も実行するなら素直にデータ変換しる。
541デフォルトの名無しさん:2005/12/23(金) 16:42:51
>>539
書式指定して読み込め。効率はほとんど変わらないけど。
542デフォルトの名無しさん:2005/12/23(金) 21:47:31
この場合の書式指定のやり方がよくわからないです。
でもたしかにこの部分は一瞬で終わるので、気にしないことにします。
ありがとうございました。
543デフォルトの名無しさん:2005/12/29(木) 23:33:17
 100 CONTINUE
544デフォルトの名無しさん:2005/12/29(木) 23:39:42
GOTO 543
545JAVAの強みは:2005/12/29(木) 23:51:28
/*******************
ここへは絶対来ないw
********************/
546デフォルトの名無しさん:2005/12/29(木) 23:52:31
失敗
547デフォルトの名無しさん:2005/12/30(金) 01:18:13
! ここへは絶対来ないとか
c ここへは絶対来ないと書くべきでは?
548デフォルトの名無しさん:2006/01/01(日) 01:03:46
STOP 'ERROR'
549デフォルトの名無しさん:2006/01/06(金) 00:08:23
>>539 単にこれで良いのではないか?
OPEN(10.FILE='file.csv',STATUS='OLD')
DO 100 K=1,LEN+21,1
  READ(10,*)  HAIRETSU(K-21)
100 CONTINUE
CLOSE(10)
550デフォルトの名無しさん:2006/01/06(金) 00:17:44
HALT
551デフォルトの名無しさん:2006/01/07(土) 16:42:28
マックを買おうと思うんですが、マックで使えるフリーの95コンパイラってありますか?
552デフォルトの名無しさん:2006/01/07(土) 18:03:25
g95とか gfortranとか
553デフォルトの名無しさん:2006/01/08(日) 11:21:05
>549

駄目です。1列目を考慮する部分が抜けているからだと思います。
そのプログラムだと、1列目(空白)が配列に読み込まれるから、
配列にはすべて「0 もしくは0.000…0E+00」が読み込まれます。

ところで、21行目までを無視する部分は無くても
正しい結果は出力するみたいですが、
私の使用している富士通のコンパイラだと実行時に、
英語の文章がずらずらと表示されて不快なので、
(よく読んでないですが、どうも入力装置10や、文番号100に関係するようです)
やはり21行目までを無視する部分は必要だと思います。
554デフォルトの名無しさん:2006/01/08(日) 18:32:05
すいません、どなたか教えていただきたいのですが

Fortranでf(x)の積分グラフの面積を台形公式により求め、
さらにその誤差を求めるプログラムなのですが・・・
どのようにしたらよいのでしょうか。
わかる人どなたか、お願いします。
m(._.)m
555デフォルトの名無しさん:2006/01/08(日) 18:38:28
そんな典型的な例題も探せないのか?人生やりなおせ
556デフォルトの名無しさん:2006/01/08(日) 18:56:18
どなたか教えてください

例えば

INTEGER A,B,S,P

DO 4 A=2,7
DO 4 B=2,7
DO 3 S=-2,2
DO 3 P=-2,2
WRITE(6,*) A,B
WRITE(6,*) S,P

3 CONTINUE
4 CONTINUE
STOP
END

を実行してA,B,S,Pを表示させてみると、Aが6から始まったり、Pが−1から始まったりしてしまいます。
何がまずいのでしょうか?
557デフォルトの名無しさん:2006/01/08(日) 20:38:26
>>554
ttp://atlas.shinshu-u.ac.jp/class/Kclass/F-2.html

>>556
まずはファイルに出力させて結果を確認しよう。
後、ループの終端を共有させるのはやめれ。
558デフォルトの名無しさん:2006/01/08(日) 22:55:44
>>549
配列はみだしてるw

>>556
多分問題は全然違うところにあるw

ところでFORTRAN77で行くなら、暗黙の型宣言は死んでも守ったほうがいい。バグの元。
悪いことは言わないから A,B,S,P はそれぞれ IA,IB,IS,IP にしておけ。

559デフォルトの名無しさん:2006/01/08(日) 22:58:57
>>556
宣言してあってもAやBが整数なのは気持ちが悪い。

…問題の本質とは関係ないが。

ところでコンパイラは何?
560デフォルトの名無しさん:2006/01/09(月) 00:18:55
>>558
REAL*8 HAIRETSU(-20:LEN)
とかしとけば大丈夫!

…文字列読み込んだとたんにruntime errorになりそうだが
561デフォルトの名無しさん:2006/01/09(月) 01:11:27
>>560
10 READ(10, *, err = 10) HAIRETSU(K-21)

これで乗り切る手もあるがw ホンモノのエラーが出ると無限ループへwww
562デフォルトの名無しさん:2006/01/09(月) 01:20:19
素人ばっかだな
563デフォルトの名無しさん:2006/01/09(月) 01:23:05
>>562
玄人さまwwww なんか芸を見せてみろw
564デフォルトの名無しさん:2006/01/09(月) 01:25:14
print *, 'Pugyaaaaa!'
565デフォルトの名無しさん:2006/01/10(火) 16:49:50
どなたかintelのコンパイラでintelのmklのLAPACKについておしえてください.
自前のテスト用プログラムや,exampleのファイルをコンパイルしようとすると,'Error in opening the Library module file'というエラーが出ます.
対処方法がわかりません.それどころかライブラリのインストールや設定に問題がありそうなのか,プログラムのコードに問題がありそうなのか,どのあたりが怪しいのかも判断できません.
ちなみにライブラリを利用しないコンパイルは問題ないです.どのあたりを確認していけばよさそうでしょうか.

環境:
Linux fedora 2.6.11-1.27_FC3 i686 athlon i386 GNU/Linux

http://www.xlsoft.com/jp/products/intel/perflib/mkl/lin/Getting_Started.htm#Linking_Your_Application_with_Intel_MKL
を参考に、
$ifort gesvd.f90 -L/opt/intel/mkl/8.0/lib/32/ -lmkl_lapack95 -lmkl_lapack -lmkl_ia32 -lguide -lpthread -o ~/f/a.out
とやってみました.

fortcom: Error: gesvd.f90, line 27: Error in opening the Library module file. [MKL95_PRECISION]
USE mkl95_PRECISION, ONLY: WP => SP
----------^
fortcom: Error: gesvd.f90, line 28: Error in opening the Library module file. [MKL95_LAPACK]
USE mkl95_LAPACK, ONLY: GESVD
…(略)…
compilation aborted for gesvd.f90 (code 1)

intel_mklのマニュアルに書いてあった設定は済ませています.といっても環境変数だけです.
$echo $PATH
/opt/intel/idb/9.0/bin:/opt/intel/fc/9.0/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/user/bin:/usr/java/jdk1.5.0_01/bin
$echo $LD_LIBRARY_PATH
/opt/intel/mkl/8.0/lib/32:/opt/intel/fc/9.0/lib
$echo $INCLUDE
/opt/intel/mkl/8.0/include
566デフォルトの名無しさん:2006/01/10(火) 22:17:18
>>565
F95用のインターフェース定義Moduleがみつかんねーと言っているので、
F77のサンプルを試してみれば、ライブラリの設定に問題があるのかどうか分かるのでは?

と無責任に言ってみるw
567デフォルトの名無しさん:2006/01/10(火) 23:56:39
>>565
Fortran95インターフェイスを使うには、まず自分でインターフェイス部分をコンパイルする必要があるみたいだぞ。

http://www.intel.com/software/products/mkl/docs/mklgs_lnx.htm
568デフォルトの名無しさん:2006/01/11(水) 00:06:38
貧乏人はマニュアルとにらめっこしてろ
569デフォルトの名無しさん:2006/01/11(水) 17:20:31
金持ちのオレもマニュアルとにらめっこするぞw
570デフォルトの名無しさん:2006/01/11(水) 20:16:58
古くからある他人の作ったプログラムを改良する作業をしているのですが
common使いまくりでmoduleに変更しようとしています。

使い方そのものはわかりますが、
commonのメモリの使い方とmoduleにした場合でどう違うか?など
内部的な話を知りたいのです。
それらを知ることができるようなサイトご存じであれば教えてください。
571デフォルトの名無しさん:2006/01/11(水) 22:37:59
>>570
COMMONはメモリー領域の共有割付なので、EQUIAVENCEをかけているのと
同じようになっている。

たちのいいプログラムなら、COMMON文が共通の名前になっていてModule化は楽だが、
変数名がサブルーチン毎に違っていると、それ相応の手当てが必要になる。

また昔のプログラムは、メモリー領域の節約の為にCOMMONを違ったサイズに切って
再利用したりしているので、機械的な修正ができないこともある。

COMMONの割り当て法に関してマニュアルで調べれば必要なことは分かると思う。
572デフォルトの名無しさん:2006/01/11(水) 22:45:48
>>572
● .● ● ●● ●● . ..●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
●   ●●●●●●●● ●
● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ● ● .●
● ● ● ● ● ..● ●
● .● ● ● ●● ● ●
●  ●●●●●●●● ● ● ● ● ●
● ..● ● ● ● ● ● ●
● .● ● ● ● . ●
573デフォルトの名無しさん:2006/01/11(水) 22:46:35
>>573
● .● ● ●● ●● . ..●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
●     ●●●●●●●● ●
● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ● ● .●
● ● ● ● ● ..● ●
● .● ● ● ●● ● ●
●    ●●●●●●●● ● ● ● ● ●
● ..● ● ● ● ● ● ●
● .● ● ● ● . ●
574デフォルトの名無しさん:2006/01/11(水) 22:48:04
>>574
● .● ● ●● ●● . ..●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
●   ●●●●●●●●●● ●
● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ● ● .●
● ● ● ● ● ..● ●
● .● ● ● ●● ● ●
●   ●●●●●●●●● ● ● ● ● ●
● ..● ● ● ● ● ● ●
● .● ● ● ● . ●
575デフォルトの名無しさん:2006/01/11(水) 22:49:25
>>575
● .● ● ●● ●● ●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
● ●●●●●●●●●● ●
● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ● ● ●
● ● ● ● ● .● ●
● .● ● ● ●● ● ●
● ●●●●●●●●● ● ● ● ● ●
● .● ● ● ● ● ● ●
● .● ● ● ● ●
576デフォルトの名無しさん:2006/01/11(水) 22:50:16
>>576
● .● ● ●● ●● ●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
●   ●●●●●●●●●● ●
● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ● ● ●
● ● ● ● ● .● ●
● .● ● ● ●● ● ●
●   ●●●●●●●●● ● ● ● ● ●
● .● ● ● ● ● ● ●
● .● ● ● ● ●
577デフォルトの名無しさん:2006/01/12(木) 18:03:09
プログラミングに関して全くの初心者なのですが、
大学でfortranを使った計算をすることになりました。

Compac Visual Fortran Pro.Edit V6.6
で計算していたプログラミングファイルを、そのまま
absoft Pro Fortran 8
で計算することは可能なのでしょうか?
578デフォルトの名無しさん:2006/01/12(木) 18:31:00
>>577
基本的には可能。
だが実際にはなんともいえない。

元のプログラムがどれぐらいベンダー依存性を持つかによる。
579577:2006/01/12(木) 19:03:07
ベンダー依存性・・・ですか。
すみません、初めて聞く言葉でよくわからないのです。

コンパイルするまでの手順も違うので、戸惑っています。
とりあえず、マニュアルに従ってコンパイルしたら、
local variable mx never referenced.
local variable my never referenced.
というエラーメッセージが出ました。
580デフォルトの名無しさん:2006/01/12(木) 19:44:37
>>579
それは宣言された変数がプログラムの中で
使われていないことに対する「警告」では?
581デフォルトの名無しさん:2006/01/12(木) 22:10:48
>>579
ベンダー依存とは、コンパイラー製造メーカーごとの独自仕様のこと。
元のプログラムを書いた人が、標準の範囲内で書いていれば基本的には問題なし。


しかし、最近は浮動小数点もIEEE形式に統一されたからいいが、
ちょっと前まではハードごとメーカーごとに仮数部と指数部のBit数が違うので
収束やオーバーフローの範囲が異なり色々面倒が起きた。

MacとWinだとEndianの違いがある。バイナリーのファイルをやり取りしようとすると
問題になる。でもまあコンパイラーのオプションで対応できるだろう。
582デフォルトの名無しさん:2006/01/13(金) 00:14:17
秒単位で表された時間tを読み込み、何日何時間何分何秒になるかを表示するプログラムって
どうやってやればいいですか?本当初心者です。。。
583デフォルトの名無しさん:2006/01/13(金) 00:31:55
>>582
考え方が解らないのか、コーディングが解らないのか?
ともかく単なるわり算の問題だぞ。
584デフォルトの名無しさん:2006/01/13(金) 00:32:21
>>582
1日=24時間
1時間=60分
1分=60秒
です。
585デフォルトの名無しさん:2006/01/13(金) 00:34:46
>>582
時間や日付を取得する関数はプラットフォームに依存するからなあ…。
コンパイラ何使ってるかくらい書かないと
586582:2006/01/13(金) 00:41:32
本当初心者なんでコーディング?プラットフォーム?って感じです・・・
学校の課題で出てるんですが・・・s=int(x/y)とr=amod(x,y)を組み合わせて
考えろって書いてあるんですがどうやってもうまくいかなくて。
587デフォルトの名無しさん:2006/01/13(金) 00:56:18
書いたところまで貼ってみな
588デフォルトの名無しさん:2006/01/13(金) 01:04:37
>>582
あー、なんか分かってきた。秒の単位の変数tを日にちと時間に分解するやつだろ?
紀元0年からの秒数かな?うるう年とか絡んでるだろな。
amod()使うのはうるう年の検出のためかな?
589デフォルトの名無しさん:2006/01/13(金) 01:32:22
>>588
ちがうだろw
分と秒 時間と分 日と時間にわけるためだろ
590デフォルトの名無しさん:2006/01/13(金) 01:44:04
Fairfield公式 でググると幸せになれるかもしれない。
591デフォルトの名無しさん:2006/01/13(金) 02:13:49
>>588,590
ユリウス日とかそんな高級な問題ではないと思います。
単に切り捨ての割り算(整数の割り算)と余りの問題だと思います。
592デフォルトの名無しさん:2006/01/13(金) 03:44:25
PROGRAM test
IMPLICIT NONE
INTEGER :: ntime, isec, imin, ihour, iday
READ(*, *) ntime
isec = MOD(ntime, 60)
ntime = INT(ntime / 60)
imin = MOD(ntime, 60)
........
STOP
END PROGRAM test

残りは繰り返しだから自分で完成させろw

秒が整数で与えられると仮定したので、amodでなくてmodにした。
その辺は自分でハッテンさせてくれ。

ま、宿題は自分でやれよw
593デフォルトの名無しさん:2006/01/13(金) 12:05:40
>>583 〜 >>592

みんな凄く親切だな・・・。

卒論生を指導したことがあるが,
「次の作業を指示してください。」という依頼に対して,
「自分で試行錯誤してみるのも,研究だよ。
 いろいろ試してみて,わからなければ聞いてね」
と門前払いしたことがある。

作業内容が明確にわかる指示に対してしか反応できない学生が
多すぎるのかな・・・。


>>582
教科書や補助プリントが全くないとは思えないから,
参考になりそうなプログラムを調べてみるということは,
思いつかないか?

「教科書例題13(入出力)と例題25(関数)を組み合わせれば,
 できそうだが,組合せ方がよくわからない。」
とか,
「こんなエラーがでて,バグが発見できない。」
という質問なら,可愛げもあるのだが。
594577:2006/01/13(金) 12:15:17
>>580,581
ありがとうございます。やはり素人には難しいです・・。
重ねて質問してもいいでしょうか。

mx と my が使われていないということは、
それらをプログラムファイル上で書き換えないといけないということでしょうか。
mx と my はなぜ使われないのでしょう。

プログラムファイルは先生が書いたものなのですが、
ここに来る以前にエラー文を見せた際『分からない』と言われました。
先生がfortranを学んだのは20年近く前になると思います、
『標準の範囲内』を超えている可能性もあるのでしょうか。
Winを使っています。

595デフォルトの名無しさん:2006/01/13(金) 12:41:26
自然数 N が与えられたとき、
1 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは FORTRAN で書くとどうなりますか?

例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。
596デフォルトの名無しさん:2006/01/13(金) 12:54:49
>>595の質問は Pascal スレでもみたんだけど、最近流行ってるの?
597デフォルトの名無しさん:2006/01/13(金) 13:00:02
>>594
> mx と my はなぜ使われないのでしょう?
 変数名のタイプミスの可能性もある。
または,(動作確認用などで)とりあえず変数宣言したが,
動くようになってからは,コメントアウトしてしまった。
も考えられる。
「警告」は,エラーではなく,「動くけど,間違いてないか?」
という,(時にはお節介だが)ありがたい注意だ。

impicit none
をプログラムの最初に書くと,吉かもしれない。
 # 未宣言エラーが大量にでるかもしれないけど。
598デフォルトの名無しさん:2006/01/13(金) 13:02:37
>>597
正 implicit none
誤 impicit none
俺がタイプミスをしている。
599577:2006/01/13(金) 15:01:36
>>597
Compac Visual Fortran v6.6では計算ができるファイルなのですが、
タイプミス等と考えられるのでしょうか。
エラーではないのですね。

本当に基本的なことばかりですみません。

implicit none
書いて試してみます!未宣言エラーって予想もできないので怖いですけど。
600デフォルトの名無しさん:2006/01/13(金) 16:55:03
>>599
20年前に書いたとするとFORTRAN77だから、暗黙の型宣言を使っているはず。
IMPLICIT NONEはかえって大混乱を及ぼしかねないw

昔のプログラムの書き方では変数を使わないことは結構あるので気にするな。
たぶんmx,myはサブルーチンの仮引数だろう。
601577:2006/01/13(金) 17:27:31
>>600
大正解です。

implicit none を書いたら、
シンタックスエラーチェックをした際にエラーが100個出てきました。
軽くパニックです。

なので、mxとmyを何とかしようと、意味も重要性も分からないまま
思い切ってmx→xm,my→ymに全部書き換えてみたところ
同じ箇所で警告がでました。

real mx(mm,2),my(mm,2),ox(mo,2),oy(mo,2),oz(mo,2),refc(4)
^
このmxとmyが駄目みたいです。

でも、気にしないで良い程度のことだと分かり
それだけでとても安心しました。ありがとうございます。
602デフォルトの名無しさん:2006/01/13(金) 17:29:30
>>595 余りエレガントでないw 
判定条件を簡素化出来ればいいのだが、2乗和を比較するとか。
でも一意だと証明できないw

PROGRAM vip
IMPLICIT NONE
INTEGER, PARAMETER :: n = 3
INTEGER :: i, k(n)
LOGICAL :: qpr
k = 1
DO
IF ( ALL(k == n) ) EXIT
DO i = 1, n
IF ( k(i) > n ) THEN
k(i) = 1
k(i + 1) = k(i + 1) + 1
END IF
END DO
!
qpr = .TRUE.
DO i = 1, n
IF ( ANY(k(i) == k(i + 1:)) ) qpr = .FALSE.
END DO
IF (qpr) PRINT *, k(n:1:-1)
k(1) = k(1) + 1
END DO
STOP
END PROGRAM vip
603デフォルトの名無しさん:2006/01/14(土) 15:30:54
すいませんフォートランとは直接関係ないかもしれませんがアイディアをいただければ。。

三角形が無秩序に並んでる(各点の座標は分かってます)なかに任意の点(これも座標は分かってる)
をおいたらその点はどの三角形に入っているかということなんですが何かアイディアはないでしょうか?

三角形の最小x最大x最小y最大y出してその範囲内にあるやつってやってたんですが途中でダメなことに
気づきまして、ちょっとしたヒントないでしょうか。
604デフォルトの名無しさん:2006/01/14(土) 16:34:05
>>603
丸め誤差や例外判定などをまったく無視すれば,
ベクトルの三角形内部判定を使えばいいと思う。

実際にコーディングしようと思うと,
境界線問題や,0割など例外処理が頻発するので,

FORTRAN 計算幾何プログラミング / 杉原厚吉
岩波コンピュータサイエンス
http://www.amazon.co.jp/exec/obidos/ASIN/4000077082/
などに目を通した方が吉かもしれない。
605デフォルトの名無しさん:2006/01/14(土) 16:43:40
>>603
各頂点から、極座標表示で残りの2頂点と判定すべき点をあらわして、
判定すべき点の位相角がすべての頂点から見て、2頂点の角の間に
入ってればいいんでね?
606デフォルトの名無しさん:2006/01/14(土) 17:01:11
>>603

検証してないので間違ってたらすまんが

既知の三角形ABCと点Pがあるとして
∠ABC<∠APC
∠ACB<∠APB
∠BAC<∠BPC
が全部成り立てばいいのでは?

607603:2006/01/14(土) 17:35:05
>>604-606さん
ありがとうございます。すぐに3つも候補をいただけるとは感謝です。
全然思いつきませんでした。
みなさんの考えを参考にさせて頂きましたが結構簡単で計算負荷も軽そうな>>605
さんのやり方で作ってみることにします。できなかったら604さんや606さんのもやってみます。
微妙にスレ違いでしたがみなさんご親切にありがとうございました。
608デフォルトの名無しさん:2006/01/15(日) 21:41:04
すみません。
エロ動画をダウンロードするための連番リストを作成しようとしています

do i=1,10
write(6,*) "http://www4.xtokyo.com/jpmo/j171/jpmo_1",i,".mpg"
end do

これでループを回すとリダイレクトで連番ファイルが作成されるのですが、
jpmo_ 1 .mpg
のように、切れ目で空白がひと文字分はいってしまいます。

jpmo_1.mpg
のように連続的に文字列をつなげるにはどうすればよいのでしょうか?
よろしくお願いします。
609デフォルトの名無しさん:2006/01/15(日) 21:51:07
610609:2006/01/15(日) 22:02:08
解説
 スペースが入ってしまうのは、フォーマットを指定せずに自由形式を使っているから。
フォーマットは、隙間が開かないように文字列、数字の長さ、文字列を指定すればいい。
文字列は長さを指定しなければ自動的に与えた文字列長になる。すなわち a 。
問題は数字で、今回の場合1桁の場合と2桁の場合が混じっているのであらかじめ
決まらない。したがって動的にFormat文を生成しなければならない。
(IF 文で場合分けしてもいいが)
生成したいFormatは、数字が1桁のとき '(a, i1, a)' 2桁の時 '(a, i2, a)'

動的にFormatを作りたい場合は普通、内部ファイルという物を使って作り上げる。
それが最初のWRITE文。10の対数をとって1を足しているのは変数iの桁数を求めている。
fmtという文字列の中に、'(a, i1, a)' ないし '(a, i2, a)' を書き出している。

Format文はWRITE文の中に文字列として直接書いてもいいし、文字変数でもいい。
FORTRANの教科書などでは行番号を用いる形式を良く使うが、情報を局所に展開
させるほうが好ましいいので避けるべし。
611デフォルトの名無しさん:2006/01/15(日) 22:02:44
>>609
あ、すごい。早速ためしてみます。
ありがとうございましたm(_ _)m
612デフォルトの名無しさん:2006/01/15(日) 22:13:51
WRITE(fmt, '(a, i1, a)') '(a, i', INT( LOG10(REAL(i)) ) + 1, ', a)'
なんてものがあるんですね…

今まで出力形式に付いてはあまり拘らずに、データをログファイルに記述できれば
それでことたりてたので、こういうのは初めて見ました…

出力形式についても>>610の解説を参考に勉強してみようと思います。
613デフォルトの名無しさん:2006/01/15(日) 22:22:34
内部ファイルについてはレスの>>89-106あたりでも触れられている。

FORTRAN66時代は、ENCODE、DECODEというのを使っていたので、
FORTRAN77以降の機能だと思う。
614デフォルトの名無しさん:2006/01/16(月) 00:04:06
いろいろいじくって遊んでみました。

WRITE(fmt, '(f7.5)') REAL( LOG10(REAL(i_count)) ) + 1
WRITE(6,*) fmt

こんな感じで実数形式でまわして書き出してみると
1.00000
1.30103
1.47712
1.60206
1.69897
1.77815
1.84510
1.90309
1.95424
2.00000

ってなりました。
対数と頭のINTをつけて形式を変換することによる
小数点以下切り捨てによってi1とかi2とか区別していたんですね。
勉強になりました。
615デフォルトの名無しさん:2006/01/16(月) 00:36:37
あと、ifのベンチもとってみました。
Iを1000000でまわして
if (i < 10) then

WRITE(fmt, '(a, i1, a)') '(a, i', INT( LOG10(REAL(i)) ) + 1, ', a)'
WRITE(6, fmt) "http://www4.xtokyo.com/jpmo/j171/jpmo_00",i,".mpg"

else

WRITE(fmt, '(a, i1, a)') '(a, i', INT( LOG10(REAL(i)) ) + 1, ', a)'
WRITE(6, fmt) "http://www4.xtokyo.com/jpmo/j171/jpmo_",i,".mpg"

end if

のときと

WRITE(fmt, '(a, i1, a)') '(a, i', INT( LOG10(REAL(i)) ) + 1, ', a)'
if (i < 10) then

WRITE(6, fmt) "http://www4.xtokyo.com/jpmo/j171/jpmo_00",i,".mpg"

else

WRITE(6, fmt) "http://www4.xtokyo.com/jpmo/j171/jpmo_",i,".mpg"

end if

で比較すると
前者4.169u 0.225s 0:04.52 96.9% 0+0k 0+0io 0pf+0w
後者6.366u 0.239s 0:07.01 94.0% 0+0k 0+0io 0pf+0w

となりました。ifの前で読み込むよりも、それぞれのif文のなかで読み込ませる方が速いようです。
616デフォルトの名無しさん:2006/01/16(月) 02:35:12
DO i = 1, 10
WRITE(6, '(a, i3.3, a)') "http://www4.xtokyo.com/jpmo/j171/jpmo_",i,".mpg"
END DO

エロリストの数字を007の形にしたいなら、FORMATの I3.3 をつかえばいいお。
これなら i の桁数で場合分けしたりしなくてもいいお。

http://www4.xtokyo.com/jpmo/j171/jpmo_008.mpg
http://www4.xtokyo.com/jpmo/j171/jpmo_009.mpg
http://www4.xtokyo.com/jpmo/j171/jpmo_010.mpg

でもエロ画像はFlashGetやIria(の派生)で落としたほうがいいお。
617デフォルトの名無しさん:2006/01/16(月) 11:51:16
iを001〜075とかでまわしても、頭の0が無視されてたのでifでやるべきなのかなと思ったのですが
ifなくてもできるんですね…

上と同じような条件のベンチは
3.176u 0.333s 0:03.62 96.6% 0+0k 0+0io 0pf+0w
if文はできるだけ使わない方が良いみたいですね。

エロ動画も落とせてfortran力もついて一石二鳥。
すごいおいしいです。
618デフォルトの名無しさん:2006/01/16(月) 21:51:47
>>593
大学教育としては問題があるが、より広い意味での問題解決力としては、
頭を下げて人に教えてもらって解決するというのも一つの重要なテクニック。
619デフォルトの名無しさん:2006/01/17(火) 00:27:51
分からないなりに理解しようと努力しているのであれば
手助けしてやろうという気も起こるだろう。
何も考えずに丸投げするような奴は論外。
620デフォルトの名無しさん:2006/01/17(火) 01:01:46
erolist インリン 受けたw
今日はおもろいねた無いのか?
621デフォルトの名無しさん:2006/01/17(火) 05:47:53
この流れで抽象的な質問をするのはもうしわけないのですが、
Salford FTN95で、よそからもってきた固定形式(.for)のプログラムを
コンパイルしたところ、

Attempt to call a routine with argument number twenty containing
too few array elements

というエラーが出て困っています。
このエラーが出る場合、どういう問題が起きているのでしょうか。
問題となっているサブルーチンは、引数を23個もっているので、
その内の20個が問題あり?どういったことを試せばよいかも
わからず途方にくれています。どうかアドバイスをお願いします。
622デフォルトの名無しさん:2006/01/17(火) 07:05:35
×コンパイルしたところ、
○コンパイルして実行したところ、

でした。
623デフォルトの名無しさん:2006/01/17(火) 10:51:01
>>621
20番目の引数の配列の大きさが小さすぎると言っている。

ソースが古いプログラムなら、意図的にやっている可能性もある。
FORTRANは参照渡しだから、配列を引数としても先頭要素のアドレスを
渡しているだけなので、昔風のプログラミングではサブルーチン側の配列の引数を
A(10)とかと適当な数で宣言して、ルーチン内でははみ出して使っていた。


624デフォルトの名無しさん:2006/01/17(火) 10:56:30
>>621
20番目の引数の配列の大きさが小さすぎると言っている。

今の情報ではこのくらいしかいえない。

ちなみにソースが古いプログラムなら、意図的にやっている可能性もある。
FORTRANは参照渡しだから、配列を引数としても先頭要素のアドレスを
渡しているだけなので、昔風のプログラミングではサブルーチン側の配列の引数を
A(10)とかと適当な数で宣言して、ルーチン内でははみ出して使っていた。



もっと詳しく知りたければ、CALLしている文と、CALLされているサブルーチンの
頭から引数の宣言文までを見せてくれないとなんともいえない。

625621:2006/01/17(火) 12:08:40
>>624さま
レス本当にありがとうございます。試しに20番目の配列の大きさを小さめに
して実行してみたら、その部分はエラー無く動きました。
しかし、同じルーチンの他のいくつかの引数についても同様のエラーが
出たので、次々に配列を小さくしていったのですが、今度はそれらの
引数をwriteするところで、format/data mismatchが出てしまいました。

これらの次数とformatの指定を丹念に調節する以外になにか方法は
ありますでしょうか。古いルーチンに合うコンパイラが必要?
以下は、call文とサブルーチンの頭です。サブルーチンは、
インプットファイルからデータを読む働きをするものです。

CALL READT(TVA,RAR1,RAR2,ASA,INVECT,TVB,IDEG,NL,V,VL,JJS,TST,
& TSTS,THETA,FI,LMMAX,NPSI,ES,PHSS,PHSS2,L1,IPR,NEL)

SUBROUTINE READT(TVA,RAR1,RAR2,ASA,INVECT,TVB,IDEG,NL,V,VL,JJS,
& TST,TSTS,THETA,FI,LMMAX,NPSI,ES,PHSS,PHSS2,L1,IPR,NEL)
COMPLEX VL(NL,2)
DIMENSION ARA1(2),ARA2(2),RAR1(2),RAR2(2),ASA(10,3),ARB1(2)
DIMENSION ARB2(2),RBR1(2),RBR2(2)
DIMENSION CPARB1(2),CPARB2(2),PHSS2(NPSI,80)
DIMENSION V(NL,2),JJS(NL,IDEG),ES(NPSI),PHSS(NPSI,80)
DIMENSION IT1(5),THDB(5),AM1(5),FPER1(5),FPAR1(5),DR01(5)
DIMENSION DRPER1(5),DRPAR1(5)
626デフォルトの名無しさん:2006/01/17(火) 13:24:25
>>625
FTN95コンパイラの仕様と、ソースプログラムの信用度にもよるのだが、
動くんだったら下手にソースをいじらず動かしたほうがいい。

元のソースが正しいと仮定しての話だが・・・・
単にFTN95のチェックが厳しすぎるだけで、オプションで実行時チェックを切れば動くはず。


配列の最後の要素の大きさはFORTRANでは気にしないのが伝統だった。
理由は参照呼出しと多次元配列のメモリー上での取り方の性質による。
詳しい説明はメンドイので誰かに聞いてくれw
627625:2006/01/17(火) 13:47:25
オプションで実行時のチェックが切れるのですか。
恥ずかしながらそんなことも知りませんでした。
今日は用事があるので明日また調べてやってみます。
本当に有り難う御座いました。
628デフォルトの名無しさん:2006/01/17(火) 21:05:06
>>627
どういう環境で実行しているのか知らないが、統合環境を使っていていると
デフォールトではDebugモードでBuildされるとおもう。その場合はチェックが
効いているだろう。

コマンドラインでコンパイルしているなら、自分でオプションをつけない限りは
チェックは入らない。したがって、この場合はコンパイラがきつい仕様になっていると
いうことで諦めて、他のコンパイラで試してみるべし。f77なら昔のWATCOMとか
g77とか色々ただの奴がある。FTN77も個人使用はFreeになっているようだ。


・記憶領域上の多次元配列に関して。〜特に2次元の場合〜
FORTRANでの多次元配列は記憶領域上では連続して1次元に展開されている。
このとき、第1列、第2列、・・・、第N列、・・・、最終列というように列ごとに展開される。
つまり配列A(10,80)の場合、A(1,1)の次はA(2,1)であり、A(10,1)の両隣は
A(9,1)−A(10,1)−A(1,2)とA(9,1)とA(1,2)である。

サブルーチンに配列を含む変数を渡すとき、FORTRANは参照渡し(アドレス渡し)
なので、実際は先頭要素のA(1,1)の記憶領域上のアドレスを渡しているだけである。
それがどこまで続いているかは、実行時にはFORTRANは気にしていない。したがって、
はみ出しさえしなければ、プログラマーの責任でサブルーチン側の宣言サイズに必ずしも
囚われる必要は無い。(が、普通はそれなりに敬意を払う。)

FORTRANの数値計算ライブラリなどを見れば分かるが、行列の列の大きさは
引数として要求されるが、行の大きさは要求されないのはこの事情による。
629名無しさん:2006/01/17(火) 23:56:06
vine linux 3.2 でgcc-3.3.2 を使ってます.
fortranプログラムのコンパイル時に
-r8 のオプションを使いたいのですが,
そんなオプションはないと怒られます.
何かかわりのオプションはあるでしょうか?
630デフォルトの名無しさん:2006/01/18(水) 00:26:34
>>629 マニュアル嫁
GNUとかじゃなく、まともなコンパイラ使え
631名無しさん:2006/01/18(水) 00:39:04
>>630
すんまそん
お金無くて…
632デフォルトの名無しさん:2006/01/18(水) 00:46:16
Intel fortranのLinux版タダじゃん。
633名無しさん:2006/01/18(水) 01:20:03
>632
サンクス

ちょっとためしたみました
エラー: 依存性の欠如:
libsvml.so は matfor_f-3.2-0 に必要とされています
libscml.soなるものが必要だそうだ.
探してみます.
634デフォルトの名無しさん:2006/01/18(水) 01:23:45
>>629 g77にはなさげ。

Increasing Precision/Range

Some compilers, such as f2c, have an option (-r8 or similar) that provides
automatic treatment of REAL entities such that they have twice the storage
size, (中略)

g77 does not yet offer any option that performs these kinds of transformations.
Part of the problem is the lack of detailed specifications regarding exactly how
these options affect the interpretation of constants, intrinsics, and so on.

ttp://programming.ccp14.ac.uk/g77-fortran/~michael/os2/g77/g77.htm#hd_670

f2c+gccという昔風にやるか、IMPLICIT REAL*8 (A-H, O-Z)を各サブルーチンごとに
いれるか・・・でも定数がrealのままなだと解決にならんかも。


g95はいつまでたっても完成しねな。もうFORTRAN2003の規格も決まったんだが。

GNUのfortranもどっかの商用メーカーが倒産してそのフロントエンドでも
貰わないとまともに動かないんでね?

Mac,OpenSource系は信者様の調子のいい話が多くて判断つかねぇ。
連中はすぐ頭に血が上るからうっかりした冗談もいえねえしキモス。
635名無しさん:2006/01/19(木) 20:26:52
>634
親切にどうも
f2c+gccでなんとかなりそうです。
636けい:2006/01/19(木) 21:36:14
FORTRAN素人で困っています。

intel visual fortran を初めて使ってみているのですが、
libm.lib を利用しようとして座礁しています。
use libm
とすると、ファイルが見つからない!と怒られます。
多分、libm.modを探しに行っているのかなと思うのですが・・・。
もちろん libm.modはありません。
さて、どうしたらいいのでしょう?

助けてください。

637デフォルトの名無しさん:2006/01/19(木) 22:06:55
>>636
いまいち状況が分からんが、多分勘違いをしていると思う。
本来の付属ライブラリならその行は要らないはず。

もしくは・・・

USE で用いる .MODファイルというのは、C言語でいう .H ファイルのようなもので
サブルーチン等のインターフェース情報が入っている。
それはソースから自動生成されるのもなので、ソース(インターフェースのソース)があって
自分でコンパイルするか、はじめから提供されているかしなければどうしようもない。

それでも、やる必要があるなら USEのかわりに 各個のサブルーチンを external 文で
並べておけば、コンパイル時のインターフェースのチェックは無しで、LINKERがLINKしてくれる。
まぁ77時代のようなもの。
638けい:2006/01/20(金) 00:30:08
>637
早速のアドバイス、ありがとうございます。
明日、再トライしてみて、結果をご報告します。
639603:2006/01/20(金) 02:02:37
以前質問した603です。
いろいろやってみたんですが604さんの三角形内部判定というやつでできました。
正直こういう数学屋っぽい証明がいるような物は実用性ないだろうと思ってたんですがやってみて
あまりのシンプルさにびっくりしました。教えていただいてありがとうございました。
640デフォルトの名無しさん:2006/01/20(金) 02:31:48
90が77用のコードを実行できたように、95も90や77で作ったコードを実行できますか?
641デフォルトの名無しさん:2006/01/20(金) 03:03:08
>>640
95は90を含んでいるので出来る。
わずかだが77の一部の機能は廃止になっている。
なので規格に完全に忠実だと動かない物も出るはず。

しかしながら大抵のコンパイラーメーカーは過去との互換性の為に規格から削除された機能を
サポートし続けているのでまず大丈夫だろうw ウォーニングぐらいは出るかもしれんが。
642デフォルトの名無しさん:2006/01/20(金) 16:32:15
>>640
Metcalf, Reid の Fortran Explained 90/95 に、規格から削られた部分、
次に削る予定になっている部分などが記述してある。

http://www.amazon.co.jp/exec/obidos/ASIN/0198526938/249-3009705-2437946

http://www.amazon.co.jp/exec/obidos/ASIN/0198505582/249-3009705-2437946
643デフォルトの名無しさん:2006/01/20(金) 17:29:26
>>642
この本には,「Other Features 使わない方がよい機能」という,
お節介な(でも有益だと思う)章がある。
「bit 別冊 詳解 Fortran 90」の改訂復刊を希望する。
644デフォルトの名無しさん :2006/01/20(金) 23:49:24
Solaris(UNIX)でFortran(コンパイラ f77:SC3.0.1)プログラムを作成しています。
このFortranからC言語(コンパイラ cc:SC3.0.1)の関数を呼び出しています。

これらをWindows XPに移植しようと思っているのですが,UNIX/PCの
Fortranの互換性や違いを教えていただけないでしょうか。

また,移植が簡単に行えるFortran/C言語のコンパイラの組み合わせ
があれば教えていただけないでしょうか。移行ツールでも良い。

例えば,インテル Visual Fortran + Microsoft VC++ .NET とか。

以上,よろしくお願いします。
645デフォルトの名無しさん:2006/01/20(金) 23:56:00
全然問題なし。マニュアルに書いてあるし。
646デフォルトの名無しさん:2006/01/21(土) 00:05:38
>>644
Lahey-FujitsuやABSOFTのFORTRANはprofessional versionを買えば
Cコンパイラが付いてくる。

Compaq(DEC)のVisualFortranは、MS VisualC++V6とVisualStudio環境で統合される。
日本語版と英語版が入り混じったりするが・・・・

IntelVisualFortranは、IntelC++とVisualStudio2003/.NETで連携するが、
MSのC++との関係はワカンネw

g77はgccと組めたはず。

現段階ではこの手の機能はベンダー依存だが、FORTRAN2003ではCとの相互呼び出し
機能が規格として規定されているので気長に待つという手もあるw
647デフォルトの名無しさん:2006/01/21(土) 00:16:46
FortranにはCで言うところの終端文字というのが無いから、文字列渡すときだけめんどくさいな
648デフォルトの名無しさん:2006/01/21(土) 01:49:04
FORTRAN2003のオブジェクト指向用の拡張がうんこ過ぎる。
あれを考えた奴は出てきて、どういう使用状況を考えて用意したのか説明しなさい。
649デフォルトの名無しさん:2006/01/21(土) 05:14:12
ISOの偉い人達が集まって
「どーせFortranでOOPなんてロクに使われないんだから、適当でいーんじゃねーの?(鼻ホジホジ」
って決めますた。
650デフォルトの名無しさん:2006/01/21(土) 08:01:17
いろいろありがとうございます。

647さんの情報のようにUNIX/PCのFortranの互換性や違いが書いてある
サイトはあるのでしょうか。
651デフォルトの名無しさん:2006/01/21(土) 11:25:19
>>650
FORTRAN Explained 2003にFORTRANとCでの違いのまとめがある。
データ型の互換性や文字列の終端記号、構造体、call by value, call by reference
などの問題。

それ以外はコンパイラーのベンダー毎に独自の解決をしているので、個別の問題点を
まとめていることはあっても、一般的なまとめは無いのではないかな。マニュアルの相応の
ページを読むしかないと思う。

大文字・小文字を区別するCとしないFORTRANでは、LINK時のサブルーチンの内部
表現名をどうするかなど、細かい落とし穴がいっぱいある。
652デフォルトの名無しさん:2006/01/22(日) 01:16:15
>>639
役に立てたようで,とてもうれしい。
ただ,誤差対策をちゃんとしているかな?
行列式の0割防止,隣接三角形との所属判定など,
面倒な例外処理が必要だと思うのだが。
653デフォルトの名無しさん:2006/01/22(日) 21:51:13
>>652
ご指摘ありがとうございます。
調べた感じ正直そこが一番大事そうでしたがとばしてしまいました。。
ただ僕がやろうとしていることの性質では一応線分上にはほぼ来ないはずと踏んでいたし、
使う目的がその点の三角形の各点の変数からその点の参照値を出すということだったので、
近いところが分かればある程度いいやと考えていたので
大丈夫かなと思っていました。
実際に全部でやるべき1125点をやるべき三角形全部に判定させてループさせましたが
線上判定かぶりの点はなくどこかの三角形1つに入ってくれました(ちゃんと入るべきところに入ってるかはやってませんので
意味ないかも。。)
線上でかぶってたら
ただ言われてみれば判定する点が三角形の各点に近いのでそのあたりがとても不安です。
(ちょっと勉強不足なのですがやっぱり点に近いと誤差どうこうでおかしくなるのでしょうか?)

なんか書いてるうちに不安になってきました。。(笑)教えてくださった参考書をちょっと明日でも借りてきます。
654デフォルトの名無しさん:2006/01/22(日) 23:15:40
>>653
簡潔に説明できないが,
EPSL(微少量),s,t(ベクトルの係数)として,
すべての点が
 EPSL < s < 1-EPSL
 EPSL < t < 1-EPSL
 EPSL < s+t < 1-EPSL
に入っているということかな?
だったら,問題ない。

嫌らしいのは,-EPSL < t < EPSL などの境界上にあり,
隣接三角形との取り合いがある場合。
みかんのへたのような,複数三角形が密集する頂点近傍に,
判定すべき点があると,とても神経質になりそう。
655デフォルトの名無しさん:2006/01/23(月) 12:52:38
領域判定の理論は、ゲーム関係のサイトに載ってるよ。
656デフォルトの名無しさん:2006/01/23(月) 21:34:05
>>653
すまないが,例にあげた参考図書
「FORTRAN 計算幾何プログラミング」
ttp://www.amazon.co.jp/exec/obidos/ASIN/4000077082/
には,そのものずばりの解答は載っていない。

無誤差の整数にしてしまう,というとても遠回りな手法をあげている。
「誤差を真剣に検討するなら,このくらいやるべきかも」
というつもりで参考図書にした。

とても遠回りには違いないが,誤差無しという最強兵器を持っているので,
誤差検討に神経を使うなら,意外に近道だと思う。

>>655 氏のあげている,ゲームグラフィックスは非常に参考になるはず。

「ゲームプログラミングのための3Dグラフィックス数学」
Eric Lengyel,狩野智英
http://www.amazon.co.jp/exec/obidos/ASIN/4939007375/
を資料費で購入してもらおうと思ったら,タイトルで怒られた。
657デフォルトの名無しさん:2006/01/23(月) 23:26:05
LU分解のプログラムを誰か…
ピボッティングはなしで,LとUに分解するだけでいいんで…
658デフォルトの名無しさん:2006/01/23(月) 23:29:50
>>657
LAPACKやMKLに入ってるやつ使えば?
659デフォルトの名無しさん:2006/01/23(月) 23:43:42
>>657
精度比較用に「無しでなければならない」ということか?
ピボッティングありのプログラムは,
宮崎大などですぐに見つかるから,
ピボットの意味を考えて,がんばれ。

余談だが,f77 の3重do文をf90 化すると,
配列操作の練習になるかもしれない。
660デフォルトの名無しさん:2006/01/23(月) 23:44:43
open(10,File='test.txt')
write(10,*) 'Hello,world!'
close(10)
stop
end

これでカレントディレクトリにtest.txtが作成され,中にHello,world!が書き込まれるのは分かるのですが,
プログラムからカレントディレクトリに新しくディレクトリを作成するにはどうすればよいでしょうか?
言語はFortran90です..
661デフォルトの名無しさん:2006/01/24(火) 00:03:50
>>660
FORTRAN90/95ではそれは規格に無い。
ベンダー依存の機能なのでマニュアルの当該部分をみるべし。

FORTRAN2003ではPOSIX互換のルーチンを標準化するようになっていたと
思うので、共通のやり方ができるようになるだろう。
662デフォルトの名無しさん:2006/01/24(火) 00:04:11
>>657
すまない。嘘をついた。
宮崎大は,ピボッティングなしだった。
「学外の方には有用ではない」という注釈を忘れていた。
663デフォルトの名無しさん:2006/01/24(火) 00:15:45
>>657
NUMERICAL RECIPESのHPに行けばソースが見られる。
LU分解はバグ無かったはずw
ピボッティングしていたが。

http://www.nr.com/
664デフォルトの名無しさん:2006/01/24(火) 00:21:56
暗黙の型宣言は使うなとか,common文は使うなとか,
変数名はこう命名しろとかいうような,より良いコードを書くために必須な知識が纏められている書籍
って無いですかね?
C++で言えば,Effective C++に相当するような・・・
665660:2006/01/24(火) 00:31:20
>>661
レスありがとうございます.
マニュアルを参照してみます.
666デフォルトの名無しさん:2006/01/24(火) 01:50:39
>>664
書籍じゃないけど、こんなのはどうかな?

Fortran 標準コーディングルール
ttp://www.mri-jma.go.jp/Project/mrinpd/coderule.html
667デフォルトの名無しさん:2006/01/24(火) 02:14:01
必死さから、一瞬卒研やってる学生かと思ったが、
さすがに今の時期にLU分解を組み込んでるようなら違うかな。
668665:2006/01/24(火) 07:01:35
>>666
d
参考にさせて頂きます
669デフォルトの名無しさん:2006/01/24(火) 19:13:12
>>667
今月から本腰入れるっていうところも多いから強ちはずれでもないかもよ
670デフォルトの名無しさん:2006/01/24(火) 20:27:44
>>664
FORTRAN77時代のものなら
http://www.star.le.ac.uk/~cgp/prof77.html
これがまとまっていたと思う。
671デフォルトの名無しさん:2006/01/24(火) 21:53:22
お聞きしたいのですが
サブルーチン文を2回別の変数を持って呼び出すときに、1つ目の変数をAと
したとき二つ目の変数を-Aにしたいのですがこのとき
call ****(-A,B,.....)
としていいのでしょうか?
やっぱりコールする前にA=-Aとしないといけないのでしょうか
672デフォルトの名無しさん:2006/01/24(火) 22:04:08
>>670
FORTRAN90の場合、INTENT(IN)属性をつけたものならマイナスをつけてもOK
INTENT(OUT)、INTENT(INOUT)の場合は駄目だとおもう。

それはFORTRANはアドレス渡しで変数を渡しているので、マイナスが付いたときの
変数の戻し方に任意性が生じるから。

FORTRAN77時代はどうだったか・・・・
あるいはINTENT属性をつけない場合は・・・・
まぁ昔のFORTRANでは何事も気にしないことが多いので、多分そのまま通るだろうw
そして結果はコンパイラーに依存するだろうw
673デフォルトの名無しさん:2006/01/25(水) 22:36:56
Intel Fortran Compiler for Mac OS ベータテスト開始
ttp://www.xlsoft.com/jp/products/intel/mac_beta.html
674デフォルトの名無しさん:2006/01/26(木) 15:16:56
すいません質問です

Windows用 Intel Fortran EM64T対応のを使ってます。
諸事情でメモリ2G制限を越えるプログラムを作らなくてはならなくなったのですが、
これって静的領域に確保することは可能なのでしょうか?
どうも2G以上の領域を確保しようとするとリンカでハネられてしまうのですが…
675デフォルトの名無しさん:2006/01/26(木) 17:08:56
>>674
単一の配列で2G超えですか?複数で合計2G超えですか?
OSはWindows64ですか?32bitWindowsでターゲットがwin64用ですか?

でも、ここで聞くよりマニュアルを調べた方が早いと思う希ガスw
676デフォルトの名無しさん:2006/01/26(木) 18:15:01
フォートランをマスターするとどんな幸せな事にめぐり会えますか?
677デフォルトの名無しさん:2006/01/26(木) 19:27:19
>>672
ありがとうございました。つけて走らせてみたらできました。おかげでめんどくさいことせずにすみました。
678デフォルトの名無しさん:2006/01/26(木) 21:29:16
>>676
FORTRANはいいぞ〜
最古の高級言語であって、コンピューター界のヒエログリフといってもよい。
地層のように積みあがった言語構造は、神聖文字、神官文字、民衆文字、コプト文字
を思わせて美しい。

       ' 「      ´ {ハi′          }  l
      |  |                    |  |
       |  !                        |  |
      | │                   〈   !
      | |/ノ二__‐──ァ   ヽニニ二二二ヾ } ,'⌒ヽ
     /⌒!|  =彳o。ト ̄ヽ     '´ !o_シ`ヾ | i/ ヽ !    や ら な い か ?
     ! ハ!|  ー─ '  i  !    `'   '' "   ||ヽ l |
    | | /ヽ!        |            |ヽ i !
    ヽ {  |           !           |ノ  /
     ヽ  |        _   ,、            ! , ′
      \ !         '-゙ ‐ ゙        レ'
        `!                    /
        ヽ     ゙  ̄   ̄ `     / |
            |\      ー ─‐       , ′ !
           |  \             /   |
679デフォルトの名無しさん:2006/01/26(木) 21:48:17
ウホッ! いいスパゲティ! orz
680デフォルトの名無しさん:2006/01/26(木) 22:16:44
>>676
彼女ができる・・・(と,いいな)。

よく言われるが,計算ライブラリーなど過去遺産が豊富。

また,1980年以前に隆盛があった学術分野(気象,機械,土木など)や,
電気回路など複素数変数が便利な分野では,
Fortran が未だに主流ではないかな?

話題はずれるが,>> 90 の演説も面白い。
681デフォルトの名無しさん:2006/01/26(木) 23:00:08
>>675
えっと、結論から言うと動的に確保することで上手くいってしまいました。

で、実は気になるのは速度の問題なんです。
以前動的に確保することで速度が遅くなったんで動的に確保するのを躊躇ってたのですが
今回はそれほど遅くなってませんでした。

恐らく前回はポインタを使ったために
最適化が上手くいかなかったんだと思うのですけど
もしかしてpointer属性とallocatable属性って違うんですかね?
682お願いします;;:2006/01/26(木) 23:47:00
任意の生年月日と今日の日付を入力すれば、
産まれてから今日まで生きてきた日数を出力するプログラムを作れ。
さらに、任意の整数nを入力して、産まれてからn日目が、
いつかを出力させるプログラムを作れ。
ちなみに、閏年は以下のようにして決められる。

1)基本的に西暦が4で割り切れたら閏年。
2)しかし、西暦が100で割り切れたら閏年ではない。
3)しかし、西暦が400で割り切れたら閏年とする。

レポート作成
予備的考察、プログラム、プログラムの説明、計算結果、考察

フォートラン使用・・・
683デフォルトの名無しさん:2006/01/26(木) 23:51:59
>>681
ALLOCATABLEの方が最適化が効きやすくていいと思う。
POINTERの場合、実際のメモリーが割り当てられているのか、TARGETを指しているのか
コンパイラが判断するのが難しいが、ALLOCATABLEは実際にメモリーが割り当てられて
いると仮定できるから最適化をかけやすい、と何かに書いてあったが思い出せないw

まぁ、話半分情報ということで・・・

684デフォルトの名無しさん:2006/01/27(金) 00:04:45
>>682
まず正月からある日までの日数を数えるプログラムを組め。
うるう年は無視していいぞ。

これが出来たら、残りを教えてやるw 
685お願いします;;:2006/01/27(金) 00:09:07
>>684
すみません 
まったくわかりません・・・わかろうとしてないかも・・・
意味不明なんです・・・
UNIXが、フォートランが・・・ 
686デフォルトの名無しさん:2006/01/27(金) 00:24:22
教えないほうが本人の為になりそう。自分で考えない馬鹿は学校行かなければいいのに
687お願いします;;:2006/01/27(金) 00:31:50
頼む! 金が無いんだよ・・・ 留年するための・・・
688デフォルトの名無しさん:2006/01/27(金) 00:32:40
>>678
>>680
ありがとうございました。
暇をみて手を出してみます。
689デフォルトの名無しさん:2006/01/27(金) 00:41:37
>>687
なんでそのガッコにいったの?
690お願いします;;:2006/01/27(金) 00:44:03
とりあえず大学へ・・・ の流れですorz
ごめんなさい、卒業したいです;;
691デフォルトの名無しさん:2006/01/27(金) 01:03:34
こんな問題も解けない奴に学士号を与えて世間に出されてはこちらが迷惑です。
お願いですからもう一年がんばって下さい。
692お願いします;;:2006/01/27(金) 01:10:51
板汚してすみませんでした。

693デフォルトの名無しさん:2006/01/27(金) 01:25:24
とりあえず自分で考えられるところまで作って↓で聞いてみれば?

くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/

いきなり閑古鳥が鳴いてるけど…
694デフォルトの名無しさん:2006/01/27(金) 21:35:47
>>690
マジレスすると、今すぐ大学やめて違う専門に入り直した方がいい
進路の修正は早い方がいいからな
695デフォルトの名無しさん:2006/01/28(土) 00:49:56
>>690
大学では壁にぶつかった後、立ち止まって進みも退きもせずに
引きこもりになるより2chで答えを得るほうがよっぽどいい。

カンコー学生服は丸洗いOK! VIPPERなら丸写しOKwwww
696デフォルトの名無しさん:2006/01/30(月) 14:25:33
Fortran Source Code Converter ってどうよ?

697デフォルトの名無しさん:2006/01/30(月) 21:24:28
>>696
それなーに?kwsk
698デフォルトの名無しさん:2006/01/30(月) 23:11:42

program Calculation of Response
implicit none
integer i,j,n1,n2,neq,hnda,nda,odd,st,p1,p2,p3
real*8 h
parameter(n1=4096,n2=8,neq=2,h=4.d-3)
real*8 x(n2),y(n2),yd(n2),a(n1,n2),b(n1,n2),k1(n2),k2(n2),
&k3(n2),k4(n2),f(n2),m,c,k
character*20 infile,outfile
c
write(6,*)'input >> input file name'
read(5,*) infile
write(6,*)'input >> output file name'
read(5,*) outfile
write(6,*)'input m,c,k'
read(5,*) m,c,k
open(1,file=infile,status='unknown')
read(1,*) nda
read(1,*) p1,p2,p3
do 10 i=1,nda
read(1,*) (a(i,j),j=1,2)
10 continue
close(1)
で始まるプログラムをコンパイルしようとすると下のようなエラーが出てしまいます。
Undefined first referenced
symbol in file
rk4_ /var/tmp//ccMMIE6P.o
ld: fatal: Symbol referencing errors. No output written to shuuron2.exe
collect2: ld returned 1 exit status
infileの名前はちゃんとcharacterで定義しているので何が悪いのか分かりません。
どなたか宜しくお願いいたします。
699デフォルトの名無しさん:2006/01/30(月) 23:21:26
>>698
ローダーのエラーなので、ファイル名の問題ではないだろう。
>symbol in file
これが正しいならinfilefはない。エラーメッセージがこれ全部なのだろうか?
未定義変数でも使っているんだろう。

こまぎれでわかんねが rk4 か first の問題でね?
700デフォルトの名無しさん:2006/01/30(月) 23:31:58
shuuron2 って・・・ 今頃プログラムつくってて大丈夫なのか?
701デフォルトの名無しさん:2006/01/31(火) 01:18:58
>>700
なかなかチェックが厳しい。
中間報告(春の学会発表とか)でがんばっているM1 だろう。
702デフォルトの名無しさん:2006/01/31(火) 01:40:49
>>698
F77形式の上に、暗黙の型宣言を守っていないので、bugは中々とれず
周囲の経験者やプログラム相談員からは相手にされず、苦労するだろう。

要約すれば・・・・・・
『地獄に落ちる!』
703デフォルトの名無しさん:2006/01/31(火) 01:43:18
            ,,.  -‐―- 、
          / _..-‐―- 、  .ヽ
         / /-‐―-..__..ヽ _..、ヽ
        .!三三三´    `´  : i
        |.!三三   __   ̄ _,. .;. i 暗黙の型宣言を守らない
        |ii i!"  ´ ェェ` l´rェ、 i..!      >>698は地獄へ逝く
         !i、 i!:::..... - ̄r  ヽ  .!
         !ii!.|:::::::  / `−´ヽ /
  _,,.. ===="/%;;;::::.   '∠ニニ」  /、            _ -‐‐-、
/´       | .% :::;;;;: ,,,.,,,:. ⌒: ./´  ̄==--  _,,.. -‐‐'"´ _,..-‐ ´
        |  %  ::::::;;;;;;;;;:.""%./      r" (<二 ̄ ̄>
       .|  %。゚+。  。+% /       `ヽiノ<二. ̄ ̄>
       |   %+*゚+。*゚%/         ( <二 ̄ ̄>
704デフォルトの名無しさん:2006/01/31(火) 07:03:17
>>702
デジャブかな?どっかで同じような光景が…
705デフォルトの名無しさん:2006/01/31(火) 10:05:26
>702
implicit none をつけたとしても、暗黙の型宣言は守ったほうがいいな。
FORTRANの場合、型の宣言がルーチンの頭部に限定されているので、
いちいちそこを参照するのが面倒くさい。つまりローカルに解決しない。

C言語みたいに捨て変数を{}の単位内でローカルに宣言できるなら、
まあいいかもしれないが・・・
706デフォルトの名無しさん:2006/01/31(火) 19:00:21
本物のプログラマはフォートランを使うと聞いてとんできました。
707デフォルトの名無しさん:2006/01/31(火) 19:05:49
リスパー>コボラー>Fortranコーダー
708デフォルトの名無しさん:2006/01/31(火) 19:12:24
"Real Programmers Don't Use PASCAL"
http://spike.scu.edu.au/~barry/RealProgrammers1.html
709デフォルトの名無しさん:2006/01/31(火) 22:02:19
リスプとコボルが上にいるの?
フォートランはブロンズセイントなの?
710デフォルトの名無しさん:2006/01/31(火) 23:45:41
歴史と伝統ではFORTRANが一番に決まってる。
が、その使用者は向上心がないからな。

ももしきや 古き軒端にしのぶれど なほあまりある 昔なりけりw
711621:2006/02/02(木) 11:50:44
エスパー様。お助けください。
Salford FTN77のコンパイラでInvalid character in field
というエラーが出ます。原因はなんでしょうか。

少し状況をいうと、READ文でINTEGERの数値をテキストから読むときに、
入力値を1〜7の数値にするとエラーになり、8以上だと普通に動きます。
712デフォルトの名無しさん:2006/02/02(木) 12:56:51
>>711
ファイルからのデータ読み込みで、実行時エラーが起きている状況でおk?
たぶんデータの並びと、FORMAT文がずれている。

もしくは1〜7の数字が全角になっているかwww または空白が実はTabとか00hとかwww


そのread文のformatとエラーのでるファイルの行を見せてくれ。
713711:2006/02/02(木) 13:34:09
>ファイルからのデータ読み込みで、実行時エラーが起きている状況でおk?

そのとおりです。問題となるREAD文は

READ (4,112) NSYM,NSYMS,ASTEP,VSTEP

で、この文のフォーマットは、

112 FORMAT (2I3,2F7.4)

で、読みこみファイルは

1 5 0.02 0.20 NSYM NSYMS STEP VSTEP

です。2番目のNSYMSを7以下の数値にすると
実行時にRUN−TIME ERRORとなります。
はじめ、ウインドウズのワードパッドで入力をつくっていたのですが、
空白がタブの可能性を疑ってメモ帳で保存しなおしたりもしましたが。
うまくいきませんでしたorz。
714デフォルトの名無しさん:2006/02/02(木) 13:40:02
>>713
2chの特性で空白が飛ばされているせいかもしれないが、入力のフォ-マットおかしくね?

3桁整数 3桁整数 7桁実数 7桁実数になってないとヤヴァス

..1..5...0.02...0.02
( . はスペースのつもり)
のようにしないとマズス
715714:2006/02/02(木) 13:43:51
>>713
ごめwwカラムはだいじょぶそうかなwww

READ文の次に 
PRINT *, NSYM,NSYMS,ASTEP,VSTEP
を入れて何が読み込まれているか見て味噌
716711:2006/02/02(木) 13:59:58
>READ文の次に 
>PRINT *, NSYM,NSYMS,ASTEP,VSTEP
やってみましたところ、入力した通りの数値が
そのとおりDOS窓に表示されました。
1 5  2.000000E-02 0.200000 等
しかし、数字が7より小さい場合に限り、そのあとやはり同じエラーがでます。
エラーのダイアログには、

00424588 READPL [+0799]
00401000 (プログラム名) [+1244]

と表示されます。READPLは今問題になっているのとは別のサブルーチンです。
717711:2006/02/02(木) 14:09:41
NSYMSはたぶん、場合分けを指定する数字で、READPLもファイルを
読むルーチンなので、そこでINVALID CHARACTERがあるのかも
と思いつきました。READ文を教わった方法で一つづつ調べてみようと思います。
おかげさまで解決のとっかかりができました。ありがとうございます。
718714:2006/02/02(木) 14:10:22
>>716
それはエラーの場所がそのREAD文では無いということだw

トレースバックの行番号799行をミロ!
719711:2006/02/02(木) 14:23:19
799行はCで始まるコメント行でした。1244行もです。orz.
READPLは9000行くらいに本体があり、呼び出しは517行めでした。
720デフォルトの名無しさん:2006/02/02(木) 14:24:27
全角で数字打ち込んでるんだろ
721714:2006/02/02(木) 14:25:01
>>717

00424588 READPL [+0799]
00401000 (プログラム名) [+1244]

(これが普通のトレースバック情報だとしたらの話だが)
これの意味は1244行にあるメインルーチンのCALL文で呼ばれた
サブルーチンREADPLの中の799行にある文でエラーが起きているということだ。

多分そこのREAD文のデータとフォーマットが合っていないのだろう。
722714:2006/02/02(木) 14:27:41
>>719 うは、ごめw 機械語のアドレスだったかw
ただ、コンパイラーのオプションでソース行を表示させることが出来るかもしれない。

たとえばCompaqのVisualFORTRANではオプションつけないと
トレースバック情報でソース行を吐き出さない。
723711:2006/02/02(木) 14:33:18
少し進展したので報告します。
問題のREADPLをcallしている前と後で
PRINT*,'行番号'
をしたら、前は出力されましたが後ろは出ませんでした。
やはりREADPLの中のようです。もう少し調べてみます。ありがとうございます。
724711:2006/02/02(木) 14:38:01
>>720
見なおしましたが数字はすべて半角のはずです。
しかし、ワードパッドで打ったので空白などが
へんなのかもと思っています。
725711:2006/02/02(木) 15:46:18
解決しました。
NSYMSによって、READPLの中でREADする行数が変化する部分が
あったため、FORMATが一致したりしなかったりするのが原因でした。
ありがとうございました。m(_ _)m
726デフォルトの名無しさん:2006/02/02(木) 21:26:04
>>725
乙!
中々バグが取れないときは、発生箇所や原因を勘違いして決め付けているときだからなw
犬や猫と心が通じるように、エラーメッセージの読み方を学ぶとFORTRANとも心が通じる。
相手(コンパイラー)を理解する気持ちが大切だw
727711:2006/02/03(金) 06:45:13
エスパー様。また来てしまいました。orz
バグとりの質問ばかりですがどうか許してください。

上で尋ねたのとは別のプログラムを実行するときに、
まったく同じエラー「Invalid character in field」
が出て困っています。コンパイラはFTN77で、エラーダイアログは、
00436b78 READE [+0552]
0042d818 EXPAN [+0273]
00401000 (プログラム名) [+1345]
です。READEはファイル読みこみのサブルーチン。
EXPANは計算のサブルーチンです。
教わったように、PRINT*,'(行番号)'などをDOSに
出力すると、プログラムのごく最初の方にあるOPEN文の前まで
しかPRINTの出力ができません。そのOPEN文は
OPEN (UNIT=2,FILE='search.s')
というものです。このserch.sというファイルは入力値を入れるものではなく、
プログラム自身が生成し、値を書き込むためのものです。
この文の前にはREAD文はないため、原因個所がわかりませんでした。
そこで、OPTIONのことを教えてもらいましたので、マニュアルをみて、
/check というオプションをつけてみたところ、こんどは、
Integer arithmetic overflow
というエラー表示に変わり、
LOOKUP2 - in file tleed2.for at line 2307 [+0203]
(プログラム名) - in file tleed2.for at line 376 [+13f7]
と表示されました。LOOKUP2は計算サブルーチンです。
2307行は、そのLOOKUP2の前に記述してある別のサブルーチンのEND行
(そのENDのあと、コメントがあり、そのあとLOOKUP2の記述が始まる)
です。行376は、そのLOOKUP2のCALL行で
CALL LOOKUP2(CPVPOS,ILOOK,ILKBD,NLAY2,NST1,NSTEF,NSYM,
& NLTOT2,NSHIFT,NCL,NLMAX,IROT,IMIR,1,FPOS,POSS,POSS2)
というものです。
原因個所を探がすのに、どのようなことを試みるとよいでしょうか。
728711:2006/02/03(金) 06:48:15
あ、プログラム名伏せてたのにばれてしもたOTL。。
729デフォルトの名無しさん:2006/02/03(金) 09:04:23
>>727
難しいな。コンパイラは奇妙な反応を返しているし。
FTN95に慣れていないと、コンパイラの息遣いを感じることも出来ないw

風の息づかいを感じていればのガイドライン
http://ex13.2ch.net/test/read.cgi/gline/1135748314/


配列のはみ出しか、引数の不整合が、起きている。もしくは配列のはみ出しで
引数の不整合が起きているw 
check で argment check や subscript check も見ていると思うが、option調べて味噌。

inputが間違っているので配列のはみだしが起きているのだと思うがw

CALLの直前直後、および呼ばれたサブルーチンの先頭で、大きな配列でない引数の値を
printしてみるくらいしかないかな。このパターンではCALLの直前しか書かないと思うが。
730711:2006/02/03(金) 09:45:33
>>729

周りに頼れる人がいないため、レスが大変ありがたいです。
未解決ですが過程を報告します。
あれから、マニュアルでオプションをもう少し調べて
/UNDEFと/BREAKというのをためしてみました。
/UNDEFでは初期値が与えられていない部分を指摘されました。
しかしこの部分は、オプションをつけなければそのままでも初期値0として
動いてくれるようでした。(言い忘れてましたが、サンプルのインプットがあって、
それでは問題なく動く)
/BREAKでは、デバッガが起動してびっくりしました。無手勝流ですが、
今、これを使って変数に入ってる数値を調べているところです。

>CALLの直前直後、および呼ばれたサブルーチンの先頭で、大きな配列でない引数の値を
print

なぜか始めの方のOPEN文より後の部分に、print文を書いても出力が出ないんですorz.

>inputが間違っているので配列のはみだしが起きているのだと思うがw

まったくその通りです。ルーチンは動く保証は一応あって、
INPUTで四苦八苦してるんです。

バグとりの質問などは面白くないと思いますが、また進展があれば報告させて
いただきます。
731711:2006/02/03(金) 12:02:23
報告。
デバッガで入力変数をまえから順に調べていったところ、
前述のREADEというルーチンの中のあるところから先が値が入ってなかった
ので、そのFORMATをしらべたところ、入力とのズレを修正することができました。
それで、現在、プログラム動差中(たぶん)なのですか、前述の通り、
なぜか、プログラム中のあちこちに書いたはずのPRINT文が、
途中から出力されません。(そのため、本当に動いてるのか不安です)
数十分動かしてプログラムも終了する気配が無いし、なんだか悪い予感がします。
PRINTが出力されないのはいったいなぜなんだろう。。
732デフォルトの名無しさん:2006/02/03(金) 12:11:32
>>731
反応が返ってこないのは暴走。
最後にprintされたところと、次のprint文の間でどっかへ行っている。
print文の範囲を縮めていって、問題箇所を特定する。


OPEN文に関しては、status=unknownを入れておくといいかも。
あと、暴走を途中で止めた場合ゴミファイルが残っているかもしれないので
消して置くといいかもしれない。
733デフォルトの名無しさん:2006/02/03(金) 12:26:03
>>732
レスありがとうございます。

>最後にprintされたところと、次のprint文の間でどっかへ行っている。
>print文の範囲を縮めていって、問題箇所を特定する。

ご指摘で、どうやら不具合がわかったっぽいです。PRINTが無効になる
境目だけを別プログラムとして実行してみました(以下)

PRINT*,'263'
OPEN (UNIT=2,FILE='search.s')
OPEN (UNIT=15,FILE='prdir.d')
PRINT*,'265'
OPEN (UNIT=10,FILE='restart.d')
PRINT*,'267'

END

すると、263だけがDOSに出力され、なぜかsearch.sの中に265 267が書かれていましたOTL....
もしかして、UNIT「2」と「*」って重複なんでしょうか。
ともかく、PRINTは使いたいので、UNIT番号を書きかえてやってみます。
今日は午後は予定があるのでしばらく2ちゃんを離れます。
重ね重ねご助言ありがとうございます。
734デフォルトの名無しさん:2006/02/03(金) 12:36:13
>>733
思いがけない展開だが、たまにあるパターンだw

>>もしかして、UNIT「2」と「*」って重複なんでしょうか。
*は普通は6番だと思うのだが、STDOUTとSTDERRで分けていたりするのかもしれない。
1桁や90番台のUNITはコンパイラーによって予約されていたりする。
これは、コンパイラーの息遣いを感じる以外ないwww


安直には2番を22番とかに書き換えることだろう。
735デフォルトの名無しさん:2006/02/03(金) 17:51:27
FTN77 User’s Guide (UserGuide.pdf) 102ページ
> by preconnection; the standard input and output are preconnected to units 1 and 2
> respectively (units 5 and 6 are respective alternatives).

息遣いを感じるのも悪くはないが、処理系の取説もよく読んだ方がいい。
736デフォルトの名無しさん:2006/02/03(金) 20:38:20
だれかこのプログラミングを教えてください。お願いします。
x=0.1 , 0.2 , 0.3 , 0.4 , 0.5
y=1.228 , 1.005 , 0.823 , 0.674 , 0.552
近似式 y=a*exp(bx)
上の関数とデータで最小自乗法で近似した式を求めよ。
この問題のプログラムがわかりません・・・。お願いします。
737デフォルトの名無しさん:2006/02/03(金) 20:42:06
>>736
こっちで頼んでみろ

くだすれFORTRAN(超初心者用)
ttp://pc8.2ch.net/test/read.cgi/tech/1138063703/l50
738デフォルトの名無しさん:2006/02/03(金) 20:53:19
Fortranで一度動的に確保した配列のサイズを途中で大きくしたい場合
どのような方法を使うのが一般的?

自分は、ベタに
1. 配列A(N)を確保
2. 同じ大きさの配列B(N)を確保
3. B(1:N) =A(1:N)
4. A解放
5. Aを新規に大きめに確保

くらいしか思いつかないのですが。

できればポインタ使わない方法が嬉しいのですが。
739デフォルトの名無しさん:2006/02/03(金) 22:45:46
>>736
オマエが考えなきゃいけない問題なんでは?
ここで宿題しても身にならんだろ。
740デフォルトの名無しさん:2006/02/03(金) 23:09:43
>>736
どうすればaとbを求められると考えているの?プログラムを作るのはそれから
741デフォルトの名無しさん:2006/02/03(金) 23:18:29
>>738
基本的にはそれしかないだろう。
ただし、ちょっと増えるたびにその操作をすると時間がかかるから、あらかじめ増やす単位を大目に取っておく。
その単位は問題によるけど
742デフォルトの名無しさん:2006/02/03(金) 23:27:16
そうですか〜、残念。

確保&解放繰り返すと、断片化が起きそうで怖いんですよね・・。
743デフォルトの名無しさん:2006/02/03(金) 23:48:42
>>738
FORTRAN2003では、その辺がやや改良されていたはず。
1. 大きめの配列B(M)を確保 (M>N)
2. B=A
3. A=B
4. B解放
少なくともこれでいけるようになった。
サブルーチンでやればBは自動解放できるので4は略できる。

どっちにしろ断片化は避けられないがw
744736:2006/02/04(土) 00:45:01
>>737さん
ありがとうございます。
行ってみます♪
745デフォルトの名無しさん:2006/02/04(土) 01:56:33
>>744 
解いといたw
746711:2006/02/04(土) 17:42:11
なんとか無事プログラムを動かすことができました。
助言を下さった方々、本当にありがとうございました。

747デフォルトの名無しさん:2006/02/04(土) 20:46:06
>>746
乙カレー!
748デフォルトの名無しさん:2006/02/05(日) 06:52:31
たいていの事はフォートランでする。
それでできなきゃ、アセンブリ言語でする。
それでもできなきゃ、それはやる価値が無いのだ。
749デフォルトの名無しさん:2006/02/05(日) 12:05:34
ハンマーを持つとすべてが釘に見えてくる
750デフォルトの名無しさん:2006/02/05(日) 13:12:21
本物のプログラマは Fortran を使わない。
Fortran は白靴下を履いた臆病者のエンジニアや、パイプ圧フリークや、
結晶解析のチビどもが使うものだ。
奴らは有限要素解析と核反応炉シミュレーションで喜ぶ。
751デフォルトの名無しさん:2006/02/06(月) 21:24:05
視野が狭いですね
752デフォルトの名無しさん:2006/02/06(月) 23:46:46
FORTRAN では IF 文や REPEAT...UNTIL、や CASE 文が構造化されていないので、本物のプログラマはこれらを使わないことを気に病む必要はない。
そのうえ、これらの文は GOTO 指定で必要に応じて代替可能である。

>>751
http://www.genpaku.org/realprogrammerj.html
http://www.geocities.co.jp/WallStreet/6351/real.html
753デフォルトの名無しさん:2006/02/07(火) 00:14:06
IF文が構造化されてないって
754デフォルトの名無しさん:2006/02/07(火) 23:50:20
GNUのF95はどんな感じですか?まともに動きますか?
755デフォルトの名無しさん:2006/02/08(水) 00:42:12
Intel fortranにしたほうがいい。
756デフォルトの名無しさん:2006/02/08(水) 07:15:14
世の中インテルのプロセッサだけではあるまい
757デフォルトの名無しさん:2006/02/08(水) 17:16:56
とはいえIntelが増えているわなー。
計算センターも汎用機はItaniumだし。

IBM信者はハードからソフトまでIBMで固めないと気がすまないがw
758デフォルトの名無しさん:2006/02/08(水) 20:00:16
GNU fortran使う人で非Intel系ってどういう人?
759デフォルトの名無しさん:2006/02/09(木) 15:18:01
バグを発見する典型的なやり方ってありますか?
760デフォルトの名無しさん:2006/02/09(木) 16:36:16
>>759
バグの種類にもよる。
結果が何故かNaNになってしまうようなバグなら、どこでNaNが発生するかデバッガで探せばいい。
NaNではなく、結果がちょっと変だというようなバグは特定が一番難しい。その場合は、人間の手でも解けるような
トリビアルな問題を解かせてみるか、コードを単純化するのが効果的だと思う。

暗黙の型宣言とcommon(もし使ってるなら)を無くすだけでも効果的だよ。
761デフォルトの名無しさん:2006/02/09(木) 19:18:08
divide and conquerっすね
762デフォルトの名無しさん:2006/02/09(木) 22:52:23
>>759
・subchk argchk をかける。
・数値パラメータを巨大にする。
(誤差が有効桁の誤差か、バグによるものか区別できることがある。)
・長引くとき、必ず頭を切り替えるような休息を入れる。
(長引くのは勘違いして無関係なところを探していることが多いから。)
763デフォルトの名無しさん:2006/02/10(金) 10:13:48
>>759
配列まわりを疑う。
バグの過半数は配列まわり。
764デフォルトの名無しさん:2006/02/14(火) 06:11:00
配列まわりなんてほとんど全部になるなじゃ
765デフォルトの名無しさん:2006/02/14(火) 17:49:04
複数のソースファイルで変数を共有させたいのですが、ちょっとつまづいてます。

メインのプログラムで
common /abc/ abc

とし、別のソースファイルのサブルーチンで
!DEC$ ATTRIBUTES EXTERN :: abc

呼び出してるんですけど、大体の変数はうまく行くのですが、
integer, dimension(:), allocatable::abc;
このような動的に割り付けられる配列の場合、以下のようなエラーとなります。
Error: Conflicting attributes or multiple declaration of name. [ABC]

どうやったら、回避できるでしょうか?

環境は、WindowsXP, Visual Studio, Intel Fortran Compiler Version 7.0
です。よろしくお願いします。
766デフォルトの名無しさん:2006/02/14(火) 17:51:19
common使わないでモジュールで宣言してuseで共有すればいいじゃん。
767765:2006/02/14(火) 18:02:15
>>766
すいません、できました。ありがとうございます!
昨日から始めたので、なかなか頭が回りませんでした。
768デフォルトの名無しさん:2006/02/15(水) 20:13:19
すべての配列をALLOCATEで割り付けばあい、
計算速度は速くなるかおそくなるかどっち?
769デフォルトの名無しさん:2006/02/15(水) 20:15:23
頻繁にやらなければ体感できないでしょう
770デフォルトの名無しさん:2006/02/15(水) 20:17:31
それらの配列は、常に使用しているんだけど。。
771デフォルトの名無しさん:2006/02/15(水) 20:23:49
dimensionで配列を宣言したときに、メモリのどこかが確保されると聞きました。
メモリには、記憶する領域と計算するための領域があるとも聞きました.
そこで、教えて欲しいんですが、ALLOCATEした場合に、メモリのどこに確保されるのかって
ことです。
ALLOCATEで確保されるメモリ領域は、静的に割り付けたものを確保する領域なのか
あるいは、計算するための領域なのか、はたまた別の領域なのか。。どこ?
772デフォルトの名無しさん:2006/02/15(水) 20:27:50
簡単にいうと、配列の大きさがプログラムを実行する段階で分かっていたら、
あえてALLOCATEする必要はないのか。あるいは、ALLOCATEした方が
DIMENNSIONで宣言するよりも計算スピードは速くなるのか?ということです.
773デフォルトの名無しさん:2006/02/15(水) 21:54:09
聞いてないで自分で試せよ。
環境によりけりだろうから。
774デフォルトの名無しさん:2006/02/15(水) 22:05:13
知らないのならよし
775デフォルトの名無しさん:2006/02/15(水) 22:45:12
動的変数はAUTOMATIC型はスタック領域に、ALLOCATE型はヒープ領域に
とられたような気がする。AUTOMATICの法は確実にヒープ領域。

静的に宣言されたものとALLOCATE型で宣言されたもので違いが有るとしたら、
コンパイル時の、配列サイズに基づく最適化が静的に宣言されたほうが効きやすい
事くらいか?

POINTER型よりはALLOCATE型のほうが自由度が少ない分最適化は効きやすい
はずでは有るが。

ま調べたらここで報告してくれw
776デフォルトの名無しさん:2006/02/15(水) 23:24:11
なるほど。。thanks
777デフォルトの名無しさん:2006/02/16(木) 07:55:04
性能が変わるのは、ページサイズが領域によって変わるか、
他の配列との相対位置よっては、バンク競合や
キャッシュラインの競合が起こりやすくなったりとかかな。
昔のスパコンじゃ無ければ領域によってページサイズを
変えてない気がする。
バンク競合が気になるなら、配列を大きめにとって
先頭をずらして計測してみれば、変化がみられる場合も。
778デフォルトの名無しさん:2006/02/17(金) 19:36:35
FORTRANを勉強したいのですが,どこのコンパイラが一般的なんでしょうか?
予算がないので >>3 のどれかでいきたいのですが・・環境は WinXP Home SP2 です.


 3 名前: デフォルトの名無しさん 投稿日: 05/01/03 12:50:32
 ・フリー/無料評価版のコンパイラ

 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 (期限付きトライアル版, Win/Linux, 要登録)
 http://www.lahey.com/downloads.htm
779778:2006/02/17(金) 19:42:26
連カキコすみません..

あと,みなさんはどちらのコンパイラを使用していますか?
よかったら教えてください m(..)m
780デフォルトの名無しさん:2006/02/17(金) 22:38:02
>>778
商用コンパイラならDVF/CVFの後継ということで Intel が一般的なのだろうが
試用版は期限があるからゆっくり勉強する人には不向きだ。VS.NETも必要だし。

Salfordのはエラーチェックが厳しいので学習用には向いてるかも。
私もチェック用に使っている。
ただ、FTN95は実行時に毎回待たされるのがなんとも・・・

gcc4が普及すれば必然的に gfortran (GNU Fortran 95)が
一番一般的なコンパイラになるのだろうけど、
まだ機能・安定性共にg95の方が上のようだ。
ttp://gcc.gnu.org/fortran/
ttp://gcc.gnu.org/wiki/GFortranBinaries
781デフォルトの名無しさん:2006/02/18(土) 00:22:42
>>780
GNUのFORTRANってどうなの?
糞だと思ってるから使ったことないんだけど。

g77が出来る前にf2c+gccは試したことがあるけど、gccが糞で動かなかった。
gccもその後倒産企業からフロントエンドもらったりしてようやくまともになったようだけど。
782デフォルトの名無しさん:2006/02/18(土) 00:27:17
Gnu fortran使うくらいなら、Linuxで無料のIVF使うほうがいい
783デフォルトの名無しさん:2006/02/18(土) 01:25:19
Fortranにはいくつものすんばらしい数値計算のライブラリあるのは知ってるが、
インターフェースが複雑すぎて使いこなせず、挫折してFortran嫌いになって、
結局しょうがないのでC++で毎度のように車輪の再発明を繰り返している私が懺悔に参りましたよ。
784デフォルトの名無しさん:2006/02/18(土) 01:38:56
GFORTRANは知らんがG95の方はF2003のstream I/Oが使えたり
環境変数でエンディアンが変えられたりするのでなかなか便利だ。

まあ、どっちも中身がGCCなんで最適化は期待できんが。
785デフォルトの名無しさん:2006/02/18(土) 02:17:34
>>784
STREAM I/Oはベンダー拡張でCVFとか結構色々なFORTRANで対応している。
また、DIRECT ACCESSでファイルを開いてレコード長を1Byteにすれば、
FORTRAN2003以前の標準文法内でも同等のことが出来る。
(ただし、レコード長がバイトではなくワード単位になっていると出来ないが)

エンディアンをコンパイラーオプションで変えるのは最近の商用コンパイラーでは結構
対応されている。浮動小数点もIEEE形式に天下が統一されたので、せいぜい
エンディアンさえ考えればいいのだから便利な世の中になった。

IBM形式は仮数部が多いので桁落ちしにくいとかCRAY形式は指数部が多いので
OVERFLOWしにくいとかつまらないことで争っていた人たちがいたもんだがw

>>783
インターフェースってなんだべ? WRITE(6,*) と READ(5,*) だけだべ?w
786デフォルトの名無しさん:2006/02/18(土) 12:07:17
ライブラリで提供されてる
サブルーチン副プログラムなんかの引数のことっす。(なして副プログラムってつくん?)
利用者に計算用領域を用意させてそれを引数で渡すなんざ
まともなライブラリのやる事じゃねえ!と・・・
787デフォルトの名無しさん:2006/02/18(土) 12:08:47
GSLなんかでもそんなんばっかだからべつにFORTRANが悪いわけじゃ
ないんすけど
788デフォルトの名無しさん:2006/02/18(土) 12:18:44
LAPACK95なら良かったのにね。
789デフォルトの名無しさん:2006/02/18(土) 12:31:51
>>786
ああ、そういうことか。
あのへんは確かに初心者泣かせだわな。

昔のFORTRANを考えてみれば、
ソフトウェア的な制約として言語仕様的にどうしようもないと言うこともあるのだが、
ハードウェア的な制約としてメモリーの少なかった時代には仕方のない面もある。

FORTRAN90以降では動的にメモリー割付は出来るとはいうものの、
FORTRANでのワーク領域はばかでかい配列だったりするので、AUTOMATIC
変数にしてサブルーチン側で割り付けようとすると、スタック領域をたちまち食い尽
くしたりして、あまり合理的でなかったりする。

FORTRANは他の言語と違ってソフトウェア概念の発達というより、ハードウェアの
発達のほうにより強く束縛されているから、(その時代の最高速機ではFORTRAN
が動いている)バカらしい仕様に見えても時代時代ではそれなりに理にかなっている
気がする。
790デフォルトの名無しさん:2006/02/18(土) 12:35:21
>>786
副プログラムとつくのは、FORTRANには副プログラムは2種類あって、
サブルーチン副プログラムと、関数副プログラムに分類されているため
それを区別するからだと思います。
791デフォルトの名無しさん:2006/02/20(月) 15:19:13
fortranにはtime()関数みたいなのはないのですか?

乱数を初期化させる時に、実行させる度に違う乱数を生成させたいのですが、
どうしたらいいですか?
792デフォルトの名無しさん:2006/02/20(月) 16:17:09
>>791
90だったら標準でsystem_clock()てのがある。

77でもベンダー拡張があるはず。
g77だとtime()もsecond()も使える。
793デフォルトの名無しさん:2006/02/20(月) 16:20:10
>>791
FORTRAN77以前には時間を測る関数・サブルーチンは規格には存在しない。
ベンダーの独自拡張機能を使うしかない。

Fortran90ならば、DATE_AND_TIME と SYSTEM_CLOCK が、
Fortran95には更にCPU_TIMEというものがある。詳しくはマニュアルを味噌。

乱数に関してもFORTRAN77以前は存在しないが、Fortran90以降には
規格によってFortranの命令として存在している。

ただシミュレーションとか真面目な目的で乱数を使うなら、
自分で適切な乱数ルーチンを用意しないと後から偉い人に怒られる。
乱数といっても擬似乱数なので目的ごとにふさわしい乱数があるらしい。

大型計算機の場合にはハードウェアの乱数発生器をもっていたりするので
そういう場合にはそれを使えばいいと思うがw
794デフォルトの名無しさん:2006/02/21(火) 21:15:26
すいませんちょっとお聞きしたいのですが
visual fortranで数学ライブラリ(固有値解析)を使いたいのですが
どうやって使えばいいのか分かりません
どこか使い方書いてあるところありませんでしょうか
795794:2006/02/21(火) 21:55:52
すいません自己解決しました
796デフォルトの名無しさん:2006/02/21(火) 23:19:40
>>795
ついでだから解決法を書いてゆけ
797デフォルトの名無しさん:2006/02/21(火) 23:33:12
>>796
すいません嘘つきました
できませんでした
lapackいれてdgeevのサブルーチン呼んでごちゃごちゃやればいいみたいです
けどめんどくさいのでやめました
798デフォルトの名無しさん:2006/02/21(火) 23:33:54
MKL入れたらいいぢゃん
799デフォルトの名無しさん:2006/02/21(火) 23:47:02
>>797
飴ちゃんあげるからC++においで
http://cpplapack.sourceforge.net/doc/main_page/Japanese.html
800デフォルトの名無しさん:2006/02/21(火) 23:49:26
>>799
わーい
801デフォルトの名無しさん:2006/02/22(水) 00:48:33
>>795
DEC(Compaq)のVisualFortranなら、DXML(CXML)がデフォで入っているから、
ビルドオプションでチェック入れればLAPACKはすぐ使えたはず。

Intel版はなまじっかMKLがあるばっかりに、DXMLの添付が打ち切られたw
802デフォルトの名無しさん:2006/02/22(水) 00:50:58
>>800
ラッパーでいいならF90のは10年位前からあるぞw
803デフォルトの名無しさん:2006/03/02(木) 13:49:06
ttp://uploader.fam.cx/upload.html

上記のアドレスのBPM.1.TXTを複素数でのプログラムになおしたいのですが
BPM.2.TXTのようにしても同じ結果が得られませんどなたか
間違っているところを教えていただけないですか///
804デフォルトの名無しさん:2006/03/03(金) 10:54:44
>>803
自分で考えろ
805デフォルトの名無しさん:2006/03/03(金) 22:15:40
>>803
複素数と実数が混同しているので自分で宣言しているのを
よく見直すべし
806デフォルトの名無しさん:2006/03/09(木) 23:37:27
Mac G5 で gfortran を gfortran.pkg からインスコしてみたのですが、
-m64 つけてコンパイルすると、

ld64 warning: in /usr/local/lib/libgfortran.dylib, file does not contain requested architecture
ld64 warning: in /usr/local/lib/libgcc_s.dylib, file does not contain requested architecture
ld64 failed: in /usr/local/lib/libgfortranbegin.a(fmain.o), not a valid ppc64 mach-o file

となり、ライブラリが 64 ビットに対応してないと文句を言われます。
仕方がないので自分で gfortran をコンパイルしてみたところ、
やはり同様のエラーが出てしまいます。

GMP と MPFR が 64 ビット用にコンパイルされなかったことが非常に気にかかっていますが、
ここが問題なのでしょうか?
それとも、configure で特殊なフラグを立てる必要があるのでしょうか?
64 ビット環境用に gfortran をコンパイルしたことのある人がいましたら、
御教授いただければ幸いです。
807デフォルトの名無しさん:2006/03/09(木) 23:52:36
メルセンヌツイスター法のコードから乱数を持ってくる方法が分かりません。
知ってる方、教えていただけないでしょうか?
808デフォルトの名無しさん:2006/03/10(金) 01:01:34
Mersenne Twisterのコードと言っても色々な実装があるわけだが
ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/versions.html

最初に初期化ルーチンを呼んでから、欲しいタイプの疑似乱数生成ルーチンを呼べばよい。
809デフォルトの名無しさん:2006/03/10(金) 01:44:51
>>806
このスレでは答えられない可能性が高い。
このスレではgfortranの人気も低いしw
810デフォルトの名無しさん:2006/03/10(金) 04:39:42
メルセンヌツイスタはより一様ですか?
811デフォルトの名無しさん:2006/03/10(金) 05:55:28
昔よくラインプリンタでASCII ARTのカレンダーとか出してたけど、
それ様のプログラムどっかにない?
812デフォルトの名無しさん:2006/03/11(土) 11:33:59
Salford FTN77 についてなんですが,slinkの仕様についてご存知の方いらっしゃいませんでしょうか?

オブジェクトファイルをちゃんと指定しているのに
C:\>C:\win32app\salford\slink.exe C:\foo.obj
*** Could not open C:\Program.obj
~C
といった感じです..

ドキュメントを見てみましたが,該当するものが見つからず(?.?)といった感じです.
ftn77 foo.f /link
ftn77 foo.f /lgo
も同じエラーメッセージが出るようです.
何かの環境変数が未定義なのか,ぅーん..
813デフォルトの名無しさん:2006/03/11(土) 13:21:13
>>812
FTN95も一緒にインストールしてる?
FTN77の有るディレクトリにPATHが通ってなくて、PATHの中に
"C:\Program Files\Salford\ftn95"
など、間にスペースが有ってその中に salflibc.lib が有る
ディレクトリが含まれている場合はそうなる。

この場合は、FTN77を使うときにはFTN77の方を先にPATHに設定するか
FTN95のslinkを使うかすればよい。
814812:2006/03/11(土) 14:36:29
>>813
解決しました :−)
*** Could not open C:\Program( Files).obj
ということですね..納得です.
FTN95のslinkを使っても問題は無いようですね..当面はこれを使ってみることにします.どうもありがとうございましたm(..)m
815デフォルトの名無しさん:2006/03/14(火) 16:21:36
g95のホームページのprebuilt binariesをcygwinで使おうと思うのですが,
将来バージョンアップしたものを導入するときは,インストール同じ手順でcygwinのルートディレクトリで
tar -xvzf g95-x86-cygwin.tgz
とするだけでいいんでしょうか?tar -xzfは解凍したファイル上書きしてくれるんでしょうか?
816デフォルトの名無しさん:2006/03/14(火) 19:52:54
>>674, >>681
2GBytes越えの、static配列の件だけど、

http://www.softek.co.jp/SPG/Pgi/win64/index.html
Windows x64 (Win64) は、64ビットのアドレス空間は使用できるものの、
そのプログラミングモデルにおいては、上記のとおり 単一の静的データ
あるいはデータセクションのサイズが、2GB 以内に制限されております
ので、従来の静的宣言された配列の多いプログラムでは大きな制約となり、
2GB 以上使用するプログラムではリンケージでエラーとなるケースが
出てきます。この制約は、コンパイラの問題ではなく、Win64 上の共通の
制限ですので、フルに 2GB 以上のデータ領域を使用するプログラムを
コンパイル・実行したい場合は、「Linux」でのコンパイル・実行環境を
強く推奨します。

と書いてあった。

本当なのだろうか?
817デフォルトの名無しさん:2006/03/16(木) 12:21:59
gcc-4.1のgfortranはどんな感じ?
818デフォルトの名無しさん:2006/03/16(木) 21:42:34
salford ftn77のグラフィックに関することでお聞きしたいことがあります。
contour図かそれに似た図を描きたいんですがやり方がわかりません。
今はある範囲の値に対してこの色を使うというような感じで、
IF文をたくさん並べ、SET_PALETTE@、SET_PIXEL@を使っています。
この方法でもいいんですがプログラムとして格好も悪いし、色が少ないです。
PDFを見ると256色くらい使えそうな感じなんですけど、
英語でプログラム例も少なく使い方がよく分かりません。
何かいいcontour図の描き方がないでしょうか。
それとも他のfortranの方がいいでしょうか。
819デフォルトの名無しさん:2006/03/16(木) 23:48:41
>>818
疑問点がよく分からん。
1.色の変え方が分からないのか?
2.contour図ルーチンを自作していて苦労しているのか?


1.の場合がんばってマニュアルを読めとしか言いようがない。
SalfordF77固有のグラフィック命令で色付き図を書いている人間は
現在の日本には少ないだろうから、答えてくれる人がいるか・・・・

ひょっとしてSalford77のグラフィックスはDOS用窓とかでないか?


2.の場合地球物理関係で使われているらしいPGPLOTでも使ってみたら
良いかもしれない。grwin PGPLOTあたりで検索してくれ。

もしくは計算データを独立したプロットプログラムに渡すほうがいいかもしれない。


FORTRANのグラフィックスも80年代末にGKSでようやく天下が統一されるかと
思っていたら、突然XYプロッターの時代が終了してWIMPの時代が来てしまい
結局混沌のまま進化が終わったので、まぁ我慢強く不便に耐え抜くしかないw
820819:2006/03/17(金) 00:04:39
ここにGKSでのcontour図の例も出ている。
ttp://web.sfc.keio.ac.jp/~masudako/class/computer/gks/
GKSはともかく参考文献が出ているので助けになるかもしれない。

よくわからんがGKSもまだ生きているみたいで、FORTRAN業界の物持ちのよさを確認したw
821818:2006/03/17(金) 03:55:30
回答ありがとうございます
疑問点はどちらかと言うと1の方ですかね
ルーチンを作った方が見た目もすっきりすると思いますが。
SET_PIXEL@では16色しか使えないみたいですけど、SET_PALETTE@で64色まで増やすことはできました。
とりあえず、もう少しライブラリを眺めつつ、PGPLOT、GKSを参考にしてみます。
ありがとうございました。
822デフォルトの名無しさん:2006/03/18(土) 11:55:05
ちょっとマニュアルを見た限りではこんな感じかな。
integer*2 ix, iy, ierr, ireg, ir, ig, ib
call VGA@
call GRAPHICS_MODE_SET@(640, 480, 256, ierr)
do ix = 0, 15
do iy = 0, 15
ireg = ix*16 + iy
ir = iy*4 + 3
ib = ix*4 + 3
ig = iy*2 + ix*2 + 3
call SET_VIDEO_DAC@(ireg, ir, ig, ib)
end do
end do
do ix = 0, 15
do iy= 0, 15
call FILL_RECTANGLE@(ix*30,iy*30,ix*30+29, iy*30+29,ix*16+iy)
end do
end do
end
823http://www.vector.co.jp/soft/win95/util/se072729.html:2006/03/18(土) 19:35:35


TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
824818:2006/03/19(日) 01:19:50
わざわざすいません、おかげで助かりました。
一つ気になったんですがGRAPHICS_MODE_SET@の256って何を表しているんでしょうか。
16以下では描画がCALLしてないときと同じで、257以上では黒から赤のグラデーションに。
まあ一応やりたかったことはできそうなのであまり気にしないでおこう。
下のプログラムが私がやりたかったことの一部です。
INTEGER*4 IREG,IR,IG,IB,ERR
IR=57
IG=6
IB=6
CALL VGA@
CALL GRAPHICS_MODE_SET@(640,480,256,ERR)
DO IREG=0,255
CALL SET_VIDEO_DAC@(IREG,IR,IG,IB)
IF (IREG.LT.51) THEN
IG=IG+1
ELSE IF (IREG.LT.102) THEN
IR=IR-1
ELSE IF (IREG.LT.153) THEN
IB=IB+1
ELSE IF (IREG.LT.204) THEN
IG=IG-1
ELSE
IR=IR+1
END IF
END DO
DO IREG=0,255
CALL FILL_RECTANGLE@(IREG*2,0,IREG*2+1,479,IREG)
END DO
END
825デフォルトの名無しさん:2006/03/19(日) 02:18:32
>>824
Library Reference によると GRAPHICS_MODE_SET@ の引数は順に
横方向の解像度、縦方向の解像度、色数、エラーコード

厳密にやろうとするなら、まず GET_GRAPHICS_MODES@ を呼んで
使用できる解像度と色数を調べてから、その値を使うべきなんだろうけど
Windows版の場合は解像度640*480、16/256色しか使えないっぽい?
でたらめな値を入れても ERROR_CODE に 0 が返ってくるし…
826デフォルトの名無しさん:2006/03/19(日) 05:16:04
解説ありがとうございます。大変勉強になります。
データを視覚化できるとなんだか楽しいですね。
卒研でFORTRAN使っていて、もう卒論提出したのでプログラムいじる必要ないんですけどね。
最近VGA@、SET_PIXEL@で絵が描けること知って、プログラムいじってました。
もっと早く知ってれば研究もう少し進んだんだろうなぁ。
他のFORTRAN関連のスレ見てると大学や研究所ではまだまだ現役のようですね。
うちの教授も言ってましたが複素数が扱えるのが大きいのかな。
827デフォルトの名無しさん:2006/03/19(日) 14:49:12
>>824
詳しくは分からないが、VGAとあるので昔のビデオモードの制約をうけて
画面サイズ640*480、8bit=256色になっているのだろう。

DOSからWindowsに切り替わる時期のコンパイラでは、Windows機能は
DOSエキステンダー替りに32Bitプログラムを動かすために使い、
独自グラフィックスは16bitのDOSモードを引きずっているということがよくあった。

256以上の数で赤に戻るのは、9bitより上が無視されて、下の方の桁だけが
有効になっているせいかと推測される。
828デフォルトの名無しさん:2006/04/03(月) 14:41:54
初心者ですみません。質問があります。
write文で書き出すとき、1行に例えば200列データを書き出すように
指定しても、マシンによってはwindow幅に合わせるようにデータが
出力されてしまいます。

おそらくインストールしているFORTRANのデフォルトの何かを書き換え
なければいけないと思うのですが、どのようにしたらよいか
わかりません。どなたか教えてください。
829デフォルトの名無しさん:2006/04/03(月) 23:08:58
>>828
OPEN文のRECL指定子で増やせると思う。
画面出力の場合は分からんw

RECLとはRECORD LENGTH(レコード長)。
単位がバイトだったりワードだったり処理系によって一定していないので
マニュアルを注意深く読む必要があると思う。
830デフォルトの名無しさん:2006/04/04(火) 21:08:57
>>828
それって、Fortranでもコンパイラの問題でもなく
DOSプロンプトの問題ってことはないの?

本当は200列データが出てるけど、表示するアプリ側の問題で
折り返し表示になっちゃってるってことは?
831デフォルトの名無しさん:2006/04/09(日) 21:59:16
変数をimplicit real*8(a-h,o-z)として読んでください。

nを数千万と想定

do i = 1, n
j = mmm(i)
if( j.lt.0 ) then
vc = a*vn
else
vc = vn
endif
(中略)
enddo

というような処理があるのですがnが大きいため、if文を省けないか検討しています。

要約すると、ループ内で条件にあうものはaを乗算し、あわないものは何もかけない、という処理です。

何かよい方法はないでしょうか?


real*8 b(n)を用意して条件にあうときはb(i)=a、あわないときはb(i)=1.0d0という配列をあらかじめ準備して、
vc=b(i)*vnとすればif文は省けるのですが
これだけのために大量のメモリを使いたくありません。

整数1byte*nの参照配列を作る程度で何かいい方法はないでしょうか?無論メモリを使わない方法があれば、そのほうがよりうれしいです。

読みにくくてすいません。
832デフォルトの名無しさん:2006/04/09(日) 23:41:42
>>831
最近のCPUとコンパイラなら、その程度のif文なら投機的実行でほとんどロスはないんでね?
一応仮にvc=a*vnだけにして速さに大きな差が出ると分かってから出ないと労力無駄の希ガス。

あと数千万なら〜8*10M byte〜100MByteだから、それほどメモリーを食うわけでもないべ?
833デフォルトの名無しさん:2006/04/10(月) 09:15:21
>>831
x86ならSSE2の比較命令、PowerPCならfselを使えば速くなる。
IA64のプレディケートならコンパイラがやるはず。
ただ、はたしてプラットフォーム依存のコードを加える気が
あるのかどうか。
834デフォルトの名無しさん:2006/04/21(金) 20:34:55
Fortran 2003 完全準拠のコンパイラマダー?
835デフォルトの名無しさん:2006/04/22(土) 02:38:27
>>834
NAGあたりが一番進んでるかね?
836デフォルトの名無しさん:2006/04/22(土) 17:54:40
ぶっちゃけfortranってこれからどうなんの?
837デフォルトの名無しさん:2006/04/22(土) 20:34:27
過去のソースをコンパイルするのに使い続けられるでしょう。
838デフォルトの名無しさん:2006/04/23(日) 02:16:55
>>836
最大の敵のC言語が、C99、C++、D言語などに分裂したのでFORTRAN有利でね?

おまけに最近の言語は、言語としての記述の抽象度を上げる方向がスピードよりも
セキュリティーや安全面重視に向かっている。本来の電子計算機としての原点を忘れている。


FORTRANはなんだかんだいって、その時代時代ごとの最新ハードウェアで性能を出すように
かなりのリソースが振り向けられていて(その分の経費はハードの売り上げの中に押し込まれている
80年代のスパコンや90年代のRISC、2000年代のIntel)言語仕様は古いが、
最適化コンパイラとしては常に時代の先端を切っている。

最近のトレンドはマルチコア並列化だが、FORTRANは最近微妙に並列化に向けて仕様をいじっている。
たとえば配列のメモリー上の連続性を要請しなくなっている。

こういう点を見るとFortran2003が順調に出荷され、OSのAPI呼び出し等が楽になり、
かつ並列コンパイラの最適化技術の恩恵がうまく花開けば、FORTRANはニッチに留まらず
一気にメインストリームに躍り出てわが世の華を謳歌することも不可能ではない!!

マルチコアに対する並列化に対して、スパコンで培った自動並列化技術がうまく対応できれば
覇をとなえることが出来る!www

839デフォルトの名無しさん:2006/04/23(日) 05:03:10
>>838
途中まではまともだと思ってたのにw
840デフォルトの名無しさん:2006/04/23(日) 12:54:59
>>831

>real*8 b(n)を用意して条件にあうときはb(i)=a、あわないときはb(i)=1.0d0という配列をあらかじめ準備して、
>vc=b(i)*vnとすればif文は省けるのですが
>これだけのために大量のメモリを使いたくありません。

この配列を準備するのに結局はifを使うんじゃないの?
それだったらifに要するコストは同じなのではないの?

まぁ、

j = mmm(i)
k = ishft(j, bit_size(j)-1)
vc = ((a - 1.0d0) * k + 1.0d0) * vn

のようにすればifは無くせるけれど
可読性が極めて悪いので使うのなら注意して使え。

ただし、最新のCPU&最新のコンパイラを使ってるなら
素直なコードと速度はさほど変わらないだろうな。
841デフォルトの名無しさん:2006/04/23(日) 18:18:03
>>839
FORTRANが再び覇を取って、天下に号令するんだ!w

842デフォルトの名無しさん:2006/04/23(日) 20:26:58
>>841
ムリ

でも当分の間は生き続けるんだろうな
843デフォルトの名無しさん:2006/04/25(火) 01:17:37
homepage.mac.com/galois21/fortran/lesson/lesson0.htmlにある問題0-4.で、
int.dの中身はどのように書けばいいのですか?
a=1
b=10
と書いたらbad real number in item 1 of list input
というエラーになりました。(各行の前には半角スペース6コ)

あと、この問題の解答はfortran95でも使えますか?
844デフォルトの名無しさん:2006/04/25(火) 03:54:10
>>843
この手の質問は、こっちでやるとよい。

くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/


で、質問に答えるとだ、
ファイルには
1  10
とかいておけばおk

a=1,b=10 と書きたい場合は、NAMELIST という方式があるのだが、
これは高度なので初心者にはお勧めできない。
845843:2006/04/26(水) 03:32:40
できました!ありがとうございました
846デフォルトの名無しさん:2006/05/05(金) 21:40:31
F77の開発者様が極東スレで雑談してた・・・
ぐおお、参加したかった
847デフォルトの名無しさん:2006/05/05(金) 22:06:12
極東スレってどこ?
848デフォルトの名無しさん:2006/05/16(火) 23:45:54
Intel Visual Fortran 9.1も出たことだし、ageとくか
849デフォルトの名無しさん:2006/05/17(水) 19:38:09
>>848
Intel Visual FortranをVisualStudioに統合すると,インストールの度にカスタマイズが
元に戻ってしまって困っているのだが,回避する方法を誰かしらないか?

カスタマイズを保存する・・・でもいいのだが

おすえてサミアドン
850デフォルトの名無しさん:2006/05/18(木) 14:36:07
Intel Fortran9.1をインストールしようとしたらライセンスファイルがはねられた。
プレミアサポートはまだ一月以上残ってるのにな。
みんなは大丈夫なの?
851デフォルトの名無しさん:2006/05/18(木) 14:51:46
ごめん。
間違ってプロフェッショナルバージョンをダウンロードしてたことに気づいた。
スタンダード版だったらインストールできた。
852デフォルトの名無しさん:2006/05/18(木) 19:27:49
>>849
サミアドンは梅雨が明けるまでお休みです。
853デフォルトの名無しさん:2006/05/18(木) 23:30:36
>>851
いやメールを受け取っていると思うが、それはIntelの間違い。
漏れも初日に困ったぜw
854デフォルトの名無しさん:2006/05/19(金) 16:22:05
>>853
サミアドンは水に濡れるのが嫌いだったなw

だれかNAGのFortranBuilderを試してみた人いる?
感想を書いてちょ!

855851:2006/05/19(金) 16:52:08
>>853
そうだったんだ。Intel間違ってるだったんだね。
856デフォルトの名無しさん:2006/05/22(月) 22:08:48
NAGのFortranBuilderの試用版が無料セミナーで配布されるらしい
【日時】 5月31日(水)13時30分〜(13時開場)
【場所】 英国大使館 (東京都千代田区一番町1)
【地図】 http://www.nag-j.co.jp/fbreleasemap.htm
【内容】 
1:Fortran Builderのご紹介(Fortran Builder開発者 中野 剛)
Fortran Builderの機能、製品コンセプト、事例ご紹介.デモンストレーションなど
2:プログラミング学習とe-Learning
 (法政大学情報メディア教育研究センター所長 竹内 則雄 教授)
プログラミング言語学習用電子ブックと開発環境が連動した体験的なFortran
プログラミング学習環境の概要と、対面授業やe-Learningでのその効用について
3: NAGWare f95 and reliable, portable programming
 (英国NAG NAGWare Fortranコンパイラ開発者、マルコム・コーエン)
How to detect errors using NAGWare f95,and how to write portable,
reliable programs.Support for features from the latest Fortran standard
and plans for future releases.   
4: Fortran Builder を使った数値計算 (筑波大学 長谷川 秀彦 助教授)
行列計算パッケージ LAPACK の紹介と Fortran Builder を利用したLAPACK の手軽な使い方について
5:Fortran Builder 体験コーナー・30日トライアル試用版配布・
ノベリティ配布など もちろん無料です。
英国大使館の警備都合上事前にご登録をお願いしております。
下記URLフォームにて参加登録ができます。

http://www.nag-j.co.jp/fbSeminarApply.htm
857デフォルトの名無しさん:2006/05/22(月) 23:02:43
30日間の体験版ですか。 うーむ…

ていうか、なんで今頃になってリリース発表会?
858デフォルトの名無しさん:2006/05/22(月) 23:16:48
NAG社員乙!
859デフォルトの名無しさん:2006/05/23(火) 00:55:42
NAGがFortran2003にいち早く対応しそうだから興味はあるのだが。
文法にきつくて速度はうんこというデバッグ向きの定評もあるし、
FortranBuilderで安く手に入るなら、チェック用にいいかなとも思うのだが。

NAG利用者の意見を求むw

860デフォルトの名無しさん:2006/05/24(水) 23:07:53
コンパイラが10万くらいだったから安いかも
861デフォルトの名無しさん:2006/05/27(土) 21:37:28
FTN77 Personal Edition ってもうダウンロードできないの?
SalfordのHPやSilverfrostのHPからもリンクが消えてるんだけど…
862デフォルトの名無しさん:2006/05/29(月) 01:52:14
>>861
FTN95がFreeになったから消したんでないのかな?
863デフォルトの名無しさん:2006/06/03(土) 02:31:53
もうどこでもダウンロードできないんですかね?
864デフォルトの名無しさん:2006/06/04(日) 00:35:52
>>863
ロシアか中国あたりにうpられていそうな気もするがw
漏れは使ったこと無いけど、FTN77はそんなにいいものなのかい?
フリーのFTN95はバナーがでてウザかった気はするが使えたよ。

F77だったらOPEN WATFORやg77などがあるので代替手段が無いわけではない。
WATFORもDOS EXTENDER時代に本来の開発が止まったものなので、昔懐かしい
感じを保っているはずだが・・・w
865デフォルトの名無しさん:2006/06/04(日) 01:38:40
「FTN77PE.EXE」でぐぐるとそれらしきものがいくつか見つかるが
どれもなんか怪しい雰囲気がw

>>864
単体で使う分には取り立ててよいというほどではないと思うけど
CPad for Salford FTN77と一緒に使うとお手軽にプログラムの
作成・実行が出来るので重宝しています。
このセットで紹介しているHPも結構あるみたいだし。
866デフォルトの名無しさん:2006/06/06(火) 00:54:17
すいません。わかる方がいたら教えてください。
FORTRAN77です。

たとえば、10行2列の数値データがあったとして、
これを「csvファイル」にファイル出力したとき、
1列目と2列目を、エクセルでいうA列、B列の各セルに
自動的に格納させる方法はありますでしょうか?

C言語だと自動的に各セルに数値が収まってくれるプログラムを作成できますが、
私の使っている Salford FTN77 で作成したプログラムでは、
出力データがすべてA列に表示されてしまって都合が悪いです。
ちゃんと隣のB列の各セルに数値が収まるようなプログラムは作成できるでしょうか?
867デフォルトの名無しさん:2006/06/06(火) 01:20:23
>>866
CとFORTRAN、双方でどんな出力をしたかは知らんが
csvなら値をカンマで区切ってやるだけでうまくいくはずだぞ。

open(10, file='abc.csv', status='UNKNOWN')
do i = 1, 10
write(10, '(F12.3, '','', F12.3)') data(i, 1), data(i, 2)
end do
close(10)
868デフォルトの名無しさん:2006/06/06(火) 01:32:46
FORMAT文使え、ってことじゃなくて?
869デフォルトの名無しさん:2006/06/06(火) 01:55:27
>867

こんな感じでカンマで区切っただけです。
Cでは特に何も考えなくてもうまくいったのですが…。

open(10, file='abc.csv', status='UNKNOWN')
do 100 i = 1, 10
m=2i
write(10, *) i,m
x=x+1
100 CONTINUE
close(10)


>868

FORMAT文をどのように使えばよいですかね?
870869:2006/06/06(火) 01:59:07
x=x+1

ではなくi=i+1です。
871デフォルトの名無しさん:2006/06/06(火) 02:02:23
>>869
いやそれ、カンマで区切れてないから。
出来たファイルをテキストエディタで開いて見てごらん。
872デフォルトの名無しさん:2006/06/06(火) 15:29:32
>>869
FORMAT嫌いなら,
write(10, *) i, " , ", m
とするアルよろし!
再チェーン
873869:2006/06/08(木) 00:28:04
みなさんのおかげでできました。
ようするにカンマを打てばよいのですね。
ただ一つ気になったので教えてください。
867氏や872氏は、

write(10, *) i, " , ", m

という風にダブルクォーテーションでカンマを打ってますが
私のコンパイラではエラーとなったので、
普通に文字を出力するように、
シングルクォーテーションでやったらうまくいきました。
ダブルクォーテーションでもできるのですかね。できないのは私だけ?
同様の理屈で、

write(10, '(F12.3, '','', F12.3)') data(i, 1), data(i, 2)

も、

write(10, '(F12.3,A,F12.3)') data(i, 1), data(i, 2)

という風に直したらうまくいきました。
874デフォルトの名無しさん:2006/06/08(木) 01:35:45
>>873
文字列にダブルクォーテーション(")が使えるのはFortran90以降。
FORTRAN77のコンパイラでも独自の拡張仕様で対応しているものもある。

>>867
write(10, '(F12.3, '','', F12.3)') data(i, 1), data(i, 2)
はダブルクォーテーションではなくシングルクォーテーション2つだ。
文字列中の2つの連続した「'」は1つの文字「'」と解釈される。

H形編集記述子を使って
write(10, '(F12.3, 1H,, F12.3)') data(i, 1), data(i, 2)
とする手もあるが、今となってはお勧めできない。
875デフォルトの名無しさん:2006/06/20(火) 00:32:22
>>856
の斜陽国家エベントにいってきた奴いないの?

なんか報告頼むぜ!いつごろF2003のコンパイラができそうだとかさ。
876デフォルトの名無しさん:2006/06/21(水) 01:51:00
だれかINTEL Fortran のVer.8系列とVer.9系列の違いを教えてください。

877デフォルトの名無しさん:2006/06/21(水) 02:08:47
インテルのホームページか、Intel(R) Fortran Complier販売代理店のホームページからリリースノートが見れます。
878デフォルトの名無しさん:2006/06/21(水) 14:40:08
>>877
リリースノートをみても、根本的な違いがよく分かりません。
Intel8.x系列は未だに開発が続けられているのはなぜなんですか?
9.xに統合されないのは何か違いが理由があるのですか?

879デフォルトの名無しさん:2006/06/22(木) 09:50:48
> Intel8.x系列は未だに開発が続けられている
違いが分からないのに開発されてると思った理由が知りたい。
880デフォルトの名無しさん:2006/06/22(木) 12:26:34
>>879
intelからのversion upがVer.8系列とVer.9系列と両方なされているんだが、
どうして開発されていないといえないのか理由が知りたい。

881デフォルトの名無しさん:2006/06/22(木) 22:30:05
ttp://support.intel.com/support/performancetools/fortran/linux/sb/cs-007825.htm
ttp://support.intel.com/support/performancetools/fortran/windows/sb/cs-007871.htm
今現在、Intelがサポートしているバージョンは Linux版が9.xと8.x、Win版が9.1と8.1

なぜ未だに2種類のバージョンをサポートしているのかは知らんが
多分、互換性の問題なんじゃないの?
Linux板のintel compilerスレを見てみるとバージョンの違いで挙動の変わる
プログラムもあるようだし。
882デフォルトの名無しさん:2006/06/23(金) 01:25:10
>>881
挙動が変わった経験はないが、9.xで作ったバイナリの方が遅いことはしょっちゅうある。
883デフォルトの名無しさん:2006/06/25(日) 23:40:56
開発とサポートって同義じゃないのに。
884デフォルトの名無しさん:2006/06/26(月) 00:59:13
>>883
国語で負け惜しみかww 糞豚www
885デフォルトの名無しさん:2006/07/13(木) 21:05:19
たまにはageとくか
886デフォルトの名無しさん:2006/07/18(火) 20:15:58
HITのサイトが消滅して、プロサイドとの合弁会社のページが出てくるんだが、
詳しい情報きぼんぬ
887デフォルトの名無しさん:2006/07/20(木) 03:45:40
フォートランは落ちぶれましたか?
888困ってます:2006/07/20(木) 13:27:37
2次元のポアソン方程式

方程式 d2f/dx2 + d2f/dy2 = c

境界値  f = 0

範囲   x= -1 〜 1 , y= 0 〜 1

定数 c= -1 (x<0) , c = 0 (x=0) , c = 1 (x>0)

離散式 -4*f(i,j)+f(i-1,j)+f(i+1,j)+f(i,j-1)+f(i,j+1)= dx*dx*c


これをvisual Fortranを使ってやるのですが全くわかりません。。。
誰か出来る人いませんか????
あとDOSで開いた後立体的に見たいんですが、可能ですか????
よかったら貼り付けてください!!!

889デフォルトの名無しさん:2006/07/20(木) 14:18:16
>>888
こっちへゆけ

くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/
890デフォルトの名無しさん:2006/07/20(木) 15:23:35
>>888
PROGRAM unko
IMPLICIT NONE
INTEGER, PARAMETER :: nx = 50, ny = 50
REAL :: f(-nx - 1:nx + 1, 0:ny + 1), ff(-nx:nx, ny), c(-nx:nx, ny), dx, dy
INTEGER :: i, ix, iy
dx = 1.0 / REAL(nx)
dy = 1.0 / REAL(ny)
c(-nx:-1, :) = -1.0
c( 0, :) = 0.0
c( 1:nx , :) = 1.0
f(-nx - 1, :) = 0.0
f( nx + 1, :) = 0.0
f(:, 0) = 0.0
f(:, ny + 1) = 0.0
ff = 0.0
DO i = 1, 100
f(-nx:nx, 1:ny) = ff
DO ix = -nx, nx
DO iy = 1, ny
ff(ix, iy) = -c(ix, iy) * dx * dy &
+ ( f(ix - 1, iy - 1) + f(ix - 1, iy + 1) &
+ f(ix + 1, iy - 1) + f(ix + 1, iy + 1) ) / 4.0
END DO
END DO
END DO
STOP
END PROGRAM unko

収束条件をまじめに考えたほうがいい。ここでは無批判に100回イタレーション。
図はArrayVisualizerでも使え。漏れは使い方しらん。
WindowsでFortranからGraphicやりたいなら考えてもいい。
891デフォルトの名無しさん:2006/08/09(水) 13:17:07
あげる
892デフォルトの名無しさん:2006/08/09(水) 22:11:42
デバッグ作業を行っておりまして、
指定回数目の呼び出しでプログラムが止まるようにしたいと思っています。
非常に簡単なことで、例えば以下のように書けば問題なく目的が達成できると思っていたのですが・・・

subroutine xxx
common /debug/ counter
integer counter
------処理内容------
write(*,*) counter
counter = counter+1
if(counter .eq. 2) stop
end

うまくいきません。コンソールには、

0
0
0
0
0
1

と書き出され、8行目のwrite文は認識されているのに
次の行のcounterのインクリメントは無視されているように見えます。
もちろんcounterは他の処理で書換えたりしてはいません。
また、親プログラムで最初にcounter=0に初期化してあります。

何かお気づきの点など無いでしょうか?

893デフォルトの名無しさん:2006/08/09(水) 22:59:50
初期化部分が何度も実行されてるってことはないよね?
とりあえず、デフォルトで 0 が入ってる筈だから、
初期化のところをコメントアウトしてみたらどうかな。
894デフォルトの名無しさん:2006/08/09(水) 23:11:42
>>892
配列はみ出しで、commonのcounterが上書きされているとかw
895デフォルトの名無しさん:2006/08/10(木) 00:28:17
-O0でこむぱいるしてね
896デフォルトの名無しさん:2006/08/10(木) 01:57:26
全部載せてみなよ。あと使用してるコンパイラ。
897デフォルトの名無しさん:2006/08/12(土) 00:43:16
g95でlapackとlapack95をインストールしようとして
g95 projectに書いてあるようにmake.incを書き換えたけど
lapackのコンパイルができなかったんだができた人いる?
898デフォルトの名無しさん:2006/08/12(土) 01:53:43
>>897
環境と状況は?
899デフォルトの名無しさん:2006/08/12(土) 19:20:52
>>898
OSはWinXPです。lapackはWin用のものです。
make install を行うと
makefile:7 *** missing separator. Stop.
というメッセージがでます。
900デフォルトの名無しさん:2006/08/13(日) 09:55:41
>>899
Win用っていうと lapack-pc.zip ?
lapack-pc.zipに入っているMakefileはDigital Fortran (Visual Fortran) + nmake用なので
そのままでは g95 + GNU make では使えない。

lapack.tgz (LAPACK, version 3.0 + UPDATES) を取ってきて INSTALL/make.inc.LINUX を参考に
make.inc を作ればおk
901デフォルトの名無しさん:2006/08/14(月) 05:46:07
>>900
ありがとうございます。
やってみます。
902デフォルトの名無しさん:2006/08/20(日) 21:14:33
age
903デフォルトの名無しさん:2006/08/23(水) 22:37:10
EclipseでIntel fortran (Linux)使いたくて調べた結果、photranていうEclipseのプラングインがあることが判明。
でもロクな能書きもなく、使いかたがわからないんです。

それか、Eclipseで直接Intel Fortranを使う方法、どなたか知りませんか?
904番組の途中ですが名無しです:2006/08/30(水) 13:52:21
ちょい聞きたいんだけど、fortranってCみたいに/* 〜 */でブロックごとコメントアウトみたいなの出来ないかな。
仕方なくEmacsでcommet-regionとかしてるけど、やっぱり面倒だ。
何かいい解決策知ってる人いないかのう
905デフォルトの名無しさん:2006/08/30(水) 15:26:19
今どきのfortranは#if使えないか?
906デフォルトの名無しさん:2006/08/30(水) 17:15:13
>>905
前やったときに使えなくて,そのレスみて本当は使えるのか?と思ってマジメに探したらあったあった.
ifortで -fppオプションか,サンクス.
907デフォルトの名無しさん:2006/08/30(水) 17:21:04
と思ったらオプションつけなくても拡張子を".f90"でなく大文字で ".F90"にすればいいのか.
これは知らなかった.
908デフォルトの名無しさん:2006/08/31(木) 00:07:10
FORTRANは行センシティブなので、素直に1行ごとにコメント印をつけるほうが自然。

終端記号センシティブな言語の慣習を持ち込むのはよくないw
909デフォルトの名無しさん:2006/08/31(木) 00:50:11
プリプロセッサに頼るのはよくないとです
理由は・・・適当にググってくれぃ
910デフォルトの名無しさん:2006/08/31(木) 02:51:40
coco (Condiditonal Compilation) の事もたまには思い出してあげて下さい
911デフォルトの名無しさん:2006/09/05(火) 19:55:49
Visual Studio 2005でFTN95って使えないんですか?
912デフォルトの名無しさん:2006/09/05(火) 21:49:36
>>911
今のところ使えない
913911:2006/09/06(水) 00:44:23
>>912
情報有難うございます。
Visual Studio 2003を持っていればFTN95をインストールしたときのレジストリの変化等を見て
Visual Studio 2005に対応させる方法が類推できそうなんだけど...。
だれかやってくれないかなぁ。
914デフォルトの名無しさん:2006/09/06(水) 01:38:31
>>913
SilverfrostのForumを探してみるとVS2005に対応させる予定はあるようで
we are still aiming for a release "this summer". と言っているので、もうすぐ対応版が出るかも?
#もう夏も終わりだが

ちなみにVS2005 Express Editionは他のコンパイラを追加することが出来ないようなので
無償でVS上でFortranプログラミングとは行かないようだ。
915911:2006/09/06(水) 02:55:18
>>914
おぉ!!有益な情報有難うございます。
VSのエディタだとオートコンプリートが使えて便利そうなので対応予定があって良かったです。
916デフォルトの名無しさん:2006/09/06(水) 17:41:38
XlsoftからLinux用の非商用版は入手できるのでしょうか?
日本語マニュアルあるといいんですが。
917デフォルトの名無しさん:2006/09/06(水) 19:11:24
>>916
日本語のマニュアルなら購入しなくてもゲットできますよ。
ただ、xlsoftにメールアドレスを登録する必要があります。それだけで、そのメールアドレスにパスワードが送られてくるかと。
918916:2006/09/07(木) 11:59:58
>>917
ありがとうございます。
xlsoftからアーカイブを入手してドキュメントだけ取り出しました。
しかしメインの部分は英語なんですね。まあ困ったらちゃんと読む
ことにします。
919デフォルトの名無しさん:2006/10/10(火) 10:53:44
>>2のサイトで
http://www.nminoru.jp/~nminoru/programming/x86-fortran.html#benchmark
G77、Intel Fortran 7.0、Intel Fortran 5.0の比較が載っていて
ベンチマークのTotalが
g77=132
Intel Fortran 7.0=257
Intel Fortran 5.0=284
になっています。
g77よりIntel Fortran 7.0のほうが計算時間が2倍早く、
Intel Fortran 7.0よりIntel Fortran 5.0の方が計算時間が短い
という解釈であっていますか?
違うようでしたら正しいベンチマークの見方を教えてください。
920デフォルトの名無しさん:2006/10/12(木) 00:57:18
>>919
多分そうなんだろうが、CPUがPen3でやっていることからも分かるように、その情報はものすごく古い。

Intel FortranはVer.7から系列が変わっているので、Ver.5とは別の製品だと思ったほうがいい。
今はVer.8とVer.9の系列が並行してBugFixが出されている。

速いのはIntelかPGといわれている。CPUやプログラムとの相性もあるので場合によって異なる。

GNUは独立ベンダーを倒産させるので、うんこコンパイラのままとどめておくべきw
921919:2006/10/12(木) 10:06:23
>>920
有り難うございます。
Intel Fortranのバージョンがあがっているのに計算時間が遅くなっているので
疑問に思っていたのですが、別の製品と思えば納得です。
922デフォルトの名無しさん:2006/10/18(水) 14:53:17
Fortranのフリーのコンパイラが使えません。
XP使ってて、ftn77.exe等のコンパイラを試してみたんですが、
このコンパイラがXPに対応していないせいか、
使おうとすると、毎回ダウンロードが始まるだけで使えません。

簡単にコンパイルできる方法があれば、
それでもいいので教えてくださいませ。
923デフォルトの名無しさん:2006/10/18(水) 21:05:28
>>922
ウチではXPで問題なく使えてるぞ。

Silverfrost FTN77 4.03
ttp://www.download.com/Silverfrost-FTN77/3000-2069_4-10537938.html?tag=pub

Silverfrost FTN95 4.9
ttp://www.download.com/Silverfrost-FTN95/3000-2069_4-10491440.html?tag=pub

他のフリーなコンパイラは >>3 とか参照のこと。
924デフォルトの名無しさん:2006/10/20(金) 21:45:52
Virtual PCが無料で配布されているらしいので、Fortran使うために
Sunのソラリス入れる敷居が下がったぞいw

925デフォルトの名無しさん:2006/10/21(土) 12:05:34
>>924
solarisのコンパイラはgccとあんま変わりません
926デフォルトの名無しさん:2006/10/25(水) 20:50:52
今までCVF使ってたんだけど,Intel Fortran Compiler9.1でコンパイルしたら
実行時間が40%以上縮まったお
すげーお
927デフォルトの名無しさん:2006/10/25(水) 23:49:27
>>926
CPUはなんだ?つーかSSEとかかけてる?
インテルはCPU対応の最適化が進んでいるから、最新CPUだと差がでやすい。

しかしCXMLのライブラリが無くなったのがめんどい。
まぁLAPACKだから拾ってくればいいんだが、INTELもMathKernelの
BLAS−LAPACKぐらいはただでよこせw
928デフォルトの名無しさん:2006/10/26(木) 09:40:16
>>927
>INTELもMathKernelの
>BLAS−LAPACKぐらいはただでよこせw
http://www.intel.com/cd/software/products/ijkk/jpn/perflib/mkl/index.htm
に "非商用版のダウンロード" ってのがあるけど…。
対象者でなければ買うしかない罠。
929929:2006/11/05(日) 11:57:48
今、ワードのようなテキストデータの中に1961年から2005年までの乱雑した年
数だけわかっていて、そこから連続した数を抽出し、発生頻度と見なしてその
発生確率からポアソン分布による乱数を行なえるようなプログラムを知りたい
のですが、
詳しく述べますと、
データ例として、初めてでよくわからないのですけど、'nenpow.txt'というよ
うなワードの文章の中に112行1列(要は縦に一つずつの年報が並んでいる)に
なっています。ちょっと描いてみると
1行目:1961
2行目:1961
3行目:1962
  …
112行目:2005
というようになっており、ここからそれぞれの年報をまとめて発生個数として
ポアソン分布を作成し、それによる確率的な乱数を発生させるようにしたいの
ですけど・・・。
Fortran77か90で行ないたいのですけど^^;
930デフォルトの名無しさん:2006/11/05(日) 12:40:12
>>929
>Fortran77か90で行ないたいのですけど^^;

Fortran90はFORTRAN77の上位互換だ。
つまり、FORTRAN77でプログラムを書けば、それはFortran90のプログラムであるとも言える。
931929:2006/11/05(日) 14:04:51
では、FORTRAN77で知りたいのですけど・・・。
プログラムの仕方がわからないのですけど、わかりますか?
932デフォルトの名無しさん:2006/11/05(日) 19:58:30
Intel fortran compiler 9.1を使っているのですが,モジュールの扱いについて教えてください
モジュールのみを記述したファイルtest_mod.f90と,
それを呼び出して使うメインルーチンが記述されているcall_mod.f90があったとします.

そして

ifort -c test_mod.f90 (1)

とコンパイルしておき,

ifort call_mod.f90 (2)

として実行ファイルを作ろうとしても外部参照が未解決であるという旨
を表示させると共にリンクエラーとなります.もちろん,

ifort call_mod.f90 test_mod.obj (3)

と入力すると実行ファイルを作ってくれるのですが,(2)のコマンドだけでリンクを通す方法はないでしょうか?
933932:2006/11/05(日) 19:59:29
[test_mod.f90]の内容
--------------------------
module test_mod
implicit none
contains
real(8) function func(a,b)
real(8) a,b
func=a+b
return
end function func
end module test_mod

--------------------------


[call_mod.f90]の内容
--------------------------
program main
use test_mod
implicit none
real(8) a,b
a=1.d0
b=2.d0
write(6,*) func(a,b)
stop
end program main
---------------------------
934デフォルトの名無しさん:2006/11/05(日) 20:46:08
>>932
(3)の方法でコンパイルするのが一般的だと思います。

どうしても(2)の方法でコンパイルしたい、というのであれば !DEC$ OBJCOMMENT と
ライブラリを使う方法があります。

1. test_mod.f90の先頭に
!DEC$ OBJCOMMENT LIB: "test_lib.lib"
を追加する。

2. test_lib.libをつくる
ifort -c test_mod.f90
lib -out:test_mod.lib test_mod.obj

3. call_mod をコンパイルする
ifort call_mod.f90

この場合、test_mod.obj の替わりにtest_lib.libを使用するので
call_mod.f90 コンパイル時に test_mod.objは不要です。
935932:2006/11/05(日) 21:04:37
>>934
>2. test_lib.libをつくる
>ifort -c test_mod.f90
>lib -out:test_mod.lib test_mod.obj
の部分は

lib -out:test_lib.lib test_mod.obj

ですよね?これでできました!
!DEC$ OBJCOMMENTというのは初めて知りました.
調べてみるとなかなか使い易そうです.
ありがとうございました.
936フォートランまだまだ初心者:2006/11/05(日) 21:08:08
よくわからないのですけど、'PARAMETA.txt'のデータの中が150行6列になって
いて、そこから一つずつの列の値に対して対数正規分布を行い、それぞれを一
つずつにまとめていきたいのですけど…
どなたかわかる人はいませんか?
Fortran77で行ないたいのですけど^^;
データ内容
4.84E+01 3.70E+01 3.04E+01 2.38E+01 3.15E+02 -7.25E+01
3.95E+01 4.16E+01 1.59E+01 3.90E+01 6.62E+01 6.06E+01
3.18E+01 8.20E+01 4.05E+00 3.92E+01 4.37E+02 -6.41E+01
4.93E+01 5.93E+01 4.01E+00 3.93E+01 2.23E+02 6.10E+01
3.78E+01 2.92E+01 9.60E+00 -1.52E+01 3.30E+02 -7.95E+01
 …     …    …     …    …     …

よろしくお願いします><
937デフォルトの名無しさん:2006/11/05(日) 23:20:34
>>935
MODULEを使うと、引数の型のチェックなどをしてくれる。
LIB形式にしてしまうと(昔の77の頃と同じならば)引数の型などをチェックせずにLINKすることに
なるんじゃないかな?

ついでだから確かめて報告してくれ。


>>936
もう少し内容を整理してもらわないと、誰も答えられない。
一体、西暦はどこに消えたんだ?

6列のデータを、列ごとにまとめるのは簡単だ。

対数正規化を行うのは、列毎のデータが得られてから考えることで、
味噌糞ごっちゃりにすべきでないべ。
938932:2006/11/06(月) 01:20:57
>>937
引数の型はチェックしてくれるようです.

ただ,!DEC$ OBJCOMMENT LIB:を使うと,その名前のライブラリファイルがないと
リンクできなくなるようです.例えば,
メインルーチン main.f90 内部で

use module_1  (この内部では!DEC$ OBJCOMMENT LIB:"module_1.lib"と記述されている)
use module_2  (この内部では!DEC$ OBJCOMMENT LIB:"module_2.lib"と記述されている)
use module_3  (この内部では!DEC$ OBJCOMMENT LIB:"module_3.lib"と記述されている)

としている場合,リンクするときに必ずこれら3つのライブラリファイル(module_1.lib,module_2.lib,module_3.lib)
が必要になります.そのかわりコマンドは楽で,

ifort main.f90

だけで通ります.

もし,!DEC(略) 宣言なしの場合は,

lib -out:all.lib module_1.obj module_2.obj module_3obj

という風に統合したall.libをひとつ用意しておけば,

ifort main.f90 all.lib

で通ります.
!DEC(略)宣言ありの場合は,モジュールがモジュールをuseする
場合等に必要となるlibファイルとmodファイルが増えまくるということになりそうです.
(宣言無しの場合全てを統括したlibを一つ置けばよい)
結局どっちが楽かって話になりますね.まだ色々試してる段階なので何とも言えないですが.
939932:2006/11/06(月) 01:33:18
>場合等に必要となるlibファイルとmodファイルが増えまくるということになりそうです.

modファイルは当たり前でした.libファイルだけですorz

結局何が言いたかったかというと,libファイルを一つのlibファイルに
することができなくなるということでした.
940デフォルトの名無しさん:2006/11/06(月) 02:53:25
941デフォルトの名無しさん:2006/11/06(月) 03:09:53
N次正方行列A(N,N)の行列式の値を求める
とき、IMSLを使った書き方を教えてくだされ。
942デフォルトの名無しさん:2006/11/06(月) 07:49:58
>>941
LFDRGで検索されたし
943デフォルトの名無しさん:2006/11/06(月) 08:17:44
MKLとIMSLどっちがいいのかな
944フォートランまだまだ初心者:2006/11/06(月) 13:55:33
そうですね>< 
できれは、年報のデータを一行目に持ってきて112(150)行7列やっていきた
いのですけど、大丈夫ですかね^^;
なんか、内容とかを考えていく内にこんがらがってきたのですけど><
945デフォルトの名無しさん:2006/11/06(月) 20:19:50
program syukudai
integer i,j,k
real*8 A(3,3) , B(3,3) , C(3,3)
A(1,1)=1.0 A(2,1)=1.0 A(3,1)=1.0
A(1,2)=1.0 A(2,2)=1.0 A(3,2)=1.0
    A(1,3)=1.0 A(2,3)=1.0 A(3,3)=1.0
B(1,1)=2.0 B(2,1)=2.0 B(3,1)=2.0
B(1,2)=2.0 B(2,2)=2.0 B(3,2)=2.0
B(1,3)=2.0 B(2,3)=2.0 B(3,3)=2.0
do 10 i=1,3
do 10 j=1,3
C(i,j)=(0.0)
do 10 k=1,3
C(i,j)=A(i,k)*B(k,j)+C(i,j)
10 continue
do 20 i=1,3
write(*,*) (C(i,j) , j=1,3)
20 continue

stop
end
jwd8211i-i "syukudai.f", line 25: ループを入れ換えました.(行:26)
jwd8211i-i "syukudai.f", line 25: ループを入れ換えました.(行:28)
jwd8331i-i "syukudai.f", line 25: このループはライブラリ呼出し(matmul)に変換されました.

3行3列の積なんですが、上記のようなエラーが出て困っています。2行2列ではうまくいったんですが…どなたか助けてください(泣)
946デフォルトの名無しさん:2006/11/07(火) 12:02:01
>>945
富士通臭いメッセージだな。末尾の i の文字に注意すべし。(たしか富士通はそうだったはず)

それはエラーではない。ウォーニングですらない。インフォメーションだ。 (e,w,i の違いあり)

メッセージは最適化の結果だ。
ループ入れ替えをして、かつ行列積であることをコンパイラが認識して、専用の最適化ルーチンに
おきかえたと知らせているだけだ。ふつうに動くはず。

学習のためにやるなら、デバッグ用のオプションをつけて最適化を抑止するといい。

947デフォルトの名無しさん:2006/11/07(火) 19:50:47
>>946
そうだったんですか…
動かしてみたら確かに動きました。
お騒がせしました。
948デフォルトの名無しさん:2006/11/08(水) 00:59:23
>>944
それなら楽勝。
ちみの考えるべきは、単に年毎に対応した1列分のデータがまとめられた場合の処理だ。
あとはそれを6列相当分6回繰り返せばいいのだから。

949フォートランまだまだ初心者:2006/11/08(水) 03:32:02
>948さんありがとうございます
もう一つ知りたい事があるのですけど載せていはいないのですけど、一列目の
年数の値をポアソン分布に従って発生させて、その事象について他のバラメー
タをいて乱数で確率的な数値から値を求めていき、その値をdatファイルにいれ
ていくにはどうしたらいいですか?
(乱数には2行から7行までのデータによる確率分布によるものとする)
950デフォルトの名無しさん:2006/11/08(水) 17:50:32
訳があって、fortran のソースを C に変換してから実行ファイルを作りたいのです。
以下の makefile で make calc とやっても目的の事が出来ない、
.c を経由しないで.f から .o を作ろうとするのですが、
どこが間違ってるのでしょうか? 気づく点があったら教えて下さい。

-------------------------------------------------------------------------
CC = cc
CFLAGS = -c
LDFLAGS = -L/usr/local/lib -lf2c -lm
INCLUDES= -I/usr/local/include
F2C = f2c
F2CFLAGS= -Nc40

PRG1 = calc
OBJ1 = main.o subr.o

.f.c:
$(F2C) $(F2CFLAGS) $<

.c.o:
$(CC) $(INCLUDES) $(CFLAGS) $<

$(PRG1) : $(OBJ1)
$(CC) $(LDFLAGS) $(OBJ1) -o $(PRG1)

clean:
rm -f *.o *.c
----------------------------------------------------------------------------------
951950:2006/11/08(水) 17:51:39

タブは見えなくなってますが、入っております。
952デフォルトの名無しさん:2006/11/08(水) 18:20:57
.SUFFIXES:
.SUFFIXES:.f .c .o
を頭のほうにいれてみるとかどう?
953950:2006/11/08(水) 20:14:06
>>952
どうもありがとう。やってみましたが、うまくいきませんでした。

main.o:main.c
main.c:main.f

subr.o:subr.c
subr.c:subr.f

を加えればうまくいくのですが、実際に全部加えるのは大変。。。
954デフォルトの名無しさん:2006/11/08(水) 22:44:26
>>950のだと*.oと*.f間に依存関係が記述されてないからなんじゃない?
>>953みたいに依存関係を記述するのが正解だと思うけど。

そうしないとすると*.fから*.oをつくるようにするとか。
確認していないけど、こんなイメージ。
.f.o:
$(F2C) $(F2CFLAGS) $< -o hoge.c
$(CC) $(INCLUDES) $(CFLAGS) hoge.c -o $@

多分もっといいやり方があると思う。
955デフォルトの名無しさん:2006/11/09(木) 02:17:20
newmann条件の熱方程式を差分法を使って解きたいんですけど、うまくできません。
(du/dt) = (d^2u)/ (dx^2) (0≦x≦1)
du/dx=0 in x=0,1
u=cos(pi*x) in t=0
どなたかご教授お願いします。
program sabunhou
parameter (ndim=101)
dimension u(ndim)
write(*,*) 'INPUT : nfunc='
read(*,*) nfunc
write(*,*) 'INPUT : n='
read(*,*) n
write(*,*) 'INPUT : dt='
read(*,*) dt
write(*,*) 'INPUT : tmax='
read(*,*) tmax
h=1.0/float(n)
flam=dt/h**2
do 1 i=1,n+1
fi=i-1
u(i)=f(fi*h,nfunc)
1 continue
write(*,100) 0.0,(i,u(i),i=1,n+1)
956デフォルトの名無しさん:2006/11/09(木) 02:17:55
100 format(1h ,'t=',1pe12.41h ,5(2x,'i',5x,'U(i)',4x)(1h ,5(i3,1pe12.4,1x)))
nstep=0
2 continue
uleft=u(-1)
do 3 i=2,n
unew=(1.0-2.0*flam)*u(i)+flam*(u(i-1)+u(i+1))
u(i-1)=uleft
uleft=unew
3 continue
u(n)=uleft
u(n+1)=u(n-1)
nstep=nstep+1
t=dt*float(nstep)
write(*,100) t,(i,u(i),i=1,n+1)
if(t+dt.lt.tmax+0.1*dt) go to 2
end
function f(x,nfunc)
pi=3.1415927
f=cos(pi*x)
end
957デフォルトの名無しさん:2006/11/09(木) 03:57:37
>>952

%.o:%.f

をいれると.fと.oの間のデフォルトルールが消されて
うまくいくっぽい。
958デフォルトの名無しさん:2006/11/09(木) 08:42:20
>>955
何がうまく行かないのか、もう少し具体的に書いてくれないと答えられない。

世間的には、いきなりソース見せて、『おかしいの教えて!』と言ったら。
『おかしいのはお前の態度だ!』といわれちゃうw

>>949
いまいち理解できないのだが、データそのものを乱数で生成したいということか?
年号に関してはポアソン分布をなすように、それに対応する6個の値は別の分布ということ?

それならば、それぞれの分布をなす関数が用意してあればDO LOOPをまわすだけだ。
それらをサブルーチンかファンクションで作ればいい。
959デフォルトの名無しさん:2006/11/09(木) 09:24:21
>>955
境界の位置のuの値が固定されてしまっていました。
なんとか解決することができました。
ありがとうございました。
煮詰まった余りおかしな態度だったことをお詫びします。
960デフォルトの名無しさん:2006/11/09(木) 09:55:13
>>959
OKwwwwww
頼りになる人は気難しいし、気さくな人は頼りにならん。
奴らの操縦法は下手に出ておだてる事と、適切な質問を与えることだ。
961デフォルトの名無しさん:2006/11/10(金) 00:34:19
g95 と gfortran の関係について教えてください (><

できれば3行で!
962デフォルトの名無しさん:2006/11/10(金) 00:42:11


963デフォルトの名無しさん:2006/11/10(金) 01:01:47
>>926
いや、先祖はg95で同じだろw 
g95の中の人がGCCと一緒になるのを嫌ったのかな?
詳しいことしらん。
964デフォルトの名無しさん:2006/11/10(金) 01:02:44
gfortran はGCC(GNU Compiler Collection)の中のFortran95 コンパイラ。
g95 はGCCを元にしたFortran95コンパイラ。
g95の進捗があまりにも遅かったのでgfortranが別プロジェクトとして分岐した(が、今のところ完成度はg95の方が上)。

ttp://gcc.gnu.org/wiki/TheOtherGCCBasedFortranCompiler
965デフォルトの名無しさん:2006/11/10(金) 19:02:47
Mersenne Twisterで乱数を発生させたいのですが(fortran77)、
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/FORTRAN/TAKANO/mt19937.f
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/FORTRAN/fortran.html
上記のプログラムだと[0,1]の一様乱数発生になります。
これを(0,1)の一様乱数発生に変えるには、プログラムをどのように変えればいいのでしょうか。


簡単に変えられるようでしたら、(0,1]と[0,1)も教えてください。
966デフォルトの名無しさん:2006/11/11(土) 00:42:39
>>965
メルセンヌ・ツイスターの本家ページにC版の半区間を見た記憶があるが、幻かもしれない。


967デフォルトの名無しさん:2006/11/11(土) 05:19:30
C版にはあるみたいだね。
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/MTARCOK/readme-mt.txt
C版の関数を呼ぶなり、移植するなりするということで。
968デフォルトの名無しさん:2006/11/11(土) 14:10:20
mt19937ar.fは全部入り
969965:2006/11/11(土) 16:54:27
>>966-968
ありがとうございます。
mt19937ar.fを使ったらうまくいきました。
970デフォルトの名無しさん:2006/11/11(土) 21:57:02
そろそろ次スレが要るな。
971デフォルトの名無しさん:2006/11/12(日) 17:15:18
972デフォルトの名無しさん:2006/11/12(日) 17:27:20
 
973デフォルトの名無しさん:2006/11/12(日) 17:27:52
 
974デフォルトの名無しさん:2006/11/12(日) 17:28:27
 
975デフォルトの名無しさん:2006/11/12(日) 17:29:04
 
976デフォルトの名無しさん:2006/11/12(日) 17:29:37
 
977デフォルトの名無しさん:2006/11/12(日) 17:43:30
ちゃんと最後まできっちり使えよ!

FORTRANIVはすなわちFORTRAN66だなw
978デフォルトの名無しさん:2006/11/12(日) 17:56:17
 
979デフォルトの名無しさん:2006/11/12(日) 17:57:19
 
980デフォルトの名無しさん:2006/11/12(日) 17:58:00
 
981デフォルトの名無しさん:2006/11/12(日) 17:58:38
 
982デフォルトの名無しさん:2006/11/12(日) 17:59:49
 
983デフォルトの名無しさん:2006/11/12(日) 18:04:41
CONTINUE
984デフォルトの名無しさん:2006/11/12(日) 18:33:13
 
985デフォルトの名無しさん:2006/11/12(日) 18:33:48
 
986デフォルトの名無しさん:2006/11/12(日) 18:37:34
 
987デフォルトの名無しさん:2006/11/12(日) 18:38:28
 
988デフォルトの名無しさん:2006/11/12(日) 18:39:04
 
989 ◆SHiMA//5DA :2006/11/12(日) 18:48:52
 
990デフォルトの名無しさん:2006/11/12(日) 18:49:27
 
991デフォルトの名無しさん:2006/11/12(日) 18:58:45
 
992デフォルトの名無しさん:2006/11/12(日) 19:00:15
 
993デフォルトの名無しさん:2006/11/12(日) 19:01:26
 
994デフォルトの名無しさん:2006/11/12(日) 19:03:27
 
995デフォルトの名無しさん:2006/11/12(日) 19:05:01
 
996デフォルトの名無しさん:2006/11/12(日) 19:06:42
 
997デフォルトの名無しさん:2006/11/12(日) 19:07:34
 
998デフォルトの名無しさん:2006/11/12(日) 19:08:16
 
999デフォルトの名無しさん:2006/11/12(日) 19:22:16
do 1000 i =1 ,n
1000デフォルトの名無しさん:2006/11/12(日) 19:22:27
STOP
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。