-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsaw.f90
49 lines (48 loc) · 1.12 KB
/
saw.f90
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
program saw
integer,parameter::NMAX=20
integer n,grid(0:2*NMAX,0:2*NMAX)
double precision z,rsq
common /integers/ n,grid
common /floats/ z,rsq
do i=0,2*NMAX,1
do j=0,2*NMAX,1
grid(i,j)=0
enddo
enddo
print*,'#n[1];z[2];<rsq>[3]'
do n=0,NMAX-1,1
z=0.0
rsq=0.0
call mov(NMAX,NMAX,0)
print*,n,';',z,';',rsq/z
enddo
end
recursive subroutine mov(x,y,ln)
integer,intent(in)::x
integer,intent(in)::y
integer,intent(in)::ln
integer,parameter::NMAX=20
integer n,grid(0:2*NMAX,0:2*NMAX)
double precision z,rsq
common /integers/ n,grid
common /floats/ z,rsq
if(ln .eq. n) then
z=z+1
rsq=rsq+(x-NMAX)**2+(y-nmax)**2
else
grid(x,y)=1
if(grid(x+1,y) .eq. 0) then
call mov(x+1,y,ln+1)
endif
if(grid(x-1,y) .eq. 0) then
call mov(x-1,y,ln+1)
endif
if(grid(x,y+1) .eq. 0) then
call mov(x,y+1,ln+1)
endif
if(grid(x,y-1) .eq. 0) then
call mov(x,y-1,ln+1)
endif
grid(x,y)=0
endif
end