! utf-8
! 文字コードはutf-8
! 自由形式のfortranで書いています。
! g77でコンパイルする場合は、
!g77 -ffree-form -o smv smv.f
! のようにコンパイルしてください。
! gfortran でコンパイルする場合は文字コードをutf-8にしてください。
implicit real*8 (a-h, o-z)
dimension x(3000000),y(3000000),z(3000000),&
& x2(3000000),y2(3000000),z2(3000000),&
&         mesh(1000000,6),narabi(10000,10000),&
&         mesh2(1000000,6)
character mozi*20,mozi0*20
!!!!!!!!!!!!
!!!!!!!!!!!!
pi=2.d0*asin(1.d0)
r=1.d0/2.d0/pi !半径
h=50.d-2 !高さ
m=10 !周方向分割数
n=5 !高さ方向分割数
pi=2.d0*asin(1.d0)
atusa=9.d-3
call daiya(r,h,m,n)
r=r-atusa
call daiya(r,h,m,n)
close(8)
!!!!!!!!!!!!
!!!!!!!!!!!!
!!!!!!!!!!!!
open(9,file='daiya3d.obj') !yousosuu.fで数えた要素数ファイル
read(9,*) mozi0 !1行目の文字を読み込む
read(9,*) nset !節点数の読み込み
do i=0,nset-1
 read(9,*) x(i),y(i),z(i) !各節点の座標値の読み込み
end do
!
open(7,file='yousosuu.txt') !yousosuu.fで数えた要素数ファイル
read(7,*) nyou !要素数の読み込み
do i=1,nyou
!各要素の頂点数?、各頂点の節点番号、カラーコード?の読み込み
read(9,*) kazu,mesh(i,1),mesh(i,2),mesh(i,3),mozi
end do
!
do i=0,nset
do j=0,nset
!隣り合う節点i,jの中間の節点番号の初期値をすべて-1にしておく
narabi(i,j)=-1
end do
end do
!
!!!!!!!!!!!!
read(9,*) mozi0 !1行目の文字を読み込む
read(9,*) mozi0 !1行目の文字を読み込む
read(9,*) nset !節点数の読み込み
do i=0,nset-1
 read(9,*) x2(i),y2(i),z2(i) !各節点の座標値の読み込み
end do
!
do i=1,nyou
!各要素の頂点数?、各頂点の節点番号、カラーコード?の読み込み
read(9,*) kazu,mesh2(i,1),mesh2(i,2),mesh2(i,3),mozi
end do
!
do i=0,nset
do j=0,nset
!隣り合う節点i,jの中間の節点番号の初期値をすべて-1にしておく
narabi(i,j)=-1
end do
end do
!
!
!
!open(9,file='ble6ccx.inp')
print'("** blenderのobjファイルをccxのS6要素inp化")'
print'("**")'
print'("*NODE, NSET=Nall")'
do i=0,nset-1
   print'(i6,a,1pe15.3,a,1pe15.3,a,1pe15.3)'&
   !print* &
   &,i+1,',',x(i),',',y(i),',',z(i)
end do
do i=0,nset-1
   print'(i6,a,1pe15.3,a,1pe15.3,a,1pe15.3)'&
   !print* &
   &,i+1+nset,',',x2(i),',',y2(i),',',z2(i)
end do
print'("*ELEMENT, TYPE=C3D4, ELSET=Eall")'
do i=1,nyou
   print'(i6,a,i6,a,i6,a,i6,a,i6)',&
   i*3-2,',',mesh(i,1)+1,',',mesh(i,2)+1,',',mesh(i,3)+1,',',mesh(i,3)+1+nset
   print'(i6,a,i6,a,i6,a,i6,a,i6)',&
   i*3-1,',',mesh(i,1)+1,',',mesh(i,2)+1,',',mesh(i,3)+1+nset,',',mesh(i,2)+1+nset
   print'(i6,a,i6,a,i6,a,i6,a,i6)',&
   i*3,',',mesh(i,1)+1,',',mesh(i,2)+1+nset,',',mesh(i,3)+1+nset,',',mesh(i,1)+1+nset
