-
Notifications
You must be signed in to change notification settings - Fork 1
/
example_auto1d.f90
65 lines (48 loc) · 1.68 KB
/
example_auto1d.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
program ex
use gabriel
use MPI
implicit none
integer,parameter :: n=10
integer,parameter :: s=3
real,parameter :: delta=0.01
logical :: correct = .true.
real,dimension(:),allocatable :: a,b
integer ierr,rank,right,left,mpisize,i,j,k
integer hor
type(box) :: c
type(distribution) :: d
call MPI_Init(ierr)
print*,'Initialization...'
call MPI_Comm_rank(MPI_COMM_WORLD,rank,ierr)
call MPI_Comm_size(MPI_COMM_WORLD,mpisize,ierr)
right=rank+1
left=rank-1
if (right.ge.mpisize)right=0
if (left.lt.0)left=mpisize-1
print*,'left,rank,right=',left,rank,right
hor=rank
allocate(a(hor*s-1:hor*s+s))
a=rank
do i=lbound(a,1),ubound(a,1)
a(i)=a(i)+i*delta
enddo
write(*,'(a,4i4)')'Size,Rank,hor=',mpisize,rank,hor
write(*,'(a,i3,a,5f13.3,2i5)')'BEFORE Rank',rank,' data=',a,lbound(a,1),ubound(a,1)
print*,'Gabriel setup...'
call gabriel_init
call c%init(a,(/hor*s/),(/hor*s+s-1/),MPI_COMM_WORLD,periodic=(/.true./))
call d%halo(c)
call d%create
! call d%autocreate(a,(/hor*s/),(/hor*s+s-1/),MPI_COMM_WORLD,periodic=(/.true./))
! call d%autocreate(a,(/hor*s,ver*s+1,1/),(/hor*s+s-1,ver*s+s,6/),MPI_COMM_WORLD,periodic=(/.true.,.false.,.false./))
print*,'Update decomposition..'
call d%update(a)
write(*,'(a,i4,a,5f13.3)')' AFTER Rank',rank,' data=',a
if (rank.ne.0 .and. a(hor*s-1).ne.left+(hor*s-1)*delta) correct=.false.
if (rank.ne.mpisize-1 .and. a(hor*s+s).ne.right+(hor*s+s)*delta) correct=.false.
if (rank.eq.0 .and. a(hor*s-1).ne.left+(left*s+s-1)*delta) correct=.false.
if (rank.eq.mpisize-1 .and. a(hor*s+s).ne.right+(right*s)*delta) correct=.false.
deallocate(a)
call MPI_Finalize(ierr)
if (.not.correct) stop 1
end