- #1

Cassius1n

- 13

- 0

∂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?