【管理人おすすめ!】セットで3割もお得!大好評の用語集と図解集のセット⇒ 建築構造がわかる基礎用語集&図解集セット(※既に26人にお申込みいただきました!)
ニューマークのβ法から時刻歴波形を求めることができました。ここで、最も関心があるのは応答の最大値です。一方、建物の揺れは固有周期によって変化します。 例えば、T=0.01~3secまで変化させ、それぞれの最大値を求め縦軸を最大値、横軸を固有周期としたグラフを「応答スペクトル」と呼んでいます。そこで、最大値を求める アルゴリズムについて勉強しましょう。
アルゴリズムの確認
最大値を求めたい場合、1つの方法としては初期値を決めておいて その初期値と次の値を比較します。よって、
・初期値>次の値→MAX=初期値
・初期値<次の値→MAX="次の値
・初期値=次の値→MAX=初期値
といった条件分岐が考えられると思います。あとは、データの数だけこの分岐を繰り返すことで そのデータの中での最大値が求められる仕組みです。
早速、Fortranで書いてみる。
さて、ダウンロードしたエディタ(僕はTerapad)を開いてプログラムを書いてみます。 まだコンパイラしていません。とりあえず、「Terapad」を利用している方は
「名前をつけて保存」→保存形式を「全てのファイル」として→「○○.f90」と保存してください。
そうすると、F90ファイルが生成されます。書いたプログラムはこんな感じ。
最大値のアルゴリズムを求める「一例」です。他にも方法はあるので、自分で色々と考えてみましょう。
!最大値を求めるプログラム
program max
implicit none
real a(2000)
real mx
integer i
open(1, file='max.txt',status='old')
!データの読み込み
do i = 1,481
read(1,*) a(i)
end do
!最大値を探索
mx=a(1)
do i =1,481
if(mx < a(i+1))then
mx=a(i+1)
else if(mx > a(i+1))then
mx=mx
endif
end do
!結果の書き出し
Write(*,*) ' max =',mx
close(unit=1)
end program max
max.f90の説明
「mx=a(1)」で初期値を決めています。まずはこの初期値が最大値です。次に「if(mx > a(i+1)thenで、初期値と次の値を比較しています。先ほどの条件を満たしていれば、最大値は次の値「mx=a(i+1)」となります。 しかし、「else if(mx > a(i+1))then」であるならば、最大値は前の「mx=mx」という値になります。ちなみに、このプログラムでは、「mx=a(i+1)」のときの条件を設けていません。本当はあった方がいいのですが、応答解析でめったに ないので、省略しました。「else文」を使って上手く表現できると思うので、気になる人は追加してください。
結果の確認
1行目に適当な数字を入力して「max.txt」を作成してください。その中での最大値を結果として吐き出したら、プログラムは完成です。 次は→「二重ループの例」を勉強しましょう。
有料メルマガを無料で見てみませんか?⇒ 忙しい社会人、学生のためのビルディング・アップデート