SPHinXsys  alpha version
sph_data_containers.h
Go to the documentation of this file.
1 
7 #ifndef SPH_DATA_CONTAINERS_H
8 #define SPH_DATA_CONTAINERS_H
9 
10 #include "base_data_package.h"
11 #include "base_data_type.h"
12 
13 namespace SPH
14 {
18  class BaseMaterial;
19  class SPHBody;
20  class RealBody;
21  class SolidBody;
22  class BodyPart;
23  class FictitiousBody;
24  class CellList;
25  class BaseParticles;
26 
28  using MaterialVector = StdVec<BaseMaterial *>;
30  using SPHBodyVector = StdVec<SPHBody *>;
31  using SolidBodyVector = StdVec<SolidBody *>;
32  using RealBodyVector = StdVec<RealBody *>;
33  using BodyPartVector = StdVec<BodyPart *>;
34  using FictitiousBodyVector = StdVec<FictitiousBody *>;
35 
37  using IndexVector = StdVec<size_t>;
39  using ConcurrentIndexVector = LargeVec<size_t>;
40 
42  using ListData = std::pair<size_t, Vecd>;
44  using ListDataVector = StdLargeVec<ListData>;
46  using CellLists = StdLargeVec<CellList *>;
47 
49  template <class DataType>
50  using ConcurrentVector = LargeVec<DataType>;
52  using ConcurrentCellLists = LargeVec<CellList *>;
54  using SplitCellLists = StdVec<ConcurrentCellLists>;
56  using PositionsVolumes = StdVec<std::pair<Vecd, Real>>;
57 
61  typedef std::array<std::map<std::string, size_t>, 4> ParticleDataMap;
63  typedef std::array<StdVec<std::pair<std::string, size_t>>, 4> ParticleVariableList;
64 
66  template <typename VariableType>
68  {
69  template <typename VariableOperation>
70  void operator()(ParticleData &particle_data,
71  ParticleDataMap &particle_data_map, VariableOperation &variable_operation) const
72  {
73  constexpr int type_index = DataTypeIndex<VariableType>::value;
74  for (auto const &name_index : particle_data_map[type_index])
75  {
76  std::string variable_name = name_index.first;
77  StdLargeVec<VariableType> &variable = *(std::get<type_index>(particle_data)[name_index.second]);
78  variable_operation(variable_name, variable);
79  }
80  };
81  };
82 
84  template <typename VariableType>
86  {
87  template <typename VariableOperation>
88  void operator()(ParticleData &particle_data,
89  ParticleVariableList &variable_name_list, VariableOperation &variable_operation) const
90  {
91  constexpr int type_index = DataTypeIndex<VariableType>::value;
92  for (std::pair<std::string, size_t> &name_index : variable_name_list[type_index])
93  {
94  std::string variable_name = name_index.first;
95  StdLargeVec<VariableType> &variable = *(std::get<type_index>(particle_data)[name_index.second]);
96  variable_operation(variable_name, variable);
97  }
98  };
99  };
100 }
101 #endif // SPH_DATA_CONTAINERS_H
StdVec< ConcurrentCellLists > SplitCellLists
Definition: sph_data_containers.h:54
LargeVec< CellList * > ConcurrentCellLists
Definition: sph_data_containers.h:52
StdVec< size_t > IndexVector
Definition: sph_data_containers.h:37
std::array< StdVec< std::pair< std::string, size_t > >, 4 > ParticleVariableList
Definition: sph_data_containers.h:63
GeneralDataAssemble< StdLargeVec > ParticleData
Definition: sph_data_containers.h:59
StdLargeVec< CellList * > CellLists
Definition: sph_data_containers.h:46
LargeVec< size_t > ConcurrentIndexVector
Definition: sph_data_containers.h:39
StdLargeVec< ListData > ListDataVector
Definition: sph_data_containers.h:44
Definition: sph_data_containers.h:85
std::pair< size_t, Vecd > ListData
Definition: sph_data_containers.h:42
LargeVec< DataType > ConcurrentVector
Definition: sph_data_containers.h:50
Definition: sph_data_containers.h:67
StdVec< std::pair< Vecd, Real > > PositionsVolumes
Definition: sph_data_containers.h:56
StdVec< SPHBody * > SPHBodyVector
Definition: sph_data_containers.h:30
Definition: base_data_type.h:320
std::array< std::map< std::string, size_t >, 4 > ParticleDataMap
Definition: sph_data_containers.h:61
StdVec< BaseMaterial * > MaterialVector
Definition: sph_data_containers.h:28
std::tuple< StdVec< DataContainerType< Real > * >, StdVec< DataContainerType< Vecd > * >, StdVec< DataContainerType< Matd > * >, StdVec< DataContainerType< int > * > > GeneralDataAssemble
Definition: base_data_package.h:42
Definition: solid_body_supplementary.cpp:9