回 帖 发 新 帖 刷新版面

主题:各位大侠帮小弟看看

program differelye_laplace 
 use IMSL
 implicit none
 !差分方程的建立
    integer i,j,h,k,k1,k2,k3,k4,k5,k6,k7,k8
    real,parameter::lx=10,ly=10,lz=10
    real(kind=8) r(lx,ly,lz),c(lx,ly,lz),z(lx,ly,lz)
    real,parameter::pi=3.1415926
    integer,parameter::n=1000     !n=lx*ly*lz
    integer::dx,dy,dz,dx2,dy2,dz2
    real uu    
    real::a(n,n)=0
    real::b(n,1)=0
    real::u(n,1)=0

    dx=1/(lx-1)
    dy=2*pi/(ly-1)
    dz=1/(lz-1)
    dx2=dx*dx
    dy2=dy*dy
    dz2=dz*dz
     uu=2.0    

 do i=2,lx-1
  do j=2,ly-1
   do h=2,lz-1
    k=(h-1)*lx*ly+(i-1)*ly+j
       r(i,j,h)=dx*(i-1)
    c(i,j,h)=dy*(j-1)
    z(i,j,h)=dz*(h-1)
    a(k,k)=2/dz2+2/dx2+2/r(i,j,h)/dy2
    a(k,k-1)=1/dx2
    a(k,k+1)=1/dx2
    a(k,k-ly)=1/dx2*(1-dx/2/r(i,j,h))
    a(k,k+ly)=1/dx2*(1+dx/2/r(i,j,h))
    a(k,k-lx*ly)=1/r(i,j,h)/dy2
    a(k,k+lx*ly)=1/r(i,j,h)/dy2
   end do
  end do
 end do


 do i=1,lx
  do j=1,ly

    k1=(lz-1)*lx*ly+(i-1)*ly+j
    a(k1,k1)=1  
    b(k1,1)=10.0   
  end do
 end do

 do i=1,8
  do j=1,ly
  k2=(i-1)*ly+j
  a(k2,k2)=1
  b(k2,k2)=uu  
  end do
 end do

 do i=8,lx
  do j=1,ly
  k3=(i-1)*ly+j
  a(k3,k3)=1
  b(k3,k3)=u(lx*ly+k3,1)
  end do
 end do


 do j=1,ly
  do h=1,lz
   k4=(h-1)*lx*ly+(lx-1)*ly+j
   a(k4,k4)=1
   b(k1,1)=u((h-1)*lx*ly+(lx-2)*ly+j,1) 
   k8=(h-1)*lx*ly+j
   a(k8,k8)=1
   b(k8,1)=10*z(i,j,h)
  end do
 end do

 do i=1,lx
  do h=1,lz
   k5=(h-1)*lx*ly+(i-1)*ly+1
   k6=(h-1)*lx*ly+i*ly-1
   a(k5,k5)=1
   a(k6,k6)=1    
   b(k5,1)=b(k6,1)  
  end do
 end do

 do j=1,ly
  do h=1,lz
  k7=(h-1)*lx*ly+j
  a(k7,k7)=1
  b(k7,1)=b((h-1)*lx*ly+1,1)
  end do
 end do

  u=a.ix.b
  write(*,*) u
stop
end



总是提示:被零除,出现黄色箭头在第一个循环的a(k,k)=处

回复列表 (共6个回复)

沙发

那就把那一行的分母输出看看是不是真的是零.
integer::dx,dy,dz,dx2,dy2,dz2
这些变量是整形让我感到有些诧异!!!...

板凳


确实全都等于零,找不到原因,再帮忙看看吧!谢谢!

3 楼

就看这两行
    real,parameter::lx=10,ly=10,lz=10
    real(kind=8) r(lx,ly,lz),c(lx,ly,lz),z(lx,ly,lz)
你想干啥?

开辟个形如a(1.1,2.3)的数组么?

4 楼

嗯, 楼主看来不是很留意变量的类型. 我也奇怪为什么形如r(lx,ly,lz)这样的空间开辟编译器竟然不报错或者警告.

还有我之前说的
integer::dx,dy,dz,dx2,dy2,dz2
dx=1/(lx-1)
dy=2*pi/(ly-1)
dz=1/(lz-1)
等号右边的值是0.**** 但最后最后赋值给整型的dx一转换可能dx就等于0了.(按lx=10, dx肯定是0)
在变量类型混合的式子中处理数据一定要留个心眼.

5 楼


受教了,谢谢![em2]

6 楼


谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册