source: CPL/oasis3-mct/branches/OASIS3-MCT_5.0_branch/lib/mct/mpi-serial/tests/ctest_old.c @ 6331

Last change on this file since 6331 was 6331, checked in by aclsce, 17 months ago

Moved oasis-mct_5.0 in oasis3-mct/branches directory.

File size: 3.5 KB
Line 
1
2#include <stdio.h>
3#include "mpi.h"
4
5
6
7
8
9main(int argc, char *argv[])
10{
11  MPI_Request sreq[10], sreq2[10], rreq[10], rreq2[10];
12  int sbuf[10],sbuf2[10],rbuf[10],rbuf2[10];
13  int tag;
14  MPI_Status status[10];
15  int i,j;
16  MPI_Comm comm2;
17  int flag;
18  MPI_Group mygroup;
19  char pname[MPI_MAX_PROCESSOR_NAME];
20  int pnamelen;
21
22  int position, temp;
23  int errcount = 0;
24
25  printf("Time: %f\n",MPI_Wtime());
26
27  MPI_Initialized(&flag);
28  printf("MPI is initialized = %d\n",flag);
29
30  MPI_Init(NULL,NULL);
31
32  MPI_Get_processor_name(pname,&pnamelen);
33  printf("Processor name: %s (len=%d)\n",pname,pnamelen);
34
35#if 0
36  MPI_Comm_dup(MPI_COMM_WORLD,&comm2);
37#endif
38
39#if 0
40  MPI_Comm_split(MPI_COMM_WORLD,42,99,&comm2);
41#endif
42
43#if 1
44  MPI_Comm_group(MPI_COMM_WORLD,&mygroup);
45  MPI_Comm_create(MPI_COMM_WORLD,mygroup,&comm2);
46#endif
47
48  MPI_Initialized(&flag);
49  printf("MPI is initialized = %d\n",flag);
50
51  for (i=0; i<5; i++)
52    {
53      tag=100+i;
54      printf("COMWORLD Post ireceive tag %d\n",tag);
55
56      MPI_Irecv(&rbuf[2*i],1,MPI_2INT,
57                0,tag,MPI_COMM_WORLD,&rreq[i]);
58
59
60    }
61
62
63
64  for (i=0; i<5; i++)
65    {
66      sbuf2[i]=1000+10*i;
67      tag=100+i;
68      printf("COM2 Post isend %d tag %d\n",sbuf2[i],tag);
69      MPI_Isend(&sbuf2[i],1,MPI_INT,0,tag,comm2,&sreq2[i]);
70    }
71
72
73  for (i=0; i<5; i++)
74    {
75      sbuf[2*i]=10*i;
76      sbuf[2*i+1]=10*i+1;
77      tag=100+(4-i);
78      printf("COMWORLD Post isend %d tag %d\n",sbuf[i],tag);
79      MPI_Isend(&sbuf[2*i],1,MPI_2INT,0,tag,MPI_COMM_WORLD,&sreq[i]);
80    }
81
82  for (i=0; i < 5; i++)
83  {
84      if (sbuf[9-(2*i)] != rbuf[2*i+1] || sbuf[8-2*i] != rbuf[2*i])
85      {
86        errcount++;
87        printf("Error for COMWORLD send\n");
88        printf("buf[%d] = %d, rbuf= %d\n", i, sbuf[9-2*i], rbuf[2*i+1]);
89        printf("buf[%d] = %d, rbuf= %d\n", i, sbuf[8-2*i], rbuf[2*i]);
90      }
91  }
92
93  printf("Time: %f\n",MPI_Wtime());
94  MPI_Waitall(5,sreq,status);
95  MPI_Waitall(5,rreq,status);
96
97  printf("Waiting for COMWORLD send/receives\n");
98
99  for (i=0; i<5; i++)
100    printf("tag %d rbuf= %d %d\n",status[i].MPI_TAG,rbuf[2*i],rbuf[2*i+1]);
101
102
103  for (i=0; i<5; i++)
104    {
105      tag=100+i;
106      printf("COM2 Post receive tag %d\n",tag);
107
108      MPI_Irecv(&rbuf2[i],1,MPI_INT,
109                0,tag,comm2,&rreq2[i]);
110
111      if (rbuf2[i] != sbuf2[i])
112      {
113        errcount++;
114        printf("Error for COM2 send %d\n", i);
115        printf("Found %d should be %d\n", rbuf2[i], sbuf2[i]);
116      }
117    }
118
119
120  MPI_Waitall(5,sreq2,status);
121  MPI_Waitall(5,rreq2,status);
122
123  printf("Waiting for COM2 send/receive\n");
124
125  for (i=0; i<5; i++)
126    printf("tag %d rbuf= %d\n",status[i].MPI_TAG,rbuf2[i]);
127
128
129  /*
130   * pack/unpack
131   */
132
133  position=0;
134  for (i=0; i<5; i++)
135    {
136      temp=100+i;
137      MPI_Pack(&temp, 1, MPI_INT, sbuf, 20, &position, MPI_COMM_WORLD);
138    }
139
140  MPI_Isend( sbuf, position, MPI_PACKED, 0, 0, MPI_COMM_WORLD,&sreq[0]);
141
142  MPI_Irecv( rbuf, position, MPI_PACKED, 0, 0, MPI_COMM_WORLD, &rreq[0] );
143  MPI_Waitall(1,rreq,status);
144
145  printf("Pack/send/unpack: \n");
146
147  position=0;
148  for (i=0; i<5; i++)
149    {
150      MPI_Unpack(rbuf,20,&position,&temp,1,MPI_INT,MPI_COMM_WORLD);
151      printf("%d\n",temp);
152    }
153
154  for (i=0; i<5; i++)
155  {
156    if (sbuf[i] != rbuf[i])
157    {
158      errcount++;
159      printf("Error for pack/send/unpack\n");
160      printf("Found %d should be %d\n", rbuf[i], sbuf[i]);
161    }
162  }
163
164  MPI_Finalize();
165
166
167  for (i=0; i<5; i++)
168    {
169      printf("Time: %f\n",MPI_Wtime());
170      sleep(1);
171    }
172
173
174  if (errcount)
175    printf("Finished with %d errors.\n", errcount);
176  else
177    printf("No errors\n");
178}
179
180
181
Note: See TracBrowser for help on using the repository browser.