Main Page | Class Hierarchy | Class List | File List | Class Members

rax_parser_sph.h

00001 /***************************************************************************
00002                           rax_parser_sph.h  -  description
00003                              -------------------
00004     begin                : Sat Feb 1 2003
00005     copyright            : (C) 2003 by Moritz Franosch
00006     email                : mail@Franosch.org
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
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; // stored parameters
00083   int dimensions; // stored parameter
00084   double d_max; // stored parameter
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; // parameter 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; // simulation is calculated here
00218 
00219   double dt_display; // time step for XML output
00220 
00221   int nspheres; // number of spheres that approximate the fluid
00222 
00223   bool first_simulate; // simulate() has not yet been called
00224 
00225   Compound initial_geometry; // initial conditions
00226 
00227   int nparticles_row; // number of particles in a row
00228   double d_max; // largest triangle used for triangulation
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

Generated on Fri Apr 22 11:06:42 2005 for partsim.kdevelop by doxygen 1.3.6