aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetLib/src/dist.cc
blob: 468acce3ad9dce4d51bbff481535358de5c99ba9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// $Header:$

#include <assert.h>

#include <mpi.h>

#include "cctk.h"
#include "cctk_Parameters.h"

#include "defs.hh"

#include "dist.hh"

using namespace std;



namespace dist {
  
  MPI_Comm comm = MPI_COMM_NULL;
  
#if 0
  MPI_Datatype mpi_complex_float;
  MPI_Datatype mpi_complex_double;
  MPI_Datatype mpi_complex_long_double;
#else
  MPI_Datatype mpi_complex8;
  MPI_Datatype mpi_complex16;
  MPI_Datatype mpi_complex32;
#endif
  
  void init (int& argc, char**& argv) {
    MPI_Init (&argc, &argv);
    pseudoinit();
  }
  
  void pseudoinit () {
    comm = MPI_COMM_WORLD;
    
#if 0
    MPI_Type_contiguous (2, MPI_FLOAT, &mpi_complex_float);
    MPI_Type_commit (&mpi_complex_float);
    MPI_Type_contiguous (2, MPI_DOUBLE, &mpi_complex_double);
    MPI_Type_commit (&mpi_complex_double);
    MPI_Type_contiguous (2, MPI_LONG_DOUBLE, &mpi_complex_long_double);
    MPI_Type_commit (&mpi_complex_long_double);
#else
#  ifdef CCTK_REAL4
    CCTK_REAL4 dummy4;
    MPI_Type_contiguous (2, datatype(dummy4), &mpi_complex8);
    MPI_Type_commit (&mpi_complex8);
#  endif
#  ifdef CCTK_REAL8
    CCTK_REAL8 dummy8;
    MPI_Type_contiguous (2, datatype(dummy8), &mpi_complex16);
    MPI_Type_commit (&mpi_complex16);
#  endif
#  ifdef CCTK_REAL16
    CCTK_REAL16 dummy16;
    MPI_Type_contiguous (2, datatype(dummy16), &mpi_complex32);
    MPI_Type_commit (&mpi_complex32);
#  endif
#endif
  }
  
  void finalize () {
    MPI_Finalize ();
  }
  
  void checkpoint (const char* file, int line) {
    DECLARE_CCTK_PARAMETERS;
    if (verbose) {
      int rank;
      MPI_Comm_rank (comm, &rank);
      printf ("CHECKPOINT: processor %d, file %s, line %d\n",
	      rank, file, line);
    }
    if (barriers) {
      MPI_Barrier (comm);
    }
  }
  
} // namespace dist