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

FORTRAN III

レス数が1000を超えています。これ以上書き込みはできません。
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/
09519502006/11/08(水) 17:51:39

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

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

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

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

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

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

%.o:%.f

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

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

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

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

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

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


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


0967デフォルトの名無しさん2006/11/11(土) 05:19:30
C版にはあるみたいだね。
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/MTARCOK/readme-mt.txt
C版の関数を呼ぶなり、移植するなりするということで。
0968デフォルトの名無しさん2006/11/11(土) 14:10:20
mt19937ar.fは全部入り
09699652006/11/11(土) 16:54:27
>>966-968
ありがとうございます。
mt19937ar.fを使ったらうまくいきました。
0970デフォルトの名無しさん2006/11/11(土) 21:57:02
そろそろ次スレが要るな。
0971デフォルトの名無しさん2006/11/12(日) 17:15:18
次スレ

FORTRAN �W
http://pc8.2ch.net/test/read.cgi/tech/1163319215/
0972デフォルトの名無しさん2006/11/12(日) 17:27:20
 
0973デフォルトの名無しさん2006/11/12(日) 17:27:52
 
0974デフォルトの名無しさん2006/11/12(日) 17:28:27
 
0975デフォルトの名無しさん2006/11/12(日) 17:29:04
 
0976デフォルトの名無しさん2006/11/12(日) 17:29:37
 
0977デフォルトの名無しさん2006/11/12(日) 17:43:30
ちゃんと最後まできっちり使えよ!

FORTRANIVはすなわちFORTRAN66だなw
0978デフォルトの名無しさん2006/11/12(日) 17:56:17
 
0979デフォルトの名無しさん2006/11/12(日) 17:57:19
 
0980デフォルトの名無しさん2006/11/12(日) 17:58:00
 
0981デフォルトの名無しさん2006/11/12(日) 17:58:38
 
0982デフォルトの名無しさん2006/11/12(日) 17:59:49
 
0983デフォルトの名無しさん2006/11/12(日) 18:04:41
CONTINUE
0984デフォルトの名無しさん2006/11/12(日) 18:33:13
 
0985デフォルトの名無しさん2006/11/12(日) 18:33:48
 
0986デフォルトの名無しさん2006/11/12(日) 18:37:34
 
0987デフォルトの名無しさん2006/11/12(日) 18:38:28
 
0988デフォルトの名無しさん2006/11/12(日) 18:39:04
 
0989 ◆SHiMA//5DA 2006/11/12(日) 18:48:52
 
0990デフォルトの名無しさん2006/11/12(日) 18:49:27
 
0991デフォルトの名無しさん2006/11/12(日) 18:58:45
 
0992デフォルトの名無しさん2006/11/12(日) 19:00:15
 
0993デフォルトの名無しさん2006/11/12(日) 19:01:26
 
0994デフォルトの名無しさん2006/11/12(日) 19:03:27
 
0995デフォルトの名無しさん2006/11/12(日) 19:05:01
 
0996デフォルトの名無しさん2006/11/12(日) 19:06:42
 
0997デフォルトの名無しさん2006/11/12(日) 19:07:34
 
0998デフォルトの名無しさん2006/11/12(日) 19:08:16
 
0999デフォルトの名無しさん2006/11/12(日) 19:22:16
do 1000 i =1 ,n
1000デフォルトの名無しさん2006/11/12(日) 19:22:27
STOP
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。