source: CPL/oasis3-mct/branches/OASIS3-MCT_5.0_branch/pyoasis/examples/5-points/C/sender-points.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: 2.2 KB
Line 
1#include <stdio.h>
2#include "mpi.h"
3#include "oasis_c.h"
4
5int main(int argc, char *argv[])
6{
7  char *comp_name = "sender-points";
8  fprintf(stdout,"Component name: %s\n", comp_name);
9  fflush(stdout);
10
11  int comp_id;
12
13  OASIS_CHECK_ERR(oasis_c_init_comp(&comp_id, comp_name, OASIS_COUPLED));
14  fprintf(stdout, "Sender: Component ID: %d\n", comp_id);
15  fflush(stdout);
16
17  MPI_Comm local_comm;
18  OASIS_CHECK_ERR(oasis_c_get_localcomm(&local_comm));
19  int comm_size;
20  OASIS_CHECK_MPI_ERR(MPI_Comm_size(local_comm, &comm_size));
21  int comm_rank;
22  OASIS_CHECK_MPI_ERR(MPI_Comm_rank(local_comm, &comm_rank));
23  fprintf(stdout,"Sender: rank = %d of %d\n",comm_rank,comm_size);
24  fflush(stdout);
25
26  if ( comm_size != 4) {
27    OASIS_CHECK_ERR(oasis_c_abort(comp_id, comp_name,
28                                  "Sender: comm_size has to be 4 for this example",
29                                  __FILE__, __LINE__));
30  }
31
32  const int n_points = 16;
33  int local_size = n_points/comm_size;
34  int offset = comm_rank*local_size;
35  int part_id;
36  int i;
37  {
38    int part_params[OASIS_Points_Params(local_size)];
39    part_params[OASIS_Strategy] = OASIS_Points;
40    part_params[OASIS_Npoints]  = local_size;
41    for (i = 0; i<local_size ; i++) {
42      part_params[OASIS_Npoints + i + 1] = i + offset;
43    }
44    OASIS_CHECK_ERR(oasis_c_def_partition(&part_id, OASIS_Points_Params(local_size),
45                                          part_params, OASIS_No_Gsize,
46                                          OASIS_No_Name));
47    fprintf(stdout, "Sender rank(%d): part_id: %d\n", comm_rank, part_id);
48    fflush(stdout);
49  }
50
51  char *var_name  = "FSENDOCN";
52  fprintf(stdout, "Sender rank(%d): var_name %s\n", comm_rank, var_name);
53  int bundle_size = 1;
54  int var_id;
55
56  OASIS_CHECK_ERR(oasis_c_def_var(&var_id, var_name, part_id, bundle_size, OASIS_OUT, OASIS_REAL));
57  fprintf(stdout, "Sender rank(%d): var_id %d\n", comm_rank, var_id);
58  fflush(stdout);
59
60  OASIS_CHECK_ERR(oasis_c_enddef());
61
62  float field[local_size];
63  for (i = 0; i<local_size; i++) {
64    field[i] = i + offset;
65  }
66
67  int date = 0;
68
69  int kinfo;
70  OASIS_CHECK_ERR(oasis_c_put(var_id, date, local_size, 1, bundle_size, OASIS_REAL, OASIS_COL_MAJOR, field, OASIS_No_Restart, &kinfo));
71  fprintf(stdout, "Sender rank(%d): oasis_c_put returned kinfo = %d\n", comm_rank, kinfo);
72  fflush(stdout);
73
74  OASIS_CHECK_ERR(oasis_c_terminate());
75
76}
Note: See TracBrowser for help on using the repository browser.