Lagrangian Liquid Simulation
Master Thesis project on simulation of liquids using Lagrangian approach and SPH
include/FluidParticle.h
Go to the documentation of this file.
00001 #ifndef FLUIDPARTICLE_H
00002 #define FLUIDPARTICLE_H
00003 
00004 #include "Particle.h"
00005 
00015 
00016 class FluidParticle : public Particle
00017 {
00018 public:
00020     FluidParticle();
00021 
00023     FluidParticle(const FluidParticle& _fluidParticle);
00024 
00044     FluidParticle
00045         (
00046             const int _id,
00047             const ngl::Real _mass = 0,
00048             const ngl::Real _density = 0,
00049             const ngl::Vector _position = 0,
00050             const ngl::Vector _velocity = 0,
00051             const ngl::Real _viscosityConstant = 0,
00052             const ngl::Real _gasConstant = 0,
00053             const ngl::Real _surfaceTensionCoefficient = 0,
00054             const ngl::Real _surfaceTensionThreshold = 0,
00055             const ngl::Real _surfaceColorCoefficient = 0,
00056             const ngl::Real _interfaceTensionCoefficient = 0,
00057             const ngl::Real _interfaceTensionThreshold = 0,
00058             const ngl::Real _interfaceColorCoefficient = 0,
00059             const ngl::Colour _colour = 0,
00060             const ngl::Real _radius = 0,
00061             const std::string _name = "na",
00062             const bool _waitUntilFirstHitBoundary = false,
00063             const bool _waitUntilFirstHitRBD = false
00064         );
00065 
00067     ~FluidParticle();
00068 
00070     void calculatePressure();
00071 
00073     void resetForce();
00074 
00076     inline std::string getName() const { return m_name; }
00077 
00079     inline ngl::Vector getPressureForce() const { return m_pressureForce; }
00080 
00083     inline void setPressureForce(const ngl::Vector _f) { m_pressureForce = _f; }
00084 
00086     inline ngl::Vector getViscosityForce() const { return m_viscosityForce; }
00087 
00090     inline void setViscosityForce(const ngl::Vector _f) { m_viscosityForce = _f; }
00091 
00093     inline ngl::Vector getSurfaceTensionForce() const { return m_surfaceTensionForce; }
00094 
00097     inline void setSurfaceTensionForce(const ngl::Vector _f) { m_surfaceTensionForce = _f; }
00098 
00100     inline ngl::Vector getInterfaceTensionForce() const { return m_interfaceTensionForce; }
00101 
00104     inline void setInterfaceTensionForce(const ngl::Vector _f) { m_interfaceTensionForce = _f; }
00105 
00107     inline ngl::Vector getGravityForce() const { return m_gravityForce; }
00108 
00111     inline void setGravityForce(const ngl::Vector _f) { m_gravityForce = _f; }
00112 
00114     inline ngl::Real getPressure() const { return m_pressure; }
00115 
00117     inline ngl::Real getDensity() const { return m_density; }
00118 
00121     inline void setDensity(const ngl::Real _d) { m_density = _d; }
00122 
00124     inline ngl::Real getMaterialRestDensity() const { return m_materialRestDensity; }
00125 
00128     inline void setMaterialRestDensity(const ngl::Real _v) { m_materialRestDensity = _v; }
00129 
00131     inline ngl::Real getGasConstant() const { return m_gasConstant; }
00132 
00135     inline void setGasConstant(const ngl::Real _c) { m_gasConstant = _c; }
00136 
00138     inline ngl::Real getViscosityConstant() const { return m_viscosityConstant; }
00139 
00142     inline void setViscosityConstant(const ngl::Real _c) { m_viscosityConstant = _c; }
00143 
00145     inline ngl::Real getSurfaceTensionCoefficient() const { return m_surfaceTensionCoefficient; }
00146 
00149     inline void setSurfaceTensionCoefficient(const ngl::Real _c) { m_surfaceTensionCoefficient = _c; }
00150 
00152     inline ngl::Real getSurfaceTensionThreshold() const { return m_surfaceTensionThreshold; }
00153 
00156     inline void setSurfaceTensionThreshold(const ngl::Real _c) { m_surfaceTensionThreshold = _c; }
00157 
00159     inline ngl::Real getSurfaceColorCoefficient() const { return m_surfaceColorCoefficient; }
00160 
00163     inline void setSurfaceColorCoefficient(const ngl::Real _c) { m_surfaceColorCoefficient = _c; }
00164 
00166     inline ngl::Real getInterfaceTensionCoefficient() const { return m_interfaceTensionCoefficient; }
00167 
00170     inline void setInterfaceTensionCoefficient(const ngl::Real _c) { m_interfaceTensionCoefficient = _c; }
00171 
00173     inline ngl::Real getInterfaceTensionThreshold() const { return m_interfaceTensionThreshold; }
00174 
00177     inline void setInterfaceTensionThreshold(const ngl::Real _c) { m_interfaceTensionThreshold = _c; }
00178 
00180     inline ngl::Real getInterfaceColorCoefficient() const { return m_interfaceColorCoefficient; }
00181 
00184     inline void setInterfaceColorCoefficient(const ngl::Real _c) { m_interfaceColorCoefficient = _c; }
00185 
00189     void updateHitForTheFirstTime
00190                 (
00191                     const bool _hitBoundary,
00192                     const bool _hitRBD
00193                 );
00194 
00196     inline bool fluidRulesEnabled() const { return (m_waitUntilFirstHitBoundary || m_waitUntilFirstHitRBD) ? m_hasHitEnvironmentYet : true; }
00197 
00200     inline void setWaitUntilFirstHitBoundary(const bool _v) { m_waitUntilFirstHitBoundary = _v; }
00201 
00204     inline void setWaitUntilFirstHitRBD(const bool _v) { m_waitUntilFirstHitRBD = _v; }
00205 
00206 private:
00208     std::string m_name;
00209 
00211     ngl::Vector m_pressureForce;
00212 
00214     ngl::Vector m_viscosityForce;
00215 
00217     ngl::Vector m_surfaceTensionForce;
00218 
00220     ngl::Vector m_interfaceTensionForce;
00221 
00223     ngl::Vector m_gravityForce;
00224 
00226     ngl::Real m_density;
00227 
00229     ngl::Real m_materialRestDensity;
00230 
00232     ngl::Real m_pressure;
00233 
00235     ngl::Real m_viscosityConstant;
00236 
00238     ngl::Real m_gasConstant;
00239 
00241     ngl::Real m_surfaceTensionCoefficient;
00242 
00244     ngl::Real m_surfaceTensionThreshold;
00245 
00247     ngl::Real m_surfaceColorCoefficient;
00248 
00250     ngl::Real m_interfaceTensionCoefficient;
00251 
00253     ngl::Real m_interfaceTensionThreshold;
00254 
00256     ngl::Real m_interfaceColorCoefficient;
00257 
00259     bool m_hasHitEnvironmentYet;
00260 
00262     bool m_waitUntilFirstHitBoundary;
00263 
00265     bool m_waitUntilFirstHitRBD;
00266 
00267 };
00268 
00269 #endif // FLUIDPARTICLE_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator