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