【fortran】フーリエ級数について
こんばんは。
早速ですが、質問させて頂きます。
学校の課題で一次元熱伝導方程式のプログラムを組みなさいという課題が出たのですが、入力、出力のプログラムが上手く書けずに困っています。
自分で何回もやってみたのですが、「ループがベクトル化されました」としか出ず、どこが間違っているのかも分からない状況です。
詳しい方、教えて頂ければ幸いです。
下に自分が作成したプログラムを載せておきます。
program heat
implicit none
integer i, n, nmax
real(8) t0, t1, d, time, a, h, p, q, an0, kn, bn, en
integer, parameter :: id = 100
real(8), parameter :: pi = 3.1415926535d0
real(8), parameter :: lambda = 2.5d-6, rho = 2500.d0, c = 2.35d-7
real(8), parameter :: expmax = 50.d0
real(8) x(0:id), t(0:id)
!
! Data input part (t0,t1,d,a,time,nmax)
!
t0=300.0d0 ! degrees
t1=200.0d0 ! degrees
d =100.0d0 ! m
time=1.0 ! year
time = time *365.0d0*24.0d0 ! year --> hour
nmax=1000
a = 1.0d6 ! Area of rock surface [m^2]
h=d/id
do i=0,id
x(i)=i*h
t(i)=t1
end do
p=0.0d0
q=0.0d0
do n=1,nmax,2
an0=4.0d0/(n*pi)*(t0-t1)
kn=n*pi/d
bn=lambda*kn*kn/(rho*c)
if(bn*time.le.expmax) then
en=exp(-bn*time)
else
en=0.0d0
endif
do i=0,id
t(i)=t(1)+an0*sin(kn*x(i))*en
enddo
p=p+an0*kn*en
q=q+an0*kn/bn*(1.0d0-en)
enddo
p=lambda*a*p
q=lambda*a*q
open(20,file=‘output.dat’)
write(20,*) ‘x(i),t(i),p,q' = ‘, ‘x(i),t(i),p,q'
close(20)
stop
end program heat
お礼
cos = ( 1.2*5.6+3.4*7.8)/sqrt((1.2*1.2+3.4*3.4)*(5.6*5.6+7.8*7.8))=0.9531.... 再度計算し直したらちゃんと実行結果の値と同じになりました。こちらのケアレスミスでした。ありがとうございました。