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
c hariso.f で(単純支持された)柱のオイラー座屈を解かせるための
c 入力データを作るプログラム。oiraso を実行させると oiraso.d という
c データファイルができるから、harisen10とかの材料でこれをやると
c ポアソン比が1を越えたりするので注意。
c つまりE/G>10とかの時点で等方性材料になり得ない。
poi=0.d0
c せん断補正係数:pak
pak=10.d0*(1.d0+poi)/(12.d0+11.d0*poi)
c せん断変形の影響を無視した答えが欲しいときは、
c pak=pak*1.d10 みたいに1より極端に大きくする
c 軸長:ell
ell=10.d0
c 断面の桁幅:b
b=0.1d0
b=5.d-2
c 断面の桁高:h
h=0.5d0
h=25.d-2
c 断面積:a
a=b*h
c x軸(強軸)回りの断面二次モーメント:xi
xi=b*h**3/12.d0
c Trahair の解と比較するために面内変位を無視するときは
c xi を仮想的にyiに対して極端に大きくする
c xi=xi*1.d6
c そのようにxiが極端に大きい場合は面内にたわまないから
c その場合は曲げ面内(yz面)のせん断変形の影響も微少になるだろう
c
c y軸(弱軸)回りの断面二次モーメント:yi
yi=h*b**3/12.d0
c 長方形断面のねじり定数:cj, そりねじり定数:wi
call kukei(b,h,cj,wi)
ea=e*a
eix=e*xi
eiy=e*yi
gj=g*cj
eiw=e*wi
el=ell/float(nofe)
c
c 柱のオイラー座屈公式
eul=(mode*pi/ell)**2*eiy
write(*,*) ' オイラーの座屈解:',eul
c
c write(*,*)' 一発目の弧長を入れて下さい'
c read(*,*) r
write(*,*)' 増分弧長を入れて下さい(目安はオイラー/1000)'
write(*,*) ' Euler/1000=',eul/1000.d0
read(*,*) rn
r=rn
c ### データの出力 ###
open(7,file='oiraso.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) 0.d0, 0.d0, 0.d0
20 continue
write(7,300) e
write(7,300) et
write(7,300) sgmy
write(7,300) sgmu
write(7,300) g
write(7,300) b
write(7,300) h
write(7,*) nhaba
write(7,*) ntaka
write(7,300) a
write(7,300) xi
write(7,300) yi
write(7,300) cj
write(7,300) wi
write(7,300) el
write(7,300) pak
write(7,300) pak
c 比較対照解の種類:nhikak
c nhikak=1:圧縮単純梁のオイラー座屈の解
c nhikak=2:等曲げ円弧アーチの横ねじれ座屈のウラソフの解
c nhikak=3: 片持ち梁の横ねじれ座屈のトラヘアの解(面内変位無視)
nhikak=1
write(7,150) nhikak
c 載荷条件
c 載荷箇所は右端の1箇所
write(7,150) 1
c 右端の節点 nofe+1 では
write(7,150) nofe+1
c Fz に -1 を載荷
write(7,400) 0.d0
write(7,400) 0.d0
write(7,400) -1.d0
write(7,400) 0.d0
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 θxもθyも拘束しなければ、普通は、弱軸回りで座屈すると思う。
c Ix=Iyみたいな断面の場合は、全節点で面外変位を拘束して
c (平面問題にして)座屈する方向を決めてやらないと解が出ないかも。
c そり(ねじれ率)を拘束すべきかどうかは、適宜 判断。
c
c
c 局所系で与えたい境界条件はなし
write(7,150) 0
c
c 画面出力させたい要素
c 要素の左節点を出力させたいのが0箇所
write(7,150) 0
c 要素の右節点を出力させたいのが1箇所
write(7,150) 1
c 右端の要素
write(7,150) nofe
c ファイル出力させたい要素(以下同様)
write(7,150) 0
write(7,150) 1
write(7,150) nofe
ccccc gnuplotで描かせる軸応力を出力させたい要素 ccccc
write(7,150) nofe/2
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
c 長方形断面のねじり定数とそりねじり定数を求める
c 詳細は
c http://www.str.ce.akita-u.ac.jp/~gotou/programoj/#kukei
c
subroutine kukei(tan,tyou,cj,wi)
implicit real*8 (a-h, o-z)
dimension x(1000),y(1000)
c ねじりの応力関数、そり関数の級数の項数:kyuu
kyuu=7
a=tan/2.d0
b=tyou/2.d0
c 短辺/2の分割数:na
c と長辺/2の分割数:nb(偶数)
na=100
nb=100
an=a/float(na)
bn=b/float(nb)
f=an*bn
pi=2.d0*asin(1.d0)
do 10 i=1,na
x(i)=an*i -an/2.d0
10 continue
do 20 j=1,nb
y(j)=bn*j -bn/2.d0
20 continue
c
xi=0.d0
yi=0.d0
pj=0.d0
ww=0.d0
do 100 l=1,na
do 100 m=1,nb
xl=x(l)
ym=y(m)
call sori(kyuu,a,b,xl,ym,pi,w)
ww=ww+w**2*f
100 continue
wi=ww*4.d0
c
call timj(kyuu,a,b,pi,tj)
bt33=tyou*tan**3/3.d0
cj=tj*bt33
write(*,500) ' ねじり定数(Timoshenkoの長方形断面): ',cj
write(*,500) ' ねじり定数(薄肉の近似:bt^3/3): ',bt33
write(*,500) ' そりねじり定数(断面積分): ',wi
write(*,500) ' そりねじり定数(薄肉近似:(bt)^3/144):',
& (tyou*tan)**3/144.d0
c (bt)^3/144 というのは _|_ 型断面の出っ張り | の厚さを
c 0 としたそりねじり定数
500 format(a,1pd15.7)
return
end
c
c ******* ねじり定数 ********
c Timoshenko が計算した正解
c 手で積分して、級数も極限を取れる部分は取ってある
c 極限を取れない級数は、19項まで
subroutine timj(kyuu,a,b,pi,tj)
implicit real*8 (a-h, o-z)
tj=0.d0
do 10 n=1,kyuu,2
tj=tj+1.d0/n**5*tanh(n*pi*b/2.d0/a)
10 continue
tj=1.d0-192.d0/pi**5*a/b*tj
return
end
c
c
c ******** そりねじり定数 **********
c 正規化そり関数の級数について和を取る
subroutine sori(kyuu,a,b,x,y,pi,w)
implicit real*8 (a-h, o-z)
w=0.d0
do 10 n=1,kyuu,2
w=w+(-1.d0)**( (n+1)/2 )/ n**3 *
& sinh(n*pi*y/2.d0/a) / cosh(n*pi*b/2.d0/a)
& *sin(n*pi*x/2.d0/a)
10 continue
w=32.d0*a**2/pi**3* w + x*y
return
end
c