c----GRID GENERATOR PROGRAM---- parameter (nx=11,ny=10,nne=(nx+2)*(ny+1)) integer num(1:ny+1,0:nx+1) real x(nne),y(nne) real xp(nne),yp(nne) open(1,file='mesh.dat',status='unknown') open(2,file='number.dat',status='unknown') open(3,file='coord.dat',status='unknown') c----parameters---- xd=2. yd=1.8 nxc=(nx+1)/2 nyc=1 y0=0.0 x0=-xd/2. dy=yd/(ny-1) dx=xd/(nx-1) c----parameters---- do i=0,nx+1 do j=1,ny+1 num(j,i)=0 enddo enddo c----create 'E' boundary---- iq=0 xx=(0-nxc)*dx do i=1,ny iq=iq+1 num(i,0)=-iq yy=(i-nyc)*dy x(iq)=xx y(iq)=yy write (3,'(i3,2f10.5)') iq,xx,yy enddo yy=(ny+1-nyc)*dy do i=0,nx+1 iq=iq+1 num(ny+1,i)=-iq xx=(i-nxc)*dx x(iq)=xx y(iq)=yy write (3,'(i3,2f10.5)') iq,xx,yy enddo xx=(nx+1-nxc)*dx do i=ny,1,-1 iq=iq+1 num(i,nx+1)=-iq yy=(i-nyc)*dy x(iq)=xx y(iq)=yy write (3,'(i3,2f10.5)') iq,xx,yy enddo ne=iq c----create 'A' boundary---- iq=0 xx=(1-nxc)*dx do i=1,ny iq=iq+1 num(i,1)=iq yy=(i-nyc)*dy x(iq)=xx y(iq)=yy write (3,'(i3,2f10.5)') iq,xx,yy enddo yy=(ny-nyc)*dy do i=2,nx-1 iq=iq+1 num(ny,i)=iq xx=(i-nxc)*dx x(iq)=xx y(iq)=yy write (3,'(i3,2f10.5)') iq,xx,yy enddo xx=(nx-nxc)*dx do i=ny,1,-1 iq=iq+1 num(i,nx)=iq yy=(i-nyc)*dy x(iq)=xx y(iq)=yy write (3,'(i3,2f10.5)') iq,xx,yy enddo na=iq c----create 'S' boundary---- xx=(2-nxc)*dx do i=1,ny-1 iq=iq+1 num(i,2)=iq yy=(i-nyc)*dy x(iq)=xx y(iq)=yy write (3,'(i3,2f10.5)') iq,xx,yy enddo yy=(ny-1-nyc)*dy do i=3,nx-2 iq=iq+1 num(ny-1,i)=iq xx=(i-nxc)*dx x(iq)=xx y(iq)=yy write (3,'(i3,2f10.5)') iq,xx,yy enddo xx=(nx-1-nxc)*dx do i=ny-1,1,-1 iq=iq+1 num(i,nx-1)=iq yy=(i-nyc)*dy x(iq)=xx y(iq)=yy write (3,'(i3,2f10.5)') iq,xx,yy enddo ns=iq-na c----create 'I' nodes---- do j=3,nx-2 do i=1,ny-2 iq=iq+1 num(i,j)=iq xx=(j-nxc)*dx yy=(i-nyc)*dy x(iq)=xx y(iq)=yy write (3,'(i3,2f10.5)') iq,xx,yy enddo enddo ni=iq-ns-na maxnum=iq do i=1,ny+1 write (1,1) (num(i,j),j=0,nx+1) write (*,1) (num(i,j),j=0,nx+1) 1 format(20i4) enddo c----generate mesh data---- n=na+ns+ni write (*,'(2i5,4e10.3)') nx,ny,xd,yd,dx,dy write (2,'(2i5,4e10.3)') nx,ny,xd,yd,dx,dy write (*,'(5i10)') ne,na,ns,ni,n write (2,'(5i10)') ne,na,ns,ni,n do i=1,ny do j=1,nx write (*,1) num(i,j),num(i,j+1),num(i,j-1),num(i+1,j),num(i-1,j) write (2,1) num(i,j),num(i,j+1),num(i,j-1),num(i+1,j),num(i-1,j) enddo enddo c----generate artificial boundary data---- c------left boundary---- j=0 do i=1,ny write (*,1) num(i,j),num(i,j+1) write (3,1) num(i,j),num(i,j+1) enddo c------bottom boundary---- i=ny+1 do j=1,nx write (*,1) num(i,j),num(i-1,j) write (3,1) num(i,j),num(i-1,j) enddo c------right boundary---- j=nx+1 do i=ny,1,-1 write (*,1) num(i,j),num(i,j-1) write (3,1) num(i,j),num(i,j-1) enddo close(3) write (*,*) 'ne=',ne,nne open(3,file='coord.dat',status='old') do i=1,ne read (3,'(i3,2f10.5)') iq,xp(i),yp(i) enddo do i=1,ne read (3,1) ie,ia if((-ie).ne.i)then write (*,*) 'Index out of order.' stop endif write (2,'(i3,2f10.5,i3)') i,xp(i),yp(i),ia enddo close(3,status='delete') end