現在、fortranにて、変位応答スペクトルを作成しようと頑張っているのですが、

その前段階として、Newmarkのβ法により

変位、速度、加速度を求めるプログラムを作成いたしました。


こんな感じで。





real h,w,dt,Sacc(0:3000),beta,pi,T
   real acc(0:3000),vel(0:3000),def(0:3000)
integer i

open(1,file='ELCNN.csv',status='old')



dt =0.02
pi =3.14159265358979

write(*,*) 'beta?'
read(5,*) beta
write(*,*) 'T?'
read(5,*) T
write(*,*) 'h?'
read(5,*) h

w=2*pi/T

open(2,file='acc.csv',status='new')
open(3,file='vel.csv',status='new')
open(4,file='def.csv',status='new')

do 110 i=0,2687
read(1,*) Sacc(i)
110 continue


acc(0)=Sacc(0)
vel(0)=0.
def(0)=0.


do 10 i=0,2687

acc(i+1)=-((Sacc(i)+(w**2.)*def(i)+(2.*h*w+(w**2.)*dt)*vel(i))
& +(h*w*dt+(0.5-beta)*(w**2.)*(dt**2.))*acc(i))
& /(1.+h*w*dt+beta*(w**2)*(dt**2))

vel(i+1)=vel(i)+(acc(i+1)+acc(i))*dt/2.

def(i+1)=def(i)+vel(i)*dt+(0.5-beta)*acc(i)*(dt**2.)
& +beta*acc(i+1)*(dt**2.)


write(2,100) acc(i)
write(3,100) vel(i)
write(4,100) def(i)
100 format(f15.6)
10 continue
stop
end



コピペしたので、多少ずれてますが。


実は、かなり前に、計算結果を出すことはできていたのですが、

久しぶりに回してみたら、うまくできなくて。


よく調べてみても、計算式は合ってるし。


結果的におかしかったのは、「i」に0を含ませていたこと。

だから、最初の条件に0:3000の0を記入がされておりませんでした。


基本的に、


整数の後にはピリオドをつける

分数は使わない


などのことを心がけたほうが良いということを教わりました。