Lagrangian Liquid Simulation
Master Thesis project on simulation of liquids using Lagrangian approach and SPH
src/FluidParticle.cpp
Go to the documentation of this file.
00001 
00002 
00003 
00004 #include "FluidParticle.h"
00005 
00006 FluidParticle::FluidParticle() : Particle()
00007 {
00008     FluidParticle(0);
00009 }
00010 
00011 FluidParticle::FluidParticle
00012             (
00013                 const FluidParticle& _particle
00014             ) :
00015             Particle
00016             (
00017                 _particle.getId(),
00018                 _particle.getMass(),
00019                 _particle.getPosition(),
00020                 _particle.getColour(),
00021                 _particle.getRadius(),
00022                 _particle.getMoveable(),
00023                 _particle.getVelocity(),
00024                 _particle.getAcceleration(),
00025                 _particle.getNetForce()
00026             )
00027 {
00028     m_name = _particle.getName();
00029 
00030     m_density = _particle.getDensity();
00031     m_materialRestDensity =_particle.getMaterialRestDensity();
00032 
00033     m_pressure = _particle.getPressure();
00034 
00035     m_viscosityConstant = _particle.getViscosityConstant();
00036     m_gasConstant = _particle.getGasConstant();
00037 
00038     m_surfaceTensionCoefficient = _particle.getSurfaceTensionCoefficient();
00039     m_surfaceTensionThreshold = _particle.getSurfaceTensionThreshold();
00040     m_surfaceColorCoefficient = _particle.getSurfaceColorCoefficient();
00041 
00042     m_interfaceTensionCoefficient = _particle.getInterfaceTensionCoefficient();
00043     m_interfaceTensionThreshold = _particle.getInterfaceTensionThreshold();
00044     m_interfaceColorCoefficient = _particle.getInterfaceColorCoefficient();
00045 
00046     m_hasHitEnvironmentYet = _particle.m_hasHitEnvironmentYet;
00047     m_waitUntilFirstHitBoundary = _particle.m_waitUntilFirstHitBoundary;
00048     m_waitUntilFirstHitRBD = _particle.m_waitUntilFirstHitRBD;
00049 }
00050 
00051 FluidParticle::FluidParticle
00052             (
00053                 const int _id,
00054                 const ngl::Real _mass,
00055                 const ngl::Real _density,
00056                 const ngl::Vector _position,
00057                 const ngl::Vector _velocity,
00058                 const ngl::Real _viscosityConstant,
00059                 const ngl::Real _gasConstant,
00060                 const ngl::Real _surfaceTensionCoefficient,
00061                 const ngl::Real _surfaceTensionThreshold,
00062                 const ngl::Real _surfaceColorCoefficient,
00063                 const ngl::Real _interfaceTensionCoefficient,
00064                 const ngl::Real _interfaceTensionThreshold,
00065                 const ngl::Real _interfaceColorCoefficient,
00066                 const ngl::Colour _colour,
00067                 const ngl::Real _radius,
00068                 const std::string _name,
00069                 const bool _waitUntilFirstHitBoundary,
00070                 const bool _waitUntilFirstHitRBD
00071             ) :
00072             Particle(_id, _mass, _position, _colour, _radius, true, _velocity)
00073 {
00074     //init params
00075     m_name = _name;
00076 
00077     m_density = _density;
00078     m_materialRestDensity = _density;
00079 
00080     m_pressure = 0;
00081 
00082     m_viscosityConstant = _viscosityConstant;
00083     m_gasConstant = _gasConstant;
00084 
00085     m_surfaceTensionCoefficient = _surfaceTensionCoefficient;
00086     m_surfaceTensionThreshold = _surfaceTensionThreshold;
00087     m_surfaceColorCoefficient = _surfaceColorCoefficient;
00088 
00089     m_interfaceTensionCoefficient = _interfaceTensionCoefficient;
00090     m_interfaceTensionThreshold = _interfaceTensionThreshold;
00091     m_interfaceColorCoefficient = _interfaceColorCoefficient;
00092 
00093     m_hasHitEnvironmentYet = false;
00094     m_waitUntilFirstHitBoundary = _waitUntilFirstHitBoundary;
00095     m_waitUntilFirstHitRBD = _waitUntilFirstHitRBD;
00096 }
00097 
00098 FluidParticle::~FluidParticle()
00099 {
00100 }
00101 
00102 void FluidParticle::calculatePressure()
00103 {
00104     //modified ideal gas state equation
00105     m_pressure = m_gasConstant * (m_density - m_materialRestDensity);
00106 }
00107 
00108 void FluidParticle::resetForce()
00109 {
00110     Particle::resetForce();
00111 
00112     m_pressureForce = 0;
00113     m_viscosityForce = 0;
00114     m_surfaceTensionForce = 0;
00115     m_gravityForce = 0;
00116 }
00117 
00118 void FluidParticle::updateHitForTheFirstTime
00119                     (
00120                         const bool _hitBoundary,
00121                         const bool _hitRBD
00122                     )
00123 {
00124     //assume no hit for the first time
00125     bool hit1 = false;
00126     bool hit2 = false;
00127 
00128     //access hit status for both boundary and rbd
00129     if (m_waitUntilFirstHitBoundary && _hitBoundary )hit1 = true;
00130     if (m_waitUntilFirstHitRBD && _hitRBD )hit2 = true;
00131 
00132     //either boundary hit or rbd hit implies hit for the first time has occured
00133     m_hasHitEnvironmentYet = hit1 || hit2;
00134 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator