Fortran Verifying Fortran MacCormack Algorithm at t=50*dt

  • Thread starter Thread starter Cassius1n
  • Start date Start date
  • Tags Tags
    Fortran
AI Thread Summary
The discussion focuses on verifying the MacCormack algorithm for solving the hyperbolic equation ∂p/∂t + 8*∂p/∂x = 0 with an initial condition p(x,0) = e**-3x. The exact solution is given as u_exact(x,t) = e**-3(x-8t), and the user is attempting to verify the numerical solution at t = 50*dt. Key issues identified include a missing program statement at the beginning of the main program and an invalid line labeled "2.Mac Cormack," which should be commented out. The user is seeking advice on resolving these errors to complete the verification process.
Cassius1n
Messages
13
Reaction score
0
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:

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?
 
Technology news on Phys.org
Welcome to PF!

So what's wrong? A compiler error? A runtime error?
 
jedishrfu said:
Welcome to PF!

So what's wrong? A compiler error? A runtime error?
upload_2017-1-20_7-29-9.png
 
Cassius1n said:
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:

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?
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
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:
      2.Mac Cormack
should either be removed or made into a comment. It is invalid Fortran code.
 
Thank you for your response!
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...

Similar threads

Replies
4
Views
2K
Replies
8
Views
2K
Replies
3
Views
2K
Replies
20
Views
2K
Replies
54
Views
5K
Back
Top