Python API reference: deme

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

Module functions

DEMBoxGridSampler()
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.
DEMBoxHCPSampler()
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.
DEMCylSurfSampler()
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.
FrameTransformGlobalToLocal()
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.
FrameTransformLocalToGlobal()
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.
GetDEMEDataFile()
GetDEMEDataFile(relative_path: str) -> str

Resolve a path relative to DEME's installed data directory.

Classes

DEMSolver

class DEMSolver
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.
DEMSolver.__init__()
__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``.
DEMSolver.AddBCPlane()
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.
DEMSolver.AddClumps()
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.
DEMSolver.AddCombinedFromTemplate()
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.
DEMSolver.AddExternalObject()
AddExternalObject(self: deme._deme.DEMSolver) -> deme::DEMExternObj

Add an analytical object to the simulation system.
DEMSolver.AddFamilyPrescribedAcc()
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.
DEMSolver.AddFamilyPrescribedAngAcc()
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.
DEMSolver.AddKernelInclude()
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).
DEMSolver.AddMeshFromTemplate()
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.
DEMSolver.AddOwnerNextStepAcc()
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.
DEMSolver.AddOwnerNextStepAngAcc()
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.
DEMSolver.AddShellMesh()
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.
DEMSolver.AddWavefrontMeshObject()
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.
DEMSolver.AddWavefrontShellObject()
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.
DEMSolver.ChangeClumpFamily()
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.
DEMSolver.ChangeFamily()
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.
DEMSolver.ChangeFamilyWhen()
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.
DEMSolver.ClearCache()
ClearCache(self: deme._deme.DEMSolver) -> None

Remove host-side cached vectors (so you can re-define them, and then re-initialize system).
DEMSolver.ClearThreadCollaborationStats()
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.
DEMSolver.ClearTimingStats()
ClearTimingStats(self: deme._deme.DEMSolver) -> None

Reset the recordings of the wall time and percentages of wall time spend on various solver tasks.
DEMSolver.CorrectFamilyAngVel()
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'.
DEMSolver.CorrectFamilyLinVel()
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'.
DEMSolver.CorrectFamilyPosition()
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'.
DEMSolver.CorrectFamilyQuaternion()
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'.
DEMSolver.CreateInspector()
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.
DEMSolver.DefineContactForceModel()
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.
DEMSolver.DisableAdaptiveBinSize()
DisableAdaptiveBinSize(self: deme._deme.DEMSolver) -> None

Disable the use of adaptive bin size (always use initial size)
DEMSolver.DisableAdaptiveUpdateFreq()
DisableAdaptiveUpdateFreq(self: deme._deme.DEMSolver) -> None

Disable the use of adaptive max update step count (always use initial update frequency)
DEMSolver.DisableAllMeshWearModels()
DisableAllMeshWearModels(self: deme._deme.DEMSolver) -> None

