c まずは、beam8p.inpと同じデータを、要素番号と節点番号の c 並び順を変えて任意の要素数で生成するプログラムを作ってみる。 implicit real*8(a-h,o-z) dimension x(10000),y(10000),z(10000) c 節点座標:x(節点番号),y(節点番号),z(節点番号) write(*,110) write(*,120) write(*,130) write(*,140) write(*,150) 110 format('**') 120 format('** beam8p.inpと同じデータを要素番号と節点番号の') 130 format('** 並び順(と要素数)を変えたデータ') 140 format('**') 150 format('*NODE, NSET=Nall') c 桁幅(x方向):b(m) c 桁高(y方向):h(m) c 梁の軸長(z方向):ell(m) b=1.d0 h=1.d0 ell=8.d0 c x,y,z方向の要素分割数:nx,ny,nz nx=4 ny=4 nz=16 c c 1要素のx,y,z方向の長さ:xn,yn,zn xn=b/nx yn=h/ny zn=ell/nz c c print*,'要素数:',nx*ny*nz c print*,'節点数:',(nx+1)*(ny+1)*(nz+1) c 節点番号ごとの節点座標 c 節点番号:nset nset=0 do k=0,nz do j=0,ny do i=0,nx nset=nset+1 x(nset)=xn*i y(nset)=yn*j z(nset)=zn*k write(*,210), nset,x(nset),y(nset),z(nset) end do end do end do 210 format(i6,',',f9.3,',',f9.3,',',f9.3) c c c 要素番号とその要素の8節点の節点番号 nyou=0 do k=1,nz do j=1,ny do i=1,nx nyou=nyou+1 n1=(nx+1)*(ny+1)*(k-1)+(nx+1)*(j-1)+i n2=n1+1 n3=n1+(nx+1) n4=n3+1 n5=n1+(nx+1)*(ny+1) n6=n2+(nx+1)*(ny+1) n7=n3+(nx+1)*(ny+1) n8=n4+(nx+1)*(ny+1) write(*,220) write(*,230) nyou,n1,n3,n7,n5,n2,n4,n8,n6 end do end do end do 220 format('*ELEMENT, TYPE=C3D8, ELSET=Eall') 230 format(i6,',', & i6,',',i6,',',i6,',',i6,',',i6,',',i6,',',i6,',',i6) c c c 境界条件 c 節点ごとに異なる拘束条件を与える場合をふまえて、 c 拘束条件の種類に対して適当な名前(FIXとか)を付ける c 後藤メモ:FIXの意味が上記でいいかどうか確認して下さい write(*,310) 310 format('*NSET,NSET=FIX') c 拘束節点の節点番号 nx1ny1=(nx+1)*(ny+1) do i=1,nx1ny1 write(*,320) i end do 320 format(i6,',') c c 上記(NSET=FIX)の拘束節点の拘束変位 write(*,330) 330 format('*BOUNDARY') write(*,340) 340 format('FIX,1,3') c 節点ごとに異なる拘束条件を与える場合は、 c FIX2とかとして上記を繰り返すのかな(? 調べて)。 write(*,350) write(*,360) write(*,370) write(*,380) 350 format('*MATERIAL,NAME=EL') 360 format('*ELASTIC') c ヤング率とポアソン比(てことは異方性のときはどうすんのかな) 370 format('210000.,.3') 380 format('*SOLID SECTION,ELSET=Eall,MATERIAL=EL') c c 載荷条件 c 節点ごとに異なる載荷条件を与える場合をふまえて、 c 載荷条件の種類に対して適当な名前(LASTとか)を付ける c 後藤メモ:LASTの意味が上記でいいかどうか確認して下さい c c write(*,410) 410 format('*NSET,NSET=LAST') c nhasi=nset-nx1ny1+1 do i=nhasi,nset write(*,420) i end do 420 format(i6,',') c write(*,430) write(*,440) write(*,450) write(*,460) 430 format('*STEP') 440 format('*STATIC,SOLVER=SPOOLES') 450 format('*CLOAD') c 2と0.36の意味はなんだろう? y方向に0.36とか?(調べて) 460 format('LAST,2,0.36') c 節点ごとに異なる載荷条件を与える場合は、 c LAST2とかとして上記を繰り返すのかな(? 調べて)。 c write(*,510) write(*,520) write(*,530) write(*,540) write(*,550) write(*,560) write(*,570) write(*,580) write(*,590) 510 format('*NODE PRINT,NSET=Nall') 520 format('U') 530 format('*EL PRINT,ELSET=Eall') 540 format('S') 550 format('*NODE FILE') 560 format('U') 570 format('*EL FILE,POSITION=AVERAGED AT NODES') 580 format('S') 590 format('*END STEP') c c c end