Buckets:
32.1 GB
673,093 files
Updated 5 months ago
Ctrl+K
| Name | Size | Uploaded | Xet hash |
|---|---|---|---|
| PROJET.md | 912 Bytes xet | 7a88943e | |
| README.md | 5.9 kB xet | a3c23f4f | |
| config.ini | 357 Bytes xet | fe7a0ea2 | |
| dem_simulation.py | 11.6 kB xet | 148218bf | |
| demo.sh | 3.84 kB xet | 70a818e3 | |
| demo_dem.gif | 175 kB xet | 7d8f90e3 | |
| exemples.py | 6.19 kB xet | 572906ff | |
| requirements.txt | 169 Bytes xet | 3b870846 | |
| run_simulation.sh | 2.32 kB xet | f561101f | |
| test_dem.py | 2.16 kB xet | 1443b85d |
Simulation DEM (Discrete Element Method) - Matériaux Granulaires
Implémentation en Python d'une simulation de matériaux granulaires utilisant la méthode des éléments discrets (DEM).
Description
Cette simulation implémente les principes fondamentaux de la méthode DEM pour modéliser le comportement de matériaux granulaires (sable, gravier, grains, etc.). Chaque particule est traitée individuellement avec ses propres propriétés physiques et interactions.
Fonctionnalités
Mécanismes physiques implémentés
- Forces de contact: Modèle ressort-amortisseur pour les collisions
- Frottement: Modèle de Coulomb pour les interactions tangentielles
- Gravité: Accélération gravitationnelle terrestre
- Amortissement: Amortissement visqueux pour la stabilité
- Conditions aux limites: Parois réfléchissantes avec restitution
Paramètres ajustables
- Nombre de particules
- Tailles des particules (distribution aléatoire)
- Propriétés des matériaux (élasticité, frottement)
- Conditions initiales (positions et vitesses)
- Paramètres de simulation (pas de temps, durée)
Installation
Prérequis système
- Python 3.8+
- pip (gestionnaire de paquets Python)
Installation des dépendances
pip install -r requirements.txt
Utilisation
Lancement de la simulation de base
python dem_simulation.py
Personnalisation des paramètres
Modifiez les paramètres dans la fonction main() du fichier dem_simulation.py:
def main():
# Configuration de la simulation
sim = DEMSimulation(num_particles=200, box_size=10.0)
# Paramètres physiques
sim.dt = 0.0005 # Pas de temps (secondes)
sim.total_time = 5.0 # Durée totale (secondes)
sim.restitution = 0.7 # Coefficient de restitution (0-1)
sim.friction_coeff = 0.2 # Coefficient de frottement
sim.damping = 0.98 # Amortissement visqueux
# Exécution
sim.run_simulation()
Structure du code
Classe DEMSimulation
__init__(): Initialisation des particules et paramètrescompute_forces(): Calcul des forces inter-particulairesintegrate_verlet(): Intégration temporelle (schéma de Verlet)apply_boundary_conditions(): Gestion des collisions avec les paroisstep(): Pas de temps completrun_simulation(): Boucle principale de simulation
Paramètres physiques clés
| Paramètre | Description | Valeur typique | Unité |
|---|---|---|---|
k_normal |
Raideur normale | 1000 | N/m |
c_normal |
Amortissement normal | 10 | N·s/m |
restitution |
Coefficient de restitution | 0.8 | - |
friction_coeff |
Coefficient de frottement | 0.1 | - |
damping |
Amortissement visqueux | 0.99 | - |
Sorties de simulation
Fichiers générés
final_positions.csv: Positions finales des particules (x, y, rayon)kinetic_energy.csv: Évolution temporelle de l'énergie cinétiqueenergy_evolution.png: Graphique de l'énergie cinétique
Visualisation
La simulation affiche en temps réel:
- Positions des particules (cercles bleus)
- Temps écoulé
- Énergie cinétique totale
- Progression de la simulation
Exemples d'utilisation
Simulation de sable
sim = DEMSimulation(num_particles=300, box_size=12.0)
sim.restitution = 0.3 # Peu élastique
sim.friction_coeff = 0.4 # Frottement élevé
sim.run_simulation()
Simulation de billes d'acier
sim = DEMSimulation(num_particles=50, box_size=8.0)
sim.restitution = 0.95 # Très élastique
sim.friction_coeff = 0.05 # Faible frottement
sim.run_simulation()
Simulation de gravier
sim = DEMSimulation(num_particles=100, box_size=15.0)
sim.radii = np.random.uniform(0.1, 0.5, sim.num_particles) # Gros grains
sim.restitution = 0.6
sim.friction_coeff = 0.3
sim.run_simulation()
Optimisations et limitations
Complexité algorithmique
- Actuelle: O(n²) - calcul de toutes les paires de particules
- Optimisations possibles:
- Grille spatiale pour réduire les calculs de collision
- Compilation JIT avec Numba
- Calculs parallèles (GPU)
Limitations
- Simulation 2D uniquement
- Nombre de particules limité (~1000 pour temps réel)
- Lois de contact simplifiées
- Pas de cohésion entre particules
Extensions possibles
Lois de contact avancées
- Modèle de Hertz-Mindlin (déformations élastiques)
- Cohésion (forces attractives)
- Interactions électrostatiques
Conditions aux limites
- Parois mobiles/inclinées
- Ouvertures et écoulements
- Géométries complexes
Analyses physiques
- Tenseur des contraintes
- Distribution des forces de contact
- Facteur de compacité
- Segregation des tailles
Références
Articles scientifiques
- Cundall, P.A. & Strack, O.D.L. (1979). "A discrete numerical model for granular assemblies"
- Thornton, C. (1997). "Coefficient of restitution for collinear collisions of elastic-perfectly plastic spheres"
Logiciels similaires
- LIGGGHTS: Simulation DEM open-source (C++)
- YADE: Framework DEM multi-physique
- MercuryDPM: Spécialisé matériaux granulaires
- ESYS-Particle: Bibliothèque Python pour DEM
Dépannage
Problèmes courants
- Simulation instable: Réduire le pas de temps
dt - Particules traversent les parois: Augmenter
k_normal - Performance lente: Réduire le nombre de particules
- Pas de convergence: Ajuster
restitutionetfriction_coeff
Optimisations de performance
# Utiliser Numba pour la compilation JIT
from numba import jit
@jit(nopython=True)
def compute_forces_optimized(positions, velocities, radii, masses):
# Version optimisée des calculs
pass
Auteur: OpenCode Assistant Version: 1.0 Date: 2025 Licence: MIT
- Total size
- 32.1 GB
- Files
- 673,093
- Last updated
- Mar 19
- Pre-warmed CDN
- US EU US EU