DEME 2.0.2__tar.gz → 2.0.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. {deme-2.0.2/deme.egg-info → deme-2.0.4}/PKG-INFO +1 -1
  2. {deme-2.0.2 → deme-2.0.4}/README.md +2 -0
  3. {deme-2.0.2 → deme-2.0.4/deme.egg-info}/PKG-INFO +1 -1
  4. {deme-2.0.2 → deme-2.0.4}/setup.py +22 -18
  5. {deme-2.0.2 → deme-2.0.4}/src/DEM/API.h +81 -10
  6. {deme-2.0.2 → deme-2.0.4}/src/DEM/APIPrivate.cpp +25 -12
  7. {deme-2.0.2 → deme-2.0.4}/src/DEM/APIPublic.cpp +76 -12
  8. {deme-2.0.2 → deme-2.0.4}/src/DEM/AuxClasses.cpp +18 -6
  9. {deme-2.0.2 → deme-2.0.4}/src/DEM/AuxClasses.h +13 -3
  10. {deme-2.0.2 → deme-2.0.4}/src/DEM/Defines.h +8 -8
  11. {deme-2.0.2 → deme-2.0.4}/src/DEM/PyDEME.cpp +101 -14
  12. {deme-2.0.2 → deme-2.0.4}/src/DEM/Structs.h +177 -7
  13. {deme-2.0.2 → deme-2.0.4}/src/DEM/dT.cpp +132 -58
  14. {deme-2.0.2 → deme-2.0.4}/src/DEM/dT.h +5 -1
  15. {deme-2.0.2 → deme-2.0.4}/src/DEM/kT.cpp +11 -11
  16. {deme-2.0.2 → deme-2.0.4}/src/DEM/kT.h +2 -1
  17. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_ContactChain.cpp +1 -1
  18. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Indentation.cpp +18 -5
  19. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_SingleSphereCollide.cpp +11 -2
  20. {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_BallDrop.py +1 -1
  21. {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_BallDrop2D.py +2 -0
  22. {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_Centrifuge.py +1 -1
  23. {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_ConePenetration.py +1 -0
  24. {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_Electrostatic.py +1 -0
  25. {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_FlexibleMesh.py +1 -0
  26. {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_GRCPrep_Part1.py +1 -0
  27. {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_GameOfLife.py +2 -0
  28. {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_Mixer.py +2 -1
  29. {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_WheelDPSimplified.py +1 -1
  30. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCalcForceKernels.cu +11 -9
  31. {deme-2.0.2 → deme-2.0.4}/CMakeLists.txt +0 -0
  32. {deme-2.0.2 → deme-2.0.4}/LICENSE.md +0 -0
  33. {deme-2.0.2 → deme-2.0.4}/MANIFEST.in +0 -0
  34. {deme-2.0.2 → deme-2.0.4}/cmake/CudaSupportedArchitectures.cmake +0 -0
  35. {deme-2.0.2 → deme-2.0.4}/cmake/CxxStdAutodetect.cmake +0 -0
  36. {deme-2.0.2 → deme-2.0.4}/cmake/DEMEConfig.cmake.in +0 -0
  37. {deme-2.0.2 → deme-2.0.4}/cmake/FixNinjaColors.cmake +0 -0
  38. {deme-2.0.2 → deme-2.0.4}/data/clumps/3_clump.csv +0 -0
  39. {deme-2.0.2 → deme-2.0.4}/data/clumps/6_clump.csv +0 -0
  40. {deme-2.0.2 → deme-2.0.4}/data/clumps/ContactChain_initial.csv +0 -0
  41. {deme-2.0.2 → deme-2.0.4}/data/clumps/TeddyBear.csv +0 -0
  42. {deme-2.0.2 → deme-2.0.4}/data/clumps/ViperWheelSimple.csv +0 -0
  43. {deme-2.0.2 → deme-2.0.4}/data/clumps/ellipsoid_2_1_1.csv +0 -0
  44. {deme-2.0.2 → deme-2.0.4}/data/clumps/molecule.csv +0 -0
  45. {deme-2.0.2 → deme-2.0.4}/data/clumps/spiky_sphere.csv +0 -0
  46. {deme-2.0.2 → deme-2.0.4}/data/clumps/triangular_flat.csv +0 -0
  47. {deme-2.0.2 → deme-2.0.4}/data/clumps/triangular_flat_6comp.csv +0 -0
  48. {deme-2.0.2 → deme-2.0.4}/data/mesh/GPBR_Vessel_Fine.obj +0 -0
  49. {deme-2.0.2 → deme-2.0.4}/data/mesh/cone.obj +0 -0
  50. {deme-2.0.2 → deme-2.0.4}/data/mesh/cube.obj +0 -0
  51. {deme-2.0.2 → deme-2.0.4}/data/mesh/cyl_r1_h2.obj +0 -0
  52. {deme-2.0.2 → deme-2.0.4}/data/mesh/excavator.obj +0 -0
  53. {deme-2.0.2 → deme-2.0.4}/data/mesh/funnel.obj +0 -0
  54. {deme-2.0.2 → deme-2.0.4}/data/mesh/funnel_left.obj +0 -0
  55. {deme-2.0.2 → deme-2.0.4}/data/mesh/hourglass.obj +0 -0
  56. {deme-2.0.2 → deme-2.0.4}/data/mesh/hourglass_cap.obj +0 -0
  57. {deme-2.0.2 → deme-2.0.4}/data/mesh/internal_mixer.obj +0 -0
  58. {deme-2.0.2 → deme-2.0.4}/data/mesh/plane_20by20.obj +0 -0
  59. {deme-2.0.2 → deme-2.0.4}/data/mesh/rover_wheels/curiosity_wheel.obj +0 -0
  60. {deme-2.0.2 → deme-2.0.4}/data/mesh/rover_wheels/curiosity_wheel_surface.obj +0 -0
  61. {deme-2.0.2 → deme-2.0.4}/data/mesh/rover_wheels/viper_wheel_right.obj +0 -0
  62. {deme-2.0.2 → deme-2.0.4}/data/mesh/silo.obj +0 -0
  63. {deme-2.0.2 → deme-2.0.4}/data/mesh/sphere.obj +0 -0
  64. {deme-2.0.2 → deme-2.0.4}/data/mesh/thin_plate.obj +0 -0
  65. {deme-2.0.2 → deme-2.0.4}/data/sim_data/example_cnt_pairs.csv +0 -0
  66. {deme-2.0.2 → deme-2.0.4}/deme.egg-info/SOURCES.txt +0 -0
  67. {deme-2.0.2 → deme-2.0.4}/deme.egg-info/dependency_links.txt +0 -0
  68. {deme-2.0.2 → deme-2.0.4}/deme.egg-info/not-zip-safe +0 -0
  69. {deme-2.0.2 → deme-2.0.4}/deme.egg-info/requires.txt +0 -0
  70. {deme-2.0.2 → deme-2.0.4}/deme.egg-info/top_level.txt +0 -0
  71. {deme-2.0.2 → deme-2.0.4}/packaging_instructions.txt +0 -0
  72. {deme-2.0.2 → deme-2.0.4}/pyproject.toml +0 -0
  73. {deme-2.0.2 → deme-2.0.4}/setup.cfg +0 -0
  74. {deme-2.0.2 → deme-2.0.4}/src/.format_all +0 -0
  75. {deme-2.0.2 → deme-2.0.4}/src/DEM/BdrsAndObjs.h +0 -0
  76. {deme-2.0.2 → deme-2.0.4}/src/DEM/CMakeLists.txt +0 -0
  77. {deme-2.0.2 → deme-2.0.4}/src/DEM/HostSideHelpers.hpp +0 -0
  78. {deme-2.0.2 → deme-2.0.4}/src/DEM/MeshUtils.cpp +0 -0
  79. {deme-2.0.2 → deme-2.0.4}/src/DEM/Models.h +0 -0
  80. {deme-2.0.2 → deme-2.0.4}/src/DEM/VariableTypes.h +0 -0
  81. {deme-2.0.2 → deme-2.0.4}/src/DEM/utils/Samplers.hpp +0 -0
  82. {deme-2.0.2 → deme-2.0.4}/src/algorithms/CMakeLists.txt +0 -0
  83. {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMCubContactDetection.cu +0 -0
  84. {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMCubForceCollection.cu +0 -0
  85. {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMCubInstantiations.cu +0 -0
  86. {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMCubWrappers.cu +0 -0
  87. {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMDynamicMisc.cu +0 -0
  88. {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMStaticDeviceSubroutines.h +0 -0
  89. {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMStaticDeviceUtilities.cuh +0 -0
  90. {deme-2.0.2 → deme-2.0.4}/src/core/ApiVersion.h.in +0 -0
  91. {deme-2.0.2 → deme-2.0.4}/src/core/CMakeLists.txt +0 -0
  92. {deme-2.0.2 → deme-2.0.4}/src/core/DebugInfo.cpp +0 -0
  93. {deme-2.0.2 → deme-2.0.4}/src/core/utils/CudaAllocator.hpp +0 -0
  94. {deme-2.0.2 → deme-2.0.4}/src/core/utils/DEMEPaths.cpp +0 -0
  95. {deme-2.0.2 → deme-2.0.4}/src/core/utils/DEMEPaths.h +0 -0
  96. {deme-2.0.2 → deme-2.0.4}/src/core/utils/DataMigrationHelper.hpp +0 -0
  97. {deme-2.0.2 → deme-2.0.4}/src/core/utils/GpuError.h +0 -0
  98. {deme-2.0.2 → deme-2.0.4}/src/core/utils/GpuManager.cpp +0 -0
  99. {deme-2.0.2 → deme-2.0.4}/src/core/utils/GpuManager.h +0 -0
  100. {deme-2.0.2 → deme-2.0.4}/src/core/utils/HeaderGenerator.h +0 -0
  101. {deme-2.0.2 → deme-2.0.4}/src/core/utils/JitHelper.cpp +0 -0
  102. {deme-2.0.2 → deme-2.0.4}/src/core/utils/JitHelper.h +0 -0
  103. {deme-2.0.2 → deme-2.0.4}/src/core/utils/ManagedMemory.hpp +0 -0
  104. {deme-2.0.2 → deme-2.0.4}/src/core/utils/RuntimeData.cpp.in +0 -0
  105. {deme-2.0.2 → deme-2.0.4}/src/core/utils/RuntimeData.h +0 -0
  106. {deme-2.0.2 → deme-2.0.4}/src/core/utils/ThreadManager.h +0 -0
  107. {deme-2.0.2 → deme-2.0.4}/src/core/utils/Timer.hpp +0 -0
  108. {deme-2.0.2 → deme-2.0.4}/src/core/utils/WavefrontMeshLoader.hpp +0 -0
  109. {deme-2.0.2 → deme-2.0.4}/src/core/utils/csv.hpp +0 -0
  110. {deme-2.0.2 → deme-2.0.4}/src/demo/CMakeLists.txt +0 -0
  111. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_BallDrop.cpp +0 -0
  112. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_BallDrop2D.cpp +0 -0
  113. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Centrifuge.cpp +0 -0
  114. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_ConePenetration.cpp +0 -0
  115. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Electrostatic.cpp +0 -0
  116. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_FlexibleMesh.cpp +0 -0
  117. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Fracture_Box.cpp +0 -0
  118. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_GRCPrep_Part1.cpp +0 -0
  119. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_GRCPrep_Part2.cpp +0 -0
  120. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_GRCPrep_Part3.cpp +0 -0
  121. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_GameOfLife.cpp +0 -0
  122. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Hopper_Sphere_Cylinder.cpp +0 -0
  123. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Mixer.cpp +0 -0
  124. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Plow.cpp +0 -0
  125. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Repose.cpp +0 -0
  126. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Repose2D.cpp +0 -0
  127. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_RotatingDrum.cpp +0 -0
  128. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Shake.cpp +0 -0
  129. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Sieve.cpp +0 -0
  130. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_SolarSystem.cpp +0 -0
  131. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_TestPack.cpp +0 -0
  132. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_WheelDP.cpp +0 -0
  133. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_WheelDPSimplified.cpp +0 -0
  134. {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_WheelSlopeSlip.cpp +0 -0
  135. {deme-2.0.2 → deme-2.0.4}/src/kernel/CUDAMathHelpers.cuh +0 -0
  136. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMBinSphereKernels.cu +0 -0
  137. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMBinTriangleKernels.cu +0 -0
  138. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCollectForceKernels.cu +0 -0
  139. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCollectForceKernels_Compact.cu +0 -0
  140. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCollisionKernels.cu +0 -0
  141. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMContactKernels_SphereSphere.cu +0 -0
  142. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMContactKernels_SphereTriangle.cu +0 -0
  143. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/AnalyticalCompDefJitify.cu +0 -0
  144. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratAllFlatten.cu +0 -0
  145. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratAllJitify.cu +0 -0
  146. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratPartialJitify.cu +0 -0
  147. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ClumpCompDefJitify.cu +0 -0
  148. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ContactInfoWriteBack.cu +0 -0
  149. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ForceInKernelReductionStrat.cu +0 -0
  150. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/FrictionlessHertzianForceModel.cu +0 -0
  151. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/FullHertzianForceModel.cu +0 -0
  152. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnCenteredDiff.cu +0 -0
  153. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnExtendedTaylor.cu +0 -0
  154. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnForwardEuler.cu +0 -0
  155. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MOIAcqStratFlatten.cu +0 -0
  156. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MOIAcqStratJitify.cu +0 -0
  157. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MOIDefJitify.cu +0 -0
  158. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MassAcqStratFlatten.cu +0 -0
  159. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MassAcqStratJitify.cu +0 -0
  160. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MassDefJitify.cu +0 -0
  161. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMHelperKernels.cuh +0 -0
  162. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMHistoryMappingKernels.cu +0 -0
  163. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMIntegrationKernels.cu +0 -0
  164. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMMiscKernels.cu +0 -0
  165. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMModeratorKernels.cu +0 -0
  166. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMOwnerQueryKernels.cu +0 -0
  167. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMPrepForceKernels.cu +0 -0
  168. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMSphereQueryKernels.cu +0 -0
  169. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMTriangleBoxIntersect.cu +0 -0
  170. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModel2D.cu +0 -0
  171. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelMooring.cu +0 -0
  172. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelMooringPosition.cu +0 -0
  173. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelWithCohesion.cu +0 -0
  174. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelWithElectrostatic.cu +0 -0
  175. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelWithFractureModel.cu +0 -0
  176. {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelWithGravity.cu +0 -0
  177. {deme-2.0.2 → deme-2.0.4}/src/kernel/hello.cu +0 -0
  178. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/.clang-format +0 -0
  179. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/.git +0 -0
  180. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/.gitignore +0 -0
  181. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/Doxyfile +0 -0
  182. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/LICENSE +0 -0
  183. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/Makefile +0 -0
  184. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/README.md +0 -0
  185. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/example_headers/class_arg_kernel.cuh +0 -0
  186. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/example_headers/constant_header.cuh +0 -0
  187. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/example_headers/my_header1.cuh +0 -0
  188. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/example_headers/my_header2.cuh +0 -0
  189. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/example_headers/my_header3.cuh +0 -0
  190. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/jitify.hpp +0 -0
  191. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/jitify_example.cpp +0 -0
  192. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/jitify_test.cu +0 -0
  193. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/nvrtc_cli.cpp +0 -0
  194. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/nvrtc_cli_test.sh +0 -0
  195. {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/stringify.cpp +0 -0
  196. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.appveyor.yml +0 -0
  197. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.clang-format +0 -0
  198. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.clang-tidy +0 -0
  199. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.cmake-format.yaml +0 -0
  200. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.codespell-ignore-lines +0 -0
  201. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.git +0 -0
  202. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.gitattributes +0 -0
  203. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/CODEOWNERS +0 -0
  204. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/CONTRIBUTING.md +0 -0
  205. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  206. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/ISSUE_TEMPLATE/config.yml +0 -0
  207. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/dependabot.yml +0 -0
  208. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/labeler.yml +0 -0
  209. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/labeler_merged.yml +0 -0
  210. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/matchers/pylint.json +0 -0
  211. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/pull_request_template.md +0 -0
  212. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/ci.yml +0 -0
  213. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/configure.yml +0 -0
  214. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/format.yml +0 -0
  215. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/labeler.yml +0 -0
  216. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/pip.yml +0 -0
  217. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/upstream.yml +0 -0
  218. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.gitignore +0 -0
  219. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.pre-commit-config.yaml +0 -0
  220. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.readthedocs.yml +0 -0
  221. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/CMakeLists.txt +0 -0
  222. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/LICENSE +0 -0
  223. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/MANIFEST.in +0 -0
  224. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/README.rst +0 -0
  225. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/Doxyfile +0 -0
  226. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/Makefile +0 -0
  227. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/_static/css/custom.css +0 -0
  228. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/chrono.rst +0 -0
  229. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/custom.rst +0 -0
  230. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/eigen.rst +0 -0
  231. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/functional.rst +0 -0
  232. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/index.rst +0 -0
  233. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/overview.rst +0 -0
  234. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/stl.rst +0 -0
  235. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/strings.rst +0 -0
  236. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/classes.rst +0 -0
  237. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/embedding.rst +0 -0
  238. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/exceptions.rst +0 -0
  239. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/functions.rst +0 -0
  240. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/misc.rst +0 -0
  241. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/pycpp/index.rst +0 -0
  242. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/pycpp/numpy.rst +0 -0
  243. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/pycpp/object.rst +0 -0
  244. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/pycpp/utilities.rst +0 -0
  245. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/smart_ptrs.rst +0 -0
  246. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/basics.rst +0 -0
  247. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/benchmark.py +0 -0
  248. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/benchmark.rst +0 -0
  249. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/changelog.rst +0 -0
  250. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/classes.rst +0 -0
  251. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/cmake/index.rst +0 -0
  252. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/compiling.rst +0 -0
  253. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/conf.py +0 -0
  254. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/faq.rst +0 -0
  255. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/index.rst +0 -0
  256. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/installing.rst +0 -0
  257. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/limitations.rst +0 -0
  258. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/pybind11-logo.png +0 -0
  259. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
  260. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/pybind11_vs_boost_python1.svg +0 -0
  261. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
  262. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/pybind11_vs_boost_python2.svg +0 -0
  263. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/reference.rst +0 -0
  264. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/release.rst +0 -0
  265. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/requirements.txt +0 -0
  266. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/upgrade.rst +0 -0
  267. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/attr.h +0 -0
  268. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/buffer_info.h +0 -0
  269. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/cast.h +0 -0
  270. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/chrono.h +0 -0
  271. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/common.h +0 -0
  272. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/complex.h +0 -0
  273. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/class.h +0 -0
  274. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/common.h +0 -0
  275. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/descr.h +0 -0
  276. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/init.h +0 -0
  277. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/internals.h +0 -0
  278. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/type_caster_base.h +0 -0
  279. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/typeid.h +0 -0
  280. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/eigen/matrix.h +0 -0
  281. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/eigen/tensor.h +0 -0
  282. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/eigen.h +0 -0
  283. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/embed.h +0 -0
  284. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/eval.h +0 -0
  285. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/functional.h +0 -0
  286. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/gil.h +0 -0
  287. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/iostream.h +0 -0
  288. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/numpy.h +0 -0
  289. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/operators.h +0 -0
  290. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/options.h +0 -0
  291. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/pybind11.h +0 -0
  292. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/pytypes.h +0 -0
  293. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/stl/filesystem.h +0 -0
  294. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/stl.h +0 -0
  295. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/stl_bind.h +0 -0
  296. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/noxfile.py +0 -0
  297. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/__init__.py +0 -0
  298. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/__main__.py +0 -0
  299. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/_version.py +0 -0
  300. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/commands.py +0 -0
  301. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/py.typed +0 -0
  302. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/setup_helpers.py +0 -0
  303. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pyproject.toml +0 -0
  304. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/setup.cfg +0 -0
  305. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/setup.py +0 -0
  306. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/CMakeLists.txt +0 -0
  307. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/conftest.py +0 -0
  308. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/constructor_stats.h +0 -0
  309. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/cross_module_gil_utils.cpp +0 -0
  310. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/cross_module_interleaved_error_already_set.cpp +0 -0
  311. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/eigen_tensor_avoid_stl_array.cpp +0 -0
  312. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/env.py +0 -0
  313. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/extra_python_package/pytest.ini +0 -0
  314. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/extra_python_package/test_files.py +0 -0
  315. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/extra_setuptools/pytest.ini +0 -0
  316. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/extra_setuptools/test_setuphelper.py +0 -0
  317. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/local_bindings.h +0 -0
  318. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/object.h +0 -0
  319. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/pybind11_cross_module_tests.cpp +0 -0
  320. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/pybind11_tests.cpp +0 -0
  321. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/pybind11_tests.h +0 -0
  322. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/pytest.ini +0 -0
  323. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/requirements.txt +0 -0
  324. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_async.cpp +0 -0
  325. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_async.py +0 -0
  326. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_buffers.cpp +0 -0
  327. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_buffers.py +0 -0
  328. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_builtin_casters.cpp +0 -0
  329. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_builtin_casters.py +0 -0
  330. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_call_policies.cpp +0 -0
  331. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_call_policies.py +0 -0
  332. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_callbacks.cpp +0 -0
  333. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_callbacks.py +0 -0
  334. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_chrono.cpp +0 -0
  335. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_chrono.py +0 -0
  336. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_class.cpp +0 -0
  337. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_class.py +0 -0
  338. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/CMakeLists.txt +0 -0
  339. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/embed.cpp +0 -0
  340. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +0 -0
  341. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +0 -0
  342. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +0 -0
  343. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/main.cpp +0 -0
  344. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +0 -0
  345. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +0 -0
  346. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +0 -0
  347. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/test.py +0 -0
  348. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_const_name.cpp +0 -0
  349. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_const_name.py +0 -0
  350. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_constants_and_functions.cpp +0 -0
  351. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_constants_and_functions.py +0 -0
  352. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_copy_move.cpp +0 -0
  353. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_copy_move.py +0 -0
  354. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_custom_type_casters.cpp +0 -0
  355. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_custom_type_casters.py +0 -0
  356. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_custom_type_setup.cpp +0 -0
  357. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_custom_type_setup.py +0 -0
  358. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_docstring_options.cpp +0 -0
  359. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_docstring_options.py +0 -0
  360. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eigen_matrix.cpp +0 -0
  361. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eigen_matrix.py +0 -0
  362. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eigen_tensor.cpp +0 -0
  363. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eigen_tensor.inl +0 -0
  364. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eigen_tensor.py +0 -0
  365. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/CMakeLists.txt +0 -0
  366. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/catch.cpp +0 -0
  367. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/external_module.cpp +0 -0
  368. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/test_interpreter.cpp +0 -0
  369. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/test_interpreter.py +0 -0
  370. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/test_trampoline.py +0 -0
  371. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_enum.cpp +0 -0
  372. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_enum.py +0 -0
  373. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eval.cpp +0 -0
  374. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eval.py +0 -0
  375. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eval_call.py +0 -0
  376. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_exceptions.cpp +0 -0
  377. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_exceptions.h +0 -0
  378. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_exceptions.py +0 -0
  379. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_factory_constructors.cpp +0 -0
  380. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_factory_constructors.py +0 -0
  381. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_gil_scoped.cpp +0 -0
  382. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_gil_scoped.py +0 -0
  383. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_iostream.cpp +0 -0
  384. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_iostream.py +0 -0
  385. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_kwargs_and_defaults.cpp +0 -0
  386. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_kwargs_and_defaults.py +0 -0
  387. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_local_bindings.cpp +0 -0
  388. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_local_bindings.py +0 -0
  389. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_methods_and_attributes.cpp +0 -0
  390. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_methods_and_attributes.py +0 -0
  391. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_modules.cpp +0 -0
  392. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_modules.py +0 -0
  393. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_multiple_inheritance.cpp +0 -0
  394. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_multiple_inheritance.py +0 -0
  395. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_array.cpp +0 -0
  396. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_array.py +0 -0
  397. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_dtypes.cpp +0 -0
  398. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_dtypes.py +0 -0
  399. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_vectorize.cpp +0 -0
  400. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_vectorize.py +0 -0
  401. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_opaque_types.cpp +0 -0
  402. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_opaque_types.py +0 -0
  403. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_operator_overloading.cpp +0 -0
  404. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_operator_overloading.py +0 -0
  405. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_pickling.cpp +0 -0
  406. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_pickling.py +0 -0
  407. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_pytypes.cpp +0 -0
  408. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_pytypes.py +0 -0
  409. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_sequences_and_iterators.cpp +0 -0
  410. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_sequences_and_iterators.py +0 -0
  411. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_smart_ptr.cpp +0 -0
  412. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_smart_ptr.py +0 -0
  413. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_stl.cpp +0 -0
  414. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_stl.py +0 -0
  415. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_stl_binders.cpp +0 -0
  416. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_stl_binders.py +0 -0
  417. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_tagbased_polymorphic.cpp +0 -0
  418. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_tagbased_polymorphic.py +0 -0
  419. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_thread.cpp +0 -0
  420. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_thread.py +0 -0
  421. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_union.cpp +0 -0
  422. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_union.py +0 -0
  423. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_virtual_functions.cpp +0 -0
  424. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_virtual_functions.py +0 -0
  425. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/valgrind-numpy-scipy.supp +0 -0
  426. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/valgrind-python.supp +0 -0
  427. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/FindCatch.cmake +0 -0
  428. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/FindEigen3.cmake +0 -0
  429. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/FindPythonLibsNew.cmake +0 -0
  430. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/JoinPaths.cmake +0 -0
  431. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/check-style.sh +0 -0
  432. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/cmake_uninstall.cmake.in +0 -0
  433. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/codespell_ignore_lines_from_errors.py +0 -0
  434. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/libsize.py +0 -0
  435. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/make_changelog.py +0 -0
  436. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pybind11.pc.in +0 -0
  437. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pybind11Common.cmake +0 -0
  438. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pybind11Config.cmake.in +0 -0
  439. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pybind11NewTools.cmake +0 -0
  440. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pybind11Tools.cmake +0 -0
  441. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pyproject.toml +0 -0
  442. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/setup_global.py.in +0 -0
  443. {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/setup_main.py.in +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deme
3
- Version: 2.0.2
3
+ Version: 2.0.4
4
4
  Summary: PyBind Wrapper Library for DEM-Engine
5
5
  Home-page: UNKNOWN
6
6
  Author: Ruochun Zhang
@@ -85,6 +85,8 @@ pip3 install DEME
85
85
 
86
86
  Then [Python scripts](https://github.com/projectchrono/DEM-Engine/tree/pyDEME_demo/src/demo) can be executed in this environment. To understand the content of each Python demo, refer to the explanations of the C++ demos with the same names in <a href="#examples">Numerical examples</a> section.
87
87
 
88
+ If you use _pyDEME_ in conjunction with PyChrono, you should `import pyDEME` first, then PyChrono.
89
+
88
90
  <h2 id="compilation">Compilation</h2>
89
91
 
90
92
  You can also build C++ _DEME_ from source. It allows for potentially more performance and more tailoring.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deme
3
- Version: 2.0.2
3
+ Version: 2.0.4
4
4
  Summary: PyBind Wrapper Library for DEM-Engine
5
5
  Home-page: UNKNOWN
6
6
  Author: Ruochun Zhang
@@ -6,6 +6,7 @@ from pathlib import Path
6
6
 
7
7
  from setuptools import Extension, setup
8
8
  from pybind11.setup_helpers import Pybind11Extension, build_ext
9
+
9
10
  # from setuptools.command.build_ext import build_ext
10
11
 
11
12
  # Convert distutils Windows platform specifiers to CMake -A arguments
@@ -23,12 +24,21 @@ PLAT_TO_CMAKE = {
23
24
 
24
25
  class CMakeExtension(Pybind11Extension):
25
26
  def __init__(self, name: str, sourcedir: str = "") -> None:
26
-
27
27
  # Obtaining conda_prefix environment variable
28
28
  conda_prefix = os.environ.get("CONDA_PREFIX")
29
29
 
30
- super().__init__(name, sources=[], extra_link_args=['--no-as-needed', '-Wl,-rpath,' + conda_prefix + '/lib/python3.10/site-packages/lib'], runtime_library_dirs=[conda_prefix +
31
- '/lib/python3.10/site-packages/lib'], libraries=["libDEMERuntimeDataHelper"], include_dirs=["./src/DEM/", "./src/DEM/VariableTypes"], extra_objects=["./build"])
30
+ py_version = f"{sys.version_info.major}.{sys.version_info.minor}"
31
+ rpath = f"{conda_prefix}/lib/python{py_version}/site-packages/lib"
32
+
33
+ super().__init__(
34
+ name,
35
+ sources=[],
36
+ extra_link_args=["--no-as-needed", f"-Wl,-rpath,{rpath}"],
37
+ runtime_library_dirs=[rpath],
38
+ libraries=["libDEMERuntimeDataHelper"],
39
+ include_dirs=["./src/DEM/", "./src/DEM/VariableTypes"],
40
+ extra_objects=["./build"],
41
+ )
32
42
  self.sourcedir = os.fspath(Path(sourcedir).resolve())
33
43
 
34
44
 
@@ -37,14 +47,12 @@ class CMakeBuild(build_ext):
37
47
  # Must be in this form due to bug in .resolve() only fixed in Python 3.10+
38
48
  ext_fullpath = Path.cwd() / self.get_ext_fullpath(ext.name)
39
49
 
40
- extdir = os.path.abspath(os.path.dirname(
41
- self.get_ext_fullpath(ext.name)))
50
+ extdir = os.path.abspath(os.path.dirname(self.get_ext_fullpath(ext.name)))
42
51
 
43
52
  # Using this requires trailing slash for auto-detection & inclusion of
44
53
  # auxiliary "native" libs
45
54
 
46
- debug = int(os.environ.get("DEBUG", 0)
47
- ) if self.debug is None else self.debug
55
+ debug = int(os.environ.get("DEBUG", 0)) if self.debug is None else self.debug
48
56
  cfg = "Debug" if debug else "Release"
49
57
 
50
58
  # CMake lets you override the generator - we need to check this.
@@ -67,12 +75,10 @@ class CMakeBuild(build_ext):
67
75
  # Adding CMake arguments set as environment variable
68
76
  # (needed e.g. to build for ARM OSx on conda-forge)
69
77
  if "CMAKE_ARGS" in os.environ:
70
- cmake_args += [
71
- item for item in os.environ["CMAKE_ARGS"].split(" ") if item]
78
+ cmake_args += [item for item in os.environ["CMAKE_ARGS"].split(" ") if item]
72
79
 
73
80
  # In this example, we pass in the version to C++. You might not need to.
74
- cmake_args += [
75
- f"-DEXAMPLE_VERSION_INFO={self.distribution.get_version()}"]
81
+ cmake_args += [f"-DEXAMPLE_VERSION_INFO={self.distribution.get_version()}"]
76
82
 
77
83
  if self.compiler.compiler_type != "msvc":
78
84
  # Using Ninja-build since it a) is available as a wheel and b)
@@ -94,8 +100,7 @@ class CMakeBuild(build_ext):
94
100
 
95
101
  else:
96
102
  # Single config generators are handled "normally"
97
- single_config = any(
98
- x in cmake_generator for x in {"NMake", "Ninja"})
103
+ single_config = any(x in cmake_generator for x in {"NMake", "Ninja"})
99
104
 
100
105
  # CMake allows an arch-in-generator style for backward compatibility
101
106
  contains_arch = any(x in cmake_generator for x in {"ARM", "Win64"})
@@ -117,8 +122,7 @@ class CMakeBuild(build_ext):
117
122
  # Cross-compile support for macOS - respect ARCHFLAGS if set
118
123
  archs = re.findall(r"-arch (\S+)", os.environ.get("ARCHFLAGS", ""))
119
124
  if archs:
120
- cmake_args += [
121
- "-DCMAKE_OSX_ARCHITECTURES={}".format(";".join(archs))]
125
+ cmake_args += ["-DCMAKE_OSX_ARCHITECTURES={}".format(";".join(archs))]
122
126
 
123
127
  # Set CMAKE_BUILD_PARALLEL_LEVEL to control the parallel build level
124
128
  # across all generators.
@@ -148,7 +152,7 @@ class CMakeBuild(build_ext):
148
152
  # logic and declaration, and simpler if you include description/version in a file.
149
153
  setup(
150
154
  name="deme",
151
- version="2.0.2",
155
+ version="2.0.4",
152
156
  author="Ruochun Zhang",
153
157
  author_email="ruochunz@gmail.com",
154
158
  description="PyBind Wrapper Library for DEM-Engine",
@@ -158,6 +162,6 @@ setup(
158
162
  zip_safe=False,
159
163
  include_package_data=True,
160
164
  sources=["./src/"],
161
- install_requires=['numpy', 'pybind11'],
162
- extras_require={"dev": ['pybind11'], "test": ["pytest>=6.0"]},
165
+ install_requires=["numpy", "pybind11"],
166
+ extras_require={"dev": ["pybind11"], "test": ["pytest>=6.0"]},
163
167
  )
@@ -88,8 +88,11 @@ class DEMSolver {
88
88
  /// Set the initial time step size. If using constant step size, then this will be used throughout; otherwise, the
89
89
  /// actual step size depends on the variable step strategy.
90
90
  void SetInitTimeStep(double ts_size) { m_ts_size = ts_size; }
91
- /// Return the number of clumps that are currently in the simulation.
91
+ /// Return the number of clumps that are currently in the simulation. Must be used after initialization.
92
92
  size_t GetNumClumps() const { return nOwnerClumps; }
93
+ /// Return the total number of owners (clumps + meshes + analytical objects) that are currently in the simulation.
94
+ /// Must be used after initialization.
95
+ size_t GetNumOwners() const { return nOwnerBodies; }
93
96
  /// @brief Get the number of kT-reported potential contact pairs.
94
97
  /// @return Number of potential contact pairs.
95
98
  size_t GetNumContacts() const { return dT->getNumContacts(); }
@@ -125,6 +128,10 @@ class DEMSolver {
125
128
  /// Get the jitification string substitution laundary list. It is needed by some of this simulation system's friend
126
129
  /// classes.
127
130
  std::unordered_map<std::string, std::string> GetJitStringSubs() const { return m_subs; }
131
+ /// Get current jitification options. It is needed by some of this simulation system's friend classes.
132
+ std::vector<std::string> GetJitifyOptions() const { return m_jitify_options; }
133
+ /// Set the jitification options. It is only needed by advanced users.
134
+ void SetJitifyOptions(const std::vector<std::string>& options) { m_jitify_options = options; }
128
135
 
129
136
  /// Explicitly instruct the bin size (for contact detection) that the solver should use.
130
137
  void SetInitBinSize(double bin_size) {
@@ -413,7 +420,7 @@ class DEMSolver {
413
420
 
414
421
  /// @brief Get the clumps that are in contact with this owner as a vector.
415
422
  /// @details No multi-owner bulk version. This is due to efficiency concerns. If getting multiple owners' contacting
416
- /// clumps is needed, use family-based GetClumpContacts method, then the owner ID list-based c method if you further
423
+ /// clumps is needed, use family-based GetContacts method, then the owner ID list-based c method if you further
417
424
  /// need the contact forces information.
418
425
  /// @param ownerID The ID of the owner that is being queried.
419
426
  /// @return Clump owner IDs in contact with this owner.
@@ -487,18 +494,25 @@ class DEMSolver {
487
494
  /// @return A vector of float3 representing the global coordinates of the mesh nodes.
488
495
  std::vector<float3> GetMeshNodesGlobal(bodyID_t ownerID);
489
496
 
490
- /// @brief Get all clump--clump contacts in the simulation system.
497
+ /// @brief Get all clump--clump contact ID pairs in the simulation system. Note all GetContact-like methods reports
498
+ /// potential contacts (not necessarily confirmed contacts), meaning they are similar to what
499
+ /// WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.
500
+ /// @details Do not call this method with high frequency, as it is not efficient.
491
501
  /// @return A sorted (based on contact body A's owner ID) vector of contact pairs. First is the owner ID of contact
492
502
  /// body A, and Second is that of contact body B.
493
503
  std::vector<std::pair<bodyID_t, bodyID_t>> GetClumpContacts() const;
494
-
495
- /// @brief Get all clump--clump contacts in the simulation system.
504
+ /// @brief Get all clump--clump contact ID pairs in the simulation system. Note all GetContact-like methods reports
505
+ /// potential contacts (not necessarily confirmed contacts), meaning they are similar to what
506
+ /// WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.
507
+ /// @details Do not call this method with high frequency, as it is not efficient.
496
508
  /// @param family_to_include Contacts that involve a body in a family not listed in this argument are ignored.
497
509
  /// @return A sorted (based on contact body A's owner ID) vector of contact pairs. First is the owner ID of contact
498
510
  /// body A, and Second is that of contact body B.
499
511
  std::vector<std::pair<bodyID_t, bodyID_t>> GetClumpContacts(const std::set<family_t>& family_to_include) const;
500
-
501
- /// @brief Get all clump--clump contacts in the simulation system.
512
+ /// @brief Get all clump--clump contact ID pairs in the simulation system. Note all GetContact-like methods reports
513
+ /// potential contacts (not necessarily confirmed contacts), meaning they are similar to what
514
+ /// WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.
515
+ /// @details Do not call this method with high frequency, as it is not efficient.
502
516
  /// @param family_pair Functions returns a vector of contact body family number pairs. First is the family number of
503
517
  /// contact body A, and Second is that of contact body B.
504
518
  /// @return A sorted (based on contact body A's owner ID) vector of contact pairs. First is the owner ID of contact
@@ -506,6 +520,51 @@ class DEMSolver {
506
520
  std::vector<std::pair<bodyID_t, bodyID_t>> GetClumpContacts(
507
521
  std::vector<std::pair<family_t, family_t>>& family_pair) const;
508
522
 
523
+ /// @brief Get all contact ID pairs in the simulation system. Note all GetContact-like methods reports potential
524
+ /// contacts (not necessarily confirmed contacts), meaning they are similar to what
525
+ /// WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.
526
+ /// @details Do not call this method with high frequency, as it is not efficient.
527
+ /// @return A sorted (based on contact body A's owner ID) vector of contact pairs. First is the owner ID of contact
528
+ /// body A, and Second is that of contact body B.
529
+ std::vector<std::pair<bodyID_t, bodyID_t>> GetContacts() const;
530
+ /// @brief Get all contact ID pairs in the simulation system. Note all GetContact-like methods reports potential
531
+ /// contacts (not necessarily confirmed contacts), meaning they are similar to what
532
+ /// WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.
533
+ /// @details Do not call this method with high frequency, as it is not efficient.
534
+ /// @param family_to_include Contacts that involve a body in a family not listed in this argument are ignored.
535
+ /// @return A sorted (based on contact body A's owner ID) vector of contact pairs. First is the owner ID of contact
536
+ /// body A, and Second is that of contact body B.
537
+ std::vector<std::pair<bodyID_t, bodyID_t>> GetContacts(const std::set<family_t>& family_to_include) const;
538
+ /// @brief Get all contact ID pairs in the simulation system. Note all GetContact-like methods reports potential
539
+ /// contacts (not necessarily confirmed contacts), meaning they are similar to what
540
+ /// WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.
541
+ /// @details Do not call this method with high frequency, as it is not efficient.
542
+ /// @param family_pair Functions returns a vector of contact body family number pairs. First is the family number of
543
+ /// contact body A, and Second is that of contact body B.
544
+ /// @return A sorted (based on contact body A's owner ID) vector of contact pairs. First is the owner ID of contact
545
+ /// body A, and Second is that of contact body B.
546
+ std::vector<std::pair<bodyID_t, bodyID_t>> GetContacts(
547
+ std::vector<std::pair<family_t, family_t>>& family_pair) const;
548
+
549
+ /// @brief Get all contact pairs' detailed information (actual content based on the setting with
550
+ /// SetContactOutputContent; default are owner IDs, contact point location, contact force, and associated wildcard
551
+ /// values) in the simulation system. Note all GetContact-like methods reports potential contacts (not necessarily
552
+ /// confirmed contacts), meaning they are similar to what WriteContactFileIncludingPotentialPairs does, not what
553
+ /// WriteContactFile does.
554
+ /// @details Do not call this method with high frequency, as it is not efficient.
555
+ /// @param force_thres Only contacts with force larger than this value are returned. Setting it to a small positive
556
+ /// number to, instead of getting all potential contacts, only get the ones that are currently confirmed to generate
557
+ /// force.
558
+ /// @return A map that may have the following keys: "ContactType", "Point", "AOwner", "BOwner", "AOwnerFamily",
559
+ /// "BOwnerFamily", "Force", "Torque", "Normal" and wildcard names, each corresponding to a vector of values. The
560
+ /// "ContactType" is a vector of strings, each indicating the type of contact (e.g., "sphere-sphere",
561
+ /// "sphere-triangle", etc.). The "Point" is a vector of float3s, each indicating the contact point location in
562
+ /// global coordinates. The "AOwner" and "BOwner" are vectors of body IDs for the two bodies in contact. The "Force"
563
+ /// is a vector of float3s, each indicating the contact force at the contact point. The "Torque" is a vector of
564
+ /// float3s, each indicating the torque at the contact point. The "Normal" is a vector of float3s, each indicating
565
+ /// the normal direction at the contact point.
566
+ std::shared_ptr<ContactInfoContainer> GetContactDetailedInfo(float force_thres = -1.0) const;
567
+
509
568
  /// @brief Get the host memory usage (in bytes) on dT.
510
569
  /// @return Number of bytes.
511
570
  size_t GetHostMemUsageDynamic() const { return dT->estimateHostMemUsage(); }
@@ -1046,7 +1105,17 @@ class DEMSolver {
1046
1105
  /// @param force_thres Forces with magnitude smaller than this amount will not be outputted.
1047
1106
  void WriteContactFile(const std::string& outfilename, float force_thres = DEME_TINY_FLOAT) const;
1048
1107
  void WriteContactFile(const std::filesystem::path& outfilename) const { WriteContactFile(outfilename.string()); }
1049
- /// Write the current status of all meshes to a file
1108
+ /// @brief Write all contact pairs kT-supplied to a file, thus including the potential ones (those are not yet in
1109
+ /// contact, or recently used to be in contact).
1110
+ /// @details The outputted torque using this method is in global, rather than each object's local coordinate system.
1111
+ /// @param outfilename Output filename.
1112
+ void WriteContactFileIncludingPotentialPairs(const std::string& outfilename) const {
1113
+ WriteContactFile(outfilename, -1.0);
1114
+ }
1115
+ void WriteContactFileIncludingPotentialPairs(const std::filesystem::path& outfilename) const {
1116
+ WriteContactFileIncludingPotentialPairs(outfilename.string());
1117
+ }
1118
+ /// Write the current status of all meshes to a file.
1050
1119
  void WriteMeshFile(const std::string& outfilename) const;
1051
1120
  void WriteMeshFile(const std::filesystem::path& outfilename) const { WriteMeshFile(outfilename.string()); }
1052
1121
 
@@ -1345,8 +1414,8 @@ class DEMSolver {
1345
1414
  // The output file format for contact pairs
1346
1415
  OUTPUT_FORMAT m_cnt_out_format = OUTPUT_FORMAT::CSV;
1347
1416
  // The output file content for contact pairs
1348
- unsigned int m_cnt_out_content = CNT_OUTPUT_CONTENT::GEO_ID | CNT_OUTPUT_CONTENT::FORCE |
1349
- CNT_OUTPUT_CONTENT::DEME_POINT | CNT_OUTPUT_CONTENT::CNT_WILDCARD;
1417
+ unsigned int m_cnt_out_content = CNT_OUTPUT_CONTENT::OWNER | CNT_OUTPUT_CONTENT::FORCE |
1418
+ CNT_OUTPUT_CONTENT::CNT_POINT | CNT_OUTPUT_CONTENT::CNT_WILDCARD;
1350
1419
  // The output file format for meshes
1351
1420
  MESH_FORMAT m_mesh_out_format = MESH_FORMAT::VTK;
1352
1421
  // If the solver should output wildcards to file
@@ -1577,6 +1646,8 @@ class DEMSolver {
1577
1646
 
1578
1647
  // A big fat tab for all string replacement that the JIT compiler needs to consider
1579
1648
  std::unordered_map<std::string, std::string> m_subs;
1649
+ // jitify's compilation options
1650
+ std::vector<std::string> m_jitify_options = DEME_JITIFY_DEFAULT_OPTIONS;
1580
1651
 
1581
1652
  // A map that records the numbering for user-defined owner wildcards
1582
1653
  std::unordered_map<std::string, unsigned int> m_owner_wc_num;
@@ -302,19 +302,30 @@ void DEMSolver::jitifyKernels() {
302
302
  equipForceModel(m_subs);
303
303
  equipIntegrationScheme(m_subs);
304
304
  equipKernelIncludes(m_subs);
305
- kT->jitifyKernels(m_subs);
306
- dT->jitifyKernels(m_subs);
307
305
 
308
- // Now, inspectors need to be jitified too... but the current design jitify inspector kernels at the first time they
309
- // are used. for (auto& insp : m_inspectors) {
310
- // insp->Initialize(m_subs);
311
- // }
312
-
313
- // Solver system's own max vel inspector should be init-ed. Don't bother init-ing it while using, because it is
314
- // called at high frequency, let's save an if check. Forced initialization (since doing it before system completes
315
- // init).
316
- m_approx_max_vel_func->Initialize(m_subs, true);
317
- dT->approxMaxVelFunc = m_approx_max_vel_func;
306
+ // Jitify may require a defined device to derive the arch
307
+ std::thread kT_build([&]() {
308
+ DEME_GPU_CALL(cudaSetDevice(kT->streamInfo.device));
309
+ kT->jitifyKernels(m_subs, m_jitify_options);
310
+ });
311
+
312
+ std::thread dT_build([&]() {
313
+ DEME_GPU_CALL(cudaSetDevice(dT->streamInfo.device));
314
+ dT->jitifyKernels(m_subs, m_jitify_options);
315
+
316
+ // Now, inspectors need to be jitified too... but the current design jitify inspector kernels at the first time
317
+ // they are used. for (auto& insp : m_inspectors) {
318
+ // insp->Initialize(m_subs);
319
+ // }
320
+
321
+ // Solver system's own max vel inspector should be init-ed. Don't bother init-ing it while using, because it is
322
+ // called at high frequency, let's save an if check. Forced initialization (since doing it before system
323
+ // completes init).
324
+ m_approx_max_vel_func->Initialize(m_subs, m_jitify_options, true);
325
+ dT->approxMaxVelFunc = m_approx_max_vel_func;
326
+ });
327
+ kT_build.join();
328
+ dT_build.join();
318
329
  }
319
330
 
320
331
  void DEMSolver::getContacts_impl(std::vector<bodyID_t>& idA,
@@ -1368,6 +1379,7 @@ inline void DEMSolver::equipForceModel(std::unordered_map<std::string, std::stri
1368
1379
  std::set<std::string> added_owner_wildcards, added_geo_wildcards;
1369
1380
  // Analyze this model... what does it require?
1370
1381
  std::string model = m_force_model[DEFAULT_FORCE_MODEL_NAME]->m_force_model;
1382
+ std::string model_prerequisites = m_force_model[DEFAULT_FORCE_MODEL_NAME]->m_model_prerequisites;
1371
1383
  const std::set<std::string> contact_wildcard_names = m_force_model[DEFAULT_FORCE_MODEL_NAME]->m_contact_wildcards;
1372
1384
  const std::set<std::string> owner_wildcard_names = m_force_model[DEFAULT_FORCE_MODEL_NAME]->m_owner_wildcards;
1373
1385
  const std::set<std::string> geo_wildcard_names = m_force_model[DEFAULT_FORCE_MODEL_NAME]->m_geo_wildcards;
@@ -1528,6 +1540,7 @@ inline void DEMSolver::equipForceModel(std::unordered_map<std::string, std::stri
1528
1540
  contact_info_write_strat = compact_code(contact_info_write_strat);
1529
1541
  }
1530
1542
  strMap["_DEMForceModel_"] = model;
1543
+ strMap["_forceModelPrerequisites_;"] = model_prerequisites;
1531
1544
  strMap["_forceModelIngredientDefinition_"] = ingredient_definition;
1532
1545
  strMap["_forceModelIngredientAcqForA_"] = ingredient_acquisition_A;
1533
1546
  strMap["_forceModelIngredientAcqForB_"] = ingredient_acquisition_B;
@@ -213,7 +213,7 @@ void DEMSolver::SetContactOutputContent(const std::vector<std::string>& content)
213
213
  m_cnt_out_content = m_cnt_out_content | CNT_OUTPUT_CONTENT::FORCE;
214
214
  break;
215
215
  case ("POINT"_):
216
- m_cnt_out_content = m_cnt_out_content | CNT_OUTPUT_CONTENT::DEME_POINT;
216
+ m_cnt_out_content = m_cnt_out_content | CNT_OUTPUT_CONTENT::CNT_POINT;
217
217
  break;
218
218
  case ("COMPONENT"_):
219
219
  m_cnt_out_content = m_cnt_out_content | CNT_OUTPUT_CONTENT::COMPONENT;
@@ -399,6 +399,68 @@ std::vector<std::pair<bodyID_t, bodyID_t>> DEMSolver::GetClumpContacts(
399
399
  return out_pair;
400
400
  }
401
401
 
402
+ std::vector<std::pair<bodyID_t, bodyID_t>> DEMSolver::GetContacts() const {
403
+ std::vector<bodyID_t> idA_tmp, idB_tmp;
404
+ std::vector<family_t> famA_tmp, famB_tmp;
405
+ std::vector<contact_t> cnt_type_tmp;
406
+ // Getting sphere contacts is enough
407
+ getContacts_impl(idA_tmp, idB_tmp, cnt_type_tmp, famA_tmp, famB_tmp, [](contact_t type) { return true; });
408
+ auto idx = hostSortIndices(idA_tmp);
409
+ std::vector<std::pair<bodyID_t, bodyID_t>> out_pair(idx.size());
410
+ for (size_t i = 0; i < idx.size(); i++) {
411
+ out_pair[i] = std::pair<bodyID_t, bodyID_t>(idA_tmp[idx[i]], idB_tmp[idx[i]]);
412
+ }
413
+ return out_pair;
414
+ }
415
+
416
+ std::vector<std::pair<bodyID_t, bodyID_t>> DEMSolver::GetContacts(const std::set<family_t>& family_to_include) const {
417
+ std::vector<bodyID_t> idA_tmp, idB_tmp;
418
+ std::vector<family_t> famA_tmp, famB_tmp;
419
+ std::vector<contact_t> cnt_type_tmp;
420
+ // Getting sphere contacts is enough
421
+ getContacts_impl(idA_tmp, idB_tmp, cnt_type_tmp, famA_tmp, famB_tmp, [](contact_t type) { return true; });
422
+ // Exclude the families that are not in the set
423
+ std::vector<bool> elem_to_remove(idA_tmp.size(), false);
424
+ for (size_t i = 0; i < idA_tmp.size(); i++) {
425
+ if (!check_exist(family_to_include, famA_tmp.at(i)) || !check_exist(family_to_include, famB_tmp.at(i))) {
426
+ elem_to_remove[i] = true;
427
+ }
428
+ }
429
+ idA_tmp = hostRemoveElem(idA_tmp, elem_to_remove);
430
+ idB_tmp = hostRemoveElem(idB_tmp, elem_to_remove);
431
+ famA_tmp = hostRemoveElem(famA_tmp, elem_to_remove);
432
+ famB_tmp = hostRemoveElem(famB_tmp, elem_to_remove);
433
+ cnt_type_tmp = hostRemoveElem(cnt_type_tmp, elem_to_remove);
434
+
435
+ auto idx = hostSortIndices(idA_tmp);
436
+ std::vector<std::pair<bodyID_t, bodyID_t>> out_pair(idx.size());
437
+ for (size_t i = 0; i < idx.size(); i++) {
438
+ out_pair[i] = std::pair<bodyID_t, bodyID_t>(idA_tmp[idx[i]], idB_tmp[idx[i]]);
439
+ }
440
+ return out_pair;
441
+ }
442
+
443
+ std::vector<std::pair<bodyID_t, bodyID_t>> DEMSolver::GetContacts(
444
+ std::vector<std::pair<family_t, family_t>>& family_pair) const {
445
+ std::vector<bodyID_t> idA_tmp, idB_tmp;
446
+ std::vector<family_t> famA_tmp, famB_tmp;
447
+ std::vector<contact_t> cnt_type_tmp;
448
+ // Getting sphere contacts is enough
449
+ getContacts_impl(idA_tmp, idB_tmp, cnt_type_tmp, famA_tmp, famB_tmp, [](contact_t type) { return true; });
450
+ auto idx = hostSortIndices(idA_tmp);
451
+ std::vector<std::pair<bodyID_t, bodyID_t>> out_pair(idx.size());
452
+ family_pair.resize(idx.size());
453
+ for (size_t i = 0; i < idx.size(); i++) {
454
+ out_pair[i] = std::pair<bodyID_t, bodyID_t>(idA_tmp[idx[i]], idB_tmp[idx[i]]);
455
+ family_pair[i] = std::pair<family_t, family_t>(famA_tmp[idx[i]], famB_tmp[idx[i]]);
456
+ }
457
+ return out_pair;
458
+ }
459
+
460
+ std::shared_ptr<ContactInfoContainer> DEMSolver::GetContactDetailedInfo(float force_thres) const {
461
+ return dT->generateContactInfo(force_thres);
462
+ }
463
+
402
464
  std::vector<float3> DEMSolver::GetOwnerPosition(bodyID_t ownerID, bodyID_t n) const {
403
465
  return dT->getOwnerPos(ownerID, n);
404
466
  }
@@ -2191,12 +2253,16 @@ void DEMSolver::UpdateSimParams() {
2191
2253
  // Now that all params prepared, we need to migrate that imformation to the device
2192
2254
  migrateSimParamsToDevice();
2193
2255
 
2194
- // Jitify max vel finder, in case the policy there changed
2195
- m_approx_max_vel_func->Initialize(m_subs, true);
2196
- dT->approxMaxVelFunc = m_approx_max_vel_func;
2197
-
2198
- // Updating sim environment is critical
2199
- dT->announceCritical();
2256
+ // JItify may require a defined device to decide the arch
2257
+ std::thread dT_build([&]() {
2258
+ DEME_GPU_CALL(cudaSetDevice(dT->streamInfo.device));
2259
+ // Jitify max vel finder, in case the policy there changed
2260
+ m_approx_max_vel_func->Initialize(m_subs, m_jitify_options, true);
2261
+ dT->approxMaxVelFunc = m_approx_max_vel_func;
2262
+ // Updating sim environment is critical
2263
+ dT->announceCritical();
2264
+ });
2265
+ dT_build.join();
2200
2266
  }
2201
2267
 
2202
2268
  void DEMSolver::UpdateStepSize(double ts) {
@@ -2310,11 +2376,9 @@ void DEMSolver::ChangeClumpSizes(const std::vector<bodyID_t>& IDs, const std::ve
2310
2376
  void DEMSolver::PurgeFamily(unsigned int family_num) {}
2311
2377
 
2312
2378
  void DEMSolver::DoDynamics(double thisCallDuration) {
2313
- // Is it needed here??
2314
- // dT->packDataPointers(kT->granData);
2315
-
2316
- // TODO: Return if nSphere == 0
2317
- // TODO: Check if initialized
2379
+ if (!sys_initialized) {
2380
+ Initialize();
2381
+ }
2318
2382
 
2319
2383
  // Tell dT how long this call is
2320
2384
  dT->setCycleDuration(thisCallDuration);
@@ -186,11 +186,13 @@ float* DEMInspector::dT_GetValue() {
186
186
 
187
187
  void DEMInspector::assertInit() {
188
188
  if (!initialized) {
189
- Initialize(sys->GetJitStringSubs());
189
+ Initialize(sys->GetJitStringSubs(), sys->GetJitifyOptions());
190
190
  }
191
191
  }
192
192
 
193
- void DEMInspector::Initialize(const std::unordered_map<std::string, std::string>& Subs, bool force) {
193
+ void DEMInspector::Initialize(const std::unordered_map<std::string, std::string>& Subs,
194
+ const std::vector<std::string>& options,
195
+ bool force) {
194
196
  if (!(sys->GetInitStatus()) && !force) {
195
197
  std::stringstream ss;
196
198
  ss << "Inspector should only be initialized or used after the simulation system is initialized (because it "
@@ -221,12 +223,11 @@ void DEMInspector::Initialize(const std::unordered_map<std::string, std::string>
221
223
  my_subs["_inRegionPolicy_"] = in_region_specifier;
222
224
  my_subs["_quantityQueryProcess_"] = inspection_code;
223
225
  if (thing_to_insp == INSPECT_ENTITY_TYPE::SPHERE) {
224
- inspection_kernel = std::make_shared<jitify::Program>(std::move(
225
- JitHelper::buildProgram("DEMSphereQueryKernels", JitHelper::KERNEL_DIR / "DEMSphereQueryKernels.cu",
226
- my_subs, DEME_JITIFY_OPTIONS)));
226
+ inspection_kernel = std::make_shared<jitify::Program>(std::move(JitHelper::buildProgram(
227
+ "DEMSphereQueryKernels", JitHelper::KERNEL_DIR / "DEMSphereQueryKernels.cu", my_subs, options)));
227
228
  } else if (thing_to_insp == INSPECT_ENTITY_TYPE::CLUMP || thing_to_insp == INSPECT_ENTITY_TYPE::EVERYTHING) {
228
229
  inspection_kernel = std::make_shared<jitify::Program>(std::move(JitHelper::buildProgram(
229
- "DEMOwnerQueryKernels", JitHelper::KERNEL_DIR / "DEMOwnerQueryKernels.cu", my_subs, DEME_JITIFY_OPTIONS)));
230
+ "DEMOwnerQueryKernels", JitHelper::KERNEL_DIR / "DEMOwnerQueryKernels.cu", my_subs, options)));
230
231
  } else {
231
232
  std::stringstream ss;
232
233
  ss << "Sorry, an inspector object you are using is not implemented yet.\nConsider letting the developers know "
@@ -926,6 +927,17 @@ int DEMForceModel::ReadCustomModelFile(const std::filesystem::path& sourcefile)
926
927
  return 0;
927
928
  }
928
929
 
930
+ void DEMForceModel::DefineCustomModelPrerequisites(const std::string& util) {
931
+ m_model_prerequisites = util;
932
+ }
933
+ int DEMForceModel::ReadCustomModelPrerequisitesFile(const std::filesystem::path& sourcefile) {
934
+ if (!std::filesystem::exists(sourcefile)) {
935
+ return 1;
936
+ }
937
+ m_model_prerequisites = read_file_to_string(sourcefile);
938
+ return 0;
939
+ }
940
+
929
941
  void DEMForceModel::SetPerContactWildcards(const std::set<std::string>& wildcards) {
930
942
  for (const auto& a_str : wildcards) {
931
943
  if (match_pattern(a_str, " ")) {
@@ -70,7 +70,9 @@ class DEMInspector {
70
70
  void SetInspectionCode(const std::string& code) { inspection_code = code; }
71
71
 
72
72
  // Initialize with the DEM simulation system (user should not call this)
73
- void Initialize(const std::unordered_map<std::string, std::string>& Subs, bool force = false);
73
+ void Initialize(const std::unordered_map<std::string, std::string>& Subs,
74
+ const std::vector<std::string>& options,
75
+ bool force = false);
74
76
 
75
77
  /// Get the reduce value of the quantity that you wish to inspect.
76
78
  float GetValue();
@@ -434,6 +436,8 @@ class DEMForceModel {
434
436
  FORCE_MODEL type = FORCE_MODEL::CUSTOM;
435
437
  // The model
436
438
  std::string m_force_model = " ";
439
+ // Mainly for device util functions this model might need.
440
+ std::string m_model_prerequisites = " ";
437
441
  // Quatity names that we want to associate each contact pair with. An array will be allocated for storing this, and
438
442
  // it lives and die with contact pairs.
439
443
  std::set<std::string> m_contact_wildcards;
@@ -451,14 +455,20 @@ class DEMForceModel {
451
455
  DEMForceModel() {}
452
456
  ~DEMForceModel() {}
453
457
 
454
- /// Set the contact force model type
458
+ /// Set the contact force model type.
455
459
  void SetForceModelType(FORCE_MODEL model_type);
456
- /// Define user-custom force model with a string which is your force calculation code
460
+ /// Define user-custom force model with a string which is your force calculation code.
457
461
  void DefineCustomModel(const std::string& model);
458
462
  /// Read user-custom force model from a file (which by default should reside in kernel/DEMUserScripts), which
459
463
  /// contains your force calculation code. Returns 0 if read successfully, otherwise 1.
460
464
  int ReadCustomModelFile(const std::filesystem::path& sourcefile);
461
465
 
466
+ /// Define user-custom force model's utility __device__ functions with a string.
467
+ void DefineCustomModelPrerequisites(const std::string& util);
468
+ /// Read user-custom force model's utility __device__ functions from a file (which by default should reside in
469
+ /// kernel/DEMUserScripts). Returns 0 if read successfully, otherwise 1.
470
+ int ReadCustomModelPrerequisitesFile(const std::filesystem::path& sourcefile);
471
+
462
472
  /// @brief Specifiy the material properties that this force model will use.
463
473
  /// @param props Material property names.
464
474
  void SetMustHaveMatProp(const std::set<std::string>& props) { m_must_have_mat_props = props; }
@@ -26,8 +26,8 @@ namespace deme {
26
26
  // It is better to keep DEME_NUM_SPHERES_PER_CD_BATCH == DEME_KT_CD_NTHREADS_PER_BLOCK for better performance
27
27
  #define DEME_NUM_SPHERES_PER_CD_BATCH 512 ///< Can't be larger than DEME_KT_CD_NTHREADS_PER_BLOCK
28
28
  #define DEME_NUM_TRIANGLES_PER_CD_BATCH 256 ///< Can't be larger than DEME_KT_CD_NTHREADS_PER_BLOCK
29
- #define DEME_TINY_FLOAT 1e-12
30
- #define DEME_HUGE_FLOAT 1e15
29
+ #define DEME_TINY_FLOAT 1e-30
30
+ #define DEME_HUGE_FLOAT 1e18
31
31
  #define DEME_BITS_PER_BYTE 8
32
32
  #define DEME_CUDA_WARP_SIZE 32
33
33
  #define DEME_MAX_WILDCARD_NUM 16
@@ -170,12 +170,12 @@ enum OUTPUT_CONTENT {
170
170
  enum class SPATIAL_DIR { X, Y, Z, NONE };
171
171
  // The info that should be present in the contact pair output files
172
172
  enum CNT_OUTPUT_CONTENT {
173
- CNT_TYPE = 0, // Owner numbers and contact type
174
- FORCE = 1, // Force (that owner 1 feels) xyz components in global
175
- DEME_POINT = 2, // Contact point in global frame
176
- COMPONENT = 4, // The component numbers (such as triangle number for a mesh) that involved in this contact
177
- NORMAL = 8, // Contact normal direction in global frame
178
- TORQUE = 16, // This is a standalone force and produces torque only (typical example: rolling resistance force)
173
+ CNT_TYPE = 0, // Owner numbers and contact type
174
+ FORCE = 1, // Force (that owner 1 feels) xyz components in global
175
+ CNT_POINT = 2, // Contact point in global frame
176
+ COMPONENT = 4, // The component numbers (such as triangle number for a mesh) that involved in this contact
177
+ NORMAL = 8, // Contact normal direction in global frame
178
+ TORQUE = 16, // This is a standalone force and produces torque only (typical example: rolling resistance force)
179
179
  CNT_WILDCARD = 32,
180
180
  OWNER = 64,
181
181
  GEO_ID = 128,