source: CPL/oasis3-mct/branches/OASIS3-MCT_2.0_branch/lib/mct/mpi-serial/ftest.F90 @ 4775

Last change on this file since 4775 was 4775, checked in by aclsce, 5 years ago
  • Imported oasis3-mct from Cerfacs svn server (not suppotred anymore).

The version has been extracted from https://oasis3mct.cerfacs.fr/svn/branches/OASIS3-MCT_2.0_branch/oasis3-mct@1818

File size: 2.9 KB
Line 
1
2        program test
3        implicit none
4        include "mpif.h"
5
6        integer ier
7
8        integer sreq(10), sreq2(10), rreq(10), rreq2(10)
9        integer sbuf(10), sbuf2(10), rbuf(10), rbuf2(10)
10        integer tag
11        integer status(MPI_STATUS_SIZE,10)
12        integer i
13        integer comm2;
14        logical flag;
15        character pname(MPI_MAX_PROCESSOR_NAME)
16        integer pnamesize
17
18        integer temp,position
19
20        external my_op_func
21        integer myop
22
23
24        print *, 'Time=',mpi_wtime()
25
26        call mpi_initialized(flag,ier)
27        print *, 'MPI is initialized=',flag
28
29        call mpi_init(ier)
30
31        call mpi_get_processor_name(pname,pnamesize,ier)
32        print *, 'proc name: "',pname(1:pnamesize),'"  size:',pnamesize
33
34
35        call mpi_comm_dup(MPI_COMM_WORLD,comm2,ier)
36
37        call mpi_initialized(flag,ier)
38        print *, 'MPI is initialized=',flag
39
40
41
42
43        do i=1,5
44          tag= 100+i
45          print *,  'Post receive tag ',tag
46
47          call mpi_irecv( rbuf(i),1,MPI_INTEGER,0,tag, &
48                          MPI_COMM_WORLD,rreq(i),ier)
49
50        end do
51        do i=1,5
52!         tag=1100+i
53!         print *,  'Post receive tag ',tag
54
55          call mpi_irecv( rbuf2(i),1,MPI_INTEGER, &
56                          MPI_ANY_SOURCE, MPI_ANY_TAG, &
57                          comm2,rreq2(i),ier)
58
59        end do
60
61
62        do i=1,5
63          sbuf(i)=10*i
64          tag=100+i
65          print *, 'Send ',sbuf(i),' tag ',tag
66
67          call mpi_isend( sbuf(i),1,MPI_INTEGER,0,tag, &
68                          MPI_COMM_WORLD,sreq(i),ier)
69        end do
70
71
72        do i=1,5
73          sbuf2(i)=1000+10*i
74          tag=1100+i
75          print *, 'Send ',sbuf2(i),' tag ',tag
76
77          call mpi_isend( sbuf2(i),1,MPI_INTEGER,0,tag, &
78                          comm2,sreq2(i),ier)
79        end do
80
81
82        print *, 'Time=',mpi_wtime()
83        call mpi_waitall(5,sreq,status,ier)
84        print *,'sends on MPI_COMM_WORLD done'
85
86        call mpi_waitall(5,rreq,status,ier)
87        print *,'recvs on MPI_COMM_WORLD done'
88       
89        do i=1,5
90          print *, 'Status source=',status(MPI_SOURCE,i), &
91                   '  tag=',status(MPI_TAG,i)
92        end do
93
94        call mpi_waitall(5,sreq2,status,ier)
95        print *,'sends on comm2 done'
96
97        call mpi_waitall(5,rreq2,status,ier)
98        print *,'recvs on comm2 done'
99
100        do i=1,5
101          print *, 'Status source=',status(MPI_SOURCE,i), &
102                   '  tag=',status(MPI_TAG,i)
103        end do
104
105
106! pack/unpack
107
108        position=0
109        do i=1,5
110          temp=100+i
111          call mpi_pack(temp,1,MPI_INTEGER,sbuf,20,position,MPI_COMM_WORLD,ier)
112        end do
113
114        call mpi_isend(sbuf,position,MPI_PACKED,0,0,MPI_COMM_WORLD,sreq(1),ier)
115        call mpi_irecv(rbuf,position,MPI_PACKED,0,0,MPI_COMM_WORLD,rreq(1),ier)
116        call mpi_waitall(1,rreq,status,ier)
117
118        print *,"Pack/send/unpack:"
119
120        position=0
121        do i=1,5
122          call mpi_unpack( rbuf,20,position,temp,1,MPI_INTEGER, &
123                           MPI_COMM_WORLD,ier)
124          print *,temp
125        end do
126
127!
128        print *,"Creating op"
129        call mpi_op_create(my_op_func,.TRUE.,myop,ier)
130
131
132        call mpi_finalize(ier)
133
134        do i=1,5
135          print *, 'Time=',mpi_wtime()
136          call sleep(1)
137        end do
138
139        end
140
141
142
143
144        function my_op_func(invec,inoutvec,len,type)
145        integer invec(len),inoutvec(len)
146        integer len,type
147
148        return
149        end function my_op_func
150
151
152
Note: See TracBrowser for help on using the repository browser.