[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 12:09 / Filesize : 350 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれFORTRAN(超初心者用)その2



1 名前:デフォルトの名無しさん [2006/11/22(水) 00:00:36 ]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。

●注意事項
・質問する前にGoogle等の検索サイトで検索しましょう。
・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。
・エラーの場合は起きた状況、環境(OS・コンパイラ)、エラーメッセージも詳しく書きましょう。


●前スレ
くだすれFORTRAN(超初心者用)
pc8.2ch.net/test/read.cgi/tech/1138063703/

●関連スレ
FORTRAN W
pc8.2ch.net/test/read.cgi/tech/1163319215/


830 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 03:29:22 ]
定説はないので計ってみるしかない
自分の僅かな経験では
(1)Intel Fortran Compilerと(2) f2c + gccについて
自分の書いたソースで比べたところ(1)の方が速かった

831 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 16:42:57 ]
すいません。
計算終了時に何かしら音が出るようにしたいのですが、
何かBEEP音のようなものを出す命令はないのでしょうか。

832 名前:829 mailto:sage [2007/09/28(金) 02:06:46 ]
>>830
経験談ありがとうございます
時間のとれるときにじっくり計測してみたいと思います

833 名前:デフォルトの名無しさん [2007/09/30(日) 01:30:11 ]
メモ帳でプログラムを組んでるんですが、インデントの感じが気に入りません。
Emacsみたいなフリーで手に入ってWindows XPで動くようなエディタはありませんか?

834 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 01:45:58 ]
>>833
気に入らないも何もメモ帳はインデントしてくれないだろ?
Emacsみたいなのが欲しいのなら、windowsで動くemacsクローンはMeadowとかいろいろある。

835 名前:833 [2007/09/30(日) 09:48:23 ]
notepadのインデントはtabをおしたら何行も進むという意味です。

meadowとxyzzyならどっちがいいでしょうか?

836 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:49:56 ]
>>835
手動インデントのことだったのか。てっきり自動インデントのことかと思った。
でも、タブで何行も進む?本当にそれはメモ帳?
835の「いい」の基準が分からないから実際にmeadowとxyzzyの両方を使ってみて気に入った方にすればいい。
慣れとかの点でemacs系を選択しようとしているんだと思うが、
emacsに拘らないのならメモ帳でソース書くよりは全然マシなフリーなエディタはwindowsにいくらでもあるぞ。
FORTRANに特化したものは無くてもFORTRANモード的なものを持ったものは何もemacsだけではない。

837 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 18:37:01 ]
メモ帳はTABキーを押しても「タブ文字」が挿入されるだけ。

838 名前:833 [2007/09/30(日) 21:19:56 ]
とりあえず、サクラエディタを入れてみました。
質問に答えていただいてありがとうございました。



839 名前:デフォルトの名無しさん [2007/10/02(火) 13:29:19 ]
www.coastal-env.k.u-tokyo.ac.jp/koibuchi/fortran95/fortran77.htm

Fortranを始めようと思ってこのページにある方法でやろうとしているのですが
うまくいきません。

WRITE(*,*) 'TEST'
END
と入力してコンパイルしようとしても
「コンパイルに失敗しました
ファイルC:\.....\fotran.exeは存在しません」
と言われて実行することが出来ません。
これはどうすれば良いのでしょうか?
いますぐFortranを練習する必要があり、困っています。
どなたかお願い致します。


840 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 14:00:49 ]
>>839
fortran.exeがどこにあるか検索してみては?
そんなに急ぐなら、周りの友達に飯でも奢って助けてもらったら?


841 名前:デフォルトの名無しさん [2007/10/02(火) 14:12:49 ]
>>840
fortran.exeの場所はちゃんと指定しています。
コンパイルして作成されるはずの実行ファイルがないと
言われているのですが。
それと
周りにfortranを扱える人はいません。



842 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 14:37:30 ]
コンパイルして作成されるはずの実行ファイルがC:\.....\fotran.exeなの?
それはコンパイラ自身じゃないの?
FORTRAN処理系が何で、どういうインストールの仕方をして、
どこに何というソースファイルを作って、どういうふうにコンパイルをしたか、
詳しく書かないと原因がよくわからない。
単にWindowsのコマンドプロンプトの使い方が分かってないだけの問題ということはない?

843 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 14:44:14 ]
WRITE(*,*) 'TEST'とENDの前に6つのスペース入れていないに1票

