Silverfrost Forums

Welcome to our forums

Error 94, Unit has neither been OPENed nor preconne

7 Mar 2013 1:51 #11670

Hi all can you please guide me on following I am using in CFD course I am getting error stating Error 94, Unit has neither been OPENed nor preconnected

!!!!!!!******* MAE 561 Homework 3           *******!!!!!!!!!
!!!!!!!******* Fortran95 Code for Problem 2 *******!!!!!!!!!
!!!!!!!******* ANANDRAO BIRADAR, 1206263652 *******!!!!!!!!! 



program problem_2_FTCS_BTCS_explicit_method
implicit none 

real*8, dimension (0:40,0:540)  :: u, a, b, c
real*8, dimension (0:40)		:: y
real*8, dimension (39,0:540)  	:: d
real*8, dimension (3)			:: p
real*8   						:: h, v, den, z, q
integer							:: i, k, j, m



	den  = 800.0d0            !!!!! Density = d
    z    = 0.002              !!!!! z = delta(t)
    h    = 0.001              !!!!! grid spacing

!!!! Applying initial condition !!!!

    y(0) = 0							!! boudary conditions for y
    y(40)= 0.04

    do i = 1,39
      y(i) = y(i-1)+h
    end do

    open  (10, file = 'Values of y.txt')
    write (10,1) y
    1     format(1f40.8)
    close (10)



	do i = 1,40
       u(i,0) = 0
    end do

	v = 0.000217              !!!! v = kinematic viscosity

    do i = 0,540
      u(0,i) = 40.0d0         !!!! As lower plate start moving with u = 40 m/s
      u(40,i)= 0			  !!!! Upper plate is stationary
    end do


    

    
    

    





   !!!!!!!!!!!!!!!!!*************** Using FTCS Method with given conditions ****************!!!!!!!!!!!!!!!! 





    do j = 1,3
       p(1) =  0.0d0								!!!!! p = dp/dx
       p(2) =  20000.0d0
       p(3) = -30000.0d0

    do k = 0,539
     
      do i = 1,39
          u(i,k+1)= u(i,k)+((v*z)/h**2)*(u(i+1,k)-2.0d0*u(i,k)+u(i-1,k))-((z/den)*p(j))          !!!!!!!! The FTCS Formula
      end do 


      !!!!!!!!! Saving the results in different files !!!!!!


      if (j == 1) then                    !!!!!!! for dp/dx = 0


      if ( k == 0 ) then
      print*, 'At t = 0.00'
      open  (20, file = 'Values of u at dp-dx = 0.txt')
      do i = 0,40
      write (20,2) u(i,k)
      end do
      2     format(1f40.20)      


      else if ( k == 89 ) then
      print*, 'At t = 0.18'  
      do i = 0,40
      write (20,2) u(i,k)
      end do
      

      else if ( k == 179 ) then
      print*, 'At t = 0.36'  
      do i = 0,40
      write (20,2) u(i,k)
      end do
            

      else if ( k == 269 ) then
      print*, 'At t = 0.54'  
      do i = 0,40
      write (20,2) u(i,k)
      end do
      
      
      else if ( k == 359 ) then
      print*, 'At t = 0.72'
      do i = 0,40
      write (20,2) u(i,k)
      end do
            
      
      else if ( k == 449 ) then
      print*, 'At t = 0.9'
      do i = 0,40
      write (20,2) u(i,k)
      end do
            
      
      else if ( k == 539 ) then
      print*, 'At t = 1.08'
      do i = 0,40
      write (20,2) u(i,k)
      end do
      close(20)
      
  
     
      end if





      

      else if (j == 2) then                  !!!!!!! for dp/dx = 2.0*10^4 

        
      if ( k == 0 ) then
      print*, 'At t = 0.00'
      open  (30, file = 'Values of u at dp-dx = 20000.txt')
      do i = 0,40
      write (30,2) u(i,k)
      end do
     

      else if ( k == 89 ) then
      print*, 'At t = 0.18'  
      do i = 0,40
      write (30,2) u(i,k)
      end do
           

      else if ( k == 179 ) then
      print*, 'At t = 0.36'  
      do i = 0,40
      write (30,2) u(i,k)
      end do
            

      else if ( k == 269 ) then
      print*, 'At t = 0.54'  
      do i = 0,40
      write (30,2) u(i,k)
      end do
            

      else if ( k == 359 ) then
      print*, 'At t = 0.72'
      do i = 0,40
      write (30,2) u(i,k)
      end do
            
      
      else if ( k == 449 ) then
      print*, 'At t = 0.9'
      do i = 0,40
      write (30,2) u(i,k)
      end do
      
      
      else if ( k == 539 ) then
      print*, 'At t = 1.08'
      do i = 0,40
      write (30,2) u(i,k)
      end do
      close(30)
      
  
     
      end if




      else if (j == 3) then					!!!!!!! for dp/dx = - 3.0*10^4 


        
      if ( k == 0 ) then
      print*, 'At t = 0.00'
      open  (40, file = 'Values of u at dp-dx = - 30000.txt')
      do i = 0,40
      write (40,2) u(i,k)
      end do
     

      else if ( k == 89 ) then
      print*, 'At t = 0.18'  
      do i = 0,40
      write (40,2) u(i,k)
      end do
           

      else if ( k == 179 ) then
      print*, 'At t = 0.36'  
      do i = 0,40
      write (40,2) u(i,k)
      end do
            

      else if ( k == 269 ) then
      print*, 'At t = 0.54'  
      do i = 0,40
      write (40,2) u(i,k)
      end do
            

      else if ( k == 359 ) then
      print*, 'At t = 0.72'
      do i = 0,40
      write (40,2) u(i,k)
      end do
            
      
      else if ( k == 449 ) then
      print*, 'At t = 0.9'
      do i = 0,40
      write (40,2) u(i,k)
      end do
            
      
      else if ( k == 539 ) then
      print*, 'At t = 1.08'
      do i = 0,40
      write (40,2) u(i,k)
      end do
      close(40)
      
  
     
      end if        

      end if          


    end do     
     
    end do

    


