FORTRAN III

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2006/11/08(水) 18:20:57
.SUFFIXES:
.SUFFIXES:.f .c .o
を頭のほうにいれてみるとかどう?
953950:2006/11/08(水) 20:14:06
>>952
どうもありがとう。やってみましたが、うまくいきませんでした。

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

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

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

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

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

%.o:%.f

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

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

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

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

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


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

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


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


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

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