source: CPL/oasis3-mct/branches/OASIS3-MCT_5.0_branch/pyoasis/examples/2-apple/C/receiver.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.1 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  OASIS_CHECK_MPI_ERR(MPI_Init(&argc, &argv));
13
14  MPI_Comm commworld;
15  OASIS_CHECK_MPI_ERR(MPI_Comm_split(MPI_COMM_WORLD, 1, 0, &commworld));
16
17  int comp_id;
18  OASIS_CHECK_ERR(oasis_c_init_comp_with_comm(&comp_id, comp_name, OASIS_COUPLED, commworld));
19  fprintf(stdout, "Receiver: Component ID: %d\n", comp_id);
20  fflush(stdout);
21
22  const int n_points = 16;
23  int part_params[OASIS_Serial_Params];
24  part_params[OASIS_Strategy] = OASIS_Serial;
25  part_params[OASIS_Length] = n_points;
26  int part_id;
27
28  OASIS_CHECK_ERR(oasis_c_def_partition(&part_id, OASIS_Serial_Params,
29                                        part_params, OASIS_No_Gsize,
30                                        OASIS_No_Name));
31  fprintf(stdout, "Receiver: part_id: %d\n", part_id);
32  fflush(stdout);
33
34  char *var_name  = "FRECVATM";
35  fprintf(stdout, "Receiver: var_name %s\n", var_name);
36  int bundle_size = 1;
37  int var_id;
38
39  OASIS_CHECK_ERR(oasis_c_def_var(&var_id, var_name, part_id, bundle_size, OASIS_IN, OASIS_REAL));
40  fprintf(stdout, "Receiver: var_id %d\n", var_id);
41  fflush(stdout);
42
43  OASIS_CHECK_ERR(oasis_c_enddef());
44
45  float field[n_points];
46  int i;
47  for (i = 0; i<n_points; i++) {
48    field[i] = 0.;
49  }
50  int date = 0;
51
52  int kinfo;
53  OASIS_CHECK_ERR(oasis_c_get(var_id, date, n_points, 1, bundle_size, OASIS_REAL, OASIS_COL_MAJOR, field, &kinfo));
54  fprintf(stdout, "Receiver: oasis_c_get returned kinfo = %d\n", kinfo);
55  fflush(stdout);
56
57  OASIS_CHECK_ERR(oasis_c_terminate());
58
59  float epsilon = 1.e-8;
60  float error = 0.;
61
62  for (i = 0; i<n_points; i++) {
63    error += fabs(field[i] - (float) i);
64  }
65  if (error < epsilon) {
66    fprintf(stdout, "Receiver: Data received successfully\n");
67    fflush(stdout);
68  } else {
69    fprintf(stdout, "Receiver: Got first ten elements\n");
70    for (i = 0; i<10 ; i++ ) {
71      fprintf(stdout, "Element %d contains %f instead of %f\n", i, field[i], (float) i);
72    }
73    fflush(stdout);
74  }
75
76  OASIS_CHECK_MPI_ERR(MPI_Finalize());
77
78}
Note: See TracBrowser for help on using the repository browser.