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.
- {deme-2.0.2/deme.egg-info → deme-2.0.4}/PKG-INFO +1 -1
- {deme-2.0.2 → deme-2.0.4}/README.md +2 -0
- {deme-2.0.2 → deme-2.0.4/deme.egg-info}/PKG-INFO +1 -1
- {deme-2.0.2 → deme-2.0.4}/setup.py +22 -18
- {deme-2.0.2 → deme-2.0.4}/src/DEM/API.h +81 -10
- {deme-2.0.2 → deme-2.0.4}/src/DEM/APIPrivate.cpp +25 -12
- {deme-2.0.2 → deme-2.0.4}/src/DEM/APIPublic.cpp +76 -12
- {deme-2.0.2 → deme-2.0.4}/src/DEM/AuxClasses.cpp +18 -6
- {deme-2.0.2 → deme-2.0.4}/src/DEM/AuxClasses.h +13 -3
- {deme-2.0.2 → deme-2.0.4}/src/DEM/Defines.h +8 -8
- {deme-2.0.2 → deme-2.0.4}/src/DEM/PyDEME.cpp +101 -14
- {deme-2.0.2 → deme-2.0.4}/src/DEM/Structs.h +177 -7
- {deme-2.0.2 → deme-2.0.4}/src/DEM/dT.cpp +132 -58
- {deme-2.0.2 → deme-2.0.4}/src/DEM/dT.h +5 -1
- {deme-2.0.2 → deme-2.0.4}/src/DEM/kT.cpp +11 -11
- {deme-2.0.2 → deme-2.0.4}/src/DEM/kT.h +2 -1
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_ContactChain.cpp +1 -1
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Indentation.cpp +18 -5
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_SingleSphereCollide.cpp +11 -2
- {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_BallDrop.py +1 -1
- {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_BallDrop2D.py +2 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_Centrifuge.py +1 -1
- {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_ConePenetration.py +1 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_Electrostatic.py +1 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_FlexibleMesh.py +1 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_GRCPrep_Part1.py +1 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_GameOfLife.py +2 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_Mixer.py +2 -1
- {deme-2.0.2 → deme-2.0.4}/src/demo/pyDEME_WheelDPSimplified.py +1 -1
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCalcForceKernels.cu +11 -9
- {deme-2.0.2 → deme-2.0.4}/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/LICENSE.md +0 -0
- {deme-2.0.2 → deme-2.0.4}/MANIFEST.in +0 -0
- {deme-2.0.2 → deme-2.0.4}/cmake/CudaSupportedArchitectures.cmake +0 -0
- {deme-2.0.2 → deme-2.0.4}/cmake/CxxStdAutodetect.cmake +0 -0
- {deme-2.0.2 → deme-2.0.4}/cmake/DEMEConfig.cmake.in +0 -0
- {deme-2.0.2 → deme-2.0.4}/cmake/FixNinjaColors.cmake +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/clumps/3_clump.csv +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/clumps/6_clump.csv +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/clumps/ContactChain_initial.csv +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/clumps/TeddyBear.csv +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/clumps/ViperWheelSimple.csv +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/clumps/ellipsoid_2_1_1.csv +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/clumps/molecule.csv +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/clumps/spiky_sphere.csv +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/clumps/triangular_flat.csv +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/clumps/triangular_flat_6comp.csv +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/GPBR_Vessel_Fine.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/cone.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/cube.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/cyl_r1_h2.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/excavator.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/funnel.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/funnel_left.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/hourglass.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/hourglass_cap.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/internal_mixer.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/plane_20by20.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/rover_wheels/curiosity_wheel.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/rover_wheels/curiosity_wheel_surface.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/rover_wheels/viper_wheel_right.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/silo.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/sphere.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/mesh/thin_plate.obj +0 -0
- {deme-2.0.2 → deme-2.0.4}/data/sim_data/example_cnt_pairs.csv +0 -0
- {deme-2.0.2 → deme-2.0.4}/deme.egg-info/SOURCES.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/deme.egg-info/dependency_links.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/deme.egg-info/not-zip-safe +0 -0
- {deme-2.0.2 → deme-2.0.4}/deme.egg-info/requires.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/deme.egg-info/top_level.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/packaging_instructions.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/pyproject.toml +0 -0
- {deme-2.0.2 → deme-2.0.4}/setup.cfg +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/.format_all +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/DEM/BdrsAndObjs.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/DEM/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/DEM/HostSideHelpers.hpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/DEM/MeshUtils.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/DEM/Models.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/DEM/VariableTypes.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/DEM/utils/Samplers.hpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/algorithms/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMCubContactDetection.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMCubForceCollection.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMCubInstantiations.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMCubWrappers.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMDynamicMisc.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMStaticDeviceSubroutines.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/algorithms/DEMStaticDeviceUtilities.cuh +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/ApiVersion.h.in +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/DebugInfo.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/CudaAllocator.hpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/DEMEPaths.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/DEMEPaths.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/DataMigrationHelper.hpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/GpuError.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/GpuManager.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/GpuManager.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/HeaderGenerator.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/JitHelper.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/JitHelper.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/ManagedMemory.hpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/RuntimeData.cpp.in +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/RuntimeData.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/ThreadManager.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/Timer.hpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/WavefrontMeshLoader.hpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/core/utils/csv.hpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_BallDrop.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_BallDrop2D.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Centrifuge.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_ConePenetration.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Electrostatic.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_FlexibleMesh.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Fracture_Box.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_GRCPrep_Part1.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_GRCPrep_Part2.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_GRCPrep_Part3.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_GameOfLife.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Hopper_Sphere_Cylinder.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Mixer.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Plow.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Repose.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Repose2D.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_RotatingDrum.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Shake.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_Sieve.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_SolarSystem.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_TestPack.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_WheelDP.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_WheelDPSimplified.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/demo/DEMdemo_WheelSlopeSlip.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/CUDAMathHelpers.cuh +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMBinSphereKernels.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMBinTriangleKernels.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCollectForceKernels.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCollectForceKernels_Compact.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCollisionKernels.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMContactKernels_SphereSphere.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMContactKernels_SphereTriangle.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/AnalyticalCompDefJitify.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratAllFlatten.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratAllJitify.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ClumpCompAcqStratPartialJitify.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ClumpCompDefJitify.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ContactInfoWriteBack.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/ForceInKernelReductionStrat.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/FrictionlessHertzianForceModel.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/FullHertzianForceModel.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnCenteredDiff.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnExtendedTaylor.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/IntegrationVelPassOnForwardEuler.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MOIAcqStratFlatten.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MOIAcqStratJitify.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MOIDefJitify.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MassAcqStratFlatten.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MassAcqStratJitify.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMCustomizablePolicies/MassDefJitify.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMHelperKernels.cuh +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMHistoryMappingKernels.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMIntegrationKernels.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMMiscKernels.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMModeratorKernels.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMOwnerQueryKernels.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMPrepForceKernels.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMSphereQueryKernels.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMTriangleBoxIntersect.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModel2D.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelMooring.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelMooringPosition.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelWithCohesion.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelWithElectrostatic.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelWithFractureModel.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/DEMUserScripts/ForceModelWithGravity.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/src/kernel/hello.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/.clang-format +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/.git +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/.gitignore +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/Doxyfile +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/LICENSE +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/Makefile +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/README.md +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/example_headers/class_arg_kernel.cuh +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/example_headers/constant_header.cuh +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/example_headers/my_header1.cuh +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/example_headers/my_header2.cuh +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/example_headers/my_header3.cuh +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/jitify.hpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/jitify_example.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/jitify_test.cu +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/nvrtc_cli.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/nvrtc_cli_test.sh +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/jitify/stringify.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.appveyor.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.clang-format +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.clang-tidy +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.cmake-format.yaml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.codespell-ignore-lines +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.git +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.gitattributes +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/CODEOWNERS +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/CONTRIBUTING.md +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/dependabot.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/labeler.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/labeler_merged.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/matchers/pylint.json +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/pull_request_template.md +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/ci.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/configure.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/format.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/labeler.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/pip.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.github/workflows/upstream.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.gitignore +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.pre-commit-config.yaml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/.readthedocs.yml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/LICENSE +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/MANIFEST.in +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/README.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/Doxyfile +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/Makefile +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/_static/css/custom.css +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/chrono.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/custom.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/eigen.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/functional.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/index.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/overview.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/stl.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/cast/strings.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/classes.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/embedding.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/exceptions.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/functions.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/misc.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/pycpp/index.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/pycpp/numpy.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/pycpp/object.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/pycpp/utilities.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/advanced/smart_ptrs.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/basics.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/benchmark.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/benchmark.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/changelog.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/classes.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/cmake/index.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/compiling.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/conf.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/faq.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/index.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/installing.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/limitations.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/pybind11-logo.png +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/pybind11_vs_boost_python1.svg +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/pybind11_vs_boost_python2.svg +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/reference.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/release.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/requirements.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/docs/upgrade.rst +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/attr.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/buffer_info.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/cast.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/chrono.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/common.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/complex.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/class.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/common.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/descr.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/init.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/internals.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/type_caster_base.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/detail/typeid.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/eigen/matrix.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/eigen/tensor.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/eigen.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/embed.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/eval.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/functional.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/gil.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/iostream.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/numpy.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/operators.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/options.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/pybind11.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/pytypes.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/stl/filesystem.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/stl.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/include/pybind11/stl_bind.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/noxfile.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/__init__.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/__main__.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/_version.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/commands.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/py.typed +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pybind11/setup_helpers.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/pyproject.toml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/setup.cfg +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/setup.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/conftest.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/constructor_stats.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/cross_module_gil_utils.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/cross_module_interleaved_error_already_set.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/eigen_tensor_avoid_stl_array.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/env.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/extra_python_package/pytest.ini +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/extra_python_package/test_files.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/extra_setuptools/pytest.ini +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/extra_setuptools/test_setuphelper.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/local_bindings.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/object.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/pybind11_cross_module_tests.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/pybind11_tests.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/pybind11_tests.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/pytest.ini +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/requirements.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_async.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_async.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_buffers.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_buffers.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_builtin_casters.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_builtin_casters.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_call_policies.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_call_policies.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_callbacks.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_callbacks.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_chrono.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_chrono.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_class.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_class.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/embed.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/main.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_cmake_build/test.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_const_name.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_const_name.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_constants_and_functions.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_constants_and_functions.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_copy_move.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_copy_move.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_custom_type_casters.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_custom_type_casters.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_custom_type_setup.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_custom_type_setup.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_docstring_options.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_docstring_options.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eigen_matrix.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eigen_matrix.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eigen_tensor.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eigen_tensor.inl +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eigen_tensor.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/CMakeLists.txt +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/catch.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/external_module.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/test_interpreter.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/test_interpreter.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_embed/test_trampoline.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_enum.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_enum.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eval.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eval.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_eval_call.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_exceptions.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_exceptions.h +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_exceptions.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_factory_constructors.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_factory_constructors.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_gil_scoped.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_gil_scoped.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_iostream.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_iostream.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_kwargs_and_defaults.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_kwargs_and_defaults.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_local_bindings.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_local_bindings.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_methods_and_attributes.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_methods_and_attributes.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_modules.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_modules.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_multiple_inheritance.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_multiple_inheritance.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_array.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_array.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_dtypes.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_dtypes.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_vectorize.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_numpy_vectorize.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_opaque_types.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_opaque_types.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_operator_overloading.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_operator_overloading.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_pickling.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_pickling.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_pytypes.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_pytypes.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_sequences_and_iterators.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_sequences_and_iterators.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_smart_ptr.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_smart_ptr.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_stl.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_stl.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_stl_binders.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_stl_binders.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_tagbased_polymorphic.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_tagbased_polymorphic.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_thread.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_thread.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_union.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_union.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_virtual_functions.cpp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/test_virtual_functions.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/valgrind-numpy-scipy.supp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tests/valgrind-python.supp +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/FindCatch.cmake +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/FindEigen3.cmake +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/FindPythonLibsNew.cmake +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/JoinPaths.cmake +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/check-style.sh +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/cmake_uninstall.cmake.in +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/codespell_ignore_lines_from_errors.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/libsize.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/make_changelog.py +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pybind11.pc.in +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pybind11Common.cmake +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pybind11Config.cmake.in +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pybind11NewTools.cmake +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pybind11Tools.cmake +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/pyproject.toml +0 -0
- {deme-2.0.2 → deme-2.0.4}/thirdparty/pybind11/tools/setup_global.py.in +0 -0
- {deme-2.0.2 → deme-2.0.4}/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.
|
|
@@ -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
|
-
|
|
31
|
-
|
|
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.
|
|
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=[
|
|
162
|
-
extras_require={"dev": [
|
|
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
|
|
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;
|
|
@@ -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
|
-
//
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
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::
|
|
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
|
-
//
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
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
|
-
|
|
2314
|
-
|
|
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,
|
|
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,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-
|
|
30
|
-
#define DEME_HUGE_FLOAT
|
|
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,
|
|
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,
|