トップページ⇒tech
1001コメント411KB

FORTRAN III

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
FORTRAN総合スレッドです。
FORTRAN77/90/95/2003, HPF等、FORTRAN全般に関する話題を書き込んで下さい。

・前スレ
FORTRAN II
http://pc5.2ch.net/test/read.cgi/tech/1068351911/
Fortran
http://pc2.2ch.net/test/read.cgi/tech/1003214738/
0685お願いします;;2006/01/27(金) 00:09:07
>>684
すみません 
まったくわかりません・・・わかろうとしてないかも・・・
意味不明なんです・・・
UNIXが、フォートランが・・・ 
0686デフォルトの名無しさん2006/01/27(金) 00:24:22
教えないほうが本人の為になりそう。自分で考えない馬鹿は学校行かなければいいのに
0687お願いします;;2006/01/27(金) 00:31:50
頼む! 金が無いんだよ・・・ 留年するための・・・
0688デフォルトの名無しさん2006/01/27(金) 00:32:40
>>678
>>680
ありがとうございました。
暇をみて手を出してみます。
0689デフォルトの名無しさん2006/01/27(金) 00:41:37
>>687
なんでそのガッコにいったの?
0690お願いします;;2006/01/27(金) 00:44:03
とりあえず大学へ・・・ の流れですorz
ごめんなさい、卒業したいです;;
0691デフォルトの名無しさん2006/01/27(金) 01:03:34
こんな問題も解けない奴に学士号を与えて世間に出されてはこちらが迷惑です。
お願いですからもう一年がんばって下さい。
0692お願いします;;2006/01/27(金) 01:10:51
板汚してすみませんでした。

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

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

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

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

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

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

こまぎれでわかんねが rk4 か first の問題でね?
0700デフォルトの名無しさん2006/01/30(月) 23:31:58
shuuron2 って・・・ 今頃プログラムつくってて大丈夫なのか?
0701デフォルトの名無しさん2006/01/31(火) 01:18:58
>>700
なかなかチェックが厳しい。
中間報告(春の学会発表とか)でがんばっているM1 だろう。
0702デフォルトの名無しさん2006/01/31(火) 01:40:49
>>698
F77形式の上に、暗黙の型宣言を守っていないので、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
>>702
デジャブかな?どっかで同じような光景が…
0705デフォルトの名無しさん2006/01/31(火) 10:05:26
>702
implicit none をつけたとしても、暗黙の型宣言は守ったほうがいいな。
FORTRANの場合、型の宣言がルーチンの頭部に限定されているので、
いちいちそこを参照するのが面倒くさい。つまりローカルに解決しない。

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

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

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

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


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

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

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

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

112 FORMAT (2I3,2F7.4)

で、読みこみファイルは

1 5 0.02 0.20 NSYM NSYMS STEP VSTEP

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

END

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

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


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

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

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

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

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

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

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

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

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

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

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

暗黙の型宣言とcommon(もし使ってるなら)を無くすだけでも効果的だよ。
0761デフォルトの名無しさん2006/02/09(木) 19:18:08
divide and conquerっすね
0762デフォルトの名無しさん2006/02/09(木) 22:52:23
>>759
・subchk argchk をかける。
・数値パラメータを巨大にする。
(誤差が有効桁の誤差か、バグによるものか区別できることがある。)
・長引くとき、必ず頭を切り替えるような休息を入れる。
(長引くのは勘違いして無関係なところを探していることが多いから。)
0763デフォルトの名無しさん2006/02/10(金) 10:13:48
>>759
配列まわりを疑う。
バグの過半数は配列まわり。
0764デフォルトの名無しさん2006/02/14(火) 06:11:00
配列まわりなんてほとんど全部になるなじゃ
0765デフォルトの名無しさん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:19
common使わないでモジュールで宣言してuseで共有すればいいじゃん。
07677652006/02/14(火) 18:02:15
>>766
すいません、できました。ありがとうございます!
昨日から始めたので、なかなか頭が回りませんでした。
0768デフォルトの名無しさん2006/02/15(水) 20:13:19
すべての配列をALLOCATEで割り付けばあい、
計算速度は速くなるかおそくなるかどっち?
0769デフォルトの名無しさん2006/02/15(水) 20:15:23
頻繁にやらなければ体感できないでしょう
0770デフォルトの名無しさん2006/02/15(水) 20:17:31
それらの配列は、常に使用しているんだけど。。
0771デフォルトの名無しさん2006/02/15(水) 20:23:49
dimensionで配列を宣言したときに、メモリのどこかが確保されると聞きました。
メモリには、記憶する領域と計算するための領域があるとも聞きました.
そこで、教えて欲しいんですが、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:13
知らないのならよし
0775デフォルトの名無しさん2006/02/15(水) 22:45:12
動的変数はAUTOMATIC型はスタック領域に、ALLOCATE型はヒープ領域に
とられたような気がする。AUTOMATICの法は確実にヒープ領域。

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

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

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


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

 The G95 project (Fortran95)
 http://www.g95.org/

 GCC (g77) (今のところ FORTRAN77)
 http://gcc.gnu.org/

 Salford FTN77/95 Personal Edition (Fortran77/95, Windows, 要登録)
 http://www.salfordsoftware.co.uk/software/downloads/compilers.html
 FTN77/95のインストール方法
 http://www.coastal-env.k.u-tokyo.ac.jp/koibuchi/fortran.htm

 the F Programming Language (Fortran90のサブセット, Win/Linux/Solaris)
 http://www.fortran.com/F/compilers.html

 Open Watcom Fortran Compiler (FORTRAN77)
 http://www.openwatcom.org/

 Intel Fortran Compiler (Fortran95, 無料評価版(Win)/非商用バージョン(Linux), 要登録)
 http://www.xlsoft.com/jp/products/download/download.html

 Lahey/Fujitsu Fortran (期限付きトライアル版, Win/Linux, 要登録)
 http://www.lahey.com/downloads.htm
07797782006/02/17(金) 19:42:26
連カキコすみません..

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

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

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

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

まあ、どっちも中身がGCCなんで最適化は期待できんが。
■ このスレッドは過去ログ倉庫に格納されています