@startuml C4_Flower_Architecture !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml ' LAYOUT TOP_DOWN LAYOUT_WITH_LEGEND() title Diagramme C4 Container - Architecture Actuelle de Flower.jl Person(user, "Utilisateur / Physicien", "Configure et lance la simulation") System_Boundary(flower_system, "Flower.jl (Simulation CFD & Electrolyse)") { Container(driver, "Driver / Entry Point", "Julia Script (convergence.jl)", "Point d'entrée. Parse les arguments, initialise la mémoire globale et lance la simulation.") Container(config, "Configuration Parser", "YAML / PropertyDict", "Charge les paramètres physiques et numériques (ex: convergence...Newton.yml).") Container(orchestrator, "Time Orchestrator", "run.jl", "Gère la boucle temporelle (while t < t_end), le pas de temps adaptatif (CFL) et l'enchaînement des solveurs.") Container(data_struct, "Data & Mesh Manager", "geometry.jl / common.jl", "Structure de données centrale.\nGère les Grilles Décalées (Staggered), les Champs (Vitesse, Pression, Potentiel) et les LevelSets.") Container_Boundary(physics_kernels, "Noyaux Physiques (Computing Kernels)") { Container(mod_ns, "Navier-Stokes Solver", "navier_stokes.jl", "Résout l'équation de mouvement (Momentum) et la conservation de la masse.") Container(mod_elec, "Electrolysis Module", "electrolysis.jl", "Résout le Potentiel Électrique, la Loi d'Ohm et la cinétique Butler-Volmer.") Container(mod_trans, "Transport & Phase", "transport.jl / levelset", "Gère le transport des espèces et l'interface (LevelSet/VOF).") } Container(lin_solver, "Linear Algebra Wrapper", "poisson.jl / operators.jl", "Assemble les matrices A et les vecteurs b. Appelle les solveurs creux (SparseArrays / IterativeSolvers).") Container(io_interface, "I/O Interface", "PDI / HDF5 / Viz", "Exporte les données pour la visualisation (Paraview) et le checkpointing via la librairie PDI.") } System_Ext(libpdi, "Librairie PDI", "C/C++ Library", "Gestionnaire d'événements et d'E/S haute performance.") ' Relations Rel(user, driver, "Lance la simulation", "CLI") Rel(driver, config, "Lit", "YAML") Rel(driver, data_struct, "Alloue & Initialise", "Struct Numerical & Mesh") Rel(driver, orchestrator, "Démarre", "run_forward!") Rel(orchestrator, mod_ns, "Appelle (Time step)", "run_navier_stokes!") Rel(orchestrator, mod_elec, "Appelle (Time step)", "solve_poisson_loop!") Rel(orchestrator, mod_trans, "Appelle (Advection)", "transport!") Rel(orchestrator, io_interface, "Notifie", "Events PDI") Rel_D(mod_ns, data_struct, "Lit/Écrit", "u, v, p") Rel_D(mod_elec, data_struct, "Lit/Écrit", "phi, sigma") Rel_D(mod_trans, data_struct, "Lit/Écrit", "LevelSet") Rel(mod_elec, lin_solver, "Résout Ax=b", "Laplacien Potentiel") Rel(mod_ns, lin_solver, "Résout Ax=b", "Projection Pression") Rel(io_interface, libpdi, "Calls", "C API") Rel_U(io_interface, data_struct, "Lit (Pointeurs)", "Champs bruts") @enduml