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
! まずは、beam8p.inpと同じデータを、要素番号と節点番号の
! 並び順を変えて任意の要素数で生成するプログラムを作ってみる。
implicit real*8(a-h,o-z)
dimension x1(100000),x2(100000),x3(100000),x4(100000),y(100000),z(100000)
! 節点座標:x(節点番号),y(節点番号),z(節点番号)
print'("**")'
print'("**beam8p.inpと同じデータを要素番号と節点番号の")'
print'("**並び順(と要素数)を変えたデータ")'
print'("**")'
print'("*NODE,NSET=Nall")'
!z方向の長さを入力
d=2.d-1
! x,y,z方向の要素分割数:nx,ny,nz
!辺の長さ
b=3.0
!分割数を代入する
!偶数でないとダメ
nx=4
ny=20
! nz=20
!分割数で割った値が6角形一つの長さとなる
! 1要素のx,y,z方向の長さ:xn,yn,zn
open(7,file='yousosuu.txt')
write(7,*) 4*nx+4*nx*(ny-1)+2*nx+2*nx+4*nx*ny
write(7,*) 2*nx,2*ny
close(7)
!
!dは厚さ、xnはハニカムを構成する六角形の一辺だが
!yousosuu2.txtの中にx方向の長さとy方向の長さを
!自動的に出力するので任意の長さに自分で決める。
xn=b/nx
open(7,file='yousosuu2.txt')
write(7,*) ,"x方向の長さは",2*xn*nx+xn*(nx-1)
write(7,*) ,"y方向の長さは",xn*3**(0.5)*ny
close(7)
! yn=0.000
! zn=ell/(2*nz)
! 節点番号
!一列目
nset=0
do k=1,ny+1
do j=1,2
do i=1,nx
nset=nset+1
! nset1=nset+2
x1(nset)=3*xn*i-3*xn
x2(nset)=3*xn*i-2*xn
y(nset)=(xn*(3)**(0.5))*(k-1)
z(nset)=d*(j-1)
print'(i6,a,f9.6,a,f9.6,a,f9.6)', &
! nset,',',x1(nset),',',y(nset),',',z(nset)
(2*i-1)+2*nx*(j-1)+4*nx*(k-1),',',x1(nset),',',y(nset),',',z(nset)
print'(i6,a,f9.6,a,f9.6,a,f9.6)', &
! nset,',',x2(nset),',',y(nset),',',z(nset)
2*i+2*nx*(j-1)+4*nx*(k-1),',',x2(nset),',',y(nset),',',z(nset)
end do
end do
end do
!2列目
nset=0
do k=1,ny
do j=1,2
do i=1,nx
nset=nset+1
x3(nset)=3*xn*i-3*xn-xn*(0.5)
x4(nset)=3*xn*i-2*xn+xn*(0.5)
! x4(nset)=3*xn*i-(2*xn-xn*(0.5))
! x(nset)=(r*3/2)-((r*1/2)*(-1)**i)
y(nset)=xn*(3)**(0.5)/2+(xn*(3)**(0.5))*(k-1)
z(nset)=d*(j-1)
print'(i6,a,f9.6,a,f9.6,a,f9.6)', &
4*nx-1+4*nx*(ny-1)+(2*i-1)+2*nx*(j-1)+4*nx*k+1,',',x3(nset),',',y(nset),',',z(nset)
print'(i6,a,f9.6,a,f9.6,a,f9.6)', &
4*nx+4*nx*(ny-1)+2*i+2*nx*(j-1)+4*nx*k,',',x4(nset),',',y(nset),',',z(nset)
end do
end do
end do
!
!
!---------------------------------------------------------------------------------------------------
!
!
! 要素番号とその要素の8節点の節点番号
print'("*ELEMENT, TYPE=S3, ELSET=Eall")'
!1
do k=1,ny/2
do i=1,nx
n1=2*i-1+(8*nx)*(k-1)
n2=n1+1
n3=n1+nx*2
n4=n3+1
print*,2*i-1+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
!2
do i=1,nx
n1=2*nx*2*(ny+1)+2*i-1+(8*nx)*(k-1)
n2=2*i-1+(8*nx)*(k-1)
n3=n1+nx*2
n4=n2+2*nx
print*,nx*2+2*i-1+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,nx*2+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
!3
do i=1,nx
n1=2*i+(8*nx)*(k-1)
n2=2*nx*2*(ny+1)+2*i-1+1+(8*nx)*(k-1)
n3=2*nx+2*i-1+1+(8*nx)*(k-1)
n4=n2+nx*2
print*,nx*2+2*nx-1+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,nx*2+2*nx+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
!4
do i=1,nx
n1=2*nx*2+2*i-1+(8*nx)*(k-1)
n2=2*nx*2*(ny+1)+2*i-1+(8*nx)*(k-1)
n3=n1+2*nx
n4=n2+2*nx
print*,nx*2+4*nx-1+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,nx*2+4*nx+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
!5
do i=1,nx
n1=2*nx*2+2*i-1+(8*nx)*(k-1)
n2=n1+1
n3=n1+nx*2
n4=n3+1
print*,nx*2+6*nx-1+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,nx*2+6*nx+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
!6
do i=1,nx
n1=2*nx*2+2*i-1+1+(8*nx)*(k-1)
n2=2*nx*2*(ny+1)+2*i-1+1+(8*nx)*(k-1)
n3=n1+nx*2
n4=n2+nx*2
print*,nx*2+8*nx-1+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,nx*2+8*nx+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
!7
do i=1,nx-1
n1=2*nx*2*(ny+1)+2*i-1+1+(8*nx)*(k-1)
n2=n1+1
n3=n1+nx*2
n4=n3+1
print*,nx*2+10*nx-1+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,nx*2+10*nx+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
!8
do i=1,nx
n1=2*nx*2*(ny+1)+2*i-1+1+nx*4-1+(8*nx)*(k-1)
n2=2*nx*2+2*i-1+(8*nx)*(k-1)
n3=n1+nx*2
n4=n2+nx*2
print*,nx*2+12*nx-3+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,nx*2+12*nx-2+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
!9
do i=1,nx
n1=2*nx*2+2*i-1+1+(8*nx)*(k-1)
n2=2*nx*2*(ny+1)+2*i-1+1+nx*4-1+1+(8*nx)*(k-1)
n3=n1+nx*2
n4=n2+nx*2
print*,nx*2+14*nx-3+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,nx*2+14*nx-2+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
!10
do i=1,nx-1
n1=2*nx*2*(ny+1)+2*i-1+1+nx*4-1+1+(8*nx)*(k-1)
n2=n1+1
n3=n1+nx*2
n4=n3+1
print*,nx*2+16*nx-3+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,nx*2+16*nx-2+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
!11
do i=1,nx
n1=(4*nx+2*i-1)*2-(2*i-1)+(8*nx)*(k-1)
n2=2*nx*2*(ny+1)+2*i-1+1+nx*4-1+(8*nx)*(k-1)
n3=n1+nx*2
n4=n2+nx*2
print*,nx*2+18*nx-5+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,nx*2+18*nx-4+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
!12
do i=1,nx
n1=(4*nx+2*i-1)*2-(2*i-1)+1+(8*nx)*(k-1)
n2=2*nx*2*(ny+1)+2*i-1+1+nx*4-1+1+(8*nx)*(k-1)
n3=n1+nx*2
n4=n2+nx*2
print*,nx*2+20*nx-5+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n1,",",n2,",",n3
print*,nx*2+20*nx-4+2*i+(nx*2+20*nx-5+2*nx+1)*(k-1),",",n4,",",n3,",",n2
end do
end do
!最後はこれで完成
!13
do i=1,nx
n1=2*i-1+(8*nx)*(ny/2)
n2=n1+1
n3=n1+nx*2
n4=n3+1
print*,nx*2+20*nx-5+2*nx+(nx*2+20*nx-5+2*nx+1)*(ny/2-1)+2*i,",",n1,",",n2,",",n3
print*,nx*2+20*nx-4+2*nx+(nx*2+20*nx-5+2*nx+1)*(ny/2-1)+2*i,",",n4,",",n3,",",n2
end do
!
!
! 境界条件
! 節点ごとに異なる拘束条件を与える場合をふまえて、
! 拘束条件の種類に対して適当な名前(FIXとか)を付ける
print'("*NSET,NSET=FIX")'
! 拘束節点の節点番号
do k=0,nx
i1=3*k*nz+2*k+1
print *,i1,","
end do
do k=0,nx-1
i2=(3*k+2)*nz+2*(k+1)
print *,i2,","
end do
!
!
! 上記(NSET=FIX)の拘束節点の拘束変位
print'("*BOUNDARY")'
print'("FIX,1,6")'
! 節点ごとに異なる拘束条件を与える場合は,
! FIX2とかとして上記を繰り返すのかな(? 調べて)。
print'("*MATERIAL,NAME=EL")'
print'("*ELASTIC")'
! ヤング率(MPa)とポアソン比(てことは異方性のときはどうすんのかな)
print'("70.d3, 0.33")'
print'("*SHELL SECTION,ELSET=Eall,MATERIAL=EL")'
!厚さはここで入力
print'("4.d-3")'
!
! 載荷条件
! 節点ごとに異なる載荷条件を与える場合をふまえて、
! 載荷条件の種類に対して適当な名前(LASTとか)を付ける
!
!
print'("*NSET,NSET=LAST")'
i4=2*nz+1
i5=(3*nx+2)*nz+2*nx+1
print *,i4,","
print *,i5,","
!
do k=1,nx
i6=3*k*nz+2*k
print *,i6,","
end do
!
do k=0,nx-2
i7=(3*(k+1)+2)*nz+2*(k+1)+1
print *,i7,","
end do
!
!
print'("*STEP")'
print'("*STATIC,SOLVER=SPOOLES")'
print'("*CLOAD")'
!自由端(つまり上で定義したLAST)の全節点(nx1ny1個)の
!y(つまり2)方向に大きさ1の荷重を分配して載荷したいなら、
write(*,*) 'LAST,1,', 1.d-5/(2*nx+1)
!節点ごとに異なる載荷条件を与える場合は、
!LAST2とかとして上記を繰り返すのかな(?調べて)。
!
print'("*NODE PRINT,NSET=LAST")'
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