-
Notifications
You must be signed in to change notification settings - Fork 1
/
example1d.f90
73 lines (59 loc) · 1.68 KB
/
example1d.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
65
66
67
68
69
70
71
72
program ex1d
use gabriel
use MPI
implicit none
integer,parameter :: n=10
! real,dimension(:,:,:),allocatable :: a,b
real,dimension(:),allocatable :: a,b
real,dimension(:,:),allocatable :: c
integer ierr,rank,right,left,mpisize,i,j,k
type(parcel) :: h(10,2)
type(distribution) :: d
call MPI_Init(ierr)
call MPI_Comm_rank(MPI_COMM_WORLD,rank,ierr)
call MPI_Comm_size(MPI_COMM_WORLD,mpisize,ierr)
call gabriel_init
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
allocate(a(0:n+1))
a=rank
write(*,'(a,i3,a,12f13.3)')'BEFORE Rank',rank,' data=',a(:)
print*,'Define subarray parcels..'
call h(1,1)%subarray(a,(/n/),(/n/))
call h(1,2)%subarray(a,(/0/),(/0/))
call h(2,1)%subarray(a,(/n-1/),(/n-1/))
call h(2,2)%subarray(a,(/1/),(/1/))
print*,'Define combined parcels..'
call h(3,1)%combined(h(1:2,1))
call h(3,2)%combined(h(1:2,2))
print*,'Initialize decomposition..'
call d%init(1,1,MPI_COMM_WORLD)
print*,'Add send..'
call d%add_send(right,h(3,1))
print*,'Add recv..'
call d%add_recv(left,h(3,2))
print*,'Create decomposition..'
call d%create
print*,'Check to see if validity check works'
print*,'Result should be NOT valid'
if (h(3,1)%is_valid_parcel(c)) then
print*,' Valid'
else
print*,'NOT valid'
endif
print*,'Update decomposition..'
print*,'Result should be valid'
if (h(3,1)%is_valid_parcel(a)) then
print*,' Valid'
else
print*,'NOT valid'
endif
print*,'Update decomposition..'
call d%update(a,a)
write(*,'(a,i3,a,12f13.3)')'AFTER Rank',rank,' data=',a(:)
deallocate(a)
call MPI_Finalize(ierr)
end