!$$$$$$       print*, 'Printing the whole matrix'
!$$$$$$       open  (541, file = 'Printing the whole matrix.txt')
!$$$$$$       do i = 0,40
!$$$$$$       do k = 0,540
!$$$$$$       read (541,9) u(i,k)
!$$$$$$       end do
!$$$$$$       end do
!$$$$$$       write (541,9) u
!$$$$$$       9     format(541f40.20)
!$$$$$$       close (541)






   !!!!!!!!!!!!!!!!!*************** Using BTCS Method with given conditions ****************!!!!!!!!!!!!!!!! 


   ! z(1) = 0.01    !! z = delta(t)  z(2) = 0.002  has already been defined initially


   !! Other initial conditions

   
	do i = 1,40
       u(i,0) = 0
    end do

	v = 0.000217              !!!! v = kinematic viscosity

    do i = 0,540
      u(0,i) = 40.0d0         !!!! As lower plate start moving with u = 40 m/s
      u(40,i)= 0			  !!!! Upper plate is stationary
    end do


    do m = 1,3

      if ( m == 1 ) then             

        z = 0.01
        q = 0.0                 !!!! q = dp/dx

      else if ( m == 2) then

        z = 0.01
        q = 2000.0d0

      else if ( m == 3) then 

        z = 0.002
        q = 2000.0d0

      end if

            


   !! Defining Elements

   do k = 1,539    

     do i = 0,40

       if ( i == 0 ) then

         b(i,k) = -(1+(2.0d0*v*z/h**2))
         c(i,k) =  (v*z)/h**2
       
       else if (i == 40) then

         a(i,k) =  (v*z)/h**2
         b(i,k) = -(1+(2.0d0*v*z/h**2))
         
       else

         a(i,k) =  (v*z)/h**2
         b(i,k) = -(1+(2.0d0*v*z/h**2))
         c(i,k) =  (v*z)/h**2
                           
       end if
     
     end do





 
    !!!! Initiating & calculating d !!!!!

     do i = 1,39

       if ( i == 1 ) then

         d(i,k) = - u(i,k) + (0.002)*(q/den) - a(i,k)*u(i-1,k+1)

       else if ( i == 39 ) then

         d(i,k) = - u(i,k) + (0.002)*(q/den) - c(i,k)*u(i+1,k+1)     
          
       else   

         d(i,k) = - u(i,k) + (0.002)*(q/den)
       end if  
    
  /  end do
    
     
     !!!! Gauss Elimination !!!!

    do i = 2,39
       
       b(i,k) = b(i,k) - c(i-1,k)*a(i,k)/b(i-1,k)
       d(i,k) = d(i,k) - d(i-1,k)*a(i,k)/b(i-1,k)
            
     end do

     !end do


     !!!!! Back Substition !!!!

    do i = 39 ,1,-1

       if (i == 39) then
         
         d(39,k) = d(39,k)/b(39,k)

       else 
           
         d(i,k) = (d(i,k)-c(i,k)*d(i+1,k))/b(i,k)

       end if

               
     end do

 
     do i = 1,39

       u(i,k) = d(i,k)

     end do


   !!!!! Saving the values to different  files !!!!!!!!!

   
      !!!!!!! for (I) delta(t) = 0.01s, dp/dx = 0   !!!!!!!

      if (m == 1) then             


      if ( k == 0 ) then
      print*, 'At t = 0.00'
      open  (50, file = 'Values of u at delta(t)=0_dp-dx = 0.txt')
      do i = 0,40
      write (50,2) u(i,k)
      end do


      print*,'u(2,89)',u(2,89)    
                                        

      else if ( k == 89 ) then
      print*, 'At t = 0.18'  
      do i = 0,40
      write (50,2) u(i,k)
      end do
      

      else if ( k == 179 ) then
      print*, 'At t = 0.36'  
      do i = 0,40
      write (50,2) u(i,k)
      end do
            

      else if ( k == 269 ) then
      print*, 'At t = 0.54'  
      do i = 0,40
      write (50,2) u(i,k)
      end do
      
      
      else if ( k == 359 ) then
      print*, 'At t = 0.72'
      do i = 0,40
      write (50,2) u(i,k)
      end do
            
      
      else if ( k == 449 ) then
      print*, 'At t = 0.9'
      do i = 0,40
      write (50,2) u(i,k)
      end do
            
      
      else if ( k == 539 ) then
      print*, 'At t = 1.08'
      do i = 0,40
      write (50,2) u(i,k)
      end do
      close(50)


      end if



      !!!!!!! for (II)  delta(t) = 0.01s, dp/dx = 2.0*10^4 N/m^2/m   !!!!!!!



      
      else if (m == 2) then             


      if ( k == 0 ) then
      print*, 'At t = 0.00'
      open  (60, file = 'Values of u at delta(t)=0_dp-dx = 2000.txt')
      do i = 0,40
      write (60,2) u(i,k)
      end do
      

      else if ( k == 89 ) then
      print*, 'At t = 0.18'  
      do i = 0,40
      write (60,2) u(i,k)
      end do
      

      else if ( k == 179 ) then
      print*, 'At t = 0.36'  
      do i = 0,40
      write (60,2) u(i,k)
      end do
            

      else if ( k == 269 ) then
      print*, 'At t = 0.54'  
      do i = 0,40
      write (60,2) u(i,k)
      end do
      
      
      else if ( k == 359 ) then
      print*, 'At t = 0.72'
      do i = 0,40
      write (60,2) u(i,k)
      end do
            
      
      else if ( k == 449 ) then
      print*, 'At t = 0.9'
      do i = 0,40
      write (60,2) u(i,k)
      end do
            
      
      else if ( k == 539 ) then
      print*, 'At t = 1.08'
      do i = 0,40
      write (60,2) u(i,k)
      end do
      close(60)

      end if
      
  
     
      
      !!!!!!! for (III) delta(t) = 0.002s, dp/dx = 2.0*10^4 N/m^2/m   !!!!!!!



      else if (m == 3) then             


      if ( k == 0 ) then
      print*, 'At t = 0.00'
      open  (70, file = 'Values of u at delta(t)=0 dp-dx = 2000.txt')
      do i = 0,40
      write (70,2) u(i,k)
      end do
      

      else if ( k == 89 ) then
      print*, 'At t = 0.18'  
      do i = 0,40
      write (70,2) u(i,k)
      end do
      

      else if ( k == 179 ) then
      print*, 'At t = 0.36'  
      do i = 0,40
      write (70,2) u(i,k)
      end do
            

      else if ( k == 269 ) then
      print*, 'At t = 0.54'  
      do i = 0,40
      write (70,2) u(i,k)
      end do
      
      
      else if ( k == 359 ) then
      print*, 'At t = 0.72'
      do i = 0,40
      write (70,2) u(i,k)
      end do
            
      
      else if ( k == 449 ) then
      print*, 'At t = 0.9'
      do i = 0,40
      write (70,2) u(i,k)
      end do
            
      
      else if ( k == 539 ) then
      print*, 'At t = 1.08'
      do i = 0,40
      write (70,2) u(i,k)
      end do
      close(70)
      
  
       end if 

    end if

      end do

   end do

end program problem_2_FTCS_BTCS_explicit_method

[/quote]

7 Mar 2013 1:53 #11671

Anyhelp in improvent of more compact form would be appreciated

7 Mar 2013 7:56 #11673

It looks like you have an OPEN statement within a condition and a WRITE statement that is not conditional. So if the condition is not satisfied then the WRITE occurs without an OPEN.

7 Mar 2013 9:46 #11674

Hi Paul

thanks a ton, It works, I was stuck in this points for long time.

As I am beginner I couldn't notice it. Can you recommended some book for FORTRAN learning, reference for beginners ?

Thanks

26 Mar 2013 12:36 #11883

The following is a more compact form for some of your code: if ( k == 0 .or. mod(k,90)==89 ) then write (,1) k0.002 if ( k == 0 ) open (20, file = 'Values_of_u_at_dp-dx=0.txt') do i = 0,40 write (20,2) u(i,k) end do if ( k == 539 ) close(20) 1 format (' At t = ',f0.2) 2 format (f40.20) end if

Please login to reply.