sofa::component::forcefield::SPHFluidForceField< DataTypes > Class Template Reference

#include <SPHFluidForceField.h>

Inheritance diagram for sofa::component::forcefield::SPHFluidForceField< DataTypes >:

Inheritance graph
[legend]
Collaboration diagram for sofa::component::forcefield::SPHFluidForceField< DataTypes >:

Collaboration graph
[legend]

Data Structures

struct  DForce
struct  Particle

Public Types

typedef
sofa::core::componentmodel::behavior::ForceField
< DataTypes > 
Inherit
typedef DataTypes::VecCoord VecCoord
typedef DataTypes::VecDeriv VecDeriv
typedef DataTypes::Coord Coord
typedef DataTypes::Deriv Deriv
typedef Coord::value_type Real

Public Member Functions

void addNeighbor (int i1, int i2, Real r2, Real h2)
 this method is called by the SpatialGrid when w connection between two particles is detected
 SPHFluidForceField ()
Real getParticleRadius () const
void setParticleRadius (Real v)
Real getParticleMass () const
void setParticleMass (Real v)
Real getPressureStiffness () const
void setPressureStiffness (Real v)
Real getDensity0 () const
void setDensity0 (Real v)
Real getViscosity () const
void setViscosity (Real v)
Real getSurfaceTension () const
void setSurfaceTension (Real v)
Real getParticleField (int i, Real r2_h2)
Real getParticleFieldConstant (Real h)
virtual void init ()
 Initialization method called at graph modification, during bottom-up traversal.
virtual void addForce (VecDeriv &f, const VecCoord &x, const VecDeriv &v)
 Given the current position and velocity states, update the current force vector by computing and adding the forces associated with this ForceField.
virtual void addDForce (VecDeriv &df, const VecDeriv &dx)
 Compute the force derivative given a small displacement from the position and velocity used in the previous call to addForce().
virtual double getPotentialEnergy (const VecCoord &x)
 Get the potential energy associated to this ForceField.
void draw ()
 Render internal data of this object, for debugging purposes.

Protected Types

typedef SpatialGridContainer
< DataTypes > 
Grid

Protected Member Functions

Real constWd (Real h) const
 Density Smoothing Kernel: W = 315 / 64pih9 * (h2 - r2)3 = 315 / 64pih3 * (1 - (r/h)2)3.
Real Wd (Real r_h, Real C)
Real constGradWd (Real h) const
Deriv gradWd (const Deriv &d, Real r_h, Real C)
Real constLaplacianWd (Real h) const
Real laplacianWd (Real r_h, Real C)
Real constWp (Real h) const
 Pressure Smoothing Kernel: W = 15 / pih6 (h - r)3 = 15 / pih3 (1 - r/h)3.
Real Wp (Real r_h, Real C)
Real constGradWp (Real h) const
Deriv gradWp (const Deriv &d, Real r_h, Real C)
Real constWv (Real h)
 Viscosity Smoothing Kernel: W = 15/(2pih3) (-r3/2h3 + r2/h2 + h/2r - 1).
Real Wv (Real r_h, Real C)
Real constGradWv (Real h)
Deriv gradWv (const Deriv &d, Real r_h, Real C)
Real constLaplacianWv (Real h)
Real laplacianWv (Real r_h, Real C)
Real constWc (Real h) const
 Color Smoothing Kernel: same as Density.
Real Wc (Real r_h, Real C)
Real constGradWc (Real h) const
Deriv gradWc (const Deriv &d, Real r_h, Real C)
Real constLaplacianWc (Real h) const
Real laplacianWc (Real r_h, Real C)

Protected Attributes

Data< Real > particleRadius
Data< Real > particleMass
Data< Real > pressureStiffness
 100 - 1000 m2/s2
Data< Real > density0
 1000 kg/m3 for water
Data< Real > viscosity
Data< Real > surfaceTension
sofa::helper::vector< Particle > particles
Grid * grid
sofa::helper::vector< DForce > dforces

