32.1 GB
673,093 files
Updated 5 months ago
Name
Size
PROJET.md912 Bytes
xet
README.md5.9 kB
xet
config.ini357 Bytes
xet
dem_simulation.py11.6 kB
xet
demo.sh3.84 kB
xet
demo_dem.gif175 kB
xet
exemples.py6.19 kB
xet
requirements.txt169 Bytes
xet
run_simulation.sh2.32 kB
xet
test_dem.py2.16 kB
xet
README.md

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ètres
  • compute_forces(): Calcul des forces inter-particulaires
  • integrate_verlet(): Intégration temporelle (schéma de Verlet)
  • apply_boundary_conditions(): Gestion des collisions avec les parois
  • step(): Pas de temps complet
  • run_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étique
  • energy_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

  1. Simulation instable: Réduire le pas de temps dt
  2. Particules traversent les parois: Augmenter k_normal
  3. Performance lente: Réduire le nombre de particules
  4. Pas de convergence: Ajuster restitution et friction_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

Contributors