Disable all active mesh wear models.
DEMSolver.DisableContactBetweenFamilies()
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).
DEMSolver.DisableFamilyOutput()
DisableFamilyOutput(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None

Prevent entites associated with this family to be outputted to files.
DEMSolver.DisableJitifyClumpTemplates()
DisableJitifyClumpTemplates(self: deme._deme.DEMSolver) -> None

Disable jitification of clump templates (use flattened arrays instead).
DEMSolver.DisableJitifyMassProperties()
DisableJitifyMassProperties(self: deme._deme.DEMSolver) -> None

Disable jitification of mass properties (use flattened arrays instead).
DEMSolver.DisableMeshWearModel()
DisableMeshWearModel(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None

Disable mesh wear model for one owner.
DEMSolver.DisableTrianglePVTracking()
DisableTrianglePVTracking(self: deme._deme.DEMSolver) -> None

Disable per-triangle P/V/PxV tracking and clear tracking state.
DEMSolver.DoDynamics()
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.
DEMSolver.DoDynamicsThenSync()
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.
DEMSolver.DoStepDynamics()
DoStepDynamics(self: deme._deme.DEMSolver) -> None

Advance one current timestep without forcing a final dynamic/kinematic worker synchronization.
DEMSolver.Duplicate()
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.
DEMSolver.EnableContactBetweenFamilies()
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.
DEMSolver.EnableContactWildcardOutput()
EnableContactWildcardOutput(self: deme._deme.DEMSolver, enable: bool = True) -> None

Enable or disable contact wildcard output.
DEMSolver.EnableMeshPatchColorOutput()
EnableMeshPatchColorOutput(self: deme._deme.DEMSolver, enable: bool = True) -> None

Enable or disable patch color metadata in PLY mesh output.
DEMSolver.EnableMeshWearModel()
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.
DEMSolver.EnableOwnerWildcardOutput()
EnableOwnerWildcardOutput(self: deme._deme.DEMSolver, enable: bool = True) -> None

Enable or disable owner wildcard output.
DEMSolver.EnsureKernelErrMsgLineNum()
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).
DEMSolver.FlushMeshWearModels()
FlushMeshWearModels(self: deme._deme.DEMSolver) -> None

Force-apply any pending wear deformation immediately.
DEMSolver.GetAllOwnerWildcardValue()
GetAllOwnerWildcardValue(self: deme._deme.DEMSolver, arg0: str) -> list[float]

Get the owner wildcard's values of all entities.
DEMSolver.GetAvgSphContacts()
GetAvgSphContacts(self: deme._deme.DEMSolver) -> float

Get the current number of contacts each sphere has
DEMSolver.GetBinNum()
GetBinNum(self: deme._deme.DEMSolver) -> int

Get the current number of bins (for contact detection). Must be called from synchronized stance.
DEMSolver.GetBinSize()
GetBinSize(self: deme._deme.DEMSolver) -> float

Get the current bin (for contact detection) size. Must be called from synchronized stance.
DEMSolver.GetCachedMesh()
GetCachedMesh(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> deme::DEMMesh

Get a handle for the mesh this tracker is tracking.
DEMSolver.GetClumpContacts()
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.
DEMSolver.GetClumpPositionsHandover()
GetClumpPositionsHandover(self: deme._deme.DEMSolver) -> list[float3]

Get all clump-owner center positions ordered by owner ID.
DEMSolver.GetCombinedInstanceInfo()
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).
DEMSolver.GetContactDetailedInfo()
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.
DEMSolver.GetContactForceModel()
GetContactForceModel(self: deme._deme.DEMSolver) -> deme._deme.DEMForceModel

Get the current force model
DEMSolver.GetContacts()
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.
DEMSolver.GetCudaDebugSync()
GetCudaDebugSync(self: deme._deme.DEMSolver) -> bool

Return whether process-wide CUDA debug synchronization is enabled.
DEMSolver.GetDeviceMemUsageDynamic()
GetDeviceMemUsageDynamic(self: deme._deme.DEMSolver) -> int

Get the device memory usage (in bytes) on dT.
DEMSolver.GetDeviceMemUsageKinematic()
GetDeviceMemUsageKinematic(self: deme._deme.DEMSolver) -> int

Get the device memory usage (in bytes) on kT.
DEMSolver.GetFamilyOwnerWildcardValue()
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.
DEMSolver.GetGPUDeviceIDs()
GetGPUDeviceIDs(self: deme._deme.DEMSolver) -> list[int]

Return ``[dynamic_worker_device, kinematic_worker_device]`` using process-visible logical CUDA IDs.
DEMSolver.GetGPUTimersEnabled()
GetGPUTimersEnabled(self: deme._deme.DEMSolver) -> bool

Return whether event-based GPU timing is enabled.
DEMSolver.GetHostMemUsageDynamic()
GetHostMemUsageDynamic(self: deme._deme.DEMSolver) -> int

Get the host memory usage (in bytes) on dT.
DEMSolver.GetHostMemUsageKinematic()
GetHostMemUsageKinematic(self: deme._deme.DEMSolver) -> int

Get the host memory usage (in bytes) on kT.
DEMSolver.GetInitStatus()
GetInitStatus(self: deme._deme.DEMSolver) -> bool

Return whether this simulation system is initialized.
DEMSolver.GetJitifyOptions()
GetJitifyOptions(self: deme._deme.DEMSolver) -> list[str]

Get current jitification options. It is needed by some of this simulation system's friend classes.
DEMSolver.GetJitStringSubs()
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.
DEMSolver.GetMeshNodesGlobal()
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.
DEMSolver.GetNumClumps()
GetNumClumps(self: deme._deme.DEMSolver) -> int

Return the number of clumps that are currently in the simulation. Must be used after initialization.
DEMSolver.GetNumCombinedInstances()
GetNumCombinedInstances(self: deme._deme.DEMSolver) -> int

Return the number of combined instances currently cached.
DEMSolver.GetNumContacts()
GetNumContacts(self: deme._deme.DEMSolver) -> int

Get the number of kT-reported potential contact pairs.
DEMSolver.GetNumOwners()
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.
DEMSolver.GetOwnerAcc()
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.
DEMSolver.GetOwnerAngAcc()
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.
DEMSolver.GetOwnerAngVel()
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.
DEMSolver.GetOwnerContactClumps()
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.
DEMSolver.GetOwnerContactForces()
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.
DEMSolver.GetOwnerFamily()
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.
DEMSolver.GetOwnerMass()
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.
DEMSolver.GetOwnerMOI()
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.
DEMSolver.GetOwnerOriQ()
GetOwnerOriQ(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float4]

Get quaternion of n consecutive owners.
DEMSolver.GetOwnerPosition()
GetOwnerPosition(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float3]

Get position of n consecutive owners.
DEMSolver.GetOwnerVelocity()
GetOwnerVelocity(self: deme._deme.DEMSolver, ownerID: typing.SupportsInt | typing.SupportsIndex, n: typing.SupportsInt | typing.SupportsIndex = 1) -> list[float3]

Get velocity of n consecutive owners.
DEMSolver.GetOwnerWildcardValue()
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.
DEMSolver.GetSimTime()
GetSimTime(self: deme._deme.DEMSolver) -> float

Get the simulation time passed since the start of simulation.
DEMSolver.GetTimeStepSize()
GetTimeStepSize(self: deme._deme.DEMSolver) -> float

Get the current time step size in simulation.
DEMSolver.GetTrackedOwnerTrianglePV()
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.
DEMSolver.GetUpdateFreq()
GetUpdateFreq(self: deme._deme.DEMSolver) -> float

Get the current update frequency used by the solver.
DEMSolver.GetWhetherForceCollectInKernel()
GetWhetherForceCollectInKernel(self: deme._deme.DEMSolver) -> bool

Return whether the solver is currently reducing force in the force calculation kernel.
DEMSolver.Initialize()
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.
DEMSolver.InstructBoxDomainBoundingBC()
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.
DEMSolver.InstructBoxDomainDimension()
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
DEMSolver.InstructNumOwners()
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.
DEMSolver.LoadClumpType()
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
DEMSolver.LoadCombinedClumpType()
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.
DEMSolver.LoadCombinedMeshType()
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.
DEMSolver.LoadMaterial()
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.
DEMSolver.LoadMeshType()
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.
DEMSolver.LoadSphereType()
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.
DEMSolver.MarkFamilyPersistentContact()
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.
DEMSolver.MarkFamilyPersistentContactBoth()
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.
DEMSolver.MarkFamilyPersistentContactEither()
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.
DEMSolver.MarkPersistentContact()
MarkPersistentContact(self: deme._deme.DEMSolver) -> None

Make it so that all currently-existing contacts in this simulation will never be removed.
DEMSolver.PrintKinematicScratchSpaceUsage()
PrintKinematicScratchSpaceUsage(self: deme._deme.DEMSolver) -> None

Print kT's scratch space usage. This is a debug method.
DEMSolver.PurgeFamily()
PurgeFamily(self: deme._deme.DEMSolver, family_num: typing.SupportsInt | typing.SupportsIndex) -> None

Remove all entities in a family from runtime arrays to reclaim memory.
DEMSolver.ReadContactForceModel()
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.
DEMSolver.ReleaseFlattenedArrays()
ReleaseFlattenedArrays(self: deme._deme.DEMSolver) -> None

Release setup-time flattened arrays used for preprocessing and worker transfer.
DEMSolver.RemoveFamilyPersistentContact()
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.
DEMSolver.RemoveFamilyPersistentContactBoth()
RemoveFamilyPersistentContactBoth(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None

Cancel contact persistence qualification. Work like the inverse of MarkFamilyPersistentContactBoth.
DEMSolver.RemoveFamilyPersistentContactEither()
RemoveFamilyPersistentContactEither(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None

Cancel contact persistence qualification. Work like the inverse of MarkFamilyPersistentContactEither.
DEMSolver.RemoveKernelInclude()
RemoveKernelInclude(self: deme._deme.DEMSolver) -> None

Remove all extra libraries that the kernels `include' in their headers.
DEMSolver.RemovePersistentContact()
RemovePersistentContact(self: deme._deme.DEMSolver) -> None

Cancel contact persistence qualification. Work like the inverse of MarkPersistentContact.
DEMSolver.RequestContactUpdate()
RequestContactUpdate(self: deme._deme.DEMSolver) -> None

Request an immediate contact detection update.
DEMSolver.SetAdaptiveBinSizeAcc()
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
DEMSolver.SetAdaptiveBinSizeDelaySteps()
SetAdaptiveBinSizeDelaySteps(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None

Adjust how frequent kT updates the bin size
DEMSolver.SetAdaptiveBinSizeLowerProactivity()
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).
DEMSolver.SetAdaptiveBinSizeMaxRate()
SetAdaptiveBinSizeMaxRate(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None

Set the max rate that the bin size can change in one adjustment
DEMSolver.SetAdaptiveBinSizeUpperProactivity()
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)
DEMSolver.SetAdaptiveTimeStepType()
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.
DEMSolver.SetAllowIntraCombinedOwnerContacts()
SetAllowIntraCombinedOwnerContacts(self: deme._deme.DEMSolver, allow: bool = True) -> None

Allow or suppress contacts among owners belonging to the same combined owner group.
DEMSolver.SetCDMaxUpdateFreq()
SetCDMaxUpdateFreq(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None

Set the upper bound of kT update frequency (when it is adjusted automatically).
DEMSolver.SetCDNumStepsMaxDriftAheadOfAvg()
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.
DEMSolver.SetCDNumStepsMaxDriftHistorySize()
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.
DEMSolver.SetCDNumStepsMaxDriftMultipleOfAvg()
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.
DEMSolver.SetCDUpdateFreq()
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.
DEMSolver.SetCollectAccRightAfterForceCalc()
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.
DEMSolver.SetContactOutputContent()
SetContactOutputContent(self: deme._deme.DEMSolver, arg0: collections.abc.Sequence[str]) -> None

Specify the information that needs to go into the contact pair output files.
DEMSolver.SetContactOutputFormat()
SetContactOutputFormat(self: deme._deme.DEMSolver, arg0: str) -> None

Specify the file format of contact pairs.
DEMSolver.SetContactWildcards()
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.
DEMSolver.SetContactWildcardValue()
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.
DEMSolver.SetCudaDebugSync()
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.
DEMSolver.SetErrorOutAngularVelocity()
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.
DEMSolver.SetErrorOutAvgContacts()
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
DEMSolver.SetErrorOutVelocity()
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.
DEMSolver.SetExpandFactor()
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.
DEMSolver.SetExpandSafetyAdder()
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
DEMSolver.SetExpandSafetyMultiplier()
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.
DEMSolver.SetExpandSafetyType()
SetExpandSafetyType(self: deme._deme.DEMSolver, arg0: str) -> None

A string. If 'auto': the solver automatically derives.
DEMSolver.SetFamilyClumpMaterial()
SetFamilyClumpMaterial(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: deme::DEMMaterial) -> None

Set all clumps in this family to have this material.
DEMSolver.SetFamilyContactWildcardValue()
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.
DEMSolver.SetFamilyContactWildcardValueBoth()
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.
DEMSolver.SetFamilyContactWildcardValueEither()
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.
DEMSolver.SetFamilyExtraMargin()
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.
DEMSolver.SetFamilyFixed()
SetFamilyFixed(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None

Mark all entities in this family to be fixed.
DEMSolver.SetFamilyMeshMaterial()
SetFamilyMeshMaterial(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: deme::DEMMaterial) -> None

Set all meshes in this family to have this material.
DEMSolver.SetFamilyOwnerWildcardValue()
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.
DEMSolver.SetFamilyPrescribedAngVel()
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.
DEMSolver.SetFamilyPrescribedAngVelX()
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.
DEMSolver.SetFamilyPrescribedAngVelY()
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.
DEMSolver.SetFamilyPrescribedAngVelZ()
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.
DEMSolver.SetFamilyPrescribedLinVel()
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.
DEMSolver.SetFamilyPrescribedLinVelX()
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.
DEMSolver.SetFamilyPrescribedLinVelY()
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.
DEMSolver.SetFamilyPrescribedLinVelZ()
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.
DEMSolver.SetFamilyPrescribedPosition()
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.
DEMSolver.SetFamilyPrescribedPositionX()
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'.
DEMSolver.SetFamilyPrescribedPositionY()
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'.
DEMSolver.SetFamilyPrescribedPositionZ()
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'.
DEMSolver.SetFamilyPrescribedQuaternion()
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'.
DEMSolver.SetForceCalcThreadsPerBlock()
SetForceCalcThreadsPerBlock(self: deme._deme.DEMSolver, arg0: typing.SupportsInt | typing.SupportsIndex) -> None

Set the number of threads per block in force calculation (default 256).
DEMSolver.SetGPUTimersEnabled()
SetGPUTimersEnabled(self: deme._deme.DEMSolver, enabled: bool) -> None

Enable or disable event-based GPU timing.
DEMSolver.SetGravitationalAcceleration()
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.
DEMSolver.SetInitBinNumTarget()
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.
DEMSolver.SetInitBinSize()
SetInitBinSize(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None

Explicitly instruct the bin size (for contact detection) that the solver should use.
DEMSolver.SetInitBinSizeAsMultipleOfSmallestSphere()
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.
DEMSolver.SetInitTimeStep()
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.
DEMSolver.SetIntegrator()
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.
DEMSolver.SetJitifyClumpTemplates()
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.
DEMSolver.SetJitifyMassProperties()
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.
DEMSolver.SetJitifyOptions()
SetJitifyOptions(self: deme._deme.DEMSolver, arg0: collections.abc.Sequence[str]) -> None

Set the jitification options. It is only needed by advanced users.
DEMSolver.SetKernelInclude()
SetKernelInclude(self: deme._deme.DEMSolver, arg0: str) -> None

Set the kernels' headers' extra include lines. Useful for customization.
DEMSolver.SetMaterialPropertyPair()
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).
DEMSolver.SetMaxSphereInBin()
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
DEMSolver.SetMaxTriangleInBin()
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
DEMSolver.SetMaxTriTriPenetration()
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.
DEMSolver.SetMaxVelocity()
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.
DEMSolver.SetMeshOutputFormat()
SetMeshOutputFormat(self: deme._deme.DEMSolver, arg0: str) -> None

Specify the output file format of meshes.
DEMSolver.SetMeshParticlesLowPoly()
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.
DEMSolver.SetMeshUniversalContact()
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.
DEMSolver.SetNoForceRecord()
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.
DEMSolver.SetOutputContent()
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.
DEMSolver.SetOutputFormat()
SetOutputFormat(self: deme._deme.DEMSolver, arg0: str) -> None

Choose sphere and clump output file format.
DEMSolver.SetOwnerAngVel()
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.
DEMSolver.SetOwnerFamily()
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.
DEMSolver.SetOwnerOriQ()
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.
DEMSolver.SetOwnerPosition()
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.
DEMSolver.SetOwnerVelocity()
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.
DEMSolver.SetOwnerWildcards()
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.
DEMSolver.SetOwnerWildcardValue()
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.
DEMSolver.SetPersistentContact()
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.
DEMSolver.SetSimplePatchCombination()
SetSimplePatchCombination(self: deme._deme.DEMSolver, use: bool = True) -> None

Use simple patch-ID based triangle contact combination. Disable to opt into connected-component flooding.
DEMSolver.SetSimTime()
SetSimTime(self: deme._deme.DEMSolver, arg0: typing.SupportsFloat | typing.SupportsIndex) -> None

Get the simulation time passed since the start of simulation.
DEMSolver.SetSortContactPairs()
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.
DEMSolver.SetStablePatchIslandIDs()
SetStablePatchIslandIDs(self: deme._deme.DEMSolver, use: bool = True) -> None

Stabilize flooded patch-island IDs across contact-detection steps.
DEMSolver.SetTrianglePVTrackingOwners()
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.
DEMSolver.SetTriNodeRelPos()
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.
DEMSolver.SetTriTriContactRejectionRatio()
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.
DEMSolver.SetTriTriPenetration()
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.
DEMSolver.SetUseAngularVelocityMargin()
SetUseAngularVelocityMargin(self: deme._deme.DEMSolver, arg0: bool) -> None

Control whether angular velocity contributes to the contact detection margin.
DEMSolver.SetVerbosity()
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'.
DEMSolver.ShowAnomalies()
ShowAnomalies(self: deme._deme.DEMSolver) -> None

Show potential anomalies that may have been there in the simulation, then clear the anomaly log.
DEMSolver.ShowMemStats()
ShowMemStats(self: deme._deme.DEMSolver) -> None

Print the current memory usage in pretty format.
DEMSolver.ShowThreadCollaborationStats()
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.
DEMSolver.ShowTimingStats()
ShowTimingStats(self: deme._deme.DEMSolver) -> None

Show the wall time and percentages of wall time spend on various solver tasks.
DEMSolver.SyncMemoryTransfer()
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.
DEMSolver.Track()
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.
DEMSolver.UpdateClumps()
UpdateClumps(self: deme._deme.DEMSolver) -> None

Transfer newly loaded clumps to the GPU-side in mid-simulation.
DEMSolver.UpdateSimParams()
UpdateSimParams(self: deme._deme.DEMSolver) -> None

Transfer the cached sim params to the workers. Used for sim environment modification after system initialization.
DEMSolver.UpdateStepSize()
UpdateStepSize(self: deme._deme.DEMSolver, ts: typing.SupportsFloat | typing.SupportsIndex = -1.0) -> None

Update the time step size. Used after system initialization.
DEMSolver.UpdateTriNodeRelPos()
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.
DEMSolver.UseAdaptiveBinSize()
UseAdaptiveBinSize(self: deme._deme.DEMSolver, use: bool = True) -> None

Enable or disable the use of adaptive bin size (by default it is on)
DEMSolver.UseAdaptiveUpdateFreq()
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)
DEMSolver.UseFrictionalHertzianModel()
UseFrictionalHertzianModel(self: deme._deme.DEMSolver) -> deme._deme.DEMForceModel

Instruct the solver to use frictonal (history-based) Hertzian contact force model.
DEMSolver.UseFrictionlessHertzianModel()
UseFrictionlessHertzianModel(self: deme._deme.DEMSolver) -> deme._deme.DEMForceModel

Instruct the solver to use frictonless Hertzian contact force model
DEMSolver.UseHertzConstTimeStep()
UseHertzConstTimeStep(self: deme._deme.DEMSolver) -> None

Use the setup-time Hertzian constant timestep estimate.
DEMSolver.WaitForPendingOutput()
WaitForPendingOutput(self: deme._deme.DEMSolver) -> None

Wait for any in-flight async output to finish.
DEMSolver.WriteClumpFile()
WriteClumpFile(self: deme._deme.DEMSolver, outfilename: str, accuracy: typing.SupportsInt | typing.SupportsIndex = 10) -> None

Write the current status of clumps to a file.
DEMSolver.WriteContactFile()
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.
DEMSolver.WriteContactFileIncludingPotentialPairs()
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).
DEMSolver.WriteMeshFile()
WriteMeshFile(self: deme._deme.DEMSolver, arg0: str) -> None

Write the current status of all meshes to a file.
DEMSolver.WriteSphereFile()
WriteSphereFile(self: deme._deme.DEMSolver, arg0: str) -> None

Writes the current status of clumps (but decomposed as spheres) file.

Tracker

class Tracker
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.
Tracker.__init__()
__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.
Tracker.AddAcc()
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.
Tracker.AddAngAcc()
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.
Tracker.AngularVelocitiesGlobal()
AngularVelocitiesGlobal(self: deme._deme.Tracker) -> list[list[float]]

Return global-frame angular velocities for all tracked owners.
Tracker.AngularVelocitiesGlobalToDevice()
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.
Tracker.AngularVelocitiesLocal()
AngularVelocitiesLocal(self: deme._deme.Tracker) -> list[list[float]]

Return local principal-axis-frame angular velocities for all tracked owners.
Tracker.AngularVelocitiesLocalToDevice()
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.
Tracker.AngVelGlobal()
AngVelGlobal(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[float]

Return the global-frame angular velocity of the owner at ``offset``.
Tracker.AngVelLocal()
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.
Tracker.ContactAcc()
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.
Tracker.ContactAccelerations()
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.
Tracker.ContactAccelerationsToDevice()
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.
Tracker.ContactAngAccGlobal()
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.
Tracker.ContactAngAccLocal()
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.
Tracker.ContactAngularAccelerationsGlobal()
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.
Tracker.ContactAngularAccelerationsGlobalToDevice()
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.
Tracker.ContactAngularAccelerationsLocal()
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.
Tracker.ContactAngularAccelerationsLocalToDevice()
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.
Tracker.FamiliesToDevice()
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.
Tracker.GetContactClumps()
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.
Tracker.GetContactForces()
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.
Tracker.GetContactForcesAndGlobalTorque()
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.
Tracker.GetContactForcesAndGlobalTorqueForAll()
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.
Tracker.GetContactForcesAndGlobalTorqueForAllToDevice()
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.
Tracker.GetContactForcesAndLocalTorque()
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.
Tracker.GetContactForcesAndLocalTorqueForAll()
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.
Tracker.GetContactForcesAndLocalTorqueForAllToDevice()
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.
Tracker.GetContactForcesForAll()
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.
Tracker.GetContactForcesForAllToDevice()
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.
Tracker.GetFamilies()
GetFamilies(self: deme._deme.Tracker) -> list[int]

Get the family numbers of all the tracked object.
Tracker.GetFamily()
GetFamily(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> int

Get the family number of the tracked object.
Tracker.GetMesh()
GetMesh(self: deme._deme.Tracker) -> deme::DEMMesh

Get a handle for the mesh this tracker is tracking.
Tracker.GetMeshNodesGlobal()
GetMeshNodesGlobal(self: deme._deme.Tracker) -> list[float3]

Get the current locations of all the nodes in the mesh being tracked.
Tracker.GetOwnerID()
GetOwnerID(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> int

Return the simulation-wide owner ID at ``offset`` within this tracker.
Tracker.GetOwnerIDs()
GetOwnerIDs(self: deme._deme.Tracker) -> list[int]

Return simulation-wide owner IDs for every owner covered by this tracker.
Tracker.GetOwnerWildcardValue()
GetOwnerWildcardValue(self: deme._deme.Tracker, name: str, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> float

Get the owner's wildcard value.
Tracker.GetOwnerWildcardValues()
GetOwnerWildcardValues(self: deme._deme.Tracker, name: str) -> list[float]

Get the owner wildcard values for all the owners entities tracked by this tracker.
Tracker.Mass()
Mass(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> float

Get the mass of the tracked object.
Tracker.Masses()
Masses(self: deme._deme.Tracker) -> list[float]

Get the masses of all the tracked objects.
Tracker.MassesToDevice()
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.
Tracker.MOI()
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.
Tracker.MOIs()
MOIs(self: deme._deme.Tracker) -> list[list[float]]

Get the moment of inertia (in principal axis frame) of all the tracked objects.
Tracker.MOIsToDevice()
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.
Tracker.OrientationQuaternions()
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)``.
Tracker.OrientationQuaternionsToDevice()
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.
Tracker.OriQ()
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)``).
Tracker.OwnerWildcardValuesToDevice()
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.
Tracker.Pos()
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``.
Tracker.Positions()
Positions(self: deme._deme.Tracker) -> list[list[float]]

Return global-frame center-of-mass positions for all owners covered by this tracker.
Tracker.PositionsToDevice()
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.
Tracker.SetAngVel()
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.
Tracker.SetFamily()
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.
Tracker.SetOriQ()
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.
Tracker.SetOwnerWildcardValue()
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.
Tracker.SetOwnerWildcardValues()
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.
Tracker.SetPos()
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.
Tracker.SetVel()
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.
Tracker.UpdateMesh()
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.
Tracker.UpdateMeshByIncrement()
UpdateMeshByIncrement(self: deme._deme.Tracker, deformation: collections.abc.Sequence[float3]) -> None

Change the coordinates of each mesh node by the given amount.
Tracker.Vel()
Vel(self: deme._deme.Tracker, offset: typing.SupportsInt | typing.SupportsIndex = 0) -> list[float]

Return the global-frame linear velocity of the owner at ``offset``.
Tracker.Velocities()
Velocities(self: deme._deme.Tracker) -> list[list[float]]

Return global-frame linear velocities for all tracked owners.
Tracker.VelocitiesToDevice()
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

class CNT_OUTPUT_CONTENT
Members:

CNT_TYPE

FORCE

POINT

COMPONENT

NORMAL

TORQUE

CNT_WILDCARD

OWNER

GEO_ID

NICKNAME
CNT_OUTPUT_CONTENT.__init__()
__init__(self: deme._deme.CNT_OUTPUT_CONTENT, value: typing.SupportsInt | typing.SupportsIndex) -> None
CNT_OUTPUT_CONTENT.CNT_TYPE
Members:

CNT_TYPE

FORCE

POINT

COMPONENT

NORMAL

TORQUE

CNT_WILDCARD

OWNER

GEO_ID

NICKNAME
CNT_OUTPUT_CONTENT.CNT_WILDCARD
Members:

CNT_TYPE

FORCE

POINT

COMPONENT

NORMAL

TORQUE

CNT_WILDCARD

OWNER

GEO_ID

NICKNAME
CNT_OUTPUT_CONTENT.COMPONENT
Members:

CNT_TYPE

FORCE

POINT

COMPONENT

NORMAL

TORQUE

CNT_WILDCARD

OWNER

GEO_ID

NICKNAME
CNT_OUTPUT_CONTENT.FORCE
Members:

CNT_TYPE

FORCE

POINT

COMPONENT

NORMAL

TORQUE

CNT_WILDCARD

OWNER

GEO_ID

NICKNAME
CNT_OUTPUT_CONTENT.GEO_ID
Members:

CNT_TYPE

FORCE

POINT

COMPONENT

NORMAL

TORQUE

CNT_WILDCARD

OWNER

GEO_ID

NICKNAME
CNT_OUTPUT_CONTENT.NICKNAME
Members:

CNT_TYPE

FORCE

POINT

COMPONENT

NORMAL

TORQUE

CNT_WILDCARD

OWNER

GEO_ID

NICKNAME
CNT_OUTPUT_CONTENT.NORMAL
Members:

CNT_TYPE

FORCE

POINT

COMPONENT

NORMAL

TORQUE

CNT_WILDCARD

OWNER

GEO_ID

NICKNAME
CNT_OUTPUT_CONTENT.OWNER
Members:

CNT_TYPE

FORCE

POINT

COMPONENT

NORMAL

TORQUE

CNT_WILDCARD

OWNER

GEO_ID

NICKNAME
CNT_OUTPUT_CONTENT.POINT
Members:

CNT_TYPE

FORCE

POINT

COMPONENT

NORMAL

TORQUE

CNT_WILDCARD

OWNER

GEO_ID

NICKNAME
CNT_OUTPUT_CONTENT.TORQUE
Members:

CNT_TYPE

FORCE

POINT

COMPONENT

NORMAL

TORQUE

CNT_WILDCARD

OWNER

GEO_ID

NICKNAME

ContactInfoContainer

class ContactInfoContainer
Named arrays describing contacts selected by ``DEMSolver.SetContactOutputContent``.
ContactInfoContainer.__init__()
__init__(self: deme._deme.ContactInfoContainer, arg0: typing.SupportsInt | typing.SupportsIndex, arg1: collections.abc.Sequence[tuple[str, str]]) -> None
ContactInfoContainer.GetAGeo()
GetAGeo(self: deme._deme.ContactInfoContainer) -> list[int]

Get AGeo number from the container.
ContactInfoContainer.GetAOwner()
GetAOwner(self: deme._deme.ContactInfoContainer) -> list[int]

Get AOwner number from the container.
ContactInfoContainer.GetAOwnerFamily()
GetAOwnerFamily(self: deme._deme.ContactInfoContainer) -> list[int]

Get AOwnerFamily number from the container.
ContactInfoContainer.GetBGeo()
GetBGeo(self: deme._deme.ContactInfoContainer) -> list[int]

Get BGeo number from the container.
ContactInfoContainer.GetBOwner()
GetBOwner(self: deme._deme.ContactInfoContainer) -> list[int]

Get BOwner number from the container.
ContactInfoContainer.GetBOwnerFamily()
GetBOwnerFamily(self: deme._deme.ContactInfoContainer) -> list[int]

Get BOwnerFamily number from the container.
ContactInfoContainer.GetContactType()
GetContactType(self: deme._deme.ContactInfoContainer) -> list[str]

Get contact type as strings from the container.
ContactInfoContainer.GetForce()
GetForce(self: deme._deme.ContactInfoContainer) -> list[float3]

Get force as vectors from the container.
ContactInfoContainer.GetNormal()
GetNormal(self: deme._deme.ContactInfoContainer) -> list[float3]

Get contact normal as vectors from the container.
ContactInfoContainer.GetPoint()
GetPoint(self: deme._deme.ContactInfoContainer) -> list[float3]

Get contact points as vectors from the container.
ContactInfoContainer.GetTorque()
GetTorque(self: deme._deme.ContactInfoContainer) -> list[float3]

Get torque as vectors from the container.

DataContainer

class DataContainer
String-keyed container used to return named arrays from DEME.
DataContainer.__init__()
__init__(self: deme._deme.DataContainer) -> None

Create an empty data container.
DataContainer.Get()
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

class DEMClumpBatch
Cached setup data for a batch of clump instances.
DEMClumpBatch.__init__()
__init__(self: deme._deme.DEMClumpBatch, count: typing.SupportsInt | typing.SupportsIndex) -> None

Create setup storage for ``count`` clumps.
DEMClumpBatch.AddExistingContactWildcard()
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``.
DEMClumpBatch.AddOwnerWildcard()
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.
DEMClumpBatch.GetNumClumps()
GetNumClumps(self: deme._deme.DEMClumpBatch) -> int

Return the number of clumps in this batch.
DEMClumpBatch.GetNumContacts()
GetNumContacts(self: deme._deme.DEMClumpBatch) -> int

Return the number of pre-existing contacts supplied for restart initialization.
DEMClumpBatch.GetNumSpheres()
GetNumSpheres(self: deme._deme.DEMClumpBatch) -> int

Return the total number of component spheres represented by this batch.
DEMClumpBatch.SetExistingContacts()
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.
DEMClumpBatch.SetExistingContactWildcards()
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.
DEMClumpBatch.SetFamilies()
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.
DEMClumpBatch.SetFamily()
SetFamily(self: deme._deme.DEMClumpBatch, family: typing.SupportsInt | typing.SupportsIndex) -> None

Set the same family number for every clump.
DEMClumpBatch.SetOwnerWildcards()
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.
DEMClumpBatch.SetType()
SetType(self: deme._deme.DEMClumpBatch, type: deme._deme.DEMClumpTemplate) -> None

Assign the same clump template to every instance.
DEMClumpBatch.SetTypes()
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.
DEMClumpBatch.SetVel()
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

class DEMClumpTemplate
Reusable rigid clump topology composed of one or more sphere components.
DEMClumpTemplate.__init__()
__init__(self: deme._deme.DEMClumpTemplate) -> None

Create an empty clump template.
DEMClumpTemplate.AssignName()
AssignName(self: deme._deme.DEMClumpTemplate, name: str) -> None

Assign the clump type name written to output files.
DEMClumpTemplate.InformCentroidPrincipal()
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.
DEMClumpTemplate.Mass()
Mass(self: deme._deme.DEMClumpTemplate) -> float

Return the clump mass.
DEMClumpTemplate.MOI()
MOI(self: deme._deme.DEMClumpTemplate) -> float3

Return principal moments of inertia in the clump-local principal frame.
DEMClumpTemplate.Move()
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.
DEMClumpTemplate.ReadComponentFromFile()
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.
DEMClumpTemplate.Scale()
Scale(self: deme._deme.DEMClumpTemplate, factor: typing.SupportsFloat | typing.SupportsIndex) -> None

Uniformly scale component radii and relative positions.
DEMClumpTemplate.SetMass()
SetMass(self: deme._deme.DEMClumpTemplate, mass: typing.SupportsFloat | typing.SupportsIndex) -> None

Set the clump mass.
DEMClumpTemplate.SetMaterial()
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.
DEMClumpTemplate.SetMOI()
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.
DEMClumpTemplate.SetVolume()
SetVolume(self: deme._deme.DEMClumpTemplate, volume: typing.SupportsFloat | typing.SupportsIndex) -> None

Set the clump volume, which is required for void-ratio queries.

DEMCombinedInstances

class DEMCombinedInstances
A batch of instantiated combined owners and their member-owner metadata.
DEMCombinedInstances.__init__()
__init__(self: deme._deme.DEMCombinedInstances) -> None

Create an empty combined-instance batch.
DEMCombinedInstances.AddOwnerWildcard()
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.
DEMCombinedInstances.GetNumOwners()
GetNumOwners(self: deme._deme.DEMCombinedInstances) -> int

Get total number of member owners in this combined batch.

DEMCombinedTemplate

class DEMCombinedTemplate
Reusable rigid grouping of clump or mesh templates with fixed member-relative transforms.
DEMCombinedTemplate.__init__()
__init__(self: deme._deme.DEMCombinedTemplate) -> None

Create an empty combined-owner template.

DEMERuntimeDataHelper

class DEMERuntimeDataHelper
No class description is currently available.
DEMERuntimeDataHelper.__init__()
__init__(self: deme._deme.DEMERuntimeDataHelper) -> None
DEMERuntimeDataHelper.SetPathPrefix()
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

class DEMExternObj
Analytical external owner composed of planes, cylinders, and related primitives.
DEMExternObj.__init__()
__init__(self: deme._deme.DEMExternObj) -> None

Create an empty analytical external object.
DEMExternObj.AddCylinder()
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.
DEMExternObj.AddPlane()
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.
DEMExternObj.AddZCylinder()
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.
DEMExternObj.entity_params
Bound attribute.
DEMExternObj.family_code
Bound attribute.
DEMExternObj.init_oriQ
Bound attribute.
DEMExternObj.init_pos
Bound attribute.
DEMExternObj.load_order
Bound attribute.
DEMExternObj.Mass()
Mass(self: deme._deme.DEMExternObj) -> float

Return the object's mass.
DEMExternObj.mass
Bound attribute.
DEMExternObj.materials
Bound attribute.
DEMExternObj.MOI
Bound attribute.
DEMExternObj.SetFamily()
SetFamily(self: deme._deme.DEMExternObj, family: typing.SupportsInt | typing.SupportsIndex) -> None

Set the contact family number before initialization.
DEMExternObj.SetInitPos()
SetInitPos(self: deme._deme.DEMExternObj, position: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None

Set the initial global center-of-mass position before initialization.
DEMExternObj.SetInitQuat()
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.
DEMExternObj.SetMass()
SetMass(self: deme._deme.DEMExternObj, mass: typing.SupportsFloat | typing.SupportsIndex) -> None

Set the object mass.
DEMExternObj.SetMOI()
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.
DEMExternObj.types
Bound attribute.

DEMForceModel

class DEMForceModel
No class description is currently available.
DEMForceModel.__init__()
__init__(self: deme._deme.DEMForceModel, model: deme::FORCE_MODEL) -> None

Create a force-model definition of the selected built-in type.
DEMForceModel.DefineCustomModel()
DefineCustomModel(self: deme._deme.DEMForceModel, arg0: str) -> None

Define user-custom force model with a string which is your force calculation code.
DEMForceModel.DefineCustomModelPrerequisites()
DefineCustomModelPrerequisites(self: deme._deme.DEMForceModel, arg0: str) -> None

Define user-custom force model's utility __device__ functions with a string.
DEMForceModel.ReadCustomModelFile()
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.
DEMForceModel.ReadCustomModelPrerequisitesFile()
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.
DEMForceModel.SetForceModelType()
SetForceModelType(self: deme._deme.DEMForceModel, arg0: deme::FORCE_MODEL) -> None

Set the contact force model type
DEMForceModel.SetMustHaveMatProp()
SetMustHaveMatProp(self: deme._deme.DEMForceModel, arg0: collections.abc.Set[str]) -> None

Specifiy the material properties that this force model will use
DEMForceModel.SetMustPairwiseMatProp()
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).
DEMForceModel.SetPerContactWildcards()
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
DEMForceModel.SetPerOwnerWildcards()
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

class DEMInitializer
No class description is currently available.
DEMInitializer.__init__()
__init__(self: deme._deme.DEMInitializer) -> None

DEMInspector

class DEMInspector
Evaluate a configured aggregate or spatial quantity from initialized simulation state.
DEMInspector.__init__()
__init__(self: deme._deme.DEMInspector, arg0: deme::DEMSolver, arg1: deme::DEMDynamicThread, arg2: str) -> None
DEMInspector.GetValue()
GetValue(self: deme._deme.DEMInspector) -> float

Synchronize as needed and return the inspector's current scalar value.

DEMMaterial

class DEMMaterial
Material property name/value pairs used by a contact force model.
DEMMaterial.__init__()
__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.
DEMMaterial.load_order
Bound attribute.
DEMMaterial.mat_prop
Bound attribute.

DEMMesh

class DEMMesh
Connected triangle-mesh template or external mesh owner.
DEMMesh.__init__()
__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.
DEMMesh.ArePatchesExplicitlySet()
ArePatchesExplicitlySet(self: deme._deme.DEMMesh) -> bool

Return whether patch IDs were explicitly supplied or computed.
DEMMesh.Clear()
Clear(self: deme._deme.DEMMesh) -> None

Remove all mesh geometry and cached attributes.
DEMMesh.ClearWildcards()
ClearWildcards(self: deme._deme.DEMMesh) -> None

Remove cached triangle wildcard values.
DEMMesh.DisableShell()
DisableShell(self: deme._deme.DEMMesh) -> None

Disable finite-thickness shell mode.
DEMMesh.GetCoordsVertices()
GetCoordsVertices(self: deme._deme.DEMMesh) -> list[list[float]]

Return mesh vertex coordinates as ``[[x, y, z], ...]``.
DEMMesh.GetIndicesVertexes()
GetIndicesVertexes(self: deme._deme.DEMMesh) -> list[list[int]]

Return triangle vertex-index triplets.
DEMMesh.GetNumNodes()
GetNumNodes(self: deme._deme.DEMMesh) -> int

Get the number of nodes in the mesh
DEMMesh.GetNumPatches()
GetNumPatches(self: deme._deme.DEMMesh) -> int

Get the number of mesh patches.
DEMMesh.GetNumTriangles()
GetNumTriangles(self: deme._deme.DEMMesh) -> int

Get the number of triangles already added to this mesh
DEMMesh.GetPatchIDs()
GetPatchIDs(self: deme._deme.DEMMesh) -> list[int]

Get one patch ID per triangle.
DEMMesh.GetShellThickness()
GetShellThickness(self: deme._deme.DEMMesh) -> float

Return the full shell thickness.
DEMMesh.GetTriangle()
GetTriangle(self: deme._deme.DEMMesh, arg0: typing.SupportsInt | typing.SupportsIndex) -> deme::DEMTriangle

Access the n-th triangle in mesh
DEMMesh.InformCentroidPrincipal()
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.
DEMMesh.IsShell()
IsShell(self: deme._deme.DEMMesh) -> bool

Return whether this mesh is configured as a shell.
DEMMesh.LoadWavefrontMesh()
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
DEMMesh.Mass()
Mass(self: deme._deme.DEMMesh) -> float

Return the mesh owner's mass.
DEMMesh.Mirror()
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.
DEMMesh.MOI()
MOI(self: deme._deme.DEMMesh) -> float3

Return principal moments of inertia in the mesh-local frame.
DEMMesh.Move()
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.
DEMMesh.Scale()
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.
DEMMesh.SetFamily()
SetFamily(self: deme._deme.DEMMesh, family: typing.SupportsInt | typing.SupportsIndex) -> None

Set the contact family number before initialization.
DEMMesh.SetInitPos()
SetInitPos(self: deme._deme.DEMMesh, position: collections.abc.Sequence[typing.SupportsFloat | typing.SupportsIndex]) -> None

Set the initial global center-of-mass position.
DEMMesh.SetInitQuat()
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)``.
DEMMesh.SetMass()
SetMass(self: deme._deme.DEMMesh, mass: typing.SupportsFloat | typing.SupportsIndex) -> None

Set the mesh owner's mass.
DEMMesh.SetMaterial()
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.
DEMMesh.SetMOI()
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.
DEMMesh.SetPatchIDs()
SetPatchIDs(self: deme._deme.DEMMesh, patch_ids: collections.abc.Sequence[typing.SupportsInt | typing.SupportsIndex]) -> None

Set one patch ID per triangle.
DEMMesh.SetShellThickness()
SetShellThickness(self: deme._deme.DEMMesh, thickness: typing.SupportsFloat | typing.SupportsIndex) -> None

Treat this mesh as a finite-thickness shell.
DEMMesh.SplitIntoConvexPatches()
SplitIntoConvexPatches(self: deme._deme.DEMMesh, hard_angle_deg: typing.SupportsFloat | typing.SupportsIndex = 30.0) -> int

Split the mesh into connected angle-threshold patches.
DEMMesh.UseNormals()
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
DEMMesh.WriteWavefront()
WriteWavefront(self: str, output_file: collections.abc.Sequence[deme._deme.DEMMesh]) -> None

Write the mesh geometry to a Wavefront OBJ file.

DEMTrackedObj

class DEMTrackedObj
No class description is currently available.
DEMTrackedObj.__init__()
__init__(self: deme._deme.DEMTrackedObj, arg0: deme._deme.DEMTrackedObj) -> None

FORCE_MODEL

class FORCE_MODEL
Members:

HERTZIAN

HERTZIAN_FRICTIONLES

CUSTOM
FORCE_MODEL.__init__()
__init__(self: deme._deme.FORCE_MODEL, value: typing.SupportsInt | typing.SupportsIndex) -> None
FORCE_MODEL.CUSTOM
Members:

HERTZIAN

HERTZIAN_FRICTIONLES

CUSTOM
FORCE_MODEL.HERTZIAN
Members:

HERTZIAN

HERTZIAN_FRICTIONLES

CUSTOM
FORCE_MODEL.HERTZIAN_FRICTIONLES
Members:

HERTZIAN

HERTZIAN_FRICTIONLES

CUSTOM

GridSampler

class GridSampler
Regular-grid volumetric point sampler.
GridSampler.__init__()
__init__(self: deme._deme.GridSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None

Create a regular-grid sampler with uniform point spacing.
GridSampler.GetSeparation()
GetSeparation(self: deme._deme.GridSampler) -> float

Return the current grid spacing.
GridSampler.SampleBox()
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.
GridSampler.SampleCylinderX()
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.
GridSampler.SampleCylinderY()
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.
GridSampler.SampleCylinderZ()
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.
GridSampler.SampleSphere()
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.
GridSampler.SetSeparation()
SetSeparation(self: deme._deme.GridSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None

Set the point spacing used by subsequent samples.

HCPSampler

class HCPSampler
Hexagonally close-packed volumetric point sampler.
HCPSampler.__init__()
__init__(self: deme._deme.HCPSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None

Create an HCP sampler with the requested point separation.
HCPSampler.GetSeparation()
GetSeparation(self: deme._deme.HCPSampler) -> float

Return the current point separation.
HCPSampler.SampleBox()
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.
HCPSampler.SampleCylinderX()
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.
HCPSampler.SampleCylinderY()
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.
HCPSampler.SampleCylinderZ()
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.
HCPSampler.SampleSphere()
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.
HCPSampler.SetSeparation()
SetSeparation(self: deme._deme.HCPSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None

Set the point separation used by subsequent samples.

MESH_FORMAT

class MESH_FORMAT
Members:

VTK

OBJ

STL

PLY
MESH_FORMAT.__init__()
__init__(self: deme._deme.MESH_FORMAT, value: typing.SupportsInt | typing.SupportsIndex) -> None
MESH_FORMAT.OBJ
Members:

VTK

OBJ

STL

PLY
MESH_FORMAT.PLY
Members:

VTK

OBJ

STL

PLY
MESH_FORMAT.STL
Members:

VTK

OBJ

STL

PLY
MESH_FORMAT.VTK
Members:

VTK

OBJ

STL

PLY

OUTPUT_CONTENT

class OUTPUT_CONTENT
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD
OUTPUT_CONTENT.__init__()
__init__(self: deme._deme.OUTPUT_CONTENT, value: typing.SupportsInt | typing.SupportsIndex) -> None
OUTPUT_CONTENT.ABS_ACC
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD
OUTPUT_CONTENT.ABSV
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD
OUTPUT_CONTENT.ACC
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD
OUTPUT_CONTENT.ANG_ACC
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD
OUTPUT_CONTENT.ANG_VEL
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD
OUTPUT_CONTENT.FAMILY
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD
OUTPUT_CONTENT.MAT
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD
OUTPUT_CONTENT.OWNER_WILDCARD
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD
OUTPUT_CONTENT.QUAT
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD
OUTPUT_CONTENT.VEL
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD
OUTPUT_CONTENT.XYZ
Members:

XYZ

QUAT

ABSV

VEL

ANG_VEL

ABS_ACC

ACC

ANG_ACC

FAMILY

MAT

OWNER_WILDCARD

OUTPUT_FORMAT

class OUTPUT_FORMAT
Members:

CSV

BINARY
OUTPUT_FORMAT.__init__()
__init__(self: deme._deme.OUTPUT_FORMAT, value: typing.SupportsInt | typing.SupportsIndex) -> None
OUTPUT_FORMAT.BINARY
Members:

CSV

BINARY
OUTPUT_FORMAT.CSV
Members:

CSV

BINARY

OWNER_TYPE

class OWNER_TYPE
Members:

CLUMP

ANALYTICAL

MESH
OWNER_TYPE.__init__()
__init__(self: deme._deme.OWNER_TYPE, value: typing.SupportsInt | typing.SupportsIndex) -> None
OWNER_TYPE.ANALYTICAL
Members:

CLUMP

ANALYTICAL

MESH
OWNER_TYPE.CLUMP
Members:

CLUMP

ANALYTICAL

MESH
OWNER_TYPE.MESH
Members:

CLUMP

ANALYTICAL

MESH

PDSampler

class PDSampler
Poisson-disk volumetric sampler enforcing a minimum point separation.
PDSampler.__init__()
__init__(self: deme._deme.PDSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None

Create a sampler with the requested minimum separation.
PDSampler.GetSeparation()
GetSeparation(self: deme._deme.PDSampler) -> float

Return the current minimum separation.
PDSampler.SampleBox()
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.
PDSampler.SampleCylinderX()
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.
PDSampler.SampleCylinderY()
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.
PDSampler.SampleCylinderZ()
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.
PDSampler.SampleSphere()
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.
PDSampler.SetRandomEngineSeed()
SetRandomEngineSeed(self: deme._deme.PDSampler, seed: typing.SupportsInt | typing.SupportsIndex) -> None

Seed the random engine so Poisson-disk samples can be reproduced.
PDSampler.SetSeparation()
SetSeparation(self: deme._deme.PDSampler, separation: typing.SupportsFloat | typing.SupportsIndex) -> None

Set the minimum separation used by subsequent samples.

SPATIAL_DIR

class SPATIAL_DIR
Members:

X

Y

Z

NONE
SPATIAL_DIR.__init__()
__init__(self: deme._deme.SPATIAL_DIR, value: typing.SupportsInt | typing.SupportsIndex) -> None
SPATIAL_DIR.NONE
Members:

X

Y

Z

NONE
SPATIAL_DIR.X
Members:

X

Y

Z

NONE
SPATIAL_DIR.Y
Members:

X

Y

Z

NONE
SPATIAL_DIR.Z
Members:

X

Y

Z

NONE

TIME_INTEGRATOR

class TIME_INTEGRATOR
Members:

FORWARD_EULER

CENTERED_DIFFERENCE

EXTENDED_TAYLOR

CHUNG
TIME_INTEGRATOR.__init__()
__init__(self: deme._deme.TIME_INTEGRATOR, value: typing.SupportsInt | typing.SupportsIndex) -> None
TIME_INTEGRATOR.CENTERED_DIFFERENCE
Members:

FORWARD_EULER

CENTERED_DIFFERENCE

EXTENDED_TAYLOR

CHUNG
TIME_INTEGRATOR.CHUNG
Members:

FORWARD_EULER

CENTERED_DIFFERENCE

EXTENDED_TAYLOR

CHUNG
TIME_INTEGRATOR.EXTENDED_TAYLOR
Members:

FORWARD_EULER

CENTERED_DIFFERENCE

EXTENDED_TAYLOR

CHUNG
TIME_INTEGRATOR.FORWARD_EULER
Members:

FORWARD_EULER

CENTERED_DIFFERENCE

EXTENDED_TAYLOR

CHUNG