This reference is generated from the signatures and docstrings exposed by
the installed deme extension.
.. py:function:: DEMBoxGridSampler
.. code-block:: text
DEMBoxGridSampler(BoxCenter: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], HalfDims: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], GridSizeX: typing.SupportsFloat | typing.SupportsIndex, GridSizeY: typing.SupportsFloat | typing.SupportsIndex = -1.0, GridSizeZ: typing.SupportsFloat | typing.SupportsIndex = -1.0) -> list[float3]
Return regularly spaced points inside a box. Negative Y or Z spacing reuses the X spacing.
.. py:function:: DEMBoxHCPSampler
.. code-block:: text
DEMBoxHCPSampler(BoxCenter: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], HalfDims: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], separation: typing.SupportsFloat | typing.SupportsIndex) -> list[float3]
Return hexagonally close-packed points inside a box.
.. py:function:: DEMCylSurfSampler
.. code-block:: text
DEMCylSurfSampler(CylCenter: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], CylAxis: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], CylRad: typing.SupportsFloat | typing.SupportsIndex, CylHeight: typing.SupportsFloat | typing.SupportsIndex, ParticleRad: typing.SupportsFloat | typing.SupportsIndex, spacing: typing.SupportsFloat | typing.SupportsIndex = 1.2) -> list[list[float]]
Return points on a cylindrical surface. ``spacing`` scales the nominal particle-diameter separation.
.. py:function:: FrameTransformGlobalToLocal
.. code-block:: text
FrameTransformGlobalToLocal(arg0: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], arg1: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], arg2: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> list[float]
Translating the inverse of the provided vec then applying a local inverse rotation of the provided rot_Q, then return the result.
.. py:function:: FrameTransformLocalToGlobal
.. code-block:: text
FrameTransformLocalToGlobal(arg0: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], arg1: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], arg2: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> list[float]
Apply a local rotation then a translation, then return the result.
.. py:function:: GetDEMEDataFile
.. code-block:: text
GetDEMEDataFile(relative_path: str) -> str
Resolve a path relative to DEME's installed data directory.
.. py:class:: DEMSolver
.. code-block:: text
Own a DEM simulation and its dynamic and kinematic CUDA workers.
Configure materials, geometry, particles, solver options, and trackers before
calling ``Initialize``. Device placement is fixed at construction. Keep this
object alive while using any solver-owned material, template, tracker, or
inspector handle.
.. py:method:: DEMSolver.__init__
.. code-block:: text
__init__(*args, **kwargs)
Overloaded function.
1. __init__(self: deme._deme.DEMSolver, nGPUs: typing.SupportsInt | typing.SupportsIndex = 2) -> None
Construct a solver using one or two logical CUDA devices.
With one GPU, both workers use device 0. With two requested GPUs and at least
two visible devices, the dynamic worker uses device 0 and the kinematic worker
uses device 1. If only one device is visible, both workers use device 0 and a
warning is emitted. Only 1 and 2 are valid values.
2. __init__(self: deme._deme.DEMSolver, device_ids: collections.abc.Sequence[typing.SupportsInt | typing.SupportsIndex]) -> None
Construct a solver on explicit logical CUDA device IDs.
One ID places both workers on that device. For two IDs, the first selects the
dynamic worker and the second selects the kinematic worker. Repeated IDs are
valid. IDs use the numbering visible to this process, including the effects of
``CUDA_VISIBLE_DEVICES``.
.. py:method:: DEMSolver.AddBCPlane
.. code-block:: text
AddBCPlane(self: deme._deme.DEMSolver, arg0: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], arg1: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], arg2: deme::DEMMaterial) -> deme::DEMExternObj
Add an analytical plane to the simulation.
.. py:method:: DEMSolver.AddClumps
.. code-block:: text
AddClumps(*args, **kwargs)
Overloaded function.
1. AddClumps(self: deme._deme.DEMSolver, arg0: deme::DEMClumpBatch) -> deme::DEMClumpBatch
Load input clumps (topology types and initial locations) on a per-pair basis. Note that the initial location means the location of the clumps' CoM coordinates in the global frame.
2. AddClumps(self: deme._deme.DEMSolver, arg0: deme::DEMClumpTemplate, arg1: collections.abc.Sequence[collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]]) -> deme::DEMClumpBatch
Load input clumps (topology types and initial locations) on a per-pair basis. Note that the initial location means the location of the clumps' CoM coordinates in the global frame.
3. AddClumps(self: deme._deme.DEMSolver, arg0: collections.abc.Sequence[deme::DEMClumpTemplate], arg1: collections.abc.Sequence[collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]]) -> deme::DEMClumpBatch
Load input clumps (topology types and initial locations) on a per-pair basis. Note that the initial location means the location of the clumps' CoM coordinates in the global frame.
.. py:method:: DEMSolver.AddCombinedFromTemplate
.. code-block:: text
AddCombinedFromTemplate(*args, **kwargs)
Overloaded function.
1. AddCombinedFromTemplate(self: deme._deme.DEMSolver, combined_template: deme::DEMCombinedTemplate, init_pos: collections.abc.Sequence[float3], init_oriQ: collections.abc.Sequence[float4] = []) -> deme::DEMCombinedInstances
Instantiate a combined template at one or more user-specified global poses (batch).
2. AddCombinedFromTemplate(self: deme._deme.DEMSolver, combined_template: deme::DEMCombinedTemplate, init_pos: float3 = (0.0, 0.0, 0.0), init_oriQ: float4 = (0.0, 0.0, 0.0, 1.0)) -> deme::DEMCombinedInstances
Instantiate a combined template at a single user-specified global pose.
.. py:method:: DEMSolver.AddExternalObject
.. code-block:: text
AddExternalObject(self: deme._deme.DEMSolver) -> deme::DEMExternObj
Add an analytical object to the simulation system.
.. py:method:: DEMSolver.AddFamilyPrescribedAcc
.. code-block:: text
AddFamilyPrescribedAcc(self: deme._deme.DEMSolver, ID: typing.SupportsInt | typing.SupportsIndex, X: str, Y: str, Z: str, pre: str = 'none') -> None
The entities in this family will always experienced an extra acceleration defined using this method.
.. py:method:: DEMSolver.AddFamilyPrescribedAngAcc
.. code-block:: text
AddFamilyPrescribedAngAcc(self: deme._deme.DEMSolver, ID: typing.SupportsInt | typing.SupportsIndex, X: str, Y: str, Z: str, pre: str = 'none') -> None
The entities in this family will always experienced an extra angular acceleration defined using this method.
.. py:method:: DEMSolver.AddKernelInclude
.. code-block:: text
AddKernelInclude(self: deme._deme.DEMSolver, arg0: str) -> None
Add a library that the kernels will be compiled with (so that the user can use the provided methods in their customized code, like force model).
.. py:method:: DEMSolver.AddMeshFromTemplate
.. code-block:: text
AddMeshFromTemplate(self: deme._deme.DEMSolver, mesh_template: deme::DEMMesh, init_pos: float3 = (0.0, 0.0, 0.0)) -> deme::DEMMesh
Instantiate a mesh from a cached template at the requested initial position.
.. py:method:: DEMSolver.AddOwnerNextStepAcc
.. code-block:: text
AddOwnerNextStepAcc(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: collections.abc.Sequence[float3]) -> None
Add an extra acceleration to a owner for the next time step.
.. py:method:: DEMSolver.AddOwnerNextStepAngAcc
.. code-block:: text
AddOwnerNextStepAngAcc(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: collections.abc.Sequence[float3]) -> None
Add an extra angular acceleration to a owner for the next time step.
.. py:method:: DEMSolver.AddShellMesh
.. code-block:: text
AddShellMesh(self: deme._deme.DEMSolver, mesh: deme::DEMMesh, shell_thickness: typing.SupportsFloat | typing.SupportsIndex) -> deme::DEMMesh
Load a finite-thickness shell mesh from a user-constructed mesh object.
.. py:method:: DEMSolver.AddWavefrontMeshObject
.. code-block:: text
AddWavefrontMeshObject(*args, **kwargs)
Overloaded function.
1. AddWavefrontMeshObject(self: deme._deme.DEMSolver, filename: str, mat: deme::DEMMaterial, load_normals: bool = True, load_uv: bool = False) -> deme::DEMMesh
Load a mesh-represented object.
2. AddWavefrontMeshObject(self: deme._deme.DEMSolver, arg0: deme::DEMMesh) -> deme::DEMMesh
Load a mesh-represented object.
3. AddWavefrontMeshObject(self: deme._deme.DEMSolver, filename: str, load_normals: bool = True, load_uv: bool = False) -> deme::DEMMesh
Load a mesh-represented object.
.. py:method:: DEMSolver.AddWavefrontShellObject
.. code-block:: text
AddWavefrontShellObject(*args, **kwargs)
Overloaded function.
1. AddWavefrontShellObject(self: deme._deme.DEMSolver, filename: str, mat: deme::DEMMaterial, shell_thickness: typing.SupportsFloat | typing.SupportsIndex, load_normals: bool = True, load_uv: bool = False) -> deme::DEMMesh
Load a finite-thickness shell mesh from a mesh file.
2. AddWavefrontShellObject(self: deme._deme.DEMSolver, filename: str, shell_thickness: typing.SupportsFloat | typing.SupportsIndex, load_normals: bool = True, load_uv: bool = False) -> deme::DEMMesh
Load a finite-thickness shell mesh from a mesh file without assigning material immediately.
.. py:method:: DEMSolver.ChangeClumpFamily
.. code-block:: text
ChangeClumpFamily(self: deme._deme.DEMSolver, fam_num: typing.SupportsInt | typing.SupportsIndex, X: tuple[typing.SupportsFloat | typing.SupportsIndex, typing.SupportsFloat | typing.SupportsIndex] = (-1000000000000000.0, 1000000000000000.0), Y: tuple[typing.SupportsFloat | typing.SupportsIndex, typing.SupportsFloat | typing.SupportsIndex] = (-1000000000000000.0, 1000000000000000.0), Z: tuple[typing.SupportsFloat | typing.SupportsIndex, typing.SupportsFloat | typing.SupportsIndex] = (-1000000000000000.0, 1000000000000000.0), orig_fam: collections.abc.Set[typing.SupportsInt | typing.SupportsIndex] = set()) -> int
Change the family number for the clumps in a box region to the specified value.
.. py:method:: DEMSolver.ChangeFamily
.. code-block:: text
ChangeFamily(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: typing.SupportsInt | typing.SupportsIndex) -> None
Change all entities with family number ID_from to have a new number ID_to, when the condition defined by the string is satisfied by the entities in question. This should be called before initialization, and will be baked into the solver, so the conditions will be checked and changes applied every time step.
.. py:method:: DEMSolver.ChangeFamilyWhen
.. code-block:: text
ChangeFamilyWhen(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: typing.SupportsInt | typing.SupportsIndex, arg2: str) -> None
Change all entities with family number ID_from to have a new number ID_to, when the condition defined by the string is satisfied by the entities in question. This should be called before initialization, and will be baked into the solver, so the conditions will be checked and changes applied every time step.
.. py:method:: DEMSolver.ClearCache
.. code-block:: text
ClearCache(self: deme._deme.DEMSolver) -> None
Remove host-side cached vectors (so you can re-define them, and then re-initialize system).
.. py:method:: DEMSolver.ClearThreadCollaborationStats
.. code-block:: text
ClearThreadCollaborationStats(self: deme._deme.DEMSolver) -> None
Reset the collaboration stats between dT and kT back to the initial value (0). You should call this if you want to start over and re-inspect the stats of the new run; otherwise, it is generally not needed, you can go ahead and destroy DEMSolver.
.. py:method:: DEMSolver.ClearTimingStats
.. code-block:: text
ClearTimingStats(self: deme._deme.DEMSolver) -> None
Reset the recordings of the wall time and percentages of wall time spend on various solver tasks.
.. py:method:: DEMSolver.CorrectFamilyAngVel
.. code-block:: text
CorrectFamilyAngVel(self: deme._deme.DEMSolver, ID: typing.SupportsInt | typing.SupportsIndex, X: str, Y: str, Z: str, pre: str = 'none') -> None
The entities in this family will always experience an added angular-velocity correction defined using this method. At the same time, they are still subject to the `simulation physics'.
.. py:method:: DEMSolver.CorrectFamilyLinVel
.. code-block:: text
CorrectFamilyLinVel(self: deme._deme.DEMSolver, ID: typing.SupportsInt | typing.SupportsIndex, X: str, Y: str, Z: str, pre: str = 'none') -> None
The entities in this family will always experience an added linear-velocity correction defined using this method. At the same time, they are still subject to the `simulation physics'.
.. py:method:: DEMSolver.CorrectFamilyPosition
.. code-block:: text
CorrectFamilyPosition(self: deme._deme.DEMSolver, ID: typing.SupportsInt | typing.SupportsIndex, X: str, Y: str, Z: str, pre: str = 'none') -> None
The entities in this family will always experience an added positional correction defined using this method. At the same time, they are still subject to the `simulation physics'.
.. py:method:: DEMSolver.CorrectFamilyQuaternion
.. code-block:: text
CorrectFamilyQuaternion(self: deme._deme.DEMSolver, ID: typing.SupportsInt | typing.SupportsIndex, q_formula: str) -> None
The entities in this family will always experience an added quaternion correction defined using this method. At the same time, they are still subject to the `simulation physics'.
.. py:method:: DEMSolver.CreateInspector
.. code-block:: text
CreateInspector(*args, **kwargs)
Overloaded function.
1. CreateInspector(self: deme._deme.DEMSolver, quantity: str = 'clump_max_z') -> deme._deme.DEMInspector
Create a inspector object that can help query some statistical info of the clumps in the simulation.
2. CreateInspector(self: deme._deme.DEMSolver, arg0: str, arg1: str) -> deme._deme.DEMInspector
Create a inspector object that can help query some statistical info of the clumps in the simulation.
.. py:method:: DEMSolver.DefineContactForceModel
.. code-block:: text
DefineContactForceModel(self: deme._deme.DEMSolver, arg0: str) -> deme._deme.DEMForceModel
Define a custom contact force model by a string. Returns a pointer to the force model in use.
.. py:method:: DEMSolver.DisableAdaptiveBinSize
.. code-block:: text
DisableAdaptiveBinSize(self: deme._deme.DEMSolver) -> None
Disable the use of adaptive bin size (always use initial size)
.. py:method:: DEMSolver.DisableAdaptiveUpdateFreq
.. code-block:: text
DisableAdaptiveUpdateFreq(self: deme._deme.DEMSolver) -> None
Disable the use of adaptive max update step count (always use initial update frequency)
.. py:method:: DEMSolver.DisableAllMeshWearModels
.. code-block:: text
DisableAllMeshWearModels(self: deme._deme.DEMSolver) -> None
Disable all active mesh wear models.
.. py:method:: DEMSolver.DisableContactBetweenFamilies
.. code-block:: text
DisableContactBetweenFamilies(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: typing.SupportsInt | typing.SupportsIndex) -> None
Instruct the solver that the 2 input families should not have contacts (a.k.a. ignored, if such a pair is encountered in contact detection). These 2 families can be the same (which means no contact within members of that family).
.. py:method:: DEMSolver.DisableFamilyOutput
.. code-block:: text
DisableFamilyOutput(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Prevent entites associated with this family to be outputted to files.
.. py:method:: DEMSolver.DisableJitifyClumpTemplates
.. code-block:: text
DisableJitifyClumpTemplates(self: deme._deme.DEMSolver) -> None
Disable jitification of clump templates (use flattened arrays instead).
.. py:method:: DEMSolver.DisableJitifyMassProperties
.. code-block:: text
DisableJitifyMassProperties(self: deme._deme.DEMSolver) -> None
Disable jitification of mass properties (use flattened arrays instead).
.. py:method:: DEMSolver.DisableMeshWearModel
.. code-block:: text
DisableMeshWearModel(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Disable mesh wear model for one owner.
.. py:method:: DEMSolver.DisableTrianglePVTracking
.. code-block:: text
DisableTrianglePVTracking(self: deme._deme.DEMSolver) -> None
Disable per-triangle P/V/PxV tracking and clear tracking state.
.. py:method:: DEMSolver.DoDynamics
.. code-block:: text
DoDynamics(self: deme._deme.DEMSolver, duration: typing.SupportsFloat | typing.SupportsIndex) -> None
Advance by ``duration`` seconds without forcing the dynamic and kinematic workers to synchronize at the call boundary. This supports short calls and co-simulation; synchronize before immediately reading state.
.. py:method:: DEMSolver.DoDynamicsThenSync
.. code-block:: text
DoDynamicsThenSync(self: deme._deme.DEMSolver, duration: typing.SupportsFloat | typing.SupportsIndex) -> None
Advance by ``duration`` seconds, then synchronize the dynamic and kinematic workers. Use this before immediately querying or modifying runtime state.
.. py:method:: DEMSolver.DoStepDynamics
.. code-block:: text
DoStepDynamics(self: deme._deme.DEMSolver) -> None
Advance one current timestep without forcing a final dynamic/kinematic worker synchronization.
.. py:method:: DEMSolver.Duplicate
.. code-block:: text
Duplicate(*args, **kwargs)
Overloaded function.
1. Duplicate(self: deme._deme.DEMSolver, arg0: deme::DEMMaterial) -> deme::DEMMaterial
Duplicate a material that is loaded into the system.
2. Duplicate(self: deme._deme.DEMSolver, arg0: deme::DEMClumpTemplate) -> deme::DEMClumpTemplate
Duplicate a clump template that is loaded into the system.
3. Duplicate(self: deme._deme.DEMSolver, arg0: deme::DEMClumpBatch) -> deme::DEMClumpBatch
Duplicate a batch of clumps that is loaded into the system.
.. py:method:: DEMSolver.EnableContactBetweenFamilies
.. code-block:: text
EnableContactBetweenFamilies(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: typing.SupportsInt | typing.SupportsIndex) -> None
Re-enable contact between 2 families after the system is initialized.
.. py:method:: DEMSolver.EnableContactWildcardOutput
.. code-block:: text
EnableContactWildcardOutput(self: deme._deme.DEMSolver, enable: bool = True) -> None
Enable or disable contact wildcard output.
.. py:method:: DEMSolver.EnableMeshPatchColorOutput
.. code-block:: text
EnableMeshPatchColorOutput(self: deme._deme.DEMSolver, enable: bool = True) -> None
Enable or disable patch color metadata in PLY mesh output.
.. py:method:: DEMSolver.EnableMeshWearModel
.. code-block:: text
EnableMeshWearModel(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, wear_rate: typing.SupportsFloat | typing.SupportsIndex, update_interval: typing.SupportsFloat | typing.SupportsIndex, start_time: typing.SupportsFloat | typing.SupportsIndex = 0.0, end_time: typing.SupportsFloat | typing.SupportsIndex = -1.0, normal_sign: typing.SupportsFloat | typing.SupportsIndex = -1.0) -> None
Enable a mesh wear model driven by per-triangle P*V.
.. py:method:: DEMSolver.EnableOwnerWildcardOutput
.. code-block:: text
EnableOwnerWildcardOutput(self: deme._deme.DEMSolver, enable: bool = True) -> None
Enable or disable owner wildcard output.
.. py:method:: DEMSolver.EnsureKernelErrMsgLineNum
.. code-block:: text
EnsureKernelErrMsgLineNum(self: deme._deme.DEMSolver, flag: bool = True) -> None
If true, each jitification string substitution will do a one-liner to one-liner replacement, so that if the kernel compilation fails, the error meessage line number will reflex the actual spot where that happens (instead of some random number).
.. py:method:: DEMSolver.FlushMeshWearModels
.. code-block:: text
FlushMeshWearModels(self: deme._deme.DEMSolver) -> None
Force-apply any pending wear deformation immediately.
.. py:method:: DEMSolver.GetAllOwnerWildcardValue
.. code-block:: text
GetAllOwnerWildcardValue(self: deme._deme.DEMSolver, arg0: str) -> list[float]
Get the owner wildcard's values of all entities.
.. py:method:: DEMSolver.GetAvgSphContacts
.. code-block:: text
GetAvgSphContacts(self: deme._deme.DEMSolver) -> float
Get the current number of contacts each sphere has
.. py:method:: DEMSolver.GetBinNum
.. code-block:: text
GetBinNum(self: deme._deme.DEMSolver) -> int
Get the current number of bins (for contact detection). Must be called from synchronized stance.
.. py:method:: DEMSolver.GetBinSize
.. code-block:: text
GetBinSize(self: deme._deme.DEMSolver) -> float
Get the current bin (for contact detection) size. Must be called from synchronized stance.
.. py:method:: DEMSolver.GetCachedMesh
.. code-block:: text
GetCachedMesh(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> deme::DEMMesh
Get a handle for the mesh this tracker is tracking.
.. py:method:: DEMSolver.GetClumpContacts
.. code-block:: text
GetClumpContacts(*args, **kwargs)
Overloaded function.
1. GetClumpContacts(self: deme._deme.DEMSolver) -> list[tuple[int, int]]
Get all clump--clump contact ID pairs in the simulation system. Note all GetContact-like methods reports potential contacts (not necessarily confirmed contacts), meaning they are similar to what WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.
2. GetClumpContacts(self: deme._deme.DEMSolver, arg0: collections.abc.Set[typing.SupportsInt | typing.SupportsIndex]) -> list[tuple[int, int]]
Get all clump--clump contact ID pairs in the simulation system. Note all GetContact-like methods reports potential contacts (not necessarily confirmed contacts), meaning they are similar to what WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does. Use the argument to include only these families in the output.
3. GetClumpContacts(self: deme._deme.DEMSolver, arg0: collections.abc.Sequence[tuple[typing.SupportsInt | typing.SupportsIndex, typing.SupportsInt | typing.SupportsIndex]]) -> list[tuple[int, int]]
Get all clump--clump contact ID pairs in the simulation system. Note all GetContact-like methods reports potential contacts (not necessarily confirmed contacts), meaning they are similar to what WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.
.. py:method:: DEMSolver.GetClumpPositionsHandover
.. code-block:: text
GetClumpPositionsHandover(self: deme._deme.DEMSolver) -> list[float3]
Get all clump-owner center positions ordered by owner ID.
.. py:method:: DEMSolver.GetCombinedInstanceInfo
.. code-block:: text
GetCombinedInstanceInfo(self: deme._deme.DEMSolver, combined_instance_id: typing.SupportsInt | typing.SupportsIndex) -> tuple[bool, int, list[int], list[float3], list[float4]]
Query combined-instance metadata; returns (ok, master_owner_id, member_owner_ids, member_rel_pos, member_rel_oriQ).
.. py:method:: DEMSolver.GetContactDetailedInfo
.. code-block:: text
GetContactDetailedInfo(self: deme._deme.DEMSolver, force_thres: typing.SupportsFloat | typing.SupportsIndex = -1.0) -> deme._deme.ContactInfoContainer
Get all contact pairs' detailed information (actual content based on the setting with SetContactOutputContent; default are owner IDs, contact point location, contact force, and associated wildcard values) in the simulation system. Note all GetContact-like methods reports potential contacts (not necessarily confirmed contacts), meaning they are similar to what WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.
.. py:method:: DEMSolver.GetContactForceModel
.. code-block:: text
GetContactForceModel(self: deme._deme.DEMSolver) -> deme._deme.DEMForceModel
Get the current force model
.. py:method:: DEMSolver.GetContacts
.. code-block:: text
GetContacts(*args, **kwargs)
Overloaded function.
1. GetContacts(self: deme._deme.DEMSolver) -> list[tuple[int, int]]
Get all contact ID pairs in the simulation system. Note all GetContact-like methods reports potential contacts (not necessarily confirmed contacts), meaning they are similar to what WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.
2. GetContacts(self: deme._deme.DEMSolver, arg0: collections.abc.Set[typing.SupportsInt | typing.SupportsIndex]) -> list[tuple[int, int]]
Get all contact ID pairs in the simulation system. Note all GetContact-like methods reports potential contacts (not necessarily confirmed contacts), meaning they are similar to what WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does. Use the argument to include only these families in the output.
3. GetContacts(self: deme._deme.DEMSolver, arg0: collections.abc.Sequence[tuple[typing.SupportsInt | typing.SupportsIndex, typing.SupportsInt | typing.SupportsIndex]]) -> list[tuple[int, int]]
Get all contact ID pairs in the simulation system. Note all GetContact-like methods reports potential contacts (not necessarily confirmed contacts), meaning they are similar to what WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.
.. py:method:: DEMSolver.GetCudaDebugSync
.. code-block:: text
GetCudaDebugSync(self: deme._deme.DEMSolver) -> bool
Return whether process-wide CUDA debug synchronization is enabled.
.. py:method:: DEMSolver.GetDeviceMemUsageDynamic
.. code-block:: text
GetDeviceMemUsageDynamic(self: deme._deme.DEMSolver) -> int
Get the device memory usage (in bytes) on dT.
.. py:method:: DEMSolver.GetDeviceMemUsageKinematic
.. code-block:: text
GetDeviceMemUsageKinematic(self: deme._deme.DEMSolver) -> int
Get the device memory usage (in bytes) on kT.
.. py:method:: DEMSolver.GetFamilyOwnerWildcardValue
.. code-block:: text
GetFamilyOwnerWildcardValue(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: str) -> list[float]
Get the owner wildcard's values of all entities in family N.
.. py:method:: DEMSolver.GetGPUDeviceIDs
.. code-block:: text
GetGPUDeviceIDs(self: deme._deme.DEMSolver) -> list[int]
Return ``[dynamic_worker_device, kinematic_worker_device]`` using process-visible logical CUDA IDs.
.. py:method:: DEMSolver.GetGPUTimersEnabled
.. code-block:: text
GetGPUTimersEnabled(self: deme._deme.DEMSolver) -> bool
Return whether event-based GPU timing is enabled.
.. py:method:: DEMSolver.GetHostMemUsageDynamic
.. code-block:: text
GetHostMemUsageDynamic(self: deme._deme.DEMSolver) -> int
Get the host memory usage (in bytes) on dT.
.. py:method:: DEMSolver.GetHostMemUsageKinematic
.. code-block:: text
GetHostMemUsageKinematic(self: deme._deme.DEMSolver) -> int
Get the host memory usage (in bytes) on kT.
.. py:method:: DEMSolver.GetInitStatus
.. code-block:: text
GetInitStatus(self: deme._deme.DEMSolver) -> bool
Return whether this simulation system is initialized.
.. py:method:: DEMSolver.GetJitifyOptions
.. code-block:: text
GetJitifyOptions(self: deme._deme.DEMSolver) -> list[str]
Get current jitification options. It is needed by some of this simulation system's friend classes.
.. py:method:: DEMSolver.GetJitStringSubs
.. code-block:: text
GetJitStringSubs(self: deme._deme.DEMSolver) -> dict[str, str]
Get the jitification string substitution laundary list. It is needed by some of this simulation system's friend classes.
.. py:method:: DEMSolver.GetMeshNodesGlobal
.. code-block:: text
GetMeshNodesGlobal(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> list[float3]
Get the current locations of all the nodes in the mesh being tracked.
.. py:method:: DEMSolver.GetNumClumps
.. code-block:: text
GetNumClumps(self: deme._deme.DEMSolver) -> int
Return the number of clumps that are currently in the simulation. Must be used after initialization.
.. py:method:: DEMSolver.GetNumCombinedInstances
.. code-block:: text
GetNumCombinedInstances(self: deme._deme.DEMSolver) -> int
Return the number of combined instances currently cached.
.. py:method:: DEMSolver.GetNumContacts
.. code-block:: text
GetNumContacts(self: deme._deme.DEMSolver) -> int
Get the number of kT-reported potential contact pairs.
.. py:method:: DEMSolver.GetNumOwners
.. code-block:: text
GetNumOwners(self: deme._deme.DEMSolver) -> int
Return the total number of owners (clumps + meshes + analytical objects) that are currently in the simulation. Must be used after initialization.
.. py:method:: DEMSolver.GetOwnerAcc
.. code-block:: text
GetOwnerAcc(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float3]
Get the acceleration of n consecutive owners.
.. py:method:: DEMSolver.GetOwnerAngAcc
.. code-block:: text
GetOwnerAngAcc(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float3]
Get the angular acceleration of n consecutive owners.
.. py:method:: DEMSolver.GetOwnerAngVel
.. code-block:: text
GetOwnerAngVel(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float3]
Get angular velocity of n consecutive owners.
.. py:method:: DEMSolver.GetOwnerContactClumps
.. code-block:: text
GetOwnerContactClumps(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> list[int]
Get the clumps that are in contact with this owner as a vector.
.. py:method:: DEMSolver.GetOwnerContactForces
.. code-block:: text
GetOwnerContactForces(*args, **kwargs)
Overloaded function.
1. GetOwnerContactForces(self: deme._deme.DEMSolver, arg0: collections.abc.Sequence[typing.SupportsInt | typing.SupportsIndex], arg1: collections.abc.Sequence[float3], arg2: collections.abc.Sequence[float3]) -> int
Get all contact forces that concern a list of owners.
2. GetOwnerContactForces(self: deme._deme.DEMSolver, ownerIDs: collections.abc.Sequence[typing.SupportsInt | typing.SupportsIndex], points: collections.abc.Sequence[float3], forces: collections.abc.Sequence[float3], torques: collections.abc.Sequence[float3], torque_in_local: bool = False) -> int
Get all contact forces and torque that concern a list of owners.
.. py:method:: DEMSolver.GetOwnerFamily
.. code-block:: text
GetOwnerFamily(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[int]
Get the family number of n consecutive owners.
.. py:method:: DEMSolver.GetOwnerMass
.. code-block:: text
GetOwnerMass(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float]
Get the mass of n consecutive owners.
.. py:method:: DEMSolver.GetOwnerMOI
.. code-block:: text
GetOwnerMOI(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float3]
Get the moment of inertia (in principal axis frame) of n consecutive owners.
.. py:method:: DEMSolver.GetOwnerOriQ
.. code-block:: text
GetOwnerOriQ(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float4]
Get quaternion of n consecutive owners.
.. py:method:: DEMSolver.GetOwnerPosition
.. code-block:: text
GetOwnerPosition(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float3]
Get position of n consecutive owners.
.. py:method:: DEMSolver.GetOwnerVelocity
.. code-block:: text
GetOwnerVelocity(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float3]
Get velocity of n consecutive owners.
.. py:method:: DEMSolver.GetOwnerWildcardValue
.. code-block:: text
GetOwnerWildcardValue(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, name: str, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float]
Get the owner wildcard's values of some owners.
.. py:method:: DEMSolver.GetSimTime
.. code-block:: text
GetSimTime(self: deme._deme.DEMSolver) -> float
Get the simulation time passed since the start of simulation.
.. py:method:: DEMSolver.GetTimeStepSize
.. code-block:: text
GetTimeStepSize(self: deme._deme.DEMSolver) -> float
Get the current time step size in simulation.
.. py:method:: DEMSolver.GetTrackedOwnerTrianglePV
.. code-block:: text
GetTrackedOwnerTrianglePV(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, reset_window: bool = True) -> tuple[bool, list[float], list[float], list[float]]
Get frame-window averaged per-triangle P, V and P*V for one tracked owner.
.. py:method:: DEMSolver.GetUpdateFreq
.. code-block:: text
GetUpdateFreq(self: deme._deme.DEMSolver) -> float
Get the current update frequency used by the solver.
.. py:method:: DEMSolver.GetWhetherForceCollectInKernel
.. code-block:: text
GetWhetherForceCollectInKernel(self: deme._deme.DEMSolver) -> bool
Return whether the solver is currently reducing force in the force calculation kernel.
.. py:method:: DEMSolver.Initialize
.. code-block:: text
Initialize(self: deme._deme.DEMSolver, dry_run: bool = False) -> None
Finalize cached setup data, allocate runtime state, and prepare JIT CUDA kernels. Call once after materials, geometry, particles, and solver options have been configured. ``dry_run=True`` performs initialization without starting normal dynamics.
.. py:method:: DEMSolver.InstructBoxDomainBoundingBC
.. code-block:: text
InstructBoxDomainBoundingBC(self: deme._deme.DEMSolver, arg0: str, arg1: deme::DEMMaterial) -> None
Instruct if and how we should add boundaries to the simulation world upon initialization. Choose between `none', `all' (add 6 boundary planes) and `top_open' (add 5 boundary planes and leave the z-directon top open). Also specifies the material that should be assigned to those bounding boundaries.
.. py:method:: DEMSolver.InstructBoxDomainDimension
.. code-block:: text
InstructBoxDomainDimension(*args, **kwargs)
Overloaded function.
1. InstructBoxDomainDimension(self: deme._deme.DEMSolver, x: typing.SupportsFloat | typing.SupportsIndex, y: typing.SupportsFloat | typing.SupportsIndex, z: typing.SupportsFloat | typing.SupportsIndex, dir_exact: str = 'none') -> None
Set the Box Domain Dimension
2. InstructBoxDomainDimension(self: deme._deme.DEMSolver, x: tuple[typing.SupportsFloat | typing.SupportsIndex, typing.SupportsFloat | typing.SupportsIndex], y: tuple[typing.SupportsFloat | typing.SupportsIndex, typing.SupportsFloat | typing.SupportsIndex], z: tuple[typing.SupportsFloat | typing.SupportsIndex, typing.SupportsFloat | typing.SupportsIndex], dir_exact: str = 'none') -> None
Set the span of the Box Domain
.. py:method:: DEMSolver.InstructNumOwners
.. code-block:: text
InstructNumOwners(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Explicitly instruct the sizes for the arrays at initialization time. This is useful when the number of owners tends to change (especially gradually increase) frequently in the simulation.
.. py:method:: DEMSolver.LoadClumpType
.. code-block:: text
LoadClumpType(*args, **kwargs)
Overloaded function.
1. LoadClumpType(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex, arg1: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], arg2: str, arg3: deme::DEMMaterial) -> deme::DEMClumpTemplate
Load a clump type into the API-level cache
2. LoadClumpType(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex, arg1: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], arg2: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], arg3: collections.abc.Sequence[collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]], arg4: deme::DEMMaterial) -> deme::DEMClumpTemplate
Load a clump type into the API-level cache
3. LoadClumpType(self: deme._deme.DEMSolver, arg0: deme::DEMClumpTemplate) -> deme::DEMClumpTemplate
Load a clump type into the API-level cache
4. LoadClumpType(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex, arg1: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], arg2: str, arg3: collections.abc.Sequence[deme::DEMMaterial]) -> deme::DEMClumpTemplate
Load a clump type into the API-level cache
5. LoadClumpType(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex, arg1: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], arg2: str, arg3: deme::DEMMaterial) -> deme::DEMClumpTemplate
Load a clump type into the API-level cache
.. py:method:: DEMSolver.LoadCombinedClumpType
.. code-block:: text
LoadCombinedClumpType(self: deme._deme.DEMSolver, component_templates: collections.abc.Sequence[deme::DEMClumpTemplate], component_rel_pos: collections.abc.Sequence[float3], component_rel_oriQ: collections.abc.Sequence[float4] = [], master_component: typing.SupportsInt | typing.SupportsIndex = 0) -> deme::DEMCombinedTemplate
Load a rigid combined-clump template with fixed member-relative transforms.
.. py:method:: DEMSolver.LoadCombinedMeshType
.. code-block:: text
LoadCombinedMeshType(self: deme._deme.DEMSolver, component_templates: collections.abc.Sequence[deme::DEMMesh], component_rel_pos: collections.abc.Sequence[float3], component_rel_oriQ: collections.abc.Sequence[float4] = [], master_component: typing.SupportsInt | typing.SupportsIndex = 0) -> deme::DEMCombinedTemplate
Load a rigid combined-mesh template with fixed member-relative transforms.
.. py:method:: DEMSolver.LoadMaterial
.. code-block:: text
LoadMaterial(*args, **kwargs)
Overloaded function.
1. LoadMaterial(self: deme._deme.DEMSolver, arg0: collections.abc.Mapping[str, typing.SupportsFloat | typing.SupportsIndex]) -> deme::DEMMaterial
Load materials properties (Young's modulus, Poisson's ratio...) into the system.
2. LoadMaterial(self: deme._deme.DEMSolver, arg0: deme::DEMMaterial) -> deme::DEMMaterial
Load materials properties into the system.
.. py:method:: DEMSolver.LoadMeshType
.. code-block:: text
LoadMeshType(*args, **kwargs)
Overloaded function.
1. LoadMeshType(self: deme._deme.DEMSolver, filename: str, mat: deme::DEMMaterial, load_normals: bool = True, load_uv: bool = False) -> deme::DEMMesh
Load a mesh template into cache so it can be instantiated repeatedly.
2. LoadMeshType(self: deme._deme.DEMSolver, filename: str, load_normals: bool = True, load_uv: bool = False) -> deme::DEMMesh
Load a mesh template into cache (without explicitly assigning material here).
3. LoadMeshType(self: deme._deme.DEMSolver, mesh: deme::DEMMesh) -> deme::DEMMesh
Load a user-constructed mesh object as a reusable template.
.. py:method:: DEMSolver.LoadSphereType
.. code-block:: text
LoadSphereType(*args, **kwargs)
Overloaded function.
1. LoadSphereType(self: deme._deme.DEMSolver, mass: typing.SupportsFloat | typing.SupportsIndex, radius: typing.SupportsFloat | typing.SupportsIndex, material: deme::DEMMaterial) -> deme::DEMClumpTemplate
Load a reusable one-sphere clump template, deriving its spherical moment of inertia.
2. LoadSphereType(self: deme._deme.DEMSolver, mass: typing.SupportsFloat | typing.SupportsIndex, moi: typing.SupportsFloat | typing.SupportsIndex, radius: typing.SupportsFloat | typing.SupportsIndex, material: deme::DEMMaterial) -> deme::DEMClumpTemplate
Load a reusable one-sphere clump template with an explicitly supplied scalar moment of inertia.
.. py:method:: DEMSolver.MarkFamilyPersistentContact
.. code-block:: text
MarkFamilyPersistentContact(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: typing.SupportsInt | typing.SupportsIndex) -> None
Make it so that if for any currently-existing contact, if its two contact geometries are in family N1 and N2 respectively, this contact will never be removed.
.. py:method:: DEMSolver.MarkFamilyPersistentContactBoth
.. code-block:: text
MarkFamilyPersistentContactBoth(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Make it so that for any currently-existing contact, if both of its contact geometries are in family N, then this contact will never be removed.
.. py:method:: DEMSolver.MarkFamilyPersistentContactEither
.. code-block:: text
MarkFamilyPersistentContactEither(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Make it so that for any currently-existing contact, if one of its contact geometries is in family N, then this contact will never be removed.
.. py:method:: DEMSolver.MarkPersistentContact
.. code-block:: text
MarkPersistentContact(self: deme._deme.DEMSolver) -> None
Make it so that all currently-existing contacts in this simulation will never be removed.
.. py:method:: DEMSolver.PrintKinematicScratchSpaceUsage
.. code-block:: text
PrintKinematicScratchSpaceUsage(self: deme._deme.DEMSolver) -> None
Print kT's scratch space usage. This is a debug method.
.. py:method:: DEMSolver.PurgeFamily
.. code-block:: text
PurgeFamily(self: deme._deme.DEMSolver, family_num: typing.SupportsInt | typing.SupportsIndex) -> None
Remove all entities in a family from runtime arrays to reclaim memory.
.. py:method:: DEMSolver.ReadContactForceModel
.. code-block:: text
ReadContactForceModel(self: deme._deme.DEMSolver, arg0: str) -> deme._deme.DEMForceModel
Read user custom contact force model from a file (which by default should reside in kernel/DEMUserScripts). Returns a pointer to the force model in use.
.. py:method:: DEMSolver.ReleaseFlattenedArrays
.. code-block:: text
ReleaseFlattenedArrays(self: deme._deme.DEMSolver) -> None
Release setup-time flattened arrays used for preprocessing and worker transfer.
.. py:method:: DEMSolver.RemoveFamilyPersistentContact
.. code-block:: text
RemoveFamilyPersistentContact(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: typing.SupportsInt | typing.SupportsIndex) -> None
Cancel contact persistence qualification. Work like the inverse of MarkFamilyPersistentContact.
.. py:method:: DEMSolver.RemoveFamilyPersistentContactBoth
.. code-block:: text
RemoveFamilyPersistentContactBoth(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Cancel contact persistence qualification. Work like the inverse of MarkFamilyPersistentContactBoth.
.. py:method:: DEMSolver.RemoveFamilyPersistentContactEither
.. code-block:: text
RemoveFamilyPersistentContactEither(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Cancel contact persistence qualification. Work like the inverse of MarkFamilyPersistentContactEither.
.. py:method:: DEMSolver.RemoveKernelInclude
.. code-block:: text
RemoveKernelInclude(self: deme._deme.DEMSolver) -> None
Remove all extra libraries that the kernels `include' in their headers.
.. py:method:: DEMSolver.RemovePersistentContact
.. code-block:: text
RemovePersistentContact(self: deme._deme.DEMSolver) -> None
Cancel contact persistence qualification. Work like the inverse of MarkPersistentContact.
.. py:method:: DEMSolver.RequestContactUpdate
.. code-block:: text
RequestContactUpdate(self: deme._deme.DEMSolver) -> None
Request an immediate contact detection update.
.. py:method:: DEMSolver.SetAdaptiveBinSizeAcc
.. code-block:: text
SetAdaptiveBinSizeAcc(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set how fast kT changes the direction of bin size adjustmemt when there's a more beneficial direction
.. py:method:: DEMSolver.SetAdaptiveBinSizeDelaySteps
.. code-block:: text
SetAdaptiveBinSizeDelaySteps(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Adjust how frequent kT updates the bin size
.. py:method:: DEMSolver.SetAdaptiveBinSizeLowerProactivity
.. code-block:: text
SetAdaptiveBinSizeLowerProactivity(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set how proactive the solver is in avoiding the bin being too small (leading to too many bins in domain).
.. py:method:: DEMSolver.SetAdaptiveBinSizeMaxRate
.. code-block:: text
SetAdaptiveBinSizeMaxRate(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the max rate that the bin size can change in one adjustment
.. py:method:: DEMSolver.SetAdaptiveBinSizeUpperProactivity
.. code-block:: text
SetAdaptiveBinSizeUpperProactivity(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set how proactive the solver is in avoiding the bin being too big (leading to too many geometries in a bin)
.. py:method:: DEMSolver.SetAdaptiveTimeStepType
.. code-block:: text
SetAdaptiveTimeStepType(self: deme._deme.DEMSolver, arg0: str) -> None
Set the strategy for auto-adapting time step size. Currently, hertz_const computes one fixed setup-time timestep; max_vel and int_diff are accepted but not implemented.
.. py:method:: DEMSolver.SetAllowIntraCombinedOwnerContacts
.. code-block:: text
SetAllowIntraCombinedOwnerContacts(self: deme._deme.DEMSolver, allow: bool = True) -> None
Allow or suppress contacts among owners belonging to the same combined owner group.
.. py:method:: DEMSolver.SetCDMaxUpdateFreq
.. code-block:: text
SetCDMaxUpdateFreq(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Set the upper bound of kT update frequency (when it is adjusted automatically).
.. py:method:: DEMSolver.SetCDNumStepsMaxDriftAheadOfAvg
.. code-block:: text
SetCDNumStepsMaxDriftAheadOfAvg(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the number of steps dT configures its max drift more than average drift steps.
.. py:method:: DEMSolver.SetCDNumStepsMaxDriftHistorySize
.. code-block:: text
SetCDNumStepsMaxDriftHistorySize(self: deme._deme.DEMSolver, n: typing.SupportsInt | typing.SupportsIndex) -> None
Set how many past kinematic-worker updates calibrate the maximum future drift limit. The default is recommended for normal use.
.. py:method:: DEMSolver.SetCDNumStepsMaxDriftMultipleOfAvg
.. code-block:: text
SetCDNumStepsMaxDriftMultipleOfAvg(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the multiplier which dT configures its max drift to be w.r.t. the average drift steps.
.. py:method:: DEMSolver.SetCDUpdateFreq
.. code-block:: text
SetCDUpdateFreq(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Set the number of dT steps before it waits for a contact-pair info update from kT.
.. py:method:: DEMSolver.SetCollectAccRightAfterForceCalc
.. code-block:: text
SetCollectAccRightAfterForceCalc(self: deme._deme.DEMSolver, flag: bool = True) -> None
Reduce contact forces to accelerations right after calculating them, in the same kernel. This may give some performance boost if you have only polydisperse spheres, no clumps.
.. py:method:: DEMSolver.SetContactOutputContent
.. code-block:: text
SetContactOutputContent(self: deme._deme.DEMSolver, arg0: collections.abc.Sequence[str]) -> None
Specify the information that needs to go into the contact pair output files.
.. py:method:: DEMSolver.SetContactOutputFormat
.. code-block:: text
SetContactOutputFormat(self: deme._deme.DEMSolver, arg0: str) -> None
Specify the file format of contact pairs.
.. py:method:: DEMSolver.SetContactWildcards
.. code-block:: text
SetContactWildcards(self: deme._deme.DEMSolver, arg0: collections.abc.Set[str]) -> None
Set the names for the extra quantities that will be associated with each contact pair.
.. py:method:: DEMSolver.SetContactWildcardValue
.. code-block:: text
SetContactWildcardValue(self: deme._deme.DEMSolver, arg0: str, arg1: typing.SupportsFloat | typing.SupportsIndex) -> None
Change the value of contact wildcards to val. Apply to all simulation bodies that are present.
.. py:method:: DEMSolver.SetCudaDebugSync
.. code-block:: text
SetCudaDebugSync(self: deme._deme.DEMSolver, enable: bool = True) -> None
Set the process-wide switch that synchronizes after each CUDA operation that enqueues stream work. Disable for normal asynchronous performance.
.. py:method:: DEMSolver.SetErrorOutAngularVelocity
.. code-block:: text
SetErrorOutAngularVelocity(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the angular velocity which when exceeded, the solver errors out. A huge number can be used to discourage this error type. Defaulted to 1e4.
.. py:method:: DEMSolver.SetErrorOutAvgContacts
.. code-block:: text
SetErrorOutAvgContacts(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the average number of contacts a sphere has, before the solver errors out. A huge number can be used to discourage this error type. Defaulted to 100
.. py:method:: DEMSolver.SetErrorOutVelocity
.. code-block:: text
SetErrorOutVelocity(*args, **kwargs)
Overloaded function.
1. SetErrorOutVelocity(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the velocity which when exceeded, the solver errors out. A huge number can be used to discourage this error type. Defaulted to 1e3.
2. SetErrorOutVelocity(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the velocity which when exceeded, the solver errors out. A huge number can be used to discourage this error type. Defaulted to 5e4.
.. py:method:: DEMSolver.SetExpandFactor
.. code-block:: text
SetExpandFactor(self: deme._deme.DEMSolver, beta: typing.SupportsFloat | typing.SupportsIndex, fix: bool = True) -> None
(Explicitly) set the amount by which the radii of the spheres (and the thickness of the boundaries) are expanded for the purpose of contact detection (safe, and creates false positives). If fix is set to true, then this expand factor does not change even if the user uses variable time step size.
.. py:method:: DEMSolver.SetExpandSafetyAdder
.. code-block:: text
SetExpandSafetyAdder(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set a `base' velocity, which we will always add to our estimated maximum system velocity, when deriving the thickness of the contact `safety' margin
.. py:method:: DEMSolver.SetExpandSafetyMultiplier
.. code-block:: text
SetExpandSafetyMultiplier(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Assign a multiplier to our estimated maximum system velocity, when deriving the thinckness of the contact `safety' margin.
.. py:method:: DEMSolver.SetExpandSafetyType
.. code-block:: text
SetExpandSafetyType(self: deme._deme.DEMSolver, arg0: str) -> None
A string. If 'auto': the solver automatically derives.
.. py:method:: DEMSolver.SetFamilyClumpMaterial
.. code-block:: text
SetFamilyClumpMaterial(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: deme::DEMMaterial) -> None
Set all clumps in this family to have this material.
.. py:method:: DEMSolver.SetFamilyContactWildcardValue
.. code-block:: text
SetFamilyContactWildcardValue(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: typing.SupportsInt | typing.SupportsIndex, arg2: str, arg3: typing.SupportsFloat | typing.SupportsIndex) -> None
Change the value of contact wildcards to val if one of the contact geometry is in family N1, and the other is in N2.
.. py:method:: DEMSolver.SetFamilyContactWildcardValueBoth
.. code-block:: text
SetFamilyContactWildcardValueBoth(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: str, arg2: typing.SupportsFloat | typing.SupportsIndex) -> None
Change the value of contact wildcards to val if both of the contact geometries are in family N.
.. py:method:: DEMSolver.SetFamilyContactWildcardValueEither
.. code-block:: text
SetFamilyContactWildcardValueEither(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: str, arg2: typing.SupportsFloat | typing.SupportsIndex) -> None
Change the value of contact wildcards to val if either of the contact geometries is in family N.
.. py:method:: DEMSolver.SetFamilyExtraMargin
.. code-block:: text
SetFamilyExtraMargin(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: typing.SupportsFloat | typing.SupportsIndex) -> None
Add an extra contact margin to entities in a family so they are registered as potential contact pairs earlier.
.. py:method:: DEMSolver.SetFamilyFixed
.. code-block:: text
SetFamilyFixed(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Mark all entities in this family to be fixed.
.. py:method:: DEMSolver.SetFamilyMeshMaterial
.. code-block:: text
SetFamilyMeshMaterial(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: deme::DEMMaterial) -> None
Set all meshes in this family to have this material.
.. py:method:: DEMSolver.SetFamilyOwnerWildcardValue
.. code-block:: text
SetFamilyOwnerWildcardValue(*args, **kwargs)
Overloaded function.
1. SetFamilyOwnerWildcardValue(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: str, arg2: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Modify the owner wildcard's values of all entities in family N.
2. SetFamilyOwnerWildcardValue(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: str, arg2: typing.SupportsFloat | typing.SupportsIndex) -> None
Modify the owner wildcard's values of all entities in family N.
.. py:method:: DEMSolver.SetFamilyPrescribedAngVel
.. code-block:: text
SetFamilyPrescribedAngVel(*args, **kwargs)
Overloaded function.
1. SetFamilyPrescribedAngVel(self: deme._deme.DEMSolver, ID: typing.SupportsInt | typing.SupportsIndex, velX: str, velY: str, velZ: str, dictate: bool = True, pre: str = 'none') -> None
Set the prescribed angular velocity to all entities in a family. If dictate is set to true, then this family will not be influenced by the force exerted from other simulation entites (both linear and rotational motions). If false, only specified components (that is, not specified with 'none') will not be influenced by the force exerted from other simulation entites.
2. SetFamilyPrescribedAngVel(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the angular velocities of all entites in this family always keep `as is', and not influenced by the force exerted from other simulation entites.
.. py:method:: DEMSolver.SetFamilyPrescribedAngVelX
.. code-block:: text
SetFamilyPrescribedAngVelX(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the X component of the angular velocities of all entites in this family always keep `as is', and not influenced by the force exerted from other simulation entites.
.. py:method:: DEMSolver.SetFamilyPrescribedAngVelY
.. code-block:: text
SetFamilyPrescribedAngVelY(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the X component of the angular velocities of all entites in this family always keep `as is', and not influenced by the force exerted from other simulation entites.
.. py:method:: DEMSolver.SetFamilyPrescribedAngVelZ
.. code-block:: text
SetFamilyPrescribedAngVelZ(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the X component of the angular velocities of all entites in this family always keep `as is', and not influenced by the force exerted from other simulation entites.
.. py:method:: DEMSolver.SetFamilyPrescribedLinVel
.. code-block:: text
SetFamilyPrescribedLinVel(*args, **kwargs)
Overloaded function.
1. SetFamilyPrescribedLinVel(self: deme._deme.DEMSolver, ID: typing.SupportsInt | typing.SupportsIndex, velX: str, velY: str, velZ: str, dictate: bool = True, pre: str = 'none') -> None
Set the prescribed linear velocity to all entities in a family. If dictate is set to true, then this family will not be influenced by the force exerted from other simulation entites (both linear and rotational motions). If false, only specified components (that is, not specified with 'none') will not be influenced by the force exerted from other simulation entites.
2. SetFamilyPrescribedLinVel(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the linear velocities of all entites in this family always keep `as is', and not influenced by the force exerted from other simulation entites.
.. py:method:: DEMSolver.SetFamilyPrescribedLinVelX
.. code-block:: text
SetFamilyPrescribedLinVelX(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the X component of the linear velocities of all entites in this family always keep `as is', and not influenced by the force exerted from other simulation entites.
.. py:method:: DEMSolver.SetFamilyPrescribedLinVelY
.. code-block:: text
SetFamilyPrescribedLinVelY(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the Y component of the linear velocities of all entites in this family always keep `as is', and not influenced by the force exerted from other simulation entites.
.. py:method:: DEMSolver.SetFamilyPrescribedLinVelZ
.. code-block:: text
SetFamilyPrescribedLinVelZ(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the Z component of the linear velocities of all entites in this family always keep `as is', and not influenced by the force exerted from other simulation entites.
.. py:method:: DEMSolver.SetFamilyPrescribedPosition
.. code-block:: text
SetFamilyPrescribedPosition(*args, **kwargs)
Overloaded function.
1. SetFamilyPrescribedPosition(self: deme._deme.DEMSolver, ID: typing.SupportsInt | typing.SupportsIndex, X: str, Y: str, Z: str, dictate: bool = True, pre: str = 'none') -> None
Keep the positions of all entites in this family to remain exactly the user-specified values.
2. SetFamilyPrescribedPosition(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Keep the positions of all entites in this family to remain as is.
.. py:method:: DEMSolver.SetFamilyPrescribedPositionX
.. code-block:: text
SetFamilyPrescribedPositionX(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the X component of the linear positions of all entites in this family always keep `as is'.
.. py:method:: DEMSolver.SetFamilyPrescribedPositionY
.. code-block:: text
SetFamilyPrescribedPositionY(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the Y component of the linear positions of all entites in this family always keep `as is'.
.. py:method:: DEMSolver.SetFamilyPrescribedPositionZ
.. code-block:: text
SetFamilyPrescribedPositionZ(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the Z component of the linear positions of all entites in this family always keep `as is'.
.. py:method:: DEMSolver.SetFamilyPrescribedQuaternion
.. code-block:: text
SetFamilyPrescribedQuaternion(*args, **kwargs)
Overloaded function.
1. SetFamilyPrescribedQuaternion(self: deme._deme.DEMSolver, ID: typing.SupportsInt | typing.SupportsIndex, q_formula: str, dictate: bool = True) -> None
Keep the orientation quaternions of all entites in this family to remain exactly the user-specified values.
2. SetFamilyPrescribedQuaternion(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Let the orientation quaternions of all entites in this family always keep `as is'.
.. py:method:: DEMSolver.SetForceCalcThreadsPerBlock
.. code-block:: text
SetForceCalcThreadsPerBlock(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Set the number of threads per block in force calculation (default 256).
.. py:method:: DEMSolver.SetGPUTimersEnabled
.. code-block:: text
SetGPUTimersEnabled(self: deme._deme.DEMSolver, enabled: bool) -> None
Enable or disable event-based GPU timing.
.. py:method:: DEMSolver.SetGravitationalAcceleration
.. code-block:: text
SetGravitationalAcceleration(self: deme._deme.DEMSolver, acc: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Set the global gravitational acceleration as ``[x, y, z]`` in length/time^2 units.
.. py:method:: DEMSolver.SetInitBinNumTarget
.. code-block:: text
SetInitBinNumTarget(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Set the target number of bins (for contact detection) at the start of the simulation upon initialization.
.. py:method:: DEMSolver.SetInitBinSize
.. code-block:: text
SetInitBinSize(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Explicitly instruct the bin size (for contact detection) that the solver should use.
.. py:method:: DEMSolver.SetInitBinSizeAsMultipleOfSmallestSphere
.. code-block:: text
SetInitBinSizeAsMultipleOfSmallestSphere(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Explicitly instruct the bin size (for contact detection) that the solver should use, as a multiple of the radius of the smallest sphere in simulation.
.. py:method:: DEMSolver.SetInitTimeStep
.. code-block:: text
SetInitTimeStep(self: deme._deme.DEMSolver, ts: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the initial timestep in seconds before ``Initialize``. A constant-step simulation uses it throughout; an adaptive strategy may update it later.
.. py:method:: DEMSolver.SetIntegrator
.. code-block:: text
SetIntegrator(*args, **kwargs)
Overloaded function.
1. SetIntegrator(self: deme._deme.DEMSolver, arg0: str) -> None
Set the time integrator for this simulator.
2. SetIntegrator(self: deme._deme.DEMSolver, arg0: deme::TIME_INTEGRATOR) -> None
Set the time integrator for this simulator.
.. py:method:: DEMSolver.SetJitifyClumpTemplates
.. code-block:: text
SetJitifyClumpTemplates(self: deme._deme.DEMSolver, use: bool = True) -> None
Instruct the solver to rearrange and consolidate clump templates information, then jitify it into GPU kernels (if set to true), rather than using flattened sphere component configuration arrays whose entries are associated with individual spheres.
.. py:method:: DEMSolver.SetJitifyMassProperties
.. code-block:: text
SetJitifyMassProperties(self: deme._deme.DEMSolver, use: bool = True) -> None
Instruct the solver to rearrange and consolidate mass property information (for all owner types), then jitify it into GPU kernels (if set to true), rather than using flattened mass property arrays whose entries are associated with individual owners.
.. py:method:: DEMSolver.SetJitifyOptions
.. code-block:: text
SetJitifyOptions(self: deme._deme.DEMSolver, arg0: collections.abc.Sequence[str]) -> None
Set the jitification options. It is only needed by advanced users.
.. py:method:: DEMSolver.SetKernelInclude
.. code-block:: text
SetKernelInclude(self: deme._deme.DEMSolver, arg0: str) -> None
Set the kernels' headers' extra include lines. Useful for customization.
.. py:method:: DEMSolver.SetMaterialPropertyPair
.. code-block:: text
SetMaterialPropertyPair(self: deme._deme.DEMSolver, arg0: str, arg1: deme::DEMMaterial, arg2: deme::DEMMaterial, arg3: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the value for a material property that by nature involves a pair of a materials (e.g. friction coefficient).
.. py:method:: DEMSolver.SetMaxSphereInBin
.. code-block:: text
SetMaxSphereInBin(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Used to force the solver to error out when there are too many spheres in a bin. A huge number can be used to discourage this error type
.. py:method:: DEMSolver.SetMaxTriangleInBin
.. code-block:: text
SetMaxTriangleInBin(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None
Used to force the solver to error out when there are too many spheres in a bin. A huge number can be used to discourage this error type
.. py:method:: DEMSolver.SetMaxTriTriPenetration
.. code-block:: text
SetMaxTriTriPenetration(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the maximum allowed triangle-triangle penetration used as the margin added in kT contact detection. This value caps the penetration margin added to prevent excessively large values.
.. py:method:: DEMSolver.SetMaxVelocity
.. code-block:: text
SetMaxVelocity(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the maximum expected particle velocity. The solver will not use a velocity larger than this for determining the margin thickness, and velocity larger than this will be considered a system anomaly.
.. py:method:: DEMSolver.SetMeshOutputFormat
.. code-block:: text
SetMeshOutputFormat(self: deme._deme.DEMSolver, arg0: str) -> None
Specify the output file format of meshes.
.. py:method:: DEMSolver.SetMeshParticlesLowPoly
.. code-block:: text
SetMeshParticlesLowPoly(self: deme._deme.DEMSolver, use: bool = True) -> None
Declare that all meshed particles have a low polygon count (e.g. box, tetrahedron). When enabled, the per-triangle maxTriTriPenetration array is neither computed, transferred to kT, nor used to inflate contact-detection margins, saving compute time. Toggle this on only when you are confident that no triangle from one mesh will ever be completely submerged inside another mesh.
.. py:method:: DEMSolver.SetMeshUniversalContact
.. code-block:: text
SetMeshUniversalContact(self: deme._deme.DEMSolver, use: bool = True) -> None
Set whether mesh-mesh contacts should be universally detected. Set to false to speedup simulation if meshes are not expected to have contacts. Default is false.
.. py:method:: DEMSolver.SetNoForceRecord
.. code-block:: text
SetNoForceRecord(self: deme._deme.DEMSolver, flag: bool = True) -> None
Instruct the solver that there is no need to record the contact force (and contact point location etc.) in an array.
.. py:method:: DEMSolver.SetOutputContent
.. code-block:: text
SetOutputContent(self: deme._deme.DEMSolver, arg0: collections.abc.Sequence[str]) -> None
Specify the information that needs to go into the clump or sphere output files.
.. py:method:: DEMSolver.SetOutputFormat
.. code-block:: text
SetOutputFormat(self: deme._deme.DEMSolver, arg0: str) -> None
Choose sphere and clump output file format.
.. py:method:: DEMSolver.SetOwnerAngVel
.. code-block:: text
SetOwnerAngVel(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: collections.abc.Sequence[float3]) -> None
Set angular velocity of consecutive owners starting from ownerID, based on input angular velocity vector. N (the size of the input vector) elements will be modified.
.. py:method:: DEMSolver.SetOwnerFamily
.. code-block:: text
SetOwnerFamily(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, fam: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> None
Set the family number of consecutive owners.
.. py:method:: DEMSolver.SetOwnerOriQ
.. code-block:: text
SetOwnerOriQ(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: collections.abc.Sequence[float4]) -> None
Set quaternion of consecutive owners starting from ownerID, based on input quaternion vector. N (the size of the input vector) elements will be modified.
.. py:method:: DEMSolver.SetOwnerPosition
.. code-block:: text
SetOwnerPosition(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: collections.abc.Sequence[float3]) -> None
Set position of consecutive owners starting from ownerID, based on input position vector. N (the size of the input vector) elements will be modified.
.. py:method:: DEMSolver.SetOwnerVelocity
.. code-block:: text
SetOwnerVelocity(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: collections.abc.Sequence[float3]) -> None
Set velocity of consecutive owners starting from ownerID, based on input velocity vector. N (the size of the input vector) elements will be modified.
.. py:method:: DEMSolver.SetOwnerWildcards
.. code-block:: text
SetOwnerWildcards(self: deme._deme.DEMSolver, arg0: collections.abc.Set[str]) -> None
Set the names for the extra quantities that will be associated with each owner.
.. py:method:: DEMSolver.SetOwnerWildcardValue
.. code-block:: text
SetOwnerWildcardValue(*args, **kwargs)
Overloaded function.
1. SetOwnerWildcardValue(self: deme._deme.DEMSolver, ownerIDs: typing.SupportsInt | typing.SupportsIndex, name: str, vals: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Set the wildcard values of some owners using a list.
2. SetOwnerWildcardValue(self: deme._deme.DEMSolver, ownerIDs: typing.SupportsInt | typing.SupportsIndex, name: str, val: typing.SupportsFloat | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> None
Set the wildcard values of some owners using a list.
.. py:method:: DEMSolver.SetPersistentContact
.. code-block:: text
SetPersistentContact(self: deme._deme.DEMSolver, use: bool = True) -> None
Set whether the solver should expect the user to mark certain contacts as persistent across kT updates. Set this to true if you later will call MarkPersistentContact series of methods.
.. py:method:: DEMSolver.SetSimplePatchCombination
.. code-block:: text
SetSimplePatchCombination(self: deme._deme.DEMSolver, use: bool = True) -> None
Use simple patch-ID based triangle contact combination. Disable to opt into connected-component flooding.
.. py:method:: DEMSolver.SetSimTime
.. code-block:: text
SetSimTime(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Get the simulation time passed since the start of simulation.
.. py:method:: DEMSolver.SetSortContactPairs
.. code-block:: text
SetSortContactPairs(self: deme._deme.DEMSolver, arg0: bool) -> None
Instruct the solver if contact pair arrays should be sorted (based on the types of contacts) before usage.
.. py:method:: DEMSolver.SetStablePatchIslandIDs
.. code-block:: text
SetStablePatchIslandIDs(self: deme._deme.DEMSolver, use: bool = True) -> None
Stabilize flooded patch-island IDs across contact-detection steps.
.. py:method:: DEMSolver.SetTrianglePVTrackingOwners
.. code-block:: text
SetTrianglePVTrackingOwners(self: deme._deme.DEMSolver, arg0: collections.abc.Sequence[typing.SupportsInt | typing.SupportsIndex]) -> None
Enable per-triangle P/V/PxV tracking for the specified mesh owners.
.. py:method:: DEMSolver.SetTriNodeRelPos
.. code-block:: text
SetTriNodeRelPos(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: typing.SupportsInt | typing.SupportsIndex, arg2: collections.abc.Sequence[float3]) -> None
Rewrite the relative positions of the flattened triangle soup.
.. py:method:: DEMSolver.SetTriTriContactRejectionRatio
.. code-block:: text
SetTriTriContactRejectionRatio(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the ratio threshold for rejecting suspicious tri-tri contacts. A contact is rejected when the penetration depth exceeds this fraction of the contact-point-to-mesh-center distance for either mesh involved. A negative value disables the guard entirely.
.. py:method:: DEMSolver.SetTriTriPenetration
.. code-block:: text
SetTriTriPenetration(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None
Manually set the current triangle-triangle penetration value in dT. This allows the user to directly control the maxTriTriPenetration value which will ONLY be used in the NEXT contact detection run in kT.
.. py:method:: DEMSolver.SetUseAngularVelocityMargin
.. code-block:: text
SetUseAngularVelocityMargin(self: deme._deme.DEMSolver, arg0: bool) -> None
Control whether angular velocity contributes to the contact detection margin.
.. py:method:: DEMSolver.SetVerbosity
.. code-block:: text
SetVerbosity(self: deme._deme.DEMSolver, arg0: str) -> None
Set the verbosity level of the solver. Select from 'QUIET', 'ERROR', 'WARNING', 'INFO', 'METRIC' or 'DEBUG'. Recommend 'INFO'.
.. py:method:: DEMSolver.ShowAnomalies
.. code-block:: text
ShowAnomalies(self: deme._deme.DEMSolver) -> None
Show potential anomalies that may have been there in the simulation, then clear the anomaly log.
.. py:method:: DEMSolver.ShowMemStats
.. code-block:: text
ShowMemStats(self: deme._deme.DEMSolver) -> None
Print the current memory usage in pretty format.
.. py:method:: DEMSolver.ShowThreadCollaborationStats
.. code-block:: text
ShowThreadCollaborationStats(self: deme._deme.DEMSolver) -> None
Show the collaboration stats between dT and kT. This is more useful for tweaking the number of time steps that dT should be allowed to be in advance of kT.
.. py:method:: DEMSolver.ShowTimingStats
.. code-block:: text
ShowTimingStats(self: deme._deme.DEMSolver) -> None
Show the wall time and percentages of wall time spend on various solver tasks.
.. py:method:: DEMSolver.SyncMemoryTransfer
.. code-block:: text
SyncMemoryTransfer(self: deme._deme.DEMSolver) -> None
If the user used async-ed version of a tracker's get/set methods (to get a speed boost in many piecemeal accesses of a long array), this method should be called to mark the end of to-host transactions.
.. py:method:: DEMSolver.Track
.. code-block:: text
Track(*args, **kwargs)
Overloaded function.
1. Track(self: deme._deme.DEMSolver, arg0: deme._deme.DEMInitializer) -> deme._deme.Tracker
Create a DEMTracker to allow direct control/modification/query to this external object/batch of clumps/triangle mesh object.
2. Track(self: deme._deme.DEMSolver, combined_inst: deme::DEMCombinedInstances) -> deme._deme.Tracker
Create a single tracker that tracks all member owners in a combined-instances batch.
.. py:method:: DEMSolver.UpdateClumps
.. code-block:: text
UpdateClumps(self: deme._deme.DEMSolver) -> None
Transfer newly loaded clumps to the GPU-side in mid-simulation.
.. py:method:: DEMSolver.UpdateSimParams
.. code-block:: text
UpdateSimParams(self: deme._deme.DEMSolver) -> None
Transfer the cached sim params to the workers. Used for sim environment modification after system initialization.
.. py:method:: DEMSolver.UpdateStepSize
.. code-block:: text
UpdateStepSize(self: deme._deme.DEMSolver, ts: typing.SupportsFloat | typing.SupportsIndex = -1.0) -> None
Update the time step size. Used after system initialization.
.. py:method:: DEMSolver.UpdateTriNodeRelPos
.. code-block:: text
UpdateTriNodeRelPos(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: typing.SupportsInt | typing.SupportsIndex, arg2: collections.abc.Sequence[float3]) -> None
Update the relative positions of the flattened triangle soup.
.. py:method:: DEMSolver.UseAdaptiveBinSize
.. code-block:: text
UseAdaptiveBinSize(self: deme._deme.DEMSolver, use: bool = True) -> None
Enable or disable the use of adaptive bin size (by default it is on)
.. py:method:: DEMSolver.UseAdaptiveUpdateFreq
.. code-block:: text
UseAdaptiveUpdateFreq(self: deme._deme.DEMSolver, use: bool = True) -> None
Enable or disable the use of adaptive max update step count (by default it is on)
.. py:method:: DEMSolver.UseFrictionalHertzianModel
.. code-block:: text
UseFrictionalHertzianModel(self: deme._deme.DEMSolver) -> deme._deme.DEMForceModel
Instruct the solver to use frictonal (history-based) Hertzian contact force model.
.. py:method:: DEMSolver.UseFrictionlessHertzianModel
.. code-block:: text
UseFrictionlessHertzianModel(self: deme._deme.DEMSolver) -> deme._deme.DEMForceModel
Instruct the solver to use frictonless Hertzian contact force model
.. py:method:: DEMSolver.UseHertzConstTimeStep
.. code-block:: text
UseHertzConstTimeStep(self: deme._deme.DEMSolver) -> None
Use the setup-time Hertzian constant timestep estimate.
.. py:method:: DEMSolver.WaitForPendingOutput
.. code-block:: text
WaitForPendingOutput(self: deme._deme.DEMSolver) -> None
Wait for any in-flight async output to finish.
.. py:method:: DEMSolver.WriteClumpFile
.. code-block:: text
WriteClumpFile(self: deme._deme.DEMSolver, outfilename: str, accuracy: typing.SupportsInt | typing.SupportsIndex = 10) -> None
Write the current status of clumps to a file.
.. py:method:: DEMSolver.WriteContactFile
.. code-block:: text
WriteContactFile(self: deme._deme.DEMSolver, outfilename: str, force_thres: typing.SupportsFloat | typing.SupportsIndex = 1e-30) -> None
Write all contact pairs to a file. Forces smaller than threshold will not be outputted.
.. py:method:: DEMSolver.WriteContactFileIncludingPotentialPairs
.. code-block:: text
WriteContactFileIncludingPotentialPairs(self: deme._deme.DEMSolver, outfilename: str) -> None
Write all contact pairs kT-supplied to a file, thus including the potential ones (those are not yet in contact, or recently used to be in contact).
.. py:method:: DEMSolver.WriteMeshFile
.. code-block:: text
WriteMeshFile(self: deme._deme.DEMSolver, arg0: str) -> None
Write the current status of all meshes to a file.
.. py:method:: DEMSolver.WriteSphereFile
.. code-block:: text
WriteSphereFile(self: deme._deme.DEMSolver, arg0: str) -> None
Writes the current status of clumps (but decomposed as spheres) file.
.. py:class:: Tracker
.. code-block:: text
Access and modify owners associated with a tracked batch or object.
Create trackers with ``DEMSolver.Track`` during setup. Most state queries and
updates require the solver to be initialized and synchronized. ``offset``
selects an owner within the tracked collection, starting at zero. Keep the
parent solver alive while using a tracker.
.. py:method:: Tracker.__init__
.. code-block:: text
__init__(self: deme._deme.Tracker, solver: deme::DEMSolver) -> None
Create a tracker associated with ``solver``. Prefer ``DEMSolver.Track`` so the tracked owner range is configured correctly.
.. py:method:: Tracker.AddAcc
.. code-block:: text
AddAcc(*args, **kwargs)
Overloaded function.
1. AddAcc(self: deme._deme.Tracker, acc: float3, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> None
Add an extra acc to the tracked body, for the next time step. Note if the user intends to add a persistent external force, then using family prescription is the better method.
2. AddAcc(self: deme._deme.Tracker, acc: collections.abc.Sequence[float3]) -> None
Add an extra acc to consecutive tracked objects, (only) for the next time step. Note if the user intends to add a persistent external force, then using family prescription is the better method.
.. py:method:: Tracker.AddAngAcc
.. code-block:: text
AddAngAcc(*args, **kwargs)
Overloaded function.
1. AddAngAcc(self: deme._deme.Tracker, angAcc: float3, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> None
Add an extra angular acceleration to the tracked body, for the next time step. Note if the user intends to add a persistent external torque, then using family prescription is the better method.
2. AddAngAcc(self: deme._deme.Tracker, angAcc: collections.abc.Sequence[float3]) -> None
Add an extra angular acceleration to consecutive tracked objects, (only) for the next time step. Note if the user intends to add a persistent external torque, then using family prescription is the better method.
.. py:method:: Tracker.AngularVelocitiesGlobal
.. code-block:: text
AngularVelocitiesGlobal(self: deme._deme.Tracker) -> list[list[float]]
Return global-frame angular velocities for all tracked owners.
.. py:method:: Tracker.AngularVelocitiesGlobalToDevice
.. code-block:: text
AngularVelocitiesGlobalToDevice(self: deme._deme.Tracker, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy all tracked global-frame angular velocities to caller-owned CUDA ``float3`` storage. ``capacity`` is in elements; ``device`` is the allocation's logical CUDA device.
.. py:method:: Tracker.AngularVelocitiesLocal
.. code-block:: text
AngularVelocitiesLocal(self: deme._deme.Tracker) -> list[list[float]]
Return local principal-axis-frame angular velocities for all tracked owners.
.. py:method:: Tracker.AngularVelocitiesLocalToDevice
.. code-block:: text
AngularVelocitiesLocalToDevice(self: deme._deme.Tracker, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy all tracked local-frame angular velocities to caller-owned CUDA ``float3`` storage. ``capacity`` is in elements; ``device`` is the allocation's logical CUDA device.
.. py:method:: Tracker.AngVelGlobal
.. code-block:: text
AngVelGlobal(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[float]
Return the global-frame angular velocity of the owner at ``offset``.
.. py:method:: Tracker.AngVelLocal
.. code-block:: text
AngVelLocal(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[float]
Return the angular velocity of the owner at ``offset`` in its local principal-axis frame. Rotate it by ``OriQ(offset)`` to obtain the global-frame value.
.. py:method:: Tracker.ContactAcc
.. code-block:: text
ContactAcc(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[float]
Get the a portion of the acceleration of this tracked object, that is the result of its contact with other simulation entities. In most cases, this means excluding the gravitational acceleration. The acceleration is in global frame.
.. py:method:: Tracker.ContactAccelerations
.. code-block:: text
ContactAccelerations(self: deme._deme.Tracker) -> list[list[float]]
Get the acceleration experienced by all objects tracked by this tracker, that is the result of their contact with other simulation entities. The acceleration is in global frame. In most cases, this means excluding the gravitational acceleration. The acceleration is in global frame.
.. py:method:: Tracker.ContactAccelerationsToDevice
.. code-block:: text
ContactAccelerationsToDevice(self: deme._deme.Tracker, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy all tracked global-frame contact accelerations to caller-owned CUDA ``float3`` storage. Gravity and other non-contact acceleration are excluded.
.. py:method:: Tracker.ContactAngAccGlobal
.. code-block:: text
ContactAngAccGlobal(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[float]
Get the a portion of the angular acceleration of this tracked object, that is the result of its contact with other simulation entities. The acceleration is in this object's global frame.
.. py:method:: Tracker.ContactAngAccLocal
.. code-block:: text
ContactAngAccLocal(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[float]
Get the a portion of the angular acceleration of this tracked object, that is the result of its contact with other simulation entities. The acceleration is in this object's local frame.
.. py:method:: Tracker.ContactAngularAccelerationsGlobal
.. code-block:: text
ContactAngularAccelerationsGlobal(self: deme._deme.Tracker) -> list[list[float]]
Get the angular acceleration experienced by all objects tracked by this tracker, that is the result of their contact with other simulation entities. The acceleration is in this object's global frame.
.. py:method:: Tracker.ContactAngularAccelerationsGlobalToDevice
.. code-block:: text
ContactAngularAccelerationsGlobalToDevice(self: deme._deme.Tracker, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy all tracked global-frame contact angular accelerations to caller-owned CUDA ``float3`` storage.
.. py:method:: Tracker.ContactAngularAccelerationsLocal
.. code-block:: text
ContactAngularAccelerationsLocal(self: deme._deme.Tracker) -> list[list[float]]
Get the angular acceleration experienced by all objects tracked by this tracker, that is the result of their contact with other simulation entities. The acceleration is in this object's local frame.
.. py:method:: Tracker.ContactAngularAccelerationsLocalToDevice
.. code-block:: text
ContactAngularAccelerationsLocalToDevice(self: deme._deme.Tracker, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy all tracked local-frame contact angular accelerations to caller-owned CUDA ``float3`` storage.
.. py:method:: Tracker.FamiliesToDevice
.. code-block:: text
FamiliesToDevice(self: deme._deme.Tracker, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy all tracked family numbers to caller-owned CUDA ``uint32`` storage. ``capacity`` is in elements; ``device`` is the allocation's logical CUDA device.
.. py:method:: Tracker.GetContactClumps
.. code-block:: text
GetContactClumps(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[int]
Get the clumps that are in contact with this tracked owner as a vector.
.. py:method:: Tracker.GetContactForces
.. code-block:: text
GetContactForces(self: deme._deme.Tracker, points: collections.abc.Sequence[float3], forces: collections.abc.Sequence[float3], offset: typing.SupportsInt | typing.SupportsIndex = 0) -> int
Get all contact forces that concern this tracked object. Returns number of force pairs.
.. py:method:: Tracker.GetContactForcesAndGlobalTorque
.. code-block:: text
GetContactForcesAndGlobalTorque(self: deme._deme.Tracker, points: collections.abc.Sequence[float3], forces: collections.abc.Sequence[float3], torques: collections.abc.Sequence[float3], offset: typing.SupportsInt | typing.SupportsIndex = 0) -> int
Get all contact forces and global torques that concern this tracked object. Returns number of force pairs.
.. py:method:: Tracker.GetContactForcesAndGlobalTorqueForAll
.. code-block:: text
GetContactForcesAndGlobalTorqueForAll(self: deme._deme.Tracker, points: collections.abc.Sequence[float3], forces: collections.abc.Sequence[float3], torques: collections.abc.Sequence[float3]) -> int
Get all contact forces and global torques that concern all objects tracked by this tracker. Returns number of force pairs.
.. py:method:: Tracker.GetContactForcesAndGlobalTorqueForAllToDevice
.. code-block:: text
GetContactForcesAndGlobalTorqueForAllToDevice(self: deme._deme.Tracker, points: typing.SupportsInt | typing.SupportsIndex, forces: typing.SupportsInt | typing.SupportsIndex, torques: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> int
Synchronously compact contact points, forces, and global-frame extra torques into caller-owned CUDA ``float3`` arrays. Capacity must cover the total recorded-contact count; the return value is the number of valid rows.
.. py:method:: Tracker.GetContactForcesAndLocalTorque
.. code-block:: text
GetContactForcesAndLocalTorque(self: deme._deme.Tracker, points: collections.abc.Sequence[float3], forces: collections.abc.Sequence[float3], torques: collections.abc.Sequence[float3], offset: typing.SupportsInt | typing.SupportsIndex = 0) -> int
Get all contact forces and local torques that concern this tracked object. Returns number of force pairs.
.. py:method:: Tracker.GetContactForcesAndLocalTorqueForAll
.. code-block:: text
GetContactForcesAndLocalTorqueForAll(self: deme._deme.Tracker, points: collections.abc.Sequence[float3], forces: collections.abc.Sequence[float3], torques: collections.abc.Sequence[float3]) -> int
Get all contact forces and local torques that concern all objects tracked by this tracker. Returns number of force pairs.
.. py:method:: Tracker.GetContactForcesAndLocalTorqueForAllToDevice
.. code-block:: text
GetContactForcesAndLocalTorqueForAllToDevice(self: deme._deme.Tracker, points: typing.SupportsInt | typing.SupportsIndex, forces: typing.SupportsInt | typing.SupportsIndex, torques: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> int
Synchronously compact contact points, forces, and owner-local extra torques into caller-owned CUDA ``float3`` arrays. Capacity must cover the total recorded-contact count; the return value is the number of valid rows.
.. py:method:: Tracker.GetContactForcesForAll
.. code-block:: text
GetContactForcesForAll(self: deme._deme.Tracker, points: collections.abc.Sequence[float3], forces: collections.abc.Sequence[float3]) -> int
Get all contact forces that concern all objects tracked by this tracker. Returns number of force pairs.
.. py:method:: Tracker.GetContactForcesForAllToDevice
.. code-block:: text
GetContactForcesForAllToDevice(self: deme._deme.Tracker, points: typing.SupportsInt | typing.SupportsIndex, forces: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> int
Synchronously compact contact points and forces for all tracked owners into CUDA ``float3`` arrays.
Each pointer must address ``capacity`` elements on logical CUDA ``device``.
Capacity must cover the simulation's total recorded-contact count. The return
value is the number of valid compacted rows. Contact force recording must be
enabled.
.. py:method:: Tracker.GetFamilies
.. code-block:: text
GetFamilies(self: deme._deme.Tracker) -> list[int]
Get the family numbers of all the tracked object.
.. py:method:: Tracker.GetFamily
.. code-block:: text
GetFamily(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> int
Get the family number of the tracked object.
.. py:method:: Tracker.GetMesh
.. code-block:: text
GetMesh(self: deme._deme.Tracker) -> deme::DEMMesh
Get a handle for the mesh this tracker is tracking.
.. py:method:: Tracker.GetMeshNodesGlobal
.. code-block:: text
GetMeshNodesGlobal(self: deme._deme.Tracker) -> list[float3]
Get the current locations of all the nodes in the mesh being tracked.
.. py:method:: Tracker.GetOwnerID
.. code-block:: text
GetOwnerID(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> int
Return the simulation-wide owner ID at ``offset`` within this tracker.
.. py:method:: Tracker.GetOwnerIDs
.. code-block:: text
GetOwnerIDs(self: deme._deme.Tracker) -> list[int]
Return simulation-wide owner IDs for every owner covered by this tracker.
.. py:method:: Tracker.GetOwnerWildcardValue
.. code-block:: text
GetOwnerWildcardValue(self: deme._deme.Tracker, name: str, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> float
Get the owner's wildcard value.
.. py:method:: Tracker.GetOwnerWildcardValues
.. code-block:: text
GetOwnerWildcardValues(self: deme._deme.Tracker, name: str) -> list[float]
Get the owner wildcard values for all the owners entities tracked by this tracker.
.. py:method:: Tracker.Mass
.. code-block:: text
Mass(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> float
Get the mass of the tracked object.
.. py:method:: Tracker.Masses
.. code-block:: text
Masses(self: deme._deme.Tracker) -> list[float]
Get the masses of all the tracked objects.
.. py:method:: Tracker.MassesToDevice
.. code-block:: text
MassesToDevice(self: deme._deme.Tracker, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy all tracked masses to caller-owned CUDA ``float32`` storage. ``capacity`` is in elements; ``device`` is the allocation's logical CUDA device.
.. py:method:: Tracker.MOI
.. code-block:: text
MOI(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[float]
Get the moment of inertia (in principal axis frame) of the tracked object.
.. py:method:: Tracker.MOIs
.. code-block:: text
MOIs(self: deme._deme.Tracker) -> list[list[float]]
Get the moment of inertia (in principal axis frame) of all the tracked objects.
.. py:method:: Tracker.MOIsToDevice
.. code-block:: text
MOIsToDevice(self: deme._deme.Tracker, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy all tracked principal moments of inertia to caller-owned CUDA ``float3`` storage. ``capacity`` is in elements; ``device`` is the allocation's logical CUDA device.
.. py:method:: Tracker.OrientationQuaternions
.. code-block:: text
OrientationQuaternions(self: deme._deme.Tracker) -> list[list[float]]
Return local-to-global orientation quaternions for all tracked owners. Each quaternion uses Python ordering ``(x, y, z, w)``.
.. py:method:: Tracker.OrientationQuaternionsToDevice
.. code-block:: text
OrientationQuaternionsToDevice(self: deme._deme.Tracker, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy all tracked local-to-global quaternions to caller-owned CUDA ``float4`` storage in ``(x, y, z, w)`` order. ``capacity`` is in elements.
.. py:method:: Tracker.OriQ
.. code-block:: text
OriQ(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[float]
Return the quaternion rotating the owner-local frame to the global frame. Python ordering is ``(x, y, z, w)`` (Chrono ``(e1, e2, e3, e0)``).
.. py:method:: Tracker.OwnerWildcardValuesToDevice
.. code-block:: text
OwnerWildcardValuesToDevice(self: deme._deme.Tracker, name: str, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy the named ``float32`` owner wildcard for every tracked owner to caller-owned CUDA storage. ``capacity`` is in owner elements.
.. py:method:: Tracker.Pos
.. code-block:: text
Pos(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[float]
Return the global-frame center-of-mass position of the tracked owner at ``offset``.
.. py:method:: Tracker.Positions
.. code-block:: text
Positions(self: deme._deme.Tracker) -> list[list[float]]
Return global-frame center-of-mass positions for all owners covered by this tracker.
.. py:method:: Tracker.PositionsToDevice
.. code-block:: text
PositionsToDevice(self: deme._deme.Tracker, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy all tracked global positions to caller-owned CUDA memory.
``pointer`` is an integer address to writable, CUDA-accessible ``float3``
storage on logical CUDA ``device``. ``capacity`` is measured in ``float3``
elements and must cover every owner in this tracker. The caller owns the
allocation and must keep it alive through the call.
.. py:method:: Tracker.SetAngVel
.. code-block:: text
SetAngVel(*args, **kwargs)
Overloaded function.
1. SetAngVel(self: deme._deme.Tracker, angVel: float3, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> None
Set the angular velocity of this tracked object in its own local coordinate system.
2. SetAngVel(self: deme._deme.Tracker, angVel: collections.abc.Sequence[float3]) -> None
Set the angular velocity of consecutive tracked objects in their own local coordinate systems.
.. py:method:: Tracker.SetFamily
.. code-block:: text
SetFamily(*args, **kwargs)
Overloaded function.
1. SetFamily(self: deme._deme.Tracker, fam_num: typing.SupportsInt | typing.SupportsIndex) -> None
Change the family numbers of all the entities tracked by this tracker.
2. SetFamily(self: deme._deme.Tracker, fam_num: typing.SupportsInt | typing.SupportsIndex, offset: typing.SupportsInt | typing.SupportsIndex) -> None
Change the family number of one entities tracked by this tracker.
.. py:method:: Tracker.SetOriQ
.. code-block:: text
SetOriQ(*args, **kwargs)
Overloaded function.
1. SetOriQ(self: deme._deme.Tracker, oriQ: float4, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> None
Set the quaternion which represents the orientation of this tracked object's coordinate system.
2. SetOriQ(self: deme._deme.Tracker, oriQ: collections.abc.Sequence[float4]) -> None
Set the quaternion which represents the orientation of consecutive tracked objects' coordinate systems.
.. py:method:: Tracker.SetOwnerWildcardValue
.. code-block:: text
SetOwnerWildcardValue(self: deme._deme.Tracker, name: str, wc: typing.SupportsFloat | typing.SupportsIndex, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> None
Set a wildcard value of the owner this tracker is tracking.
.. py:method:: Tracker.SetOwnerWildcardValues
.. code-block:: text
SetOwnerWildcardValues(self: deme._deme.Tracker, name: str, wc: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Set a wildcard value of the owner this tracker is tracking.
.. py:method:: Tracker.SetPos
.. code-block:: text
SetPos(*args, **kwargs)
Overloaded function.
1. SetPos(self: deme._deme.Tracker, pos: float3, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> None
Set the position of this tracked object.
2. SetPos(self: deme._deme.Tracker, pos: collections.abc.Sequence[float3]) -> None
Set the positions of consecutive tracked objects.
.. py:method:: Tracker.SetVel
.. code-block:: text
SetVel(*args, **kwargs)
Overloaded function.
1. SetVel(self: deme._deme.Tracker, vel: float3, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> None
Set the velocity of this tracked object in global frame.
2. SetVel(self: deme._deme.Tracker, vel: collections.abc.Sequence[float3]) -> None
Set the velocity of consecutive tracked objects in global frame.
.. py:method:: Tracker.UpdateMesh
.. code-block:: text
UpdateMesh(self: deme._deme.Tracker, new_nodes: collections.abc.Sequence[float3]) -> None
Apply the new mesh node positions such that the tracked mesh is replaced by the new_nodes.
.. py:method:: Tracker.UpdateMeshByIncrement
.. code-block:: text
UpdateMeshByIncrement(self: deme._deme.Tracker, deformation: collections.abc.Sequence[float3]) -> None
Change the coordinates of each mesh node by the given amount.
.. py:method:: Tracker.Vel
.. code-block:: text
Vel(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[float]
Return the global-frame linear velocity of the owner at ``offset``.
.. py:method:: Tracker.Velocities
.. code-block:: text
Velocities(self: deme._deme.Tracker) -> list[list[float]]
Return global-frame linear velocities for all tracked owners.
.. py:method:: Tracker.VelocitiesToDevice
.. code-block:: text
VelocitiesToDevice(self: deme._deme.Tracker, pointer: typing.SupportsInt | typing.SupportsIndex, capacity: typing.SupportsInt | typing.SupportsIndex, device: typing.SupportsInt | typing.SupportsIndex) -> None
Synchronously copy all tracked global linear velocities to caller-owned CUDA ``float3`` storage. ``capacity`` is in elements; ``device`` is the allocation's logical CUDA device.
.. py:class:: CNT_OUTPUT_CONTENT
.. code-block:: text
Members:
CNT_TYPE
FORCE
POINT
COMPONENT
NORMAL
TORQUE
CNT_WILDCARD
OWNER
GEO_ID
NICKNAME
.. py:method:: CNT_OUTPUT_CONTENT.__init__
.. code-block:: text
__init__(self: deme._deme.CNT_OUTPUT_CONTENT, value: typing.SupportsInt | typing.SupportsIndex) -> None
.. py:attribute:: CNT_OUTPUT_CONTENT.CNT_TYPE
.. code-block:: text
Members:
CNT_TYPE
FORCE
POINT
COMPONENT
NORMAL
TORQUE
CNT_WILDCARD
OWNER
GEO_ID
NICKNAME
.. py:attribute:: CNT_OUTPUT_CONTENT.CNT_WILDCARD
.. code-block:: text
Members:
CNT_TYPE
FORCE
POINT
COMPONENT
NORMAL
TORQUE
CNT_WILDCARD
OWNER
GEO_ID
NICKNAME
.. py:attribute:: CNT_OUTPUT_CONTENT.COMPONENT
.. code-block:: text
Members:
CNT_TYPE
FORCE
POINT
COMPONENT
NORMAL
TORQUE
CNT_WILDCARD
OWNER
GEO_ID
NICKNAME
.. py:attribute:: CNT_OUTPUT_CONTENT.FORCE
.. code-block:: text
Members:
CNT_TYPE
FORCE
POINT
COMPONENT
NORMAL
TORQUE
CNT_WILDCARD
OWNER
GEO_ID
NICKNAME
.. py:attribute:: CNT_OUTPUT_CONTENT.GEO_ID
.. code-block:: text
Members:
CNT_TYPE
FORCE
POINT
COMPONENT
NORMAL
TORQUE
CNT_WILDCARD
OWNER
GEO_ID
NICKNAME
.. py:attribute:: CNT_OUTPUT_CONTENT.NICKNAME
.. code-block:: text
Members:
CNT_TYPE
FORCE
POINT
COMPONENT
NORMAL
TORQUE
CNT_WILDCARD
OWNER
GEO_ID
NICKNAME
.. py:attribute:: CNT_OUTPUT_CONTENT.NORMAL
.. code-block:: text
Members:
CNT_TYPE
FORCE
POINT
COMPONENT
NORMAL
TORQUE
CNT_WILDCARD
OWNER
GEO_ID
NICKNAME
.. py:attribute:: CNT_OUTPUT_CONTENT.OWNER
.. code-block:: text
Members:
CNT_TYPE
FORCE
POINT
COMPONENT
NORMAL
TORQUE
CNT_WILDCARD
OWNER
GEO_ID
NICKNAME
.. py:attribute:: CNT_OUTPUT_CONTENT.POINT
.. code-block:: text
Members:
CNT_TYPE
FORCE
POINT
COMPONENT
NORMAL
TORQUE
CNT_WILDCARD
OWNER
GEO_ID
NICKNAME
.. py:attribute:: CNT_OUTPUT_CONTENT.TORQUE
.. code-block:: text
Members:
CNT_TYPE
FORCE
POINT
COMPONENT
NORMAL
TORQUE
CNT_WILDCARD
OWNER
GEO_ID
NICKNAME
.. py:class:: ContactInfoContainer
.. code-block:: text
Named arrays describing contacts selected by ``DEMSolver.SetContactOutputContent``.
.. py:method:: ContactInfoContainer.__init__
.. code-block:: text
__init__(self: deme._deme.ContactInfoContainer, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: collections.abc.Sequence[tuple[str, str]]) -> None
.. py:method:: ContactInfoContainer.GetAGeo
.. code-block:: text
GetAGeo(self: deme._deme.ContactInfoContainer) -> list[int]
Get AGeo number from the container.
.. py:method:: ContactInfoContainer.GetAOwner
.. code-block:: text
GetAOwner(self: deme._deme.ContactInfoContainer) -> list[int]
Get AOwner number from the container.
.. py:method:: ContactInfoContainer.GetAOwnerFamily
.. code-block:: text
GetAOwnerFamily(self: deme._deme.ContactInfoContainer) -> list[int]
Get AOwnerFamily number from the container.
.. py:method:: ContactInfoContainer.GetBGeo
.. code-block:: text
GetBGeo(self: deme._deme.ContactInfoContainer) -> list[int]
Get BGeo number from the container.
.. py:method:: ContactInfoContainer.GetBOwner
.. code-block:: text
GetBOwner(self: deme._deme.ContactInfoContainer) -> list[int]
Get BOwner number from the container.
.. py:method:: ContactInfoContainer.GetBOwnerFamily
.. code-block:: text
GetBOwnerFamily(self: deme._deme.ContactInfoContainer) -> list[int]
Get BOwnerFamily number from the container.
.. py:method:: ContactInfoContainer.GetContactType
.. code-block:: text
GetContactType(self: deme._deme.ContactInfoContainer) -> list[str]
Get contact type as strings from the container.
.. py:method:: ContactInfoContainer.GetForce
.. code-block:: text
GetForce(self: deme._deme.ContactInfoContainer) -> list[float3]
Get force as vectors from the container.
.. py:method:: ContactInfoContainer.GetNormal
.. code-block:: text
GetNormal(self: deme._deme.ContactInfoContainer) -> list[float3]
Get contact normal as vectors from the container.
.. py:method:: ContactInfoContainer.GetPoint
.. code-block:: text
GetPoint(self: deme._deme.ContactInfoContainer) -> list[float3]
Get contact points as vectors from the container.
.. py:method:: ContactInfoContainer.GetTorque
.. code-block:: text
GetTorque(self: deme._deme.ContactInfoContainer) -> list[float3]
Get torque as vectors from the container.
.. py:class:: DataContainer
.. code-block:: text
String-keyed container used to return named arrays from DEME.
.. py:method:: DataContainer.__init__
.. code-block:: text
__init__(self: deme._deme.DataContainer) -> None
Create an empty data container.
.. py:method:: DataContainer.Get
.. code-block:: text
Get(self: deme._deme.DataContainer, key: str) -> list[float]
Return the stored float array named ``key`` by reference. This is primarily used for wildcard output.
.. py:class:: DEMClumpBatch
.. code-block:: text
Cached setup data for a batch of clump instances.
.. py:method:: DEMClumpBatch.__init__
.. code-block:: text
__init__(self: deme._deme.DEMClumpBatch, count: typing.SupportsInt | typing.SupportsIndex) -> None
Create setup storage for ``count`` clumps.
.. py:method:: DEMClumpBatch.AddExistingContactWildcard
.. code-block:: text
AddExistingContactWildcard(self: deme._deme.DEMClumpBatch, name: str, values: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Add one named restart contact-wildcard array after ``SetExistingContacts``.
.. py:method:: DEMClumpBatch.AddOwnerWildcard
.. code-block:: text
AddOwnerWildcard(*args, **kwargs)
Overloaded function.
1. AddOwnerWildcard(self: deme._deme.DEMClumpBatch, name: str, values: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Add one initial owner wildcard with one value per clump.
2. AddOwnerWildcard(self: deme._deme.DEMClumpBatch, name: str, value: typing.SupportsFloat | typing.SupportsIndex) -> None
Add one initial owner wildcard with the same value for every clump.
.. py:method:: DEMClumpBatch.GetNumClumps
.. code-block:: text
GetNumClumps(self: deme._deme.DEMClumpBatch) -> int
Return the number of clumps in this batch.
.. py:method:: DEMClumpBatch.GetNumContacts
.. code-block:: text
GetNumContacts(self: deme._deme.DEMClumpBatch) -> int
Return the number of pre-existing contacts supplied for restart initialization.
.. py:method:: DEMClumpBatch.GetNumSpheres
.. code-block:: text
GetNumSpheres(self: deme._deme.DEMClumpBatch) -> int
Return the total number of component spheres represented by this batch.
.. py:method:: DEMClumpBatch.SetExistingContacts
.. code-block:: text
SetExistingContacts(self: deme._deme.DEMClumpBatch, pairs: collections.abc.Sequence[tuple[typing.SupportsInt | typing.SupportsIndex, typing.SupportsInt | typing.SupportsIndex]]) -> None
Supply sphere-sphere contact owner-ID pairs relative to this batch when restoring a simulation.
.. py:method:: DEMClumpBatch.SetExistingContactWildcards
.. code-block:: text
SetExistingContactWildcards(self: deme._deme.DEMClumpBatch, wildcards: collections.abc.Mapping[str, collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]]) -> None
Supply named restart wildcard arrays after ``SetExistingContacts``. Every array must match the pre-existing contact count.
.. py:method:: DEMClumpBatch.SetFamilies
.. code-block:: text
SetFamilies(*args, **kwargs)
Overloaded function.
1. SetFamilies(self: deme._deme.DEMClumpBatch, families: collections.abc.Sequence[typing.SupportsInt | typing.SupportsIndex]) -> None
Set one family number per clump. Family behavior is configured on the solver.
2. SetFamilies(self: deme._deme.DEMClumpBatch, family: typing.SupportsInt | typing.SupportsIndex) -> None
Set the same family number for every clump.
.. py:method:: DEMClumpBatch.SetFamily
.. code-block:: text
SetFamily(self: deme._deme.DEMClumpBatch, family: typing.SupportsInt | typing.SupportsIndex) -> None
Set the same family number for every clump.
.. py:method:: DEMClumpBatch.SetOwnerWildcards
.. code-block:: text
SetOwnerWildcards(self: deme._deme.DEMClumpBatch, wildcards: collections.abc.Mapping[str, collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]]) -> None
Set named initial owner-wildcard arrays. Every array must match the clump count.
.. py:method:: DEMClumpBatch.SetType
.. code-block:: text
SetType(self: deme._deme.DEMClumpBatch, type: deme._deme.DEMClumpTemplate) -> None
Assign the same clump template to every instance.
.. py:method:: DEMClumpBatch.SetTypes
.. code-block:: text
SetTypes(*args, **kwargs)
Overloaded function.
1. SetTypes(self: deme._deme.DEMClumpBatch, types: collections.abc.Sequence[deme._deme.DEMClumpTemplate]) -> None
Assign one clump template per instance. The sequence length must equal the batch size.
2. SetTypes(self: deme._deme.DEMClumpBatch, type: deme._deme.DEMClumpTemplate) -> None
Assign the same clump template to every instance.
.. py:method:: DEMClumpBatch.SetVel
.. code-block:: text
SetVel(*args, **kwargs)
Overloaded function.
1. SetVel(self: deme._deme.DEMClumpBatch, velocities: collections.abc.Sequence[collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]]) -> None
Set one global initial linear velocity vector per clump.
2. SetVel(self: deme._deme.DEMClumpBatch, velocity: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Set the same global initial linear velocity for every clump.
.. py:class:: DEMClumpTemplate
.. code-block:: text
Reusable rigid clump topology composed of one or more sphere components.
.. py:method:: DEMClumpTemplate.__init__
.. code-block:: text
__init__(self: deme._deme.DEMClumpTemplate) -> None
Create an empty clump template.
.. py:method:: DEMClumpTemplate.AssignName
.. code-block:: text
AssignName(self: deme._deme.DEMClumpTemplate, name: str) -> None
Assign the clump type name written to output files.
.. py:method:: DEMClumpTemplate.InformCentroidPrincipal
.. code-block:: text
InformCentroidPrincipal(self: deme._deme.DEMClumpTemplate, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], orientation: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Re-express component positions about the supplied center of mass and principal orientation.
.. py:method:: DEMClumpTemplate.Mass
.. code-block:: text
Mass(self: deme._deme.DEMClumpTemplate) -> float
Return the clump mass.
.. py:method:: DEMClumpTemplate.MOI
.. code-block:: text
MOI(self: deme._deme.DEMClumpTemplate) -> float3
Return principal moments of inertia in the clump-local principal frame.
.. py:method:: DEMClumpTemplate.Move
.. code-block:: text
Move(self: deme._deme.DEMClumpTemplate, translation: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], quaternion: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Apply a translation and quaternion rotation to the component coordinates.
.. py:method:: DEMClumpTemplate.ReadComponentFromFile
.. code-block:: text
ReadComponentFromFile(self: deme._deme.DEMClumpTemplate, filename: str, x_id: str = 'x', y_id: str = 'y', z_id: str = 'z', r_id: str = 'r') -> int
Load sphere-component positions and radii from a delimited file.
.. py:method:: DEMClumpTemplate.Scale
.. code-block:: text
Scale(self: deme._deme.DEMClumpTemplate, factor: typing.SupportsFloat | typing.SupportsIndex) -> None
Uniformly scale component radii and relative positions.
.. py:method:: DEMClumpTemplate.SetMass
.. code-block:: text
SetMass(self: deme._deme.DEMClumpTemplate, mass: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the clump mass.
.. py:method:: DEMClumpTemplate.SetMaterial
.. code-block:: text
SetMaterial(*args, **kwargs)
Overloaded function.
1. SetMaterial(self: deme._deme.DEMClumpTemplate, materials: collections.abc.Sequence[deme._deme.DEMMaterial]) -> None
Assign one material per sphere component. The sequence length must equal the component count.
2. SetMaterial(self: deme._deme.DEMClumpTemplate, material: deme._deme.DEMMaterial) -> None
Assign the same material to every sphere component.
.. py:method:: DEMClumpTemplate.SetMOI
.. code-block:: text
SetMOI(self: deme._deme.DEMClumpTemplate, MOI: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Set the three principal moments of inertia in the clump-local frame.
.. py:method:: DEMClumpTemplate.SetVolume
.. code-block:: text
SetVolume(self: deme._deme.DEMClumpTemplate, volume: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the clump volume, which is required for void-ratio queries.
.. py:class:: DEMCombinedInstances
.. code-block:: text
A batch of instantiated combined owners and their member-owner metadata.
.. py:method:: DEMCombinedInstances.__init__
.. code-block:: text
__init__(self: deme._deme.DEMCombinedInstances) -> None
Create an empty combined-instance batch.
.. py:method:: DEMCombinedInstances.AddOwnerWildcard
.. code-block:: text
AddOwnerWildcard(*args, **kwargs)
Overloaded function.
1. AddOwnerWildcard(self: deme._deme.DEMCombinedInstances, name: str, vals: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Add an owner wildcard to all member owners with per-owner values.
2. AddOwnerWildcard(self: deme._deme.DEMCombinedInstances, name: str, val: typing.SupportsFloat | typing.SupportsIndex) -> None
Add an owner wildcard to all member owners with a uniform value.
.. py:method:: DEMCombinedInstances.GetNumOwners
.. code-block:: text
GetNumOwners(self: deme._deme.DEMCombinedInstances) -> int
Get total number of member owners in this combined batch.
.. py:class:: DEMCombinedTemplate
.. code-block:: text
Reusable rigid grouping of clump or mesh templates with fixed member-relative transforms.
.. py:method:: DEMCombinedTemplate.__init__
.. code-block:: text
__init__(self: deme._deme.DEMCombinedTemplate) -> None
Create an empty combined-owner template.
.. py:class:: DEMERuntimeDataHelper
.. code-block:: text
No class description is currently available.
.. py:method:: DEMERuntimeDataHelper.__init__
.. code-block:: text
__init__(self: deme._deme.DEMERuntimeDataHelper) -> None
.. py:method:: DEMERuntimeDataHelper.SetPathPrefix
.. code-block:: text
Convert a function to be a static method.
A static method does not receive an implicit first argument.
To declare a static method, use this idiom:
class C:
@staticmethod
def f(arg1, arg2, argN):
...
It can be called either on the class (e.g. C.f()) or on an instance
(e.g. C().f()). Both the class and the instance are ignored, and
neither is passed implicitly as the first argument to the method.
Static methods in Python are similar to those found in Java or C++.
For a more advanced concept, see the classmethod builtin.
.. py:class:: DEMExternObj
.. code-block:: text
Analytical external owner composed of planes, cylinders, and related primitives.
.. py:method:: DEMExternObj.__init__
.. code-block:: text
__init__(self: deme._deme.DEMExternObj) -> None
Create an empty analytical external object.
.. py:method:: DEMExternObj.AddCylinder
.. code-block:: text
AddCylinder(self: deme._deme.DEMExternObj, pos: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], axis: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], rad: typing.SupportsFloat | typing.SupportsIndex, material: deme._deme.DEMMaterial, normal: bool = False) -> None
Add an infinite cylinder along a user-specified object-local axis.
.. py:method:: DEMExternObj.AddPlane
.. code-block:: text
AddPlane(self: deme._deme.DEMExternObj, point: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], normal: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], material: deme._deme.DEMMaterial) -> None
Add an infinite plane specified by a point and normal in the object's local frame.
.. py:method:: DEMExternObj.AddZCylinder
.. code-block:: text
AddZCylinder(self: deme._deme.DEMExternObj, pos: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], rad: typing.SupportsFloat | typing.SupportsIndex, material: deme._deme.DEMMaterial, normal: bool = False) -> None
Add an infinite cylinder aligned with the object-local Z axis.
.. py:attribute:: DEMExternObj.entity_params
.. code-block:: text
Bound attribute.
.. py:attribute:: DEMExternObj.family_code
.. code-block:: text
Bound attribute.
.. py:attribute:: DEMExternObj.init_oriQ
.. code-block:: text
Bound attribute.
.. py:attribute:: DEMExternObj.init_pos
.. code-block:: text
Bound attribute.
.. py:attribute:: DEMExternObj.load_order
.. code-block:: text
Bound attribute.
.. py:method:: DEMExternObj.Mass
.. code-block:: text
Mass(self: deme._deme.DEMExternObj) -> float
Return the object's mass.
.. py:attribute:: DEMExternObj.mass
.. code-block:: text
Bound attribute.
.. py:attribute:: DEMExternObj.materials
.. code-block:: text
Bound attribute.
.. py:attribute:: DEMExternObj.MOI
.. code-block:: text
Bound attribute.
.. py:method:: DEMExternObj.SetFamily
.. code-block:: text
SetFamily(self: deme._deme.DEMExternObj, family: typing.SupportsInt | typing.SupportsIndex) -> None
Set the contact family number before initialization.
.. py:method:: DEMExternObj.SetInitPos
.. code-block:: text
SetInitPos(self: deme._deme.DEMExternObj, position: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Set the initial global center-of-mass position before initialization.
.. py:method:: DEMExternObj.SetInitQuat
.. code-block:: text
SetInitQuat(self: deme._deme.DEMExternObj, quaternion: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Set the initial local-to-global orientation quaternion ``(x, y, z, w)`` before initialization.
.. py:method:: DEMExternObj.SetMass
.. code-block:: text
SetMass(self: deme._deme.DEMExternObj, mass: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the object mass.
.. py:method:: DEMExternObj.SetMOI
.. code-block:: text
SetMOI(self: deme._deme.DEMExternObj, MOI: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Set the three principal moments of inertia in the object-local frame.
.. py:attribute:: DEMExternObj.types
.. code-block:: text
Bound attribute.
.. py:class:: DEMForceModel
.. code-block:: text
No class description is currently available.
.. py:method:: DEMForceModel.__init__
.. code-block:: text
__init__(self: deme._deme.DEMForceModel, model: deme::FORCE_MODEL) -> None
Create a force-model definition of the selected built-in type.
.. py:method:: DEMForceModel.DefineCustomModel
.. code-block:: text
DefineCustomModel(self: deme._deme.DEMForceModel, arg0: str) -> None
Define user-custom force model with a string which is your force calculation code.
.. py:method:: DEMForceModel.DefineCustomModelPrerequisites
.. code-block:: text
DefineCustomModelPrerequisites(self: deme._deme.DEMForceModel, arg0: str) -> None
Define user-custom force model's utility __device__ functions with a string.
.. py:method:: DEMForceModel.ReadCustomModelFile
.. code-block:: text
ReadCustomModelFile(self: deme._deme.DEMForceModel, arg0: std::filesystem::__cxx11::path) -> int
Read user-custom force model from a file (which by default should reside in kernel/DEMUserScripts), which contains your force calculation code. Returns 0 if read successfully, otherwise 1.
.. py:method:: DEMForceModel.ReadCustomModelPrerequisitesFile
.. code-block:: text
ReadCustomModelPrerequisitesFile(self: deme._deme.DEMForceModel, arg0: std::filesystem::__cxx11::path) -> int
Read user-custom force model's utility __device__ functions from a file (which by default should reside in kernel/DEMUserScripts). Returns 0 if read successfully, otherwise 1.
.. py:method:: DEMForceModel.SetForceModelType
.. code-block:: text
SetForceModelType(self: deme._deme.DEMForceModel, arg0: deme::FORCE_MODEL) -> None
Set the contact force model type
.. py:method:: DEMForceModel.SetMustHaveMatProp
.. code-block:: text
SetMustHaveMatProp(self: deme._deme.DEMForceModel, arg0: collections.abc.Set[str]) -> None
Specifiy the material properties that this force model will use
.. py:method:: DEMForceModel.SetMustPairwiseMatProp
.. code-block:: text
SetMustPairwiseMatProp(self: deme._deme.DEMForceModel, arg0: collections.abc.Set[str]) -> None
Specifiy the material properties that are pair-wise (instead of being associated with each individual material).
.. py:method:: DEMForceModel.SetPerContactWildcards
.. code-block:: text
SetPerContactWildcards(self: deme._deme.DEMForceModel, arg0: collections.abc.Set[str]) -> None
Set the names for the extra quantities that will be associated with each contact pair. For example, history-based models should have 3 float arrays to store contact history. Only float is supported. Note the initial value of all contact wildcard arrays is automatically 0
.. py:method:: DEMForceModel.SetPerOwnerWildcards
.. code-block:: text
SetPerOwnerWildcards(self: deme._deme.DEMForceModel, arg0: collections.abc.Set[str]) -> None
Set the names for the extra quantities that will be associated with each owner. For example, you can use this to associate a cohesion parameter to each particle. Only float is supported.
.. py:class:: DEMInitializer
.. code-block:: text
No class description is currently available.
.. py:method:: DEMInitializer.__init__
.. code-block:: text
__init__(self: deme._deme.DEMInitializer) -> None
.. py:class:: DEMInspector
.. code-block:: text
Evaluate a configured aggregate or spatial quantity from initialized simulation state.
.. py:method:: DEMInspector.__init__
.. code-block:: text
__init__(self: deme._deme.DEMInspector, arg0: deme::DEMSolver, arg1: deme::DEMDynamicThread, arg2: str) -> None
.. py:method:: DEMInspector.GetValue
.. code-block:: text
GetValue(self: deme._deme.DEMInspector) -> float
Synchronize as needed and return the inspector's current scalar value.
.. py:class:: DEMMaterial
.. code-block:: text
Material property name/value pairs used by a contact force model.
.. py:method:: DEMMaterial.__init__
.. code-block:: text
__init__(self: deme._deme.DEMMaterial, properties: collections.abc.Mapping[str, typing.SupportsFloat | typing.SupportsIndex]) -> None
Create material properties. Normally use ``DEMSolver.LoadMaterial`` so the material is registered.
.. py:attribute:: DEMMaterial.load_order
.. code-block:: text
Bound attribute.
.. py:attribute:: DEMMaterial.mat_prop
.. code-block:: text
Bound attribute.
.. py:class:: DEMMesh
.. code-block:: text
Connected triangle-mesh template or external mesh owner.
.. py:method:: DEMMesh.__init__
.. code-block:: text
__init__(*args, **kwargs)
Overloaded function.
1. __init__(self: deme._deme.DEMMesh) -> None
Create an empty mesh.
2. __init__(self: deme._deme.DEMMesh, filename: str) -> None
Load a mesh from a Wavefront OBJ file.
3. __init__(self: deme._deme.DEMMesh, filename: str, material: deme._deme.DEMMaterial) -> None
Load a Wavefront OBJ mesh and assign one material to every triangle.
.. py:method:: DEMMesh.ArePatchesExplicitlySet
.. code-block:: text
ArePatchesExplicitlySet(self: deme._deme.DEMMesh) -> bool
Return whether patch IDs were explicitly supplied or computed.
.. py:method:: DEMMesh.Clear
.. code-block:: text
Clear(self: deme._deme.DEMMesh) -> None
Remove all mesh geometry and cached attributes.
.. py:method:: DEMMesh.ClearWildcards
.. code-block:: text
ClearWildcards(self: deme._deme.DEMMesh) -> None
Remove cached triangle wildcard values.
.. py:method:: DEMMesh.DisableShell
.. code-block:: text
DisableShell(self: deme._deme.DEMMesh) -> None
Disable finite-thickness shell mode.
.. py:method:: DEMMesh.GetCoordsVertices
.. code-block:: text
GetCoordsVertices(self: deme._deme.DEMMesh) -> list[list[float]]
Return mesh vertex coordinates as ``[[x, y, z], ...]``.
.. py:method:: DEMMesh.GetIndicesVertexes
.. code-block:: text
GetIndicesVertexes(self: deme._deme.DEMMesh) -> list[list[int]]
Return triangle vertex-index triplets.
.. py:method:: DEMMesh.GetNumNodes
.. code-block:: text
GetNumNodes(self: deme._deme.DEMMesh) -> int
Get the number of nodes in the mesh
.. py:method:: DEMMesh.GetNumPatches
.. code-block:: text
GetNumPatches(self: deme._deme.DEMMesh) -> int
Get the number of mesh patches.
.. py:method:: DEMMesh.GetNumTriangles
.. code-block:: text
GetNumTriangles(self: deme._deme.DEMMesh) -> int
Get the number of triangles already added to this mesh
.. py:method:: DEMMesh.GetPatchIDs
.. code-block:: text
GetPatchIDs(self: deme._deme.DEMMesh) -> list[int]
Get one patch ID per triangle.
.. py:method:: DEMMesh.GetShellThickness
.. code-block:: text
GetShellThickness(self: deme._deme.DEMMesh) -> float
Return the full shell thickness.
.. py:method:: DEMMesh.GetTriangle
.. code-block:: text
GetTriangle(self: deme._deme.DEMMesh, arg0: typing.SupportsInt | typing.SupportsIndex) -> deme::DEMTriangle
Access the n-th triangle in mesh
.. py:method:: DEMMesh.InformCentroidPrincipal
.. code-block:: text
InformCentroidPrincipal(self: deme._deme.DEMMesh, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], orientation: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Re-express mesh vertices about the supplied center of mass and principal orientation.
.. py:method:: DEMMesh.IsShell
.. code-block:: text
IsShell(self: deme._deme.DEMMesh) -> bool
Return whether this mesh is configured as a shell.
.. py:method:: DEMMesh.LoadWavefrontMesh
.. code-block:: text
LoadWavefrontMesh(self: deme._deme.DEMMesh, input_file: str, load_normals: bool = True, load_uv: bool = False) -> bool
Load a triangle mesh saved as a Wavefront .obj file
.. py:method:: DEMMesh.Mass
.. code-block:: text
Mass(self: deme._deme.DEMMesh) -> float
Return the mesh owner's mass.
.. py:method:: DEMMesh.Mirror
.. code-block:: text
Mirror(self: deme._deme.DEMMesh, point: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], normal: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Mirror vertices about a plane specified by a point and normal.
.. py:method:: DEMMesh.MOI
.. code-block:: text
MOI(self: deme._deme.DEMMesh) -> float3
Return principal moments of inertia in the mesh-local frame.
.. py:method:: DEMMesh.Move
.. code-block:: text
Move(self: deme._deme.DEMMesh, translation: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], quaternion: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Apply a translation and quaternion rotation to mesh vertices.
.. py:method:: DEMMesh.Scale
.. code-block:: text
Scale(*args, **kwargs)
Overloaded function.
1. Scale(self: deme._deme.DEMMesh, factor: typing.SupportsFloat | typing.SupportsIndex) -> None
Uniformly scale mesh vertices.
2. Scale(self: deme._deme.DEMMesh, factors: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Scale mesh vertices independently along X, Y, and Z.
.. py:method:: DEMMesh.SetFamily
.. code-block:: text
SetFamily(self: deme._deme.DEMMesh, family: typing.SupportsInt | typing.SupportsIndex) -> None
Set the contact family number before initialization.
.. py:method:: DEMMesh.SetInitPos
.. code-block:: text
SetInitPos(self: deme._deme.DEMMesh, position: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Set the initial global center-of-mass position.
.. py:method:: DEMMesh.SetInitQuat
.. code-block:: text
SetInitQuat(self: deme._deme.DEMMesh, quaternion: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Set the initial local-to-global orientation quaternion ``(x, y, z, w)``.
.. py:method:: DEMMesh.SetMass
.. code-block:: text
SetMass(self: deme._deme.DEMMesh, mass: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the mesh owner's mass.
.. py:method:: DEMMesh.SetMaterial
.. code-block:: text
SetMaterial(*args, **kwargs)
Overloaded function.
1. SetMaterial(self: deme._deme.DEMMesh, material: deme._deme.DEMMaterial) -> None
Assign the same material to every mesh triangle.
2. SetMaterial(self: deme._deme.DEMMesh, materials: collections.abc.Sequence[deme._deme.DEMMaterial]) -> None
Assign one material per triangle. The sequence length must equal the triangle count.
.. py:method:: DEMMesh.SetMOI
.. code-block:: text
SetMOI(self: deme._deme.DEMMesh, MOI: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None
Set the three principal moments of inertia in the mesh-local frame.
.. py:method:: DEMMesh.SetPatchIDs
.. code-block:: text
SetPatchIDs(self: deme._deme.DEMMesh, patch_ids: collections.abc.Sequence[typing.SupportsInt | typing.SupportsIndex]) -> None
Set one patch ID per triangle.
.. py:method:: DEMMesh.SetShellThickness
.. code-block:: text
SetShellThickness(self: deme._deme.DEMMesh, thickness: typing.SupportsFloat | typing.SupportsIndex) -> None
Treat this mesh as a finite-thickness shell.
.. py:method:: DEMMesh.SplitIntoConvexPatches
.. code-block:: text
SplitIntoConvexPatches(self: deme._deme.DEMMesh, hard_angle_deg: typing.SupportsFloat | typing.SupportsIndex = 30.0) -> int
Split the mesh into connected angle-threshold patches.
.. py:method:: DEMMesh.UseNormals
.. code-block:: text
UseNormals(self: deme._deme.DEMMesh, use: bool = True) -> None
Instruct that when the mesh is initialized into the system, it will re-order the nodes of each triangle so that the normals derived from right-hand-rule are the same as the normals in the mesh file
.. py:method:: DEMMesh.WriteWavefront
.. code-block:: text
WriteWavefront(self: str, output_file: collections.abc.Sequence[deme._deme.DEMMesh]) -> None
Write the mesh geometry to a Wavefront OBJ file.
.. py:class:: DEMTrackedObj
.. code-block:: text
No class description is currently available.
.. py:method:: DEMTrackedObj.__init__
.. code-block:: text
__init__(self: deme._deme.DEMTrackedObj, arg0: deme._deme.DEMTrackedObj) -> None
.. py:class:: FORCE_MODEL
.. code-block:: text
Members:
HERTZIAN
HERTZIAN_FRICTIONLES
CUSTOM
.. py:method:: FORCE_MODEL.__init__
.. code-block:: text
__init__(self: deme._deme.FORCE_MODEL, value: typing.SupportsInt | typing.SupportsIndex) -> None
.. py:attribute:: FORCE_MODEL.CUSTOM
.. code-block:: text
Members:
HERTZIAN
HERTZIAN_FRICTIONLES
CUSTOM
.. py:attribute:: FORCE_MODEL.HERTZIAN
.. code-block:: text
Members:
HERTZIAN
HERTZIAN_FRICTIONLES
CUSTOM
.. py:attribute:: FORCE_MODEL.HERTZIAN_FRICTIONLES
.. code-block:: text
Members:
HERTZIAN
HERTZIAN_FRICTIONLES
CUSTOM
.. py:class:: GridSampler
.. code-block:: text
Regular-grid volumetric point sampler.
.. py:method:: GridSampler.__init__
.. code-block:: text
__init__(self: deme._deme.GridSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None
Create a regular-grid sampler with uniform point spacing.
.. py:method:: GridSampler.GetSeparation
.. code-block:: text
GetSeparation(self: deme._deme.GridSampler) -> float
Return the current grid spacing.
.. py:method:: GridSampler.SampleBox
.. code-block:: text
SampleBox(self: deme._deme.GridSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], halfDim: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> list[list[float]]
Return points sampled from the specified box volume.
.. py:method:: GridSampler.SampleCylinderX
.. code-block:: text
SampleCylinderX(self: deme._deme.GridSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex, halfHeight: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from an X-aligned cylindrical volume.
.. py:method:: GridSampler.SampleCylinderY
.. code-block:: text
SampleCylinderY(self: deme._deme.GridSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex, halfHeight: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from a Y-aligned cylindrical volume.
.. py:method:: GridSampler.SampleCylinderZ
.. code-block:: text
SampleCylinderZ(self: deme._deme.GridSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex, halfHeight: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from a Z-aligned cylindrical volume.
.. py:method:: GridSampler.SampleSphere
.. code-block:: text
SampleSphere(self: deme._deme.GridSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from the specified spherical volume.
.. py:method:: GridSampler.SetSeparation
.. code-block:: text
SetSeparation(self: deme._deme.GridSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the point spacing used by subsequent samples.
.. py:class:: HCPSampler
.. code-block:: text
Hexagonally close-packed volumetric point sampler.
.. py:method:: HCPSampler.__init__
.. code-block:: text
__init__(self: deme._deme.HCPSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None
Create an HCP sampler with the requested point separation.
.. py:method:: HCPSampler.GetSeparation
.. code-block:: text
GetSeparation(self: deme._deme.HCPSampler) -> float
Return the current point separation.
.. py:method:: HCPSampler.SampleBox
.. code-block:: text
SampleBox(self: deme._deme.HCPSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], halfDim: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> list[list[float]]
Return points sampled from the specified box volume.
.. py:method:: HCPSampler.SampleCylinderX
.. code-block:: text
SampleCylinderX(self: deme._deme.HCPSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex, halfHeight: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from an X-aligned cylindrical volume.
.. py:method:: HCPSampler.SampleCylinderY
.. code-block:: text
SampleCylinderY(self: deme._deme.HCPSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex, halfHeight: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from a Y-aligned cylindrical volume.
.. py:method:: HCPSampler.SampleCylinderZ
.. code-block:: text
SampleCylinderZ(self: deme._deme.HCPSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex, halfHeight: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from a Z-aligned cylindrical volume.
.. py:method:: HCPSampler.SampleSphere
.. code-block:: text
SampleSphere(self: deme._deme.HCPSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from the specified spherical volume.
.. py:method:: HCPSampler.SetSeparation
.. code-block:: text
SetSeparation(self: deme._deme.HCPSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the point separation used by subsequent samples.
.. py:class:: MESH_FORMAT
.. code-block:: text
Members:
VTK
OBJ
STL
PLY
.. py:method:: MESH_FORMAT.__init__
.. code-block:: text
__init__(self: deme._deme.MESH_FORMAT, value: typing.SupportsInt | typing.SupportsIndex) -> None
.. py:attribute:: MESH_FORMAT.OBJ
.. code-block:: text
Members:
VTK
OBJ
STL
PLY
.. py:attribute:: MESH_FORMAT.PLY
.. code-block:: text
Members:
VTK
OBJ
STL
PLY
.. py:attribute:: MESH_FORMAT.STL
.. code-block:: text
Members:
VTK
OBJ
STL
PLY
.. py:attribute:: MESH_FORMAT.VTK
.. code-block:: text
Members:
VTK
OBJ
STL
PLY
.. py:class:: OUTPUT_CONTENT
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:method:: OUTPUT_CONTENT.__init__
.. code-block:: text
__init__(self: deme._deme.OUTPUT_CONTENT, value: typing.SupportsInt | typing.SupportsIndex) -> None
.. py:attribute:: OUTPUT_CONTENT.ABS_ACC
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:attribute:: OUTPUT_CONTENT.ABSV
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:attribute:: OUTPUT_CONTENT.ACC
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:attribute:: OUTPUT_CONTENT.ANG_ACC
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:attribute:: OUTPUT_CONTENT.ANG_VEL
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:attribute:: OUTPUT_CONTENT.FAMILY
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:attribute:: OUTPUT_CONTENT.MAT
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:attribute:: OUTPUT_CONTENT.OWNER_WILDCARD
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:attribute:: OUTPUT_CONTENT.QUAT
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:attribute:: OUTPUT_CONTENT.VEL
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:attribute:: OUTPUT_CONTENT.XYZ
.. code-block:: text
Members:
XYZ
QUAT
ABSV
VEL
ANG_VEL
ABS_ACC
ACC
ANG_ACC
FAMILY
MAT
OWNER_WILDCARD
.. py:class:: OUTPUT_FORMAT
.. code-block:: text
Members:
CSV
BINARY
.. py:method:: OUTPUT_FORMAT.__init__
.. code-block:: text
__init__(self: deme._deme.OUTPUT_FORMAT, value: typing.SupportsInt | typing.SupportsIndex) -> None
.. py:attribute:: OUTPUT_FORMAT.BINARY
.. code-block:: text
Members:
CSV
BINARY
.. py:attribute:: OUTPUT_FORMAT.CSV
.. code-block:: text
Members:
CSV
BINARY
.. py:class:: OWNER_TYPE
.. code-block:: text
Members:
CLUMP
ANALYTICAL
MESH
.. py:method:: OWNER_TYPE.__init__
.. code-block:: text
__init__(self: deme._deme.OWNER_TYPE, value: typing.SupportsInt | typing.SupportsIndex) -> None
.. py:attribute:: OWNER_TYPE.ANALYTICAL
.. code-block:: text
Members:
CLUMP
ANALYTICAL
MESH
.. py:attribute:: OWNER_TYPE.CLUMP
.. code-block:: text
Members:
CLUMP
ANALYTICAL
MESH
.. py:attribute:: OWNER_TYPE.MESH
.. code-block:: text
Members:
CLUMP
ANALYTICAL
MESH
.. py:class:: PDSampler
.. code-block:: text
Poisson-disk volumetric sampler enforcing a minimum point separation.
.. py:method:: PDSampler.__init__
.. code-block:: text
__init__(self: deme._deme.PDSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None
Create a sampler with the requested minimum separation.
.. py:method:: PDSampler.GetSeparation
.. code-block:: text
GetSeparation(self: deme._deme.PDSampler) -> float
Return the current minimum separation.
.. py:method:: PDSampler.SampleBox
.. code-block:: text
SampleBox(self: deme._deme.PDSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], halfDim: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> list[list[float]]
Return points sampled from the specified box volume.
.. py:method:: PDSampler.SampleCylinderX
.. code-block:: text
SampleCylinderX(self: deme._deme.PDSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex, halfHeight: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from an X-aligned cylindrical volume.
.. py:method:: PDSampler.SampleCylinderY
.. code-block:: text
SampleCylinderY(self: deme._deme.PDSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex, halfHeight: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from a Y-aligned cylindrical volume.
.. py:method:: PDSampler.SampleCylinderZ
.. code-block:: text
SampleCylinderZ(self: deme._deme.PDSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex, halfHeight: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from a Z-aligned cylindrical volume.
.. py:method:: PDSampler.SampleSphere
.. code-block:: text
SampleSphere(self: deme._deme.PDSampler, center: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex], radius: typing.SupportsFloat | typing.SupportsIndex) -> list[list[float]]
Return points sampled from the specified spherical volume.
.. py:method:: PDSampler.SetRandomEngineSeed
.. code-block:: text
SetRandomEngineSeed(self: deme._deme.PDSampler, seed: typing.SupportsInt | typing.SupportsIndex) -> None
Seed the random engine so Poisson-disk samples can be reproduced.
.. py:method:: PDSampler.SetSeparation
.. code-block:: text
SetSeparation(self: deme._deme.PDSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None
Set the minimum separation used by subsequent samples.
.. py:class:: SPATIAL_DIR
.. code-block:: text
Members:
X
Y
Z
NONE
.. py:method:: SPATIAL_DIR.__init__
.. code-block:: text
__init__(self: deme._deme.SPATIAL_DIR, value: typing.SupportsInt | typing.SupportsIndex) -> None
.. py:attribute:: SPATIAL_DIR.NONE
.. code-block:: text
Members:
X
Y
Z
NONE
.. py:attribute:: SPATIAL_DIR.X
.. code-block:: text
Members:
X
Y
Z
NONE
.. py:attribute:: SPATIAL_DIR.Y
.. code-block:: text
Members:
X
Y
Z
NONE
.. py:attribute:: SPATIAL_DIR.Z
.. code-block:: text
Members:
X
Y
Z
NONE
.. py:class:: TIME_INTEGRATOR
.. code-block:: text
Members:
FORWARD_EULER
CENTERED_DIFFERENCE
EXTENDED_TAYLOR
CHUNG
.. py:method:: TIME_INTEGRATOR.__init__
.. code-block:: text
__init__(self: deme._deme.TIME_INTEGRATOR, value: typing.SupportsInt | typing.SupportsIndex) -> None
.. py:attribute:: TIME_INTEGRATOR.CENTERED_DIFFERENCE
.. code-block:: text
Members:
FORWARD_EULER
CENTERED_DIFFERENCE
EXTENDED_TAYLOR
CHUNG
.. py:attribute:: TIME_INTEGRATOR.CHUNG
.. code-block:: text
Members:
FORWARD_EULER
CENTERED_DIFFERENCE
EXTENDED_TAYLOR
CHUNG
.. py:attribute:: TIME_INTEGRATOR.EXTENDED_TAYLOR
.. code-block:: text
Members:
FORWARD_EULER
CENTERED_DIFFERENCE
EXTENDED_TAYLOR
CHUNG
.. py:attribute:: TIME_INTEGRATOR.FORWARD_EULER
.. code-block:: text
Members:
FORWARD_EULER
CENTERED_DIFFERENCE
EXTENDED_TAYLOR
CHUNG