-
Notifications
You must be signed in to change notification settings - Fork 1
/
evolve.f
78 lines (78 loc) · 1.82 KB
/
evolve.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
c************************************************************************
c
c Subroutine: Evolve
c
c Object: To evaluate the future values: rhol,ml,nl,el
c from the current values: rho, m, n, e
c
c Variables: up U_{j+l}
c um U_{j}
c dup U_{j+2}-U_{j+l}
c dum U_{j}-U_{j-l}
c du U_{j+l}-U_{j}
c dw R^{-l}*(U_{j+l}-U_{j})
c dwf Diffusive flux in char fields
c
c fc Central differencing flux
c df=R*dwf Diffusive flux
c f=fc+df Flux in x direction
c g Flux in y direction
c
c*************************************************************************
c
subroutine evolve (U,Ul)
implicit real*8 (a-h,m-z)
common /gridI/lx,ly,lsteps
common /gridR/T,dt,dx,dy,xlambda,ylambda
parameter (lmx=400,lmy=400)
dimension U(4,-1:lmx+3,-1:lmy+3),Ul(4,-1:lmx+3,-1:lmy+3)
real*8 :: up(4), um(4),du(4),dup(4),dum(4)
real*8 :: fc(4),df(4),f(4,0:lmx+1,0:lmy+1),g(4,0:lmx+1,0:lmy+1)
do j=1,ly+1
do i=0,lx+1
do k=1,4
up(k)=U(k,i+1,j)
um(k)=U(k,i,j)
dum(k)=U(k,i,j)-U(k,i-1,j)
dup(k)=U(k,i+2,j)-U(k,i+1,j)
du(k)=U(k,i+1,j)-U(k,i,j)
end do
call central(up,um,fc)
call diffusiveflux(up,um,du,dup,dum,df)
do k=1,4
f(k,i,j)=fc(k)+df(k)
end do
end do
end do
do j=0,ly+1
do i=1,lx+1
do k=1,4
kl=k
if(k.eq.2)kl=3
if(k.eq.3)kl=2
up(k)=U(kl,i,j+1)
um(k)=U(kl,i,j)
dum(k)=U(kl,i,j)-U(kl,i,j-1)
dup(k)=U(kl,i,j+2)-U(kl,i,j+1)
du(k)=U(kl,i,j+1)-U(kl,i,j)
end do
call central(up,um,fc)
call diffusiveflux(up,um,du,dup,dum,df)
do k=1,4
kl=k
if(k.eq.2)kl=3
if(k.eq.3)kl=2
g(k,i,j)=fc(kl)+df(kl)
end do
end do
end do
do j=1,ly+1
do i=1,lx+1
do k=1,4
Ul(k,i,j)=U(k,i,j)-xlambda*(f(k,i,j)-f(k,i-1,j))
c -ylambda*(g(k,i,j)-g(k,i,j-1))
end do
end do
end do
return
end