! 2012/11/2版
! Salomeで生成したメッシュデータをGmshでinpに変換して
! CalculiX用のinpファイルを作るためのプログラム（C3D8直方体要素用）
! まず、Salomeで適当に直方体要素のメッシュを切る
! それをUNV形式でsalome.unvに保存。
! 次にGmshのFileのMergeでsalome.unvを読み込んで、
! Abaqus inp形式でsalome.inpに保存。
! salome.inpの冒頭にある節点番号と座標が並んでいる部分を
! setten.inpにコピーし、冒頭に節点数を記入。
! salome.inpの末尾にある要素番号と要素を囲む節点番号が並んでいる部分を
! youso.inpにコピーし、冒頭に要素数を記入。
! ccxc3d8を実行すると、ccxc3d8.inpが生成されているので、
! cgx -c ccxc3d8.inp で読み込んで拘束節点と載荷節点を設定し、それらを出力。
! 出力した拘束節点と載荷節点をccxc3d8.inpに読み込んで
! 拘束条件と載荷条件を適切に設定。
!
implicit real*8(a-h,o-z)
open(7,file='setten.inp')
open(8,file='ccxc3d8.inp')
write(8,'("** 節点番号と座標")')
write(8,'("*NODE, NSET=Nall")')
read(7,*) nset
do i=1,nset
read(7,*) nset,x,y,z
write(8,'(i6,a,1pe13.5,a,1pe13.5,a,1pe13.5)') nset,',',x,',',y,',',z
end do
close(7)
open(7,file='youso.inp')
write(8,'("** 要素番号とその要素を囲む節点番号")')
read(7,*) n
write(8,'("*ELEMENT, TYPE=C3D8, ELSET=Eall")')
do i=1,n
read(7,*) nyou,n1,n2,n3,n4,n5,n6,n7,n8
write(8,'(i6,a,i6,a,i6,a,i6,a,i6,a,i6,a,i6,a,i6,a,i6)'&
&) i,',',n1,',',n2,',',n3,',',n4,',',n5,',',n6,',',n7,',',n8
end do
close(7)
!拘束条件や材料条件はSTEP行よりも上に書かないとエラーが出る
!拘束条件を手動で書きこむ場合
!print'("*NSET,NSET=Nkousoku")'
!print'("** ここに拘束したい節点番号とコンマを1行ずつ並べる")'
!print'("** 例えば拘束節点が1と2だったら")'
!print'(i6,a)',1,','
!print'(i6,a)',2,','
!print'("** みたいに")'
write(8,'("** 拘束条件をcgxで生成したkousoku.namから読み込む")')
write(8,'("** cgxで形状を見る場合は以下は**INCLUDEでコメント")')
write(8,'("**INCLUDE, INPUT=kousoku.nam")')
write(8,'("** ccxで計算するときは上の**INCLUDEの*を1個に")')
write(8,'("*BOUNDARY")')
write(8,'("** 以下のNkousoku,に続けて拘束変位1=x,2=y,3=zをコンマ区切りで")')
write(8,'("Nkousoku,1,3")')
write(8,'("** 材料の設定")')
write(8,'("*MATERIAL,NAME=EL")')
write(8,'("*ELASTIC")')
write(8,'("206.d3, 0.3")')
write(8,'("*SOLID SECTION,ELSET=Eall,MATERIAL=EL")')
!載荷条件を手動で書き込む場合
!print'("*NSET,NSET=SAIKA")'
!print'("** ここに載荷したい節点番号とコンマを1行ずつ並べる")'
!print'("** 例えば載荷節点が3と4だったら")'
!print'(i6,a)',3,','
!print'(i6,a)',4,','
!print'("** みたいに")'
write(8,'("** 載荷条件をcgxで生成したsaika.namから読み込む")')
write(8,'("** cgxで形状を見る場合は以下は**INCLUDEでコメント")')
write(8,'("**INCLUDE, INPUT=saika.nam")')
write(8,'("** ccxで計算するときは上の**INCLUDEの*を1個に")')
write(8,'("*STEP")')
write(8,'("*STATIC,SOLVER=SPOOLES")')
write(8,'("*CLOAD")')
p=1.d-0 !載荷荷重(MN)
nsaika=2 !載荷節点数
write(8,'("** 以下のNsaikaに続けて載荷方向、載荷荷重を書く")')
write(8,'("** 例えば載荷方向が3=zで、載荷荷重がp/nsaikaなら")')
write(8,*)'Nsaika,3,',p/nsaika
write(8,'("** 出力の設定")')
write(8,'("*NODE PRINT,NSET=Nall")')
write(8,'("U")')
write(8,'("*EL PRINT,ELSET=Eall")')
write(8,'("S")')
write(8,'("*NODE FILE")')
write(8,'("U")')
write(8,'("*EL FILE,POSITION=AVERAGED AT NODES")')
write(8,'("S")')
write(8,'("*END STEP")')
close(8)
end
