Skip to content

Latest commit

 

History

History
5435 lines (2538 loc) · 153 KB

File metadata and controls

5435 lines (2538 loc) · 153 KB

Python API reference: deme

This reference is generated from the signatures and docstrings exposed by the installed deme extension.

Module functions

.. 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.


Classes

DEMSolver

.. 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.



Tracker

.. 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.



CNT_OUTPUT_CONTENT

.. 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


ContactInfoContainer

.. 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.



DataContainer

.. 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.



DEMClumpBatch

.. 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.



DEMClumpTemplate

.. 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.



DEMCombinedInstances

.. 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.



DEMCombinedTemplate

.. 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.



DEMERuntimeDataHelper

.. 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.



DEMExternObj

.. 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.


DEMForceModel

.. 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.



DEMInitializer

.. 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



DEMInspector

.. 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.



DEMMaterial

.. 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.


DEMMesh

.. 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.



DEMTrackedObj

.. 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



FORCE_MODEL

.. 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


GridSampler

.. 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.



HCPSampler

.. 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.



MESH_FORMAT

.. 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


OUTPUT_CONTENT

.. 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


OUTPUT_FORMAT

.. 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


OWNER_TYPE

.. 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


PDSampler

.. 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.



SPATIAL_DIR

.. 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


TIME_INTEGRATOR

.. 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