File size: 3,622 Bytes
0a7c6ee
 
9f20e46
 
0a7c6ee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9f20e46
0a7c6ee
 
 
9f20e46
 
 
 
 
 
0a7c6ee
 
 
9f20e46
0a7c6ee
 
 
9f20e46
 
 
 
 
 
0a7c6ee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9f20e46
 
 
 
 
 
 
 
 
 
0a7c6ee
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import { useState } from 'react';
import PoissonApp from './components/poisson/PoissonApp';
import DangVanApp from './components/dangvan/DangVanApp';
import ThermiqueApp from './components/thermique/ThermiqueApp';
import './index.css';

export default function App() {
    const [currentApp, setCurrentApp] = useState(null); // null = home, 'poisson' = Poisson app
    
    // Page d'accueil avec sélection des applications
    if (!currentApp) {
        return (
            <div className="home-page">
                <header className="home-header">
                    <h1>SimSite</h1>
                    <p>Plateforme de Simulation Numérique</p>
                </header>
                
                <main className="app-selector">
                    <div className="app-card" onClick={() => setCurrentApp('poisson')}>
                        <div className="app-icon">∇²</div>
                        <h2>Équation de Poisson</h2>
                        <p>Résolution de -Δu = f avec conditions aux limites de Dirichlet et Neumann</p>
                        <ul>
                            <li>Visualisation 3D interactive du maillage</li>
                            <li>Distribution du champ de solution</li>
                            <li>Animation de l'évolution temporelle</li>
                            <li>Paramètres configurables</li>
                        </ul>
                        <span className="app-tag">FEniCSx</span>
                    </div>
                    
                    <div className="app-card" onClick={() => setCurrentApp('thermique')}>
                        <div className="app-icon">∂T/∂t</div>
                        <h2>Diffusion Thermique</h2>
                        <p>Simulation de transfert de chaleur transitoire</p>
                        <ul>
                            <li>Visualisation 3D interactive du maillage</li>
                            <li>Distribution du champ de température</li>
                            <li>Animation de l'évolution temporelle</li>
                            <li>Paramètres configurables</li>
                        </ul>
                        <span className="app-tag">FEniCSx</span>
                    </div>
                    
                    <div className="app-card" onClick={() => setCurrentApp('dangvan')}>
                        <div className="app-icon">σ</div>
                        <h2>Critère de Dang Van</h2>
                        <p>Analyse de fatigue multiaxiale</p>
                        <ul>
                            <li>Calcul du critère de Dang Van</li>
                            <li>Visualisation graphique du diagramme</li>
                            <li>Différents types de chargement</li>
                            <li>Exemples prédéfinis</li>
                        </ul>
                        <span className="app-tag">NumPy</span>
                    </div>
                </main>
                
                <footer className="home-footer">
                    <p>Powered by FEniCSx, Three.js & React</p>
                </footer>
            </div>
        );
    }
    
    // Application Poisson
    if (currentApp === 'poisson') {
        return <PoissonApp onBack={() => setCurrentApp(null)} />;
    }
    
    // Application Diffusion Thermique
    if (currentApp === 'thermique') {
        return <ThermiqueApp onBack={() => setCurrentApp(null)} />;
    }
    
    // Application Dang Van
    if (currentApp === 'dangvan') {
        return <DangVanApp onBack={() => setCurrentApp(null)} />;
    }
    
    return null;
}