844 名前:デフォルトの名無しさん [2007/10/02(火) 15:01:19 ]
>>843
ありがとうございます。
スペースを入れるとうまくいきました。

でも
ace.phys.h.kyoto-u.ac.jp/~tomita/education/fortran90/examples/ex1_1.f90

このページにあるプログラムをそのままコピペして使おうとしても
なぜか同じエラーが出てしまうのですが
これはなぜなのでしょうか?
スペースはちゃんと入っているはずなのですが


845 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 15:10:19 ]
なんでそれで
「コンパイルに失敗しました
ファイルC:\.....\fotran.exeは存在しません」
なんてエラーメッセージがでるんだよw

846 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 15:30:46 ]
>>844
Fortran77のコンパイラでFortran90のコードをコンパイルするのは無理だと思いますよ。
FTN95でもインストールして見てはいかがですか?

>>845
おまい、頭悪いな。>>839がコードのファイル名をfotran.for'として
保存したからに決まってるだろw


847 名前:デフォルトの名無しさん [2007/10/02(火) 15:47:00 ]
Fortran90とFTN95って
どちらの方が新しいのでしょうか?


848 名前:844 [2007/10/02(火) 16:01:30 ]
そんなに特殊な記述を使わない限り90の記述でも
77で使えると聞いたのですが違うのでしょうか?
一体どこの部分を治せばコンパイル可能になりますか?

!----- Ex1_1: 3種類の平均値 -----
PROGRAM Example_1_1
REAL :: a, b, av1, av2, av3
READ *, a, b
av1 = (a + b)/2.0
av2 = (a*b)**0.5
av3 = 2.0/(1.0/a + 1.0/b)
PRINT*, av1, av2, av3
END





849 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 16:19:57 ]
>>848
REALから始まる行を削除すればいい。

850 名前:デフォルトの名無しさん [2007/10/02(火) 16:24:48 ]
>>849
やってみました。
でもうまくいかないようなんですが・・・


851 名前:デフォルトの名無しさん [2007/10/02(火) 16:45:54 ]
www.silverfrost.com/11/ftn95/ftn95_fortran_95_for_windows.asp
を使ってみましたが
それでもうまくいきません。
なんなんでしょうか?これは?


852 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 16:51:26 ]
>>846
「コンパイルに失敗しました」はコンパイラの吐くエラーだし
作られたはずの実行ファイルが無いというメッセージはコンパイラが吐くとは思えないんだが

853 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 17:52:13 ]
>>851
普通にそのコンパイラで>>844のコードも>>848のコードも動きました。
付属のPlato3起動して左上のマウスを乗せるとNewを表示される白いアイコンをクリック
出てきたウィンドウでFree format Fortran source fileが選択されてる事を確認してOKを押す
>>844をコピペしたら、左上のマウスを乗せるとStartと表示される青い三角アイコンをクリック
適当なファイル名で保存(拡張子は弄らない) 保存後にウィンドウが出るが気にせずOKをクリック
で動かなければ後は白根山

>>852
実行ファイルが無いというメッセージはCpadが吐いてる。

854 名前:デフォルトの名無しさん [2007/10/02(火) 19:24:31 ]
>>853
丁寧な解説ありがとうございます。

しかし


それと同じことはすでに行っているのですが
sakuratan.ddo.jp/imgboard/img-box/img20071002191043.jpg
のようなコマンドプロンプト画面が出てくるだけでプログラムが始まりません。
OSはXPsp2なのですが、それと何か関係があるのでしょうか?


855 名前:854 [2007/10/02(火) 19:31:26 ]
すいません、解決しました。
数値を入力すれば良かったんですね。
ありがとうございます。


でも
>>848-849
のように>>839のコンパイラでうまくいかないのはなぜなのでしょうか?
実際に使用するのはFortran77なので
77に準拠したコンパイラを使いたいのですが。


856 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 21:53:39 ]
>>855
何をやったのか
どんな結果になってうまくいかなかったのか
エラーメッセージが出たらその内容

くらい書かないと「しらねーよ」としか答えられない。

857 名前:デフォルトの名無しさん [2007/10/02(火) 22:06:47 ]
>何をやったのか
>どんな結果になってうまくいかなかったのか
>エラーメッセージが出たらその内容

全部>>839に書いてあるのですが・・・


