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  std::vector<double> get_minmaxradius() ;
53  int get_numts () ;
54  int read_timestep (int ts) ;
55  int get_num_particles () {return Nitem ; }
56  int get_num_contacts () {return Nitem ; }
57 
58  vector <vector <double> > boundaries = vector<vector<double>>(3,vector<double>(3,0)) ;
59  vector<bool> periodicity = vector<bool>(3,false) ;
60 
61  std::map <std::string, std::string> cfmapping ;
62 
63 private:
64  boost::iostreams::filtering_streambuf<boost::iostreams::input> *filt_in;
65  boost::iostreams::filtering_streambuf<boost::iostreams::input_seekable> *filt_in_seekable;
66  ifstream * file_in = nullptr ;
67  std::string path ;
68  int read_timestep_impl (int ts, bool skip=false) ;
69  virtual int do_post_read() {return 0 ;}
70 } ;
71 //-------------------------------------------
73 public:
74  LiggghtsReader_particles(std::string ppath) : LiggghtsReader(ppath) {}
75 
76  bool has_id_data = false ;
77  double * get_data (DataValue datavalue, int dd, std::string name="") {
78  if (data.size()==0) return nullptr ;
79  switch(datavalue) {
80  case DataValue::radius : return &(data[0][0]) ;
81  case DataValue::mass : return &(data[1][0] ) ;
82  case DataValue::Imom : return &(data[2][0] ) ;
83 
84  case DataValue::pos : return &(data[3+dd][0] ) ;
85  case DataValue::vel : return &(data[6+dd][0] ) ;
86  case DataValue::omega : return &(data[9+dd][0] ) ;
87 
89  {
90  if (name=="type") return &(data[12][0]) ;
91  else printf("Unknown extra: arbitrary liggghts extra fields are not implemented\n");
92  return nullptr ;
93  } break ;
94 
95  default : return nullptr ;
96  }
97  }
98 
99  int get_num_contacts() {return -1;}
100 
101 private:
102  int do_post_read() ;
103 } ;
104 //-------------------------------------------
106 public:
107  LiggghtsReader_contacts(std::string ppath, Reader *d, std::map <std::string, std::string> columnmap) : LiggghtsReader(ppath), dump(dynamic_cast<LiggghtsReader_particles*>(d)) {cfmapping=columnmap;} ;
108  double * get_data (DataValue datavalue, int dd, std::string name="") {
109  switch(datavalue) {
110  case DataValue::id1 : return &(data[0][0]) ;
111  case DataValue::id2 : return &(data[1][0]) ;
112 
113  case DataValue::pospq : return &(data[2+dd][0] ) ;
114  case DataValue::lpq : return &(data[5+dd][0] ) ;
115  case DataValue::fpq : return &(data[8+dd][0] ) ;
116  case DataValue::mpq : return &(data[11+dd][0] ) ;
117  case DataValue::mqp : return &(data[14+dd][0] ) ;
118 
119  default : return (nullptr) ;
120  }
121  }
122  int get_num_particles() {return -1;}
123 private:
125  int do_post_read() ;
126 } ;
Definition: Reader-Liggghts.h:105
double * get_data(DataValue datavalue, int dd, std::string name="")
Definition: Reader-Liggghts.h:108
LiggghtsReader_particles * dump
Definition: Reader-Liggghts.h:124
int do_post_read()
Definition: Reader-Liggghts.cpp:303
LiggghtsReader_contacts(std::string ppath, Reader *d, std::map< std::string, std::string > columnmap)
Definition: Reader-Liggghts.h:107
int get_num_particles()
Definition: Reader-Liggghts.h:122
Definition: Reader-Liggghts.h:72
double * get_data(DataValue datavalue, int dd, std::string name="")
Definition: Reader-Liggghts.h:77
bool has_id_data
Definition: Reader-Liggghts.h:76
int do_post_read()
Definition: Reader-Liggghts.cpp:221
LiggghtsReader_particles(std::string ppath)
Definition: Reader-Liggghts.h:74
int get_num_contacts()
Definition: Reader-Liggghts.h:99
Definition: Reader-Liggghts.h:18
std::string path
Definition: Reader-Liggghts.h:67
~LiggghtsReader()
Definition: Reader-Liggghts.h:24
int get_num_contacts()
Definition: Reader-Liggghts.h:56
ifstream * file_in
Definition: Reader-Liggghts.h:66
virtual int do_post_read()
Definition: Reader-Liggghts.h:69
boost::iostreams::filtering_streambuf< boost::iostreams::input > * filt_in
Definition: Reader-Liggghts.h:64
std::vector< double > get_minmaxradius()
Definition: Reader-Liggghts.cpp:24
LiggghtsReader(std::string ppath)
Definition: Reader-Liggghts.h:20
boost::iostreams::filtering_streambuf< boost::iostreams::input_seekable > * filt_in_seekable
Definition: Reader-Liggghts.h:65
int get_numts()
Definition: Reader-Liggghts.cpp:38
std::map< std::string, std::string > cfmapping
Definition: Reader-Liggghts.h:61
v1d dataextra
Definition: Reader-Liggghts.h:43
int read_timestep_impl(int ts, bool skip=false)
Definition: Reader-Liggghts.cpp:162
std::vector< vector< double > > get_bounds()
Definition: Reader-Liggghts.cpp:4
int open(string path)
Definition: Reader-Liggghts.cpp:62
int get_num_particles()
Definition: Reader-Liggghts.h:55
v2d tdata
Definition: Reader-Liggghts.h:42
vector< bool > periodicity
Definition: Reader-Liggghts.h:59
int read_timestep(int ts)
Definition: Reader-Liggghts.cpp:107
int actualts
Definition: Reader-Liggghts.h:38
vector< vector< double > > boundaries
Definition: Reader-Liggghts.h:58
int reset()
Definition: Reader-Liggghts.cpp:84
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
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
@ 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