Program Advectie

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

program advectie_implicita

implicit none
real*8,parameter::a1=0d.0,b1=1.d0,cfl=0.9,a=2.d0,tf=1.d0
real*8,dimension(0,N) :: x,u,unew
real*8,dimension(1,N-1)::b
real*8::f1,j,d,s,t,g2,g1,uex,aux,eroare,dx,dt
integer,parameter:: N=4
character*90::fn1
character*40::title
integer::i
open(1,file='Rezultate ecuatia de advectie_implicita')
!generarea grilei
dx=(b1-a1)/N
!dx pasul
do i=0,N
x(i)=dx*i+a1
enddo
!pasul t
dt=cfl*dx/a
t=0.d0
contor=0
write(fn1,120)contor/1.d5
open(2,file=fn1)
write(2,'(A)')'variables="X","U"'
write(2,*)'zone T="',title,'"','I=',N+1,'F=Point'
120 format('Ecuatia_advectie',f8.5,'.plt')
!generarea frontierei sudice
do i=0,N
u(i)=f1(x(i))
write(2,100) x(i),u(i)
enddo
close(2)
!subdiagonala
j=-cfl/2.d0
!diagonala
d=1.d0
!supradiagoanla
s=cfl/2.d0
do while (t<tf)
t=t+dt
do i=1,N-1
b(i)=u(i)
enddo
unew(0)=g1(t)!frontiera vestica
unew(N)=g2(t)!frontiera estica
b(1)=b(1)+cfl/2.d0*unew(0)
b(N-1)=b(N-1)-cfl/2.f0*unew(N)

call Thomas(N-1,a,d,c,b,unew(1:N-1))
u=unew
contor=contor+1
write(fn1,120)contor/1.d5
open(2,file=fn1)
title=fn1
write(2,'(A)')'Variables="X","U"'
write(2,*)'Zone T="',title,'"','I=',N+1,'F=Point'
do i=0,N
aux=uex(x(i),t)
write(2,100) x(i),unew(i)!aux,eroare(aux,unew(i))
enddo
close(2)
enddo
print*,contor
!Afisare rezultate
do i=0,N
aux=uex(x(i),t)
write(1,100)x(i),unew(i),aux,eroare(aux,unew(i))
enddo
write(*,*) 'Programul s-a terminat!'
read(*,*)
100format(5(f19.15,2x))

end program advectie_implicita

function f1(x)
implicit none
real*8 :: x,f1
f1 =dexp(x)
end function f1

function g1(t)
implicit none
real*8 :: t,g1
g1 =dexp(-2.d0*t)
end function g1

function g2(t)
implicit none
real*8 :: t,g2
g2 =dexp(1.d0-2.d0*t)
end function g2

function uex(x,t)
implicit none
real*8 :: uex,x,t
uex =dexp(x-2.d0*t)
end function uex

function eroare(z,zaprox)
implicit none
real*8 :: z,zaprox,eroare
if(z/=0) then
eroare=dabs((z-zaprox)/z)*100.d0
else
eroare=dabs(z-zaprox)
endif
end function eroare

You might also like