NDDEM
Reader-Mercury.h
Go to the documentation of this file.
1 #include <fstream>
2 #include <algorithm>
3 #include <vector>
4 #include <string>
5 #include <cmath>
6 #include <cassert>
7 
8 #include "Reader.h"
9 #include "Typedefs.h"
10 
11 class MercuryReader : public Reader {
12 public :
13  int get_dimension() {return dimension;}
14  virtual double * get_data([[maybe_unused]] DataValue datavalue, [[maybe_unused]] int dd, [[maybe_unused]] std::string name="") {return nullptr ; }
15 
16  int dimension=3 ;
17  std::ifstream file_in ;
18 
19  void reset()
20  {
21  file_in.clear();
22  file_in.seekg(0);
23  curts=0 ;
24  }
25 } ;
26 
27 //----------------------------------------------------------
29 public:
30  MercuryReader_vtu_particles(std::string ppath) ;
31  int get_numts() {return numts; }
32  int get_num_particles () {return N;}
33 
34  double * get_data(DataValue datavalue, int dd, std::string name="" )
35  {
36  switch(datavalue) {
37  case DataValue::pos : return &(data[0+dd][0] ) ;
38  case DataValue::vel : return &(data[dimension*1+dd][0] ) ;
39  case DataValue::radius : return &(data[dimension*2][0]) ;
40  case DataValue::mass : return &(data[dimension*2+1][0]) ;
41 
42  default : return (nullptr) ;
43  }
44  }
45 
46  int read_timestep (int ts) ;
47 
48  v2d data ;
49 private :
50  int numts = -1 ;
51  int N=0 ;
52 };
53 
54 
55 //----------------------------------------------------------
57 public:
58  MercuryReader_data_particles(std::string ppath) ;
59  int get_numts()
60  {
61  if (!is_fullymapped)
62  build_index() ;
63  return mapped_ts.size() ;
64  }
65 
66  int build_index () ;
67  std::vector<std::vector<double>> get_bounds() ;
68  int get_num_particles () {return N;}
69  int read_timestep (int ts) ;
70 
71  double * get_data(DataValue datavalue, int dd, std::string name="")
72  {
73  switch(datavalue) {
74  case DataValue::pos : return &(data[0+dd][0] ) ;
75  case DataValue::vel : return &(data[dimension*1+dd][0] ) ;
76  case DataValue::radius : return &(data[dimension*2][0]) ;
77  case DataValue::omega : return &(data[dimension*2 + 1 +(dimension==3?3:1)+dd][0] ) ;
78  case DataValue::mass : return &(dataextra[0][0]) ;
79  case DataValue::Imom : return &(dataextra[1][0] ) ;
80 
81  default : return (nullptr) ;
82  }
83  }
84 
85  v2d data ;
87 
88 private:
89  bool is_vtu=false ;
90  int N ;
91 
92 } ;
93 
94 
95 //-----------------------------
97 public:
98  MercuryReader_data_contacts(std::string ppath, Reader *d);
99  int build_index () ;
100  int get_num_contacts () {return Nc;}
101  int read_timestep(int ts) ;
102  virtual double * get_data (DataValue datavalue, int dd, std::string name="") {
103  switch(datavalue) {
104  case DataValue::id1 : return &(data[0][0]) ;
105  case DataValue::id2 : return &(data[1][0] ) ;
106 
107  case DataValue::pospq : return &(data[2+dd][0] ) ;
108  case DataValue::lpq : return &(data[5+dd][0] ) ;
109  case DataValue::fpq : return &(data[8+dd][0] ) ;
110  case DataValue::mpq : return nullptr ;
111  case DataValue::mqp : return nullptr ;
112 
113  default : return (nullptr) ;
114  }
115  }
116 
118 private :
120  unsigned int Nc;
121  const int growth=100 ;
122 
123 } ;
Definition: Reader-Mercury.h:96
int get_num_contacts()
Definition: Reader-Mercury.h:100
MercuryReader_data_particles * dump
Definition: Reader-Mercury.h:119
unsigned int Nc
Definition: Reader-Mercury.h:120
MercuryReader_data_contacts(std::string ppath, Reader *d)
Definition: Reader-Mercury.cpp:116
virtual double * get_data(DataValue datavalue, int dd, std::string name="")
Definition: Reader-Mercury.h:102
int build_index()
Definition: Reader-Mercury.cpp:144
v2d data
Definition: Reader-Mercury.h:117
int read_timestep(int ts)
Definition: Reader-Mercury.cpp:239
const int growth
Definition: Reader-Mercury.h:121
Definition: Reader-Mercury.h:56
std::vector< std::vector< double > > get_bounds()
Definition: Reader-Mercury.cpp:169
MercuryReader_data_particles(std::string ppath)
Definition: Reader-Mercury.cpp:79
v2d data
Definition: Reader-Mercury.h:85
double * get_data(DataValue datavalue, int dd, std::string name="")
Definition: Reader-Mercury.h:71
int get_num_particles()
Definition: Reader-Mercury.h:68
int build_index()
Definition: Reader-Mercury.cpp:127
v2d dataextra
Definition: Reader-Mercury.h:86
int read_timestep(int ts)
Definition: Reader-Mercury.cpp:184
int N
Definition: Reader-Mercury.h:90
bool is_vtu
Definition: Reader-Mercury.h:89
int get_numts()
Definition: Reader-Mercury.h:59
Definition: Reader-Mercury.h:28
int N
Definition: Reader-Mercury.h:51
int get_numts()
Definition: Reader-Mercury.h:31
int read_timestep(int ts)
Definition: Reader-Mercury.cpp:23
int numts
Definition: Reader-Mercury.h:50
double * get_data(DataValue datavalue, int dd, std::string name="")
Definition: Reader-Mercury.h:34
int get_num_particles()
Definition: Reader-Mercury.h:32
v2d data
Definition: Reader-Mercury.h:48
MercuryReader_vtu_particles(std::string ppath)
Definition: Reader-Mercury.cpp:3
Definition: Reader-Mercury.h:11
int get_dimension()
Definition: Reader-Mercury.h:13
virtual double * get_data([[maybe_unused]] DataValue datavalue, [[maybe_unused]] int dd, [[maybe_unused]] std::string name="")
Definition: Reader-Mercury.h:14
int dimension
Definition: Reader-Mercury.h:16
std::ifstream file_in
Definition: Reader-Mercury.h:17
void reset()
Definition: Reader-Mercury.h:19
Definition: Reader.h:10
bool is_fullymapped
Definition: Reader.h:81
int curts
Definition: Reader.h:135
std::vector< std::optional< std::streampos > > mapped_ts
Definition: Reader.h:82
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