858 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 23:04:32 ]
>>857
「コンパイルに失敗しました」と表示されたときに
CPadの下の方のメッセージウィンドウに何か表示されてない?




859 名前:デフォルトの名無しさん [2007/10/03(水) 11:42:56 ]
>>858
■C:\Documents and Settings\....\Fortran> ftn77 /link ttt.for
[Salford FTN77/Win32 v4.03, Copyright (c) Salford Software Ltd. 1988-1998]
Licensed to: FTN77 Personal Edition
Department: Non-commercial use only
0001) !----- Ex1_1: 3種類の平均値 -----
0002) PROGRAM Example_1_1
*** Unexpected continuation line (have you got more than 19?)
0007) PRINT*, av1, av2, av3
0008) END
*** Non-blank label field in continuation line
0008) END
0009)
*** Unexpected end of file (END statement assumed)
3 ERRORS [<MAIN@>FTN77 Ver 4.03]

*** Compilation failed

^C

というエラーが出ています。
どうすればいいんでしょうか?

860 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 11:51:10 ]
>>859
1から6カラムまで開けろや!

861 名前:デフォルトの名無しさん [2007/10/03(水) 12:34:36 ]
>>860

すいません、どういう意味ですか?
開けるというのは何を開けるのですか?


862 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 18:12:30 ]
言っちゃ何だが、FORTRANの文法をよく勉強したほうが
いいんじゃないか?

自分のしたいことをコード化できないようじゃ理論ギャップ
があるのかバグがあるのか判断できないじゃまいか。

863 名前:デフォルトの名無しさん [2007/10/03(水) 18:14:39 ]
勉強はするつもりです。
だからとりあえずコンパイラがちゃんと動くしたいのです。


864 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 18:42:19 ]
じゃあ、エラーメッセージ読んで考えろよw

865 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 03:45:16 ]
>>861
>>843

どんな入門書でも最初の数ページ以内に書いてあるような基本的なことだぞ。
ちゃんとしたプログラムが書けなきゃコンパイラがちゃんと動くかどうかも確認できないぞ。

866 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 11:29:36 ]
>>865
Fortran90と混同しているから、教えるのはかなり大変だぞwwww

教育者としての真価が問われる。 神化しないと切れるだろうwwwwwwwwwww


867 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 03:23:05 ]
もやすみちゃん

868 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 01:50:10 ]
関数をサブルーチンの引数とすることはできるのでしょうか?
サブルーチンの引数として被積分関数や積分範囲等を設定できればと思っています。
どなたかわかる方がいらっしゃいましたら、ご教授いただければと思います。




869 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 09:45:37 ]
>>868
制限付きでできる。
external 指定をすればよろし。マニュアル味噌。


870 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 13:13:54 ]
>>869

868です。ご返信ありがとうございます。
EXTERNALの指定で無事うまくいきました。

途中コンパイルがなかなか通らずどうしたものかと頭を抱えましたが、
「EXTERNALの指定でうまくいく!」という道筋を示していただけたおかげで、エラーの原因を他のところに絞り込むことができました。

871 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 11:56:52 ]
転置行列を書くために

program ex2_19
implicit none
integer n, i, j
real(8) , allocatable :: c(:,:),ct(:,:)
read(*, *) n
allocate(c(n, n))
call random_seed
call random_number(c(:,:))
write(*, *) c
allocate(ct(n,n))
do i = 1, n
do j = 1, n
c(i, j) = ct(j, i)
enddo
enddo
write(*, *) ct(:, :)

end program ex2_19
というプログラムを書いたのですがどうしても出力結果が転置行列になりません。
どうしてでしょうか?誰か親切な方お願いします。

872 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 12:58:33 ]
>>871
代入文をよく見直せ。

873 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 16:23:34 ]
>>871
ct = transpose( c )
でもできる。

874 名前:871 mailto:sage [2007/10/08(月) 18:01:42 ]
>>872
c(i, j) = ct(j, i)
のところでしょうか?

875 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 19:11:47 ]
c が元の行列
ct が転置行列
だよな?

876 名前:871 mailto:sage [2007/10/08(月) 20:18:58 ]
>>875
そうです。
cは適当に乱数で決定されるようにしました。

877 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:50:50 ]
> c(i, j) = ct(j, i)
c(i, j) に ct(j, i) の内容を代入

