Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix build and dist, add missing folder
[simgrid.git] / teshsuite / smpi / mpich3-test / datatype / struct-ezhov.c
diff --git a/teshsuite/smpi/mpich3-test/datatype/struct-ezhov.c b/teshsuite/smpi/mpich3-test/datatype/struct-ezhov.c
new file mode 100644 (file)
index 0000000..036eaf6
--- /dev/null
@@ -0,0 +1,59 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2008 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include "mpi.h"
+#include <string.h>
+
+#define COUNT          14
+#define SIZE           340
+#define EL_COUNT       1131
+
+char s_buf[EL_COUNT*SIZE];
+char r_buf[EL_COUNT*SIZE];
+
+int main( int argc, char **argv )
+{
+    int                rank, size, ret; 
+    MPI_Status                 Status;
+    MPI_Request                request;
+    MPI_Datatype       struct_type, type1[COUNT];
+    MPI_Aint           disp1[COUNT] = {0, 0, 332, 340};
+    int                        block1[COUNT] = {1, 56, 2, 1};
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+    type1[0] = MPI_LB;
+    type1[1] = MPI_FLOAT;
+    type1[2] = MPI_FLOAT;
+    type1[3] = MPI_UB;
+    
+    MPI_Type_struct(4, block1, disp1, type1, &struct_type);
+    
+    ret = MPI_Type_commit(&struct_type);
+    if (ret != MPI_SUCCESS) 
+    {
+        fprintf(stderr, "Could not make struct type."), fflush(stderr); 
+        MPI_Abort( MPI_COMM_WORLD, 1 );
+    }
+    
+    memset(s_buf, 0, EL_COUNT*SIZE);
+    memset(r_buf, 0, EL_COUNT*SIZE);
+
+    MPI_Isend(s_buf, EL_COUNT, struct_type, 0, 4, MPI_COMM_WORLD, &request);
+    MPI_Recv(r_buf, EL_COUNT, struct_type, 0, 4, MPI_COMM_WORLD, &Status );
+    MPI_Wait(&request, &Status);
+    
+    MPI_Type_free(&struct_type);
+    
+    MPI_Finalize();
+
+    printf(" No Errors\n");
+
+    return 0;
+}