FORTRAN III
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGFORTRAN77/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/
0002デフォルトの名無しさん
NGNGお約束だが、まずは自分で調べよう
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/
0003デフォルトの名無しさん
NGNGThe 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
0004デフォルトの名無しさん
NGNGCompaq 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/
0005デフォルトの名無しさん
NGNGFortran90プログラミング
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
0006デフォルトの名無しさん
NGNGFortran Source Check (オンライン文法チェック)
http://www.lahey.com/check.htm
ftnchek
http://www.dsm.fordham.edu/~ftnchek/
c2f
http://www.unics.uni-hannover.de/rrzn/gehrke/c2f.html
F2C
http://www.vector.co.jp/soft/win95/prog/se056813.html
Fortranの歴史
http://members.at.infoseek.co.jp/kitaurawa/fortran.html
The Real Programmer Stories (日本語訳)
http://www.genpaku.org/realprogrammerj.html
00071
NGNGというわけで、後は任せた。
オレはもう寝る。
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNGprint *,"乙"
0010デフォルトの名無しさん
NGNG引数の範囲を同じ値の変数で指定すれば範囲が大きいときにstackoverflowがでる。
という現象が起こっています。
なぜでしょうか?
0011デフォルトの名無しさん
NGNG>配列変数の宣言なんですが、引数の範囲を実数で指定すればうまくいく。
>引数の範囲を同じ値の変数で指定すれば範囲が大きいときにstackoverflowがでる。
いまいちよく解らないんだが。
SUBROUTINE FOO(A, N)
REAL A(N)
・・・
とかやってるってこと?
001277
NGNGtemp = 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))
-----------------------------------------------------------------------------------^
というエラーが。。。括弧以外に原因があるのでしょうか??
0013デフォルトの名無しさん
NGNG72桁超えてる。
001410
NGNG全くそのとおりです。説明が不足でした。
サブルーチン呼び出し時に値を渡し、
サブルーチン内でその変数を使って配列を宣言しているのです。
0015デフォルトの名無しさん
NGNG>引数の範囲を実数で指定すればうまくいく。
整数だよね
>引数の範囲を同じ値の変数で指定すれば範囲が大きいときにstackoverflowがでる。
日本語がよく分からんが、配列の次元を馬鹿でかくするという意味なら、関数またぐ時だし、仕様かな。
ただ、ソースも具体的な数字もないので、何とも言えんが。
http://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/pg/pg04_02_43.htm
0016デフォルトの名無しさん
NGNG「配列変数の宣言なんですが、添え字の範囲を定数で指定すればうまくいく。
添え字の範囲を、引数で渡される変数で指定すれば範囲が大きいときにstackoverflowがでる。
という現象が起こっています。
なぜでしょうか? 」
といいたいのでは?
であれば、
・前半は、配列は、ふつーの配列であり、ヒープからメモリが割り当てられる
・後半は、配列は、自動割付配列となり、スタックからメモリが割り当てられる
対処法は
・>>15にあるように、スタックサイズをあげる
・F90で書き、配列をALLOCATEによって確保する
あたりか?
0017勉強になります
05/01/19 16:57:200018デフォルトの名無しさん
05/01/20 06:07:45Fortran
http://pc5.2ch.net/tech/kako/1003/10032/1003214738.html
「FORTRAN II」(2スレ目)の方はもうしばらくしてhtml化されるのを待つか、●を買え。
0020デフォルトの名無しさん
05/01/27 08:36:090021デフォルトの名無しさん
05/01/27 10:08:320022デフォルトの名無しさん
05/01/28 00:38:31>>2の一番上にあります。
0023デフォルトの名無しさん
05/01/28 03:34:05unformattedで書き込んだファイルのreadは全く問題ないのですが、
openの際に、うっかりそうでないファイルを指定した時の振舞で悩んでます。
やりたいことは「ファイル先頭をチラっと見る。意図してないファイル形式なら
その旨のエラー出して終了」です。ですが、ウチの環境で不適切なファイルを
unformattedでopenすると、readの段で強制的にプログラムが停止してしまいます。
これではエラー出すヒマが無く、一方で(私の知識の範囲内では)ファイルの判断には
readをするしかないため、どうにもジレンマに陥ってしまいました。
何かイイ方法御存知の方いらっしゃいますでしょうか?
当方 RHEL3(amd64) + Intel Fortran 8.1 であります。
0024デフォルトの名無しさん
05/01/28 21:29:21iostatでチェック
0025デフォルトの名無しさん
05/01/29 20:10:08読み込むのに、一行に "," 区切りで複数のデータを与えたら一つ目のデータ
しか正しく読めず、あとのデータが????に成ります。
どうしたらいいのでしょうか。
Salford FTN77です。
0026デフォルトの名無しさん
05/01/29 22:03:34・Cの仕様書工房
・Cppunit
みたいなツールってないでしょうか?
0027デフォルトの名無しさん
05/02/07 13:19:58emacs lisp を探しています。
fortran はハンパじゃないので etags だけではちょっと無理です。。。
0028デフォルトの名無しさん
05/02/07 21:02:21データの数かFORMATの指定が間違ってない?
うちの環境では","で区切っても正しく読み込めたけど。
0029デフォルトの名無しさん
05/02/14 17:13:310030デフォルトの名無しさん
05/02/14 17:28:220031デフォルトの名無しさん
05/02/15 20:35:27『Fortran 95』というふうに95の前にスペースを入れるのと,
『Fortran95』というふうにスペースを入れないのと,
どちらが正しいのでしょうか?
0032デフォルトの名無しさん
05/02/15 21:32:040033デフォルトの名無しさん
05/02/15 21:33:18"Fortran 95" の検索結果 約 107,000 件
"Fortran95" の検索結果 約 12,800 件
0035デフォルトの名無しさん
05/02/15 21:55:33ちなみに Fortran 95 の規格は
ANSI X3J3/96-007
JIS X 3001:1998
ISO/IEC 1539-1:1997
内容は全部同じ。
0037デフォルトの名無しさん
05/02/19 02:09:05Salford FTN95 を使うか,それとも,うちの職場にあった唯一の
PC用Fortranコンパイラである Fortran PowerStation 4.0 を使うか,
迷っています。
(他の商品版を買うのは高くて,今のところは躊躇しています)
Win95の頃に発売された Fortran PowerStation 4.0 は Win XP に
インストールしてもコンパイルなどは正常に行われるのでしょうか?
0038デフォルトの名無しさん
05/02/19 09:22:14WindowsXP上で、FORTRAN77のソースをコンパイル、正常実行できた記憶があるよ
0039デフォルトの名無しさん
05/02/20 09:27:24cygwin上でgcc-4.0(CVS版ですが)をmakeしてみる. gfortranができるが
これがf90. 簡単なやつでテストしてみましたが, よっぽどf90の機能を
使ってない限り, 大丈夫そうでした.
0040デフォルトの名無しさん
05/02/20 13:45:59cygwin か coLinux を入れればフォートランランランってことなんじゃないかな.
0041デフォルトの名無しさん
05/02/20 18:31:410043デフォルトの名無しさん
05/02/22 19:47:40お薦めのものがあったら教えてください。
004443
05/02/22 19:49:48できれば日本語マニュアルがあって,便利なライブラリも付属しているものが良いですが‥‥。
ご存じのかた,よろしくお願いします m(_ _)m"
0045デフォルトの名無しさん
05/02/22 20:58:15Intel の Visual Fortran
何をするのに「便利な」ライブラリが欲しいのか知らないが
Windows上でグラフィックが使える QuickWin や
Pro版にはIMSLも付いている。
また付属ではないが、Windows上の事実上の標準なので
MKL や Lapack(95) 、 f90gl 等、有名どころのライブラリは
大抵使える。
004643
05/02/22 22:16:45ライブラリの件ですが,目指しているのは地球のダイナモの成因となる
外核のMHDシミュレーションなので,その数値計算に便利なライブラリが
あればと考えています(地球流体電脳ライブラリが既に存在してはいますが)。
0047デフォルトの名無しさん
05/02/22 23:28:18バグがまだ埋まっている)と書いてありますが,どういうバグなのでしょうか?
コンパイルや計算が正しく行われなかったりするのでしょうか?
0048デフォルトの名無しさん
05/02/23 09:47:51ttp://www.polyhedron.co.uk
にベンチマークも含めてのっていますよ
0050デフォルトの名無しさん
05/02/25 08:41:43どうすればいいでしょう?
下記のようなプログラムを書きたいのですが
コンパイルできません。
program main
call hoge
end
subroutine hoge
write(6,*) "hello world"
call hoge
return
end
0051デフォルトの名無しさん
05/02/25 12:27:16f90の場合だと再帰的呼び出しにすれば大丈夫でしょう。サブルーチン宣言の頭に recursive をつけるだけでいいんじゃないでしょうか?
recursive subroutine hoge
0052デフォルトの名無しさん
05/02/27 15:50:53ちゃんと再帰から抜けるようにしとけよ。
無限ループやるなよ。
0053デフォルトの名無しさん
05/03/02 20:44:06write (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)
というような形式で書くのならわかるのですが...何十回も繰りかえすのはメンドイもので.御存じの方よろしくお願いします.
0054デフォルトの名無しさん
05/03/02 21:22:25自己レスです.
write (10,"(49(d15.7,','),d15.7)") TT,(U(j)/K(j),j=1,NMax)
と書けばうまく逝きました.
失礼しました.
0055名無しさん
05/03/03 14:57:29Fortranで作られたプログラムWindowsで(DOSで)動かしたいんですが、一応データファールとかも揃えて走らせると、
最初の1行だけ読んで「cannot open file "F90.EER" #__」みたいなメッセージが出て計算されません。
これはいったいどういうことなのでしょうか?
ちなみにファイルはここの「TWINSPAN」です。
↓
http://cc.oulu.fi/~jarioksa/softhelp/softalist.html
0056デフォルトの名無しさん
05/03/03 15:20:57もっと詳しく
0057名無しさん
05/03/03 15:26:46すんません。
昔、同じプログラムをNEC98(5インチ時代)に使ったことあってそん時は問題なかったんですよね。
DOSプロンプトのあとにexeファイル名(TWINSPAN)を入れて実行させると、inputデータファイルを尋ねてくるのでそのファイル名を入れてリターンすると
「Cannot Open Error file "F90.EER", error #151」
てのが出て終わってしまいます。
中身はそのまま触ってないので、これ以上のことはわからないのですが・・・
0058デフォルトの名無しさん
05/03/03 17:51:40> 「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 名前が違う。
0059名無しさん
05/03/03 18:10:54ありがとうございます。
そうです「LF90.EER」でした。済みません。
入力ファイルがないとは、inputデータファイルが読めていないということでしょうか。
データ行の1文目は読んでいるんですが。
それか、もはや元のファイルがないのかな。
済みませんあまりに素人で。
0060デフォルトの名無しさん
05/03/13 09:11:58&abc
de=5
fg=3.1
&end
だと読み込まず
&abc de=5 fg=3.1/
でもだめでした。
方言があるんですかね。
0061デフォルトの名無しさん
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コレクションも試しましたが、このバグは、直っていませんでした。
0062デフォルトの名無しさん
05/03/20 05:03:23MS-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 に独自拡張を加えただったのか,
それとも,似ているけど違うものだったのか
ご存じのかた,教えて下さい。
0063デフォルトの名無しさん
05/03/20 08:30:04実際にMS-FORTRANを使ったことはないですのが
手元に「FORTRAN 77 と Fortran 90」があったので
確認してみたところ、MS-FORTRANは
"Fortran 90 の一部機能を含む独自拡張仕様"
のようです。
F90との主な違いは
・継続行の指示記号は "&" ではなく "-"
・構造体の宣言は TYPE ではなく SURUCTURE
・ポインタ、WHERE文、モジュール等がない
などだそうです。
006562
05/03/20 10:48:26もうひとつ教えていただきたいことがあるのですが,「FORTRAN 77 と Fortran 90」 の本で
扱われている MS-FORTRAN について,本の中でバージョン番号は書かれていますでしょうか?
0066デフォルトの名無しさん
05/03/20 11:15:39書籍では「Microsoft FORTRAN V5.1」を用いたということで、巻末の参考図書に
マイクロソフトの「Microsoft FORTRAN - Reference -」(1991)
が挙げられています。
ちなみに Fortran 90 の方は「NAGWare f90 Compiler」でテストしたということです。
(2003年5月20日発行の第1版第7刷で確認)
0068デフォルトの名無しさん
2005/03/27(日) 01:22:580069デフォルトの名無しさん
2005/03/27(日) 15:29:34�@VFで、GUI WIN32アプリをFortranで組む。
�AC/C++でGUI組んで、C/C++からFortranの関数を呼ぶ。
0070デフォルトの名無しさん
2005/03/27(日) 20:37:33VFならDLLをつくるという手もある。
0071デフォルトの名無しさん
2005/03/29(火) 00:06:04CVFならCOM DLLをつくるという手もある。
0072デフォルトの名無しさん
2005/03/29(火) 01:30:03ほとんどのコンパイラが DLL を作れます.
あとはシンボルを調べれば好きな言語から呼べます.
0073デフォルトの名無しさん
2005/03/31(木) 23:09:58プログラムの中でサイズの大きいファイルを開こうとすると、
forrtl: File too large
forrtl: severe (30); open failure , unit 10, file 〜
というエラーが出て止まってしまいます。
このような場合はどう対処すればいいのでしょうか。
どなたかご存知の方がおられましたら、どうかよろしくお願いします。
0074デフォルトの名無しさん
NGNG100Gのファイルでも開こうとしたのか?
007573
2005/04/03(日) 01:07:160076デフォルトの名無しさん
2005/04/03(日) 10:41:190077分かんにゃいからHELP。
2005/04/03(日) 11:02:57どのようなコードにすればいいのでしょうか?
いろんなテキストを見たけど載ってない…。
0078分かんにゃいからHELP。
2005/04/03(日) 11:06:24「write(*,*) 'へろー,わーるど?'」と
「print*, 'へろー,わーるど?'」とでは本質的にどう違うんですか?
0079デフォルトの名無しさん
2005/04/03(日) 12:34:39advanc='NO'を出力時に指定する。
>>78
77か90か
0080デフォルトの名無しさん
2005/04/03(日) 13:34:12print*, 顔に見えない
0081分かんにゃいからHELP。
2005/04/03(日) 19:03:17ヒント、アリガトウございました。使っているのは 90 の方です。
「character NO」を宣言しなければならないんですね。
あと、「advance」ですよね。
「write(*,'(A)',advance='NO')」のように使っていますが、「'(A)'」は
文字列の指定を意味しているんですか?
例えば「'(I)'」の時なんかは整数かな、と推測できるのですが「'(A)'」に
ついては馴染みがないんで教えて欲しいです。
008273
2005/04/03(日) 21:36:340083デフォルトの名無しさん
2005/04/03(日) 23:31:52一般的な32 ビットプラットフォームのLinuxでは,最大ファイルサイズが2Gバイトに制限されているので、
�@64 ビット環境でコンパイルする。
�A32 ビットアーキテクチャなら、LinuxのカーネルをLarge File Supportが有効な新しいものに変える。
008473
2005/04/04(月) 17:54:48こちらでも調べてみましたが、Large File Supportはカーネル2.4から組み込まれているみたいです。
今私が使っているlinuxのカーネルは2.6なのですが、Large File Supportは有効にはなっていないのでしょうか。
それとも他に何か原因があるのでしょうか。
0085デフォルトの名無しさん
2005/04/04(月) 17:58:18休憩しようよ
0086デフォルトの名無しさん
2005/04/08(金) 18:26:56http://members.at.infoseek.co.jp/kitaurawa/cgi-bin/wiki.cgi
0087デフォルトの名無しさん
2005/04/12(火) 10:09:32http://www.photran.org/
0088デフォルトの名無しさん
2005/04/15(金) 00:08:45ダウンロード画面にベトナム料理屋が表示されるね。
フォーのレストランてことか。
0089デフォルトの名無しさん
2005/04/17(日) 00:48:05現実逃避で『 諸君 私はFortranが好きだ 』というネタ演説を作ってみました。
先月,私がガイドライン@2ch板に投稿したものに少々手直し。
( >>63 & >>66 さん,先月は失礼いたしました。実はあの朝はこれを打っていました。)
ttp://www.geocities.co.jp/Technopolis/4404/i_love_fortran.html
スレ汚し,大変失礼いたしました m(_ _)m"
009089
2005/04/20(水) 01:07:42何故 h が抜けてたんだか‥‥ orz
演説 『 諸君 私はFortranが好きだ 』
http://www.geocities.co.jp/Technopolis/4404/i_love_fortran.html
再度のスレ汚し,本当に! 本当に失礼いたしました m(_ _;)m"
0091ega
2005/04/20(水) 03:43:26文字列に変換して出力するサブルーチンを作れ
といわれたんですが、だれか教えてくらさい。
0092デフォルトの名無しさん
2005/04/20(水) 08:02:09http://www.sun.com/presents/minds/2005-0302/
0093デフォルトの名無しさん
2005/04/20(水) 12:29:53ヘンな課題ですね。
009489
2005/04/20(水) 18:45:03VAX 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文法なのか
どうかは知りません。ご存知の方,フォローして下さると助かります。)
009589
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
009689
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
0097デフォルトの名無しさん
2005/04/20(水) 19:28:17009889
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 以降なら
こちらのほうがすっきりして良いかもしれません。
009989
2005/04/20(水) 19:41:47僕も最初そう思ったんですが,ついさっき,
「commonで定義した変数を文字型に変換してファイル名に使いたい」という例を見つけました。
http://okweb.jp/kotaeru.php3?q=797367
>>91さんには,その課題の出された背景を教えてほしいです。
どんな使われ方をするのか興味があります (^ ^)
010089
2005/04/20(水) 20:11:57> ただし,他のどんな Fortranコンパイラでも動く普遍的な Fortran文法なのか
> どうかは知りません。ご存知の方,フォローして下さると助かります。
‥‥に対する自己レス (うざくてすみません)。
WRITE文とREAD文の装置番号のところに文字変数を置くやり方は,
培風館から出版されている「Fortran90プログラミング」の
著者・冨田博之先生の同名サイトの中の
http://www.ip.media.kyoto-u.ac.jp/htomita/sec7.html#7.2.
で,「内部ファイルの方法」として紹介されていました。
↓
(装置番号が)文字変数:プログラム中で使われている文字変数に読み書きできる。
「内部ファイルの方法」といい,必ず書式を指定すること。
0101ega
2005/04/20(水) 20:32:26サンクスです。助かりました。課題は、fortranを覚えるために出された数問のなかにありました。
何に使うかはわからないのですが、私がc言語を知っているという背景を配慮して、
cとfortranを関連付けるためなのかとも思いました。私自身もまだよくプログラムに関しては
よく理解してないのでわかりませんが、研究とかにはまず使わないと思います。
本当になんでこんな変な問題がでたんでしょうね。
とにかくありがとうございました。
010289
2005/04/20(水) 21:15:51いえいえ,お役に立てたようで何よりです。
こちらこそ,今まで知らなかった WRITE 文と READ 文の使い方が判って勉強になりました。
僕は Fortran と VB がメインなので C のことはよく判らないのですが,
VB なら Str 関数で一発だから,Fortran にも似たのがあるんだろうと思って
軽い気持ちで調べ始めたら,これが見つからない見つからない (^ ^;
やっぱり Fortran は科学技術計算用の言語なんだなと改めて思いました(笑)
0103デフォルトの名無しさん
2005/04/20(水) 21:23:53全角で数字入れたらどうなるんだろう?
0104デフォルトの名無しさん
2005/04/20(水) 21:54:13WRITE(moji,100) seisuu
100 FORMAT(I5)
に行く前にすぐ前の
READ(*,*) seisuu
のところでエラーになるんじゃないの?
0105デフォルトの名無しさん
2005/04/20(水) 22:47:57そういや意外と今まで無かったんだな。C言語が好きだバージョンなら見たことあるが。
ところでF言語って初めて知ったが、拡張子は何なん?
0106デフォルトの名無しさん
2005/04/21(木) 10:01:30それ以前でもあるかどうかは知らない。
文字から数値への変換はたまに使った。
CSV読む時とか。
0107デフォルトの名無しさん
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では無理?
0108デフォルトの名無しさん
2005/04/24(日) 01:28:23cygwinは遅いと聞いたので不安になって・・・・
0109デフォルトの名無しさん
2005/04/24(日) 04:09:09>>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
0110デフォルトの名無しさん
2005/04/24(日) 04:13:47>>3 に 「フリー/無料評価版のコンパイラ」 一覧があったや。
0111108
2005/04/24(日) 13:44:59質問がわかりにくくてごめんなさい。
現在数値計算をしているんですがcygwinは
FORTRANコードをF2Cみたいなもので一度C言語に書き換えて
それをコンパイルするみたいなこと(よって遅い)を聞いたので、
無料の中でも早いもの。。はなんですか?という質問です。
ごめんなさい。
0112デフォルトの名無しさん
2005/04/24(日) 14:58:38PolyhedronのベンチマークではFTN77/95ともにg77より良好な結果が出ている。
OpenWatcomもほとんどの場合、g77よりも速いようだ。
実際にどの位速くなるかは自分の環境で試してみないとわからない。
#物によってはほとんど変わらない/かえって遅くなるということもなきにしもあらず。
とにかく速い物が欲しいのであれば財布と相談して商用の物を購入するか
Linuxを入れてIntel Fortranの非商用版を使う方がいい。
0113108
2005/04/24(日) 16:47:27ありがとうございます。
FTN95入れてみます。
0114デフォルトの名無しさん
2005/04/24(日) 21:29:34すみません,Linux版 Intel Fortran の非商用版(無期限フリー?)はどこで入手できるのでしょうか?
Intel(日本)とエクセルソフトのサイトを見ても情報が見つからなかったので‥‥。
0115デフォルトの名無しさん
2005/04/24(日) 22:26:34Free Non-Commercial Software Development Products for Linux
ttp://www.intel.com/software/products/noncom/index.htm
ここから登録とダウンロードが出来る
…はずなんだけど、今つながらない?
0117デフォルトの名無しさん
2005/04/25(月) 01:03:19コンパイル、実行したいのですが「ftn77(ftn95) 〜〜.f」
とうつだけでは〜.exeの実行ファイルができません。〜.obj
というファイルはできるようなのですが。どのようにしたら
コマンドプロンプト上でコンパイル・実行できるのかどなたか
教えていただけますか?
0118デフォルトの名無しさん
2005/04/25(月) 02:24:19ググッてみたところ,FTN77 についてなら,
ttp://www28.tok2.com/home/kasayan86/fortran/fortran.htm
の ページ中ほどの 『2 Salford FTN77』 で簡潔に説明されていました。
0119デフォルトの名無しさん
2005/04/25(月) 02:49:21この方法でftn77のみでなくftn95に関しても実行ファイルを
作成してプログラムをまわすことができました。
問題も解決して気持ち良く寝れそうです。大変ありがとうございました。
0120118
2005/04/25(月) 03:06:29FTN95 については先ほど 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
その他,コンパイルに関係しそうなヘルプを検索して,一読されることを強くお薦めします。
0121117
2005/04/25(月) 23:57:36確かにftn95 〜〜.f /link とすると直接実行ファイルが生成されました。
まだ、プログラムを始めたばかりでまだまだ分からないことだらけで。。。
ご丁寧に説明して頂きありがとうございました。
ヘルプを一読してみたいと思います。
0122sage
2005/04/27(水) 19:42:23INTEGER :: 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です。
0123デフォルトの名無しさん
2005/04/27(水) 22:13:24-NaNが入ってるともかぎらんしね。
0124デフォルトの名無しさん
2005/04/27(水) 22:39:33write文の引数に「err=行番号orラベル」を追加して、
そこでエラー処理(今の場合は空行出力)。
0125デフォルトの名無しさん
2005/04/28(木) 16:53:33INTEGER,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
コンパイラの未定義チェックの多くは、へんてこな値を未定義に予約して
それを参照したりすると、警告を出す仕組み。上記のように、自前でやってもいい。
0126デフォルトの名無しさん
2005/04/28(木) 21:33:320127122
2005/04/29(金) 08:59:580128デフォルトの名無しさん
2005/04/29(金) 15:28:210129デフォルトの名無しさん
2005/05/03(火) 08:58:20あまり速くならない。
最新のAMD64ならよいかも。
それよか、gfortranかg95をつかったら。
gfortran(gcc 4.1)は、g77の1.5倍位速い。
0130デフォルトの名無しさん
2005/05/05(木) 10:22:43ひとつは、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
などばらつくし、桁が違う。
どっかおかしい。
0131デフォルトの名無しさん
2005/05/05(木) 22:03:47g95だと出来る.g95のサイトから,毎日のようにコンパイル
済みバイナリをダウンロードしている.
0132デフォルトの名無しさん
2005/05/07(土) 02:05:36CompaqコンパイラやIntelコンパイラの場合、
実数や整数を0で(勝手に)初期化してくれてるんですが
PGIやXL Fortranだと初期化してくれない場合があって
精度があいません。
もちろん初期化処理を入れてないのが悪いっちゃあ悪いんですが、
このようなコンパイラの細かい仕様についての情報がある
サイトご存じの方おりましたら教えてください。
ヨロシクお願いします。
0133デフォルトの名無しさん
2005/05/08(日) 08:56:485月1日版のgcc-4.1のgfortranでは、namelistのバグは、なおっていた。
2つめの、配列のアクセス速度のほうは、まだなおっていない。
0134デフォルトの名無しさん
2005/05/08(日) 22:49:02初期化しないおまえが悪い。
Fortran90なら宣言文で初期化できるので、修正は簡単だよ。
integer :: i=0, j=0
とかね。
0135デフォルトの名無しさん
2005/05/08(日) 23:00:00>精度があいません。
それは変数初期化ではなく、
使用する浮動小数点フォーマットとか、ライブラリの違い
に起因するものだと思った。
0136デフォルトの名無しさん
2005/05/10(火) 06:43:300137デフォルトの名無しさん
2005/05/11(水) 06:37:42入門ということで、
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
非常に良いが、廃刊なのか?
0138デフォルトの名無しさん
2005/05/11(水) 17:56:03計算が途中でおかしくなりデータが NaN になった場合,プログラムが終了するようにしたいのですが、良い方法はないでしょうか?
データの上限下限を設定し, その値からはずれた場合に止まるようにプログラムを書き直すことも考えましたが、
NaNが現れた場合に強制終了するための、もっと簡単な方法がありましたら教えていただけると助かります。
よろしくおねがいします(ノД`)
0139デフォルトの名無しさん
2005/05/11(水) 18:42:38コンパイルオプションで一発。
どういうオプションかは、コンパイラのマニュアルに書いてある。
0140138
2005/05/11(水) 19:08:10-fpe0 で良いのでしょうか
最適化の後ろにオプションをつけてみたのですが、何かうまくいかなくて
すみません、よく分かってませんで・゚・(ノД`)・゚・。
0141138
2005/05/11(水) 20:17:59-qflttrap で終了させることができることまでわかったのですが、
最適化と同時に使った場合、0/0では終了するのですが、1/0で素通りしてしまいます。
最適化と同時に使う場合、どうすればよいのでしょうか。
なんども申し訳ありませんがよろしくお願いします(⊃д⊂)
0142デフォルトの名無しさん
2005/05/11(水) 20:22:561/0はNaNじゃなくて、Infじゃないのかな?
っていうか、もまえがどこのコンパイラ使ってるかわからんし、
俺の家に、お前が使っているコンパイラのマニュアルがあるわけじゃない。
がんばって、マニュアル読んでくれ。
0143デフォルトの名無しさん
2005/05/11(水) 20:35:23つ IF (ISNAN(x)) STOP
0144138
2005/05/11(水) 21:03:38がんばって読んでみてます・゚・(ノД`)・゚・。
コンパイルオプションでできることがわかっただけで大収穫です。
ありがとーー
>>143
それをやると、すべての変数に対して全部書いていかないといけなくなるので・゚・(ノД`)・゚・。
0145デフォルトの名無しさん
2005/05/12(木) 13:23:28intel Visual Fortran ver.8をインストール後
ハロープロジェクトで試そうとしたのですが、
以下のようなメッセージが出て終了してしまいます。
誰か詳しい人お願いします。
-out:hello.exe
-subsystem:console
-entry:mainCRTStartup
hello.obj
LINK : final error LNK1104: コンパイラは、ファイル'ifconsol.lib'を開くことができません。
LNK1104というのはどうもVisual C++のiostream関連のエラーであるらしいのですが、よく判りません…
0146デフォルトの名無しさん
2005/05/12(木) 13:24:07PROGRAM HELLO
INTEGER I
DO I=1,3
WRITE (*,*) 'HELLO WORLD!'
END DO
END PROGRAM
0147デフォルトの名無しさん
2005/05/12(木) 18:16:19LNK1104とは単にライブラリファイルが開けないと
VCが言っているだけ。ライブラリのパスが通っていない
とかVCとFortranのバージョンが違うとか。
0148デフォルトの名無しさん
2005/05/13(金) 21:44:38つ 「インストールと入門」 ガイド 3-8〜3-9
0149デフォルトの名無しさん
2005/05/19(木) 08:24:510150デフォルトの名無しさん
2005/05/19(木) 08:29:07興味本位の質問ですが、貴方の職業(ご身分)もあわせて教えていただ
けるとうれしいです。
1)いま仮に何かの物理現象を扱っている1000行ぐらいのフォートラン
プログラムを「ホイ」と渡されたとき、このプログラムの中で実際
何がどういう風に処理されているか、読み解き、必要に応じて
中身をいじれるくらいになるまで、どのくらいの時間がかかりますか?
数時間?数日?数週間?数ヶ月?永遠に無理?
2)上記の作業を効率よくするのにどのようなツールを使っておられ
ますか?例えば、印刷したものをじっくり見るとか、テキストエディタ
で画面を見ながらとか、デバッガーみたいなのとか、その他いい方法が
あったら教えてください。
3)こういったプログラミングの業界は世界と比べて日本は進んでいる
と感じますか?
ちなみに自分は学生なのですが、ある程度フォートランの文法の基礎は
分かってるつもりです。でも、1000行の見ただけで、もうついてけない、
と思ってしまう根性なしで最近落ち込み気味です。
0151デフォルトの名無しさん
2005/05/19(木) 08:39:180152デフォルトの名無しさん
2005/05/19(木) 08:40:03どこかによい解説はないでしょうか?
0153デフォルトの名無しさん
2005/05/19(木) 08:40:530154デフォルトの名無しさん
2005/05/19(木) 08:43:200155デフォルトの名無しさん
2005/05/19(木) 12:59:39download FTN77 Personal Editionをクリックしても
名前やメールアドレス,住所などを入力するフォームが表示されないんですが
どうすればいいんでしょうか?
0156デフォルトの名無しさん
2005/05/19(木) 13:28:32http://www.polyhedron.co.uk/salford/products/ftn77_personal/
0157デフォルトの名無しさん
2005/05/19(木) 23:09:27ありがとうございます!
0158デフォルトの名無しさん
2005/05/20(金) 00:42:160159デフォルトの名無しさん
2005/05/20(金) 23:34:24ランタイムオプション -check をつけてコンパイルして、実行すると、
forrtl: warning (402): fort: (1): In call to [サブルーチン名], an array temporary was created for argument #1
という警告がでます。マニュアルによると、
『ルーチンが呼び出される前に、実引数が一時的な記憶域にコピーされる場合、ランタイム情報を含むメッセージを発行します。』
ということらしいのですが、何故引数がコピーされるのでしょうか?Fortranって call by reference (call by value の対義語)じゃないの?また、コピーされることの弊害として、どのような事が考えられるでしょうか?
まあ似たような立場のモンです。
あっしもいくつかプログラム渡されて数週間解読しましたでつ。
やったこととしては印刷してじっくり読むのは基本として
文法が分かるのなら
・似たような処理をしてるところがあったら吐き出す結果が違わないように
注意しつつ出来る限りサブルーチンや関数にまとめる。
まあ、これはあっしが渡されたプログラムは結構スパゲッティだったから通用したのかも
知れませんが…
あと、
・研究で使ったプログラムならその結果を元に論文が書かれてると思うのでその論文や
そこに上げられた参考文献も読んでみる。
というのも重要かも。あっしはこれで転送行列法なるものを知ったです。
……
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です。
0162デフォルトの名無しさん
2005/05/21(土) 01:19:45interface文書いてやらんと、整合配列は通らないんじゃないの?
0163デフォルトの名無しさん
2005/05/21(土) 01:27:26つ [ifort]
>>151,152
つ [google]
0164デフォルトの名無しさん
2005/05/21(土) 02:03:11>何故引数がコピーされるのでしょうか?
サブルーチン側が連続した配列を想定しているのに
連続していない(可能性がある)配列が渡されたから。
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 の対義語)じゃないの?
この場合、ちゃんと「一時的な配列の先頭アドレス」が渡されます。
>また、コピーされることの弊害として、どのような事が考えられるでしょうか?
配列のコピー・書き戻しによるオーバーヘッドの増加、使用メモリ量の増加等。
0165159
2005/05/21(土) 14:55:33わかりやすい例示をありがとうございます。
具体的には、以下のコードで困っています。
ちなみに、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
0166デフォルトの名無しさん
2005/05/21(土) 21:25:27のとこが
x(:) = '3'
と解釈され実行されたんじゃないの?
つまり、2*3の配列すべてに’3’が書き込まれたと。
character,dimension(:,:),pointer :: b
って明示的に書くと
character(len=1), dimension(:,:),pointer :: b
なんだけど、これでいいんですか?
0167デフォルトの名無しさん
2005/05/21(土) 22:59:33character型は特殊なんだよ。とても変な仕様になってる。
0168デフォルトの名無しさん
2005/05/22(日) 11:04:470169デフォルトの名無しさん
2005/05/22(日) 14:19:330170デフォルトの名無しさん
2005/05/22(日) 15:17:35つ ttp://garota.fismat.umich.mx/mn1/tutor_fort/index.html
0171デフォルトの名無しさん
2005/05/22(日) 17:24:34たしかに厳しい。何かいてあるのかまったくわからん。
0173デフォルトの名無しさん
2005/05/23(月) 17:55:43そりゃそうでしょ。
0174デフォルトの名無しさん
2005/05/24(火) 08:07:220175デフォルトの名無しさん
2005/05/24(火) 08:23:00-fast -arch host -O5
ただ、これが最速とは限らない。
0176デフォルトの名無しさん
2005/05/24(火) 08:26:450177デフォルトの名無しさん
2005/05/24(火) 09:58:46ただマニュアルには
-O4 and -O5 have the same effect.
ってあるので、実質-O4まで。
0178デフォルトの名無しさん
2005/05/24(火) 19:22:55[k@localhost k]$ gedit test.f
[k@localhost k]$ g77 test.f
となって何もなりません。
a.outは作成されるのですが、クリックしてもなにもなりません。
よろしくお願いしします。
0179デフォルトの名無しさん
2005/05/24(火) 19:39:460180デフォルトの名無しさん
2005/05/24(火) 19:45:18出来ました!
学校のだと ./ 必要ないので分かりませんでした。
ありがとうございました。
0181デフォルトの名無しさん
2005/05/25(水) 09:12:10おやおや。その学校のマシンって結構危ないのではなかろうか。
0182デフォルトの名無しさん
2005/05/25(水) 10:55:23しかし、、「クリック」なのかぁ、、。
0183デフォルトの名無しさん
2005/05/25(水) 20:33:06すいません!
知りませんw
0184デフォルトの名無しさん
2005/05/26(木) 12:00:370185デフォルトの名無しさん
2005/05/26(木) 19:06:370186デフォルトの名無しさん
2005/05/26(木) 19:49:52NaNでそんなアフォなことを?
0187185
2005/05/26(木) 20:01:44いや、つい出来心でつ。
NaNをフラッグにして、条件分岐できるかなっと。
フラッグを -1 とか 999999 とかにすると、
いわゆる2000年問題的な問題がおきるしね。
フラッグの変数(boolean)をわざわざ作るのも面倒だし。
0188デフォルトの名無しさん
2005/05/26(木) 21:06:24character型は腐ってるということで、良いですかね。
0189デフォルトの名無しさん
2005/05/27(金) 01:07:05Cだとchar型の配列と変数は整合性があるけど、fortranの場合はそれが無い。
つまり、
character(len=10) choge
と
character(len=1) choge(10)
は全く違う内部構造になってるんだよね。
0190デフォルトの名無しさん
2005/05/27(金) 15:37:300191デフォルトの名無しさん
2005/05/27(金) 15:38:050192デフォルトの名無しさん
2005/05/27(金) 16:39:01open, read, write を勉強しる。
>>191
できない。f90からできる。
0193デフォルトの名無しさん
2005/05/27(金) 23:45:07出来たっけな。あくまでHPの独自拡張だけど。
0194デフォルトの名無しさん
2005/05/28(土) 19:07:44FortranのCHARACTERは長さの属性を持っている。
「文字型」と言っても実質的には文字列型になる。
高級言語という観点からすれば整数型 charの配列を文字列とする
Cの方が手抜きである、とも言える。
0195デフォルトの名無しさん
2005/05/30(月) 17:18:15使用してコンパイルしたいです。
どのコンパイラを使ったらよいですか?
0196デフォルトの名無しさん
2005/05/30(月) 23:43:52cygwin
0197sage
2005/06/01(水) 18:42:46ディレクトリを作成するにはどうしたらよいのでしょうか。
どなたかお教えくだされたまえ。
0198デフォルトの名無しさん
2005/06/01(水) 20:21:47call system('mkdir AAA')
0199デフォルトの名無しさん
2005/06/01(水) 20:26:180200デフォルトの名無しさん
2005/06/01(水) 21:04:20こんなツールでf90対応のソフトを知りませんか?
0201デフォルトの名無しさん
2005/06/02(木) 10:14:34ヘルプを参照したりググッてみたけどわかりませんでした。
使っているのは
Microsoft Developer Studio 97
Visual Fortran Professional Edition5.0A
というやつです。
0202デフォルトの名無しさん
2005/06/02(木) 15:42:060203197
2005/06/02(木) 17:56:170204デフォルトの名無しさん
2005/06/02(木) 22:30:20call systemを使わないやり方はありますか?
0205デフォルトの名無しさん
2005/06/03(金) 17:06:24LAPACK95を入れてテストしたらこんなエラーが出るんですけど
詳しい人おしえて
>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 にちゃんと存在するんですけど
0206デフォルトの名無しさん
2005/06/03(金) 20:55:43おそらくないと思うよ。
でも、たいがいのコンパイラで
call system('mkdir AAA')
または
ii=system('mkdir AAA')
のどちらかはサポートしてると思う(mkdirがない場合は知らんが)
0207デフォルトの名無しさん
2005/06/03(金) 23:22:27処理系依存のサブルーチンを使う。
Visual Fortran なら MAKEDIRQQ とか。
0208204
2005/06/03(金) 23:39:55どうもです。以前、中身の不明なディレクトリ内のファイルを全て読む
プログラムを作った時も、命令を見付けられなかったので仕方なく
call system("ls hoge/ > list")
open(io,file="list")
とかやっていました。lsが無いMS-DOSプロンプトだったら実行出来ない
ですね。
0209デフォルトの名無しさん
2005/06/04(土) 17:16:080210デフォルトの名無しさん
2005/06/04(土) 17:20:060211デフォルトの名無しさん
2005/06/10(金) 04:34:35基本は sh だろう。
0212デフォルトの名無しさん
2005/06/10(金) 22:54:19モジュールファイルのパスはライブラリとは別に指定します。
>g95 -Ic:\g95\lib sample01.f90 -llapack95
または
set G95_INCLUDE_PATH=c:\g95\lib
としてから
>g95 sample01.f90 -llapack95
0213デフォルトの名無しさん
2005/06/10(金) 23:08:21じゃあ、ディレクトリツリーを全て巡回しながらデータファイルを探し出し、それを読み込んでfortranで処理させるのshで作れよ。
0214デフォルトの名無しさん
2005/06/11(土) 10:29:31~/bin/getfilelist ~/dat > filelist.txt
~/bin/hoge filelist.txt
0215デフォルトの名無しさん
2005/06/11(土) 13:22:550216デフォルトの名無しさん
2005/06/11(土) 23:48:44例えばどんなスクリプトになるか
見せてちょ。
0217デフォルトの名無しさん
2005/06/11(土) 23:50:39211が言っているのはshのみを使うというよりは
sh+一般的にどこでも使えそうなコマンド(ls等)で作るという意味では。
0218デフォルトの名無しさん
2005/06/11(土) 23:55:23つまり、sh自体にディレクトリ巡回機能が付いてるのかどうかなんですが
0219デフォルトの名無しさん
2005/06/12(日) 00:42:03ものだと思うんだが。
ようは目的に合わせて自分の環境で使える道具を選択すればそれで良いんだよ。
0220デフォルトの名無しさん
2005/06/12(日) 00:46:55Fortran単体では柔軟な処理は不可能
ということです
0221デフォルトの名無しさん
2005/06/12(日) 01:06:28Fortranに限らず何でもかんでも単一の言語でやろうと余計な策を弄するのは本末転倒だし。
0222デフォルトの名無しさん
2005/06/12(日) 12:51:350223デフォルトの名無しさん
2005/06/12(日) 15:52:160224デフォルトの名無しさん
2005/06/12(日) 18:00:190225デフォルトの名無しさん
2005/06/12(日) 22:17:590226デフォルトの名無しさん
2005/06/12(日) 22:21:110227デフォルトの名無しさん
2005/06/12(日) 22:26:180228デフォルトの名無しさん
2005/06/12(日) 22:30:190229デフォルトの名無しさん
2005/06/12(日) 22:57:280230デフォルトの名無しさん
2005/06/12(日) 23:09:500231デフォルトの名無しさん
2005/06/12(日) 23:41:470232デフォルトの名無しさん
2005/06/13(月) 01:48:110233デフォルトの名無しさん
2005/06/13(月) 04:35:50だな。
ポータビリティーのことも考えると、
なるべく使いそうな計算環境にありふれた言語を使うことかな?
以前、Cで書いたコードをFortranからリンクしたら、
共同研究者から怒られた。Cが読めないんだって(笑)
そいうのは、例外的事例ってことで。
0234デフォルトの名無しさん
2005/06/13(月) 05:52:32事前にルールを決めとかないと…
0235デフォルトの名無しさん
2005/06/14(火) 02:20:33C言語はコンソールアプリケーション程度、しかもあまりできない。
Basicはアプリケーション開発をしばらくやってたけど理解できてるのかどうかわからなくてやめた。
何故やりたいのか
ちょいと興味があった。さわり程度に使ってみたい。
後はMs−Dosのシンプルな画面に惚れている。
0236デフォルトの名無しさん
2005/06/14(火) 11:08:18無謀じゃないよ。古臭い手続き型言語だから、本やWebでいくつか例題やればすぐ習得できる。
でも、あんまり面白い言語じゃないし、エレガントでもない。
0237デフォルトの名無しさん
2005/06/14(火) 20:29:50のでしょうか?ほぼ初心者です。
0238デフォルトの名無しさん
2005/06/14(火) 20:38:390239237
2005/06/14(火) 22:42:450240デフォルトの名無しさん
2005/06/14(火) 22:52:390241デフォルトの名無しさん
2005/06/14(火) 23:14:27ttp://www.intel.com/software/products/compilers/flin/flinux.htm
ttp://www.intel.com/software/products/compilers/fwin/fwindows.htm
0242デフォルトの名無しさん
2005/06/14(火) 23:36:200243デフォルトの名無しさん
2005/06/15(水) 03:08:56大学の卒研でFortran(今のところ77で十分)が必要になったんですが、インストールの段階で早くもつまづき、どうにも前へ進めません
gccが何のことかすらよくわかりません
Linuxユーザの方HELP ME
0244デフォルトの名無しさん
2005/06/15(水) 03:29:23いいと思うよ。
0245デフォルトの名無しさん
2005/06/15(水) 03:33:48つ http://www.google.co.jp/search?hl=ja&q=g77+linux&lr=lang_ja
0246デフォルトの名無しさん
2005/06/15(水) 19:19:23ヒロシです。
9.0 のリリースの件,ダイレクト電子メールで勤務中に知ったとです。
3月に 8.1 を買ったばかりだったので,ちかっぱショックだったとです。
ヒロシです‥‥
安値でアップグレードできるんだろうか?
今まではどうだったか,ご存じのかた教えて下さい。
0247デフォルトの名無しさん
2005/06/15(水) 20:08:44インテルにユーザー登録すれば、購入後1年間は無償で最新版をダウンロード出来ます。
2年目以降は保守ライセンス契約の更新(有償、新規価格の約半分)という形で
このサポートサービスを継続していくことが出来ます。
ttp://www.xlsoft.com/jp/products/intel/register.html
ttp://www.xlsoft.com/jp/products/intel/support/index.html
0248デフォルトの名無しさん
2005/06/15(水) 20:29:47あっ Σ( ̄□ ̄ ;
そういえばそうでした! そのことをすっかり忘れていました。
情報ありがとうございました。大感謝 m(_ _)m"
0249デフォルトの名無しさん
2005/06/16(木) 01:37:06exeでしか存在していない外部ソフトです。
自分で作ったプログラムならソースがあるから、include出来ました。
ソースが無くても可能なのでしょうか?
0250デフォルトの名無しさん
2005/06/16(木) 01:40:35dllをリンクとかで出来るでしょ
0251249
2005/06/16(木) 02:00:08返信ありがとうございます。でも、その方法がわかりません。
状況としては、
A(自作Fortranプログラム)とB(外部)があって、
Aで計算した結果を用いて、Bで計算をする。そしてBでの結果をまたAに返して計算。
Aは起動させたまま、ということを考えています。
dllはどうやればリンク出来るのか教えていただけますか?
0252デフォルトの名無しさん
2005/06/16(木) 08:34:24>Aで計算した結果を用いて、Bで計算をする。そしてBでの結果をまたAに返して計算。
>Aは起動させたまま、ということを考えています。
大抵の処理系では外部コマンドを起動するためのサブルーチンが用意されているので
それを使えば良い。
0253251
2005/06/16(木) 18:35:50ごめんなさい。VF6.6でオンラインヘルプとか見たのですが、わかりません。
普通のサブルーチンみたいに、
call (B.exe)
は無理ですよね?
どう記述するのですか?またコンパイル時に何かやるのですか?
0254デフォルトの名無しさん
2005/06/16(木) 19:41:51program 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」を参照のこと。
0255デフォルトの名無しさん
2005/06/18(土) 05:25:02real x
integer l
do=1,5
call rand(x)
write(*,*) x
enddo
end
とすると、サブルーチンの使い方がおかしい!みたいなことを言われてしまいます。
よろしくお願いします!
0256デフォルトの名無しさん
2005/06/18(土) 05:45:06real x
integer l
call srand(1234)
do=1,5
call rand(x)
write(*,*) x
enddo
end
こんな感じであってますよね?
失礼しました
0257デフォルトの名無しさん
2005/06/18(土) 05:51:50real x
integer l
call srand(1234)
do=1,5
x= rand()
write(*,*) x
enddo
end
とするとできるのですが、普通のサブルーチンと扱いが違うのですかね?
あたふたしてすみません。
0258235
2005/06/18(土) 10:31:23このコンパイルの瞬間がC言語でも味わったけど、好きだ。
無機質にDos画面で表示されている瞬間なぜか技術者気分だ。
コード自体は入門サイトからのだからそんな難しいものではない。
だけどいつかは大学の言語解析ソフトくらいはつくれるようになりたい。
・・・というかプログラムか。
なんか英語辞書が組み込まれててテキストの中に入っている文書から英単語を読み出して、それの個数を読み出すソフト。
そしたらメモ帳に出力させてた。
一定のスペースをつけて読み出してるからエクセルでも処理可能。
それくらいは作ってみたい。
ただそのソフト、日本語はサポートされてないからひとつの文書にある文字ベースのエントロピーが求められん・・。
日本語入れた瞬間バグ起こしたもんで教授から大目玉とはこれいかに・・。
0259デフォルトの名無しさん
2005/06/18(土) 11:39:36do=1,5
のとこじゃない?
0260デフォルトの名無しさん
2005/06/21(火) 08:44:06もし分かる方いらっしゃったら確認お願いします。
以下コード
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
0261デフォルトの名無しさん
2005/06/21(火) 12:00:40関数が持ってるMという変数の値はSAVE宣言されてるから、関数から抜けても値が保存される。
呼び出されるごとに関数が返す値は違う。IF文は乱数発生アルゴリズムを理解すれば意味がわかる。
0262デフォルトの名無しさん
2005/06/22(水) 00:33:44・DATA 文による初期化は、プログラムの実行前(?)に1度しか実行されない
・SAVE 文があるので、関数内の変数はすべて static
(例外はあるが、FORTRANのローカル変数はSAVEがあろうが無かろうが
すべて static と考えたほうがよい)
0263デフォルトの名無しさん
2005/06/22(水) 16:09:12> すべて static と考えたほうがよい)
>
え−っ! すごい昔の話じゃないの?
0264デフォルトの名無しさん
2005/06/22(水) 17:32:08お願いします。
0265デフォルトの名無しさん
2005/06/22(水) 18:01:09OSやコンパイラの種類を教えてくれないと分らん。
0266デフォルトの名無しさん
2005/06/22(水) 18:55:480267デフォルトの名無しさん
2005/06/22(水) 18:58:080268デフォルトの名無しさん
2005/06/22(水) 19:04:57ウィンドウズです。
コンパイラは77だと思います。
0269デフォルトの名無しさん
2005/06/22(水) 19:18:360270デフォルトの名無しさん
2005/06/22(水) 19:20:06これらの情報から考えられる原因:
お前のプログラムがカスだから
0271デフォルトの名無しさん
2005/06/22(水) 22:09:40実行時に出るものなのか。address errorというだけで自明の
ことなのだろうか。
0272デフォルトの名無しさん
2005/06/22(水) 22:19:24http://science3.2ch.net/test/read.cgi/sim/1042715803/476
476 名前:名無しさん@3周年[] 投稿日:2005/06/22(水) 17:26:14
fortran使って作ったプログラムがコンパイルできるんだが
実行するとaddress errorって出るあるよ
どうしてあるか?
0273デフォルトの名無しさん
2005/06/22(水) 22:42:32たしかに、保証はされてないですね。
そのための save 属性だし。
0274デフォルトの名無しさん
2005/06/22(水) 23:18:30>>262
ありがとうございました!!周りに知ってる人がいなくて困ってました。
m(_ _)m 重ね重ねお礼申し上げます。。
0275デフォルトの名無しさん
2005/06/26(日) 00:38:58Lapack をライブラリにして使用することってできるんでしょうか?
現在はcygwinでg77+Lapackっていう組み合わせで使ってますが、
もともとはC/C++使いだったんで、Fortran77が使いにくく感じて仕方ないです…。
0276デフォルトの名無しさん
2005/06/26(日) 00:50:380277275
2005/06/26(日) 01:24:54Intelのコンパイラは速いらしいですね。
Math Kernel Library なんていうありがたいものまで販売されてるし。
しかし、私の所属する研究室(私は大学院生です)では
行列演算をするのは自分だけだし、他の人はFortran77で満足してるみたいなので微妙です。
一人でFortran77派の先生を説得できそうにはないですね・・・。
0278デフォルトの名無しさん
2005/06/26(日) 03:04:44MinGW版のg95でBLAS/Lapack/Lapack95のコンパイルは一応エラーなしで通った。
(ライブラリのみ)
ただ、テストはしてないので正常に機能するかどうかまではわからん。
0279デフォルトの名無しさん
2005/06/26(日) 16:27:49Linux使えば?compilerもMKLも学生ならただで使えるよ。
0280275
2005/06/27(月) 13:13:06>>278
g95プロジェクトって遅々として進んでないような印象があるんですけど、
いつになったら完成するんでしょうね。
完成or完成間近で、バグがほとんどないようなら使いたいと思ってるんですが・・・。
>>279
MKLもタダでしたか!
これを機にLinuxとWinのデュアルブートにしちゃおうかな…。
0281デフォルトの名無しさん
2005/06/27(月) 16:29:20を見ると毎日のように更新されているね。
Linux上で動かしている手元のプログラムは、gfortran-4.0では
コンパイル出来なくて、g95では大丈夫。実行するとAlphaの
Compaq Fortranとほぼ同じ結果を返してくれる。Intel Fortran
でもコンパイル出来たけど、実行すると異常終了して、デバッグを
諦めた。
0282デフォルトの名無しさん
2005/06/30(木) 15:12:380283デフォルトの名無しさん
2005/06/30(木) 18:37:02IntelというかVC.NETで
6列目と73列目以降の色分けがしたいんだけど、
できるのかな・・
0284デフォルトの名無しさん
2005/06/30(木) 22:25:24固定フォーマット(*.for, *.f)ならVS.NETで桁の色分けしてくれてますが。
0285デフォルトの名無しさん
2005/07/02(土) 19:09:00コマンドラインでコンパイルしようとして「ftn95 test.f」のように入力してもEXEなどの実行ファイルが作成できないんですがこのやり方ってなんかまずいのでしょうか?
なんか画面みると問題ないようなのですが肝心の実行ファイルがないんです。
しかも「/Lgo」というコンパイル成功時に一度実行させるコマンドラインオプションをつけるときちんとプログラムは実行されているんです。
なんかものすごく初歩的な質問のような気がするのですが、調べても逆に初歩過ぎるのか解決方法が見つかりません。
すみませんが解決方法を教えてください。お願いします。
0286デフォルトの名無しさん
2005/07/02(土) 19:14:07/LINK オプションは試した?
0287285
2005/07/02(土) 19:20:18解決しました。ありがとうございます。
意外と簡単なところに限って躓くものですね…。
いままでunixで使っていてそのコンパイラーがオプション無しで実行ファイルa.outを作ってくれてたので盲点でした。
0288デフォルトの名無しさん
2005/07/02(土) 23:01:280289デフォルトの名無しさん
2005/07/02(土) 23:12:03再現出来る最小限のソース
0290デフォルトの名無しさん
2005/07/03(日) 19:11:410291デフォルトの名無しさん
2005/07/03(日) 19:36:35>>6 の C2F
0292デフォルトの名無しさん
2005/07/05(火) 00:18:41「ftn95 "main.f90" "sub.f90" /link」
と打ったら、
more than one source file specified
1 error [main.f90] compilation failed
とかいうエラーメッセージが出たんですが、
複数のファイルに分かれた場合のコンパイル法ってこれじゃまずいんですか?
とりあえず、Salford以外じゃ問題ないんで、ファイル自体には問題なくて
単純にSalfordの操作ミスのようなのですが。
0293デフォルトの名無しさん
2005/07/05(火) 01:34:44個別にコンパイルして最後にリンク
ftn95 main.f90
ftn95 sub.f90
slink main.obj sub.obj -FILE:prog.exe
面倒くさかったら mk32やバッチファイルで処理。
0294デフォルトの名無しさん
2005/07/05(火) 18:46:46(「中断しました。」とでます)
どなたかよろしくおねがいします
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
0295デフォルトの名無しさん
2005/07/05(火) 18:55:31ヒントなどでもうれしいです。
ttp://lcofao.hp.infoseek.co.jp/Output.pdf
0296デフォルトの名無しさん
2005/07/05(火) 20:00:53見た目間違ってなさそう。
それだけ短いプログラムだったら
計算過程を全部writeで出力したら?
変数の計算式やreadの式の直後に全部writeで
write(*,*)"S=",S
みたいに出力すればいいんじゃん?
0297デフォルトの名無しさん
2005/07/05(火) 21:39:11返信ありがとうございます。
大学でしかフォートランできない状態なのでまた明日確認してみます
ひょっとしたらOPEN対称ファイルがダメなのかもしれないですよね。
別テキストで数字だけを羅列していったのですが。。。
↓みたく。
0,10.5
125,8.2
307,7.5
420
以下同様
0298デフォルトの名無しさん
2005/07/05(火) 23:59:25READ(1,*,END=200)U,V
.
.
.
100 CONTINUE
200 CONTINUE
0300デフォルトの名無しさん
2005/07/06(水) 01:14:31返信頂きありがとうございます。
READ(1,END=200)ですよね?
明日さっそく試してみたいと思いますが、見てみた感じ
READ文の中にこのような命令が入っているのは初めてで、
本やウェブでいろいろ見てみたのですが、どういう処理をしているのかよくわかりません。
あるところで、READ文とCLOSE文の間にWRITE文があるとうまくいかないことがある。とあったのですが、
それと関係あるのでしょうか?
0301デフォルトの名無しさん
2005/07/06(水) 01:54:07ttp://globe.nagaokaut.ac.jp/~kumakura/cecp/b3_1/fortran/io.shtml
ttp://globe.nagaokaut.ac.jp/~kumakura/cecp/b3_1/fortran/
0302300
2005/07/06(水) 19:46:30今日学校でやってみたところ、解決しました。
0303デフォルトの名無しさん
2005/07/06(水) 20:25:41>>298の方法で実行時エラーが出なくなったと言うことは
データの個数が足りないか、正しく読み込まれていない
可能性があるのでは?
0304300
2005/07/07(木) 00:19:37実はOPEN(1,FILE='701')
の部分ですが、保存していたのが701.TXTだったので、
それがアボートの原因だったのかも知れません。
そこを変更して、教えていただいたやり方でやっても、元の形でやっても
うまくいきました。
0305デフォルトの名無しさん
2005/07/07(木) 20:15:29自分でなんとか書いてみたんですが、合ってるかどうか見てもらえますか?
本当ならこれを学校のFortranでやってみて、確かめて、gnuplotでグラフ。
とまでやりたかったんですが、学校のが使えませんでした。(家も使えません。)
どなたか数値計算していただけない・・ですよね。。
もし計算結果がでたらエクセルでグラフを書けばなんとかできるかなと思っているんですが、
↓こんなんです
0306デフォルトの名無しさん
2005/07/07(木) 20:16:11implicit 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
0307だめだめやがな
2005/07/07(木) 20:46:56[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
0308305
2005/07/07(木) 20:52:11>>307さんありがとうございますw
なおそなおそ(ソソクサ..
0309305
2005/07/07(木) 21:08:330310デフォルトの名無しさん
2005/07/07(木) 21:12:54つ >>3
0311デフォルトの名無しさん
2005/07/09(土) 19:31:32どうしてですか?
0312デフォルトの名無しさん
2005/07/09(土) 19:46:12IMPLICIT REAL*8(X,Y)
REAL*8 FUNCTION FUNC(X,Y)
FUNC=SIN(X)+COS(X)
RETURN
END
0313デフォルトの名無しさん
2005/07/09(土) 20:52:00つ ttp://maya.phys.kyushu-u.ac.jp/~knomura/education/numerical/text4/node1.html
>>312
つ ttp://www.g.dendai.ac.jp/lecture/fortran/
0314デフォルトの名無しさん
2005/07/09(土) 23:37:06ありがとうございましたが、
REAL*8 FUNCTION FUNC(X,Y)
IMPLICIT REAL*8(X,Y)
FUNC=SIN(X)+COS(X)
RETURN
END
となるんですね?
てか関数の場合サブルーチンいいませんね。
0315デフォルトの名無しさん
2005/07/10(日) 11:50:04ケタ溢れはおもに掛け算で発生するが、加減や割り算で発生することもある。→○
整数の加減ではケタ溢れが起こらない限りは正しい結果である。→○
ですよね?
0316デフォルトの名無しさん
2005/07/10(日) 16:05:550317デフォルトの名無しさん
2005/07/11(月) 22:25:32といったプログラムを作ってみましたが,エラーがでてしまいます.
エラーを見たのですが,どうしてエラーなのかいまいちわかりません.
使用しているコンパイラはvisualfortranです.どうしてエラーが出るのかわかる方,回答よろしくお願いします.
0318317
2005/07/11(月) 22:26:17implicit 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
0319317
2005/07/11(月) 22:26:47function 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
0320317
2005/07/11(月) 22:27:19C:\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)
0321デフォルトの名無しさん
2005/07/11(月) 23:05:02・・・エラー見たら英語分からなくても、変数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の何がおかしいか考えてみて。
頑張れ!
0322317
2005/07/11(月) 23:11:11ありがとうございます.
確かに変数xとyに問題があることはエラーからわかるのですが,
配列や型は宣言しているのに,なぜエラーなんだろうと思ってしまいまして・・・
もう少し粘って考えてみます.
0323デフォルトの名無しさん
2005/07/12(火) 01:00:36そういう疑問だったのか。
じゃあ function f(x,y) の2つの引数x,yを、 function f(a,b) のように別の文字a,bを使って
書き換えてみればエラーの原因が分かるかもね。
ちなみにこれ、iを1000まで回してるけど、i=20程度でy(i)が発散するよ。
0324317
2005/07/12(火) 01:45:33ありがとうございます.
色々チャレンジしましたがだめでした・・・
このような簡単なプログラムが組めないようでは
まだまだ勉強不足ですね.
また明日から頑張ります.
0325デフォルトの名無しさん
2005/07/12(火) 20:01:17あってますか?
過去問にあったので教えてください。
0326デフォルトの名無しさん
2005/07/12(火) 20:46:54○×はあってるが、1問目の理由が違う。
1問目は「丸め誤差」、桁落ちではない。
tp://e-words.jp/w/E6A181E890BDE381A1.html
0327デフォルトの名無しさん
2005/07/12(火) 21:04:57ありがとうございました。
ややこしいですが、大分とわかってきた気がします。
0328デフォルトの名無しさん
2005/07/14(木) 12:11:52保存対象のファイルをこの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
0329デフォルトの名無しさん
2005/07/14(木) 18:31:04作りたいのですが、どこかにプログラム例などありませんか?
ありましたら、教えてください。
0330デフォルトの名無しさん
2005/07/14(木) 19:23:44LAPACK ( http://www.netlib.org/ ) は?
固有値問題の数値計算について研究してるんじゃなかったら、
自分で作ると言わずそのまま使った方がいいよ。
作るの面倒だし、作っても確実にLAPACKの方が速いし。
0331デフォルトの名無しさん
2005/07/14(木) 19:26:19Fortranには整数型や実数型の変数を文字型変数に変換する関数はありません(多分)。
代わりに「内部ファイルの方法」というのを使います。
こういうのです
↓
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.
0332デフォルトの名無しさん
2005/07/14(木) 20:49:26ARPACKとか使えば?
0333デフォルトの名無しさん
2005/07/14(木) 22:17:32char()って、「文字コード→文字(≠文字列)」な変換関数じゃない?
ASCIIコードなら、100→「d」。
0334デフォルトの名無しさん
2005/07/14(木) 22:59:43内部ファイルを使うなら >>328のプログラムで
> name = (char(i))//'.dat'
の部分を
WRITE(name,'(I3,A)') i, '.dat'
または
WRITE(name,'(I3,''.dat'')') i
とすればOK
0335デフォルトの名無しさん
2005/07/15(金) 12:44:20LAPACKをインストールするまでに時間を使ってしまいそうですが、やってみます。
0337デフォルトの名無しさん
2005/07/21(木) 01:23:08はないか教えて下さい。
テストがあるんで急ぎです
0338デフォルトの名無しさん
2005/07/21(木) 08:14:57宿題は自分でやろう。
これを見てゆっくり考えよう。
http://h18009.www1.hp.com/fortran/docs/lrm/dflrm.htm
0339デフォルトの名無しさん
2005/07/23(土) 09:16:56REAL*8 FUNCTION FUNC(X,Y)
IMPLICIT REAL*8(X,Y)
FUNC=SIN(X)+COS(X)
RETURN
END
よろしくおねがいします
0340デフォルトの名無しさん
2005/07/23(土) 12:39:430341デフォルトの名無しさん
2005/07/23(土) 19:49:44変数宣言使え。
0342デフォルトの名無しさん
2005/07/23(土) 21:15:160343age
2005/08/06(土) 18:51:340344デフォルトの名無しさん
2005/08/15(月) 13:44:47配列数を変えることによってプログラム実行速度はかわってくるのでしょうか?
6000>10秒
5800>5秒
5600>10秒
5400>4.8秒
もう何が何やらorz
環境はWindows pen4 メモリ1Gの環境です。
0345デフォルトの名無しさん
2005/08/15(月) 14:26:22配列各要素に操作をしているなら実行速度に正の相関関係が生じるのは当然ですが、
秒数を見るとそれに起因したものではなさそうですね
気になるのは「その秒数はどうやって/何を計ったか」なのですが。
マルチプロセスのOSで応答時間を測定する事はあまり意味がない ということをご存知か?
0346デフォルトの名無しさん
2005/08/15(月) 16:54:24繰り返し計算で一回の計算が終わるたびに値をDos窓に表示させているのですが
それを見ていても明らかに遅いのが判るので・・・・・。
0347デフォルトの名無しさん
2005/08/16(火) 02:02:370348デフォルトの名無しさん
2005/08/16(火) 04:38:49dtimeなので信用はできませんが
明らかに時間差があるため・・・謎ですね。
サブルーチンの時間計測してるのですがやはり一から書き直したほうが良さそうですねorz
解はまちがってないんだけどなぁー。
0349344
2005/08/16(火) 13:37:38サブルーチンのプログラムの中にある配列数を曖昧に今まで取ってたんですが
一番余分に配列組んでそうなところを少なくしてあげたら6000にしようが5100にしようが
4秒代で回るようになりましたorz
きちんとした原因がそこかは判らないのですがコンパイルの種類、f77,f90にしたりといろいろ
変化させた結果、それで安定したので・・・。
>>345、347 ありがとう。
0350デフォルトの名無しさん
2005/08/19(金) 15:39:490351デフォルトの名無しさん
2005/08/27(土) 14:40:29皆さん、宿題は終わりましたか?
0352デフォルトの名無しさん
2005/08/28(日) 00:17:27宿題っつうか学会発表のためのプログラム(fortran製)の
ぶん回し中ですが何か?
0353デフォルトの名無しさん
2005/08/29(月) 23:31:50何学会? 一寸興味あり (・∀・)
0354デフォルトの名無しさん
2005/08/29(月) 23:42:53学生向けだと無料になる Linux 用 Fortran コンパイラがあった気が
するんですが‥‥ありませんでしたっけ?
Intel だったかなと思ったのですが,9.0 のアカデミック価格は \46,725 (税込)でしたし‥‥
0355352
2005/08/30(火) 00:23:53応物
>354
>3
0356デフォルトの名無しさん
2005/09/03(土) 08:35:10プログラムといえば、関数電卓のBASICくらいしかやったこと無いので、
自分でそのプログラムを書き換えることは無理だと思います。
Fortran IVのプログラムが動くソフトって有りますか?
0357356
2005/09/03(土) 08:40:040358デフォルトの名無しさん
2005/09/03(土) 09:41:520359デフォルトの名無しさん
2005/09/03(土) 11:09:09>Fortran IVのプログラムが動くソフト
それは、通常コンパイラと呼ばれるソフトです。
私があなたなら、該当プラットフォーム(OS)上で動くFortranコンパイラを販売している会社を調べ、
その会社に問い合せる。
0360デフォルトの名無しさん
2005/09/06(火) 20:52:23read文を使う場合、読み込ませる変数を細かく設定しなければいけませんよね?
例えば、
"do i=1,10"
を読ませたかったら、
read(1,*)a1,a2となりますよね?
毎回ファイルの中身が変わるので、それは面倒なんですよ。
とにかく、そのままコピーしたいんですけど、いい手ありませんか?
0361デフォルトの名無しさん
2005/09/06(火) 20:56:52call system("cp hoge fuga")
0362デフォルトの名無しさん
2005/09/06(火) 23:06:16ファイルの中身をコピーしてから「何をしたい」のかを
示さないと、>>361のような恐らく望んでいない回答を
されて、再度質問をすることになりはしないか?
0363360
2005/09/07(水) 14:22:24申し訳ありませんでした。
ファイルに、新たな内容を追加したいということです。
A.datというファイルがあり、そのファイルの最下部にフォートランで計算
した値を追加したいのです。
ですから、新たなファイルをopen文で作成して、A.datファイル全体をコピーして
、そして追加内容をwrite文で書き込もうかと考えています。そのコピーの方法
を教えていただきたかったということです。
もし他にわかりやすい方法があれば、是非教えていただきたいです。
0364360
2005/09/07(水) 17:54:050365デフォルトの名無しさん
2005/09/07(水) 18:11:12単純に A.datに追加書き込みするだけで良いのなら
open(UNIT=1, FILE='A.dat', POSITION='APPEND')
:
write(1, *) hoge
:
close(UNIT=1)
0366デフォルトの名無しさん
2005/09/07(水) 21:01:12ttp://www.uopmu.ees.osakafu-u.ac.jp/~yabu/soft/fortran.html
12. 文字型変数に対する read
15. read 文実行時のエラー処理
でどうですか?
0367デフォルトの名無しさん
2005/09/07(水) 21:20:50別のファイル名で作成して、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)
0368デフォルトの名無しさん
2005/09/10(土) 01:23:52プログラムの途中で real::配列 としてもエラーになります。
どうすればよいですか?
0369デフォルトの名無しさん
2005/09/10(土) 02:05:280370デフォルトの名無しさん
2005/09/10(土) 14:34:18エスパー募集をやめる。
エラーと言っても様々なエラーがある訳で。
0371デフォルトの名無しさん
2005/09/14(水) 20:05:19work_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で、というのは無理なんです。
0372デフォルトの名無しさん
2005/09/14(水) 20:21:41内部WRITEで文字列を生成してsystemにわたせば?
0373371
2005/09/14(水) 20:52:12仰ってるのってこんな感じですか?
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 でもうまくいってません。
基本的な質問ですいません。。
0374デフォルトの名無しさん
2005/09/14(水) 23:27:39か
character*100 cbuf
cbuf = "mv memo ./"//ccc
call system(cbuf)
とかでいけるかな
自信はないけど、こんな感じでいけるんじゃね
0375371
2005/09/15(木) 00:07:02Thanks a lot !!
これで納期に間に合いそうです!w
m(__)m
0376デフォルトの名無しさん
2005/09/15(木) 00:48:33変数(配列になっているやつも)の引渡しの部分も書かれているやつで。
ネットでサンプルプログラムを探しているのですが、なかなか見つからなくて困っております。
0377デフォルトの名無しさん
2005/09/15(木) 01:40:16ttp://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/pg/pg18_05.htm
ttp://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/pg/pg08.htm
0378デフォルトの名無しさん
2005/09/16(金) 17:17:32行列演算と、データベース的な処理の両方が必要なのですが、fortranは行列に偏っているように思われます。
(科学技術分野では当然か)
0379デフォルトの名無しさん
2005/09/16(金) 19:36:47使用したことはないので目的に合うかどうか判りませんが
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
0380デフォルトの名無しさん
2005/09/22(木) 15:33:19それは使えません。自作するしかないかもしれません。
0381デフォルトの名無しさん
2005/09/25(日) 12:02:40自動で並列化してくれつという宣伝につられた。
確かにタスクマネージャーをみると2個とも計算しているっぽい。
しかし、COMPAQのCVF8でコンパイルしたものと比べて(これは1つのCPUが動いている)
全然変わらない。
試したのはCAVITY流れの非定常計算(自作)で、同じマシンで両者を比較。
PentiumD 820を残った少ない予算で購入したのに・・・。
これまで使っていたPentium4 560のほうが速い。意味がなかった。
FORTRAN77形式で書いたのがまずいのかな。
(でも並列化してくれているし)
0382デフォルトの名無しさん
2005/09/25(日) 14:19:03PenDを無駄にしたくないならOpenMPで並列化してみ。
たいして難しくないはず。
0383デフォルトの名無しさん
2005/09/25(日) 17:43:00自動並列化は全然役に立たない。多分、非常にシンプルなプログラムに限ってその効果が現れると思われ。
382の言うようにOpenMPで自分で並列化していくしかない。
0384デフォルトの名無しさん
2005/09/25(日) 19:54:51多分、並列化の技術の使いかたをイメージできてないんじゃない?
自動並列化は役に立たないんじゃなくて、上手く並列化されるようにプログラムを変える
数式を解きやすいように変形するのと一緒
0385デフォルトの名無しさん
2005/09/26(月) 00:43:42それでうまくいけば誰もOpenMPやpthread使わない。
数百行のソースなら簡単だけど。
0386381
2005/09/26(月) 09:40:25インテルのホームページを読むとこれまでのプログラムのままでも
多少の効果は期待できそうなことが書いてあったので。
自動並列化: インテルVisual Fortran コンパイラには、
ループを自動的にスレッド化する自動並列化機能が搭載されています。
このため、並列化によるマルチプロセッサ上でのアプリケーション・パフォーマンスの改善を
手軽に実現できます。自動並列化機能は安全に並列実行できるループを検出し、
これらのループに関してマルチスレッド・コードを自動的に生成するため、
イタレーションのパーティショニング、データの共有、スレッドのスケジューリング、
同期化といった低レベルの細かい作業をユーザが行わなくても並列化が可能となり、
マルチプロセッサ・システムやハイパー・スレッディング・テクノロジ対応システムの強力な
パフォーマンスを活かすことができます。並列実行ループのベクトル化機能や、
ソフトウェア・ベースのスペキュレーティブ・プリコンピュテーション新機能など、
ハイパー・スレッディング・テクノロジ対応インテルプロセッサでのパフォーマンスの
向上につながる最適化の改良が行われました。
それにしても一応デュアルで動いているのに効果が全くないのは
どういうこと?思ったほど高速化しなかったな、というのは
よくあることだけど、計算が振り分けられれば多少は高速化すると
思うのだが。
タスクマネージャーをみる限りでは2個ともフルに動いていそうなのだが。
0387デフォルトの名無しさん
2005/09/26(月) 13:01:56CPU占有率は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
0388デフォルトの名無しさん
2005/09/26(月) 13:20:29判断できないんじゃ?
0389381
2005/09/26(月) 14:08:23ただし、行列×ベクトルだとコンパイルした時点で並列化してくれない。
もっとも多い計算が行列×ベクトルなのに・・・。
たとえば、これだと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
0390デフォルトの名無しさん
2005/09/26(月) 14:41:03MKLに入ってるblasだったら並列化されてるから、それ使えばいいんじゃない?
0391デフォルトの名無しさん
2005/09/26(月) 19:31:31Winユーザでしょ?
てことはMKLも有償じゃぁ…
0392デフォルトの名無しさん
2005/09/26(月) 23:44:50って事はベクトルは行列にしてから計算しろってことじゃね?
0393381
2005/09/27(火) 00:05:57お察しの通りWindows版です。
Linuxは扱い方がよくわからず、いろいろ不便なので
(インストールしてネットワークの基本的な設定ができる程度)
軟派ですがWindowsを使っています。
>>392
B(5000,1)にしろということでしょうか?(単純すぎ?)
この方法では並列化しませんでした。
うまいアルゴリズムを考えなくては。
並列化とOpenMP勉強します。
皆様、アドバイスありがとうございました。
0394デフォルトの名無しさん
2005/09/27(火) 00:29:17なんとなくだがB(5000,5000)のB(x,x)だけ使えばいいんじゃね?
0395デフォルトの名無しさん
2005/09/27(火) 15:26:06自動並列化がそんなにバカなら使い物にならないな。
0396デフォルトの名無しさん
2005/09/29(木) 01:31:25module 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を使用しています.
よろしくお願いします.
0397デフォルトの名無しさん
2005/09/29(木) 20:37:20普通は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++ライクなカプセル化ですかね。
0398396
2005/09/29(木) 23:35:56ありがとうございました.
Fortran90で,とりあえず動くプログラムを作ることばかりを考えてやってきてたので,
一度プログラミング作法やFortran90の仕様などをきっちり勉強したいと思います.
0399デフォルトの名無しさん
2005/09/30(金) 00:45:16http://www.cs.rpi.edu/~szymansk/OOF90/F90_Objects.html
http://www.amath.washington.edu/~lf/software/CompCPP_F90SciOOP.html
も読んどいたらいいかもね。
0400デフォルトの名無しさん
2005/09/30(金) 03:57:35そういえば、Fortran2000だったか2005だったかで、OOP支援機能がなんか入るんじゃなかったっけ?
0401デフォルトの名無しさん
2005/10/01(土) 12:38:09module variables
real(8),dimension(:,:),allocatable :: x
integer :: i,j
CONTAINS
subroutine test()
use variables
implicit none
!配列xに対する操作・演算を行う
end subroutine
end module
とするのがこの場合の本来的な型。
0402デフォルトの名無しさん
2005/10/02(日) 10:32:07module variables
real(8),dimension(:,:),allocatable :: x
integer :: i,j
!
CONTAINS
subroutine test()
use variables
implicit none
!配列xに対する操作・演算を行う
end subroutine
!
end module
とするべし。
allocateに関しては問題なし。
0403デフォルトの名無しさん
2005/10/02(日) 11:20:50subroutine test() 内の use文は不要じゃない?
後、配列の大きさは size() で調べられるから
モジュール内の i, j は不要な気もするけど
そこら辺は好みの問題か。
0404デフォルトの名無しさん
2005/10/02(日) 11:47:080405デフォルトの名無しさん
2005/10/02(日) 18:27:28学生時代ずっとf77ばっかりで
会社に入ってようやくf90をやりました。
配列式、メモリの動的確保、do-enddoとか
便利なところは感じますが疑問もあります。
moduleってどんなメリットがあるのでしょう?
使い方も難しくて利点がよくわかりません。
0406デフォルトの名無しさん
2005/10/03(月) 14:12:09コードもきれいに書けるし。
0407デフォルトの名無しさん
2005/10/03(月) 23:05:56メリットとしては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
0408デフォルトの名無しさん
2005/10/04(火) 18:54:50開発環境はどこでダウンロードできますか?
探したんですが見当たらなくて 誰か教えてください。。。
0409405
2005/10/04(火) 21:26:05>>407
ありがとう。
理解したとは言えないけど、なんとなくわかった気がします。
学生時代、研究でドイツ人の書いたf90ソースを改良しなくてはならないのに
f77しか知らずに、moduleとかすごい嫌いになったんですよね、、。
勉強してみようかな、、。
0411デフォルトの名無しさん
2005/10/04(火) 21:40:360412デフォルトの名無しさん
2005/10/04(火) 21:55:130413デフォルトの名無しさん
2005/10/05(水) 00:20:57はい、これ↓。Hobbyistなら非商用に限り無料で使えるOpenVMS
ttp://www.openvmshobbyist.com/
AlphaかVAX用だけどね。
VAX互換で良ければIntel Fortranあたりでも使えば?
(一応、DEC→Compaq→HP→Intelの流れでVAX FORTRANがご先祖様だし)
0414デフォルトの名無しさん
2005/10/05(水) 00:23:190415デフォルトの名無しさん
2005/10/05(水) 00:53:36つ 【Microsoft Fortran PowerStation】
0416デフォルトの名無しさん
2005/10/05(水) 08:05:03ありがとうございます
助かりますっ
0417デフォルトの名無しさん
2005/10/05(水) 13:15:25なんで廃れたのかね?
0418デフォルトの名無しさん
2005/10/05(水) 20:48:450419デフォルトの名無しさん
2005/10/06(木) 00:43:280420デフォルトの名無しさん
2005/10/06(木) 22:53:300421デフォルトの名無しさん
2005/10/07(金) 21:05:19アップデートができないとありますが、インストールしたあとでアップデートを受けたい場合には
ネットに接続し、手動でオンライン認証を受ける必要があるんでしょうか?
0422デフォルトの名無しさん
2005/10/07(金) 21:49:310423デフォルトの名無しさん
2005/10/08(土) 00:39:21アップデート方法は基本的に
インテルのプレミアサポートから新しいバージョンを丸ごとダウンロードして
古いバージョンをアンインストール→新しいバージョンをインストール
プレミアサポートにログインするためには予め登録しておいたIDとパスワードが必要。
0424デフォルトの名無しさん
2005/10/09(日) 10:49:17>6のリンク先のリンク先は切れているし
c2f.zipでググってもリンク切ればっかりで見当たりませんでした
0425デフォルトの名無しさん
2005/10/09(日) 13:39:08ttp://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.
・・・(´Д`;)
0426デフォルトの名無しさん
2005/10/10(月) 00:57:00ありがとうございます
0427デフォルトの名無しさん
2005/10/10(月) 17:34:42その小数部を出力するにはどうすればいいんですか?
0428デフォルトの名無しさん
2005/10/10(月) 17:39:46その小数部を出力するにはどうすればいいんですか?
0429デフォルトの名無しさん
2005/10/10(月) 18:17:140430デフォルトの名無しさん
2005/10/10(月) 18:39:240431デフォルトの名無しさん
2005/10/10(月) 21:41:12どうすればよいでしょうか?
C言語ではヌル文字があって比較的簡単だったのですが,Fortranでは無いようなので…
0432デフォルトの名無しさん
2005/10/10(月) 21:56:150434デフォルトの名無しさん
2005/10/11(火) 00:37:49ありがとうございます。
お礼を言うのが遅くなってすいません…。
0435デフォルトの名無しさん
2005/10/13(木) 08:25:31の入門書としてお勧めの書籍があれば教えてください.
http://www.amazon.co.jp/exec/obidos/ASIN/4894713217/
一応これがいいかなって思っているんですが.
0436デフォルトの名無しさん
2005/10/13(木) 12:14:080437デフォルトの名無しさん
2005/10/13(木) 20:15:15俺もその本使ってる。
分かりやすくはないんだけど、本屋で立ち読みした他の本は
もっと分かりにくかったのでその本を買ったよ。
でも、ちょっとFortranに慣れてきたらその本より
ttp://www.rs.kagu.tus.ac.jp/yama/f90/f90-lang.html
の方がよっぽど役に立つよ。
0439デフォルトの名無しさん
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です。
よろしくお願いします。
0440デフォルトの名無しさん
2005/10/18(火) 15:49:49あるいはより高い精度になる分にも一向に構いません。
ただ、これよりも精度が劣ることがないようにしていただきたいのです。
0441デフォルトの名無しさん
2005/10/18(火) 17:39:45種別型パラメタがあってないのかも。
・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)"ってやつね。
0442439
2005/10/18(火) 18:27:56ありがとうございます。
下の方法にてコンパイルが成功いたしました。
現在実際に計算しています。
精度については結果待ちなので明日にならなければ分かりませんが、
いい結果が出ることを祈ってます。
0443439
2005/10/19(水) 12:05:12本当にありがとうございました。
0444ハーピィ
2005/10/20(木) 01:07:500445デフォルトの名無しさん
2005/10/22(土) 04:25:33何か対策無い?
0446デフォルトの名無しさん
2005/10/22(土) 11:35:33form='binary' のかわりに access='stream' を使うとか。
0447デフォルトの名無しさん
2005/10/22(土) 14:46:030448デフォルトの名無しさん
2005/10/22(土) 15:51:40ありがとー。
access='stream' で望んだ結果が得られました。
0449デフォルトの名無しさん
2005/10/24(月) 13:01:06http://www.nag-j.co.jp/FortranBuilder.htm
0450デフォルトの名無しさん
2005/10/28(金) 00:21:02Salford FTN95でコンパイルしたものと
g95でコンパイルしたexeのサイズがぜんぜん違うんです。(10倍ぐらい)
(30行くらいのものです)
Salford FTN95はいちいち最初にメッセージが出るんでコンパイラーを変えたいんですが
g95をこのまま使い続けてもいいんでしょうか。
0451デフォルトの名無しさん
2005/10/28(金) 00:26:13どっちかがスタティックリンクをしているから大きくなる?
0452450
2005/10/28(金) 00:47:24そうなんですか。気にしないでおきます。たいしたプログラムは組みませんし。
ありがとうございました。
ところで、gfortranとg95はどちらが優れているのでしょうか。
とにかく早く計算したいんです。
別にこの二つに限らないのでWinXPで動くフリーのFortran90コンパイラーを紹介してください。
0453451
2005/10/28(金) 00:52:20実行可能なプログラムを作りたいということと考えれば
g95でないかな。gfortranではコンパイル出来なかった
プログラムがg95では出来たことがある。
フリーのコンパイラの件は知らん。
0454デフォルトの名無しさん
2005/10/28(金) 12:06:54貧乏なら無償のIntel FortranをLinuxにインストール。
金があるなら、Windows版Intel Fortranを買え。アカデミック版なら大した金額じゃない。
お遊び程度なら、Linux上でgfortranかな。
0455デフォルトの名無しさん
2005/10/28(金) 16:17:00Linux上で、っていう要件を満たせるなら、遊びでも素直にIntel Fortran使ったほうが吉かと。
0456デフォルトの名無しさん
2005/10/28(金) 17:37:07coLinux上でIFC
0457デフォルトの名無しさん
2005/10/28(金) 17:53:22IFCってIntel Fortran のバージョン7までだよね?
8からはifort。7系列をダウンロード出来る場所を
見付けられなかったよ。premierサポートに登録して
いて8と9はダウンロード出来た。
0458デフォルトの名無しさん
2005/10/29(土) 00:48:178以降はifortって言わないといけないのか。
0459450
2005/10/29(土) 02:06:35LinuxのIntel製コンパイラーが優秀なのは知っているのですが、
なぜかインストールに失敗してしまいます。
Linuxに関してはかなり初心者なのでインストール方法があっているかも
自信はありません。
Vine Linux3.2はとっつきやすそうなので挑戦したいと考えてはいます。
LinuxになれたらIntelコンパイラーを入れてみようと思います。
0460デフォルトの名無しさん
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
0461デフォルトの名無しさん
2005/10/30(日) 19:50:530462デフォルトの名無しさん
2005/10/31(月) 18:50:35なんで90度のtanだけ特別扱いになるか分かってるか?
0463デフォルトの名無しさん
2005/11/01(火) 10:16:29>>460も自分で考えな。
プログラムを書くことからじゃなくて、アルゴリズムを先に考えるんだぞ。
0464デフォルトの名無しさん
2005/11/01(火) 19:35:49どんな感じになるの?
調べてもようわからんかった・・・
0465デフォルトの名無しさん
2005/11/02(水) 03:14:05intelのwindows版コンパイラはvisual fortran版しかないの?
linux経験がないので非商用版を使う前に評価版で性能とかを
win上で確かめたかったけど
0466デフォルトの名無しさん
2005/11/02(水) 20:33:02どういう意味?
Windows版でもコマンドライン環境で使えるよ。
0467465
2005/11/05(土) 01:12:52http://www.xlsoft.com/jp/products/intel/compilers/index.html
みたらwin版はvisual fortran ってかいてて
linux版はfortranとしか書いていないから
ちがうものかと思ってました。
なんかlinux版にもvisual fortranがあると思いこんでました
0468デフォルトの名無しさん
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でこの問題解決する方法ってありますか?
マニュアル読むにしてもキーワードもわからないので
何かアドバイス頂けたら、、と思います。
0469デフォルトの名無しさん
2005/11/10(木) 22:17:41いろいろと調べてみたところ、ヒューリンクスのプロフォートランが
良いかと思いました。
これを使っている人はいますか
http://www.hulinks.co.jp/software/pf/plplot.html
0470デフォルトの名無しさん
2005/11/10(木) 23:52:35Intel Visual Fortranでよくありますね。
エラーが出てプログラムが止まった時にDOS窓に戻ったら、
どこでエラーが出たかメッセージが書いてませんか?
サブルーチン名みたいなのと行番号みたいなのがあわせて書いてあると思うのですが。
それがないようなら、PAUSE文をたくさん挿入するなり、
「カーソルの行まで実行」で順に見ていくなりして、
様子を見るしかないと思います。
0471デフォルトの名無しさん
2005/11/11(金) 01:00:310472468
2005/11/12(土) 10:27:22>>471
レスありがとうございます。
機能的に無理なのですかね〜。
上位互換ということでCVFでできたことは全部できるかと予想していたのですが。
行番号などは確かにプロンプトに出ていますね。
それがループの中とかじゃなければ、その情報でも作業できるんですけどね〜。
0473デフォルトの名無しさん
2005/11/15(火) 16:46:43INTEGER MASKA
DATA MASKA/'377'0/
END
某プロフラムのソースで見かけたのですが、勉強不足なのか、このDATA行の意図することが分かりません。
MASKA
はINTEGERで、DATAにある
'377'
は「377というCHARACTER」を入れようとしているように読めるのですが…。
「377*0」でもなさそうですし、「3770」なら、そのまま書けばいいように思うのですが、どういった意味になるのでしょうか。
0474デフォルトの名無しさん
2005/11/15(火) 19:30:33自己レス
「'377'0」ではなく「'377'O」でした。
で、これは8進定数 (octal constant) というものでした。
gfortranでは「O"377"」と書いてやらないとコンパイルエラーを起こします。
0475デフォルトの名無しさん
2005/11/16(水) 10:13:46format文でデータを5個横に羅列し、
改行してまた5個、以後繰り返しというプログラムのはずなんですが、4個目で改行、
5個目がひとつ書いてあって改行、以後繰り返し、という感じになってしまいます。
format文なしでやっても一緒でした。
一行あたりの文字量の問題かとも思ったのですが・・
なにかヒントいただけたら幸いです。
0476デフォルトの名無しさん
2005/11/16(水) 18:15:57WRITE(*,*) 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つ分の書式を指定していることをチェックしてみれば?
0477デフォルトの名無しさん
2005/11/17(木) 13:49:11ありがとうございました!5つ分の式が書いていませんでした。。
というか、出力6個あったのに5個と勘違いしていました。。
非常に助かりました。ご丁寧にありがとうございました。
0478デフォルトの名無しさん
2005/11/17(木) 22:49:39http://www.itmedia.co.jp/enterprise/articles/0511/17/news025.html
太っ腹ですね。
0479デフォルトの名無しさん
2005/11/18(金) 13:18:52お、すげー!x86でSolaris試したかったんだけど、CコンパイラはともかくFortranコンパイラがないのがネックだったんだよね。
0480デフォルトの名無しさん
2005/11/21(月) 17:31:03誰かわかるかた教えていただけませんか?お願いします。
0481デフォルトの名無しさん
2005/11/21(月) 18:07:45「乱数」伏見正則,東京大学出版会がいいと思う。
0482デフォルトの名無しさん
2005/11/21(月) 18:16:560483デフォルトの名無しさん
2005/11/21(月) 18:21:28ありがとうございます!調べてみます
>>482
できればプログラムの書き換えだけで済ませたいのです、、、。
でも書き込みありがとうございます!
0484デフォルトの名無しさん
2005/11/21(月) 23:23:40Numerical Recipe に解説+プログラムが
数パターン載ってる。
0485デフォルトの名無しさん
2005/11/22(火) 10:52:26みなさんありがとうございました!!
0486デフォルトの名無しさん
2005/11/22(火) 23:54:47どう解決するの?
0487デフォルトの名無しさん
2005/11/23(水) 01:19:40..以下のプログラムを作成しメールで提出
..「級数展開によりsin(xπ) を求め、表示する」
.. x とn は実行時にキーボードから入力
.. 実数の計算はすべて倍精度で行う
という内容です。級数展開の内容は次の通りです。
sin(xπ) ≒ xπ - ((xπ)^3)/3! + ((xπ)^5)/5! - ((xπ)^7)/7! + ((xπ)^9)/9! - ・・・・ ((xπ)^(2n-1))/(2n-1)!
0488487
2005/11/23(水) 01:21:00作ってみたのですが、これで合っているかどうかわかりません。
御指導お願いします。
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
0489487
2005/11/23(水) 01:21:46if (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
0490デフォルトの名無しさん
2005/11/23(水) 15:30:00kaiの初期化の位置がおかしい。
このままでは i のループの2回目以降で前回の値が持ち越されてしまう。
それから n を大きくすると階乗の値がオーバーフローする恐れがあるので
kai は倍精度実数の方がいいかも。
0491487
2005/11/23(水) 18:38:10考えてくださって本当にありがとうございます!
「kai」の初期化の位置については全く気がついていませんでした。
result = 0
do i = 1, n
kai = 1
do j= 1, 2*i-1
と書くべきですよね。
明日学校でコンパイル・実行して試してみます。
ありがとうございました。
0492デフォルトの名無しさん
2005/11/23(水) 19:49:18その先生、頭悪いんだろうな。
ご愁傷様。
0493デフォルトの名無しさん
2005/11/23(水) 21:10:50ただの練習問題なんだろう。
そんなのの内容にまで一々ツッコミ入れてたらきりがないよ。
>>487
それよりも、ここに書き込み出来る環境があるなら
机上だけで悩んでないでフリーのコンパイラでも入れて
自分でも試すようにした方がいいよ。
0494デフォルトの名無しさん
2005/11/23(水) 23:26:28287を積んでない286マシンで極座標とか円筒座標の座標計算するときには役に立つと思う。
今はありがたみを感じないかも知れないけど。
たぶんセンセはその時代の人なんでしょう。
0495デフォルトの名無しさん
2005/11/23(水) 23:37:27コプロ世代か。
0496デフォルトの名無しさん
2005/11/23(水) 23:38:150497487
2005/11/24(木) 22:18:26今日学校でコンパイルして実行してみると、うまく動いてくれました。
まだプログラミングを始めて間もなく、自分で作ったプログラムの中ではいちばん難しかったのでとてもうれしかったです。
アドバイスしていただきありがとうございました。
>>492-493
ただの練習問題です。
フリーのコンパイラを入れて自分のパソコンでもコンパイルできるようにしようと思って試したのですが、
コンパイラの設定がうまくいってないのか、挫折してしまいました。
また今度やってみます。
0498デフォルトの名無しさん
2005/11/25(金) 00:56:270499デフォルトの名無しさん
2005/11/25(金) 17:04:17fortranから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
0500デフォルトの名無しさん
2005/11/26(土) 22:48:00call s( A )
subroutine s( A )
real A( 4, 2)
・・・
end
上のようなプログラムを作った場合、例えばメインプログラムのA(1,2)と
サブルーチンのA(1,2)は違うものになってしまいます。C言語と配列の
メモリ上配置が違うためというのは分かったのですが、これに対処するために
どうすればよいでしょうか?
・配列の添え字を逆にする。
・最後の添え字の次元をサブルーチンに渡す。
この2つしか思いつかないのですがどちらもわずらわしいです。
なにかいい方法は無いですか?
0501デフォルトの名無しさん
2005/11/27(日) 00:05:41最初の次元の長さが固定なら、
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から書き直してるなら添え字を逆にしないと性能が大きく変わる
可能性があることは知っておくべし。
0502デフォルトの名無しさん
2005/11/27(日) 00:40:52ライブラリがつながっていないのではないかな?
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のことが多い。)
0503500
2005/11/29(火) 20:52:43解決しました。どうもありがとうございました。
0504デフォルトの名無しさん
2005/11/29(火) 20:55:37ありますか?
サブルーチン、関数ごとに
parameter ( a=10, b=20 )
という風に何回も書いているのですが、バグの元になっています。
0505デフォルトの名無しさん
2005/11/29(火) 21:14:590506499
2005/11/30(水) 22:23:09遅くなりましたが、ありがとうございます。
調べてみます・・・。
0507デフォルトの名無しさん
2005/12/11(日) 11:20:440508デフォルトの名無しさん
2005/12/11(日) 11:56:42例えば
変数 i,j,k,l
が1から10までそれぞれとりうるとき
その各々について
分岐させたいんだけど
なにかいい命令文ない?
それぞれで内容がおおきく異なったり、おなじになったりするから
if,select case,do,where
どれも適当なものにならない
(書く量が莫大になる)
なにかいい命令文ない?
0509508
2005/12/11(日) 11:58:00です
0510デフォルトの名無しさん
2005/12/11(日) 14:23:44いまいち状況がよく分からないけど、
num=(i-1)*1000+(j-1)*100+(k-1)*10+(l-1)
ってな感じでひとつの変数にまとめてから、
select caseを使って分岐するってのはだめ?
0511デフォルトの名無しさん
2005/12/11(日) 15:35:38効率的にできるアドバイスもらえるんじゃね?
0512デフォルトの名無しさん
2005/12/12(月) 18:23:59実行すると
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)
というエラーメッセージが表示されてしまいます。
これはどういう意味なのでしょうか?
またその解決法があれば教えていただきたいです。
お願いします。
0513デフォルトの名無しさん
2005/12/12(月) 19:47:07ソースのファイル名が「-extfor」になってない?
ファイル名と拡張子(固定形式なら .for か .f、自由形式なら .f90)を確認してみて下さい。
0514デフォルトの名無しさん
2005/12/13(火) 13:23:04ファイル名を.f90にしたところ上のようなエラーメッセージがなくなりました。
ありがとうございます!
0515デフォルトの名無しさん
2005/12/14(水) 10:30:500516デフォルトの名無しさん
2005/12/14(水) 14:31:23「ソートアルゴリズム」とGoogle先生に聞けば即答してくれるよ。
しかも何通りも出てくる。
0517デフォルトの名無しさん
2005/12/16(金) 16:16:56使い方が良く分からん!f2cってどうやって使うの?
0518デフォルトの名無しさん
2005/12/16(金) 18:28:35f2c -A -c hoge.f
0519デフォルトの名無しさん
2005/12/19(月) 13:21:14? よくわかんないッス
0520デフォルトの名無しさん
2005/12/19(月) 18:32:49せめて自分の環境と何をどこまでやったのかくらい書いてくれや。
>>517だけじゃ回答する方もよくわかんないッス
0521デフォルトの名無しさん
2005/12/20(火) 14:42:34(fortran77)
0522デフォルトの名無しさん
2005/12/20(火) 14:52:180523521
2005/12/20(火) 14:59:40具体的にソースにどのように書けばいいのかを教えて欲しいのですが。
0524デフォルトの名無しさん
2005/12/20(火) 15:21:14(fortranの実行ファイル名)
cat finish.txt | mail -s 'pugaaa' someone@somewhere
とでも書いておけ。つか、Unix勉強汁
0525521
2005/12/20(火) 16:15:33出来ました!
どうもありがとうございます!
0526デフォルトの名無しさん
2005/12/20(火) 21:48:13どうやったらできるのでしょうか?
いきなりの質問ですいません
教えてくださいm(__)m
0527デフォルトの名無しさん
2005/12/20(火) 21:54:170528デフォルトの名無しさん
2005/12/21(水) 19:23:44サン、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ビットの高性能アプリケーションを開発できる。
0529デフォルトの名無しさん
2005/12/21(水) 19:29:39○ 商用Fortranがタダで手に入りますよ
0530デフォルトの名無しさん
2005/12/21(水) 20:54:27Solaris版ね。
Linux版の方にはコンパイラは含まれていない。
0531デフォルトの名無しさん
2005/12/22(木) 13:10:27非常に基本的な質問で恐縮なのですが、
誰かご存知の方がいましたら教えてください。
ある数値データファイルおいて、
数値データファイルの1行目から20行目まで、
そのデータの測定情報が記載されていて(つまり文字データ)、
22行目から数値データの羅列が始まっている数値データファイルがあります。
この数値データファイルを読み込ませて処理をする場合、
21行目までを無視して、22行目から読み込むようにする方法はあるでしょうか?
自分でも色々やってみましたが、結局同じファイルをコピーして、
文字データ部分を削除したファイルを作成し、使用しています。
これは面倒だし、ファイル数も多くなるので、
直接元のデータファイルを処理できれば便利なのです。
0532デフォルトの名無しさん
2005/12/22(木) 14:37:06行頭から、ASCII文字が21文字詰まっているものとして読み込み&無視
0533デフォルトの名無しさん
2005/12/22(木) 14:37:53ごめん、行じゃなくて列だと思ってた。
0534デフォルトの名無しさん
2005/12/22(木) 15:11:37すいません。具体的にどうやればよいのでしょうか。
これを応用すれば、1行目から21行目まで、
IF文で「数値データでないとき、次の行にうつる」
といったことができそうですね。
0535デフォルトの名無しさん
2005/12/22(木) 16:47:42WRITE文で後ろに変数を書かなければ
自動的に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。
0536デフォルトの名無しさん
2005/12/22(木) 17:02:02writeでやると、ファイルに空白行書き込んじゃうことにならない?
0537デフォルトの名無しさん
2005/12/22(木) 18:25:12>> WRITE(10,*) chr, (データを格納する変数)
WRITE→READの間違いだとして
書式指定なしでやると途中でスペースやカンマが出てきた場合
そこで文字列の読み込みを止めて変な値を読んじゃうよ。
READ(10, '(A20,3G8.0)') chr, x, y, z
または
READ(10, '(20X,3G8.0)') x, y, z
0539デフォルトの名無しさん
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列目の数値データだけを読み込ませる方法というのはあるのでしょうか?
0540デフォルトの名無しさん
2005/12/23(金) 12:33:54データが馬鹿でかくて読み込みにものすごい時間がかかってるのでないなら気にすんな。
データが馬鹿でかくて読み込みにものすごい時間がかかってるとしても、
そのプログラムを何回も実行しないなら気にするな。
そのプログラムを何回も実行するなら素直にデータ変換しる。
0541デフォルトの名無しさん
2005/12/23(金) 16:42:51書式指定して読み込め。効率はほとんど変わらないけど。
0542デフォルトの名無しさん
2005/12/23(金) 21:47:31でもたしかにこの部分は一瞬で終わるので、気にしないことにします。
ありがとうございました。
0543デフォルトの名無しさん
2005/12/29(木) 23:33:170544デフォルトの名無しさん
2005/12/29(木) 23:39:420545JAVAの強みは
2005/12/29(木) 23:51:28ここへは絶対来ないw
********************/
0546デフォルトの名無しさん
2005/12/29(木) 23:52:310547デフォルトの名無しさん
2005/12/30(金) 01:18:13c ここへは絶対来ないと書くべきでは?
0548デフォルトの名無しさん
2006/01/01(日) 01:03:460549デフォルトの名無しさん
2006/01/06(金) 00:08:23OPEN(10.FILE='file.csv',STATUS='OLD')
DO 100 K=1,LEN+21,1
READ(10,*) HAIRETSU(K-21)
100 CONTINUE
CLOSE(10)
0550デフォルトの名無しさん
2006/01/06(金) 00:17:440551デフォルトの名無しさん
2006/01/07(土) 16:42:280552デフォルトの名無しさん
2006/01/07(土) 18:03:250553デフォルトの名無しさん
2006/01/08(日) 11:21:05駄目です。1列目を考慮する部分が抜けているからだと思います。
そのプログラムだと、1列目(空白)が配列に読み込まれるから、
配列にはすべて「0 もしくは0.000…0E+00」が読み込まれます。
ところで、21行目までを無視する部分は無くても
正しい結果は出力するみたいですが、
私の使用している富士通のコンパイラだと実行時に、
英語の文章がずらずらと表示されて不快なので、
(よく読んでないですが、どうも入力装置10や、文番号100に関係するようです)
やはり21行目までを無視する部分は必要だと思います。
0554デフォルトの名無しさん
2006/01/08(日) 18:32:05Fortranでf(x)の積分グラフの面積を台形公式により求め、
さらにその誤差を求めるプログラムなのですが・・・
どのようにしたらよいのでしょうか。
わかる人どなたか、お願いします。
m(._.)m
0555デフォルトの名無しさん
2006/01/08(日) 18:38:280556デフォルトの名無しさん
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から始まったりしてしまいます。
何がまずいのでしょうか?
0557デフォルトの名無しさん
2006/01/08(日) 20:38:26ttp://atlas.shinshu-u.ac.jp/class/Kclass/F-2.html
>>556
まずはファイルに出力させて結果を確認しよう。
後、ループの終端を共有させるのはやめれ。
0558デフォルトの名無しさん
2006/01/08(日) 22:55:44配列はみだしてるw
>>556
多分問題は全然違うところにあるw
ところでFORTRAN77で行くなら、暗黙の型宣言は死んでも守ったほうがいい。バグの元。
悪いことは言わないから A,B,S,P はそれぞれ IA,IB,IS,IP にしておけ。
0559デフォルトの名無しさん
2006/01/08(日) 22:58:57宣言してあってもAやBが整数なのは気持ちが悪い。
…問題の本質とは関係ないが。
ところでコンパイラは何?
0560デフォルトの名無しさん
2006/01/09(月) 00:18:55REAL*8 HAIRETSU(-20:LEN)
とかしとけば大丈夫!
…文字列読み込んだとたんにruntime errorになりそうだが
0561デフォルトの名無しさん
2006/01/09(月) 01:11:2710 READ(10, *, err = 10) HAIRETSU(K-21)
これで乗り切る手もあるがw ホンモノのエラーが出ると無限ループへwww
0562デフォルトの名無しさん
2006/01/09(月) 01:20:190563デフォルトの名無しさん
2006/01/09(月) 01:23:05玄人さまwwww なんか芸を見せてみろw
0564デフォルトの名無しさん
2006/01/09(月) 01:25:140565デフォルトの名無しさん
2006/01/10(火) 16:49:50自前のテスト用プログラムや,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
0566デフォルトの名無しさん
2006/01/10(火) 22:17:18F95用のインターフェース定義Moduleがみつかんねーと言っているので、
F77のサンプルを試してみれば、ライブラリの設定に問題があるのかどうか分かるのでは?
と無責任に言ってみるw
0567デフォルトの名無しさん
2006/01/10(火) 23:56:39Fortran95インターフェイスを使うには、まず自分でインターフェイス部分をコンパイルする必要があるみたいだぞ。
http://www.intel.com/software/products/mkl/docs/mklgs_lnx.htm
0568デフォルトの名無しさん
2006/01/11(水) 00:06:380569デフォルトの名無しさん
2006/01/11(水) 17:20:310570デフォルトの名無しさん
2006/01/11(水) 20:16:58common使いまくりでmoduleに変更しようとしています。
使い方そのものはわかりますが、
commonのメモリの使い方とmoduleにした場合でどう違うか?など
内部的な話を知りたいのです。
それらを知ることができるようなサイトご存じであれば教えてください。
0571デフォルトの名無しさん
2006/01/11(水) 22:37:59COMMONはメモリー領域の共有割付なので、EQUIAVENCEをかけているのと
同じようになっている。
たちのいいプログラムなら、COMMON文が共通の名前になっていてModule化は楽だが、
変数名がサブルーチン毎に違っていると、それ相応の手当てが必要になる。
また昔のプログラムは、メモリー領域の節約の為にCOMMONを違ったサイズに切って
再利用したりしているので、機械的な修正ができないこともある。
COMMONの割り当て法に関してマニュアルで調べれば必要なことは分かると思う。
0572デフォルトの名無しさん
2006/01/11(水) 22:45:48● .● ● ●● ●● . ..●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
● ●●●●●●●● ●
● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ● ● .●
● ● ● ● ● ..● ●
● .● ● ● ●● ● ●
● ●●●●●●●● ● ● ● ● ●
● ..● ● ● ● ● ● ●
● .● ● ● ● . ●
0573デフォルトの名無しさん
2006/01/11(水) 22:46:35● .● ● ●● ●● . ..●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
● ●●●●●●●● ●
● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ● ● .●
● ● ● ● ● ..● ●
● .● ● ● ●● ● ●
● ●●●●●●●● ● ● ● ● ●
● ..● ● ● ● ● ● ●
● .● ● ● ● . ●
0574デフォルトの名無しさん
2006/01/11(水) 22:48:04● .● ● ●● ●● . ..●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
● ●●●●●●●●●● ●
● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ● ● .●
● ● ● ● ● ..● ●
● .● ● ● ●● ● ●
● ●●●●●●●●● ● ● ● ● ●
● ..● ● ● ● ● ● ●
● .● ● ● ● . ●
0575デフォルトの名無しさん
2006/01/11(水) 22:49:25● .● ● ●● ●● ●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
● ●●●●●●●●●● ●
● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ● ● ●
● ● ● ● ● .● ●
● .● ● ● ●● ● ●
● ●●●●●●●●● ● ● ● ● ●
● .● ● ● ● ● ● ●
● .● ● ● ● ●
0576デフォルトの名無しさん
2006/01/11(水) 22:50:16● .● ● ●● ●● ●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ●
● ●●●●●●●●●● ●
● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ●
● ● ● ● ● ●
● ● ● ● ● .● ●
● .● ● ● ●● ● ●
● ●●●●●●●●● ● ● ● ● ●
● .● ● ● ● ● ● ●
● .● ● ● ● ●
0577デフォルトの名無しさん
2006/01/12(木) 18:03:09大学でfortranを使った計算をすることになりました。
Compac Visual Fortran Pro.Edit V6.6
で計算していたプログラミングファイルを、そのまま
absoft Pro Fortran 8
で計算することは可能なのでしょうか?
0578デフォルトの名無しさん
2006/01/12(木) 18:31:00基本的には可能。
だが実際にはなんともいえない。
元のプログラムがどれぐらいベンダー依存性を持つかによる。
0579577
2006/01/12(木) 19:03:07すみません、初めて聞く言葉でよくわからないのです。
コンパイルするまでの手順も違うので、戸惑っています。
とりあえず、マニュアルに従ってコンパイルしたら、
local variable mx never referenced.
local variable my never referenced.
というエラーメッセージが出ました。
0580デフォルトの名無しさん
2006/01/12(木) 19:44:37それは宣言された変数がプログラムの中で
使われていないことに対する「警告」では?
0581デフォルトの名無しさん
2006/01/12(木) 22:10:48ベンダー依存とは、コンパイラー製造メーカーごとの独自仕様のこと。
元のプログラムを書いた人が、標準の範囲内で書いていれば基本的には問題なし。
しかし、最近は浮動小数点もIEEE形式に統一されたからいいが、
ちょっと前まではハードごとメーカーごとに仮数部と指数部のBit数が違うので
収束やオーバーフローの範囲が異なり色々面倒が起きた。
MacとWinだとEndianの違いがある。バイナリーのファイルをやり取りしようとすると
問題になる。でもまあコンパイラーのオプションで対応できるだろう。
0582デフォルトの名無しさん
2006/01/13(金) 00:14:17どうやってやればいいですか?本当初心者です。。。
0583デフォルトの名無しさん
2006/01/13(金) 00:31:55考え方が解らないのか、コーディングが解らないのか?
ともかく単なるわり算の問題だぞ。
0584デフォルトの名無しさん
2006/01/13(金) 00:32:211日=24時間
1時間=60分
1分=60秒
です。
0585デフォルトの名無しさん
2006/01/13(金) 00:34:46時間や日付を取得する関数はプラットフォームに依存するからなあ…。
コンパイラ何使ってるかくらい書かないと
0586582
2006/01/13(金) 00:41:32学校の課題で出てるんですが・・・s=int(x/y)とr=amod(x,y)を組み合わせて
考えろって書いてあるんですがどうやってもうまくいかなくて。
0587デフォルトの名無しさん
2006/01/13(金) 00:56:180588デフォルトの名無しさん
2006/01/13(金) 01:04:37あー、なんか分かってきた。秒の単位の変数tを日にちと時間に分解するやつだろ?
紀元0年からの秒数かな?うるう年とか絡んでるだろな。
amod()使うのはうるう年の検出のためかな?
0589デフォルトの名無しさん
2006/01/13(金) 01:32:22ちがうだろw
分と秒 時間と分 日と時間にわけるためだろ
0590デフォルトの名無しさん
2006/01/13(金) 01:44:040591デフォルトの名無しさん
2006/01/13(金) 02:13:49ユリウス日とかそんな高級な問題ではないと思います。
単に切り捨ての割り算(整数の割り算)と余りの問題だと思います。
0592デフォルトの名無しさん
2006/01/13(金) 03:44:25IMPLICIT 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
0593デフォルトの名無しさん
2006/01/13(金) 12:05:40みんな凄く親切だな・・・。
卒論生を指導したことがあるが,
「次の作業を指示してください。」という依頼に対して,
「自分で試行錯誤してみるのも,研究だよ。
いろいろ試してみて,わからなければ聞いてね」
と門前払いしたことがある。
作業内容が明確にわかる指示に対してしか反応できない学生が
多すぎるのかな・・・。
>>582
教科書や補助プリントが全くないとは思えないから,
参考になりそうなプログラムを調べてみるということは,
思いつかないか?
「教科書例題13(入出力)と例題25(関数)を組み合わせれば,
できそうだが,組合せ方がよくわからない。」
とか,
「こんなエラーがでて,バグが発見できない。」
という質問なら,可愛げもあるのだが。
0594577
2006/01/13(金) 12:15:17ありがとうございます。やはり素人には難しいです・・。
重ねて質問してもいいでしょうか。
mx と my が使われていないということは、
それらをプログラムファイル上で書き換えないといけないということでしょうか。
mx と my はなぜ使われないのでしょう。
プログラムファイルは先生が書いたものなのですが、
ここに来る以前にエラー文を見せた際『分からない』と言われました。
先生がfortranを学んだのは20年近く前になると思います、
『標準の範囲内』を超えている可能性もあるのでしょうか。
Winを使っています。
0595デフォルトの名無しさん
2006/01/13(金) 12:41:261 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは FORTRAN で書くとどうなりますか?
例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。
0596デフォルトの名無しさん
2006/01/13(金) 12:54:490597デフォルトの名無しさん
2006/01/13(金) 13:00:02> mx と my はなぜ使われないのでしょう?
変数名のタイプミスの可能性もある。
または,(動作確認用などで)とりあえず変数宣言したが,
動くようになってからは,コメントアウトしてしまった。
も考えられる。
「警告」は,エラーではなく,「動くけど,間違いてないか?」
という,(時にはお節介だが)ありがたい注意だ。
impicit none
をプログラムの最初に書くと,吉かもしれない。
# 未宣言エラーが大量にでるかもしれないけど。
0598デフォルトの名無しさん
2006/01/13(金) 13:02:37正 implicit none
誤 impicit none
俺がタイプミスをしている。
0599577
2006/01/13(金) 15:01:36Compac Visual Fortran v6.6では計算ができるファイルなのですが、
タイプミス等と考えられるのでしょうか。
エラーではないのですね。
本当に基本的なことばかりですみません。
implicit none
書いて試してみます!未宣言エラーって予想もできないので怖いですけど。
0600デフォルトの名無しさん
2006/01/13(金) 16:55:0320年前に書いたとするとFORTRAN77だから、暗黙の型宣言を使っているはず。
IMPLICIT NONEはかえって大混乱を及ぼしかねないw
昔のプログラムの書き方では変数を使わないことは結構あるので気にするな。
たぶんmx,myはサブルーチンの仮引数だろう。
0601577
2006/01/13(金) 17:27:31大正解です。
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が駄目みたいです。
でも、気にしないで良い程度のことだと分かり
それだけでとても安心しました。ありがとうございます。
0602デフォルトの名無しさん
2006/01/13(金) 17:29:30判定条件を簡素化出来ればいいのだが、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
0603デフォルトの名無しさん
2006/01/14(土) 15:30:54三角形が無秩序に並んでる(各点の座標は分かってます)なかに任意の点(これも座標は分かってる)
をおいたらその点はどの三角形に入っているかということなんですが何かアイディアはないでしょうか?
三角形の最小x最大x最小y最大y出してその範囲内にあるやつってやってたんですが途中でダメなことに
気づきまして、ちょっとしたヒントないでしょうか。
0604デフォルトの名無しさん
2006/01/14(土) 16:34:05丸め誤差や例外判定などをまったく無視すれば,
ベクトルの三角形内部判定を使えばいいと思う。
実際にコーディングしようと思うと,
境界線問題や,0割など例外処理が頻発するので,
FORTRAN 計算幾何プログラミング / 杉原厚吉
岩波コンピュータサイエンス
http://www.amazon.co.jp/exec/obidos/ASIN/4000077082/
などに目を通した方が吉かもしれない。
0605デフォルトの名無しさん
2006/01/14(土) 16:43:40各頂点から、極座標表示で残りの2頂点と判定すべき点をあらわして、
判定すべき点の位相角がすべての頂点から見て、2頂点の角の間に
入ってればいいんでね?
0606デフォルトの名無しさん
2006/01/14(土) 17:01:11検証してないので間違ってたらすまんが
既知の三角形ABCと点Pがあるとして
∠ABC<∠APC
∠ACB<∠APB
∠BAC<∠BPC
が全部成り立てばいいのでは?
0607603
2006/01/14(土) 17:35:05ありがとうございます。すぐに3つも候補をいただけるとは感謝です。
全然思いつきませんでした。
みなさんの考えを参考にさせて頂きましたが結構簡単で計算負荷も軽そうな>>605
さんのやり方で作ってみることにします。できなかったら604さんや606さんのもやってみます。
微妙にスレ違いでしたがみなさんご親切にありがとうございました。
0608デフォルトの名無しさん
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
のように連続的に文字列をつなげるにはどうすればよいのでしょうか?
よろしくお願いします。
0609デフォルトの名無しさん
2006/01/15(日) 21:51:07PROGRAM ero_list
IMPLICIT NONE
CHARACTER (LEN=50) :: fmt
INTEGER :: i
DO i = 1, 10
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 DO
STOP
END PROGRAM ero_list
出力結果
http://www4.xtokyo.com/jpmo/j171/jpmo_1.mpg
http://www4.xtokyo.com/jpmo/j171/jpmo_2.mpg
http://www4.xtokyo.com/jpmo/j171/jpmo_3.mpg
http://www4.xtokyo.com/jpmo/j171/jpmo_4.mpg
http://www4.xtokyo.com/jpmo/j171/jpmo_5.mpg
http://www4.xtokyo.com/jpmo/j171/jpmo_6.mpg
http://www4.xtokyo.com/jpmo/j171/jpmo_7.mpg
http://www4.xtokyo.com/jpmo/j171/jpmo_8.mpg
http://www4.xtokyo.com/jpmo/j171/jpmo_9.mpg
http://www4.xtokyo.com/jpmo/j171/jpmo_10.mpg
0610609
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の教科書などでは行番号を用いる形式を良く使うが、情報を局所に展開
させるほうが好ましいいので避けるべし。
0611デフォルトの名無しさん
2006/01/15(日) 22:02:44あ、すごい。早速ためしてみます。
ありがとうございましたm(_ _)m
0612デフォルトの名無しさん
2006/01/15(日) 22:13:51なんてものがあるんですね…
今まで出力形式に付いてはあまり拘らずに、データをログファイルに記述できれば
それでことたりてたので、こういうのは初めて見ました…
出力形式についても>>610の解説を参考に勉強してみようと思います。
0613デフォルトの名無しさん
2006/01/15(日) 22:22:34FORTRAN66時代は、ENCODE、DECODEというのを使っていたので、
FORTRAN77以降の機能だと思う。
0614デフォルトの名無しさん
2006/01/16(月) 00:04:06WRITE(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とか区別していたんですね。
勉強になりました。
0615デフォルトの名無しさん
2006/01/16(月) 00:36:37Iを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文のなかで読み込ませる方が速いようです。
0616デフォルトの名無しさん
2006/01/16(月) 02:35:12WRITE(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(の派生)で落としたほうがいいお。
0617デフォルトの名無しさん
2006/01/16(月) 11:51:16ifなくてもできるんですね…
上と同じような条件のベンチは
3.176u 0.333s 0:03.62 96.6% 0+0k 0+0io 0pf+0w
if文はできるだけ使わない方が良いみたいですね。
エロ動画も落とせてfortran力もついて一石二鳥。
すごいおいしいです。
0618デフォルトの名無しさん
2006/01/16(月) 21:51:47大学教育としては問題があるが、より広い意味での問題解決力としては、
頭を下げて人に教えてもらって解決するというのも一つの重要なテクニック。
0619デフォルトの名無しさん
2006/01/17(火) 00:27:51手助けしてやろうという気も起こるだろう。
何も考えずに丸投げするような奴は論外。
0620デフォルトの名無しさん
2006/01/17(火) 01:01:46今日はおもろいねた無いのか?
0621デフォルトの名無しさん
2006/01/17(火) 05:47:53Salford FTN95で、よそからもってきた固定形式(.for)のプログラムを
コンパイルしたところ、
Attempt to call a routine with argument number twenty containing
too few array elements
というエラーが出て困っています。
このエラーが出る場合、どういう問題が起きているのでしょうか。
問題となっているサブルーチンは、引数を23個もっているので、
その内の20個が問題あり?どういったことを試せばよいかも
わからず途方にくれています。どうかアドバイスをお願いします。
0622デフォルトの名無しさん
2006/01/17(火) 07:05:35○コンパイルして実行したところ、
でした。
0623デフォルトの名無しさん
2006/01/17(火) 10:51:0120番目の引数の配列の大きさが小さすぎると言っている。
ソースが古いプログラムなら、意図的にやっている可能性もある。
FORTRANは参照渡しだから、配列を引数としても先頭要素のアドレスを
渡しているだけなので、昔風のプログラミングではサブルーチン側の配列の引数を
A(10)とかと適当な数で宣言して、ルーチン内でははみ出して使っていた。
0624デフォルトの名無しさん
2006/01/17(火) 10:56:3020番目の引数の配列の大きさが小さすぎると言っている。
今の情報ではこのくらいしかいえない。
ちなみにソースが古いプログラムなら、意図的にやっている可能性もある。
FORTRANは参照渡しだから、配列を引数としても先頭要素のアドレスを
渡しているだけなので、昔風のプログラミングではサブルーチン側の配列の引数を
A(10)とかと適当な数で宣言して、ルーチン内でははみ出して使っていた。
もっと詳しく知りたければ、CALLしている文と、CALLされているサブルーチンの
頭から引数の宣言文までを見せてくれないとなんともいえない。
0625621
2006/01/17(火) 12:08:40レス本当にありがとうございます。試しに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)
0626デフォルトの名無しさん
2006/01/17(火) 13:24:25FTN95コンパイラの仕様と、ソースプログラムの信用度にもよるのだが、
動くんだったら下手にソースをいじらず動かしたほうがいい。
元のソースが正しいと仮定しての話だが・・・・
単にFTN95のチェックが厳しすぎるだけで、オプションで実行時チェックを切れば動くはず。
配列の最後の要素の大きさはFORTRANでは気にしないのが伝統だった。
理由は参照呼出しと多次元配列のメモリー上での取り方の性質による。
詳しい説明はメンドイので誰かに聞いてくれw
0627625
2006/01/17(火) 13:47:25恥ずかしながらそんなことも知りませんでした。
今日は用事があるので明日また調べてやってみます。
本当に有り難う御座いました。
0628デフォルトの名無しさん
2006/01/17(火) 21:05:06どういう環境で実行しているのか知らないが、統合環境を使っていていると
デフォールトでは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の数値計算ライブラリなどを見れば分かるが、行列の列の大きさは
引数として要求されるが、行の大きさは要求されないのはこの事情による。
0629名無しさん
2006/01/17(火) 23:56:06fortranプログラムのコンパイル時に
-r8 のオプションを使いたいのですが,
そんなオプションはないと怒られます.
何かかわりのオプションはあるでしょうか?
0630デフォルトの名無しさん
2006/01/18(水) 00:26:34GNUとかじゃなく、まともなコンパイラ使え
0631名無しさん
2006/01/18(水) 00:39:04すんまそん
お金無くて…
0632デフォルトの名無しさん
2006/01/18(水) 00:46:160633名無しさん
2006/01/18(水) 01:20:03サンクス
ちょっとためしたみました
エラー: 依存性の欠如:
libsvml.so は matfor_f-3.2-0 に必要とされています
libscml.soなるものが必要だそうだ.
探してみます.
0634デフォルトの名無しさん
2006/01/18(水) 01:23:45Increasing 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系は信者様の調子のいい話が多くて判断つかねぇ。
連中はすぐ頭に血が上るからうっかりした冗談もいえねえしキモス。
0635名無しさん
2006/01/19(木) 20:26:52親切にどうも
f2c+gccでなんとかなりそうです。
0636けい
2006/01/19(木) 21:36:14intel visual fortran を初めて使ってみているのですが、
libm.lib を利用しようとして座礁しています。
use libm
とすると、ファイルが見つからない!と怒られます。
多分、libm.modを探しに行っているのかなと思うのですが・・・。
もちろん libm.modはありません。
さて、どうしたらいいのでしょう?
助けてください。
0637デフォルトの名無しさん
2006/01/19(木) 22:06:55いまいち状況が分からんが、多分勘違いをしていると思う。
本来の付属ライブラリならその行は要らないはず。
もしくは・・・
USE で用いる .MODファイルというのは、C言語でいう .H ファイルのようなもので
サブルーチン等のインターフェース情報が入っている。
それはソースから自動生成されるのもなので、ソース(インターフェースのソース)があって
自分でコンパイルするか、はじめから提供されているかしなければどうしようもない。
それでも、やる必要があるなら USEのかわりに 各個のサブルーチンを external 文で
並べておけば、コンパイル時のインターフェースのチェックは無しで、LINKERがLINKしてくれる。
まぁ77時代のようなもの。
0638けい
2006/01/20(金) 00:30:08早速のアドバイス、ありがとうございます。
明日、再トライしてみて、結果をご報告します。
0639603
2006/01/20(金) 02:02:37いろいろやってみたんですが604さんの三角形内部判定というやつでできました。
正直こういう数学屋っぽい証明がいるような物は実用性ないだろうと思ってたんですがやってみて
あまりのシンプルさにびっくりしました。教えていただいてありがとうございました。
0640デフォルトの名無しさん
2006/01/20(金) 02:31:480641デフォルトの名無しさん
2006/01/20(金) 03:03:0895は90を含んでいるので出来る。
わずかだが77の一部の機能は廃止になっている。
なので規格に完全に忠実だと動かない物も出るはず。
しかしながら大抵のコンパイラーメーカーは過去との互換性の為に規格から削除された機能を
サポートし続けているのでまず大丈夫だろうw ウォーニングぐらいは出るかもしれんが。
0642デフォルトの名無しさん
2006/01/20(金) 16:32:15Metcalf, 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
0643デフォルトの名無しさん
2006/01/20(金) 17:29:26この本には,「Other Features 使わない方がよい機能」という,
お節介な(でも有益だと思う)章がある。
「bit 別冊 詳解 Fortran 90」の改訂復刊を希望する。
0644デフォルトの名無しさん
2006/01/20(金) 23:49:24このFortranからC言語(コンパイラ cc:SC3.0.1)の関数を呼び出しています。
これらをWindows XPに移植しようと思っているのですが,UNIX/PCの
Fortranの互換性や違いを教えていただけないでしょうか。
また,移植が簡単に行えるFortran/C言語のコンパイラの組み合わせ
があれば教えていただけないでしょうか。移行ツールでも良い。
例えば,インテル Visual Fortran + Microsoft VC++ .NET とか。
以上,よろしくお願いします。
0645デフォルトの名無しさん
2006/01/20(金) 23:56:000646デフォルトの名無しさん
2006/01/21(土) 00:05:38Lahey-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
0647デフォルトの名無しさん
2006/01/21(土) 00:16:460648デフォルトの名無しさん
2006/01/21(土) 01:49:04あれを考えた奴は出てきて、どういう使用状況を考えて用意したのか説明しなさい。
0649デフォルトの名無しさん
2006/01/21(土) 05:14:12「どーせFortranでOOPなんてロクに使われないんだから、適当でいーんじゃねーの?(鼻ホジホジ」
って決めますた。
0650デフォルトの名無しさん
2006/01/21(土) 08:01:17647さんの情報のようにUNIX/PCのFortranの互換性や違いが書いてある
サイトはあるのでしょうか。
0651デフォルトの名無しさん
2006/01/21(土) 11:25:19FORTRAN Explained 2003にFORTRANとCでの違いのまとめがある。
データ型の互換性や文字列の終端記号、構造体、call by value, call by reference
などの問題。
それ以外はコンパイラーのベンダー毎に独自の解決をしているので、個別の問題点を
まとめていることはあっても、一般的なまとめは無いのではないかな。マニュアルの相応の
ページを読むしかないと思う。
大文字・小文字を区別するCとしないFORTRANでは、LINK時のサブルーチンの内部
表現名をどうするかなど、細かい落とし穴がいっぱいある。
0652デフォルトの名無しさん
2006/01/22(日) 01:16:15役に立てたようで,とてもうれしい。
ただ,誤差対策をちゃんとしているかな?
行列式の0割防止,隣接三角形との所属判定など,
面倒な例外処理が必要だと思うのだが。
0653デフォルトの名無しさん
2006/01/22(日) 21:51:13ご指摘ありがとうございます。
調べた感じ正直そこが一番大事そうでしたがとばしてしまいました。。
ただ僕がやろうとしていることの性質では一応線分上にはほぼ来ないはずと踏んでいたし、
使う目的がその点の三角形の各点の変数からその点の参照値を出すということだったので、
近いところが分かればある程度いいやと考えていたので
大丈夫かなと思っていました。
実際に全部でやるべき1125点をやるべき三角形全部に判定させてループさせましたが
線上判定かぶりの点はなくどこかの三角形1つに入ってくれました(ちゃんと入るべきところに入ってるかはやってませんので
意味ないかも。。)
線上でかぶってたら
ただ言われてみれば判定する点が三角形の各点に近いのでそのあたりがとても不安です。
(ちょっと勉強不足なのですがやっぱり点に近いと誤差どうこうでおかしくなるのでしょうか?)
なんか書いてるうちに不安になってきました。。(笑)教えてくださった参考書をちょっと明日でも借りてきます。
0654デフォルトの名無しさん
2006/01/22(日) 23:15:40簡潔に説明できないが,
EPSL(微少量),s,t(ベクトルの係数)として,
すべての点が
EPSL < s < 1-EPSL
EPSL < t < 1-EPSL
EPSL < s+t < 1-EPSL
に入っているということかな?
だったら,問題ない。
嫌らしいのは,-EPSL < t < EPSL などの境界上にあり,
隣接三角形との取り合いがある場合。
みかんのへたのような,複数三角形が密集する頂点近傍に,
判定すべき点があると,とても神経質になりそう。
0655デフォルトの名無しさん
2006/01/23(月) 12:52:380656デフォルトの名無しさん
2006/01/23(月) 21:34:05すまないが,例にあげた参考図書
「FORTRAN 計算幾何プログラミング」
ttp://www.amazon.co.jp/exec/obidos/ASIN/4000077082/
には,そのものずばりの解答は載っていない。
無誤差の整数にしてしまう,というとても遠回りな手法をあげている。
「誤差を真剣に検討するなら,このくらいやるべきかも」
というつもりで参考図書にした。
とても遠回りには違いないが,誤差無しという最強兵器を持っているので,
誤差検討に神経を使うなら,意外に近道だと思う。
>>655 氏のあげている,ゲームグラフィックスは非常に参考になるはず。
「ゲームプログラミングのための3Dグラフィックス数学」
Eric Lengyel,狩野智英
http://www.amazon.co.jp/exec/obidos/ASIN/4939007375/
を資料費で購入してもらおうと思ったら,タイトルで怒られた。
0657デフォルトの名無しさん
2006/01/23(月) 23:26:05ピボッティングはなしで,LとUに分解するだけでいいんで…
0658デフォルトの名無しさん
2006/01/23(月) 23:29:50LAPACKやMKLに入ってるやつ使えば?
0659デフォルトの名無しさん
2006/01/23(月) 23:43:42精度比較用に「無しでなければならない」ということか?
ピボッティングありのプログラムは,
宮崎大などですぐに見つかるから,
ピボットの意味を考えて,がんばれ。
余談だが,f77 の3重do文をf90 化すると,
配列操作の練習になるかもしれない。
0660デフォルトの名無しさん
2006/01/23(月) 23:44:43write(10,*) 'Hello,world!'
close(10)
stop
end
これでカレントディレクトリにtest.txtが作成され,中にHello,world!が書き込まれるのは分かるのですが,
プログラムからカレントディレクトリに新しくディレクトリを作成するにはどうすればよいでしょうか?
言語はFortran90です..
0661デフォルトの名無しさん
2006/01/24(火) 00:03:50FORTRAN90/95ではそれは規格に無い。
ベンダー依存の機能なのでマニュアルの当該部分をみるべし。
FORTRAN2003ではPOSIX互換のルーチンを標準化するようになっていたと
思うので、共通のやり方ができるようになるだろう。
0662デフォルトの名無しさん
2006/01/24(火) 00:04:11すまない。嘘をついた。
宮崎大は,ピボッティングなしだった。
「学外の方には有用ではない」という注釈を忘れていた。
0663デフォルトの名無しさん
2006/01/24(火) 00:15:45NUMERICAL RECIPESのHPに行けばソースが見られる。
LU分解はバグ無かったはずw
ピボッティングしていたが。
http://www.nr.com/
0664デフォルトの名無しさん
2006/01/24(火) 00:21:56変数名はこう命名しろとかいうような,より良いコードを書くために必須な知識が纏められている書籍
って無いですかね?
C++で言えば,Effective C++に相当するような・・・
0666デフォルトの名無しさん
2006/01/24(火) 01:50:39書籍じゃないけど、こんなのはどうかな?
Fortran 標準コーディングルール
ttp://www.mri-jma.go.jp/Project/mrinpd/coderule.html
0667デフォルトの名無しさん
2006/01/24(火) 02:14:01さすがに今の時期にLU分解を組み込んでるようなら違うかな。
0669デフォルトの名無しさん
2006/01/24(火) 19:13:12今月から本腰入れるっていうところも多いから強ちはずれでもないかもよ
0670デフォルトの名無しさん
2006/01/24(火) 20:27:44FORTRAN77時代のものなら
http://www.star.le.ac.uk/~cgp/prof77.html
これがまとまっていたと思う。
0671デフォルトの名無しさん
2006/01/24(火) 21:53:22サブルーチン文を2回別の変数を持って呼び出すときに、1つ目の変数をAと
したとき二つ目の変数を-Aにしたいのですがこのとき
call ****(-A,B,.....)
としていいのでしょうか?
やっぱりコールする前にA=-Aとしないといけないのでしょうか
0672デフォルトの名無しさん
2006/01/24(火) 22:04:08FORTRAN90の場合、INTENT(IN)属性をつけたものならマイナスをつけてもOK
INTENT(OUT)、INTENT(INOUT)の場合は駄目だとおもう。
それはFORTRANはアドレス渡しで変数を渡しているので、マイナスが付いたときの
変数の戻し方に任意性が生じるから。
FORTRAN77時代はどうだったか・・・・
あるいはINTENT属性をつけない場合は・・・・
まぁ昔のFORTRANでは何事も気にしないことが多いので、多分そのまま通るだろうw
そして結果はコンパイラーに依存するだろうw
0673デフォルトの名無しさん
2006/01/25(水) 22:36:56ttp://www.xlsoft.com/jp/products/intel/mac_beta.html
0674デフォルトの名無しさん
2006/01/26(木) 15:16:56Windows用 Intel Fortran EM64T対応のを使ってます。
諸事情でメモリ2G制限を越えるプログラムを作らなくてはならなくなったのですが、
これって静的領域に確保することは可能なのでしょうか?
どうも2G以上の領域を確保しようとするとリンカでハネられてしまうのですが…
0675デフォルトの名無しさん
2006/01/26(木) 17:08:56単一の配列で2G超えですか?複数で合計2G超えですか?
OSはWindows64ですか?32bitWindowsでターゲットがwin64用ですか?
でも、ここで聞くよりマニュアルを調べた方が早いと思う希ガスw
0676デフォルトの名無しさん
2006/01/26(木) 18:15:010677デフォルトの名無しさん
2006/01/26(木) 19:27:19ありがとうございました。つけて走らせてみたらできました。おかげでめんどくさいことせずにすみました。
0678デフォルトの名無しさん
2006/01/26(木) 21:29:16FORTRANはいいぞ〜
最古の高級言語であって、コンピューター界のヒエログリフといってもよい。
地層のように積みあがった言語構造は、神聖文字、神官文字、民衆文字、コプト文字
を思わせて美しい。
' 「 ´ {ハi′ } l
| | | |
| ! | |
| │ 〈 !
| |/ノ二__‐──ァ ヽニニ二二二ヾ } ,'⌒ヽ
/⌒!| =彳o。ト ̄ヽ '´ !o_シ`ヾ | i/ ヽ ! や ら な い か ?
! ハ!| ー─ ' i ! `' '' " ||ヽ l |
| | /ヽ! | |ヽ i !
ヽ { | ! |ノ /
ヽ | _ ,、 ! , ′
\ ! '-゙ ‐ ゙ レ'
`! /
ヽ ゙  ̄  ̄ ` / |
|\ ー ─‐ , ′ !
| \ / |
0679デフォルトの名無しさん
2006/01/26(木) 21:48:170680デフォルトの名無しさん
2006/01/26(木) 22:16:44彼女ができる・・・(と,いいな)。
よく言われるが,計算ライブラリーなど過去遺産が豊富。
また,1980年以前に隆盛があった学術分野(気象,機械,土木など)や,
電気回路など複素数変数が便利な分野では,
Fortran が未だに主流ではないかな?
話題はずれるが,>> 90 の演説も面白い。
0681デフォルトの名無しさん
2006/01/26(木) 23:00:08えっと、結論から言うと動的に確保することで上手くいってしまいました。
で、実は気になるのは速度の問題なんです。
以前動的に確保することで速度が遅くなったんで動的に確保するのを躊躇ってたのですが
今回はそれほど遅くなってませんでした。
恐らく前回はポインタを使ったために
最適化が上手くいかなかったんだと思うのですけど
もしかしてpointer属性とallocatable属性って違うんですかね?
0682お願いします;;
2006/01/26(木) 23:47:00産まれてから今日まで生きてきた日数を出力するプログラムを作れ。
さらに、任意の整数nを入力して、産まれてからn日目が、
いつかを出力させるプログラムを作れ。
ちなみに、閏年は以下のようにして決められる。
1)基本的に西暦が4で割り切れたら閏年。
2)しかし、西暦が100で割り切れたら閏年ではない。
3)しかし、西暦が400で割り切れたら閏年とする。
レポート作成
予備的考察、プログラム、プログラムの説明、計算結果、考察
フォートラン使用・・・
0683デフォルトの名無しさん
2006/01/26(木) 23:51:59ALLOCATABLEの方が最適化が効きやすくていいと思う。
POINTERの場合、実際のメモリーが割り当てられているのか、TARGETを指しているのか
コンパイラが判断するのが難しいが、ALLOCATABLEは実際にメモリーが割り当てられて
いると仮定できるから最適化をかけやすい、と何かに書いてあったが思い出せないw
まぁ、話半分情報ということで・・・
0684デフォルトの名無しさん
2006/01/27(金) 00:04:45まず正月からある日までの日数を数えるプログラムを組め。
うるう年は無視していいぞ。
これが出来たら、残りを教えてやるw
0685お願いします;;
2006/01/27(金) 00:09:07すみません
まったくわかりません・・・わかろうとしてないかも・・・
意味不明なんです・・・
UNIXが、フォートランが・・・
0686デフォルトの名無しさん
2006/01/27(金) 00:24:220687お願いします;;
2006/01/27(金) 00:31:500689デフォルトの名無しさん
2006/01/27(金) 00:41:37なんでそのガッコにいったの?
0690お願いします;;
2006/01/27(金) 00:44:03ごめんなさい、卒業したいです;;
0691デフォルトの名無しさん
2006/01/27(金) 01:03:34お願いですからもう一年がんばって下さい。
0692お願いします;;
2006/01/27(金) 01:10:510693デフォルトの名無しさん
2006/01/27(金) 01:25:24くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/
いきなり閑古鳥が鳴いてるけど…
0694デフォルトの名無しさん
2006/01/27(金) 21:35:47マジレスすると、今すぐ大学やめて違う専門に入り直した方がいい
進路の修正は早い方がいいからな
0695デフォルトの名無しさん
2006/01/28(土) 00:49:56大学では壁にぶつかった後、立ち止まって進みも退きもせずに
引きこもりになるより2chで答えを得るほうがよっぽどいい。
カンコー学生服は丸洗いOK! VIPPERなら丸写しOKwwww
0696デフォルトの名無しさん
2006/01/30(月) 14:25:330697デフォルトの名無しさん
2006/01/30(月) 21:24:28それなーに?kwsk
0698デフォルトの名無しさん
2006/01/30(月) 23:11:42program 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で定義しているので何が悪いのか分かりません。
どなたか宜しくお願いいたします。
0699デフォルトの名無しさん
2006/01/30(月) 23:21:26ローダーのエラーなので、ファイル名の問題ではないだろう。
>symbol in file
これが正しいならinfilefはない。エラーメッセージがこれ全部なのだろうか?
未定義変数でも使っているんだろう。
こまぎれでわかんねが rk4 か first の問題でね?
0700デフォルトの名無しさん
2006/01/30(月) 23:31:580701デフォルトの名無しさん
2006/01/31(火) 01:18:58なかなかチェックが厳しい。
中間報告(春の学会発表とか)でがんばっているM1 だろう。
0702デフォルトの名無しさん
2006/01/31(火) 01:40:49F77形式の上に、暗黙の型宣言を守っていないので、bugは中々とれず
周囲の経験者やプログラム相談員からは相手にされず、苦労するだろう。
要約すれば・・・・・・
『地獄に落ちる!』
0703デフォルトの名無しさん
2006/01/31(火) 01:43:18/ _..-‐―- 、 .ヽ
/ /-‐―-..__..ヽ _..、ヽ
.!三三三´ `´ : i
|.!三三 __  ̄ _,. .;. i 暗黙の型宣言を守らない
|ii i!" ´ ェェ` l´rェ、 i..! >>698は地獄へ逝く
!i、 i!:::..... - ̄r ヽ .!
!ii!.|::::::: / `−´ヽ /
_,,.. ===="/%;;;::::. '∠ニニ」 /、 _ -‐‐-、
/´ | .% :::;;;;: ,,,.,,,:. ⌒: ./´  ̄==-- _,,.. -‐‐'"´ _,..-‐ ´
| % ::::::;;;;;;;;;:.""%./ r" (<二 ̄ ̄>
.| %。゚+。 。+% / `ヽiノ<二. ̄ ̄>
| %+*゚+。*゚%/ ( <二 ̄ ̄>
0704デフォルトの名無しさん
2006/01/31(火) 07:03:17デジャブかな?どっかで同じような光景が…
0705デフォルトの名無しさん
2006/01/31(火) 10:05:26implicit none をつけたとしても、暗黙の型宣言は守ったほうがいいな。
FORTRANの場合、型の宣言がルーチンの頭部に限定されているので、
いちいちそこを参照するのが面倒くさい。つまりローカルに解決しない。
C言語みたいに捨て変数を{}の単位内でローカルに宣言できるなら、
まあいいかもしれないが・・・
0706デフォルトの名無しさん
2006/01/31(火) 19:00:210707デフォルトの名無しさん
2006/01/31(火) 19:05:490708デフォルトの名無しさん
2006/01/31(火) 19:12:24http://spike.scu.edu.au/~barry/RealProgrammers1.html
0709デフォルトの名無しさん
2006/01/31(火) 22:02:19フォートランはブロンズセイントなの?
0710デフォルトの名無しさん
2006/01/31(火) 23:45:41が、その使用者は向上心がないからな。
ももしきや 古き軒端にしのぶれど なほあまりある 昔なりけりw
0711621
2006/02/02(木) 11:50:44Salford FTN77のコンパイラでInvalid character in field
というエラーが出ます。原因はなんでしょうか。
少し状況をいうと、READ文でINTEGERの数値をテキストから読むときに、
入力値を1〜7の数値にするとエラーになり、8以上だと普通に動きます。
0712デフォルトの名無しさん
2006/02/02(木) 12:56:51ファイルからのデータ読み込みで、実行時エラーが起きている状況でおk?
たぶんデータの並びと、FORMAT文がずれている。
もしくは1〜7の数字が全角になっているかwww または空白が実はTabとか00hとかwww
そのread文のformatとエラーのでるファイルの行を見せてくれ。
0713711
2006/02/02(木) 13:34:09そのとおりです。問題となる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。
0714デフォルトの名無しさん
2006/02/02(木) 13:40:022chの特性で空白が飛ばされているせいかもしれないが、入力のフォ-マットおかしくね?
3桁整数 3桁整数 7桁実数 7桁実数になってないとヤヴァス
..1..5...0.02...0.02
( . はスペースのつもり)
のようにしないとマズス
0715714
2006/02/02(木) 13:43:51ごめwwカラムはだいじょぶそうかなwww
READ文の次に
PRINT *, NSYM,NSYMS,ASTEP,VSTEP
を入れて何が読み込まれているか見て味噌
0716711
2006/02/02(木) 13:59:58>PRINT *, NSYM,NSYMS,ASTEP,VSTEP
やってみましたところ、入力した通りの数値が
そのとおりDOS窓に表示されました。
1 5 2.000000E-02 0.200000 等
しかし、数字が7より小さい場合に限り、そのあとやはり同じエラーがでます。
エラーのダイアログには、
00424588 READPL [+0799]
00401000 (プログラム名) [+1244]
と表示されます。READPLは今問題になっているのとは別のサブルーチンです。
0717711
2006/02/02(木) 14:09:41読むルーチンなので、そこでINVALID CHARACTERがあるのかも
と思いつきました。READ文を教わった方法で一つづつ調べてみようと思います。
おかげさまで解決のとっかかりができました。ありがとうございます。
0719711
2006/02/02(木) 14:23:19READPLは9000行くらいに本体があり、呼び出しは517行めでした。
0720デフォルトの名無しさん
2006/02/02(木) 14:24:270721714
2006/02/02(木) 14:25:0100424588 READPL [+0799]
00401000 (プログラム名) [+1244]
(これが普通のトレースバック情報だとしたらの話だが)
これの意味は1244行にあるメインルーチンのCALL文で呼ばれた
サブルーチンREADPLの中の799行にある文でエラーが起きているということだ。
多分そこのREAD文のデータとフォーマットが合っていないのだろう。
0722714
2006/02/02(木) 14:27:41ただ、コンパイラーのオプションでソース行を表示させることが出来るかもしれない。
たとえばCompaqのVisualFORTRANではオプションつけないと
トレースバック情報でソース行を吐き出さない。
0723711
2006/02/02(木) 14:33:18問題のREADPLをcallしている前と後で
PRINT*,'行番号'
をしたら、前は出力されましたが後ろは出ませんでした。
やはりREADPLの中のようです。もう少し調べてみます。ありがとうございます。
0724711
2006/02/02(木) 14:38:01見なおしましたが数字はすべて半角のはずです。
しかし、ワードパッドで打ったので空白などが
へんなのかもと思っています。
0725711
2006/02/02(木) 15:46:18NSYMSによって、READPLの中でREADする行数が変化する部分が
あったため、FORMATが一致したりしなかったりするのが原因でした。
ありがとうございました。m(_ _)m
0726デフォルトの名無しさん
2006/02/02(木) 21:26:04乙!
中々バグが取れないときは、発生箇所や原因を勘違いして決め付けているときだからなw
犬や猫と心が通じるように、エラーメッセージの読み方を学ぶとFORTRANとも心が通じる。
相手(コンパイラー)を理解する気持ちが大切だw
0727711
2006/02/03(金) 06:45:13バグとりの質問ばかりですがどうか許してください。
上で尋ねたのとは別のプログラムを実行するときに、
まったく同じエラー「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)
というものです。
原因個所を探がすのに、どのようなことを試みるとよいでしょうか。
0728711
2006/02/03(金) 06:48:150729デフォルトの名無しさん
2006/02/03(金) 09:04:23難しいな。コンパイラは奇妙な反応を返しているし。
FTN95に慣れていないと、コンパイラの息遣いを感じることも出来ないw
風の息づかいを感じていればのガイドライン
http://ex13.2ch.net/test/read.cgi/gline/1135748314/
配列のはみ出しか、引数の不整合が、起きている。もしくは配列のはみ出しで
引数の不整合が起きているw
check で argment check や subscript check も見ていると思うが、option調べて味噌。
inputが間違っているので配列のはみだしが起きているのだと思うがw
CALLの直前直後、および呼ばれたサブルーチンの先頭で、大きな配列でない引数の値を
printしてみるくらいしかないかな。このパターンではCALLの直前しか書かないと思うが。
0730711
2006/02/03(金) 09:45:33周りに頼れる人がいないため、レスが大変ありがたいです。
未解決ですが過程を報告します。
あれから、マニュアルでオプションをもう少し調べて
/UNDEFと/BREAKというのをためしてみました。
/UNDEFでは初期値が与えられていない部分を指摘されました。
しかしこの部分は、オプションをつけなければそのままでも初期値0として
動いてくれるようでした。(言い忘れてましたが、サンプルのインプットがあって、
それでは問題なく動く)
/BREAKでは、デバッガが起動してびっくりしました。無手勝流ですが、
今、これを使って変数に入ってる数値を調べているところです。
>CALLの直前直後、および呼ばれたサブルーチンの先頭で、大きな配列でない引数の値を
なぜか始めの方のOPEN文より後の部分に、print文を書いても出力が出ないんですorz.
>inputが間違っているので配列のはみだしが起きているのだと思うがw
まったくその通りです。ルーチンは動く保証は一応あって、
INPUTで四苦八苦してるんです。
バグとりの質問などは面白くないと思いますが、また進展があれば報告させて
いただきます。
0731711
2006/02/03(金) 12:02:23デバッガで入力変数をまえから順に調べていったところ、
前述のREADEというルーチンの中のあるところから先が値が入ってなかった
ので、そのFORMATをしらべたところ、入力とのズレを修正することができました。
それで、現在、プログラム動差中(たぶん)なのですか、前述の通り、
なぜか、プログラム中のあちこちに書いたはずのPRINT文が、
途中から出力されません。(そのため、本当に動いてるのか不安です)
数十分動かしてプログラムも終了する気配が無いし、なんだか悪い予感がします。
PRINTが出力されないのはいったいなぜなんだろう。。
0732デフォルトの名無しさん
2006/02/03(金) 12:11:32反応が返ってこないのは暴走。
最後にprintされたところと、次のprint文の間でどっかへ行っている。
print文の範囲を縮めていって、問題箇所を特定する。
OPEN文に関しては、status=unknownを入れておくといいかも。
あと、暴走を途中で止めた場合ゴミファイルが残っているかもしれないので
消して置くといいかもしれない。
0733デフォルトの名無しさん
2006/02/03(金) 12:26:03レスありがとうございます。
>最後に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ちゃんを離れます。
重ね重ねご助言ありがとうございます。
0734デフォルトの名無しさん
2006/02/03(金) 12:36:13思いがけない展開だが、たまにあるパターンだw
>>もしかして、UNIT「2」と「*」って重複なんでしょうか。
*は普通は6番だと思うのだが、STDOUTとSTDERRで分けていたりするのかもしれない。
1桁や90番台のUNITはコンパイラーによって予約されていたりする。
これは、コンパイラーの息遣いを感じる以外ないwww
安直には2番を22番とかに書き換えることだろう。
0735デフォルトの名無しさん
2006/02/03(金) 17:51:27> by preconnection; the standard input and output are preconnected to units 1 and 2
> respectively (units 5 and 6 are respective alternatives).
息遣いを感じるのも悪くはないが、処理系の取説もよく読んだ方がいい。
0736デフォルトの名無しさん
2006/02/03(金) 20:38:20x=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)
上の関数とデータで最小自乗法で近似した式を求めよ。
この問題のプログラムがわかりません・・・。お願いします。
0737デフォルトの名無しさん
2006/02/03(金) 20:42:06こっちで頼んでみろ
くだすれFORTRAN(超初心者用)
ttp://pc8.2ch.net/test/read.cgi/tech/1138063703/l50
0738デフォルトの名無しさん
2006/02/03(金) 20:53:19どのような方法を使うのが一般的?
自分は、ベタに
1. 配列A(N)を確保
2. 同じ大きさの配列B(N)を確保
3. B(1:N) =A(1:N)
4. A解放
5. Aを新規に大きめに確保
くらいしか思いつかないのですが。
できればポインタ使わない方法が嬉しいのですが。
0739デフォルトの名無しさん
2006/02/03(金) 22:45:46オマエが考えなきゃいけない問題なんでは?
ここで宿題しても身にならんだろ。
0740デフォルトの名無しさん
2006/02/03(金) 23:09:43どうすればaとbを求められると考えているの?プログラムを作るのはそれから
0741デフォルトの名無しさん
2006/02/03(金) 23:18:29基本的にはそれしかないだろう。
ただし、ちょっと増えるたびにその操作をすると時間がかかるから、あらかじめ増やす単位を大目に取っておく。
その単位は問題によるけど
0742デフォルトの名無しさん
2006/02/03(金) 23:27:16確保&解放繰り返すと、断片化が起きそうで怖いんですよね・・。
0743デフォルトの名無しさん
2006/02/03(金) 23:48:42FORTRAN2003では、その辺がやや改良されていたはず。
1. 大きめの配列B(M)を確保 (M>N)
2. B=A
3. A=B
4. B解放
少なくともこれでいけるようになった。
サブルーチンでやればBは自動解放できるので4は略できる。
どっちにしろ断片化は避けられないがw
0744736
2006/02/04(土) 00:45:01ありがとうございます。
行ってみます♪
0745デフォルトの名無しさん
2006/02/04(土) 01:56:33解いといたw
0746711
2006/02/04(土) 17:42:11助言を下さった方々、本当にありがとうございました。
0747デフォルトの名無しさん
2006/02/04(土) 20:46:06乙カレー!
0748デフォルトの名無しさん
2006/02/05(日) 06:52:31それでできなきゃ、アセンブリ言語でする。
それでもできなきゃ、それはやる価値が無いのだ。
0749デフォルトの名無しさん
2006/02/05(日) 12:05:340750デフォルトの名無しさん
2006/02/05(日) 13:12:21Fortran は白靴下を履いた臆病者のエンジニアや、パイプ圧フリークや、
結晶解析のチビどもが使うものだ。
奴らは有限要素解析と核反応炉シミュレーションで喜ぶ。
0751デフォルトの名無しさん
2006/02/06(月) 21:24:050752デフォルトの名無しさん
2006/02/06(月) 23:46:46そのうえ、これらの文は GOTO 指定で必要に応じて代替可能である。
>>751
http://www.genpaku.org/realprogrammerj.html
http://www.geocities.co.jp/WallStreet/6351/real.html
0753デフォルトの名無しさん
2006/02/07(火) 00:14:060754デフォルトの名無しさん
2006/02/07(火) 23:50:200755デフォルトの名無しさん
2006/02/08(水) 00:42:120756デフォルトの名無しさん
2006/02/08(水) 07:15:140757デフォルトの名無しさん
2006/02/08(水) 17:16:56計算センターも汎用機はItaniumだし。
IBM信者はハードからソフトまでIBMで固めないと気がすまないがw
0758デフォルトの名無しさん
2006/02/08(水) 20:00:160759デフォルトの名無しさん
2006/02/09(木) 15:18:010760デフォルトの名無しさん
2006/02/09(木) 16:36:16バグの種類にもよる。
結果が何故かNaNになってしまうようなバグなら、どこでNaNが発生するかデバッガで探せばいい。
NaNではなく、結果がちょっと変だというようなバグは特定が一番難しい。その場合は、人間の手でも解けるような
トリビアルな問題を解かせてみるか、コードを単純化するのが効果的だと思う。
暗黙の型宣言とcommon(もし使ってるなら)を無くすだけでも効果的だよ。
0761デフォルトの名無しさん
2006/02/09(木) 19:18:080762デフォルトの名無しさん
2006/02/09(木) 22:52:23・subchk argchk をかける。
・数値パラメータを巨大にする。
(誤差が有効桁の誤差か、バグによるものか区別できることがある。)
・長引くとき、必ず頭を切り替えるような休息を入れる。
(長引くのは勘違いして無関係なところを探していることが多いから。)
0763デフォルトの名無しさん
2006/02/10(金) 10:13:48配列まわりを疑う。
バグの過半数は配列まわり。
0764デフォルトの名無しさん
2006/02/14(火) 06:11:000765デフォルトの名無しさん
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
です。よろしくお願いします。
0766デフォルトの名無しさん
2006/02/14(火) 17:51:190768デフォルトの名無しさん
2006/02/15(水) 20:13:19計算速度は速くなるかおそくなるかどっち?
0769デフォルトの名無しさん
2006/02/15(水) 20:15:230770デフォルトの名無しさん
2006/02/15(水) 20:17:310771デフォルトの名無しさん
2006/02/15(水) 20:23:49メモリには、記憶する領域と計算するための領域があるとも聞きました.
そこで、教えて欲しいんですが、ALLOCATEした場合に、メモリのどこに確保されるのかって
ことです。
ALLOCATEで確保されるメモリ領域は、静的に割り付けたものを確保する領域なのか
あるいは、計算するための領域なのか、はたまた別の領域なのか。。どこ?
0772デフォルトの名無しさん
2006/02/15(水) 20:27:50あえてALLOCATEする必要はないのか。あるいは、ALLOCATEした方が
DIMENNSIONで宣言するよりも計算スピードは速くなるのか?ということです.
0773デフォルトの名無しさん
2006/02/15(水) 21:54:09環境によりけりだろうから。
0774デフォルトの名無しさん
2006/02/15(水) 22:05:130775デフォルトの名無しさん
2006/02/15(水) 22:45:12とられたような気がする。AUTOMATICの法は確実にヒープ領域。
静的に宣言されたものとALLOCATE型で宣言されたもので違いが有るとしたら、
コンパイル時の、配列サイズに基づく最適化が静的に宣言されたほうが効きやすい
事くらいか?
POINTER型よりはALLOCATE型のほうが自由度が少ない分最適化は効きやすい
はずでは有るが。
ま調べたらここで報告してくれw
0776デフォルトの名無しさん
2006/02/15(水) 23:24:110777デフォルトの名無しさん
2006/02/16(木) 07:55:04他の配列との相対位置よっては、バンク競合や
キャッシュラインの競合が起こりやすくなったりとかかな。
昔のスパコンじゃ無ければ領域によってページサイズを
変えてない気がする。
バンク競合が気になるなら、配列を大きめにとって
先頭をずらして計測してみれば、変化がみられる場合も。
0778デフォルトの名無しさん
2006/02/17(金) 19:36:35予算がないので >>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
0779778
2006/02/17(金) 19:42:26あと,みなさんはどちらのコンパイラを使用していますか?
よかったら教えてください m(..)m
0780デフォルトの名無しさん
2006/02/17(金) 22:38:02商用コンパイラならDVF/CVFの後継ということで Intel が一般的なのだろうが
試用版は期限があるからゆっくり勉強する人には不向きだ。VS.NETも必要だし。
Salfordのはエラーチェックが厳しいので学習用には向いてるかも。
私もチェック用に使っている。
ただ、FTN95は実行時に毎回待たされるのがなんとも・・・
gcc4が普及すれば必然的に gfortran (GNU Fortran 95)が
一番一般的なコンパイラになるのだろうけど、
まだ機能・安定性共にg95の方が上のようだ。
ttp://gcc.gnu.org/fortran/
ttp://gcc.gnu.org/wiki/GFortranBinaries
0781デフォルトの名無しさん
2006/02/18(土) 00:22:42GNUのFORTRANってどうなの?
糞だと思ってるから使ったことないんだけど。
g77が出来る前にf2c+gccは試したことがあるけど、gccが糞で動かなかった。
gccもその後倒産企業からフロントエンドもらったりしてようやくまともになったようだけど。
0782デフォルトの名無しさん
2006/02/18(土) 00:27:170783デフォルトの名無しさん
2006/02/18(土) 01:25:19インターフェースが複雑すぎて使いこなせず、挫折してFortran嫌いになって、
結局しょうがないのでC++で毎度のように車輪の再発明を繰り返している私が懺悔に参りましたよ。
0784デフォルトの名無しさん
2006/02/18(土) 01:38:56環境変数でエンディアンが変えられたりするのでなかなか便利だ。
まあ、どっちも中身がGCCなんで最適化は期待できんが。
0785デフォルトの名無しさん
2006/02/18(土) 02:17:34STREAM I/Oはベンダー拡張でCVFとか結構色々なFORTRANで対応している。
また、DIRECT ACCESSでファイルを開いてレコード長を1Byteにすれば、
FORTRAN2003以前の標準文法内でも同等のことが出来る。
(ただし、レコード長がバイトではなくワード単位になっていると出来ないが)
エンディアンをコンパイラーオプションで変えるのは最近の商用コンパイラーでは結構
対応されている。浮動小数点もIEEE形式に天下が統一されたので、せいぜい
エンディアンさえ考えればいいのだから便利な世の中になった。
IBM形式は仮数部が多いので桁落ちしにくいとかCRAY形式は指数部が多いので
OVERFLOWしにくいとかつまらないことで争っていた人たちがいたもんだがw
>>783
インターフェースってなんだべ? WRITE(6,*) と READ(5,*) だけだべ?w
0786デフォルトの名無しさん
2006/02/18(土) 12:07:17サブルーチン副プログラムなんかの引数のことっす。(なして副プログラムってつくん?)
利用者に計算用領域を用意させてそれを引数で渡すなんざ
まともなライブラリのやる事じゃねえ!と・・・
0787デフォルトの名無しさん
2006/02/18(土) 12:08:47ないんすけど
0788デフォルトの名無しさん
2006/02/18(土) 12:18:440789デフォルトの名無しさん
2006/02/18(土) 12:31:51ああ、そういうことか。
あのへんは確かに初心者泣かせだわな。
昔のFORTRANを考えてみれば、
ソフトウェア的な制約として言語仕様的にどうしようもないと言うこともあるのだが、
ハードウェア的な制約としてメモリーの少なかった時代には仕方のない面もある。
FORTRAN90以降では動的にメモリー割付は出来るとはいうものの、
FORTRANでのワーク領域はばかでかい配列だったりするので、AUTOMATIC
変数にしてサブルーチン側で割り付けようとすると、スタック領域をたちまち食い尽
くしたりして、あまり合理的でなかったりする。
FORTRANは他の言語と違ってソフトウェア概念の発達というより、ハードウェアの
発達のほうにより強く束縛されているから、(その時代の最高速機ではFORTRAN
が動いている)バカらしい仕様に見えても時代時代ではそれなりに理にかなっている
気がする。
0790デフォルトの名無しさん
2006/02/18(土) 12:35:21副プログラムとつくのは、FORTRANには副プログラムは2種類あって、
サブルーチン副プログラムと、関数副プログラムに分類されているため
それを区別するからだと思います。
0791デフォルトの名無しさん
2006/02/20(月) 15:19:13乱数を初期化させる時に、実行させる度に違う乱数を生成させたいのですが、
どうしたらいいですか?
0792デフォルトの名無しさん
2006/02/20(月) 16:17:0990だったら標準でsystem_clock()てのがある。
77でもベンダー拡張があるはず。
g77だとtime()もsecond()も使える。
0793デフォルトの名無しさん
2006/02/20(月) 16:20:10FORTRAN77以前には時間を測る関数・サブルーチンは規格には存在しない。
ベンダーの独自拡張機能を使うしかない。
Fortran90ならば、DATE_AND_TIME と SYSTEM_CLOCK が、
Fortran95には更にCPU_TIMEというものがある。詳しくはマニュアルを味噌。
乱数に関してもFORTRAN77以前は存在しないが、Fortran90以降には
規格によってFortranの命令として存在している。
ただシミュレーションとか真面目な目的で乱数を使うなら、
自分で適切な乱数ルーチンを用意しないと後から偉い人に怒られる。
乱数といっても擬似乱数なので目的ごとにふさわしい乱数があるらしい。
大型計算機の場合にはハードウェアの乱数発生器をもっていたりするので
そういう場合にはそれを使えばいいと思うがw
0794デフォルトの名無しさん
2006/02/21(火) 21:15:26visual fortranで数学ライブラリ(固有値解析)を使いたいのですが
どうやって使えばいいのか分かりません
どこか使い方書いてあるところありませんでしょうか
0795794
2006/02/21(火) 21:55:520796デフォルトの名無しさん
2006/02/21(火) 23:19:40ついでだから解決法を書いてゆけ
0797デフォルトの名無しさん
2006/02/21(火) 23:33:12すいません嘘つきました
できませんでした
lapackいれてdgeevのサブルーチン呼んでごちゃごちゃやればいいみたいです
けどめんどくさいのでやめました
0798デフォルトの名無しさん
2006/02/21(火) 23:33:540799デフォルトの名無しさん
2006/02/21(火) 23:47:02飴ちゃんあげるからC++においで
http://cpplapack.sourceforge.net/doc/main_page/Japanese.html
0800デフォルトの名無しさん
2006/02/21(火) 23:49:26わーい
0801デフォルトの名無しさん
2006/02/22(水) 00:48:33DEC(Compaq)のVisualFortranなら、DXML(CXML)がデフォで入っているから、
ビルドオプションでチェック入れればLAPACKはすぐ使えたはず。
Intel版はなまじっかMKLがあるばっかりに、DXMLの添付が打ち切られたw
0802デフォルトの名無しさん
2006/02/22(水) 00:50:58ラッパーでいいならF90のは10年位前からあるぞw
0803デフォルトの名無しさん
2006/03/02(木) 13:49:06上記のアドレスのBPM.1.TXTを複素数でのプログラムになおしたいのですが
BPM.2.TXTのようにしても同じ結果が得られませんどなたか
間違っているところを教えていただけないですか///
0804デフォルトの名無しさん
2006/03/03(金) 10:54:44自分で考えろ
0805デフォルトの名無しさん
2006/03/03(金) 22:15:40複素数と実数が混同しているので自分で宣言しているのを
よく見直すべし
0806デフォルトの名無しさん
2006/03/09(木) 23:37:27-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 をコンパイルしたことのある人がいましたら、
御教授いただければ幸いです。
0807デフォルトの名無しさん
2006/03/09(木) 23:52:36知ってる方、教えていただけないでしょうか?
0808デフォルトの名無しさん
2006/03/10(金) 01:01:34ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/versions.html
最初に初期化ルーチンを呼んでから、欲しいタイプの疑似乱数生成ルーチンを呼べばよい。
0809デフォルトの名無しさん
2006/03/10(金) 01:44:51このスレでは答えられない可能性が高い。
このスレではgfortranの人気も低いしw
0810デフォルトの名無しさん
2006/03/10(金) 04:39:420811デフォルトの名無しさん
2006/03/10(金) 05:55:28それ様のプログラムどっかにない?
0812デフォルトの名無しさん
2006/03/11(土) 11:33:59オブジェクトファイルをちゃんと指定しているのに
C:\>C:\win32app\salford\slink.exe C:\foo.obj
*** Could not open C:\Program.obj
~C
といった感じです..
ドキュメントを見てみましたが,該当するものが見つからず(?.?)といった感じです.
ftn77 foo.f /link
ftn77 foo.f /lgo
も同じエラーメッセージが出るようです.
何かの環境変数が未定義なのか,ぅーん..
0813デフォルトの名無しさん
2006/03/11(土) 13:21:13FTN95も一緒にインストールしてる?
FTN77の有るディレクトリにPATHが通ってなくて、PATHの中に
"C:\Program Files\Salford\ftn95"
など、間にスペースが有ってその中に salflibc.lib が有る
ディレクトリが含まれている場合はそうなる。
この場合は、FTN77を使うときにはFTN77の方を先にPATHに設定するか
FTN95のslinkを使うかすればよい。
0814812
2006/03/11(土) 14:36:29解決しました :−)
*** Could not open C:\Program( Files).obj
ということですね..納得です.
FTN95のslinkを使っても問題は無いようですね..当面はこれを使ってみることにします.どうもありがとうございましたm(..)m
0815デフォルトの名無しさん
2006/03/14(火) 16:21:36将来バージョンアップしたものを導入するときは,インストール同じ手順でcygwinのルートディレクトリで
tar -xvzf g95-x86-cygwin.tgz
とするだけでいいんでしょうか?tar -xzfは解凍したファイル上書きしてくれるんでしょうか?
0816デフォルトの名無しさん
2006/03/14(火) 19:52:542GBytes越えの、static配列の件だけど、
http://www.softek.co.jp/SPG/Pgi/win64/index.html
Windows x64 (Win64) は、64ビットのアドレス空間は使用できるものの、
そのプログラミングモデルにおいては、上記のとおり 単一の静的データ
あるいはデータセクションのサイズが、2GB 以内に制限されております
ので、従来の静的宣言された配列の多いプログラムでは大きな制約となり、
2GB 以上使用するプログラムではリンケージでエラーとなるケースが
出てきます。この制約は、コンパイラの問題ではなく、Win64 上の共通の
制限ですので、フルに 2GB 以上のデータ領域を使用するプログラムを
コンパイル・実行したい場合は、「Linux」でのコンパイル・実行環境を
強く推奨します。
と書いてあった。
本当なのだろうか?
0817デフォルトの名無しさん
2006/03/16(木) 12:21:590818デフォルトの名無しさん
2006/03/16(木) 21:42:34contour図かそれに似た図を描きたいんですがやり方がわかりません。
今はある範囲の値に対してこの色を使うというような感じで、
IF文をたくさん並べ、SET_PALETTE@、SET_PIXEL@を使っています。
この方法でもいいんですがプログラムとして格好も悪いし、色が少ないです。
PDFを見ると256色くらい使えそうな感じなんですけど、
英語でプログラム例も少なく使い方がよく分かりません。
何かいいcontour図の描き方がないでしょうか。
それとも他のfortranの方がいいでしょうか。
0819デフォルトの名無しさん
2006/03/16(木) 23:48:41疑問点がよく分からん。
1.色の変え方が分からないのか?
2.contour図ルーチンを自作していて苦労しているのか?
1.の場合がんばってマニュアルを読めとしか言いようがない。
SalfordF77固有のグラフィック命令で色付き図を書いている人間は
現在の日本には少ないだろうから、答えてくれる人がいるか・・・・
ひょっとしてSalford77のグラフィックスはDOS用窓とかでないか?
2.の場合地球物理関係で使われているらしいPGPLOTでも使ってみたら
良いかもしれない。grwin PGPLOTあたりで検索してくれ。
もしくは計算データを独立したプロットプログラムに渡すほうがいいかもしれない。
FORTRANのグラフィックスも80年代末にGKSでようやく天下が統一されるかと
思っていたら、突然XYプロッターの時代が終了してWIMPの時代が来てしまい
結局混沌のまま進化が終わったので、まぁ我慢強く不便に耐え抜くしかないw
0820819
2006/03/17(金) 00:04:39ttp://web.sfc.keio.ac.jp/~masudako/class/computer/gks/
GKSはともかく参考文献が出ているので助けになるかもしれない。
よくわからんがGKSもまだ生きているみたいで、FORTRAN業界の物持ちのよさを確認したw
0821818
2006/03/17(金) 03:55:30疑問点はどちらかと言うと1の方ですかね
ルーチンを作った方が見た目もすっきりすると思いますが。
SET_PIXEL@では16色しか使えないみたいですけど、SET_PALETTE@で64色まで増やすことはできました。
とりあえず、もう少しライブラリを眺めつつ、PGPLOT、GKSを参考にしてみます。
ありがとうございました。
0822デフォルトの名無しさん
2006/03/18(土) 11:55:05integer*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
0823http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 19:35:35TextSS のWindowsXP(Professional)64bit化おながいします
もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
0824818
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
0825デフォルトの名無しさん
2006/03/19(日) 02:18:32Library Reference によると GRAPHICS_MODE_SET@ の引数は順に
横方向の解像度、縦方向の解像度、色数、エラーコード
厳密にやろうとするなら、まず GET_GRAPHICS_MODES@ を呼んで
使用できる解像度と色数を調べてから、その値を使うべきなんだろうけど
Windows版の場合は解像度640*480、16/256色しか使えないっぽい?
でたらめな値を入れても ERROR_CODE に 0 が返ってくるし…
0826デフォルトの名無しさん
2006/03/19(日) 05:16:04データを視覚化できるとなんだか楽しいですね。
卒研でFORTRAN使っていて、もう卒論提出したのでプログラムいじる必要ないんですけどね。
最近VGA@、SET_PIXEL@で絵が描けること知って、プログラムいじってました。
もっと早く知ってれば研究もう少し進んだんだろうなぁ。
他のFORTRAN関連のスレ見てると大学や研究所ではまだまだ現役のようですね。
うちの教授も言ってましたが複素数が扱えるのが大きいのかな。
0827デフォルトの名無しさん
2006/03/19(日) 14:49:12詳しくは分からないが、VGAとあるので昔のビデオモードの制約をうけて
画面サイズ640*480、8bit=256色になっているのだろう。
DOSからWindowsに切り替わる時期のコンパイラでは、Windows機能は
DOSエキステンダー替りに32Bitプログラムを動かすために使い、
独自グラフィックスは16bitのDOSモードを引きずっているということがよくあった。
256以上の数で赤に戻るのは、9bitより上が無視されて、下の方の桁だけが
有効になっているせいかと推測される。
0828デフォルトの名無しさん
2006/04/03(月) 14:41:54write文で書き出すとき、1行に例えば200列データを書き出すように
指定しても、マシンによってはwindow幅に合わせるようにデータが
出力されてしまいます。
おそらくインストールしているFORTRANのデフォルトの何かを書き換え
なければいけないと思うのですが、どのようにしたらよいか
わかりません。どなたか教えてください。
0829デフォルトの名無しさん
2006/04/03(月) 23:08:58OPEN文のRECL指定子で増やせると思う。
画面出力の場合は分からんw
RECLとはRECORD LENGTH(レコード長)。
単位がバイトだったりワードだったり処理系によって一定していないので
マニュアルを注意深く読む必要があると思う。
0830デフォルトの名無しさん
2006/04/04(火) 21:08:57それって、Fortranでもコンパイラの問題でもなく
DOSプロンプトの問題ってことはないの?
本当は200列データが出てるけど、表示するアプリ側の問題で
折り返し表示になっちゃってるってことは?
0831デフォルトの名無しさん
2006/04/09(日) 21:59:16nを数千万と想定
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の参照配列を作る程度で何かいい方法はないでしょうか?無論メモリを使わない方法があれば、そのほうがよりうれしいです。
読みにくくてすいません。
0832デフォルトの名無しさん
2006/04/09(日) 23:41:42最近のCPUとコンパイラなら、その程度のif文なら投機的実行でほとんどロスはないんでね?
一応仮にvc=a*vnだけにして速さに大きな差が出ると分かってから出ないと労力無駄の希ガス。
あと数千万なら〜8*10M byte〜100MByteだから、それほどメモリーを食うわけでもないべ?
0833デフォルトの名無しさん
2006/04/10(月) 09:15:21x86ならSSE2の比較命令、PowerPCならfselを使えば速くなる。
IA64のプレディケートならコンパイラがやるはず。
ただ、はたしてプラットフォーム依存のコードを加える気が
あるのかどうか。
0834デフォルトの名無しさん
2006/04/21(金) 20:34:550835デフォルトの名無しさん
2006/04/22(土) 02:38:27NAGあたりが一番進んでるかね?
0836デフォルトの名無しさん
2006/04/22(土) 17:54:400837デフォルトの名無しさん
2006/04/22(土) 20:34:270838デフォルトの名無しさん
2006/04/23(日) 02:16:55最大の敵のC言語が、C99、C++、D言語などに分裂したのでFORTRAN有利でね?
おまけに最近の言語は、言語としての記述の抽象度を上げる方向がスピードよりも
セキュリティーや安全面重視に向かっている。本来の電子計算機としての原点を忘れている。
FORTRANはなんだかんだいって、その時代時代ごとの最新ハードウェアで性能を出すように
かなりのリソースが振り向けられていて(その分の経費はハードの売り上げの中に押し込まれている
80年代のスパコンや90年代のRISC、2000年代のIntel)言語仕様は古いが、
最適化コンパイラとしては常に時代の先端を切っている。
最近のトレンドはマルチコア並列化だが、FORTRANは最近微妙に並列化に向けて仕様をいじっている。
たとえば配列のメモリー上の連続性を要請しなくなっている。
こういう点を見るとFortran2003が順調に出荷され、OSのAPI呼び出し等が楽になり、
かつ並列コンパイラの最適化技術の恩恵がうまく花開けば、FORTRANはニッチに留まらず
一気にメインストリームに躍り出てわが世の華を謳歌することも不可能ではない!!
マルチコアに対する並列化に対して、スパコンで培った自動並列化技術がうまく対応できれば
覇をとなえることが出来る!www
0839デフォルトの名無しさん
2006/04/23(日) 05:03:10途中まではまともだと思ってたのにw
0840デフォルトの名無しさん
2006/04/23(日) 12:54:59>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&最新のコンパイラを使ってるなら
素直なコードと速度はさほど変わらないだろうな。
0841デフォルトの名無しさん
2006/04/23(日) 18:18:03FORTRANが再び覇を取って、天下に号令するんだ!w
0842デフォルトの名無しさん
2006/04/23(日) 20:26:58ムリ
でも当分の間は生き続けるんだろうな
0843デフォルトの名無しさん
2006/04/25(火) 01:17:37int.dの中身はどのように書けばいいのですか?
a=1
b=10
と書いたらbad real number in item 1 of list input
というエラーになりました。(各行の前には半角スペース6コ)
あと、この問題の解答はfortran95でも使えますか?
0844デフォルトの名無しさん
2006/04/25(火) 03:54:10この手の質問は、こっちでやるとよい。
くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/
で、質問に答えるとだ、
ファイルには
1 10
とかいておけばおk
a=1,b=10 と書きたい場合は、NAMELIST という方式があるのだが、
これは高度なので初心者にはお勧めできない。
0845843
2006/04/26(水) 03:32:400846デフォルトの名無しさん
2006/05/05(金) 21:40:31ぐおお、参加したかった
0847デフォルトの名無しさん
2006/05/05(金) 22:06:120848デフォルトの名無しさん
2006/05/16(火) 23:45:540849デフォルトの名無しさん
2006/05/17(水) 19:38:09Intel Visual FortranをVisualStudioに統合すると,インストールの度にカスタマイズが
元に戻ってしまって困っているのだが,回避する方法を誰かしらないか?
カスタマイズを保存する・・・でもいいのだが
おすえてサミアドン
0850デフォルトの名無しさん
2006/05/18(木) 14:36:07プレミアサポートはまだ一月以上残ってるのにな。
みんなは大丈夫なの?
0851デフォルトの名無しさん
2006/05/18(木) 14:51:46間違ってプロフェッショナルバージョンをダウンロードしてたことに気づいた。
スタンダード版だったらインストールできた。
0852デフォルトの名無しさん
2006/05/18(木) 19:27:49サミアドンは梅雨が明けるまでお休みです。
0853デフォルトの名無しさん
2006/05/18(木) 23:30:36いやメールを受け取っていると思うが、それはIntelの間違い。
漏れも初日に困ったぜw
0854デフォルトの名無しさん
2006/05/19(金) 16:22:05サミアドンは水に濡れるのが嫌いだったなw
だれかNAGのFortranBuilderを試してみた人いる?
感想を書いてちょ!
0856デフォルトの名無しさん
2006/05/22(月) 22:08:48【日時】 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
0857デフォルトの名無しさん
2006/05/22(月) 23:02:43ていうか、なんで今頃になってリリース発表会?
0858デフォルトの名無しさん
2006/05/22(月) 23:16:480859デフォルトの名無しさん
2006/05/23(火) 00:55:42文法にきつくて速度はうんこというデバッグ向きの定評もあるし、
FortranBuilderで安く手に入るなら、チェック用にいいかなとも思うのだが。
NAG利用者の意見を求むw
0860デフォルトの名無しさん
2006/05/24(水) 23:07:530861デフォルトの名無しさん
2006/05/27(土) 21:37:28SalfordのHPやSilverfrostのHPからもリンクが消えてるんだけど…
0862デフォルトの名無しさん
2006/05/29(月) 01:52:14FTN95がFreeになったから消したんでないのかな?
0863デフォルトの名無しさん
2006/06/03(土) 02:31:530864デフォルトの名無しさん
2006/06/04(日) 00:35:52ロシアか中国あたりにうpられていそうな気もするがw
漏れは使ったこと無いけど、FTN77はそんなにいいものなのかい?
フリーのFTN95はバナーがでてウザかった気はするが使えたよ。
F77だったらOPEN WATFORやg77などがあるので代替手段が無いわけではない。
WATFORもDOS EXTENDER時代に本来の開発が止まったものなので、昔懐かしい
感じを保っているはずだが・・・w
0865デフォルトの名無しさん
2006/06/04(日) 01:38:40どれもなんか怪しい雰囲気がw
>>864
単体で使う分には取り立ててよいというほどではないと思うけど
CPad for Salford FTN77と一緒に使うとお手軽にプログラムの
作成・実行が出来るので重宝しています。
このセットで紹介しているHPも結構あるみたいだし。
0866デフォルトの名無しさん
2006/06/06(火) 00:54:17FORTRAN77です。
たとえば、10行2列の数値データがあったとして、
これを「csvファイル」にファイル出力したとき、
1列目と2列目を、エクセルでいうA列、B列の各セルに
自動的に格納させる方法はありますでしょうか?
C言語だと自動的に各セルに数値が収まってくれるプログラムを作成できますが、
私の使っている Salford FTN77 で作成したプログラムでは、
出力データがすべてA列に表示されてしまって都合が悪いです。
ちゃんと隣のB列の各セルに数値が収まるようなプログラムは作成できるでしょうか?
0867デフォルトの名無しさん
2006/06/06(火) 01:20:23Cと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)
0868デフォルトの名無しさん
2006/06/06(火) 01:32:460869デフォルトの名無しさん
2006/06/06(火) 01:55:27こんな感じでカンマで区切っただけです。
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文をどのように使えばよいですかね?
0870869
2006/06/06(火) 01:59:07ではなくi=i+1です。
0871デフォルトの名無しさん
2006/06/06(火) 02:02:23いやそれ、カンマで区切れてないから。
出来たファイルをテキストエディタで開いて見てごらん。
0872デフォルトの名無しさん
2006/06/06(火) 15:29:32FORMAT嫌いなら,
write(10, *) i, " , ", m
とするアルよろし!
再チェーン
0873869
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)
という風に直したらうまくいきました。
0874デフォルトの名無しさん
2006/06/08(木) 01:35:45文字列にダブルクォーテーション(")が使えるのは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)
とする手もあるが、今となってはお勧めできない。
0875デフォルトの名無しさん
2006/06/20(火) 00:32:22の斜陽国家エベントにいってきた奴いないの?
なんか報告頼むぜ!いつごろF2003のコンパイラができそうだとかさ。
0876デフォルトの名無しさん
2006/06/21(水) 01:51:000877デフォルトの名無しさん
2006/06/21(水) 02:08:470878デフォルトの名無しさん
2006/06/21(水) 14:40:08リリースノートをみても、根本的な違いがよく分かりません。
Intel8.x系列は未だに開発が続けられているのはなぜなんですか?
9.xに統合されないのは何か違いが理由があるのですか?
0879デフォルトの名無しさん
2006/06/22(木) 09:50:48違いが分からないのに開発されてると思った理由が知りたい。
0880デフォルトの名無しさん
2006/06/22(木) 12:26:34intelからのversion upがVer.8系列とVer.9系列と両方なされているんだが、
どうして開発されていないといえないのか理由が知りたい。
0881デフォルトの名無しさん
2006/06/22(木) 22:30:05ttp://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スレを見てみるとバージョンの違いで挙動の変わる
プログラムもあるようだし。
0882デフォルトの名無しさん
2006/06/23(金) 01:25:10挙動が変わった経験はないが、9.xで作ったバイナリの方が遅いことはしょっちゅうある。
0883デフォルトの名無しさん
2006/06/25(日) 23:40:560884デフォルトの名無しさん
2006/06/26(月) 00:59:13国語で負け惜しみかww 糞豚www
0885デフォルトの名無しさん
2006/07/13(木) 21:05:190886デフォルトの名無しさん
2006/07/18(火) 20:15:58詳しい情報きぼんぬ
0887デフォルトの名無しさん
2006/07/20(木) 03:45:400888困ってます
2006/07/20(木) 13:27:37方程式 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で開いた後立体的に見たいんですが、可能ですか????
よかったら貼り付けてください!!!
0889デフォルトの名無しさん
2006/07/20(木) 14:18:16こっちへゆけ
くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/
0890デフォルトの名無しさん
2006/07/20(木) 15:23:35PROGRAM 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やりたいなら考えてもいい。
0891デフォルトの名無しさん
2006/08/09(水) 13:17:070892デフォルトの名無しさん
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に初期化してあります。
何かお気づきの点など無いでしょうか?
0893デフォルトの名無しさん
2006/08/09(水) 22:59:50とりあえず、デフォルトで 0 が入ってる筈だから、
初期化のところをコメントアウトしてみたらどうかな。
0894デフォルトの名無しさん
2006/08/09(水) 23:11:42配列はみ出しで、commonのcounterが上書きされているとかw
0895デフォルトの名無しさん
2006/08/10(木) 00:28:170896デフォルトの名無しさん
2006/08/10(木) 01:57:260897デフォルトの名無しさん
2006/08/12(土) 00:43:16g95 projectに書いてあるようにmake.incを書き換えたけど
lapackのコンパイルができなかったんだができた人いる?
0898デフォルトの名無しさん
2006/08/12(土) 01:53:43環境と状況は?
0899デフォルトの名無しさん
2006/08/12(土) 19:20:52OSはWinXPです。lapackはWin用のものです。
make install を行うと
makefile:7 *** missing separator. Stop.
というメッセージがでます。
0900デフォルトの名無しさん
2006/08/13(日) 09:55:41Win用っていうと 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
0901デフォルトの名無しさん
2006/08/14(月) 05:46:07ありがとうございます。
やってみます。
0902デフォルトの名無しさん
2006/08/20(日) 21:14:330903デフォルトの名無しさん
2006/08/23(水) 22:37:10でもロクな能書きもなく、使いかたがわからないんです。
それか、Eclipseで直接Intel Fortranを使う方法、どなたか知りませんか?
0904番組の途中ですが名無しです
2006/08/30(水) 13:52:21仕方なくEmacsでcommet-regionとかしてるけど、やっぱり面倒だ。
何かいい解決策知ってる人いないかのう
0905デフォルトの名無しさん
2006/08/30(水) 15:26:190906デフォルトの名無しさん
2006/08/30(水) 17:15:13前やったときに使えなくて,そのレスみて本当は使えるのか?と思ってマジメに探したらあったあった.
ifortで -fppオプションか,サンクス.
0907デフォルトの名無しさん
2006/08/30(水) 17:21:04これは知らなかった.
0908デフォルトの名無しさん
2006/08/31(木) 00:07:10終端記号センシティブな言語の慣習を持ち込むのはよくないw
0909デフォルトの名無しさん
2006/08/31(木) 00:50:11理由は・・・適当にググってくれぃ
0910デフォルトの名無しさん
2006/08/31(木) 02:51:400911デフォルトの名無しさん
2006/09/05(火) 19:55:490912デフォルトの名無しさん
2006/09/05(火) 21:49:36今のところ使えない
0913911
2006/09/06(水) 00:44:23情報有難うございます。
Visual Studio 2003を持っていればFTN95をインストールしたときのレジストリの変化等を見て
Visual Studio 2005に対応させる方法が類推できそうなんだけど...。
だれかやってくれないかなぁ。
0914デフォルトの名無しさん
2006/09/06(水) 01:38:31SilverfrostのForumを探してみるとVS2005に対応させる予定はあるようで
we are still aiming for a release "this summer". と言っているので、もうすぐ対応版が出るかも?
#もう夏も終わりだが
ちなみにVS2005 Express Editionは他のコンパイラを追加することが出来ないようなので
無償でVS上でFortranプログラミングとは行かないようだ。
0915911
2006/09/06(水) 02:55:18おぉ!!有益な情報有難うございます。
VSのエディタだとオートコンプリートが使えて便利そうなので対応予定があって良かったです。
0916デフォルトの名無しさん
2006/09/06(水) 17:41:38日本語マニュアルあるといいんですが。
0917デフォルトの名無しさん
2006/09/06(水) 19:11:24日本語のマニュアルなら購入しなくてもゲットできますよ。
ただ、xlsoftにメールアドレスを登録する必要があります。それだけで、そのメールアドレスにパスワードが送られてくるかと。
0918916
2006/09/07(木) 11:59:58ありがとうございます。
xlsoftからアーカイブを入手してドキュメントだけ取り出しました。
しかしメインの部分は英語なんですね。まあ困ったらちゃんと読む
ことにします。
0919デフォルトの名無しさん
2006/10/10(火) 10:53:44http://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の方が計算時間が短い
という解釈であっていますか?
違うようでしたら正しいベンチマークの見方を教えてください。
0920デフォルトの名無しさん
2006/10/12(木) 00:57:18多分そうなんだろうが、CPUがPen3でやっていることからも分かるように、その情報はものすごく古い。
Intel FortranはVer.7から系列が変わっているので、Ver.5とは別の製品だと思ったほうがいい。
今はVer.8とVer.9の系列が並行してBugFixが出されている。
速いのはIntelかPGといわれている。CPUやプログラムとの相性もあるので場合によって異なる。
GNUは独立ベンダーを倒産させるので、うんこコンパイラのままとどめておくべきw
0921919
2006/10/12(木) 10:06:23有り難うございます。
Intel Fortranのバージョンがあがっているのに計算時間が遅くなっているので
疑問に思っていたのですが、別の製品と思えば納得です。
0922デフォルトの名無しさん
2006/10/18(水) 14:53:17XP使ってて、ftn77.exe等のコンパイラを試してみたんですが、
このコンパイラがXPに対応していないせいか、
使おうとすると、毎回ダウンロードが始まるだけで使えません。
簡単にコンパイルできる方法があれば、
それでもいいので教えてくださいませ。
0923デフォルトの名無しさん
2006/10/18(水) 21:05:28ウチでは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 とか参照のこと。
0924デフォルトの名無しさん
2006/10/20(金) 21:45:52Sunのソラリス入れる敷居が下がったぞいw
0925デフォルトの名無しさん
2006/10/21(土) 12:05:34solarisのコンパイラはgccとあんま変わりません
0926デフォルトの名無しさん
2006/10/25(水) 20:50:52実行時間が40%以上縮まったお
すげーお
0927デフォルトの名無しさん
2006/10/25(水) 23:49:27CPUはなんだ?つーかSSEとかかけてる?
インテルはCPU対応の最適化が進んでいるから、最新CPUだと差がでやすい。
しかしCXMLのライブラリが無くなったのがめんどい。
まぁLAPACKだから拾ってくればいいんだが、INTELもMathKernelの
BLAS−LAPACKぐらいはただでよこせw
0928デフォルトの名無しさん
2006/10/26(木) 09:40:16>INTELもMathKernelの
>BLAS−LAPACKぐらいはただでよこせw
http://www.intel.com/cd/software/products/ijkk/jpn/perflib/mkl/index.htm
に "非商用版のダウンロード" ってのがあるけど…。
対象者でなければ買うしかない罠。
0929929
2006/11/05(日) 11:57:48数だけわかっていて、そこから連続した数を抽出し、発生頻度と見なしてその
発生確率からポアソン分布による乱数を行なえるようなプログラムを知りたい
のですが、
詳しく述べますと、
データ例として、初めてでよくわからないのですけど、'nenpow.txt'というよ
うなワードの文章の中に112行1列(要は縦に一つずつの年報が並んでいる)に
なっています。ちょっと描いてみると
1行目:1961
2行目:1961
3行目:1962
…
112行目:2005
というようになっており、ここからそれぞれの年報をまとめて発生個数として
ポアソン分布を作成し、それによる確率的な乱数を発生させるようにしたいの
ですけど・・・。
Fortran77か90で行ないたいのですけど^^;
0930デフォルトの名無しさん
2006/11/05(日) 12:40:12>Fortran77か90で行ないたいのですけど^^;
Fortran90はFORTRAN77の上位互換だ。
つまり、FORTRAN77でプログラムを書けば、それはFortran90のプログラムであるとも言える。
0931929
2006/11/05(日) 14:04:51プログラムの仕方がわからないのですけど、わかりますか?
0932デフォルトの名無しさん
2006/11/05(日) 19:58:30モジュールのみを記述したファイル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)のコマンドだけでリンクを通す方法はないでしょうか?
0933932
2006/11/05(日) 19:59:29--------------------------
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
---------------------------
0934デフォルトの名無しさん
2006/11/05(日) 20:46:08(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は不要です。
0935932
2006/11/05(日) 21:04:37>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というのは初めて知りました.
調べてみるとなかなか使い易そうです.
ありがとうございました.
0936フォートランまだまだ初心者
2006/11/05(日) 21:08:08いて、そこから一つずつの列の値に対して対数正規分布を行い、それぞれを一
つずつにまとめていきたいのですけど…
どなたかわかる人はいませんか?
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
… … … … … …
よろしくお願いします><
0937デフォルトの名無しさん
2006/11/05(日) 23:20:34MODULEを使うと、引数の型のチェックなどをしてくれる。
LIB形式にしてしまうと(昔の77の頃と同じならば)引数の型などをチェックせずにLINKすることに
なるんじゃないかな?
ついでだから確かめて報告してくれ。
>>936
もう少し内容を整理してもらわないと、誰も答えられない。
一体、西暦はどこに消えたんだ?
6列のデータを、列ごとにまとめるのは簡単だ。
対数正規化を行うのは、列毎のデータが得られてから考えることで、
味噌糞ごっちゃりにすべきでないべ。
0938932
2006/11/06(月) 01:20:57引数の型はチェックしてくれるようです.
ただ,!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を一つ置けばよい)
結局どっちが楽かって話になりますね.まだ色々試してる段階なので何とも言えないですが.
0939932
2006/11/06(月) 01:33:18modファイルは当たり前でした.libファイルだけですorz
結局何が言いたかったかというと,libファイルを一つのlibファイルに
することができなくなるということでした.
0940デフォルトの名無しさん
2006/11/06(月) 02:53:25http://softwareforums.intel.com/ISN/Community/en-US/forums/permalink/116158/116178/ShowThread.aspx#116178
0941デフォルトの名無しさん
2006/11/06(月) 03:09:53とき、IMSLを使った書き方を教えてくだされ。
0942デフォルトの名無しさん
2006/11/06(月) 07:49:58LFDRGで検索されたし
0943デフォルトの名無しさん
2006/11/06(月) 08:17:440944フォートランまだまだ初心者
2006/11/06(月) 13:55:33できれは、年報のデータを一行目に持ってきて112(150)行7列やっていきた
いのですけど、大丈夫ですかね^^;
なんか、内容とかを考えていく内にこんがらがってきたのですけど><
0945デフォルトの名無しさん
2006/11/06(月) 20:19:50integer 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列ではうまくいったんですが…どなたか助けてください(泣)
0946デフォルトの名無しさん
2006/11/07(火) 12:02:01富士通臭いメッセージだな。末尾の i の文字に注意すべし。(たしか富士通はそうだったはず)
それはエラーではない。ウォーニングですらない。インフォメーションだ。 (e,w,i の違いあり)
メッセージは最適化の結果だ。
ループ入れ替えをして、かつ行列積であることをコンパイラが認識して、専用の最適化ルーチンに
おきかえたと知らせているだけだ。ふつうに動くはず。
学習のためにやるなら、デバッグ用のオプションをつけて最適化を抑止するといい。
0947デフォルトの名無しさん
2006/11/07(火) 19:50:47そうだったんですか…
動かしてみたら確かに動きました。
お騒がせしました。
0948デフォルトの名無しさん
2006/11/08(水) 00:59:23それなら楽勝。
ちみの考えるべきは、単に年毎に対応した1列分のデータがまとめられた場合の処理だ。
あとはそれを6列相当分6回繰り返せばいいのだから。
0949フォートランまだまだ初心者
2006/11/08(水) 03:32:02もう一つ知りたい事があるのですけど載せていはいないのですけど、一列目の
年数の値をポアソン分布に従って発生させて、その事象について他のバラメー
タをいて乱数で確率的な数値から値を求めていき、その値をdatファイルにいれ
ていくにはどうしたらいいですか?
(乱数には2行から7行までのデータによる確率分布によるものとする)
0950デフォルトの名無しさん
2006/11/08(水) 17:50:32以下の 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
----------------------------------------------------------------------------------
0951950
2006/11/08(水) 17:51:39タブは見えなくなってますが、入っております。
0952デフォルトの名無しさん
2006/11/08(水) 18:20:57.SUFFIXES:.f .c .o
を頭のほうにいれてみるとかどう?
0953950
2006/11/08(水) 20:14:06どうもありがとう。やってみましたが、うまくいきませんでした。
main.o:main.c
main.c:main.f
subr.o:subr.c
subr.c:subr.f
を加えればうまくいくのですが、実際に全部加えるのは大変。。。
0954デフォルトの名無しさん
2006/11/08(水) 22:44:26>>953みたいに依存関係を記述するのが正解だと思うけど。
そうしないとすると*.fから*.oをつくるようにするとか。
確認していないけど、こんなイメージ。
.f.o:
$(F2C) $(F2CFLAGS) $< -o hoge.c
$(CC) $(INCLUDES) $(CFLAGS) hoge.c -o $@
多分もっといいやり方があると思う。
0955デフォルトの名無しさん
2006/11/09(木) 02:17:20(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)
0956デフォルトの名無しさん
2006/11/09(木) 02:17:55nstep=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
0957デフォルトの名無しさん
2006/11/09(木) 03:57:37%.o:%.f
をいれると.fと.oの間のデフォルトルールが消されて
うまくいくっぽい。
0958デフォルトの名無しさん
2006/11/09(木) 08:42:20何がうまく行かないのか、もう少し具体的に書いてくれないと答えられない。
世間的には、いきなりソース見せて、『おかしいの教えて!』と言ったら。
『おかしいのはお前の態度だ!』といわれちゃうw
>>949
いまいち理解できないのだが、データそのものを乱数で生成したいということか?
年号に関してはポアソン分布をなすように、それに対応する6個の値は別の分布ということ?
それならば、それぞれの分布をなす関数が用意してあればDO LOOPをまわすだけだ。
それらをサブルーチンかファンクションで作ればいい。
0959デフォルトの名無しさん
2006/11/09(木) 09:24:21境界の位置のuの値が固定されてしまっていました。
なんとか解決することができました。
ありがとうございました。
煮詰まった余りおかしな態度だったことをお詫びします。
0960デフォルトの名無しさん
2006/11/09(木) 09:55:13OKwwwwww
頼りになる人は気難しいし、気さくな人は頼りにならん。
奴らの操縦法は下手に出ておだてる事と、適切な質問を与えることだ。
0961デフォルトの名無しさん
2006/11/10(金) 00:34:19できれば3行で!
0962デフォルトの名無しさん
2006/11/10(金) 00:42:11関
係
0963デフォルトの名無しさん
2006/11/10(金) 01:01:47いや、先祖はg95で同じだろw
g95の中の人がGCCと一緒になるのを嫌ったのかな?
詳しいことしらん。
0964デフォルトの名無しさん
2006/11/10(金) 01:02:44g95 はGCCを元にしたFortran95コンパイラ。
g95の進捗があまりにも遅かったのでgfortranが別プロジェクトとして分岐した(が、今のところ完成度はg95の方が上)。
ttp://gcc.gnu.org/wiki/TheOtherGCCBasedFortranCompiler
0965デフォルトの名無しさん
2006/11/10(金) 19:02:47http://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)も教えてください。
0966デフォルトの名無しさん
2006/11/11(土) 00:42:39メルセンヌ・ツイスターの本家ページにC版の半区間を見た記憶があるが、幻かもしれない。
0967デフォルトの名無しさん
2006/11/11(土) 05:19:30http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/MTARCOK/readme-mt.txt
C版の関数を呼ぶなり、移植するなりするということで。
0968デフォルトの名無しさん
2006/11/11(土) 14:10:200970デフォルトの名無しさん
2006/11/11(土) 21:57:020971デフォルトの名無しさん
2006/11/12(日) 17:15:18FORTRAN �W
http://pc8.2ch.net/test/read.cgi/tech/1163319215/
0972デフォルトの名無しさん
2006/11/12(日) 17:27:200973デフォルトの名無しさん
2006/11/12(日) 17:27:520974デフォルトの名無しさん
2006/11/12(日) 17:28:270975デフォルトの名無しさん
2006/11/12(日) 17:29:040976デフォルトの名無しさん
2006/11/12(日) 17:29:370977デフォルトの名無しさん
2006/11/12(日) 17:43:30FORTRANIVはすなわちFORTRAN66だなw
0978デフォルトの名無しさん
2006/11/12(日) 17:56:170979デフォルトの名無しさん
2006/11/12(日) 17:57:190980デフォルトの名無しさん
2006/11/12(日) 17:58:000981デフォルトの名無しさん
2006/11/12(日) 17:58:380982デフォルトの名無しさん
2006/11/12(日) 17:59:490983デフォルトの名無しさん
2006/11/12(日) 18:04:410984デフォルトの名無しさん
2006/11/12(日) 18:33:130985デフォルトの名無しさん
2006/11/12(日) 18:33:480986デフォルトの名無しさん
2006/11/12(日) 18:37:340987デフォルトの名無しさん
2006/11/12(日) 18:38:280988デフォルトの名無しさん
2006/11/12(日) 18:39:040989 ◆SHiMA//5DA
2006/11/12(日) 18:48:520990デフォルトの名無しさん
2006/11/12(日) 18:49:270991デフォルトの名無しさん
2006/11/12(日) 18:58:450992デフォルトの名無しさん
2006/11/12(日) 19:00:150993デフォルトの名無しさん
2006/11/12(日) 19:01:260994デフォルトの名無しさん
2006/11/12(日) 19:03:270995デフォルトの名無しさん
2006/11/12(日) 19:05:010996デフォルトの名無しさん
2006/11/12(日) 19:06:420997デフォルトの名無しさん
2006/11/12(日) 19:07:340998デフォルトの名無しさん
2006/11/12(日) 19:08:160999デフォルトの名無しさん
2006/11/12(日) 19:22:161000デフォルトの名無しさん
2006/11/12(日) 19:22:2710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。