Detailed Description

template<class DataTypes>
class sofa::component::forcefield::SPHFluidForceField< DataTypes >

Definition at line 50 of file SPHFluidForceField.h.


Member Typedef Documentation

template<class DataTypes >
typedef DataTypes::Coord sofa::component::forcefield::SPHFluidForceField< DataTypes >::Coord

template<class DataTypes >
typedef DataTypes::Deriv sofa::component::forcefield::SPHFluidForceField< DataTypes >::Deriv

Definition at line 85 of file SPHFluidForceField.h.

Definition at line 53 of file SPHFluidForceField.h.

template<class DataTypes >
typedef Coord::value_type sofa::component::forcefield::SPHFluidForceField< DataTypes >::Real

Definition at line 58 of file SPHFluidForceField.h.

template<class DataTypes >
typedef DataTypes::VecCoord sofa::component::forcefield::SPHFluidForceField< DataTypes >::VecCoord

template<class DataTypes >
typedef DataTypes::VecDeriv sofa::component::forcefield::SPHFluidForceField< DataTypes >::VecDeriv


Constructor & Destructor Documentation

template<class DataTypes >
sofa::component::forcefield::SPHFluidForceField< DataTypes >::SPHFluidForceField (  )  [inline]

Definition at line 48 of file SPHFluidForceField.inl.


Member Function Documentation

template<class DataTypes >
void sofa::component::forcefield::SPHFluidForceField< DataTypes >::addDForce ( VecDeriv &  df,
const VecDeriv &  dx 
) [inline, virtual]

Compute the force derivative given a small displacement from the position and velocity used in the previous call to addForce().

The derivative should be directly derived from the computations done by addForce. Any forces neglected in addDForce will be integrated explicitly (i.e. using its value at the beginning of the timestep).

If the ForceField can be represented as a matrix, this method computes $ df += K dx $

This method must be implemented by the component, and is usually called by the generic ForceField::addDForce() method.

Deprecated:
to more efficiently accumulate contributions from all terms of the system equation, a new addDForce method allowing to pass two coefficients for the stiffness and damping terms should now be used.

Reimplemented from sofa::core::componentmodel::behavior::ForceField< DataTypes >.

Definition at line 277 of file SPHFluidForceField.inl.

References sofa::component::forcefield::SPHFluidForceField< DataTypes >::DForce::a, sofa::component::forcefield::SPHFluidForceField< DataTypes >::DForce::b, sofa::component::forcefield::SPHFluidForceField< DataTypes >::DForce::df, sofa::component::forcefield::SPHFluidForceField< DataTypes >::dforces, sofa::core::componentmodel::behavior::MechanicalState< TDataTypes >::getX(), and sofa::core::componentmodel::behavior::ForceField< DataTypes >::mstate.

template<class DataTypes >
void sofa::component::forcefield::SPHFluidForceField< DataTypes >::addForce ( VecDeriv &  f,
const VecCoord &  x,
const VecDeriv &  v 
) [inline, virtual]

Given the current position and velocity states, update the current force vector by computing and adding the forces associated with this ForceField.

If the ForceField can be represented as a matrix, this method computes $ f += B v + K x $

This method must be implemented by the component, and is usually called by the generic ForceField::addForce() method.

Implements sofa::core::componentmodel::behavior::ForceField< DataTypes >.

Definition at line 83 of file SPHFluidForceField.inl.

