1 // =============================================================================
2 // PROJECT CHRONO - http://projectchrono.org
3 //
4 // Copyright (c) 2016 projectchrono.org
5 // All right reserved.
6 //
7 // Use of this source code is governed by a BSD-style license that can be found
8 // in the LICENSE file at the top level of the distribution and at
9 // http://projectchrono.org/license-chrono.txt.
10 //
11 // =============================================================================
12 // Authors: Nic Olsen
13 // =============================================================================
14 
15 #pragma once
16 
17 namespace chrono {
18 namespace distributed {
19 
20 /// @addtogroup distributed_module
21 /// @{
22 
23 /// Location and status of a given body with respect to this rank
24 typedef enum COMM_STATUS {
25     EMPTY = 0,         /// None, empty, disabled
26     OWNED = 1,         /// exclusive to this rank
27     GHOST_UP = 2,      /// a proxy for a body on high neighbor rank
28     GHOST_DOWN = 3,    /// a proxy for a body on low neighbor rank
29     SHARED_UP = 4,     /// has a proxy body on high neighbor rank
30     SHARED_DOWN = 5,   /// has a proxy body on low neighbor rank
31     UNOWNED_UP = 6,    /// unrelated to this rank
32     UNOWNED_DOWN = 7,  /// unrelated to this rank
33     GLOBAL = 8,        /// Present on all ranks
34     UNDEFINED = 9
35 } COMM_STATUS;
36 /// @} distributed_module
37 
38 /// @addtogroup distributed_module
39 /// @{
40 
41 /// Types of internal message that can be sent
42 typedef enum MESSAGE_TYPE {
43     EXCHANGE,              /// Introduction of new body to a rank
44     UPDATE,                /// Update for an existing body on a rank from the owning rank
45     FINAL_UPDATE_GIVE,     /// Update which ends in the other rank taking exclusive ownership
46     FINAL_UPDATE_TAKE,     /// Update which ends in this rank taking exclusive ownership
47     UPDATE_TRANSFER_SHARE  /// Update which updates the primary rank for the body
48 } MESSAGE_TYPE;
49 /// @} distributed_module
50 
51 }  // End namespace distributed
52 }  // End namespace chrono
53