NDDEM
IONDDEM.h
Go to the documentation of this file.
1 #include <cstdlib>
2 #include <cstdio>
3 #include <vector>
4 #include <iostream>
5 #include <fstream>
6 #include <string>
7 #include <math.h>
8 #include <sstream>
9 
10 //#include "gzip.hpp"
11 //#include "termcolor.hpp"
12 //#include <boost/iostreams/filtering_streambuf.hpp>
13 //#include <boost/iostreams/stream.hpp>
14 
15 #include "Typedefs.h"
16 #include "Coarsing.h"
17 #include "../Dem/Xml.h"
18 
19 using namespace std;
20 
21 
22 //==========================================================
25 struct Param {
26  string dump ;
27  int skipT ;
28  int maxT ;
29  double rho ;
30  vector <string> flags ;
31  vector <int> boxes ;
32  vector <vector <double> > boundaries ;
33  int pbc = 0 ;
34  vector<double> Delta ;
35  vector <double> radius ;
36  string save = "CoarseGrained";
37  double windowsize = 1 ;
38  double cuttoff = 2.5 ;
39 
40  void from_file(char path[])
41  {
42  ifstream in ;
43 
44  in.open(path) ;
45  if (!in.is_open()) { printf("[Input] file cannot be open\n"); return ;}
46 
47  while (! in.eof())
48  parsing(in) ;
49  }
50  void disp()
51  {
52  auto pbcprint = [](int a) {string s ="" ; for (;a>0; a>>=1) s = ((a&1)?"y":"n") + s ; return s ;} ;
53  printf("\n-----\n%s\nSkipping: %d\nFinal time: %d\nDensity: %g\nFlags: ", dump.c_str(), skipT, maxT, rho) ;
54  for (auto v: flags) printf("%s ", v.c_str()) ;
55  printf("\nBoxes: ") ;
56  for (auto v: boxes) printf("%d ", v) ;
57  printf("\nPBCs: %s\nWindowSize: %g\nCut-off: %g\nDeltas: ", pbcprint(pbc).c_str(), windowsize, cuttoff) ;
58  for (auto v: Delta) printf("%g ", v) ;
59  printf("\nBoundaries:") ;
60  for (auto v:boundaries)
61  {
62  printf("\n") ;
63  for (auto w:v)
64  printf("%g ", w);
65  }
66  printf("\n-----\n\n") ; fflush(stdout) ;
67  }
68 private:
69  int parsing (istream & in) ;
70 } ;
71 
72 
73 //--------------------------------------------
74 int Param::parsing (istream & in)
75 {
76  char line[5000] ; int id ; int rien, dimension ; double mass, radius ;
77 
78  in>>line;
79  if (line[0]=='#') {in.getline(line, 5000) ; return 0; } // The line is a comments
80 
81  if (!strcmp(line, "directory"))
82  {
83  in>>dump ;
84  save = dump + "/" + save ;
85  dump += "/dump.xml" ;
86  if (! experimental::filesystem::exists(dump))
87  {
88  printf("[ERR] file do not exist: %s\n", dump.c_str());
89  }
90  }
91  else if (!strcmp(line, "dimensions"))
92  {
93  in >> dimension ; in >> rien ;
94  Delta.resize(dimension, 0) ;
95  boxes.resize(dimension, 0) ;
96  boundaries.resize(2, vector<double> (dimension, 0)) ;
97  }
98  else if (!strcmp(line, "boundary"))
99  {
100  int walldim ; char type[50] ; double dmin, dmax ;
101  in >> walldim ; in >> type ; in>>dmin ; in >> dmax ;
102  boundaries[0][walldim]= dmin ;
103  boundaries[1][walldim]= dmax ;
104  if (!strcmp(type, "PBC"))
105  {
106  pbc |= (1<<walldim) ;
107  Delta[walldim] = dmax-dmin ;
108  }
109  else {} // Other types do not matter
110  }
111  else if (!strcmp(line, "gravity")) {in.getline(line, 5000) ; return 1; }
112  else if (!strcmp(line, "set"))
113  {
114  in >> line ;
115  if (!strcmp(line, "rho")) in >> rho ;
116  else if (!strcmp(line, "Kn")) {in.getline(line, 5000) ; return 1;}
117  else if (!strcmp(line, "Kt")) {in.getline(line, 5000) ; return 1;}
118  else if (!strcmp(line, "GammaN")) {in.getline(line, 5000) ; return 1;}
119  else if (!strcmp(line, "GammaT")) {in.getline(line, 5000) ; return 1;}
120  else if (!strcmp(line, "Mu")) {in.getline(line, 5000) ; return 1;}
121  else if (!strcmp(line, "T")) {in.getline(line, 5000) ; return 1;}
122  else if (!strcmp(line, "tdump")) {in.getline(line, 5000) ; return 1;}
123  else if (!strcmp(line, "orientationtracking")) {in.getline(line, 5000) ; return 1;}
124  else if (!strcmp(line, "skin")) {in.getline(line, 5000) ; return 1;}
125  else if (!strcmp(line, "dumps")) {in.getline(line, 5000) ; return 1;}
126  else if (!strcmp(line, "tinfo")) {in.getline(line, 5000) ; return 1;}
127  else if (!strcmp(line, "dt")) {in.getline(line, 5000) ; return 1;}
128  }
129  else if (!strcmp(line, "radius"))
130  {
131  int id ; double value ;
132  in >> id ; in>>value ;
133  if (id==-1 || id ==0) radius=value ;
134  }
135  else if (!strcmp(line, "mass"))
136  {
137  int id ; double value ;
138  in >> id ; in>>value ;
139  if (id==-1 || id ==0) mass=value ;
140  }
141  else if (!strcmp(line, "auto"))
142  {
143  in >> line ;
144  if (!strcmp(line, "rho"))
145  {
146  rho = mass / Volume(dimension, radius) ;
147  }
148  else if (!strcmp(line, "location")) {in.getline(line, 5000) ; return 1; } // Do not matter
149  else if (!strcmp(line, "inertia")) {in.getline(line, 5000) ; return 1 ; } // Do not matter
150  else if (!strcmp(line, "mass")) {in.getline(line, 5000) ; return 1 ; } // Do not matter
151  }
152  else if (!strcmp(line, "CG"))
153  {
154  in>>line ;
155  if (!strcmp(line, "skiptime")) in >> skipT ;
156  else if (!strcmp(line, "maxtime")) in >> maxT ;
157  else if (!strcmp(line, "flags"))
158  {
159  int nb ; in >> nb ;
160  for (int i=0 ; i<nb ; i++)
161  {
162  in >> line ;
163  flags.push_back(line) ;
164  }
165  }
166  else if (!strcmp(line, "boxes"))
167  for (auto &v : boxes)
168  in>>v ;
169  else if (!strcmp(line, "bound"))
170  {
171  int dim ; double bmin, bmax ;
172  in>>dim >> bmin >> bmax ;
173  boundaries[0][dim] = bmin ;
174  boundaries[1][dim] = bmax ;
175  }
176  else if (!strcmp(line, "radius"))
177  {} // TODO
178  else if (!strcmp(line, "windowsize"))
179  {
180  in >> windowsize ;
181  cuttoff = 2*windowsize ;
182  }
183  else if (!strcmp(line, "cutoff"))
184  {
185  in >> cuttoff ;
186  }
187  else
188  printf("[Input] Unknown command in input file |CG %s|\n", line) ;
189  }
190  else if (!strcmp(line, "location")){in.getline(line, 5000) ; return 1 ; }
191  else if (!strcmp(line, "velocity")){in.getline(line, 5000) ; return 1 ; }
192  else if (!strcmp(line, "omega")){in.getline(line, 5000) ; return 1 ; }
193  else if (!strcmp(line, "freeze")){in.getline(line, 5000) ; return 1 ; }
194  else if (!strcmp(line, "gravity")){in.getline(line, 5000) ; return 1 ; }
195  else if (!strcmp(line, "gravityangle")){in.getline(line, 5000) ; return 1 ; }
196  else if (!strcmp(line,"event")) {in.getline(line, 5000) ; return 1 ; }
197  else
198  printf("[Input] Unknown command in input file |%s|\n", line) ;
199 return 0 ;
200 }
double Volume(int d, double R)
Compute a sphere volume in dimension D.
Definition: Coarsing.cpp:1785
@ radius
Definition: Typedefs.h:19
@ mass
Definition: Typedefs.h:19
type
The type the bitset is encoded with.
Definition: bitset.hpp:44
void save(Archive &ar, SetT const &set)
Definition: set.hpp:42
Definition: json.hpp:5678
const GenericPointer< typename T::ValueType > T2 value
Definition: pointer.h:1282
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
Definition: pointer.h:1181
Contains the parameters of the simulation & CG.
Definition: IOLiggghts.h:67
void disp()
Definition: IONDDEM.h:50
string dump
Definition: IONDDEM.h:26
int parsing(istream &in)
Definition: IONDDEM.h:74
double rho
Definition: IONDDEM.h:29
void from_file(char path[])
Definition: IONDDEM.h:40
vector< double > radius
Definition: IONDDEM.h:35
vector< double > Delta
Definition: IONDDEM.h:34