NDDEM
Reader-Liggghts.h
Go to the documentation of this file.
1 #include "Reader.h"
2 
3 #include <cstdlib>
4 #include <cstdio>
5 #include <vector>
6 #include <iostream>
7 #include <fstream>
8 #include <string>
9 #include <sstream>
10 #include <map>
11 #include <cmath>
12 
13 #include "gzip.hpp"
14 #include <boost/iostreams/filtering_streambuf.hpp>
15 #include <boost/iostreams/stream.hpp>
16 #include "Typedefs.h"
17 
18 class LiggghtsReader : public Reader {
19 public:
20  LiggghtsReader(std::string ppath) : path(ppath)
21  {
22  open(path) ;
23  }
25  if ( in!= nullptr ) {delete(in) ; in = nullptr ; }
26  if (filt_in != nullptr) {delete(filt_in) ; filt_in = nullptr ; }
27  if (filt_in_seekable != nullptr) {delete(filt_in_seekable) ; filt_in_seekable = nullptr;}
28  if (file_in != nullptr)
29  {
30  file_in->close() ;
31  delete(file_in) ;
32  file_in = nullptr ;
33  }
34  }
35 
36  std::istream *in = nullptr ;
37 
38  int actualts=0 ;
39  int Nitem ;
40 
41  std::vector <std::string> fields ;
44 
45  // Functions
46  int open(string path) ;
47  int reset() ;
48 
49  //int read_full_ts(bool keep) ;
50  //int set_data(struct Data & D, std::map<string,size_t> extrafieldmap) ;
51  std::vector<vector<double>> get_bounds () ;
52  bool has_bounds ;
53  std::vector<double> get_minmaxradius() ;
54  int get_numts () ;
55  int read_timestep (int ts) ;
56  int get_num_particles () {return Nitem ; }
57  int get_num_contacts () {return Nitem ; }
58 
59  vector <vector <double> > boundaries = vector<vector<double>>(3,vector<double>(3,0)) ;
60  vector<bool> periodicity = vector<bool>(3,false) ;
61 
62  std::map <std::string, std::string> cfmapping ;
63 
64 private:
65  boost::iostreams::filtering_streambuf<boost::iostreams::input> *filt_in;
66  boost::iostreams::filtering_streambuf<boost::iostreams::input_seekable> *filt_in_seekable;
67  ifstream * file_in = nullptr ;
68  std::string path ;
69  int read_timestep_impl (int ts, bool skip=false) ;
70  virtual int do_post_read() {return 0 ;}
71 } ;
72 //-------------------------------------------
74 public:
75  LiggghtsReader_particles(std::string ppath) : LiggghtsReader(ppath) {}
76 
77  bool has_id_data = false ;
78  double * get_data (DataValue datavalue, int dd, std::string name="") {
79  if (data.size()==0) return nullptr ;
80  switch(datavalue) {
81  case DataValue::radius : return &(data[0][0]) ;
82  case DataValue::mass : return &(data[1][0] ) ;
83  case DataValue::Imom : return &(data[2][0] ) ;
84 
85  case DataValue::pos : return &(data[3+dd][0] ) ;
86  case DataValue::vel : return &(data[6+dd][0] ) ;
87  case DataValue::omega : return &(data[9+dd][0] ) ;
88 
90  {
91  if (name=="type") return &(data[12][0]) ;
92  else printf("Unknown extra: arbitrary liggghts extra fields are not implemented\n");
93  return nullptr ;
94  } break ;
95 
96  case DataValue::orient : return &(data[13+dd][0]) ;
97  case DataValue::superquadric: if (is_superquadric) return &(data[17+dd][0]) ;
98  else return nullptr ;
99 
100  default : return nullptr ;
101  }
102  }
103 
104  int get_num_contacts() {return -1;}
105 
106 private:
107  int do_post_read() ;
108 } ;
109 //-------------------------------------------
111 public:
112  LiggghtsReader_contacts(std::string ppath, Reader *d, std::map <std::string, std::string> columnmap) : LiggghtsReader(ppath), dump(dynamic_cast<LiggghtsReader_particles*>(d)) {cfmapping=columnmap;} ;
113  double * get_data (DataValue datavalue, int dd, std::string name="") {
114  switch(datavalue) {
115  case DataValue::id1 : return &(data[0][0]) ;
116  case DataValue::id2 : return &(data[1][0]) ;
117 
118  case DataValue::pospq : return &(data[2+dd][0] ) ;
119  case DataValue::lpq : return &(data[5+dd][0] ) ;
120  case DataValue::fpq : return &(data[8+dd][0] ) ;
121  case DataValue::mpq : return &(data[11+dd][0] ) ;
122  case DataValue::mqp : return &(data[14+dd][0] ) ;
123 
124  default : return (nullptr) ;
125  }
126  }
127  int get_num_particles() {return -1;}
128 private:
130  int do_post_read() ;
131 } ;
Definition: Reader-Liggghts.h:110
double * get_data(DataValue datavalue, int dd, std::string name="")
Definition: Reader-Liggghts.h:113
LiggghtsReader_particles * dump
Definition: Reader-Liggghts.h:129
int do_post_read()
Definition: Reader-Liggghts.cpp:316
LiggghtsReader_contacts(std::string ppath, Reader *d, std::map< std::string, std::string > columnmap)
Definition: Reader-Liggghts.h:112
int get_num_particles()
Definition: Reader-Liggghts.h:127
Definition: Reader-Liggghts.h:73
double * get_data(DataValue datavalue, int dd, std::string name="")
Definition: Reader-Liggghts.h:78
bool has_id_data
Definition: Reader-Liggghts.h:77
int do_post_read()
Definition: Reader-Liggghts.cpp:227
LiggghtsReader_particles(std::string ppath)
Definition: Reader-Liggghts.h:75
int get_num_contacts()
Definition: Reader-Liggghts.h:104
Definition: Reader-Liggghts.h:18
std::string path
Definition: Reader-Liggghts.h:68
~LiggghtsReader()
Definition: Reader-Liggghts.h:24
int get_num_contacts()
Definition: Reader-Liggghts.h:57
ifstream * file_in
Definition: Reader-Liggghts.h:67
virtual int do_post_read()
Definition: Reader-Liggghts.h:70
bool has_bounds
Definition: Reader-Liggghts.h:52
boost::iostreams::filtering_streambuf< boost::iostreams::input > * filt_in
Definition: Reader-Liggghts.h:65
std::vector< double > get_minmaxradius()
Definition: Reader-Liggghts.cpp:29
LiggghtsReader(std::string ppath)
Definition: Reader-Liggghts.h:20
boost::iostreams::filtering_streambuf< boost::iostreams::input_seekable > * filt_in_seekable
Definition: Reader-Liggghts.h:66
int get_numts()
Definition: Reader-Liggghts.cpp:43
std::map< std::string, std::string > cfmapping
Definition: Reader-Liggghts.h:62
v1d dataextra
Definition: Reader-Liggghts.h:43
int read_timestep_impl(int ts, bool skip=false)
Definition: Reader-Liggghts.cpp:167
std::vector< vector< double > > get_bounds()
Definition: Reader-Liggghts.cpp:4
int open(string path)
Definition: Reader-Liggghts.cpp:67
int get_num_particles()
Definition: Reader-Liggghts.h:56
v2d tdata
Definition: Reader-Liggghts.h:42
vector< bool > periodicity
Definition: Reader-Liggghts.h:60
int read_timestep(int ts)
Definition: Reader-Liggghts.cpp:112
int actualts
Definition: Reader-Liggghts.h:38
vector< vector< double > > boundaries
Definition: Reader-Liggghts.h:59
int reset()
Definition: Reader-Liggghts.cpp:89
v2d data
Definition: Reader-Liggghts.h:42
std::istream * in
Definition: Reader-Liggghts.h:36
std::vector< std::string > fields
Definition: Reader-Liggghts.h:41
int Nitem
Definition: Reader-Liggghts.h:39
Definition: Reader.h:10
bool is_superquadric
Definition: Reader.h:85
vector< vector< double > > v2d
Definition: Typedefs.h:10
DataValue
Definition: Typedefs.h:19
@ superquadric
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
@ orient
Definition: Typedefs.h:19
@ mqp
Definition: Typedefs.h:19
@ mpq
Definition: Typedefs.h:19
@ id1
Definition: Typedefs.h:19
@ extra_named
Definition: Typedefs.h:19
@ omega
Definition: Typedefs.h:19
@ radius
Definition: Typedefs.h:19
@ mass
Definition: Typedefs.h:19
vector< double > v1d
Definition: Typedefs.h:9
uint d