Lagrangian Liquid Simulation
Master Thesis project on simulation of liquids using Lagrangian approach and SPH
|
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