source: CPL/oasis3-mct_5.0/pyoasis/examples/3-box/C/receiver.c @ 6328

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

First import of oasis3-mct_5.0 (from oasis git server, branch OASIS3-MCT_5.0)

File size: 2.7 KB
Line 
1#include <stdio.h>
2#include <math.h>
3#include "mpi.h"
4#include "oasis_c.h"
5
6int main(int argc, char *argv[])
7{
8  char *comp_name = "receiver";
9  fprintf(stdout,"Component name: %s\n", comp_name);
10  fflush(stdout);
11
12  int comp_id;
13
14  OASIS_CHECK_ERR(oasis_c_init_comp(&comp_id, comp_name, OASIS_COUPLED));
15  fprintf(stdout, "Receiver: Component ID: %d\n", comp_id);
16  fflush(stdout);
17
18  const int n_points = 16;
19  int part_params[OASIS_Serial_Params];
20  part_params[OASIS_Strategy] = OASIS_Serial;
21  part_params[OASIS_Length] = n_points;
22  int part_id;
23
24  OASIS_CHECK_ERR(oasis_c_def_partition(&part_id, OASIS_Serial_Params,
25                                        part_params, OASIS_No_Gsize,
26                                        OASIS_No_Name));
27  fprintf(stdout, "Receiver: part_id: %d\n", part_id);
28  fflush(stdout);
29
30  char *var_name  = "FRECVATM";
31  fprintf(stdout, "Receiver: var_name %s\n", var_name);
32  int bundle_size = 1;
33  int var_id;
34
35  OASIS_CHECK_ERR(oasis_c_def_var(&var_id, var_name, part_id, bundle_size, OASIS_IN, OASIS_REAL));
36  fprintf(stdout, "Receiver: var_id %d\n", var_id);
37  fflush(stdout);
38
39  OASIS_CHECK_ERR(oasis_c_enddef());
40
41  MPI_Comm intra_comm;
42  OASIS_CHECK_ERR(oasis_c_get_intracomm(&intra_comm, "sender-box"));
43
44  int intra_size;
45  OASIS_CHECK_MPI_ERR(MPI_Comm_size(intra_comm, &intra_size));
46  int intra_rank;
47  OASIS_CHECK_MPI_ERR(MPI_Comm_rank(intra_comm, &intra_rank));
48  fprintf(stdout,"Receiver intra_comm: rank = %d of %d\n",intra_rank,intra_size);
49  fflush(stdout);
50
51  MPI_Comm inter_comm;
52  OASIS_CHECK_ERR(oasis_c_get_intercomm(&inter_comm, "sender-box"));
53
54  int inter_size;
55  OASIS_CHECK_MPI_ERR(MPI_Comm_size(inter_comm, &inter_size));
56  int inter_rank;
57  OASIS_CHECK_MPI_ERR(MPI_Comm_rank(inter_comm, &inter_rank));
58  int inter_rsize;
59  OASIS_CHECK_MPI_ERR(MPI_Comm_remote_size(inter_comm, &inter_rsize));
60  fprintf(stdout,"Receiver inter_comm: rank = %d of %d Remote size = %d\n",
61          intra_rank,inter_size,inter_rsize);
62  fflush(stdout);
63
64  float field[n_points];
65  int i;
66  for (i = 0; i<n_points; i++) {
67    field[i] = 0.;
68  }
69  int date = 0;
70
71  int kinfo;
72  OASIS_CHECK_ERR(oasis_c_get(var_id, date, n_points, 1, bundle_size, OASIS_REAL, OASIS_COL_MAJOR, field, &kinfo));
73  fprintf(stdout, "Receiver: oasis_c_get returned kinfo = %d\n", kinfo);
74  fflush(stdout);
75
76  OASIS_CHECK_ERR(oasis_c_terminate());
77
78  float epsilon = 1.e-8;
79  float error = 0.;
80
81  for (i = 0; i<n_points; i++) {
82    error += fabs(field[i] - (float) i);
83  }
84  if (error < epsilon) {
85    fprintf(stdout, "Receiver: Data received successfully\n");
86    fflush(stdout);
87  } else {
88    fprintf(stdout, "Receiver: Got first ten elements\n");
89    for (i = 0; i<10 ; i++ ) {
90      fprintf(stdout, "Element %d contains %f instead of %f\n", i, field[i], (float) i);
91    }
92    fflush(stdout);
93  }
94
95}
Note: See TracBrowser for help on using the repository browser.