NDDEM
Reader-interactive.h
Go to the documentation of this file.
1 
2 
3 
4 // enum DataValue {radius, mass, Imom, pos, vel, omega, id1, id2, pospq, lpq, fpq, mpq, mqp} ;
5 // 0 1 2 3 6 9 12 13 14 17 20 23 26
6 
7 class InteractiveReader : public Reader {
8 public:
9  InteractiveReader() {data.resize(29) ; }
10 
11  int get_numts () {return ts ; }
12  int get_num_particles() {return N ; }
13  void set_num_particles (int NN) {
14  N=NN ;
15  for (int i=0 ; i<12 ; i++) data[i].resize(N) ;
16  }
17  int get_num_contacts () {return Nc;}
18  void set_num_contacts(int NN) {
19  Nc = NN ;
20  for (int i=12 ; i<29 ; i++) data[i].resize(Nc) ;
21  }
22 
23  double * get_data(DataValue datavalue, int dd, std::string name="")
24  {
25  switch (datavalue)
26  {
27  case DataValue::radius : return &(data[0][0]) ;
28  case DataValue::mass : return &(data[1][0] ) ;
29  case DataValue::Imom : return &(data[2][0] ) ;
30 
31  case DataValue::pos : return &(data[3+dd][0] ) ;
32  case DataValue::vel : return &(data[6+dd][0] ) ;
33  case DataValue::omega : return &(data[9+dd][0] ) ;
34 
35  case DataValue::id1 : return &(data[12][0]) ;
36  case DataValue::id2 : return &(data[13][0] ) ;
37 
38  case DataValue::pospq : return &(data[14+dd][0] ) ;
39  case DataValue::lpq : return &(data[17+dd][0] ) ;
40  case DataValue::fpq : return &(data[20+dd][0] ) ;
41  case DataValue::mpq : return &(data[23+dd][0] ) ;
42  case DataValue::mqp : return &(data[26+dd][0] ) ;
43  default: return nullptr ;
44  }
45  }
46 
47  void set_data (DataValue destination, std::vector<std::vector<double>> & orig)
48  {
49  int length=0, idx=0 ;
50  switch (destination)
51  {
52  case DataValue::pos : length = N ; idx=3 ; break ;
53  case DataValue::vel : length = N ; idx=6 ; break ;
54  case DataValue::omega: length = N; idx=9 ; break ;
55  default: printf("Unknown value kind (InteractiveReader::set_data v2d)\n") ;
56  }
57  for (int i=0 ; i<length ; i++)
58  for (int dd=0 ; dd<3 ; dd++)
59  data[idx+dd][i]=orig[i][dd] ;
60  }
61 
62  void set_data (DataValue destination, std::vector<double> & orig)
63  {
64  int length=0, idx=0 ;
65  switch (destination)
66  {
67  case DataValue::radius : length = N ; idx=0 ; break ;
68  case DataValue::mass : length = N ; idx=1 ; break ;
69  case DataValue::Imom: length = N; idx=2 ; break ;
70  case DataValue::id1: length = Nc; idx=12 ; break ;
71  case DataValue::id2: length = Nc; idx=13 ; break ;
72  default: printf("Unknown value kind (InteractiveReader::set_data v1d)\n") ;
73  }
74  for (int i=0 ; i<length ; i++)
75  data[idx][i]=orig[i] ;
76  }
77 
78  void add_contact(std::vector<DataValue> dv, std::vector<double> value)
79  {
80  if (Nc>=maxNc)
81  {
82  maxNc += growth ;
83  for (int i=12; i<29 ; i++)
84  data[i].resize(maxNc) ;
85  }
86 
87  int id=0 ;
88  for (auto d: dv)
89  {
90  switch(d) {
91  case DataValue::id1: data[12][Nc]=value[id] ; id++; break ;
92  case DataValue::id2: data[13][Nc]=value[id] ; id++; break ;
93  case DataValue::pospq: for (int i=0 ; i<3 ; i++, id++) data[14+i][Nc]=value[id] ; break ;
94  case DataValue::lpq: for (int i=0 ; i<3 ; i++, id++) data[17+i][Nc]=value[id] ; break ;
95  case DataValue::fpq: for (int i=0 ; i<3 ; i++, id++) data[20+i][Nc]=value[id] ; break ;
96  case DataValue::mpq: for (int i=0 ; i<3 ; i++, id++) data[23+i][Nc]=value[id] ; break ;
97  case DataValue::mqp: for (int i=0 ; i<3 ; i++, id++) data[26+i][Nc]=value[id] ; break ;
98  default: printf("Unknown Datavalue (InteractiveReader::add_contact)\n") ;
99  }
100  }
101  Nc++ ;
102  }
103 
105  {
106  Nc= 0 ;
107  }
108 
110 
111 private :
112  int ts=0 ;
113  int N=0 ;
114  int Nc=0 ;
115  int maxNc=0 ;
116  const int growth=100 ;
117 } ;
Definition: Reader-interactive.h:7
double * get_data(DataValue datavalue, int dd, std::string name="")
Definition: Reader-interactive.h:23
void set_data(DataValue destination, std::vector< double > &orig)
Definition: Reader-interactive.h:62
void set_num_contacts(int NN)
Definition: Reader-interactive.h:18
void set_data(DataValue destination, std::vector< std::vector< double >> &orig)
Definition: Reader-interactive.h:47
v2d data
Definition: Reader-interactive.h:109
int Nc
Definition: Reader-interactive.h:114
InteractiveReader()
Definition: Reader-interactive.h:9
int get_numts()
Definition: Reader-interactive.h:11
int get_num_contacts()
Definition: Reader-interactive.h:17
const int growth
Definition: Reader-interactive.h:116
int maxNc
Definition: Reader-interactive.h:115
void set_num_particles(int NN)
Definition: Reader-interactive.h:13
void reset_contacts()
Definition: Reader-interactive.h:104
int get_num_particles()
Definition: Reader-interactive.h:12
void add_contact(std::vector< DataValue > dv, std::vector< double > value)
Definition: Reader-interactive.h:78
int ts
Definition: Reader-interactive.h:112
int N
Definition: Reader-interactive.h:113
Definition: Reader.h:10
vector< vector< double > > v2d
Definition: Typedefs.h:10
DataValue
Definition: Typedefs.h:19
@ fpq
Definition: Typedefs.h:19
@ Imom
Definition: Typedefs.h:19
@ pospq
Definition: Typedefs.h:19
@ id2
Definition: Typedefs.h:19
@ lpq
Definition: Typedefs.h:19
@ pos
Definition: Typedefs.h:19
@ vel
Definition: Typedefs.h:19
@ mqp
Definition: Typedefs.h:19
@ mpq
Definition: Typedefs.h:19
@ id1
Definition: Typedefs.h:19
@ omega
Definition: Typedefs.h:19
@ radius
Definition: Typedefs.h:19
@ mass
Definition: Typedefs.h:19
uint d
const GenericPointer< typename T::ValueType > T2 value
Definition: pointer.h:1282