Unhandled exception at 0x001D6653 in Lid.exe: 0xc0000094: integer division by zero

0

I am trying to write the code for Lid-Driven Cavity in Fortran.

When I want to run the code, suddenly the integer division by zero errors appears.

I know what is the problem but I don't know how I can solve it. I even changed some numbers in order to avoid this issue but again happened. I uploaded the photo of the error

here

I searched about it and there are some answers for C++ but I could not find anything for Fortran.

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
fortran
asked on Stack Overflow Nov 13, 2020 by Mohammad • edited Nov 17, 2020 by TimK

1 Answer

0

Assuming that the yellow arrow shown on the image indicates the line (72) where the exception occurred:

Apparently dx is or becomes zero, because that's the only devision done on that line.

You must know what it means when dx is zero or what causes it, unless it's a programming or data input issue that causes it.

In any case you must make sure that you don't execute that part of your code that divides by zero.

What you need to do to prevent this, fully depends on what your code is supposed to do. I can't help you with that.

answered on Stack Overflow Nov 13, 2020 by meaning-matters

User contributions licensed under CC BY-SA 3.0