This project is deprectaed, see LMGC90_GUI_MVC
LMGC90_GUI is a modern, user-friendly graphical interface built with PyQt6 for the pre-processor module (pre) of the open-source Discrete Element Method (DEM) code LMGC90 and LMGC90 documentation
It allows you to visually create, edit, and manage complex 2D (and partially 3D) mechanical models without writing Python code manually — while still offering full flexibility for advanced users.
All versions are intended for research and prototyping. A full rewrite is planned in the future.
French documentation of LMGC90_GUI
- Materials: RIGID, ELAS, ELAS_DILA, VISCO_ELAS, ELAS_PLAS, THERMO_ELAS, PORO_ELAS
- Models:
- 2D: Rxx2D, T3xxx, Q4xxx, T6xxx, Q8xxx, Q9xxx, BARxx
- 3D: Rxx3D, H8xxx, SHB8x, H20xx, SHB6x, TE10x, DKTxx
- Rigid bodies (avatars): disks, polygons (regular or full), ovoids, joncs, clusters, walls (rough/fine/smooth/granular), spheres (3D not implemented), and fully customizable empty avatars with multiple contactors
- Contact laws: IQS_CLB, IQS_CLB_g0, COUPLED_DOF
- Visibility tables for detection control
- Boundary conditions (imposeDrivenDof, translate, rotate, etc.) on individual bodies or named groups
- Parametric generation:
- Loops (circle, grid, line, spiral, manual)
- Granulometry with random size distribution and deposition in Box2D or Disk2D
- Option to store generated particles in a named group
- Granulmetry :
- granulo_Random distrinution
- deposit in (Box2D, Disk2D, Drum2D and Couette2D)
- Option to store granolo in named group
- Post-processing commands (SOLVER INFORMATIONS, TORQUE EVOLUTION, BODY TRACKING, etc.) with optional rigid set selection
- Dynamic variables: define custom variables (e.g.,
thickness=0.02,scale=1.5) usable in parameter fields - Direct generation of
.Datboxfile (ready for LMGC90 solver) - Python script generation for full reproducibility
- Project save/load in
.lmgc90JSON format
- Python 3.8+
- PyQt6
- pylmgc90 (installed with LMGC90)
git clone https://github.com/bzerourou/LMGC90_GUI.git
cd LMGC90_GUI
python main.pyTwo example projects are included to help you get started.
A classic pendulum mechanism using COUPLED_DOF joints. How to load and run:
-
Launch LMGC90_GUI → File → Open → select pendulum.lmgc90
-
Go to Tools → Generate Datbox
-
The file DATBOX is created in the project folder
A complete slider-crank (bielle-manivelle) with three rigid bodies connected by revolute and prismatic joints. How to load:
- File → Open → select slider_crank.lmgc90
- Generate Datbox (Generate Datbox)
- Dialogue Variables dynamiques (menu Outils → Définir variables dynamiques)
- Variables utilisables dans les champs de paramètres (
QLineEdit) - Routines aléatoires et variables internes dans
_safe_eval_dict:l,h,ra,rb,axe1,axe2,body, etc.
- Variable
bodyinterne (DOF force) - Boutons update / delete
body_indexen désérialisation- Génération d’avatars manuels
- Indices de bodies pour les DOF
- Script Python : granulo, DOF, post-pro (
aview, dd/del)
- Génération directe de fichier
.Datbox(generate_datbox) - Commandes post-processing (SOLVER INFORMATIONS, etc.)
- Stockage de la granulométrie dans une liste nommée (groupe)
- Documentation française (
docs/)
- Combobox avatar dans l’onglet granulométrie
modify_selected/delete_selected- Dimension dans les onglets modèles
- Script Python généré
- Découpage progressif :
tabs.py,updates.py,visu.py,preferences.py - Déplacement de nombreuses fonctions vers
main.py/ modules dédiés
Commit tagué : LMGC90_GUI version 0.2.5 (54e26bab)
- Préférences d’unités (fenêtre SI / CGS — ébauche)
- Post-traitement de base (onglet post-pro, focus SOLVER INFORMATIONS)
- Captures d’écran d’interface (
inter_LMGC90_GUI5/6.jpg)
- Indices de bodies pour les DOF
- Options fenêtre / onglet post-pro
- Onglet Granulométrie
- Dépôt dans Box2D et Disk2D
- Initialement limité aux avatars
rigidDisk - Distribution aléatoire des rayons (
granulo_Random)
- Support ultérieur : Drum2D, Couette2D (README)
- Distribution / génération paramétrique d’avatars
- Bugs d’interface divers
- Lois de contact IQS_CLB_g0 et COUPLED_DOF
- Modèles 2D / 3D supplémentaires
- Éléments MECAx listés dans l’onglet modèle (options, sans implémentation complète)
- Désérialisation des nouveaux modèles
- Génération de script pour les nouveaux modèles
- Onglet Avatar vide (
empty avatar) avec contacteurs personnalisés - Avatar rigidCluster
- Paramètre is_Hollow pour
rigidDisk - Matériaux avancés :
- ELAS, ELAS_DILA, VISCO_ELAS, ELAS_PLAS, THERMO_ELAS, PORO_ELAS
is_HollowpourrigidDisk()- Script Python pour les nouveaux matériaux
- Noms de matériaux dans l’arbre du modèle
- Boucles paramétriques (cercle, grille, ligne, spirale, manuel)
- Groupes nommés d’avatars (listes stockées)
- Sérialisation / désérialisation des listes d’avatars
- Inversion d’axe pour les boucles en ligne
- Recréation des avatars de boucle à l’ouverture d’un JSON
invert_axispour les boucles_serialize_state/_deserialize_state- Centres d’avatars à la désérialisation
- Génération de script Python
- Sélection dans l’arbre à la création d’avatars
Période de démarrage du projet (premier historique Git visible : 11 novembre 2025).
- CRUD matériau, modèle, avatar, loi de contact, règle de visibilité
- Onglet interaction
- Avatars :
rigidDiscretDisk,roughWall,fineWall,smoothWall,granuloRoughWall - Ajout paramétrique d’avatars
- Premiers README et captures de documentation
- Stabilisation progressive de l’interface
- Corrections README / captures
Open source — free to use, modify, and distribute.
Zerourou Bachir Email: bachir.zerourou@yahoo.fr © 2025
