This is an implementation of the Implicit Incompressible SPH (IISPH) solver based on PeriDyno. For details, refer to "Implicit Incompressible SPH" by Ihmsen et al., IEEE TVCG, 2015. The code was written by Shusen Liu, ISCAS, Sep, 2024.
More...
|
| ImplicitISPH () |
|
| ~ImplicitISPH () override |
|
| DEF_VAR_IN (Real, TimeStep, "Time Step") |
|
| DEF_ARRAY_IN (Coord, Position, DeviceType::GPU, "Input particle position") |
| Particle positions.
|
|
| DEF_ARRAY_IN (Coord, Velocity, DeviceType::GPU, "Input particle velocity") |
| Particle velocities.
|
|
| DEF_ARRAYLIST_IN (int, NeighborIds, DeviceType::GPU, "Neighboring particles' ids") |
| Neighboring particles' ids.
|
|
| DEF_ARRAY_OUT (Real, Density, DeviceType::GPU, "Final particle density") |
| Final particle densities.
|
|
| DEF_VAR (int, IterationNumber, 30, "Iteration number of the PBD solver") |
|
| DEF_VAR (Real, RestDensity, 1000, "Reference density") |
|
| DEF_VAR (Real, Kappa, Real(1), "") |
|
| DEF_VAR (Real, RelaxedOmega, Real(0.5f), "") |
|
Real | takeOneIteration () |
|
void | PreIterationCompute () |
|
void | updateVelocity () |
|
Public Member Functions inherited from dyno::ParticleApproximation< TDataType > |
| ParticleApproximation () |
|
virtual | ~ParticleApproximation () |
|
| DECLARE_ENUM (EKernelType, KT_Smooth=0, KT_Spiky=1) |
|
void | compute () override |
|
| DEF_VAR_IN (Real, SmoothingLength, "Smoothing Length") |
|
| DEF_VAR_IN (Real, SamplingDistance, "Particle sampling distance") |
|
| DEF_ENUM (EKernelType, KernelType, EKernelType::KT_Spiky, "Rendering mode") |
|
| ComputeModule () |
|
| ~ComputeModule () override |
|
std::string | getModuleType () override |
|
| Module (std::string name="default") |
|
| ~Module (void) override |
|
bool | initialize () |
|
void | update () |
|
void | setName (std::string name) |
|
std::string | getName () override |
|
virtual void | setParentNode (Node *node) |
| Set the parent node.
|
|
Node * | getParentNode () |
|
SceneGraph * | getSceneGraph () |
|
bool | isInitialized () |
|
bool | attachField (FBase *field, std::string name, std::string desc, bool autoDestroy=true) override |
| Attach a field to Base.
|
|
bool | isInputComplete () |
| Check the completeness of input fields.
|
|
bool | isOutputCompete () |
|
| DEF_VAR (bool, ForceUpdate, false, "") |
|
void | setUpdateAlways (bool b) |
| Set the update strategy for the module.
|
|
| OBase () |
|
| ~OBase () override |
|
virtual std::string | caption () |
| Return the caption.
|
|
virtual bool | captionVisible () |
| Whether to hide the caption in the GUI.
|
|
virtual std::string | description () |
| Return a description for the node or module, override this function to support user-defined description.
|
|
bool | addField (FBase *data) |
| Add a field to Base FieldID will be set to the name of Field by default.
|
|
bool | addField (FieldID name, FBase *data) |
| Add a field to Base.
|
|
bool | addFieldAlias (FieldID name, FBase *data) |
|
bool | addFieldAlias (FieldID name, FBase *data, FieldMap &fieldAlias) |
|
bool | findField (FBase *data) |
| Find a field by its pointer.
|
|
bool | findFieldAlias (const FieldID name) |
| Find a field by its name.
|
|
bool | findFieldAlias (const FieldID name, FieldMap &fieldAlias) |
| Find a field in fieldAlias by its name This function is typically called by other functions.
|
|
bool | removeField (FBase *data) |
| Remove a field by its pointer.
|
|
bool | removeFieldAlias (const FieldID name) |
| Remove a field by its name.
|
|
bool | removeFieldAlias (const FieldID name, FieldMap &fieldAlias) |
|
FBase * | getField (const FieldID name) |
| Return a field by its name.
|
|
std::vector< FBase * > & | getAllFields () |
|
template<typename T> |
T * | getField (FieldID name) |
|
bool | isAllFieldsReady () |
| Check the completeness of all required fields.
|
|
std::vector< FieldID > | getFieldAlias (FBase *data) |
|
int | getFieldAliasCount (FBase *data) |
|
void | setBlockCoord (float x, float y) |
|
float | bx () |
|
float | by () |
|
bool | findInputField (FBase *field) |
|
bool | addInputField (FBase *field) |
|
bool | removeInputField (FBase *field) |
|
std::vector< FBase * > & | getInputFields () |
|
bool | findOutputField (FBase *field) |
|
bool | addOutputField (FBase *field) |
|
bool | addToOutput (FBase *field) |
|
bool | removeOutputField (FBase *field) |
|
bool | removeFromOutput (FBase *field) |
|
std::vector< FBase * > & | getOutputFields () |
|
bool | findParameter (FBase *field) |
|
bool | addParameter (FBase *field) |
|
bool | removeParameter (FBase *field) |
|
std::vector< FBase * > & | getParameters () |
|
| Object () |
|
virtual | ~Object () |
|
ObjectId | objectId () |
|
template<typename TDataType>
class dyno::ImplicitISPH< TDataType >
This is an implementation of the Implicit Incompressible SPH (IISPH) solver based on PeriDyno. For details, refer to "Implicit Incompressible SPH" by Ihmsen et al., IEEE TVCG, 2015. The code was written by Shusen Liu, ISCAS, Sep, 2024.
- Note
- Too large a neighborhood radius may lead to instability, due to the use of second-order particle neighborhoods in the Laplacian.
Definition at line 15 of file ImplicitISPH.h.