end do
print'("*NSET,NSET=FIX")'
print'("** ここに拘束したい節点番号とコンマを1行ずつ並べる")'
print'("** 例えば拘束節点が1と2だったら")'
print'(i6,a)',1,','
print'(i6,a)',2,','
print'("** みたいに")'
print'("*BOUNDARY")'
print'("** 以下のFIX,に続けて拘束変位1=x,2=y,3=zをコンマ区切りで")'
print'("FIX,1,3")'
print'("*MATERIAL,NAME=EL")'
print'("*ELASTIC")'
e=210000. ! ヤング率(MPa)
poi=0.3   !  ポアソン比
print*, e,',',poi
t=10.d-3 !板の厚さ(m)
print'("*SHELL SECTION,ELSET=Eall,MATERIAL=EL,OFFSET=0.")'
print*,t
!温度設定
!print'("*INITIAL CONDITIONS,TYPE=TEMPERATURE")'
!print'("Nall,273.")'
!節点ごとに厚さを変えたい時
!print'("*NSET,NSET=ATUSA")'
!do i=1,nset
!print'(i6,a)',i,','
!end do
!print'("*NODAL THICKNESS")'
!print*,'ATUSA,',t
print'("*NSET,NSET=SAIKA")'
print'("** ここに載荷したい節点番号とコンマを1行ずつ並べる")'
print'("** 例えば載荷節点が3と4だったら")'
print'(i6,a)',3,','
print'(i6,a)',4,','
print'("** みたいに")'
print'("*STEP")'
print'("*STATIC,SOLVER=SPOOLES")'
print'("*CLOAD")'
p=1.d-0 !載荷荷重(MN)
nsaika=2 !載荷節点数
print'("** 以下のSAIKAに続けて載荷方向、載荷荷重を書く")'
print'("** 例えば載荷方向が3=zで、載荷荷重がp/nsaikaなら")'
print*,'SAIKA,3,',p/nsaika
print'("*NODE PRINT,NSET=Nall")'
print'("U")'
print'("*EL PRINT,ELSET=Eall")'
print'("S")'
print'("*NODE FILE")'
print'("U")'
print'("*EL FILE,POSITION=AVERAGED AT NODES")'
print'("S")'
print'("*END STEP")'
!
end
!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!
subroutine daiya(r,h,m,n)
implicit real*8 (a-h, o-z)
pi=2.d0*asin(1.d0)
nset=m*(n+1) !節点数
nyou=2*m*n !要素数
       open(7,file='yousosuu.txt')
       write(7,*) nyou
       write(7,*) m,n
       close(7)
th=2.d0*pi/m !ダイヤ1つぶんの中心角
dh=h/n !ダイヤ三角1段ぶんの高さ(斜めになってるから三角形の高さではない)
!
open(8,file='daiya3d.obj')
write(8,'("3DG1")')
write(8,*) nset
do j=0,n   !高さ方向に
do i=0,m-1 !円周方向に1回りずつ
!xyz座標を出力
write(8,*) r*cos(i*th+j*th/2.),r*sin(i*th+j*th/2.),j*dh
end do
end do
!
!1周ずつ逆三角形と順三角形の頂点の節点を交互に外から見て左回りに出力
do j=0,n-1 !高さ方向
do i=0,m-1 !周方向に
 if(i/=m-1) then !周の開始から一つ前まで
  !逆三角形の右上頂点、左上頂点、下頂点
  write(8,*) 3,j*m+i+1,j*m+i,(j+1)*m+i,' ','0xcccccc'
  !三角形の左下頂点、右下頂点、上
  write(8,*) 3,(j+1)*m+i,(j+1)*m+i+1,j*m+i+1,' ','0xcccccc'
 else !周の一番最後は、開始点の頂点とくっつくように
  write(8,*) 3,j*m,j*m+i,(j+1)*m+i,' ','0xcccccc'
  write(8,*) 3,(j+1)*m+i,(j+1)*m,j*m,' ','0xcccccc'
 end if
end do
end do
write(8,'("#")') !daiya.objファイルから要素数を読み取るとき用
!
!
return
end
