! EUC-jp
! 文字コードはEUC-jp
! 自由形式のfortranで書いています。
! g77でコンパイルする場合は、
!g77 -ffree-form -o smv smv.f
! のようにコンパイルしてください。
! gfortran でコンパイルする場合は文字コードをutf-8にしてください。
!program daiya
implicit real*8 (a-h, o-z)
pi=2.d0*asin(1.d0)
r=1.d0/2.d0/pi !半径
h=0.5d0 !高さ
m=20 !周方向分割数
n=10 !高さ方向分割数 通常は偶数
nset=2*(n+1)*(m/4+1)  !節点数
!nset=5*(m/4+1)  !節点数
!nset=(m/2+1)*(n+1) !節点数
!nyou=2*m*n-m-1 !周方向(奇数のとき)
!nyou=(m*n)/2 !周方向(偶数のとき)
nyou=(m*n) !周方向(偶数のとき)
!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='daiyahan13.obj')
write(8,'("3DG1")')
write(8,*) nset
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
do j=0,n   !高さ方向に
do i=0,m/4 !円周方向に半回りずつ
!xyz座標を出力
zure=th/4.-(-1.d0)**j*th/4.
write(8,*) r*cos(i*th+zure),r*sin(i*th+zure),j*dh
!write(8,*) r*cos(i*th+j*th/2.),r*sin(i*th+j*th/2.),j*dh
end do
end do
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
do j=0,n   !高さ方向に
do i=0,m/4 !円周方向に半回りずつ
!xyz座標を出力
zure=th/4.-(-1.d0)**j*th/4.
write(8,*) r*cos(i*th+zure)*cos(pi/2)-r*sin(i*th+zure)*sin(pi/2)+2*r,-r*cos(i*th+zure)*sin(pi/2)-r*sin(i*th+zure)*cos(pi/2),j*dh
!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/2-1 !高さ方向
do i=0,m/4-1 !周方向に
  !逆三角形の右上頂点、左上頂点、下頂点
  write(8,*) 3,(m/2+2)*j+i+1,(m/2+2)*j+i,(m/2+2)*j+i+m/4+1,' ','0xcccccc'
  !write(8,*) 3,(m+2)*j+i+1,(m+2)*j+i,(m+2)*j+i+1+m/2,' ','0xcccccc'
  !三角形の左下頂点、右下頂点、上
  write(8,*) 3,(m/2+2)*j+i+m/4+1,(m/2+2)*j+i+m/4+2,(m/2+2)*j+i+1,' ','0xcccccc'
  !write(8,*) 3,(m+2)*j+i+1+m/2,(m+2)*j+i+1+m/2+1,(m+2)*j+i+1,' ','0xcccccc'
end do
do i=0,m/4-1
  !三角形の左下頂点、右下頂点、上
  write(8,*) 3,(m/2+2)*j+(m/4-1)+i+m/4+3,(m/2+2)*j+(m/4-1)+i+m/4+4,(m/2+2)*j+i+m/4+1,' ','0xcccccc'
  !write(8,*) 3,(m+2)*j+i+1+m+1,(m+2)*j+i+1+m+2,(m+2)*j+i+1+m/2,' ','0xcccccc'
  !逆三角形の右上頂点、左上頂点、下頂点
  write(8,*) 3,(m/2+2)*j+i+m/4+2,(m/2+2)*j+i+m/4+1,(m/2+2)*j+(m/4-1)+i+m/4+4,' ','0xcccccc'
  !write(8,*) 3,(m+2)*j+i+1+m/2+1,(m+2)*j+i+1+m/2,(m+2)*j+i+1+m+2,' ','0xcccccc'
  end do 
  end do
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!2個目のダイヤカット
!半周ずつ逆三角形と順三角形の頂点の節点を交互に外から見て左回りに出力
do j=0,n/2-1 !高さ方向
do i=0,m/4-1 !周方向に
  !逆三角形の右上頂点、左上頂点、下頂点
  write(8,*) 3,(n+1)*(m/4+1)+(m/2+2)*j+i+1,(n+1)*(m/4+1)+(m/2+2)*j+i,&
  &(n+1)*(m/4+1)+(m/2+2)*j+i+m/4+1,' ','0xcccccc'
  !write(8,*) 3,(m+2)*j+i+1,(m+2)*j+i,(m+2)*j+i+1+m/2,' ','0xcccccc'
  !三角形の左下頂点、右下頂点、上
  write(8,*) 3,(n+1)*(m/4+1)+(m/2+2)*j+i+m/4+1,(n+1)*(m/4+1)+(m/2+2)*j+i+m/4+2,&
  &(n+1)*(m/4+1)+(m/2+2)*j+i+1,' ','0xcccccc'
  !write(8,*) 3,(m+2)*j+i+1+m/2,(m+2)*j+i+1+m/2+1,(m+2)*j+i+1,' ','0xcccccc'
end do
do i=0,m/4-1
  !三角形の左下頂点、右下頂点、上
  write(8,*) 3,(n+1)*(m/4+1)+(m/2+2)*j+(m/4-1)+i+m/4+3,(n+1)*(m/4+1)+(m/2+2)*j+(m/4-1)+i+m/4+4,&
  &(n+1)*(m/4+1)+(m/2+2)*j+i+m/4+1,' ','0xcccccc'
  !write(8,*) 3,(m+2)*j+i+1+m+1,(m+2)*j+i+1+m+2,(m+2)*j+i+1+m/2,' ','0xcccccc'
  !逆三角形の右上頂点、左上頂点、下頂点
  write(8,*) 3,(n+1)*(m/4+1)+(m/2+2)*j+i+m/4+2,(n+1)*(m/4+1)+(m/2+2)*j+i+m/4+1,&
  &(n+1)*(m/4+1)+(m/2+2)*j+(m/4-1)+i+m/4+4,' ','0xcccccc'
  !write(8,*) 3,(m+2)*j+i+1+m/2+1,(m+2)*j+i+1+m/2,(m+2)*j+i+1+m+2,' ','0xcccccc'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  !逆三角形の右上頂点、左上頂点、下頂点
  !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 do
end do
write(8,'("#")') !daiya.objファイルから要素数を読み取るとき用
close(8)
!
!
end
