Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
enko.f
c hari.f で等曲げを受ける円弧アーチの横ねじれ座屈を解かせるための
c 入力データを作るプログラム。enko を実行させると enko.d という
c データファイルができるから、hari<enko.d と実行させればよい。
c
program enko
implicit real*8 (a-h,o-z)
dimension alp(256),gmm(256),phi(256)
write(*,*) '要素数を入れて下さい'
read(*,*) nofe
write(*,*)'座屈モードを入れて下さい'
read(*,*) mode
write(*,*)'外乱を入れる場合は、その倍率を入れて下さい'
write(*,*)'(0 を入れた場合は座屈点を捜します)'
read(*,*) gmode
write(*,*)'モード計算のための出力が要りますか 要1/不要0 '
read(*,*) modeo
write(*,*)'正の曲げなら+1、負の曲げなら-1を入力'
read(*,*) porn
write(*,*)'中心角を「度」で入れて下さい'
read(*,*) th
pi=2.d0*asin(1.d0)
th=th*pi/180.d0
alp(1)=th/2.d0
alp(2)=alp(1)-3.d0*th/2.d0/float(nofe)
do 5 i=3,nofe-1
alp(i)=alp(i-1)-th/float(nofe)
5 continue
alp(nofe)=-th/2.d0
c 断面定数
c x軸回りの曲げ試験で測定されるヤング率:ex
ex=200.d6
c y軸回りの曲げ試験で測定されるヤング率:ey
ey=ex
c ねじり試験で測定されるせん断弾性係数:g
g=77.2d6
c 軸長:ell
ell=10.244
c 断面積:a
a=9.288d-2
c x軸(強軸)回りの断面二次モーメント:xi
xi=1.1363d-4
c 座屈前の面内変位の影響を無視したVlasovの解と比較するときは
c xi=xi*1.d6 などとして仮想的に面内剛性を極端に大きくする
c
c y軸(弱軸)回りの断面二次モーメント:yi
yi=3.871d-5
c ねじり定数:ej
ej=5.89d-7
c そりねじり定数:wi
wi=5.5869d-7
c
eix=ex*xi
eiy=ey*yi
ea=a*sqrt(ex*ey)
eiw=wi*sqrt(ex*ey)
gj=g*ej
el=ell/float(nofe)
call vlasov(mode,ell,eix,eiy,gj,eiw,th,pi,vln,vlp)
write(*,*)' 修正Vlasov(負) =',vln
write(*,*)' 修正Vlasov(正) =',vlp
eix2=eix*1.d6
call vlasov(mode,ell,eix2,eiy,gj,eiw,th,pi,vln,vlp)
write(*,*)' Vlasov(負)=',vln
write(*,*)' Vlasov(正)=',vlp
write(*,*)' 一発目の弧長を入れて下さい'
read(*,*) r
write(*,*)' 増分弧長を入れて下さい'
read(*,*) rn
c ### データの出力 ###
open(7,file='enko.d')
write(7,150) nofe
write(7,150) mode
write(7,300) gmode
write(7,150) modeo
do 20 i=1,nofe
write(7,200) alp(i), 0.d0, 0.d0
20 continue
write(7,300) ea
write(7,300) eix
write(7,300) eiy
write(7,300) gj
write(7,300) eiw
write(7,300) el
c 比較対照解の種類:nhikak
c nhikak=1:圧縮単純梁のオイラー座屈の解
c nhikak=2:等曲げ円弧アーチの横ねじれ座屈のウラソフの解
c nhikak=3: 片持ち梁の横ねじれ座屈のトラヘアの解(面内変位無視)
nhikak=2
write(7,150) nhikak
c 載荷条件
c 載荷箇所は両端の二箇所
write(7,150) 2
c 左端の節点1では
write(7,150) 1
c Mxに -1*porn を載荷
write(7,400) 0.d0
write(7,400) 0.d0
write(7,400) 0.d0
write(7,400) -1.d0*porn
write(7,400) 0.d0
write(7,400) 0.d0
write(7,400) 0.d0
c 右端の節点 nofe+1 では
write(7,150) nofe+1
c Mx に +1*porn を載荷
write(7,400) 0.d0
write(7,400) 0.d0
write(7,400) 0.d0
write(7,400) +1.d0*porn
write(7,400) 0.d0
write(7,400) 0.d0
write(7,400) 0.d0
c 境界条件
c 両端の二箇所
write(7,150) 2
c 左端では
write(7,150) 1
c u,v,w,θzを拘束
write(7,400) 0.d0
write(7,400) 0.d0
write(7,400) 0.d0
write(7,400) 1.d0
write(7,400) 1.d0
write(7,400) 0.d0
write(7,400) 1.d0
c 右端では
write(7,150) nofe+1
c u,v,θzを拘束
write(7,400) 0.d0
write(7,400) 0.d0
write(7,400) 1.d0
write(7,400) 1.d0
write(7,400) 1.d0
write(7,400) 0.d0
write(7,400) 1.d0
c ただ、これだと面外回転の回転軸が鉛直軸回りになって
c しまって、Vlasovとかの座屈モードと一致しない。で、
c 局所系で与えたい境界条件
c 両端の二箇所
write(7,150) 2
c 左端の要素で
write(7,150) 1
c 左側の回転変位を
write(7,500) 0,1,0,0
c 右端の要素で
write(7,150) nofe
c 右側の回転変位を
write(7,500) 0,0,0,1
c 局所系で与える(アーチの半径軸回りに回転するようにする)
c
c 画面出力させたい要素
c 要素の左節点を出力させたいのが一箇所
write(7,150) 1
c 真ん中(より一つ右の要素)
write(7,150) int(float(nofe)/2.d0)+1
c 要素の右節点を出力させたいのはなし
write(7,150) 0
c ファイル出力させたい要素(以下同様)
write(7,150) 1
write(7,150) int(float(nofe)/2.d0)+1
write(7,150) 0
c 弧長
write(7,100) r
write(7,100) rn
close(7)
150 format(i3)
100 format(f15.5)
200 format(1p3d17.9)
300 format(1pd13.5)
400 format(1pd9.1)
500 format(4i2)
stop
end
c
c
c 修正Vlasov の解析解を求めるサブルーチン
subroutine vlasov(n,blen,eix,eiy,gj,eiw,th,pi,vln,vlp)
implicit real*8(a-h,o-z)
if(th.lt.1.d-6) th=1.d-6
r=blen/th
f=(n*pi/blen)**2*eiw+gj
a=eiy/eix-1.d0+(1.d0/eix-eiy/eix/eix)*f
b=(eiy+(1.d0-2.d0*eiy/eix)*f)/r
c=((n*pi/blen)**2-1.d0/r/r)*eiy*f
d=b**2-4.d0*a*c
vln=(-b+sqrt(d))/2.d0/a
vlp=(-b-sqrt(d))/2.d0/a
return
end