878 名前:871 mailto:sage [2007/10/09(火) 00:23:13 ]
>>877
わかりました!
なんたる初歩的ミス…、頭の悪い質問ですみません。

ありがとうございました。



879 名前:デフォルトの名無しさん [2007/10/15(月) 17:14:30 ]
   K=0         ← こっちが前?
   DO 100 I=1,10
   K=K+I
10  CONTINUE
   WRITE (6,100) K
100 FORMAT(1H ,i5)  ← こっちが前?


880 名前:デフォルトの名無しさん [2007/10/15(月) 17:16:09 ]
プログラムの「前」ってどっちですか?

   K=0         ← こっちが前?
   DO 100 I=1,10
   K=K+I
10  CONTINUE
   WRITE (6,100) K
100 FORMAT(1H ,i5)  ← こっちが前?

881 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 17:23:19 ]
マルチすんなハゲ

882 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 18:36:36 ]
>>879
前とは先頭のほうだw


883 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:11:01 ]
 googleg
G| o o |g
 | L  |
 \_e__/ <ぐぐれかす



884 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 02:22:47 ]
誘導され
>>57
あたりを読みました
FTN95をインストールしました。
plato3(日本語不使用)でコンパイル実行可能でした

fcpadを利用しては出来ないですか?
コンパイラパス
C:\Program Files\Silverfrost\FTN95\ftn95.exe
と入力
コンパイルは通るもののexeファイルが生成されず
おそらく設定の実行付近をいじると出来るのか?と思っていますが

誰か、ご指導願います・・・。


885 名前:884 mailto:sage [2007/10/16(火) 02:40:35 ]
原因は分かりました。
が、解決方法が分からないので教えていただきたいのですが
/LINKがプログラム名の前に入っているため生成が出来ないようです。

【現在】ftn95 /LINK file.f となってしまう
【解決】ftn95 file.f /LINK としたい

解決方法分かる方よろしくお願いします。

886 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 02:44:09 ]
>>884
>>355

fcpadは自由形式のプログラム編集には使えない(向かない)けどな

887 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 00:47:42 ]
割り算の結果がうまく表示されない現象に悩まされています。
integer a,b
character c

write(*,*)'計算式間にスペースを入れて入力'

read(*,*)a,c,b

select case(c)

case('+')
write(*,*)'=',a+b

省略

case('/')
write(*,*)'=',a/b

endselect
stop
end

888 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:33:51 ]
>>887
a,bをINTEGERで宣言しているので、その割り算は切り捨てになる。




889 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 12:04:30 ]
結果自体が表示されないんですが…。
realで宣言しても同じです

割り算以外の演算は問題なしです

890 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 17:37:05 ]
>>889
どのようにおかしいか、出力例も交えて、もっと情報を提供しなさい。
>>887の内容では誰も答えられない。

891 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 17:51:28 ]
>>887
やってみた。

例えば、 4 / 2
と入力しても、case('/')に入らない。
もし
case default
を用意したら、そこに入る。

代わりに
4 "/" 2
あるいは
4 '/' 2
と入力したら
= 2
を返した。


892 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:00:27 ]
ゲイツにきけwwwwwww

893 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 20:08:28 ]
並び順番 READ 文の規則
ttp://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/lr/lr10_03_01_02.htm
>実行中に斜線 (/) が現れると,READ 文は終了し,残りの入力並び項目は変更されないままになります。

894 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 20:46:18 ]
誰か、Fortranで(いろんな意味で)生産性の高いコードを書くコツみたいの、挙げてくれ
Fortranユーザって他の言語に比べてそういうのあんまり意識しなさそうだけど

895 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 21:59:39 ]
>>894
つ www.mri-jma.go.jp/Project/mrinpd/coderule.html

896 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 22:43:34 ]
速度を犠牲にせずに生産性を上げるってのはなかなか難しいね

897 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 23:12:52 ]
>>891
>>893
ありがとうございました。
FORTRAN学びはじめなので細かいところが分からず

898 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:31:50 ]
FortranのIDEみたいな開発環境あるんでしょうか?



899 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 19:35:15 ]
>>898
色々あることはある。
どういうのが望みだ?



900 名前:898 mailto:sage [2007/10/22(月) 22:47:23 ]
あるんですね。やっぱりFortranコードといえど規模が大きくなるとそういうのは必要ですよね。
Visual Studioみたいなデファクトスタンダートのようなものはあるんでしょうか?

