00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef RAX_PARSER_SPH_H
00019 #define RAX_PARSER_SPH_H
00020
00021 #include "askosdata/pointer.h"
00022
00023 #include "rax_parser.h"
00024 #include "particle.h"
00025 #include "compound.h"
00026
00027
00028 class SPH;
00029
00030
00033 class RAX_Handler_SPH : public RAX_Handler {
00034
00035 public:
00036
00041 virtual Particle::vector_t vector_value(const std::string& s) const;
00042
00043 };
00044
00045
00048 class Input_Handler : public RAX_Handler_SPH {
00049
00050 public:
00051
00058 virtual void start(RAX_Parser& parser,
00059 const std::string& name, AttributeList& attributes);
00060
00065 virtual void end(RAX_Parser& parser, const std::string& name);
00066
00070 virtual void text(RAX_Parser& parser,
00071 const std::string& name, const std::string& t);
00072
00073 };
00074
00075
00078 class Parameters_Handler : public RAX_Handler_SPH {
00079
00080 private:
00081
00082 double xdim, ydim, zdim, h, rho;
00083 int dimensions;
00084 double d_max;
00085
00086 public:
00087
00090 Parameters_Handler();
00091
00096 virtual void start(RAX_Parser& parser,
00097 const std::string& name, AttributeList& attributes);
00098
00104 virtual void end(RAX_Parser& parser, const std::string& name);
00105
00109 virtual void text(RAX_Parser& parser,
00110 const std::string& name, const std::string& t);
00111
00112 };
00113
00114
00117 class Initial_Conditions_Handler : public RAX_Handler_SPH {
00118
00119 public:
00120
00125 virtual void start(RAX_Parser& parser,
00126 const std::string& name, AttributeList& attributes);
00127
00132 virtual void end(RAX_Parser& parser, const std::string& name);
00133
00134 };
00135
00136
00139 class Sphere_Handler : public RAX_Handler_SPH {
00140
00141 public:
00142
00145 virtual void start(RAX_Parser& parser,
00146 const std::string& name, AttributeList& attributes);
00147
00152 virtual void end(RAX_Parser& parser, const std::string& name);
00153
00154 };
00155
00156
00159 class Box_Handler : public RAX_Handler_SPH {
00160
00161 public:
00162
00165 virtual void start(RAX_Parser& parser,
00166 const std::string& name, AttributeList& attributes);
00167
00172 virtual void end(RAX_Parser& parser, const std::string& name);
00173
00174 };
00175
00176
00179 class Simulate_Handler : public RAX_Handler_SPH {
00180
00181 private:
00182
00183 double duration;
00184
00185 public:
00186
00189 Simulate_Handler();
00190
00193 virtual void start(RAX_Parser& parser,
00194 const std::string& name, AttributeList& attributes);
00195
00198 virtual void end(RAX_Parser& parser, const std::string& name);
00199
00203 virtual void text(RAX_Parser& parser,
00204 const std::string& name, const std::string& t);
00205
00206 };
00207
00208
00213 class RAX_Parser_SPH : public RAX_Parser {
00214
00215 private:
00216
00217 Pointer<SPH> sph_ptr;
00218
00219 double dt_display;
00220
00221 int nspheres;
00222
00223 bool first_simulate;
00224
00225 Compound initial_geometry;
00226
00227 int nparticles_row;
00228 double d_max;
00229
00230 public:
00231
00234 RAX_Parser_SPH();
00235
00242 bool parse(const std::string& filename);
00243
00246 void construct_sph(const int dimensions,
00247 const double xdim, const double ydim, const double zdim,
00248 const double h, const double rho);
00249
00254 void set_gravity(const Particle::vector_t& g);
00255
00260 void set_nu(const double nu);
00261
00266 void set_c(const double c);
00267
00272 void set_dt(const double dt);
00273
00280 bool set_kernel(const std::string& name);
00281
00284 void set_dt_display(const double dt_display);
00285
00288 void set_nspheres(const int nspheres);
00289
00292 void set_nparticles_row(const int nparticles_row);
00293
00297 void set_dmax(const double d_max_ini);
00298
00303 void simulate(const double duration);
00304
00309 SPH& get_sph();
00310
00313 void add_sphere(const Particle::vector_t& p, const double r);
00314
00317 void add_box(const Particle::vector_t& p1, const Particle::vector_t& p2);
00318
00322 virtual void start_element(const std::string& name, AttributeList& attributes);
00323
00327 virtual void end_element(const std::string& name);
00328
00332 virtual void text(const std::string& name, const std::string& t);
00333
00334 };
00335
00336
00337 #endif // RAX_PARSER_SPH_H