HDK
|
#include <GAS_SubSolver.h>
Inherits SIM_Solver, and SIM_OptionsUser.
Inherited by GAS_AdaptiveViscosity, GAS_AdjustElasticity, GAS_AdjustParticleCoordinates, GAS_Advect, GAS_AdvectCL2, GAS_AdvectField2, GAS_Analysis, GAS_AttribSwap, GAS_BuildCollisionMask, GAS_BuildOccupancyMask, GAS_BuildRelationshipMask, GAS_Buoyancy, GAS_Calculate, GAS_CollisionDetect, GAS_ComputeParticleAttributes, GAS_CorrectByMarkers, GAS_Cross, GAS_Diffuse, GAS_DisturbFieldCL, GAS_DSD, GAS_EachDataSolver, GAS_Elasticity, GAS_EnforceBoundary, GAS_Error, GAS_ExternalForces, GAS_Extrapolate, GAS_Feedback, GAS_FieldToParticle, GAS_FieldVex, GAS_FilterHourglassModes, GAS_GeometryDefragment, GAS_GeometryToSDF, GAS_GeometryVex, GAS_ImpactToAttributes, GAS_IntegrateShallowWaterEquations, GAS_Integrator, GAS_Limit, GAS_LinearCombination, GAS_Lookup, GAS_MatchField, GAS_NetFetchData, GAS_NetFieldBorderExchange, GAS_NetSliceBalance, GAS_NetSliceExchange, GAS_OpenCL, GAS_ParticleCount, GAS_ParticleFluidDensityCL, GAS_ParticleFluidForcesCL, GAS_ParticleForces, GAS_ParticleMoveToIso, GAS_ParticleNeighbourUpdate, GAS_ParticlePressure, GAS_ParticleSeparate, GAS_ParticleToField, GAS_ParticleToSDF, GAS_PBDSolve, GAS_ProjectNonDivergent, GAS_ProjectNonDivergentAdaptive, GAS_ProjectNonDivergentMultigrid, GAS_ProjectNonDivergentVariational, GAS_Reduce, GAS_ReduceLocal, GAS_ReinitializeSDF, GAS_RepeatSolver, GAS_ResetInactive, GAS_ResizeField, GAS_Rest, GAS_SandForces, GAS_SDFToFog, GAS_SeedFluidParticles, GAS_SeedMarkers, GAS_SeedParticles, GAS_SeedVolume, GAS_SPHDensity, GAS_SPHForces, GAS_StrainForces, GAS_StrainIntegrate, GAS_SubStep, GAS_SurfaceSnap, GAS_SurfaceTension, GAS_SynchronizeFields, GAS_VelocityStretch, GAS_Viscosity, GAS_VorticleForces, GAS_Wavelets, HDK_Sample::GAS_NetVDBSliceExchange, HDK_Sample::SIM_GasAdd, HDK_Sample::SIM_RadialEmit, SIM_BuildCollisionMaskFromPieces, SIM_GasOpenCLEnforceBoundary, SIM_GasOpenCLMergeVDB, SIM_SopMergeField, and SIM_VolumeInstanceSource.
Classes | |
struct | RelationshipParms |
Public Types | |
enum | MIX_NAMES { MIX_COPY, MIX_ADD, MIX_SUB, MIX_MUL, MIX_DIV, MIX_MAX, MIX_MIN, MIX_AVERAGE, NUM_MIX } |
enum | TIMESCALE_NAMES { TIMESCALE_NONE, TIMESCALE_ADD, TIMESCALE_MULT, TIMESCALE_BOTH, TIMESCALE_DIVIDE, TIMESCALE_SCALEMULT, NUM_TIMESCALE } |
enum | LENGTHSCALE_NAMES { LENGTHSCALE_NONE, LENGTHSCALE_LENGTH, LENGTHSCALE_AREA, LENGTHSCALE_VOLUME, NUM_LENGTHSCALE } |
Public Types inherited from SIM_Solver | |
enum | SIM_Result { SIM_SOLVER_SUCCESS, SIM_SOLVER_REPEAT, SIM_SOLVER_SUBSTEP, SIM_SOLVER_FAIL } |
Public Member Functions | |
SIM_Result | solveObjectsSubclass (SIM_Engine &engine, SIM_ObjectArray &objects, SIM_ObjectArray &newobjects, SIM_ObjectArray &feedbacktoobjects, const SIM_Time ×tep) override |
Merely calls solve on each object. More... | |
SIM_Result | postSolveObjectsSubclass (SIM_Engine &engine, SIM_ObjectArray &objects, SIM_ObjectArray &newobjects, SIM_ObjectArray &feedbacktoobjects, const SIM_Time ×tep) override |
Merely calls postSolve on each object. More... | |
virtual bool | solveGas (SIM_Engine &engine, SIM_Object *obj, SIM_Time time, SIM_Time timestep) |
const SIM_Geometry * | getGeometry (const SIM_Object *obj, const char *name, bool silent=false) |
SIM_Geometry * | getGeometryNonConst (SIM_Object *obj, const char *name, bool silent=false) |
const GA_PointGroup * | getPointGroup (const GU_Detail *gdp, GOP_Manager &mgr, const char *parmname=GAS_NAME_PTGROUP) |
SIM_GeometryCopy * | getGeometryCopy (SIM_Object *obj, const char *name, bool silent=false) |
SIM_GeometryCopy * | getGeometryCopyByDataName (SIM_Object *obj, const char *dataname, bool silent=false) |
SIM_ScalarField * | getScalarField (SIM_Object *obj, const char *name, bool silent=false) |
SIM_VectorField * | getVectorField (SIM_Object *obj, const char *name, bool silent=false) |
SIM_MatrixField * | getMatrixField (SIM_Object *obj, const char *name, bool silent=false) |
SIM_IndexField * | getIndexField (SIM_Object *obj, const char *name, bool silent=false) |
const SIM_ScalarField * | getConstScalarField (const SIM_Object *obj, const char *name, bool silent=false) |
const SIM_VectorField * | getConstVectorField (const SIM_Object *obj, const char *name, bool silent=false) |
const SIM_MatrixField * | getConstMatrixField (const SIM_Object *obj, const char *name, bool silent=false) |
const SIM_IndexField * | getConstIndexField (const SIM_Object *obj, const char *name, bool silent=false) |
const SIM_Position * | getConstPosFromField (const SIM_Object *obj, const char *name) |
void | getWorldToGeometry (UT_DMatrix4 &xform, SIM_Object *obj, const char *geopath) |
Builds the transform mapping world -> geo. More... | |
void | getGeometryToWorld (UT_DMatrix4 &xform, SIM_Object *obj, const char *geopath) |
Builds the transform mapping geo -> world. More... | |
SIM_GeometryCopy * | getOrCreateGeometry (SIM_Object *obj, const char *name) |
SIM_ScalarField * | getOrCreateScalarField (SIM_Object *obj, const char *name) |
SIM_VectorField * | getOrCreateVectorField (SIM_Object *obj, const char *name) |
SIM_MatrixField * | getOrCreateMatrixField (SIM_Object *obj, const char *name) |
SIM_IndexField * | getOrCreateIndexField (SIM_Object *obj, const char *name) |
void | getMatchingData (SIM_DataArray &data, SIM_Object *obj, const char *name, bool silent=false) |
void | getMatchingData (SIM_DataArray &data, UT_StringArray &datanames, SIM_Object *obj, const char *name, bool silent=false) |
void | getMatchingDataByName (SIM_DataArray &data, SIM_Object *obj, const char *name, bool silent=false) |
void | getMatchingDataByName (SIM_DataArray &data, UT_StringArray &datanames, SIM_Object *obj, const char *name, bool silent=false) |
void | getMatchingConstData (SIM_ConstDataArray &data, UT_StringArray &datanames, SIM_Object *obj, const char *name, bool silent=false) |
void | getMatchingGeoCopy (SIM_DataArray &data, SIM_Object *obj, const char *name, bool silent=false) |
void | getMatchingGeoCopyByName (SIM_DataArray &data, SIM_Object *obj, const char *name, bool silent=false) |
void | matchField (SIM_ScalarField *field, const SIM_ScalarField *reffield) |
void | matchField (SIM_VectorField *field, const SIM_ScalarField *reffield) |
void | matchField (SIM_MatrixField *field, const SIM_ScalarField *reffield) |
void | matchField (SIM_IndexField *field, const SIM_ScalarField *reffield) |
void | buildRelationshipField (SIM_ScalarField *mask, SIM_VectorField *vel, SIM_IndexField *index, const SIM_ScalarField *stencil, UT_DMatrix4 masktoworld, const SIM_Object *srcobj, bool usepoint, bool usesdf, bool allownonsdf, bool negate, fpreal particlebandwidth, fpreal bandwidth, fpreal velscale=1, const UT_Vector3 &wind=UT_Vector3(0.0f)) |
bool | findReferenceBBox (const SIM_Object *, const char *parmname, const char *groupparmname, UT_Vector3 ¢er, UT_Vector3 &size, UT_DMatrix4 &xform) |
void | reportCLError (SIM_Object *obj, int err, const char *msg) const |
SYS_STATIC_FORCE_INLINE float | mixValues (MIX_NAMES mixtype, float d, float s) |
Performs the requires mixing. More... | |
void | clearForces (GU_Detail *gdp, bool cleartorque=false) const |
Zeros out the force and optionaly torque attributes. More... | |
void | clearForces (GU_Detail *gdp, const GA_PointGroup *grp, bool cleartorque) const |
THREADED_METHOD6_CONST (GAS_SubSolver, gdp->getNumPoints() > 2048, applyForces, GU_Detail *, gdp, const GA_PointGroup *, ptgrp, SIM_Time, timestep, bool, densityscale, bool, doorient, bool, updatepos) void applyForcesPartial(GU_Detail *gdp | |
bool | buildSPH (GAS_SPH &sph, const SIM_Geometry *geo) const |
bool | buildSPH (GAS_SPH &sph, const SIM_Object *obj) const |
Public Member Functions inherited from SIM_Solver | |
SIM_Result | solveObjects (SIM_Engine &engine, SIM_ObjectArray &objects, SIM_ObjectArray &newobjects, SIM_ObjectArray &feedbacktoobjects, const SIM_Time ×tep) |
SIM_Result | postSolveObjects (SIM_Engine &engine, SIM_ObjectArray &objects, SIM_ObjectArray &newobjects, SIM_ObjectArray &feedbacktoobjects, const SIM_Time ×tep) |
SIM_Result | solveRelationship (SIM_Engine &engine, SIM_Relationship &relationship, const SIM_Time ×tep) |
int | getRequestedCache () const |
void | getImpulseMassMatrix (const SIM_Object &object, const UT_Vector3 &impulseworldpos, UT_DMatrix3 &immatrix) const |
void | getPointImpulseMassMatrix (const SIM_Object &object, GA_Index ptnum, UT_DMatrix3 &immatrix) const |
SIM_PointImpulseMassMatrixResolver * | getPointImpulseMassMatrixResolver (const SIM_Object &object) const |
Builds a resolver to efficiently compute mass matrices. More... | |
fpreal | getPropertyAtPosition (const SIM_Object &object, const UT_Vector3 &worldpos, const SIM_Property &property) const |
fpreal | getPropertyAtPoint (const SIM_Object &object, GA_Index ptnum, const SIM_Property &property) const |
SIM_PropertyResolver * | getPropertyResolver (const SIM_Object &object, const SIM_Property &property) const |
Builds a resolver to efficiently compute property values. More... | |
void | getDefaultColliderLabel (const SIM_Object &object, UT_String &label) const |
Gets the default collider label for an object using this solver. More... | |
void | getDefaultCollider (const SIM_Object &object, const UT_String &colliderlabel, UT_String &collidertype, bool &colliderreverseobjectroles) const |
void | setStartTime (const SIM_Time &starttime) |
bool | isStatic (const SIM_Object *obj) const |
Public Member Functions inherited from SIM_Data | |
const UT_StringHolder & | getDataType () const |
void | initialize (const SIM_SubdataBehavior &subdatabehavior) |
void | makeEqual (const SIM_Data *source, const SIM_SubdataBehavior &subdatabehavior) |
void | setParameters (const SIM_Options &parms) |
void | interpolate (const SIM_Data *source1, const SIM_Data *source2, fpreal interp) |
int64 | getMemorySize () const |
bool | getIsAlternateRepresentation () const |
bool | saveToFile (const char *filename, UT_CompressionType compressionType) const |
bool | saveToStream (std::ostream &os, UT_CompressionType compressionType) const |
void | appendFullDataPath (const SIM_Data *subdata, bool useobjectid, UT_String &datapath) const |
bool | loadFromFile (const char *filename) |
bool | loadFromStream (UT_IStream &is, bool skiptype=false) |
bool | getIsOfType (const UT_StringRef &datatype) const |
const void * | getConstPointerToType (const UT_StringRef &datatype) const |
void * | getPointerToType (const UT_StringRef &datatype) |
int | getNumSubData () const |
Get the number of sub-data items attached to this data. More... | |
const UT_StringHolder & | getSubDataName (int index) const |
Get the name of the sub-data at a particular index location. More... | |
int | getSubDataIndex (const SIM_Data *subdata) const |
bool | buildSubDataPath (const SIM_Data *subdata, UT_String &pathto) const |
const SIM_Query & | getQueryObject () const |
SIM_Options * | getUserOptions () |
const SIM_Options * | getConstUserOptions () const |
long | getGuideParmVersion () const |
void | addGuideDep (DEP_MicroNode &src) const |
virtual bool | getGuideGeometryList (const SIM_RootData &root, const char *datapath, const SIM_Time &t, UT_Array< GU_ConstDetailHandle > &detailArray, UT_Array< UT_DMatrix4 > &xformArray) const |
GU_ConstDetailHandle | getGuideGeometry (const SIM_RootData &root, const char *datapath, UT_DMatrix4 &xform, const SIM_Time &t) const |
void | buildGuideOptions (SIM_Options &options, const SIM_Time &time) const |
SIM_Data * | getSubData (int index) |
const SIM_Data * | getConstSubData (int index) const |
SIM_Data * | getNamedSubData (const char *dataname) |
const SIM_Data * | getConstNamedSubData (const char *dataname) const |
void | filterSubData (SIM_DataArray &ncdp, UT_StringArray *names, const SIM_DataFilter &ncfilter, const char *startfrom, const SIM_DataFilter &recursefilter) |
void | filterConstSubData (SIM_ConstDataArray &dp, UT_StringArray *names, const SIM_DataFilter &filter, const char *startfrom, const SIM_DataFilter &recurseFilter) const |
SIM_Data * | getNthSubData (UT_String *name, const SIM_DataFilter &filter, int n, const char *startfrom, const SIM_DataFilter &recurseFilter) |
const SIM_Data * | getNthConstSubData (UT_String *name, const SIM_DataFilter &filter, int n, const char *startfrom, const SIM_DataFilter &recurseFilter) const |
void | forEachSubData (SIM_EachDataCallback &cb, const SIM_DataFilter &filter, const char *startfrom, const SIM_DataFilter &recurseFilter) |
void | forEachConstSubData (SIM_EachDataCallback &cb, const SIM_DataFilter &filter, const char *startfrom, const SIM_DataFilter &recurseFilter) const |
SIM_Data * | createNamedSubData (const char *dataname, const char *datatype, int creationflags, UT_String *newdatanameptr=NULL) |
SIM_Data * | getOrCreateAlternateRepresentation (const char *dataname, const char *datatype) const |
void | interpolateSubData (const SIM_Data &source1, const SIM_Data &source2, fpreal interp, const SIM_DataFilter &interpdata, const SIM_DataFilter &recurse) |
void | setNamedSubData (const char *dataname, const SIM_Data *data, int setflags) |
void | createUniqueSubDataName (const SIM_Data *subdata, UT_String &dataname) const |
void | removeNamedSubData (const char *dataname) |
Remove some existing sub-data by name. More... | |
void | removeSubData (int index) |
Remove some existing sub-data by index. More... | |
void | moveNamedSubData (const char *oldname, const char *newname) |
const UT_Guid & | getUniqueId () const |
long | getReferenceCount () const |
int | getCreatorId () const |
Get the ID of the node that created this data. More... | |
OP_Node * | getCreatorNode () const |
Use the creator ID to look up the OP_Node that created this data. More... | |
OP_Node * | getOwnerNetwork () const |
Look up the owner node of our engine to get the DOP Network pointer. More... | |
const SIM_Engine & | getEngine () const |
Get the engine that created us (from our data factory). More... | |
int | getCreatorIndex () const |
Get the output index of the creator node that generated this data. More... | |
const SIM_Time & | getCreationTime () const |
Get the creation time for this data. More... | |
bool | getIsSelected () const |
Get the selected flag for this data. More... | |
void | setIsSelected (bool selected) const |
bool | getSelectionRepresentsObject () const |
void | copyCreationInfoFrom (const SIM_Data *source) |
OP_Node & | getNodePathsRelativeTo () const |
OP_Node * | getOPNode (const char *path, bool addinterest) const |
Given a path relative to our creator node, return an OBJ_Node. More... | |
OBJ_Node * | getOBJNode (const char *path, bool addinterest) const |
Given a path relative to our creator node, return an OBJ_Node. More... | |
SOP_Node * | getSOPNode (const char *path, bool addinterest) const |
Given a path relative to our creator node, return a SOP_Node. More... | |
DOP_Node * | getDOPNode (const char *path, bool addinterest) const |
Given a path relative to our creator node, return a DOP_Node. More... | |
COP2_Node * | getCOP2Node (const char *path, bool addinterest) const |
Given a path relative to our creator node, return a COP2_Node. More... | |
CHOP_Node * | getCHOPNode (const char *path, bool addinterest) const |
Given a path relative to our creator node, return a CHOP_Node. More... | |
void | addOPInterest (OP_Node *node) const |
Adds an interest in the specified node to our engine's owner node. More... | |
void | addError (const SIM_RootData *root, int errorcode, const char *errorparm, UT_ErrorSeverity severity) const |
Adds an error to our SIM_Engine. More... | |
void | makeMemberDataUnique () |
virtual void | makeMemberDataUniqueSubclass () |
Public Member Functions inherited from SIM_OptionsUser | |
SIM_OptionsUser (SIM_Data *owner) | |
virtual | ~SIM_OptionsUser () |
void | optionChanged (const char *name) |
const SIM_Options & | getOptions () const |
Static Public Member Functions | |
static void | setGasDescription (SIM_DopDescription &descr) |
static float | applyTimeScalePow (float value, float t) |
static void | applyTimeScale (float &add, float &mul, float timestep, int timescale) |
static float | applyLengthScale (float val, float width, int scaletype) |
Static Public Member Functions inherited from SIM_Solver | |
static const char * | getPropertyAttribName (const SIM_Property &property) |
static fpreal | getPropertyAtPositionStatic (const SIM_Object &object, const UT_Vector3 &worldpos, const SIM_Property &property) |
static fpreal | getPropertyAtPointStatic (const SIM_Object &object, GA_Index ptnum, const SIM_Property &property) |
static SIM_PropertyResolver * | getPropertyResolverStatic (const SIM_Object &object, const SIM_Property &property) |
Static resolver for getting property values. More... | |
Static Public Member Functions inherited from SIM_Data | |
static bool | getDataTypeFromFile (const char *filename, UT_String &datatype) |
static bool | getDataTypeFromStream (UT_IStream &is, UT_String &datatype) |
static const void * | castConstPointerToType (const SIM_Data *data, const UT_StringRef &datatype) |
static void * | castPointerToType (SIM_Data *data, const UT_StringRef &datatype) |
Public Attributes | |
const GA_PointGroup * | ptgrp |
const GA_PointGroup SIM_Time | timestep |
const GA_PointGroup SIM_Time bool | densityscale |
const GA_PointGroup SIM_Time bool bool | doorient |
const GA_PointGroup SIM_Time bool bool bool | updatepos |
const GA_PointGroup SIM_Time bool bool bool const UT_JobInfo &info | const |
Protected Member Functions | |
GAS_SubSolver (const SIM_DataFactory *factory) | |
~GAS_SubSolver () override | |
virtual bool | solveGasSubclass (SIM_Engine &engine, SIM_Object *obj, SIM_Time time, SIM_Time timestep)=0 |
virtual bool | postSolveGasSubclass (SIM_Engine &engine, SIM_Object *obj, SIM_Time time, SIM_Time timestep) |
fpreal | getPropertyFromState (const SIM_Object &object, const SIM_Property &property) const |
Get a property value by looking at the Physical Parms of an object. More... | |
fpreal | getPropertyAtPositionSubclass (const SIM_Object &object, const UT_Vector3 &worldspacepos, const SIM_Property &property) const override |
Evaluates property at a given position. More... | |
fpreal | getPropertyAtPointSubclass (const SIM_Object &object, int ptnum, const SIM_Property &property) const override |
SIM_PropertyResolver * | getPropertyResolverSubclass (const SIM_Object &object, const SIM_Property &property) const override |
Builds a resolver for evaluating properties swiftly. More... | |
fpreal | calculateTimestep (SIM_Engine &engine, const SIM_VectorField *velocity, fpreal cflcond, UT_Vector3 *maxvel=0) const |
fpreal | calculateTimestep (GU_ConstDetailHandle gdh, fpreal cflcond, fpreal *maxspeed=0, fpreal *minradius=0) const |
THREADED_METHOD1 (GAS_SubSolver, parms.mask->shouldMultiThread(), buildRelationshipFieldInternal, const RelationshipParms &, parms) void buildRelationshipFieldInternalPartial(const RelationshipParms &parms | |
Builds a relationship field after most stuff has been setup. More... | |
Protected Member Functions inherited from SIM_Solver | |
SIM_Solver (const SIM_DataFactory *factory) | |
Basic SIM_Solver constructor. More... | |
~SIM_Solver () override | |
Basic SIM_Solver destructor. More... | |
bool | getStartTime (SIM_Time &time) |
void | clearStartTime () |
void | getSolverSubdata (SIM_SolverArray &subsolvers, UT_StringArray *subsolvernames) |
void | getConstSolverSubdata (SIM_ConstSolverArray &subsolvers, UT_StringArray *subsolvernames) const |
virtual bool | isStaticSubclass (const SIM_Object *obj) const |
Determines if this solver does nothing on the object. More... | |
virtual SIM_Result | solveRelationshipSubclass (SIM_Engine &engine, SIM_Relationship &relationship, const SIM_Time ×tep) |
virtual int | getRequestedCacheSubclass () const |
virtual void | getImpulseMassMatrixSubclass (const SIM_Object &object, const UT_Vector3 &impulseworldpos, UT_DMatrix3 &immatrix) const |
virtual void | getPointImpulseMassMatrixSubclass (const SIM_Object &object, int ptnum, UT_DMatrix3 &immatrix) const |
virtual SIM_PointImpulseMassMatrixResolver * | getPointImpulseMassMatrixResolverSubclass (const SIM_Object &object) const |
Builds a resolver for evaluating mass matrices swiftly. More... | |
virtual void | getDefaultColliderLabelSubclass (const SIM_Object &object, UT_String &label) const |
Gets the default collider label for an object using this solver. More... | |
virtual void | getDefaultColliderSubclass (const SIM_Object &object, const UT_String &colliderlabel, UT_String &collidertype, bool &colliderreverseobjectroles) const |
Protected Member Functions inherited from SIM_Data | |
SIM_Data (const SIM_DataFactory *factory) | |
virtual | ~SIM_Data () |
void | handleModification (int code=-1) |
void | setNeedsToRecalculateMemorySize () const |
void | deleteQueryObjectIfNotBuilding () const |
Deletes the query object for this data, if there is one. More... | |
void | deleteGuideObjectIfNotBuilding () const |
Delete the guide geometry for this data, if it exists. More... | |
void | initAlternateRepresentation () const |
void | setNeedsInitialization (bool needsinit) const |
Flags an alternate representation subdata as requiring initialization. More... | |
bool | getNeedsInitialization () const |
Tests whether an alternate representation requires initialization. More... | |
bool | saveOptionPacket (std::ostream &os, const char *name, const SIM_Options *opts) const |
bool | loadOptionPacket (UT_IStream &is, const char *name, SIM_Options *opts) const |
bool | getIsDoingSimplifiedSaveLoad () const |
void | initializeFromParmDefaults () |
void | setSelectionRepresentsObject (bool representsobject) |
virtual void | setNeedsInitializationSubclass (bool needsinit) const |
virtual void | initializeSubclass () |
virtual void | makeEqualSubclass (const SIM_Data *source) |
virtual void | saveSubclass (std::ostream &os) const |
virtual void | saveIOSubclass (std::ostream &os, SIM_DataThreadedIO *io) const |
virtual bool | loadSubclass (UT_IStream &is) |
virtual bool | loadIOSubclass (UT_IStream &is, SIM_DataThreadedIO *io) |
virtual SIM_Query * | createQueryObjectSubclass () const |
virtual long | getGuideParmVersionSubclass () const |
virtual SIM_Guide * | createGuideObjectSubclass () const |
virtual void | buildGuideGeometrySubclass (const SIM_RootData &root, const SIM_Options &options, const GU_DetailHandle &gdh, UT_DMatrix4 *xform, const SIM_Time &t) const |
virtual void | setParametersSubclass (const SIM_Options &parms) |
virtual void | setNamedSubDataSubclass (const char *dataname, const SIM_Data *data) |
virtual void | removeNamedSubDataSubclass (const char *dataname) |
virtual void | interpolateSubclass (const SIM_Data *source1, const SIM_Data *source2, fpreal interp) |
virtual int64 | getMemorySizeSubclass () const |
virtual void | handleModificationSubclass (int code) |
virtual bool | getIsAlternateRepresentationSubclass () const |
virtual void | initAlternateRepresentationSubclass (const SIM_Data &) |
virtual void * | getCastToType (const UT_StringRef &datatype) const |
virtual const UT_StringHolder & | getDataTypeSubclass () const |
const SIM_Data * | getAlternateRepresentationOf () const |
Protected Member Functions inherited from SIM_OptionsUser | |
SIM_Options & | getOptions () |
virtual void | optionChangedSubclass (const char *name) |
Protected Attributes | |
const UT_JobInfo & | info |
Static Protected Attributes | |
static PRM_Name | ourMixMethods [NUM_MIX+1] |
Holds the parm names for our mix methods. More... | |
static PRM_ChoiceList | ourMixMethodMenu |
static PRM_Name | ourTimeScaleMethods [NUM_TIMESCALE+1] |
static PRM_ChoiceList | ourTimeScaleMenu |
static PRM_Name | ourLengthScaleMethods [NUM_LENGTHSCALE+1] |
static PRM_ChoiceList | ourLengthScaleMenu |
Additional Inherited Members | |
Static Protected Member Functions inherited from SIM_Data | |
static const PRM_Template * | getEmptyTemplateList () |
static const SIM_DopDescription * | getEmptyDopDescription () |
A DOP description that says not to create an automatic DOP. More... | |
static void | getDataTypeSuperclasses (UT_StringArray &) |
Definition at line 70 of file GAS_SubSolver.h.
Enumerator | |
---|---|
LENGTHSCALE_NONE | |
LENGTHSCALE_LENGTH | |
LENGTHSCALE_AREA | |
LENGTHSCALE_VOLUME | |
NUM_LENGTHSCALE |
Definition at line 331 of file GAS_SubSolver.h.
Enumerator | |
---|---|
MIX_COPY | |
MIX_ADD | |
MIX_SUB | |
MIX_MUL | |
MIX_DIV | |
MIX_MAX | |
MIX_MIN | |
MIX_AVERAGE | |
NUM_MIX |
Definition at line 308 of file GAS_SubSolver.h.
Enumerator | |
---|---|
TIMESCALE_NONE | |
TIMESCALE_ADD | |
TIMESCALE_MULT | |
TIMESCALE_BOTH | |
TIMESCALE_DIVIDE | |
TIMESCALE_SCALEMULT | |
NUM_TIMESCALE |
Definition at line 320 of file GAS_SubSolver.h.
|
explicitprotected |
|
overrideprotected |
Applies the effect of the given LENGTHSCALE_NAMES to the quantitity given
|
static |
Applies the effect of TIMESCALE_NAMES to the additive and multiplicative values.
Scales value exponentially for timestep t. v' = e ^ (ln(v) * t)
void GAS_SubSolver::buildRelationshipField | ( | SIM_ScalarField * | mask, |
SIM_VectorField * | vel, | ||
SIM_IndexField * | index, | ||
const SIM_ScalarField * | stencil, | ||
UT_DMatrix4 | masktoworld, | ||
const SIM_Object * | srcobj, | ||
bool | usepoint, | ||
bool | usesdf, | ||
bool | allownonsdf, | ||
bool | negate, | ||
fpreal | particlebandwidth, | ||
fpreal | bandwidth, | ||
fpreal | velscale = 1 , |
||
const UT_Vector3 & | wind = UT_Vector3(0.0f) |
||
) |
Builds a relationship field, storing distance to each object in the destination field, along with the OBJID and object velocity in the optional index and vector fields. If a stencil is provided, the mask is built only where this field is greater than 0.5. The negate flag controls the sign of the generated fields, collision have "inside object" as negative so have a negate of true. Mask should already be initialized as we only write to new values that are more-in the relevant object. To trigger a bandwidth, initialize mask to the max dist you want to write. The given fields must all be aligned. Bandwidth is how many voxels to border particles by for our lookup. The wind parameter is the ambient wind velocity that's not written to the velocity fields. To get the world-space motion from velocity fields, the wind must thus be added. Since the collider velocities ARE in world space, the wind value must be subtracted from them to ensure that we end up with correct values down the line (when the wind is added back in).
bool GAS_SubSolver::buildSPH | ( | GAS_SPH & | sph, |
const SIM_Geometry * | geo | ||
) | const |
Builds the GAS_SPH data structure, either directly from the given SIM_Geometry or by using any SIM_PointNeighbourList attached as NeighbourList. The object version looks for Geometry/NeighbourList Returns false if failed, either due to null geometry or missing vital attributes.
bool GAS_SubSolver::buildSPH | ( | GAS_SPH & | sph, |
const SIM_Object * | obj | ||
) | const |
|
protected |
Determines the appropriate timestep dependent on the velocity field. If provided, maxvel will contain the maximum velocity on output.
|
protected |
Determines the appropriate timestep dependent on the geometry data. The size of the particles is used as the limitting factor for CFL condition. If no particle scale or velocity exists, returns infinite. If provided, maxspeed and minradius will contain the maximum speed and minimum radius on output.
Zeros out the force and optionaly torque attributes.
void GAS_SubSolver::clearForces | ( | GU_Detail * | gdp, |
const GA_PointGroup * | grp, | ||
bool | cleartorque | ||
) | const |
bool GAS_SubSolver::findReferenceBBox | ( | const SIM_Object * | , |
const char * | parmname, | ||
const char * | groupparmname, | ||
UT_Vector3 & | center, | ||
UT_Vector3 & | size, | ||
UT_DMatrix4 & | xform | ||
) |
Looks up the data referred to by the parameter (parameter name, NOT data name here!) and finds its bounding box. Handles fields and geometry. xform is set to the toworld transform of the box, the box is in local space. Returns false if no reference found. The size & center will be left alone in that case. The groupparmname will be referenced if it isn't null and it is a geometry - then it will be a point group to use for the limiting.
const SIM_IndexField* GAS_SubSolver::getConstIndexField | ( | const SIM_Object * | obj, |
const char * | name, | ||
bool | silent = false |
||
) |
const SIM_MatrixField* GAS_SubSolver::getConstMatrixField | ( | const SIM_Object * | obj, |
const char * | name, | ||
bool | silent = false |
||
) |
const SIM_Position* GAS_SubSolver::getConstPosFromField | ( | const SIM_Object * | obj, |
const char * | name | ||
) |
const SIM_ScalarField* GAS_SubSolver::getConstScalarField | ( | const SIM_Object * | obj, |
const char * | name, | ||
bool | silent = false |
||
) |
const SIM_VectorField* GAS_SubSolver::getConstVectorField | ( | const SIM_Object * | obj, |
const char * | name, | ||
bool | silent = false |
||
) |
const SIM_Geometry* GAS_SubSolver::getGeometry | ( | const SIM_Object * | obj, |
const char * | name, | ||
bool | silent = false |
||
) |
Retrieves the SIM_DATA specified by the option given by the name. Ie, look up in our options, find the data name, look up a data matching the name, return resulting data Reports message if a field is missing unless silent is set.
SIM_GeometryCopy* GAS_SubSolver::getGeometryCopy | ( | SIM_Object * | obj, |
const char * | name, | ||
bool | silent = false |
||
) |
SIM_GeometryCopy* GAS_SubSolver::getGeometryCopyByDataName | ( | SIM_Object * | obj, |
const char * | dataname, | ||
bool | silent = false |
||
) |
SIM_Geometry* GAS_SubSolver::getGeometryNonConst | ( | SIM_Object * | obj, |
const char * | name, | ||
bool | silent = false |
||
) |
void GAS_SubSolver::getGeometryToWorld | ( | UT_DMatrix4 & | xform, |
SIM_Object * | obj, | ||
const char * | geopath | ||
) |
Builds the transform mapping geo -> world.
SIM_IndexField* GAS_SubSolver::getIndexField | ( | SIM_Object * | obj, |
const char * | name, | ||
bool | silent = false |
||
) |
void GAS_SubSolver::getMatchingConstData | ( | SIM_ConstDataArray & | data, |
UT_StringArray & | datanames, | ||
SIM_Object * | obj, | ||
const char * | name, | ||
bool | silent = false |
||
) |
void GAS_SubSolver::getMatchingData | ( | SIM_DataArray & | data, |
SIM_Object * | obj, | ||
const char * | name, | ||
bool | silent = false |
||
) |
Retrieves all of the SIM_DATAs that match the pattern stored in the option given by name.
void GAS_SubSolver::getMatchingData | ( | SIM_DataArray & | data, |
UT_StringArray & | datanames, | ||
SIM_Object * | obj, | ||
const char * | name, | ||
bool | silent = false |
||
) |
void GAS_SubSolver::getMatchingDataByName | ( | SIM_DataArray & | data, |
SIM_Object * | obj, | ||
const char * | name, | ||
bool | silent = false |
||
) |
void GAS_SubSolver::getMatchingDataByName | ( | SIM_DataArray & | data, |
UT_StringArray & | datanames, | ||
SIM_Object * | obj, | ||
const char * | name, | ||
bool | silent = false |
||
) |
void GAS_SubSolver::getMatchingGeoCopy | ( | SIM_DataArray & | data, |
SIM_Object * | obj, | ||
const char * | name, | ||
bool | silent = false |
||
) |
Fetches matching data, but promotes any SIM_Geometry into SIM_GeometryCopy
void GAS_SubSolver::getMatchingGeoCopyByName | ( | SIM_DataArray & | data, |
SIM_Object * | obj, | ||
const char * | name, | ||
bool | silent = false |
||
) |
SIM_MatrixField* GAS_SubSolver::getMatrixField | ( | SIM_Object * | obj, |
const char * | name, | ||
bool | silent = false |
||
) |
SIM_GeometryCopy* GAS_SubSolver::getOrCreateGeometry | ( | SIM_Object * | obj, |
const char * | name | ||
) |
Returns the matching SIM_Data. If it doesn't exist, creates a new one. The resulting data is not guaranteed to exist - a bad name could end up prohibitting creation.
SIM_IndexField* GAS_SubSolver::getOrCreateIndexField | ( | SIM_Object * | obj, |
const char * | name | ||
) |
SIM_MatrixField* GAS_SubSolver::getOrCreateMatrixField | ( | SIM_Object * | obj, |
const char * | name | ||
) |
SIM_ScalarField* GAS_SubSolver::getOrCreateScalarField | ( | SIM_Object * | obj, |
const char * | name | ||
) |
SIM_VectorField* GAS_SubSolver::getOrCreateVectorField | ( | SIM_Object * | obj, |
const char * | name | ||
) |
const GA_PointGroup* GAS_SubSolver::getPointGroup | ( | const GU_Detail * | gdp, |
GOP_Manager & | mgr, | ||
const char * | parmname = GAS_NAME_PTGROUP |
||
) |
|
overrideprotectedvirtual |
Gets the value of some physical property for the supplied object at a given point on the object's geometry.
Reimplemented from SIM_Solver.
|
overrideprotectedvirtual |
Evaluates property at a given position.
Reimplemented from SIM_Solver.
|
protected |
Get a property value by looking at the Physical Parms of an object.
|
overrideprotectedvirtual |
Builds a resolver for evaluating properties swiftly.
Reimplemented from SIM_Solver.
SIM_ScalarField* GAS_SubSolver::getScalarField | ( | SIM_Object * | obj, |
const char * | name, | ||
bool | silent = false |
||
) |
SIM_VectorField* GAS_SubSolver::getVectorField | ( | SIM_Object * | obj, |
const char * | name, | ||
bool | silent = false |
||
) |
void GAS_SubSolver::getWorldToGeometry | ( | UT_DMatrix4 & | xform, |
SIM_Object * | obj, | ||
const char * | geopath | ||
) |
Builds the transform mapping world -> geo.
void GAS_SubSolver::matchField | ( | SIM_ScalarField * | field, |
const SIM_ScalarField * | reffield | ||
) |
Makes the given field match the reference field in terms of bounding box & voxel count. A no-op if reffield or field is null.
void GAS_SubSolver::matchField | ( | SIM_VectorField * | field, |
const SIM_ScalarField * | reffield | ||
) |
void GAS_SubSolver::matchField | ( | SIM_MatrixField * | field, |
const SIM_ScalarField * | reffield | ||
) |
void GAS_SubSolver::matchField | ( | SIM_IndexField * | field, |
const SIM_ScalarField * | reffield | ||
) |
|
inline |
Performs the requires mixing.
Definition at line 341 of file GAS_SubSolver.h.
|
inlineprotectedvirtual |
Reimplemented in GAS_ParticleForces.
Definition at line 233 of file GAS_SubSolver.h.
|
overridevirtual |
Merely calls postSolve on each object.
Reimplemented from SIM_Solver.
void GAS_SubSolver::reportCLError | ( | SIM_Object * | obj, |
int | err, | ||
const char * | msg | ||
) | const |
|
static |
Adds the flags to the description suitable for microsolvers. pure apply data, bypass data is a multisolver, and unique datanames.
|
virtual |
Applies this subsolver for a single timestep. Returns true on success
|
protectedpure virtual |
Applies this subsolver for a single timestep. Returns true on success
Implemented in SIM_VolumeInstanceSource, GAS_Calculate, GAS_AdvectField2, GAS_AdaptiveViscosity, GAS_Integrator, GAS_SeedMarkers, SIM_SopMergeField, GAS_OpenCL, SIM_GasOpenCLEnforceBoundary, GAS_SeedFluidParticles, GAS_GeometryVex, SIM_GasOpenCLMergeVDB, GAS_ProjectNonDivergentAdaptive, GAS_ParticleToField, GAS_ProjectNonDivergentVariational, GAS_ReduceLocal, GAS_Reduce, GAS_ResizeField, GAS_ParticleForces, GAS_CollisionDetect, GAS_SeedVolume, HDK_Sample::SIM_RadialEmit, GAS_Advect, GAS_Analysis, GAS_EnforceBoundary, GAS_FieldVex, GAS_Diffuse, GAS_Viscosity, HDK_Sample::SIM_GasAdd, GAS_ExternalForces, GAS_FieldToParticle, GAS_VelocityStretch, HDK_Sample::GAS_NetVDBSliceExchange, GAS_IntegrateShallowWaterEquations, GAS_NetSliceExchange, GAS_Limit, GAS_LinearCombination, GAS_BuildRelationshipMask, GAS_Elasticity, GAS_AdjustElasticity, GAS_BuildCollisionMask, GAS_Wavelets, GAS_ParticlePressure, GAS_SubStep, GAS_BuildOccupancyMask, GAS_DSD, GAS_DisturbFieldCL, GAS_ImpactToAttributes, GAS_Extrapolate, GAS_ProjectNonDivergent, SIM_BuildCollisionMaskFromPieces, GAS_ReinitializeSDF, GAS_VorticleForces, GAS_NetSliceBalance, GAS_ParticleFluidForcesCL, GAS_GeometryToSDF, GAS_NetFetchData, GAS_ParticleMoveToIso, GAS_ParticleToSDF, GAS_MatchField, GAS_Buoyancy, GAS_Cross, GAS_RepeatSolver, GAS_Rest, GAS_ParticleSeparate, GAS_PBDSolve, GAS_ProjectNonDivergentMultigrid, GAS_SandForces, GAS_SPHDensity, GAS_SPHForces, GAS_StrainIntegrate, GAS_SurfaceTension, GAS_AttribSwap, GAS_ComputeParticleAttributes, GAS_StrainForces, GAS_Lookup, GAS_NetFieldBorderExchange, GAS_EachDataSolver, GAS_Feedback, GAS_GeometryDefragment, GAS_SeedParticles, GAS_SurfaceSnap, GAS_AdjustParticleCoordinates, GAS_CorrectByMarkers, GAS_FilterHourglassModes, GAS_SDFToFog, GAS_ParticleCount, GAS_AdvectCL2, GAS_ParticleFluidDensityCL, GAS_ParticleNeighbourUpdate, GAS_ResetInactive, GAS_SynchronizeFields, and GAS_Error.
|
overridevirtual |
|
protected |
Builds a relationship field after most stuff has been setup.
GAS_SubSolver::THREADED_METHOD6_CONST | ( | GAS_SubSolver | , |
gdp-> | getNumPoints(), | ||
2048 | , | ||
applyForces | , | ||
GU_Detail * | , | ||
gdp | , | ||
const GA_PointGroup * | , | ||
ptgrp | , | ||
SIM_Time | , | ||
timestep | , | ||
bool | , | ||
densityscale | , | ||
bool | , | ||
doorient | , | ||
bool | , | ||
updatepos | |||
) |
Integrates the force into the velocity/angvel. Optionally also adjusts the position by the effect of the acceleration (not the effect of the velocity!)
const GA_PointGroup SIM_Time bool bool bool const UT_JobInfo& info GAS_SubSolver::const |
Definition at line 411 of file GAS_SubSolver.h.
const GA_PointGroup SIM_Time bool GAS_SubSolver::densityscale |
Definition at line 411 of file GAS_SubSolver.h.
const GA_PointGroup SIM_Time bool bool GAS_SubSolver::doorient |
Definition at line 411 of file GAS_SubSolver.h.
|
protected |
Definition at line 305 of file GAS_SubSolver.h.
|
staticprotected |
Definition at line 438 of file GAS_SubSolver.h.
|
staticprotected |
Definition at line 437 of file GAS_SubSolver.h.
|
staticprotected |
Definition at line 432 of file GAS_SubSolver.h.
Holds the parm names for our mix methods.
Definition at line 431 of file GAS_SubSolver.h.
|
staticprotected |
Definition at line 435 of file GAS_SubSolver.h.
|
staticprotected |
Definition at line 434 of file GAS_SubSolver.h.
const GA_PointGroup* GAS_SubSolver::ptgrp |
Definition at line 411 of file GAS_SubSolver.h.
const GA_PointGroup SIM_Time GAS_SubSolver::timestep |
Definition at line 411 of file GAS_SubSolver.h.
const GA_PointGroup SIM_Time bool bool bool GAS_SubSolver::updatepos |
Definition at line 411 of file GAS_SubSolver.h.