首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lid.exe: 0xc0000094中0x001D6653处的未处理异常:整数除以零

Lid.exe: 0xc0000094中0x001D6653处的未处理异常:整数除以零
EN

Stack Overflow用户
提问于 2020-11-14 05:09:55
回答 1查看 135关注 0票数 0

我正在尝试用Fortran编写盖子驱动的空腔的代码。

当我想运行代码时,突然出现了integer division by zero错误。

我知道问题出在哪里,但我不知道该怎么解决它。我甚至更改了一些数字来避免这个问题,但又发生了。我上传了错误的照片

我对它进行了搜索,有一些关于C++的答案,但我没有找到任何关于Fortran的答案。

代码语言:javascript
复制
Program Lid
    
    implicit none
    Integer :: I,J,nx, ny, dx, dy, L, W, Iteration, Max_Iteration , Re, M, N, dt
    Real :: Delta
    Real, allocatable :: u(:,:), v(:,:), p(:,:), u_old(:,:), v_old(:,:), p_old(:,:), X(:), Y(:)
    !***************************************************!

    PRINT *, "ENTER THE DESIRED POINTS ..." 
    PRINT *, "... IN X DIRECTION:  SUGGESTED RANGE (20-200)" 
    READ*, M 
    PRINT *, "... IN Y DIRECTION:  SUGGESTED RANGE (10-100)" 
    READ*, N 
    
    ! Define Geometry
    dt = 0.001
    Delta = 2
    Re = 100
    L = 10
    W = 10
    dx = L /Real(M-1)
    dy = W /Real(N-1)
    
    ALLOCATE (X(M),Y(N),u(M,N),u_old(M,N),v(M,N),v_old(M,N),p(M,N),p_old(M,N))
    
    ! Grid Generation
    
    Do I = 1, M
        x(I) = (I-1)* dx
    End Do
    
    Do J=1 , N
        y(J) = (J-1) * dy
    End Do
     
    ! Boundray Condition
    Do I=1 , M
        u(I,1) = 0
        u(1,I) = 0
        u(M,I) = 0
        u(I,M) = 1       ! Lid Velocity
    End Do
    
    Do J=1, N
        v(J,1) = 0
        v(1,J) = 0
        v(J,N) = 0
        v(M,J) = 0
    End Do
    
    ! Initialization
    
    Do I=2, M-1
        Do J=2, N-1
            
            u(I,J) = 0
            v(I,J) = 0
            p(I,J) = 0
            
        End Do
        
    End Do
    
    ! Solver
        Do I=2, M-1
            Do J=2, N-1
                u_old(I,J) = u(I,J) 
                v_old(I,J) = v(I,J)
                p_old(I,J) = p(I,J)
            
                u(I,J) = - dt / 4* dx * (( u(I, J+1)+ u_old(I,J))**2 - (u_old(I, J)+u(I,J-1))**2) - dt / 4* dy * ((u_old(I,J)+ u(I-1,J)) &
                    * (v(I-1,J) + v(I-1, J+1)) - (u_old(I,J) + u(I+1,J)) * (v_old(I,J) + v(I,J+1))) - dt / dx *(p(I, J+1) - p(I,J)) &
                    + dt / Re * ((u(I+1,J) - 2 * u_old(I,J) + u(I-1,J)) / dx**2 + (u(I,J+1) - 2 * u_old(I,J) + u(I,J+1)) / dy**2) + u_old(I,J)
            
                v(I,J) = - dt / 4* dy * (( v(I-1, J)+ v(I-1,J+1))**2 - (v_old(I, J)+v(I,J+1))**2) - dt / 4* dx * ((u_old(I,J)+ u(I,J+1)) &
                    * (v(I,J+1) + v(I-1, J+1)) - (u_old(I,J) + u(I,J-1)) * (v_old(I,J) + v(I-1,J))) - dt / dy *(p(I, J+1) - p(I,J)) &
                    + dt / Re * ((v(I+1,J) - 2 * v_old(I,J) + v(I-1,J)) / dx**2 + (v(I,J+1) - 2 * v_old(I,J) + v(I,J+1)) / dy**2) + v_old(I,J)
            
                p(I,J) = - Delta * dt / 2 * ((u(I,J+1)+ u_old(I,J)) - (u_old(I,J) + u(I,J-1))) - Delta * dt / 2 &
                    * ((v(I-1,J)+ v(I-1,J+1)) - (v_old(I,J) + v(I,J+1)))
            
            End Do
        
        End Do
        
    
    !-----------------------OUTPUTS GENERATION----------------------------- 
OPEN (1,FILE='FIELD.PLT') 
WRITE (1,*) 'VARIABLES=X,Y,u,v,p' 
WRITE (1,*) 'ZONE I=',M,' J=',N 
DO J=1,N 
  DO I=1,M 
    WRITE (1,*) X(I),Y(J),u(I,J),v(I,J),p(I,J)
  END DO 
END DO 
    
End Program Lid
EN

回答 1

Stack Overflow用户

发布于 2020-11-14 05:51:19

假设图像上显示的黄色箭头表示发生异常的线(72):

显然,dx等于或变为零,因为这是对该行所做的唯一划分。

您必须知道当dx为零时意味着什么,或者是什么原因造成的,除非是编程或数据输入问题造成的。

在任何情况下,您都必须确保不执行被零整除的那部分代码。

你需要做什么来防止这种情况,完全取决于你的代码应该做什么。我帮不了你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64828081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档