>どういうのが望みだ?
今のとこviでカリカリやってるんですが、とりあえず制御文などのチェック機能(自動ハイライトとか)や行番号の管理とかあると助かります。
(でもこの程度だとIDEなんて大げさなものでなくとも、気の利いたエディタならできるのかも・・・)

規模が大きくなるとサブルーチンの管理とか大変ですよね
皆さんどうやってるんでしょうか?

901 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:10:55 ]
>>900
Intel Visual Fortran は visual studio に対応している。
昔はVisualStudioを別売りで買う必要があったが、今は制限版がIntelVisualFortranに付属している。

LaheyのFortranやSilverFrostのFTN95、PGIのVisuialFortranもVisualStudioに対応している。
ttp://www.lahey.com/
ttp://www.silverfrost.com/
ttp://www.pgroup.com/
他の商用コンパイラメーカーも大抵自作の統合環境をつけている。

EmacsもFortranModeがあってシンタックス・カラーリングとかしてくれる。
EclispのFortran環境にはphotranというのがある。
www.eclipse.org/photran/

他にもフリーの環境はある。
昔ロシア人が貧乏人向けにg77とフリー統合環境と廃版英語Textbookを束ねて配っていたのだが、
最近はもう時代遅れか・・・

902 名前:898 mailto:sage [2007/10/23(火) 02:45:05 ]
>>901
ありがとうございます。
Visual Studioに対応してるとは知りませんでした。ちょっとやってみます。

そういえばこれ、当然ながらWindowsでの開発だと思いますが、
Visual C++みたいな独自拡張とかはあるんでしょうか?
せっかく作ったのにLinuxで動かないとなったら困りますよね・・

903 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 02:51:27 ]
色分けやdo-enddoの自動インデントならvimでもやってくれますね。

904 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 11:46:22 ]
>>902
.NET対応版とか、Windows API 呼び出しとかしなければ、常識的な範囲でOK。

905 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 15:25:50 ]
vimのfotranの色づけはデフォルトだとイマイチなんすけど
ドキュメント読むの面倒なんで、お勧め設定晒してもらいませんか?

906 名前:905 mailto:sage [2007/10/23(火) 15:26:50 ]
×もらいませんか
○もらえませんか

907 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 18:11:51 ]
Fortran90ではコメント「c」やCOMMONは使えないんですか?
77の(ほぼ)スーパーセットと聞いたんですが、やってみたら駄目でした。

てことは、77のコードをポートするには一般に結構な書き換えを要する、ってことですかやっぱ

908 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 18:17:28 ]
>>907
先頭cコメントを使うためには、固定形式で記述する必要がある。
中途半端に自由形式を導入していないか?
回答者のために、コンパイラー名を書こう。



909 名前:907 mailto:sage [2007/10/23(火) 18:36:30 ]
>>908
レスありがとうございます。
>先頭cコメントを使うためには、固定形式で記述する必要がある。
そうなんですか。Intel Fortran 9.0なのですが、
固定形式か自由形式かはどうやって決まるんですか?
拡張子(というかsuffix)?

COMMONが使えないというのは勘違いでした。
複数行に渡るときの6列目の文字があるせいでした。90だと行末に&なんですね。


結局のところ、「77の(ほぼ)スーパーセット」といのは、77形式できっちり書いた場合の話であって、
90の機能と何でも混ぜていいわけではないんですね。。

910 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 20:44:40 ]
>>909
通常は拡張子が .f .for .ftn の場合は固定形式、 .f90 の場合は自由形式と解釈される。
# ifort は .f95 をソースとして認識しない。
コンパイル時のオプションに -fixed / -free を指定することによって強制的にそれぞれ
固定形式/自由形式の指定をすることも出来る。
また、拡張子を大文字(.F .FOR .FTN .F90)にするとコンパイル前にプリプロセッサで前処理される。

> 90の機能と何でも混ぜていいわけではないんですね。

1つのソースに固定形式/自由形式を混ぜてはいけない。
ただし、別々のファイルにすれば混在させることも出来る。

911 名前:907 mailto:sage [2007/10/23(火) 23:48:50 ]
>>910
ありがとうございます。非常に勉強になりました。

912 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 03:21:45 ]
High Performance Fortranていう仕様があるようですが、どういうところで使われているんですか?
普通のユーザには縁のないものですか

