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

Fortran Maccormack

  1. Jan 19, 2017 #1
    Hi i have a problem in solving the maccormack algorithm for the following :
    ∂p/∂t+8*∂p/∂x=0,x∈(-10,10)
    p(x,t=0)=e**-3x
    the exact solution is u exact(x,t)=e**-3(x-8t)
    I have to verify the solution with the exact solution at t=50* dt
    This is what I've done so far:

    Code (Fortran):

    implicit none
        integer,parameter::Nx=100
        real*8,parameter::a1=-10.d0,b1=10.d0,CFL=0.01d0,a=8.d0
        real*8,dimension(0:Nx)::uM,uaux,unew,x
        real*8::u_ex,f1,g1,g2,f,eror,t,t1,dx,dt,tfinal
        integer::i,contor
     
     
       
        open(1,file='MacCormack_rez.txt')
       
     
       
        dx=(b1-a1)/Nx
        dt=CFL*dx/a
        t=0.d0
        contor=0
        tfinal=50.d0*dt
     
        t=0 (
        do i=0,Nx
            x(i)=a1+i*dx
       
           
            uM(i)=f1(x(i))
           
        end do
        write (1,100) (f1(x(i)),i=0,Nx)
     
     
     
        do while(t<tfinal)
            t=t+dt              
            t1=t-dt/2.d0
           
           
           
           2.Mac Cormack
         
             do i=1,Nx-1          
                 uaux(i)=uM(i)-CFL*(uM(i+1)-uM(i))
            end do
         
         
            do i=1,Nx-1
                 unew(i)=1/2.d0*((uM(i)+uaux(i))-CFL*(uaux(i)-uaux(i-1)))  
            end do
            unew(0)=g1(t)
            unew(Nx)=g2(t)
            uM=unew
             write(2,100)(uM(i),i=0,Nx)
       
       t=50.d0*dt
     
        write (1,100) (u_ex(x(i),t,a),i=0,Nx)

        write(*,*) 'End program'
        read(*,*)
    100 format(120(f16.9,1x))
     

        end program
     
        function u_ex(x,t,a)
        implicit none
        real*8::u_ex,x,t,a
        real*8,parameter:: pi=4.d0*datan(1.d0)
        u_ex=dexp(-3.d0*(x-a*t))
        end function
     
     
        function f1(x)
        implicit none
        real*8::f1,x
        real*8,parameter:: pi=4.d0*datan(1.d0)
        f1=dexp(-3.d0*x)
        end function
     
     
        function g1(t)
        implicit none
        real*8::g1,t
        real*8,parameter:: pi=4.d0*datan(1.d0)
        g1=0.d0
        end function
     
        function g2(t)
        implicit none
        real*8::g2,t
        real*8,parameter:: pi=4.d0*datan(1.d0)
        g2=0.d0
        end function
     
     
            function f(x,t)                            
        implicit none
        real*8::f,x,t
        real*8,parameter:: pi=4.d0*datan(1.d0)
        f=0.d0
        end function
     
    Can someone give me an advice ,please?
     
  2. jcsd
  3. Jan 19, 2017 #2

    jedishrfu

    Staff: Mentor

    Welcome to PF!

    So what's wrong? A compiler error? A runtime error?
     
  4. Jan 19, 2017 #3
    upload_2017-1-20_7-29-9.png
     
  5. Jan 20, 2017 #4

    Mark44

    Staff: Mentor

    Your error, which was just barely legible in you screen shot, is "An unterminated block exists".

    You're missing a program statement at the beginning of your main program. You have an end program statement, but not the program statement.

    It should look something like this
    Code (Fortran):

    program maccormack
       
        implicit none
        integer,parameter::Nx=100
        real*8,parameter::a1=-10.d0,b1=10.d0,CFL=0.01d0,a=8.d0
        real*8,dimension(0:Nx)::uM,uaux,unew,x
        real*8::u_ex,f1,g1,g2,f,eror,t,t1,dx,dt,tfinal
        integer::i,contor
        ! etc.
    end program

    function u_ex(x,t,a)
        implicit none
        real*8::u_ex,x,t,a
        real*8,parameter:: pi=4.d0*datan(1.d0)
        u_ex=dexp(-3.d0*(x-a*t))
    end function

    ! Other function definitions
     
    Also, this line:
    Code (Text):
          2.Mac Cormack
    should either be removed or made into a comment. It is invalid Fortran code.
     
  6. Jun 24, 2017 #5
    Thank you for your response!
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted



Similar Discussions: Fortran Maccormack
  1. Infinity in fortran (Replies: 5)

  2. Linking Fortran (Replies: 5)

  3. Fortran, is it outdated? (Replies: 75)

  4. What is IERR (FORTRAN) (Replies: 9)

  5. Parallel Fortran (Replies: 15)

Loading...