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 hippon.f を改造中.
c
c
c 集成材梁の上下面に軸方向に溝を掘って鋼リブを挿入して補強した剛性梁に
c 温度(と含水による膨張)による荷重を与えて(右下だけを)tyokuon.f に
c 1/4解析させるための入力データを作るプログラム。
c 計算例は
c 後藤文彦,高橋明洋,薄木征三,佐々木貴信:
c 熱膨張・乾燥収縮を受ける鋼板挿入集成 材梁の有限要素解析,
c 第2回木橋技術に関するシンポジウム論文報告集, pp. 97-100, (2003).
c とかだけど、鋼板・集成材境界面の要素の変形が大きすぎるので、
c あまりいい計算例ではない。
c
c O___________x(上下対称面)
c LLLLLL
c LLLLLL
c LLLLLL
c #}LLLL Lが集成材要素(場所によってサイズは3種類)
c #}LLLL #が鋼材要素(サイズは1種類)
c | }が接着剤要素(サイズは1種類)
c y(左右対称面)
c
c 直方体要素の有限要素プログラム tyokuon.f で
c z軸に沿って横たわる片持ち梁の自由端に集中荷重(y方向)を与える問題を
c yz面を対称面とする半解析で解かせるための入力データを作るプログラム。
c このプログラムを実行させると、hippon.d というデータができあがるから
c tyokuonhoge )
c と実行させればよい。
c
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c 03/10/9版
c プログラムを作った人:後藤文彦
c このプログラムは無保証です。
c このプログラムは改造/再配布して構いません。
c 但し、私的利用に留まらない場合は、もとのプログラムが
c http://www.str.ce.akita-u.ac.jp/~gotou/programoj/
c から取ってきたものと分かるように明示して下さい。
c 改造/再配布後も上記の条件を保持して下さい。
c バグの報告は、
c http://www.str.ce.akita-u.ac.jp/~gotou/jpg/meeru.jpg
c にお願いします。
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c
program hippou
implicit real*8 (a-h, o-z)
dimension ijkab(9400),a(3,3),b(3,3),c(3,3),
& e66a(6,6),e66b(6,6),e66c(6,6),
& f(9400*3),fab(6,24),n8(8),
& bt1(24,6),bt2(24,6),bt3(24,6),bt4(24,6),bt5(24,6),bt6(24,6)
c
c スカイラインの1次元配列のサイズは、同じ自由度数でも要素分割
c に依存するので、自由度数から一意には決められない。
c mage.f の要素分割のやり方だと、軸長(z軸)の分割数がxy断面
c の分割数に比べて多いとスパース部分が増える。
c 仮にスパース部分が皆無だったとすると
c およそ自由度×自由度/2のサイズになるが、こんなサイズは想定外。
c 取り敢えず、9400を最大節点数、その3倍を最大自由度数にしておく。
c 具体的な要素分割例としては、(縦+1)×(横+1)×(軸長+1)が、
c (6+1)*(12+1)*(99+1)=9191,(20+1)*(20+1)*(20+1)=9261 など。
c mage.f で幅(半解析だから幅の半分)×高さ×軸長が
c 1*(8〜20)*(50〜100)ぐらいの範囲のものを解く場合、有効数字3桁
c の収束解が得られる要素分割数は 6分割×10分割×100分割ぐらい。
c 図心が節点上に来るようにするには高さ方向の分割数を偶数にする。
c 幅(の半分)に対して桁高が10倍以上高い場合は、幅の分割数は
c 1 でもいいぐらいかも。
c
c 断面横方向の要素分割数:nx
c 断面縦方向の要素分割数:ny
c 軸方向の要素分割数:nz
write(*,*) '要素分割数を入力して下さい'
write(*,*) '(横,縦,軸長の順にコンマ区切りで)'
write(*,*) '例えば、20,4,2'
read(*,*) nx,ny,nz
c 接着剤要素の断面横方向の要素分割数:nxc
c 接着剤要素の断面縦方向の要素分割数:nyc
write(*,*) ' 接着剤要素断面の分割数を入力して下さい'
write(*,*) ' (横,縦の順にコンマ区切りで)'
c write(*,*) ' 例えば、',2,',',ny/2
write(*,*) '鋼板を上下にぶっとおす時の縦の分割数は',ny
read(*,*) nxc,nyc
c 鋼材要素の断面横方向の要素分割数:nxa
c 鋼材要素の断面縦方向の要素分割数:nya
nya=nyc
write(*,*) '鋼材要素の幅方向の分割数を入力して下さい'
write(*,*) ' 標準は 1'
read(*,*) nxa
c 荷重増分:df
c write(*,*) '荷重増分を入力して下さい'
c read(*,*) df
df=1.d0
c 荷重増分ステップ数:nstep
c write(*,*) '荷重増分ステップ数を入力して下さい'
c read(*,*) nstep
nstep=1
c 温度変化:dt
write(*,*) '温度変化を(℃で)入力して下さい'
read(*,*) dt
c 木材含水率変化:dh
write(*,*) '含水率変化を(%で)入力して下さい'
read(*,*) dh
c 梁断面の幅:yoko, 桁高:tate
yoko=100.d-3
tate=400.d-3
c 鋼板の断面の横の長さ:yokoa0, 縦の長さ:tatea0
c 接着剤層の横の長さ:yokoc0, 縦の長さ:tatec0
if( (nxa.eq.nx).and.(nya.eq.ny) ) then
c もし全部鋼材だったら
yokoa0=yoko
tatea0=tate
else
c 鋼材が全部ではないとき
yokoa0=5.d-3
tatea0=400.d-3
yokoc0=1.d-3
tatec0=tatea0
end if
c 鋼材要素の断面の横の長さ:yokoa, 縦の長さ:tatea
c 接着剤要素の断面の横の長さ:yokoc, 縦の長さ:tatec
if( (nxa.eq.0).and.(nya.eq.0) ) then
c もし木材だけだったら
yokoa0=0.d0
tatea0=0.d0
yokoa=0.d0
tatea=0.d0
yokoc0=0.d0
tatec0=0.d0
yokoc=0.d0
tatec=0.d0
else
c 鋼材があるときは
yokoa=yokoa0/nxa
tatea=tatea0/nya
yokoc=yokoc0/nxc
tatec=tatec0/nyc
end if
c 木材要素(分類番号4)の断面の横の長さ:yokob, 縦の長さ:tateb
if( (nxa.eq.nx).and.(nya.eq.ny) ) then
c もし全部鋼材だったら
yokob=0.d0
tateb=0.d0
yokoc=0.d0
tatec=0.d0
else
c 鋼材が全部ではないとき
if(nya.eq.ny) then
c もし鋼板が上から下までぶっとおっていたら
yokob=(yoko-yokoa0-yokoc0)/(nx-nxa-nxc)
tateb=0.d0
else
yokob=(yoko-yokoa0-yokoc0)/(nx-nxa-nxc)
tateb=(tate-tatea0)/(ny-nya)
end if
end if
c 鋼板が底面に貼ってある(左右にぶっとおっている)ようなものは、
c aを木材,bを鋼材に置き換えて90゜回転させて解く。
c
c 梁の軸長:ziku
ziku=10.d0
ziku1=ziku/float(nz)
write(*,*) 'yokoa=',yokoa
write(*,*) 'tatea=',tatea
write(*,*) 'yokob=',yokob
write(*,*) 'tateb=',tateb
write(*,*) 'yokoc=',yokoc
write(*,*) 'tatec=',tatec
write(*,*) 'ziku1=',ziku1
call bunrui(nx,ny,nz,nxa,nya,nxc,ijkab)
c
c ********** 境界条件 *************
c
c 拘束箇所の数:nkasyo
c 同じ節点を定義しなおした場合は、後から定義した方が有効
c 一箇所目で定義した場所を二箇所目で定義しなおすこともできる
c 固定端の面(z=0面)が1箇所
c 固定端面の上辺(x軸)が2箇所目
c 左右対称面(y=0面)が3〜3+nz箇所目
c 固定端面の左端(y軸)が3+nz〜3+nz+ny箇所目
c 上下対称面(x=0面)が3+nz+ny+1〜3+nz+ny+(ny+1)*nz箇所目
c 対称軸(z軸)が3+nz+ny+(ny+1)*nz+1〜3+nz+ny+(ny+1)*nz+nz箇所目
c 対称点(原点)が 3+nz+ny+(ny+1)*nz+nz+1箇所目
kkasyo=3+nz+ny+(ny+1)*nz+nz+1
c 1箇所目の拘束箇所における拘束開始節点番号:kkais1
kkais1=1
c 1箇所目の拘束箇所における拘束終了節点番号:kryou1
kryou1=(nx+1)*(ny+1)
c tyoku.fでは拘束開始点から拘束終了点まで節点番号順に全て
c 同じ拘束条件を与える。要素番号の順番は、最前面最上段左端の節点を
c 1として、右(x)方向に進み、右端まできたらy方向へ1段下の段の左端から
c 右へすすみ、真下の右端までいったら、z方向へ1面奥の面の左上から、
c また同じように1段づつ右へ進み、最下段の右端までいったら、もう一つ
c 奥の面へと進んでいき、一番奥の面の最下段の右端が最終要素番号
c 1箇所目の拘束箇所における拘束条件
c u,v,w 方向の変位をそれぞれ拘束するか開放するか(0/1)
c まず、固定端面のz方向変位のみをすべて拘束する
bu1=1.d0
bv1=1.d0
bw1=0.d0
c 固定端の上下対称線(上辺)のyz方向を拘束する
kkais2=1
kryou2=nx+1
bu2=1.d0
bv2=0.d0
bw2=0.d0
c 上下対称面、左右対称面の拘束箇所はいっぱいあるので、
c 下のデータ出力のところで、doループで直接 書き出す
c
c 因みに、固定端の全ての節点でxy方向の変位を拘束してしまうと、
c (つまり、固定端で材料がちぢめないような境界条件だと)
c w=LP/EAの解からは、ちょっとずれる(要素数を増やしても)。
c
c
c
c ******* 材料定数 *********
c 鋼材の材料定数
c ヤング率:exxa,eyya,ezza
exxa=200.d9
eyya=exxa
ezza=exxa
c ポアソン比:poixya,poixza,poiyza
poixya=1.d0/3.d0
poixza=poixya
poiyza=poixya
c せん断弾性係数:gxya,gxza,gyz
gxya=ezza/2.d0/(1.d0+poixya)
gxza=gxya
gyza=gxya
c
c aに柔性(コンプライアス)行列を入れる
a(1,1)=1.d0/exxa
a(1,2)=-poixya/exxa
a(1,3)=-poixza/exxa
a(2,1)=a(1,2)
a(2,2)=1.d0/eyya
a(2,3)=-poiyza/eyya
a(3,1)=a(1,3)
a(3,2)=a(2,3)
a(3,3)=1.d0/ezza
c
c 鋼材の線膨張率:aa
aa=12.d-6
c 鋼材の温度歪:epa
epa=aa*dt
c
c
c 木材の材料定数(今は確認のため変な値を入れてる)
c ヤング率:exxb,eyyb,ezzb
exxb=0.5d9
eyyb=1.d9
ezzb=10.d9
c ポアソン比:poixyb,poixzb,poiyzb
poixyb=0.2d0
poixzb=0.025d0
poiyzb=0.03d0
c せん断弾性係数:gxyb,gxzb,gyzb
gxyb=0.03d0
gxzb=0.6d0
gyzb=0.7d0
c bに柔性(コンプライアス)行列を入れる
b(1,1)=1.d0/exxb
b(1,2)=-poixyb/exxb
b(1,3)=-poixzb/exxb
b(2,1)=b(1,2)
b(2,2)=1.d0/eyyb
b(2,3)=-poiyzb/eyyb
b(3,1)=b(1,3)
b(3,2)=b(2,3)
b(3,3)=1.d0/ezzb
c
c 木材の軸(繊維)方向の線膨張率:tbz
tbz=3.5d-6
c 木材の軸直角方向の線膨張率:tbx,tby
tbx=30.d-6
tby=30.d-6
c 参考:産業調査会『木材活用事典』(事典出版センター)
c
c 木材の軸(繊維)方向の収縮率(含水率1%当たり):hbz
hbz=0.015d-2
c 木材の軸直角方向の収縮率(含水率1%当たり):hbx,hby
hbx=0.2d-2
hby=0.2d-2
c 参考:木材活用辞典,(株)産業調査会辞典出版センター(1994)
c http://www.cfqlcs.go.jp/technical_information/tree_and_life/wl38.htm
c
c 温度と湿度の変化による木材の歪:epbx,epby,epbz
epbx=tbx*dt + hbx*dh
epby=tby*dt + hby*dh
epbz=tbz*dt + hbz*dh
c
c write(*,*) 'epa,epbx,epby,epbz=',epa,epbx,epby,epbz
c
c 接着剤の材料定数
c 木質複合建築構造技術の開発平成13年度報告書−構造分科会−
c 国土交通省国土技術政策総合研究所、独立行政法人建築研究所、
c (財)日本建築センター, p.101-p.108
c 2.6 接着耐久性に関する検討
c 2.6.3 実験および解析
c (1)ペンギンセメント#1031の木材/ブラスと処理鋼板接着性
c および樹脂硬化物の物性について
c
c ヤング率:exxc,eyyc,ezzc
exxc=2.4d9
eyyc=exxc
ezzc=exxc
c ポアソン比:poixya,poixza,poiyza
poixyc=0.41
poixzc=poixyc
poiyzc=poixyc
c せん断弾性係数:gxya,gxza,gyz
gxyc=ezzc/2.d0/(1.d0+poixyc)
gxzc=gxyc
gyzc=gxyc
c
c aに柔性(コンプライアス)行列を入れる
c(1,1)=1.d0/exxc
c(1,2)=-poixyc/exxc
c(1,3)=-poixzc/exxc
c(2,1)=c(1,2)
c(2,2)=1.d0/eyyc
c(2,3)=-poiyzc/eyyc
c(3,1)=c(1,3)
c(3,2)=c(2,3)
c(3,3)=1.d0/ezzc
c
c サンスター技研株式会社
c ケミカル事業部新規開発グループマーケティング部
c 【#1090 の特徴】
c http://www.sunstar-engineering.com/sunstar-engineering/
c chemical/pdf/secondary.pdf
c
c 接着剤の線膨張率:ac
ac=100.d-6
c 接着剤の温度歪:epc
epc=ac*dt
c
c 鋼材、接着剤、木材の柔性行列の逆行列と、せん断弾性係数をそれぞれ
c 66a,e66c,e66bに代入し、それぞれの応力−ひずみ行列を作る。
call gyaku(a,gxya,gxza,gyza,e66a)
call gyaku(b,gxyb,gxzb,gyzb,e66b)
call gyaku(c,gxyc,gxzc,gyzc,e66c)
c
c 要素ごとの節点温度(湿度)荷重ベクトル:fab(n,24)を求める
c nは以下の分類番号
c yokoa*tateaの鋼材: 1
c yokoc*tateaの接着剤:2
c yokob*tateaの集成材:3
c yokoa*tatebの集成材:4
c yokoc*tatebの集成材:5
c yokob*tatebの集成材:6
call ondo(yokoa,tatea,ziku1,e66a, epa, epa, epa,fab,1,bt1)
call ondo(yokoc,tatea,ziku1,e66c, epc, epc, epc,fab,2,bt2)
call ondo(yokob,tatea,ziku1,e66b,epbx,epby,epbz,fab,3,bt3)
call ondo(yokoa,tateb,ziku1,e66b,epbx,epby,epbz,fab,4,bt4)
call ondo(yokoc,tateb,ziku1,e66b,epbx,epby,epbz,fab,5,bt4)
call ondo(yokob,tateb,ziku1,e66b,epbx,epby,epbz,fab,6,bt6)
c
open(9,file='ondo.d')
write(9,*) '分類番号1〜4の要素の節点温度荷重'
write(9,*) 'fx'
do i=1,22,3
write(9,9) fab(1,i),fab(2,i),fab(3,i),fab(4,i),fab(5,i),fab(6,i)
end do
write(9,*) 'fy'
do i=2,23,3
write(9,9) fab(1,i),fab(2,i),fab(3,i),fab(4,i),fab(5,i),fab(6,i)
end do
write(9,*) 'fz'
do i=3,24,3
write(9,9) fab(1,i),fab(2,i),fab(3,i),fab(4,i),fab(5,i),fab(6,i)
end do
close(9)
9 format(1p6d11.3)
c
c tyokuon.fで出力された節点変位(fort.12に出力)に、ouryogu.fで
c 歪-変位行列と応力-歪行列をかけて各要素の応力を求める時のために、
c 要素分割数、要素ごとの分類番号、分類番号ごとの歪-変位行列を
c フォーマットなしでfort.11に書き出しておく。
write(11) nx,ny,nz,ijkab,e66a,e66b,e66c,bt1,bt2,bt3,bt4,bt5,bt6
rewind(11)
c
c 要素ごとの節点温度荷重を(要素の8節点の節点番号ごとに割り振って)
c 重ね合わせて全体の温度荷重ベクトル:f
c を求める
c 全節点数:nset
nset=(nx+1)*(ny+1)*(nz+1)
c 全自由度数:nziyuu
nziyuu=nset*3
do 71 i=1,nziyuu
f(i)=0.d0
71 continue
c
do 1001 k=1,nz
do 1001 j=1,ny
do 1001 i=1,nx
n8(1)=(nx+1)*(ny+1)*(k-1)+(nx+1)*(j-1)+i
n8(2)=n8(1)+1
n8(3)=n8(1)+(nx+1)
n8(4)=n8(3)+1
n8(5)=n8(1)+(nx+1)*(ny+1)
n8(6)=n8(2)+(nx+1)*(ny+1)
n8(7)=n8(3)+(nx+1)*(ny+1)
n8(8)=n8(4)+(nx+1)*(ny+1)
c
ijk=nx*ny*(k-1)+nx*(j-1)+i
nab=ijkab(ijk)
c
do 1001 m=1,3
do 1001 jj=1,8
j24=(n8(jj)-1)*3
c s(i24+l,j24+m)=s(i24+l,j24+m)+sm(l,m,ii,jj)
jj1=jj-1
f(j24+m)=f(j24+m)+fab(nab,3*jj1+m)
1001 continue
c
c
c ***** 出力の設定 *****
c 比較のために出力したい梁−柱理論値:nhikak
c nhikak=1: w 方向に引っ張った時の先端の伸びを出力
c nhikak=2: y 方向に曲げた時の先端のたわみを出力
c nhikak=3: x 方向に曲げた時の先端のたわみを出力
nhikak=2
c
c
c 変位を画面出力したい節点の数:ngamen
ngamen=1
c 1つ目の出力したい節点番号:ngame1
ngame1=(nx+1)*(ny+1)*nz
& +1
c
c 変位をファイル出力したい節点の数:nfairu
c 例えば、先端の節点すべてだったら:
nfairu=(nx+1)*(ny+1)
c 1つ目の出力したい節点番号:nfair1
nfair1=(nx+1)*(ny+1)*nz+1
c
c
c hippon.f 用の入力データを hippon.d というファイルに出力する
c
open(7,file='hippon3.d')
write(7,1000) nx
write(7,1000) ny
write(7,1000) nz
c 全要素数:nyou
nyou=nx*ny*nz
do 70 i=1,nyou
write(7,1000) ijkab(i)
70 continue
write(7,500) yokoa
write(7,500) tatea
write(7,500) yokob
write(7,500) tateb
write(7,500) yokoc
write(7,500) tatec
write(7,500) ziku
c
c 境界条件
write(7,1000) kkasyo
write(7,1000) kkais1
write(7,1000) kryou1
write(7,500) bu1
write(7,500) bv1
write(7,500) bw1
write(7,1000) kkais2
write(7,1000) kryou2
write(7,500) bu2
write(7,500) bv2
write(7,500) bw2
c 上下対称面(zx面)のy方向変位を拘束
do k=1,nz
write(7,1000) (nx+1)*(ny+1)*k+1
write(7,1000) (nx+1)*(ny+1)*k+nx+1
write(7,500) 1.d0
write(7,500) 0.d0
write(7,500) 1.d0
end do
c 固定端の左右対称面(y軸)のx,z方向変位を固定
do j=0,ny
write(7,1000) (nx+1)*j+1
write(7,1000) (nx+1)*j+1
write(7,500) 0.d0
write(7,500) 1.d0
write(7,500) 0.d0
end do
c 左右対称面(yz面)のx方向変位を固定
do k=1,nz
do j=0,ny
write(7,1000) (nx+1)*(ny+1)*k+(nx+1)*j+1
write(7,1000) (nx+1)*(ny+1)*k+(nx+1)*j+1
write(7,500) 0.d0
write(7,500) 1.d0
write(7,500) 1.d0
end do
end do
c 対称線(z軸)のxy方向変位を拘束
do k=1,nz
write(7,1000) (nx+1)*(ny+1)*k+1
write(7,1000) (nx+1)*(ny+1)*k+1
write(7,500) 0.d0
write(7,500) 0.d0
write(7,500) 1.d0
end do
c 対称点(原点)を固定
write(7,1000) 1
write(7,1000) 1
write(7,500) 0.d0
write(7,500) 0.d0
write(7,500) 0.d0
c
c
c *********** 載荷条件 ************
c
c 境界条件に合わせて温度荷重を与えるのは面倒なので
c 全節点に温度荷重を与えてしまって、mage2.f で
c 境界条件を入れる時に、拘束節点の荷重ベクトルの成分を
c 0にする。
c 全荷重ベクトルfそのものをtyokuon.fに渡すので、
c 載荷箇所とか載荷開始点終了点は要らない。
do 20 i=0,nset-1
write(7,500) f(i*3+1)
write(7,500) f(i*3+2)
write(7,500) f(i*3+3)
20 continue
c
do i=1,3
do j=1,3
write(7,900) a(i,j)
end do
end do
write(7,500) gxya
write(7,500) gxza
write(7,500) gyza
c
do i=1,3
do j=1,3
write(7,900) b(i,j)
end do
end do
write(7,500) gxyb
write(7,500) gxzb
write(7,500) gyzb
c
do i=1,3
do j=1,3
write(7,900) c(i,j)
end do
end do
write(7,500) gxyc
write(7,500) gxzc
write(7,500) gyzc
c
c
write(7,500) df
write(7,1000) nhikak
c 端部の図心変位のみを出す場合
write(7,1000) ngamen
write(7,1000) ngame1
c 端部の全節点の変位をファイル出力
write(7,1000) nfairu
do i=nfair1,nset
write(7,1000) i
end do
write(7,1000) nstep
close(7)
c 小数点以下5桁の実数
500 format(1pd13.5)
c 小数点以下9桁の実数
900 format(1pd17.9)
c 10桁までの整数
1000 format(i10)
stop
end
c
c
c 要素番号(i,j,k)の要素の分類番号を決めるサブルーチン
c yokoa*tateaの鋼材: 1
c yokoc*tateaの接着剤:2
c yokob*tateaの集成材:3
c yokoa*tatebの集成材:4
c yokoc*tatebの集成材:5
c yokob*tatebの集成材:6
c
subroutine bunrui(nx,ny,nz,nxa,nya,nxc,ijkab)
implicit real*8 (a-h, o-z)
dimension ijkab(9400)
c もしnxa=0,nya=0(鋼材なし)だったら100に飛ぶ
if( (nxa.eq.0).and.(nya.eq.0)) goto 100
c
c 左下の鋼板要素:横nxa*縦nya分割
do i=1,nxa
ja=ny-nya+1
do j=ja, ny
do k=1,nz
ijk=nx*ny*(k-1)+nx*(j-1)+i
ijkab(ijk)=1
end do
end do
end do
c もしnxa=nx,nya=ny(全部鋼材)だったら、ここで戻る
if( (nxa.eq.nx).and.(nya.eq.ny) ) return
c
c 鋼板右隣の接着剤要素:横(nxc)*縦(nya)分割
do i=nxa+1,nxa+nxc
ja=ny-nya+1
do j=ja, ny
do k=1,nz
ijk=nx*ny*(k-1)+nx*(j-1)+i
ijkab(ijk)=2
end do
end do
end do
c
c 鋼板右隣の木材要素:横(nx-nxc-nxa)*縦(nya)分割
iac=nxa+nxc
do i=iac+1,nx
ja=ny-nya+1
do j=ja, ny
do k=1,nz
ijk=nx*ny*(k-1)+nx*(j-1)+i
ijkab(ijk)=3
end do
end do
end do
c もし鋼板が上から下までぶっとおっていたら、ここで戻る
if(nya.eq.ny) return
c
c 鋼板上の左端の木材要素:横nx*縦(ny-nya)分割
do i=1,nxa
do j=1,ny-nya
do k=1,nz
ijk=nx*ny*(k-1)+nx*(j-1)+i
ijkab(ijk)=4
end do
end do
end do
c
c 接着剤要素の上の木材要素:横(nxc)*縦(ny-nya)分割
do i=nxa+1,nxa+nxc
do j=1,ny-nya
do k=1,nz
ijk=nx*ny*(k-1)+nx*(j-1)+i
ijkab(ijk)=5
end do
end do
end do
c
100 continue
c 残りの木材要素:横(nx-nxa-nxc)*縦(ny-nya)分割
iac=nxa+nxc
do i=iac+1,nx
do j=1,ny-nya
do k=1,nz
ijk=nx*ny*(k-1)+nx*(j-1)+i
ijkab(ijk)=6
end do
end do
end do
return
end
c
c **********************************************************
c ひずみ−応力行列aの逆数を取って、応力−ひずみ行列を求め、
c それとせん断弾性係数gxy,gxz,gyzとをeに代入して、
c 応力−ひずみ行列を作る。
c
subroutine gyaku(a,gxy,gxz,gyz,e)
implicit real*8(a-h, o-z)
dimension a(3,3),b(3,3),e(6,6)
det=a(1,1)*a(2,2)*a(3,3)+a(2,1)*a(3,2)*a(1,3)
& +a(3,1)*a(1,2)*a(2,3)-a(2,1)*a(1,2)*a(3,3)
& -a(3,1)*a(2,2)*a(1,3)-a(1,1)*a(3,2)*a(2,3)
b(1,1)=(-1.d0)**(1+1)*(a(2,2)*a(3,3)-a(3,2)*a(2,3))
b(1,2)=(-1.d0)**(1+2)*(a(2,1)*a(3,3)-a(3,1)*a(2,3))
b(1,3)=(-1.d0)**(1+3)*(a(2,1)*a(3,2)-a(3,1)*a(2,2))
b(2,1)=(-1.d0)**(2+1)*(a(1,2)*a(3,3)-a(3,2)*a(1,3))
b(2,2)=(-1.d0)**(2+2)*(a(1,1)*a(3,3)-a(3,1)*a(1,3))
b(2,3)=(-1.d0)**(2+3)*(a(1,1)*a(3,2)-a(3,1)*a(1,2))
b(3,1)=(-1.d0)**(3+1)*(a(1,2)*a(2,3)-a(2,2)*a(1,3))
b(3,2)=(-1.d0)**(3+2)*(a(1,1)*a(2,3)-a(2,1)*a(1,3))
b(3,3)=(-1.d0)**(3+3)*(a(1,1)*a(2,2)-a(2,1)*a(1,2))
do i=1,3
do j=1,3
e(i,j)=b(j,i)/det
e(i,3+j)=0.d0
e(3+i,j)=0.d0
e(3+i,3+j)=0.d0
end do
end do
e(4,4)=gxy
e(5,5)=gxz
e(6,6)=gyz
return
end
c
c
c
c 歪−変位行列(いわゆるBマトリクス)の1要素の体積積分を求め、
c それの転置を bt とすると、温度歪に左から、応力-歪行列をかけて
c 更にbtをかけたもの(bt*e66*ep)を温度荷重にする
c 変位関数の定義に用いた変位d1-d8の番号は、Melosh とは違い、
c z 5__6
c / / /|
c O →x 1−2 |
c ↓ | | /8
c y 3−4
c だから、荷重ベクトルの重ね合わせで使っているn8の添え字が、
c tyoku2.f とは違っている。
subroutine ondo(yoko1,tate1,ziku1,e66,epx,epy,epz,fab,nab,bt)
implicit real*8 (a-h, o-z)
dimension fab(6,24),bt(24,6),e66(6,6),ep(6),ee(6)
do i=1,24
fab(nab,i)=0.d0
do j=1,6
bt(i,j)=0.d0
end do
end do
c
a=yoko1/2.d0
b=tate1/2.d0
c=ziku1/2.d0
bt( 1,1)=-b*c
bt( 4,1)= b*c
bt( 7,1)=-b*c
bt(10,1)= b*c
bt(13,1)=-b*c
bt(16,1)= b*c
bt(19,1)=-b*c
bt(22,1)= b*c
c
bt( 2,2)=-a*c
bt( 5,2)=-a*c
bt( 8,2)=+a*c
bt(11,2)=+a*c
bt(14,2)=-a*c
bt(17,2)=-a*c
bt(20,2)=+a*c
bt(23,2)=+a*c
c
bt( 3,3)=-a*b
bt( 6,3)=-a*b
bt( 9,3)=-a*b
bt(12,3)=-a*b
bt(15,3)= a*b
bt(18,3)= a*b
bt(21,3)= a*b
bt(24,3)= a*b
c
c 温度によるせん断歪がないなら、tyokuon.fで節点変位を求める上では、
c bt(i,j)のj>4の成分も必要は必要ないだろうが、
c 鋼と木の熱膨張が異なることによってせん断歪が生じるなら、
c ouryoku.fで応力を求める時のために以下の成分が必要になる。
c
bt( 1,4)= a*c
bt( 2,4)=-b*c
bt( 4,4)= a*c
bt( 5,4)= b*c
bt( 7,4)=-a*c
bt( 8,4)=-b*c
bt(10,4)=-a*c
bt(11,4)= b*c
bt(13,4)= a*c
bt(14,4)=-b*c
bt(16,4)= a*c
bt(17,4)= b*c
bt(19,4)=-a*c
bt(20,4)=-b*c
bt(22,4)=-a*c
bt(23,4)= b*c
c
bt( 1,5)=-a*b
bt( 3,5)=-b*c
bt( 4,5)=-a*b
bt( 6,5)= b*c
bt( 7,5)=-a*b
bt( 9,5)=-b*c
bt(10,5)=-a*b
bt(12,5)= b*c
bt(13,5)= a*b
bt(15,5)=-b*c
bt(16,5)= a*b
bt(18,5)= b*c
bt(19,5)= a*b
bt(21,5)=-b*c
bt(22,5)= a*b
bt(24,5)= b*c
c
bt( 2,6)=-a*b
bt( 3,6)= a*c
bt( 5,6)=-a*b
bt( 6,6)= a*c
bt( 8,6)=-a*b
bt( 9,6)=-a*c
bt(11,6)=-a*b
bt(12,6)=-a*c
bt(14,6)= a*b
bt(15,6)= a*c
bt(17,6)= a*b
bt(18,6)= a*c
bt(20,6)= a*b
bt(21,6)=-a*c
bt(23,6)= a*b
bt(24,6)=-a*c
c
c 温度ひずみ
ep(1)=epx
ep(2)=epy
ep(3)=epz
ep(4)=0.d0
ep(5)=0.d0
ep(6)=0.d0
c
do i=1,6
ee(i)=0.d0
ee(i+3)=0.d0
do j=1,6
ee(i)=ee(i)+e66(i,j)*ep(j)
end do
end do
c
do i=1,24
fab(nab,i)=0.d0
do j=1,6
fab(nab,i)=fab(nab,i)+bt(i,j)*ee(j)
end do
end do
c
do i=1,24
do j=1,6
bt(i,j)=bt(i,j)/a/b/c/8.d0
end do
end do
c
return
end
c
c
c