913 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 09:04:39 ]
>>912
90年代に並列プログラミングを考慮した規格として提案された。
日本のスーパーコンピュータメーカはコンパイラをちゃんと作ったが、
アメリカがやる気を見せず崩壊した。

地球シミュレータでもHPFは動いている。というかHPFはESに要求された仕様の一つだったような。


914 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 11:13:06 ]
>>913
崩壊、ですか・・・

推進評議会のサイトを見ると、「ユーザが最小限の指示文によってデータの分割配置の方法を
指定すれば、残る作業(計算の分割と通信の生成)をコンパイラが自動的に行う」とありますが、
分散メモリシステムで必要となる領域分割と通信を自動でやってくれる、ということですか?

今はFortran90+MPIという組み合わせが一般的だと思いますが、これよりも良い性能が出るんですか?

915 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 13:22:45 ]
>>914
MPIはどちらかというと消極的な理由でデファクトスタンダードになった。

ソフトウェア中心主義の視点からは、MPIはハードウェアの抽象度が低いので、
HPFのほうが上位に立つのだが、現実的にはハードウェアへの依存性が高くて逆転する。


ここに過渡期に実務で使った人の比較意見が載ってる。
ttp://grape.mtk.nao.ac.jp/~makino/articles/future_sc/note031.html#rdocsect36

916 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:03:35 ]
>>915
消極的ですか。確かにそんな気もしますね
OOPの可能性にwktkするも、性能とのトレードオフに嘆き、手続き型も含めた現実的な方法に帰着する、という話と似てるかも

ところでそのサイト見ていつも思うんですが、マ○ノさんてすごい人ですよね
ここまでコアな人はなかなかいないと思う

917 名前:912=914=916 mailto:sage [2007/10/24(水) 16:04:56 ]
>>915
スイマセン、お礼言うの忘れてました。
どうも有難うございました。

918 名前:デフォルトの名無しさん mailto:age [2007/10/28(日) 19:52:11 ]
WRITE文で改行しない標準FORMATを使いたいのですがどうすればよいでしょうか?
具体的には、
WRITE(*,*) 'x = ', x
という文を改行なしで表示したいのです。ここで、xはDOUBLEで、
xの大きさによって浮動小数点表示と固定小数点表示をコンパイラが判断して欲しいです。
よろしくお願いします。



919 名前:デフォルトの名無しさん [2007/10/28(日) 22:10:09 ]
>>918
改行しないのはFAQ このスレでも何度も出ている。
Fortran90 では、ADVANCE='NO' 

数値の大きさでフォーマットを変えるのは G Format これが77時代からある。

サンプル

PROGRAM unko
IMPLICIT NONE
REAL :: x, y
x = 0.1
y = 1.234567e11
WRITE(*, '(A, G15.5)', ADVANCE = 'NO') 'x=', x
PAUSE
WRITE(*, '(A, G15.5)', ADVANCE = 'NO') 'y=', y
STOP
END PROGRAM unko


920 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 23:32:38 ]
COMMONブロックをモジュールに書き換える作業をしております。その際わからないことがあったので質問させてください。
jjoo.hp.infoseek.co.jp/tips/f90/common_to_module.html
のサイトを参考に進めてきました。現在のプログラムの概略は次のような感じです(巨大なため全文ではありませんがご容赦くださいませ)
module sub
integer i,j
end modeule sub
program main
 use sub
 implicit none
call 1
call 2
end program main
subroutine 1
implicit none
integer i,j
(略)
end
subroutine 2
implicit none
integer i,j
(略)
end
この状態でコンパイル及び動作は出来るのですがサブルーチンにおいて変数部を
subroutine 1
use sub
implicit none
(略)
end
とするとコンパイル時に symbol 'rmax' ai (1) is defined in multiple modules というエラーが出てしまいます。
これはどのように解決したらよいのでしょうか。よろしくお願いします。

921 名前:918 mailto:sage [2007/10/29(月) 23:48:47 ]
>>919
欲しい結果が表示されました。ありがとうございます。

922 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 00:56:45 ]
>>920
それはエラーメッセージに書いてあるがごとく、複数のモジュールの中で同じシンボル名を
重複して使っているという事だろう。


コモンブロックに当たるモジュールは1個だけ作って、それをUSEで呼び出せばいい。
コモンのときは全副プログラムにコモンを置かねばならなかったが、もジュールは違う。