References sofa::component::forcefield::SPHFluidForceField< DataTypes >::constGradWc(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::constGradWp(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::constLaplacianWc(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::constLaplacianWv(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::constWd(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::Particle::curvature, sofa::component::forcefield::SPHFluidForceField< DataTypes >::Particle::density, sofa::component::forcefield::SPHFluidForceField< DataTypes >::density0, sofa::component::forcefield::SPHFluidForceField< DataTypes >::dforces, sofa::component::container::SpatialGridContainer< DataTypes >::findNeighbors(), sofa::core::objectmodel::BaseObject::getContext(), sofa::core::objectmodel::BaseContext::getLocalGravity(), sofa::core::objectmodel::Data< T >::getValue(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::gradWc(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::gradWp(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::grid, sofa::component::forcefield::SPHFluidForceField< DataTypes >::laplacianWc(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::laplacianWv(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::Particle::neighbors, norm2(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::Particle::normal, sofa::component::forcefield::SPHFluidForceField< DataTypes >::particleMass, sofa::component::forcefield::SPHFluidForceField< DataTypes >::particleRadius, sofa::component::forcefield::SPHFluidForceField< DataTypes >::particles, sofa::component::forcefield::SPHFluidForceField< DataTypes >::Particle::pressure, sofa::component::forcefield::SPHFluidForceField< DataTypes >::pressureStiffness, sofa::component::forcefield::SPHFluidForceField< DataTypes >::surfaceTension, sofa::component::container::SpatialGridContainer< DataTypes >::updateGrid(), sofa::component::forcefield::SPHFluidForceField< DataTypes >::viscosity, and sofa::component::forcefield::SPHFluidForceField< DataTypes >::Wd().

template<class DataTypes >
void sofa::component::forcefield::SPHFluidForceField< DataTypes >::addNeighbor ( int  i1,
int  i2,
Real  r2,
Real  h2 
) [inline]

this method is called by the SpatialGrid when w connection between two particles is detected

Definition at line 91 of file SPHFluidForceField.h.

References sofa::component::forcefield::SPHFluidForceField< DataTypes >::particles.

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::constGradWc ( Real  h  )  const [inline, protected]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::constGradWd ( Real  h  )  const [inline, protected]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::constGradWp ( Real  h  )  const [inline, protected]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::constGradWv ( Real  h  )  [inline, protected]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::constLaplacianWc ( Real  h  )  const [inline, protected]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::constLaplacianWd ( Real  h  )  const [inline, protected]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::constLaplacianWv ( Real  h  )  [inline, protected]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::constWc ( Real  h  )  const [inline, protected]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::constWd ( Real  h  )  const [inline, protected]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::constWp ( Real  h  )  const [inline, protected]

Pressure Smoothing Kernel: W = 15 / pih6 (h - r)3 = 15 / pih3 (1 - r/h)3.

Definition at line 155 of file SPHFluidForceField.h.

References R_PI.

Referenced by sofa::component::forcefield::SPHFluidForceField< DataTypes >::constGradWp().

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::constWv ( Real  h  )  [inline, protected]

Viscosity Smoothing Kernel: W = 15/(2pih3) (-r3/2h3 + r2/h2 + h/2r - 1).

Definition at line 188 of file SPHFluidForceField.h.

References R_PI.

Referenced by sofa::component::forcefield::SPHFluidForceField< DataTypes >::constGradWv(), and sofa::component::forcefield::SPHFluidForceField< DataTypes >::constLaplacianWv().

template<class DataTypes >
void sofa::component::forcefield::SPHFluidForceField< DataTypes >::draw (  )  [inline, virtual]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::getDensity0 (  )  const [inline]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::getParticleField ( int  i,
Real  r2_h2 
) [inline]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::getParticleFieldConstant ( Real  h  )  [inline]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::getParticleMass (  )  const [inline]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::getParticleRadius (  )  const [inline]

template<class DataTypes >
double sofa::component::forcefield::SPHFluidForceField< DataTypes >::getPotentialEnergy ( const VecCoord &  x  )  [inline, virtual]

Get the potential energy associated to this ForceField.

Used to extimate the total energy of the system by some post-stabilization techniques.

This method must be implemented by the component, and is usually called by the generic ForceField::getPotentialEnergy() method.

Implements sofa::core::componentmodel::behavior::ForceField< DataTypes >.

Definition at line 295 of file SPHFluidForceField.inl.

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::getPressureStiffness (  )  const [inline]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::getSurfaceTension (  )  const [inline]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::getViscosity (  )  const [inline]

template<class DataTypes >
Deriv sofa::component::forcefield::SPHFluidForceField< DataTypes >::gradWc ( const Deriv &  d,
Real  r_h,
Real  C 
) [inline, protected]

template<class DataTypes >
Deriv sofa::component::forcefield::SPHFluidForceField< DataTypes >::gradWd ( const Deriv &  d,
Real  r_h,
Real  C 
) [inline, protected]

Definition at line 126 of file SPHFluidForceField.h.

template<class DataTypes >
Deriv sofa::component::forcefield::SPHFluidForceField< DataTypes >::gradWp ( const Deriv &  d,
Real  r_h,
Real  C 
) [inline, protected]

template<class DataTypes >
Deriv sofa::component::forcefield::SPHFluidForceField< DataTypes >::gradWv ( const Deriv &  d,
Real  r_h,
Real  C 
) [inline, protected]

Definition at line 209 of file SPHFluidForceField.h.

template<class DataTypes >
void sofa::component::forcefield::SPHFluidForceField< DataTypes >::init ( void   )  [inline, virtual]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::laplacianWc ( Real  r_h,
Real  C 
) [inline, protected]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::laplacianWd ( Real  r_h,
Real  C 
) [inline, protected]

Definition at line 148 of file SPHFluidForceField.h.

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::laplacianWv ( Real  r_h,
Real  C 
) [inline, protected]

template<class DataTypes >
void sofa::component::forcefield::SPHFluidForceField< DataTypes >::setDensity0 ( Real  v  )  [inline]

template<class DataTypes >
void sofa::component::forcefield::SPHFluidForceField< DataTypes >::setParticleMass ( Real  v  )  [inline]

template<class DataTypes >
void sofa::component::forcefield::SPHFluidForceField< DataTypes >::setParticleRadius ( Real  v  )  [inline]

template<class DataTypes >
void sofa::component::forcefield::SPHFluidForceField< DataTypes >::setPressureStiffness ( Real  v  )  [inline]

template<class DataTypes >
void sofa::component::forcefield::SPHFluidForceField< DataTypes >::setSurfaceTension ( Real  v  )  [inline]

template<class DataTypes >
void sofa::component::forcefield::SPHFluidForceField< DataTypes >::setViscosity ( Real  v  )  [inline]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::Wc ( Real  r_h,
Real  C 
) [inline, protected]

Definition at line 248 of file SPHFluidForceField.h.

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::Wd ( Real  r_h,
Real  C 
) [inline, protected]

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::Wp ( Real  r_h,
Real  C 
) [inline, protected]

Definition at line 159 of file SPHFluidForceField.h.

template<class DataTypes >
Real sofa::component::forcefield::SPHFluidForceField< DataTypes >::Wv ( Real  r_h,
Real  C 
) [inline, protected]

Definition at line 192 of file SPHFluidForceField.h.


Field Documentation

template<class DataTypes >
Data< Real > sofa::component::forcefield::SPHFluidForceField< DataTypes >::density0 [protected]

template<class DataTypes >
Grid* sofa::component::forcefield::SPHFluidForceField< DataTypes >::grid [protected]

template<class DataTypes >
Data< Real > sofa::component::forcefield::SPHFluidForceField< DataTypes >::particleMass [protected]

template<class DataTypes >
Data< Real > sofa::component::forcefield::SPHFluidForceField< DataTypes >::particleRadius [protected]

template<class DataTypes >
Data< Real > sofa::component::forcefield::SPHFluidForceField< DataTypes >::surfaceTension [protected]

template<class DataTypes >
Data< Real > sofa::component::forcefield::SPHFluidForceField< DataTypes >::viscosity [protected]


The documentation for this class was generated from the following files:

Generated on Sun Nov 23 04:19:38 2008 for Sofa by  doxygen 1.5.7.1