DEME 2.0.3__tar.gz → 2.0.5__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.
- {deme-2.0.3/deme.egg-info → deme-2.0.5}/PKG-INFO +1 -1
- {deme-2.0.3 → deme-2.0.5}/README.md +2 -0
- {deme-2.0.3 → deme-2.0.5/deme.egg-info}/PKG-INFO +1 -1
- {deme-2.0.3 → deme-2.0.5}/setup.py +1 -1
- {deme-2.0.3 → deme-2.0.5}/src/DEM/API.h +81 -10
- {deme-2.0.3 → deme-2.0.5}/src/DEM/APIPrivate.cpp +5 -3
- {deme-2.0.3 → deme-2.0.5}/src/DEM/APIPublic.cpp +64 -2
- {deme-2.0.3 → deme-2.0.5}/src/DEM/AuxClasses.cpp +18 -6
- {deme-2.0.3 → deme-2.0.5}/src/DEM/AuxClasses.h +13 -3
- {deme-2.0.3 → deme-2.0.5}/src/DEM/Defines.h +7 -7
- {deme-2.0.3 → deme-2.0.5}/src/DEM/PyDEME.cpp +101 -14
- {deme-2.0.3 → deme-2.0.5}/src/DEM/Structs.h +177 -7
- {deme-2.0.3 → deme-2.0.5}/src/DEM/dT.cpp +132 -58
- {deme-2.0.3 → deme-2.0.5}/src/DEM/dT.h +5 -1
- {deme-2.0.3 → deme-2.0.5}/src/DEM/kT.cpp +11 -11
- {deme-2.0.3 → deme-2.0.5}/src/DEM/kT.h +2 -1
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_ContactChain.cpp +1 -1
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_Indentation.cpp +18 -5
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_SingleSphereCollide.cpp +11 -2
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCalcForceKernels.cu +11 -9
- {deme-2.0.3 → deme-2.0.5}/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/LICENSE.md +0 -0
- {deme-2.0.3 → deme-2.0.5}/MANIFEST.in +0 -0
- {deme-2.0.3 → deme-2.0.5}/cmake/CudaSupportedArchitectures.cmake +0 -0
- {deme-2.0.3 → deme-2.0.5}/cmake/CxxStdAutodetect.cmake +0 -0
- {deme-2.0.3 → deme-2.0.5}/cmake/DEMEConfig.cmake.in +0 -0
- {deme-2.0.3 → deme-2.0.5}/cmake/FixNinjaColors.cmake +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/clumps/3_clump.csv +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/clumps/6_clump.csv +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/clumps/ContactChain_initial.csv +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/clumps/TeddyBear.csv +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/clumps/ViperWheelSimple.csv +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/clumps/ellipsoid_2_1_1.csv +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/clumps/molecule.csv +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/clumps/spiky_sphere.csv +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/clumps/triangular_flat.csv +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/clumps/triangular_flat_6comp.csv +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/GPBR_Vessel_Fine.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/cone.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/cube.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/cyl_r1_h2.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/excavator.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/funnel.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/funnel_left.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/hourglass.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/hourglass_cap.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/internal_mixer.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/plane_20by20.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/rover_wheels/curiosity_wheel.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/rover_wheels/curiosity_wheel_surface.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/rover_wheels/viper_wheel_right.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/silo.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/sphere.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/mesh/thin_plate.obj +0 -0
- {deme-2.0.3 → deme-2.0.5}/data/sim_data/example_cnt_pairs.csv +0 -0
- {deme-2.0.3 → deme-2.0.5}/deme.egg-info/SOURCES.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/deme.egg-info/dependency_links.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/deme.egg-info/not-zip-safe +0 -0
- {deme-2.0.3 → deme-2.0.5}/deme.egg-info/requires.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/deme.egg-info/top_level.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/packaging_instructions.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/pyproject.toml +0 -0
- {deme-2.0.3 → deme-2.0.5}/setup.cfg +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/.format_all +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/DEM/BdrsAndObjs.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/DEM/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/DEM/HostSideHelpers.hpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/DEM/MeshUtils.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/DEM/Models.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/DEM/VariableTypes.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/DEM/utils/Samplers.hpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/algorithms/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/algorithms/DEMCubContactDetection.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/algorithms/DEMCubForceCollection.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/algorithms/DEMCubInstantiations.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/algorithms/DEMCubWrappers.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/algorithms/DEMDynamicMisc.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/algorithms/DEMStaticDeviceSubroutines.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/algorithms/DEMStaticDeviceUtilities.cuh +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/ApiVersion.h.in +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/DebugInfo.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/CudaAllocator.hpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/DEMEPaths.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/DEMEPaths.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/DataMigrationHelper.hpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/GpuError.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/GpuManager.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/GpuManager.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/HeaderGenerator.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/JitHelper.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/JitHelper.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/ManagedMemory.hpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/RuntimeData.cpp.in +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/RuntimeData.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/ThreadManager.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/Timer.hpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/WavefrontMeshLoader.hpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/core/utils/csv.hpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_BallDrop.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_BallDrop2D.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_Centrifuge.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_ConePenetration.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_Electrostatic.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_FlexibleMesh.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_Fracture_Box.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_GRCPrep_Part1.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_GRCPrep_Part2.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_GRCPrep_Part3.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_GameOfLife.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_Hopper_Sphere_Cylinder.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_Mixer.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_Plow.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_Repose.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_Repose2D.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_RotatingDrum.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_Shake.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_Sieve.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_SolarSystem.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_TestPack.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_WheelDP.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_WheelDPSimplified.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/DEMdemo_WheelSlopeSlip.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/pyDEME_BallDrop.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/pyDEME_BallDrop2D.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/pyDEME_Centrifuge.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/pyDEME_ConePenetration.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/pyDEME_Electrostatic.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/pyDEME_FlexibleMesh.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/pyDEME_GRCPrep_Part1.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/pyDEME_GameOfLife.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/pyDEME_Mixer.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/demo/pyDEME_WheelDPSimplified.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/CUDAMathHelpers.cuh +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMBinSphereKernels.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMBinTriangleKernels.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCollectForceKernels.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCollectForceKernels_Compact.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCollisionKernels.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMContactKernels_SphereSphere.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMContactKernels_SphereTriangle.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/AnalyticalCompDefJitify.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratAllFlatten.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratAllJitify.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratPartialJitify.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/ClumpCompDefJitify.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/ContactInfoWriteBack.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/ForceInKernelReductionStrat.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/FrictionlessHertzianForceModel.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/FullHertzianForceModel.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnCenteredDiff.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnExtendedTaylor.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnForwardEuler.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/MOIAcqStratFlatten.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/MOIAcqStratJitify.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/MOIDefJitify.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/MassAcqStratFlatten.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/MassAcqStratJitify.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMCustomizablePolicies/MassDefJitify.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMHelperKernels.cuh +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMHistoryMappingKernels.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMIntegrationKernels.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMMiscKernels.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMModeratorKernels.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMOwnerQueryKernels.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMPrepForceKernels.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMSphereQueryKernels.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMTriangleBoxIntersect.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMUserScripts/ForceModel2D.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMUserScripts/ForceModelMooring.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMUserScripts/ForceModelMooringPosition.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMUserScripts/ForceModelWithCohesion.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMUserScripts/ForceModelWithElectrostatic.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMUserScripts/ForceModelWithFractureModel.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/DEMUserScripts/ForceModelWithGravity.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/src/kernel/hello.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/.clang-format +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/.git +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/.gitignore +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/Doxyfile +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/LICENSE +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/Makefile +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/README.md +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/example_headers/class_arg_kernel.cuh +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/example_headers/constant_header.cuh +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/example_headers/my_header1.cuh +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/example_headers/my_header2.cuh +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/example_headers/my_header3.cuh +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/jitify.hpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/jitify_example.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/jitify_test.cu +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/nvrtc_cli.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/nvrtc_cli_test.sh +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/jitify/stringify.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.appveyor.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.clang-format +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.clang-tidy +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.cmake-format.yaml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.codespell-ignore-lines +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.git +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.gitattributes +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/CODEOWNERS +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/CONTRIBUTING.md +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/dependabot.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/labeler.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/labeler_merged.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/matchers/pylint.json +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/pull_request_template.md +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/workflows/ci.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/workflows/configure.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/workflows/format.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/workflows/labeler.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/workflows/pip.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.github/workflows/upstream.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.gitignore +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.pre-commit-config.yaml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/.readthedocs.yml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/LICENSE +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/MANIFEST.in +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/README.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/Doxyfile +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/Makefile +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/_static/css/custom.css +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/cast/chrono.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/cast/custom.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/cast/eigen.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/cast/functional.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/cast/index.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/cast/overview.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/cast/stl.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/cast/strings.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/classes.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/embedding.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/exceptions.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/functions.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/misc.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/pycpp/index.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/pycpp/numpy.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/pycpp/object.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/pycpp/utilities.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/advanced/smart_ptrs.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/basics.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/benchmark.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/benchmark.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/changelog.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/classes.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/cmake/index.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/compiling.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/conf.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/faq.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/index.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/installing.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/limitations.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/pybind11-logo.png +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/pybind11_vs_boost_python1.svg +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/pybind11_vs_boost_python2.svg +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/reference.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/release.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/requirements.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/docs/upgrade.rst +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/attr.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/buffer_info.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/cast.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/chrono.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/common.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/complex.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/detail/class.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/detail/common.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/detail/descr.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/detail/init.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/detail/internals.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/detail/type_caster_base.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/detail/typeid.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/eigen/matrix.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/eigen/tensor.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/eigen.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/embed.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/eval.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/functional.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/gil.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/iostream.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/numpy.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/operators.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/options.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/pybind11.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/pytypes.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/stl/filesystem.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/stl.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/include/pybind11/stl_bind.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/noxfile.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/pybind11/__init__.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/pybind11/__main__.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/pybind11/_version.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/pybind11/commands.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/pybind11/py.typed +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/pybind11/setup_helpers.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/pyproject.toml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/setup.cfg +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/setup.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/conftest.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/constructor_stats.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/cross_module_gil_utils.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/cross_module_interleaved_error_already_set.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/eigen_tensor_avoid_stl_array.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/env.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/extra_python_package/pytest.ini +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/extra_python_package/test_files.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/extra_setuptools/pytest.ini +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/extra_setuptools/test_setuphelper.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/local_bindings.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/object.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/pybind11_cross_module_tests.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/pybind11_tests.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/pybind11_tests.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/pytest.ini +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/requirements.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_async.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_async.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_buffers.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_buffers.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_builtin_casters.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_builtin_casters.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_call_policies.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_call_policies.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_callbacks.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_callbacks.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_chrono.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_chrono.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_class.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_class.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_cmake_build/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_cmake_build/embed.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_cmake_build/main.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_cmake_build/test.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_const_name.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_const_name.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_constants_and_functions.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_constants_and_functions.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_copy_move.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_copy_move.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_custom_type_casters.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_custom_type_casters.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_custom_type_setup.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_custom_type_setup.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_docstring_options.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_docstring_options.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_eigen_matrix.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_eigen_matrix.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_eigen_tensor.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_eigen_tensor.inl +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_eigen_tensor.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_embed/CMakeLists.txt +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_embed/catch.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_embed/external_module.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_embed/test_interpreter.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_embed/test_interpreter.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_embed/test_trampoline.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_enum.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_enum.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_eval.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_eval.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_eval_call.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_exceptions.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_exceptions.h +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_exceptions.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_factory_constructors.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_factory_constructors.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_gil_scoped.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_gil_scoped.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_iostream.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_iostream.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_kwargs_and_defaults.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_kwargs_and_defaults.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_local_bindings.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_local_bindings.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_methods_and_attributes.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_methods_and_attributes.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_modules.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_modules.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_multiple_inheritance.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_multiple_inheritance.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_numpy_array.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_numpy_array.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_numpy_dtypes.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_numpy_dtypes.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_numpy_vectorize.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_numpy_vectorize.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_opaque_types.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_opaque_types.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_operator_overloading.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_operator_overloading.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_pickling.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_pickling.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_pytypes.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_pytypes.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_sequences_and_iterators.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_sequences_and_iterators.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_smart_ptr.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_smart_ptr.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_stl.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_stl.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_stl_binders.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_stl_binders.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_tagbased_polymorphic.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_tagbased_polymorphic.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_thread.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_thread.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_union.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_union.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_virtual_functions.cpp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/test_virtual_functions.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/valgrind-numpy-scipy.supp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tests/valgrind-python.supp +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/FindCatch.cmake +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/FindEigen3.cmake +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/FindPythonLibsNew.cmake +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/JoinPaths.cmake +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/check-style.sh +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/cmake_uninstall.cmake.in +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/codespell_ignore_lines_from_errors.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/libsize.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/make_changelog.py +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/pybind11.pc.in +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/pybind11Common.cmake +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/pybind11Config.cmake.in +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/pybind11NewTools.cmake +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/pybind11Tools.cmake +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/pyproject.toml +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/setup_global.py.in +0 -0
- {deme-2.0.3 → deme-2.0.5}/thirdparty/pybind11/tools/setup_main.py.in +0 -0
|
@@ -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.
|
|
@@ -152,7 +152,7 @@ class CMakeBuild(build_ext):
|
|
|
152
152
|
# logic and declaration, and simpler if you include description/version in a file.
|
|
153
153
|
setup(
|
|
154
154
|
name="deme",
|
|
155
|
-
version="2.0.
|
|
155
|
+
version="2.0.5",
|
|
156
156
|
author="Ruochun Zhang",
|
|
157
157
|
author_email="ruochunz@gmail.com",
|
|
158
158
|
description="PyBind Wrapper Library for DEM-Engine",
|
|
@@ -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
|
|
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
|
|
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
|
-
///
|
|
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
|
-
///
|
|
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
|
|
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::
|
|
1349
|
-
CNT_OUTPUT_CONTENT::
|
|
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;
|
|
@@ -306,12 +306,12 @@ void DEMSolver::jitifyKernels() {
|
|
|
306
306
|
// Jitify may require a defined device to derive the arch
|
|
307
307
|
std::thread kT_build([&]() {
|
|
308
308
|
DEME_GPU_CALL(cudaSetDevice(kT->streamInfo.device));
|
|
309
|
-
kT->jitifyKernels(m_subs);
|
|
309
|
+
kT->jitifyKernels(m_subs, m_jitify_options);
|
|
310
310
|
});
|
|
311
311
|
|
|
312
312
|
std::thread dT_build([&]() {
|
|
313
313
|
DEME_GPU_CALL(cudaSetDevice(dT->streamInfo.device));
|
|
314
|
-
dT->jitifyKernels(m_subs);
|
|
314
|
+
dT->jitifyKernels(m_subs, m_jitify_options);
|
|
315
315
|
|
|
316
316
|
// Now, inspectors need to be jitified too... but the current design jitify inspector kernels at the first time
|
|
317
317
|
// they are used. for (auto& insp : m_inspectors) {
|
|
@@ -321,7 +321,7 @@ void DEMSolver::jitifyKernels() {
|
|
|
321
321
|
// Solver system's own max vel inspector should be init-ed. Don't bother init-ing it while using, because it is
|
|
322
322
|
// called at high frequency, let's save an if check. Forced initialization (since doing it before system
|
|
323
323
|
// completes init).
|
|
324
|
-
m_approx_max_vel_func->Initialize(m_subs, true);
|
|
324
|
+
m_approx_max_vel_func->Initialize(m_subs, m_jitify_options, true);
|
|
325
325
|
dT->approxMaxVelFunc = m_approx_max_vel_func;
|
|
326
326
|
});
|
|
327
327
|
kT_build.join();
|
|
@@ -1379,6 +1379,7 @@ inline void DEMSolver::equipForceModel(std::unordered_map<std::string, std::stri
|
|
|
1379
1379
|
std::set<std::string> added_owner_wildcards, added_geo_wildcards;
|
|
1380
1380
|
// Analyze this model... what does it require?
|
|
1381
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;
|
|
1382
1383
|
const std::set<std::string> contact_wildcard_names = m_force_model[DEFAULT_FORCE_MODEL_NAME]->m_contact_wildcards;
|
|
1383
1384
|
const std::set<std::string> owner_wildcard_names = m_force_model[DEFAULT_FORCE_MODEL_NAME]->m_owner_wildcards;
|
|
1384
1385
|
const std::set<std::string> geo_wildcard_names = m_force_model[DEFAULT_FORCE_MODEL_NAME]->m_geo_wildcards;
|
|
@@ -1539,6 +1540,7 @@ inline void DEMSolver::equipForceModel(std::unordered_map<std::string, std::stri
|
|
|
1539
1540
|
contact_info_write_strat = compact_code(contact_info_write_strat);
|
|
1540
1541
|
}
|
|
1541
1542
|
strMap["_DEMForceModel_"] = model;
|
|
1543
|
+
strMap["_forceModelPrerequisites_;"] = model_prerequisites;
|
|
1542
1544
|
strMap["_forceModelIngredientDefinition_"] = ingredient_definition;
|
|
1543
1545
|
strMap["_forceModelIngredientAcqForA_"] = ingredient_acquisition_A;
|
|
1544
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::
|
|
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
|
}
|
|
@@ -2195,7 +2257,7 @@ void DEMSolver::UpdateSimParams() {
|
|
|
2195
2257
|
std::thread dT_build([&]() {
|
|
2196
2258
|
DEME_GPU_CALL(cudaSetDevice(dT->streamInfo.device));
|
|
2197
2259
|
// Jitify max vel finder, in case the policy there changed
|
|
2198
|
-
m_approx_max_vel_func->Initialize(m_subs, true);
|
|
2260
|
+
m_approx_max_vel_func->Initialize(m_subs, m_jitify_options, true);
|
|
2199
2261
|
dT->approxMaxVelFunc = m_approx_max_vel_func;
|
|
2200
2262
|
// Updating sim environment is critical
|
|
2201
2263
|
dT->announceCritical();
|
|
@@ -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,
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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,7 +26,7 @@ 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-
|
|
29
|
+
#define DEME_TINY_FLOAT 1e-15
|
|
30
30
|
#define DEME_HUGE_FLOAT 1e15
|
|
31
31
|
#define DEME_BITS_PER_BYTE 8
|
|
32
32
|
#define DEME_CUDA_WARP_SIZE 32
|
|
@@ -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,
|
|
174
|
-
FORCE = 1,
|
|
175
|
-
|
|
176
|
-
COMPONENT = 4,
|
|
177
|
-
NORMAL = 8,
|
|
178
|
-
TORQUE = 16,
|
|
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,
|
|
@@ -205,6 +205,31 @@ PYBIND11_MODULE(DEME, obj) {
|
|
|
205
205
|
|
|
206
206
|
.def("GetSeparation", &deme::HCPSampler::GetSeparation);
|
|
207
207
|
|
|
208
|
+
// Have to forward declare this templated method so pybind can see it
|
|
209
|
+
std::vector<float>& (deme::DataContainer::*get_float_dc)(const std::string&) = &deme::DataContainer::Get<float>;
|
|
210
|
+
py::class_<deme::DataContainer, std::shared_ptr<deme::DataContainer>>(obj, "DataContainer")
|
|
211
|
+
.def(py::init<>())
|
|
212
|
+
.def("Get", get_float_dc, py::return_value_policy::reference_internal,
|
|
213
|
+
"Get a float value from the container by name. Should be used for getting wildcard by name.");
|
|
214
|
+
|
|
215
|
+
py::class_<deme::ContactInfoContainer, deme::DataContainer, std::shared_ptr<deme::ContactInfoContainer>>(
|
|
216
|
+
obj, "ContactInfoContainer")
|
|
217
|
+
.def(py::init<unsigned int&, const std::vector<std::pair<std::string, std::string>>&>())
|
|
218
|
+
.def("GetContactType", &deme::ContactInfoContainer::GetContactType,
|
|
219
|
+
"Get contact type as strings from the container.")
|
|
220
|
+
.def("GetPoint", &deme::ContactInfoContainer::GetPoint, "Get contact points as vectors from the container.")
|
|
221
|
+
.def("GetAOwner", &deme::ContactInfoContainer::GetAOwner, "Get AOwner number from the container.")
|
|
222
|
+
.def("GetBOwner", &deme::ContactInfoContainer::GetBOwner, "Get BOwner number from the container.")
|
|
223
|
+
.def("GetAGeo", &deme::ContactInfoContainer::GetAGeo, "Get AGeo number from the container.")
|
|
224
|
+
.def("GetBGeo", &deme::ContactInfoContainer::GetBGeo, "Get BGeo number from the container.")
|
|
225
|
+
.def("GetAOwnerFamily", &deme::ContactInfoContainer::GetAOwnerFamily,
|
|
226
|
+
"Get AOwnerFamily number from the container.")
|
|
227
|
+
.def("GetBOwnerFamily", &deme::ContactInfoContainer::GetBOwnerFamily,
|
|
228
|
+
"Get BOwnerFamily number from the container.")
|
|
229
|
+
.def("GetForce", &deme::ContactInfoContainer::GetForce, "Get force as vectors from the container.")
|
|
230
|
+
.def("GetTorque", &deme::ContactInfoContainer::GetTorque, "Get torque as vectors from the container.")
|
|
231
|
+
.def("GetNormal", &deme::ContactInfoContainer::GetNormal, "Get contact normal as vectors from the container.");
|
|
232
|
+
|
|
208
233
|
py::class_<deme::DEMInspector, std::shared_ptr<deme::DEMInspector>>(obj, "DEMInspector")
|
|
209
234
|
.def(py::init<deme::DEMSolver*, deme::DEMDynamicThread*, const std::string&>())
|
|
210
235
|
.def("GetValue", &deme::DEMInspector::GetValue);
|
|
@@ -417,11 +442,18 @@ PYBIND11_MODULE(DEME, obj) {
|
|
|
417
442
|
py::class_<deme::DEMForceModel, std::shared_ptr<deme::DEMForceModel>>(obj, "DEMForceModel")
|
|
418
443
|
.def(py::init<deme::FORCE_MODEL>())
|
|
419
444
|
.def("SetForceModelType", &deme::DEMForceModel::SetForceModelType, "Set the contact force model type")
|
|
445
|
+
|
|
420
446
|
.def("DefineCustomModel", &deme::DEMForceModel::DefineCustomModel,
|
|
421
|
-
"Define user-custom force model with a string which is your force calculation code")
|
|
447
|
+
"Define user-custom force model with a string which is your force calculation code.")
|
|
422
448
|
.def("ReadCustomModelFile", &deme::DEMForceModel::ReadCustomModelFile,
|
|
423
449
|
"Read user-custom force model from a file (which by default should reside in kernel/DEMUserScripts), "
|
|
424
450
|
"which contains your force calculation code. Returns 0 if read successfully, otherwise 1.")
|
|
451
|
+
.def("DefineCustomModelPrerequisites", &deme::DEMForceModel::DefineCustomModelPrerequisites,
|
|
452
|
+
"Define user-custom force model's utility __device__ functions with a string.")
|
|
453
|
+
.def("ReadCustomModelPrerequisitesFile", &deme::DEMForceModel::ReadCustomModelPrerequisitesFile,
|
|
454
|
+
"Read user-custom force model's utility __device__ functions from a file (which by default should reside "
|
|
455
|
+
"in kernel/DEMUserScripts). Returns 0 if read successfully, otherwise 1.")
|
|
456
|
+
|
|
425
457
|
.def("SetMustHaveMatProp", &deme::DEMForceModel::SetMustHaveMatProp,
|
|
426
458
|
"Specifiy the material properties that this force model will use")
|
|
427
459
|
.def("SetMustPairwiseMatProp", &deme::DEMForceModel::SetMustPairwiseMatProp,
|
|
@@ -491,6 +523,10 @@ PYBIND11_MODULE(DEME, obj) {
|
|
|
491
523
|
.def("GetJitStringSubs", &deme::DEMSolver::GetJitStringSubs,
|
|
492
524
|
"Get the jitification string substitution laundary list. It is needed by some of this simulation system's "
|
|
493
525
|
"friend classes.")
|
|
526
|
+
.def("GetJitifyOptions", &deme::DEMSolver::GetJitifyOptions,
|
|
527
|
+
"Get current jitification options. It is needed by some of this simulation system's friend classes.")
|
|
528
|
+
.def("SetJitifyOptions", &deme::DEMSolver::SetJitifyOptions,
|
|
529
|
+
"Set the jitification options. It is only needed by advanced users.")
|
|
494
530
|
|
|
495
531
|
.def("SetInitBinSizeAsMultipleOfSmallestSphere", &deme::DEMSolver::SetInitBinSizeAsMultipleOfSmallestSphere,
|
|
496
532
|
"Explicitly instruct the bin size (for contact detection) that the solver should use, as a multiple of "
|
|
@@ -748,17 +784,50 @@ PYBIND11_MODULE(DEME, obj) {
|
|
|
748
784
|
.def("GetClumpContacts",
|
|
749
785
|
static_cast<std::vector<std::pair<deme::bodyID_t, deme::bodyID_t>> (deme::DEMSolver::*)() const>(
|
|
750
786
|
&deme::DEMSolver::GetClumpContacts),
|
|
751
|
-
"Get all clump--clump
|
|
752
|
-
|
|
787
|
+
"Get all clump--clump contact ID pairs in the simulation system. Note all GetContact-like methods reports "
|
|
788
|
+
"potential contacts (not necessarily confirmed contacts), meaning they are similar to what "
|
|
789
|
+
"WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.")
|
|
753
790
|
.def("GetClumpContacts",
|
|
754
791
|
static_cast<std::vector<std::pair<deme::bodyID_t, deme::bodyID_t>> (deme::DEMSolver::*)(
|
|
755
792
|
const std::set<deme::family_t>&) const>(&deme::DEMSolver::GetClumpContacts),
|
|
756
|
-
"Get all clump--clump
|
|
757
|
-
|
|
793
|
+
"Get all clump--clump contact ID pairs in the simulation system. Note all GetContact-like methods reports "
|
|
794
|
+
"potential contacts (not necessarily confirmed contacts), meaning they are similar to what "
|
|
795
|
+
"WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does. Use the argument to "
|
|
796
|
+
"include only these families in the output.")
|
|
758
797
|
.def("GetClumpContacts",
|
|
759
798
|
static_cast<std::vector<std::pair<deme::bodyID_t, deme::bodyID_t>> (deme::DEMSolver::*)(
|
|
760
799
|
std::vector<std::pair<deme::family_t, deme::family_t>>&) const>(&deme::DEMSolver::GetClumpContacts),
|
|
761
|
-
"Get all clump--clump
|
|
800
|
+
"Get all clump--clump contact ID pairs in the simulation system. Note all GetContact-like methods reports "
|
|
801
|
+
"potential contacts (not necessarily confirmed contacts), meaning they are similar to what "
|
|
802
|
+
"WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.")
|
|
803
|
+
|
|
804
|
+
.def("GetContacts",
|
|
805
|
+
static_cast<std::vector<std::pair<deme::bodyID_t, deme::bodyID_t>> (deme::DEMSolver::*)() const>(
|
|
806
|
+
&deme::DEMSolver::GetContacts),
|
|
807
|
+
"Get all contact ID pairs in the simulation system. Note all GetContact-like methods reports potential "
|
|
808
|
+
"contacts (not necessarily confirmed contacts), meaning they are similar to what "
|
|
809
|
+
"WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.")
|
|
810
|
+
.def("GetContacts",
|
|
811
|
+
static_cast<std::vector<std::pair<deme::bodyID_t, deme::bodyID_t>> (deme::DEMSolver::*)(
|
|
812
|
+
const std::set<deme::family_t>&) const>(&deme::DEMSolver::GetContacts),
|
|
813
|
+
"Get all contact ID pairs in the simulation system. Note all GetContact-like methods reports potential "
|
|
814
|
+
"contacts (not necessarily confirmed contacts), meaning they are similar to what "
|
|
815
|
+
"WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does. Use the argument to "
|
|
816
|
+
"include only these families in the output.")
|
|
817
|
+
.def("GetContacts",
|
|
818
|
+
static_cast<std::vector<std::pair<deme::bodyID_t, deme::bodyID_t>> (deme::DEMSolver::*)(
|
|
819
|
+
std::vector<std::pair<deme::family_t, deme::family_t>>&) const>(&deme::DEMSolver::GetContacts),
|
|
820
|
+
"Get all contact ID pairs in the simulation system. Note all GetContact-like methods reports potential "
|
|
821
|
+
"contacts (not necessarily confirmed contacts), meaning they are similar to what "
|
|
822
|
+
"WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.")
|
|
823
|
+
|
|
824
|
+
.def("GetContactDetailedInfo", &deme::DEMSolver::GetContactDetailedInfo,
|
|
825
|
+
"Get all contact pairs' detailed information (actual content based on the setting with "
|
|
826
|
+
"SetContactOutputContent; default are owner IDs, contact point location, contact force, and associated "
|
|
827
|
+
"wildcard values) in the simulation system. Note all GetContact-like methods reports potential contacts "
|
|
828
|
+
"(not necessarily confirmed contacts), meaning they are similar to what "
|
|
829
|
+
"WriteContactFileIncludingPotentialPairs does, not what WriteContactFile does.",
|
|
830
|
+
py::arg("force_thres") = -1.0)
|
|
762
831
|
|
|
763
832
|
.def("GetHostMemUsageDynamic", &deme::DEMSolver::GetHostMemUsageDynamic,
|
|
764
833
|
"Get the host memory usage (in bytes) on dT.")
|
|
@@ -948,6 +1017,18 @@ PYBIND11_MODULE(DEME, obj) {
|
|
|
948
1017
|
.def("SetAnalWildcardValue", &deme::DEMSolver::SetAnalWildcardValue,
|
|
949
1018
|
"Set the wildcard values of some analytical components.")
|
|
950
1019
|
|
|
1020
|
+
.def("SetOwnerWildcardValue",
|
|
1021
|
+
static_cast<void (deme::DEMSolver::*)(deme::bodyID_t ownerID, const std::string& name,
|
|
1022
|
+
const std::vector<float>& vals)>(
|
|
1023
|
+
&deme::DEMSolver::SetOwnerWildcardValue),
|
|
1024
|
+
"Set the wildcard values of some owners using a list.", py::arg("ownerIDs"), py::arg("name"),
|
|
1025
|
+
py::arg("vals"))
|
|
1026
|
+
.def("SetOwnerWildcardValue",
|
|
1027
|
+
static_cast<void (deme::DEMSolver::*)(deme::bodyID_t ownerID, const std::string& name, float val,
|
|
1028
|
+
size_t n)>(&deme::DEMSolver::SetOwnerWildcardValue),
|
|
1029
|
+
"Set the wildcard values of some owners using a list.", py::arg("ownerIDs"), py::arg("name"),
|
|
1030
|
+
py::arg("val"), py::arg("n") = 1)
|
|
1031
|
+
|
|
951
1032
|
.def("GetOwnerWildcardValue",
|
|
952
1033
|
static_cast<std::vector<float> (deme::DEMSolver::*)(deme::bodyID_t ownerID, const std::string& name,
|
|
953
1034
|
deme::bodyID_t n)>(
|
|
@@ -987,11 +1068,6 @@ PYBIND11_MODULE(DEME, obj) {
|
|
|
987
1068
|
"Add an extra contact margin to entities in a family so they are registered as potential contact pairs "
|
|
988
1069
|
"earlier.")
|
|
989
1070
|
|
|
990
|
-
.def("GetAllOwnerWildcardValue", &deme::DEMSolver::GetAllOwnerWildcardValue,
|
|
991
|
-
"Get the owner wildcard's values of all entities.")
|
|
992
|
-
.def("GetFamilyOwnerWildcardValue", &deme::DEMSolver::GetFamilyOwnerWildcardValue,
|
|
993
|
-
"Get the owner wildcard's values of all entities in family N.")
|
|
994
|
-
|
|
995
1071
|
.def("ClearCache", &deme::DEMSolver::ClearCache,
|
|
996
1072
|
"Remove host-side cached vectors (so you can re-define them, and then re-initialize system).")
|
|
997
1073
|
|
|
@@ -1000,7 +1076,11 @@ PYBIND11_MODULE(DEME, obj) {
|
|
|
1000
1076
|
&deme::DEMSolver::CreateInspector),
|
|
1001
1077
|
"Create a inspector object that can help query some statistical info of the clumps in the simulation.",
|
|
1002
1078
|
py::arg("quantity") = "clump_max_z")
|
|
1003
|
-
.def("GetNumClumps", &deme::DEMSolver::GetNumClumps
|
|
1079
|
+
.def("GetNumClumps", &deme::DEMSolver::GetNumClumps,
|
|
1080
|
+
"Return the number of clumps that are currently in the simulation. Must be used after initialization.")
|
|
1081
|
+
.def("GetNumOwners", &deme::DEMSolver::GetNumOwners,
|
|
1082
|
+
"Return the total number of owners (clumps + meshes + analytical objects) that are currently in the "
|
|
1083
|
+
"simulation. Must be used after initialization.")
|
|
1004
1084
|
.def("CreateInspector",
|
|
1005
1085
|
static_cast<std::shared_ptr<deme::DEMInspector> (deme::DEMSolver::*)(
|
|
1006
1086
|
const std::string&, const std::string&)>(&deme::DEMSolver::CreateInspector),
|
|
@@ -1036,7 +1116,14 @@ PYBIND11_MODULE(DEME, obj) {
|
|
|
1036
1116
|
"WriteContactFile",
|
|
1037
1117
|
static_cast<void (deme::DEMSolver::*)(const std::string&, float) const>(&deme::DEMSolver::WriteContactFile),
|
|
1038
1118
|
"Write all contact pairs to a file. Forces smaller than threshold will not be outputted.",
|
|
1039
|
-
py::arg("outfilename"), py::arg("force_thres") = 1e-
|
|
1119
|
+
py::arg("outfilename"), py::arg("force_thres") = 1e-30)
|
|
1120
|
+
.def("WriteContactFileIncludingPotentialPairs",
|
|
1121
|
+
static_cast<void (deme::DEMSolver::*)(const std::string&) const>(
|
|
1122
|
+
&deme::DEMSolver::WriteContactFileIncludingPotentialPairs),
|
|
1123
|
+
"Write all contact pairs kT-supplied to a file, thus including the potential ones (those are not yet in "
|
|
1124
|
+
"contact, or recently used to be in contact).",
|
|
1125
|
+
py::arg("outfilename"))
|
|
1126
|
+
|
|
1040
1127
|
// Maybe add checkpoint-reading methods here...
|
|
1041
1128
|
.def("DoDynamics", &deme::DEMSolver::DoDynamics,
|
|
1042
1129
|
"Advance simulation by this amount of time (but does not attempt to sync kT and dT). This can work with "
|
|
@@ -1336,7 +1423,7 @@ PYBIND11_MODULE(DEME, obj) {
|
|
|
1336
1423
|
py::enum_<deme::CNT_OUTPUT_CONTENT>(obj, "CNT_OUTPUT_CONTENT")
|
|
1337
1424
|
.value("CNT_TYPE", deme::CNT_OUTPUT_CONTENT::CNT_TYPE)
|
|
1338
1425
|
.value("FORCE", deme::CNT_OUTPUT_CONTENT::FORCE)
|
|
1339
|
-
.value("POINT", deme::CNT_OUTPUT_CONTENT::
|
|
1426
|
+
.value("POINT", deme::CNT_OUTPUT_CONTENT::CNT_POINT)
|
|
1340
1427
|
.value("COMPONENT", deme::CNT_OUTPUT_CONTENT::COMPONENT)
|
|
1341
1428
|
.value("NORMAL", deme::CNT_OUTPUT_CONTENT::NORMAL)
|
|
1342
1429
|
.value("TORQUE", deme::CNT_OUTPUT_CONTENT::TORQUE)
|