923 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 14:05:25 ]
CHARACTER*(*) HOGE のように、配列数が(*)となっているのはどういう意味なんでしょうか
動的に確保するということでしょうか?

924 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 01:18:34 ]
>>923
HOGEの長さは
HOGEが定数の場合、PARAMETER文で指定された文字列の長さ。
HOGEが副プログラムの仮引数の場合、対応する実引数と同じ長さ。
HOGEが関数副プログラムの場合、その関数を使用する側で予め決められた長さ。

925 名前:920 mailto:sage [2007/10/31(水) 05:54:42 ]
>>922
遅くなって申し訳ありません。レス有り難うございました。
なるほど、モジュールは一度読み込めばよいと言うことだったんですか。
そこで、サブルーチン中のuse文を消してみたところ
そのエラーは吐かなくなりました。
その代わり
x0(n)=2.d0*rn
 1
Unexpected array Reference at (1)
と言ったようなエラーが出るようになってしまいました。エラー文では配列の参照がおかしいみたいなことを書いてますがどのようなことなのでしょう。
内容が同じ物をcommon文としてかいた時は問題なく動作したので
配列の宣言がおかしいってこともないと思うのですが・・・

926 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 10:58:31 ]
>>923
FORTRAN90以前では、基本的に変数は参照渡しで、実際には先頭番地しか渡していない。
また呼び出し側と呼び出される側での引数の整合性もチェックしていない。
さらに実行時にも、デバッグオプションをつけない限り、はみだしチェックのようなことはやってない。

したがって、副プログラム側では、引数の大きさはどうでもいいことになる。
このためFORTRAN66あたりまでのプログラムでは、配列にも適当な長さを指定するのが伝統だった。
(文字列は、まだ存在しなかったので・・・というか整数型に突っ込んでいた・・・・質問から外れるが)

というわけで、FORTRAN77規格で、それを明示的に指定した書式が(*)だ。(とおもうw)
長さ『*』は、『適当』という意味だ。文字列のみならず数値型配列の最後の要素にも使える。

Fortran90以後は、色々コンパイル時のチェックが入るようになって、PASCALみたいでうぜぇという人達もいる。
最近のスクリプト言語は、型にゆるいのが多いが、昔のFORTRANに先祖がえりしているのである(嘘w


927 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 11:01:20 ]
>>925
モジュールの宣言は1個で、USEは使うルーチンごと毎回だ。
カスケード的にUSEしているなら、深いほうで1回読んでおけばいい。


928 名前:923 mailto:sage [2007/10/31(水) 18:13:56 ]
どうもありがとうございます。

>>924
>HOGEが定数の場合、PARAMETER文で指定された文字列の長さ。
HOGEをHOGE="hoge"と変数にしたら駄目でした。定数しか駄目なんですね。

>>926
ということは、サブルーチン仮引数の配列は全部*にすれば、配列サイズの違いに悩まされることもないのですよね?
例題などで、配列を10などと明示的に指定しているのを多く見かけるのですが・・・



929 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 23:21:08 ]
>>928
>ということは、サブルーチン仮引数の配列は全部*にすれば、配列サイズの違いに悩まされることもないのですよね?
>例題などで、配列を10などと明示的に指定しているのを多く見かけるのですが・・・
いや、別に10のままでも、本質的には何も変わらない。
どっちにしろ配列の先頭アドレスしか渡さないので、サイズの違いに悩まされることは無い。

あと、多次元配列の場合、最後の次元以外は一応意味があるので、ちゃんと指定しないといけない。
ただ、FORTRAN77では整合寸法を別に引数で送るのが適切とされている。


930 名前:デフォルトの名無しさん [2007/11/01(木) 01:12:57 ]
何が原因かわからないのですいませんがどこが間違ってるのかご指摘お願いします.
縦300横10の配列を読み込んで,ただの列にしたいだけなんです.
エクセルを使えば,FORTRAN使うほどのことでもないのでしょうか?
それも含めて教えてください.


program hairetu
open(30,file='a.dat',status='old')
do 10 j=1,10
read(30,*)(b(i,j),i=1,300)
10 continue
close(30)

open(20,file='b.dat',status='new')
do 50 i=1,300
do 40 j=1,10
write(20,*)b(i,j)
40 continue
50 continue
close(20)

stop
end






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<350KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef