Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Fortran Runtime error 112

  1. Oct 17, 2015 #1
    Hi, I try to write program to calculating mach number, with using bisection method. When I run program, fortran write to me an error in line 40. Can you help? I tried to calculating function by using wolfram sucesfully but I need to run it on fortran, An equation is 1.7795 - (0.334898 (1 + 0.2 x^2)^6.)/x^2. Can you help me? Thx

    My error code:
    Code (Fortran):

    program mach
         real pp,z1,z2,sucin,a,b,x,machx,a1

          pp=1
          a1=0.1
          b=3

          z1=pp**2-(0.334898*(1+0.2*a1**2)**6)/a1**2
          z2=pp**2-(0.334898*(1+0.2*b**2)**6)/b**2

          sucin=z1*z2

          if(sucin.lt.0) go to 1

          if(sucin.gt.0) go to 3

        1 continue

          do
              a=a1
              a1=(b+a)/2

              z1=pp**2-(0.334898*(1+0.2*a1**2)**6)/a1**2
              z2=pp**2-(0.334898*(1+0.2*b**2)**6)/b**2

              sucin=z1*z2
              machx=a
              x=abs(b-a)

              if(x.lt.0.0001) exit

              if(sucin.lt.0) cycle

              if(sucin.gt.0) go to 2
          end do

        2 continue

          do
              b=a1
              a1=(b+a)/2

              z1=pp**2-(0.334898*(1+0.2*a**2)**6)/a**2
              z2=pp**2-(0.334898*(1+0.2*a1**2)**6)/a1**2

              sucin=z1*z2
              machx=b
              x=abs((b-a))

              if(x.lt.0.0001) exit

              if(sucin.lt.0) cycle

              if(sucin.gt.0) go to 1
          end do

        3 continue

          print*,'Mach number is'
          write(5,*) machx

          stop

    end program mach
     
     
    Last edited by a moderator: Oct 17, 2015
  2. jcsd
  3. Oct 17, 2015 #2
    Problem is solved.
     
  4. Oct 17, 2015 #3

    jedishrfu

    Staff: Mentor

    That's great.

    What was the actual error and how did you solve it?
     
  5. Oct 17, 2015 #4
    You can see, the condition if( sucin.gt.0)go to 3 in line 10 is wrong. If I use only bisection method, the program will not work correctly, because i must to find extreme of the function and then must to choose right interval. I had to use a next numerical method to find extrem and then I could solve this problem. I would be glad if you find some more elegant solution for solving this function. Thx
     
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook