File size: 3,213 Bytes
3edcde7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 gradio as gr

def definir_criteres(D, R_prime, A):
    return D, R_prime, A

def calculer_rapport_CE(R_prime, sigma_c, G):
    CE = (R_prime / (0.50 * sigma_c)) + 0.5
    return CE

def determiner_dosage_ciment(CE, A):
    C = 400  # Placeholder, replace with actual calculation
    return C

def ajuster_dosage_eau(C, CE, D):
    E = C / CE
    correction = {5: 0.15, 10: 0.09, 16: 0.04, 25: 0, 40: -0.04, 63: -0.08, 100: -0.12}
    E *= (1 + correction.get(D, 0))
    return E

def definir_courbe_granulaire(D, K, Ks, Kp):
    Y = 50 - K + Ks + Kp
    X = D / 2 if D <= 40 else (5 + D) / 2
    return X, Y

def determiner_proportions_granulats(granulats, courbe_reference):
    proportions = {}
    for granulat in granulats:
        proportions[granulat] = 0.5  # Placeholder
    return proportions

def calculer_masse_granulats(gamma, Vc, Vg, proportions, densites):
    masses = {}
    for granulat, proportion in proportions.items():
        volume = Vg * proportion
        masses[granulat] = volume * densites[granulat]
    return masses

def calculer_composition(D, R_prime, A, sigma_c, G, K, Ks, Kp, densite_sable, densite_gravier_5_20, densite_gravier_20_50):
    densites = {'sable': densite_sable, 'gravier_5_20': densite_gravier_5_20, 'gravier_20_50': densite_gravier_20_50}
    
    CE = calculer_rapport_CE(R_prime, sigma_c, G)
    C = determiner_dosage_ciment(CE, A)
    E = ajuster_dosage_eau(C, CE, D)
    X, Y = definir_courbe_granulaire(D, K, Ks, Kp)
    
    granulats = {'sable': {}, 'gravier_5_20': {}, 'gravier_20_50': {}}
    courbe_reference = (X, Y)
    proportions = determiner_proportions_granulats(granulats, courbe_reference)
    
    Vc = C / 3.1
    gamma = 0.835
    Vg = 835 - Vc
    masses = calculer_masse_granulats(gamma, Vc, Vg, proportions, densites)
    
    return f"Dosage en ciment: {C} kg/m³", f"Dosage en eau: {E} L/m³", f"Masses des granulats: {masses}"

# Interface Gradio
interface = gr.Interface(
    fn=calculer_composition,
    inputs=[
        gr.Number(value=40, label="Dimension maximale des granulats (D)"),
        gr.Number(value=35, label="Résistance souhaitée (R_prime)"),
        gr.Number(value=10, label="Ouvrabilité désirée (A)"),
        gr.Number(value=45, label="Résistance moyenne réelle du ciment (sigma_c)"),
        gr.Number(value=0.55, label="Coefficient granulaire (G)"),
        gr.Number(value=-4, label="Coefficient de correction (K)"),
        gr.Number(value=2.8, label="Module de finesse du sable (Ks)"),
        gr.Number(value=5, label="Coefficient de correction pompabilité (Kp)"),
        gr.Number(value=2.60, label="Densité du sable (kg/L)"),
        gr.Number(value=2.55, label="Densité du gravier 5/20 (kg/L)"),
        gr.Number(value=2.55, label="Densité du gravier 20/50 (kg/L)")
    ],
    outputs=[
        gr.Textbox(label="Dosage en ciment (kg/m³)"),
        gr.Textbox(label="Dosage en eau (L/m³)"),
        gr.Textbox(label="Masses des granulats")
    ],
    title="Calcul de la Composition Optimale du Béton (Méthode Dreux-Gorisse)",
    description="Entrez les paramètres nécessaires pour calculer la composition optimale du béton."
)

if __name__ == "__main__":
    interface.launch()