1128 lines
35 KiB
Plaintext
1128 lines
35 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Entropyk — Fluid Properties & Refrigerants Guide\n",
|
|
"\n",
|
|
"Ce notebook présente les **66+ fluides disponibles** dans Entropyk via CoolProp, incluant:\n",
|
|
"\n",
|
|
"- **HFC** : R134a, R410A, R407C, R32, R125, R143a, R152A, R22, etc.\n",
|
|
"- **HFO (Low-GWP)** : R1234yf, R1234ze(E), R1233zd(E), R1243zf, R1336mzz(E)\n",
|
|
"- **Alternatives** : R513A, R454B, R452B\n",
|
|
"- **Naturels** : R744 (CO2), R290 (Propane), R600a (Isobutane), R717 (Ammonia), R1270 (Propylene)\n",
|
|
"- **Autres** : Water, Air, Nitrogen, Oxygen, Helium, Hydrogen, etc."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import entropyk\n",
|
|
"import numpy as np\n",
|
|
"import pandas as pd\n",
|
|
"\n",
|
|
"pd.set_option('display.max_rows', 80)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 1. Types Physiques de Base\n",
|
|
"\n",
|
|
"Entropyk fournit des types forts pour les unités physiques avec conversion automatique."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Pression:\n",
|
|
" 1200000.00 Pa → 12.00 bar, 1200.0 kPa, 174.0 psi\n",
|
|
" 350000.00 Pa → 3.50 bar\n",
|
|
" 1034213.59 Pa → 10.34 bar\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Pression - plusieurs unités supportées\n",
|
|
"p1 = entropyk.Pressure(bar=12.0)\n",
|
|
"p2 = entropyk.Pressure(kpa=350.0)\n",
|
|
"p3 = entropyk.Pressure(psi=150.0)\n",
|
|
"\n",
|
|
"print(\"Pression:\")\n",
|
|
"print(f\" {p1} → {p1.to_bar():.2f} bar, {p1.to_kpa():.1f} kPa, {p1.to_psi():.1f} psi\")\n",
|
|
"print(f\" {p2} → {p2.to_bar():.2f} bar\")\n",
|
|
"print(f\" {p3} → {p3.to_bar():.2f} bar\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Température:\n",
|
|
" 318.15 K → 45.00°C, 113.00°F\n",
|
|
" 273.15 K → 0.00°C (point de congélation)\n",
|
|
" 310.93 K → 37.78°C, 310.93 K\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Température\n",
|
|
"t1 = entropyk.Temperature(celsius=45.0)\n",
|
|
"t2 = entropyk.Temperature(kelvin=273.15)\n",
|
|
"t3 = entropyk.Temperature(fahrenheit=100.0)\n",
|
|
"\n",
|
|
"print(\"Température:\")\n",
|
|
"print(f\" {t1} → {t1.to_celsius():.2f}°C, {t1.to_fahrenheit():.2f}°F\")\n",
|
|
"print(f\" {t2} → {t2.to_celsius():.2f}°C (point de congélation)\")\n",
|
|
"print(f\" {t3} → {t3.to_celsius():.2f}°C, {t3.to_kelvin():.2f} K\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Enthalpie:\n",
|
|
" 420000.00 J/kg → 420.0 kJ/kg\n",
|
|
" 250000.00 J/kg → 250.0 kJ/kg\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Enthalpie\n",
|
|
"h1 = entropyk.Enthalpy(kj_per_kg=420.0)\n",
|
|
"h2 = entropyk.Enthalpy(j_per_kg=250000.0)\n",
|
|
"\n",
|
|
"print(\"Enthalpie:\")\n",
|
|
"print(f\" {h1} → {h1.to_kj_per_kg():.1f} kJ/kg\")\n",
|
|
"print(f\" {h2} → {h2.to_kj_per_kg():.1f} kJ/kg\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Débit massique:\n",
|
|
" 0.050000 kg/s → 50.0 g/s\n",
|
|
" 0.050000 kg/s → 0.0500 kg/s\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Débit massique\n",
|
|
"m1 = entropyk.MassFlow(kg_per_s=0.05)\n",
|
|
"m2 = entropyk.MassFlow(g_per_s=50.0)\n",
|
|
"\n",
|
|
"print(\"Débit massique:\")\n",
|
|
"print(f\" {m1} → {m1.to_g_per_s():.1f} g/s\")\n",
|
|
"print(f\" {m2} → {m2.to_kg_per_s():.4f} kg/s\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 2. Cycle Simple avec Différents Fluides\n",
|
|
"\n",
|
|
"Construisons un cycle de réfrigération standard et comparons différents fluides."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def build_simple_cycle(fluid: str):\n",
|
|
" \"\"\"Construit un cycle de réfrigération simple avec le fluide spécifié.\"\"\"\n",
|
|
" system = entropyk.System()\n",
|
|
" \n",
|
|
" # Composants\n",
|
|
" comp = entropyk.Compressor(\n",
|
|
" speed_rpm=2900.0,\n",
|
|
" displacement=0.0001,\n",
|
|
" efficiency=0.85,\n",
|
|
" fluid=fluid\n",
|
|
" )\n",
|
|
" cond = entropyk.Condenser(ua=5000.0)\n",
|
|
" exv = entropyk.ExpansionValve(fluid=fluid, opening=0.8)\n",
|
|
" evap = entropyk.Evaporator(ua=3000.0)\n",
|
|
" \n",
|
|
" # Ajouter au système\n",
|
|
" comp_idx = system.add_component(comp)\n",
|
|
" cond_idx = system.add_component(cond)\n",
|
|
" exv_idx = system.add_component(exv)\n",
|
|
" evap_idx = system.add_component(evap)\n",
|
|
" \n",
|
|
" # Connecter en cycle\n",
|
|
" system.add_edge(comp_idx, cond_idx)\n",
|
|
" system.add_edge(cond_idx, exv_idx)\n",
|
|
" system.add_edge(exv_idx, evap_idx)\n",
|
|
" system.add_edge(evap_idx, comp_idx)\n",
|
|
" \n",
|
|
" system.finalize()\n",
|
|
" return system"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Cycles HFC classiques:\n",
|
|
"--------------------------------------------------\n",
|
|
" R134a → 8 variables d'état\n",
|
|
" R410A → 8 variables d'état\n",
|
|
" R407C → 8 variables d'état\n",
|
|
" R32 → 8 variables d'état\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Test avec différents fluides HFC classiques\n",
|
|
"hfc_fluids = [\"R134a\", \"R410A\", \"R407C\", \"R32\"]\n",
|
|
"\n",
|
|
"print(\"Cycles HFC classiques:\")\n",
|
|
"print(\"-\" * 50)\n",
|
|
"for fluid in hfc_fluids:\n",
|
|
" system = build_simple_cycle(fluid)\n",
|
|
" print(f\" {fluid:8s} → {system.state_vector_len} variables d'état\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 3. Fluides HFO / Low-GWP\n",
|
|
"\n",
|
|
"Les HFO sont les alternatives à faible GWP (<150) pour remplacer les HFC."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Fluide</th>\n",
|
|
" <th>Type</th>\n",
|
|
" <th>GWP</th>\n",
|
|
" <th>Usage</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>R1234yf</td>\n",
|
|
" <td>HFO</td>\n",
|
|
" <td><1</td>\n",
|
|
" <td>Remplacement R134a (automobile)</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>R1234ze(E)</td>\n",
|
|
" <td>HFO</td>\n",
|
|
" <td><1</td>\n",
|
|
" <td>Remplacement R134a (stationnaire)</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>R1233zd(E)</td>\n",
|
|
" <td>HCFO</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>Remplacement R123 (basse pression)</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>R1243zf</td>\n",
|
|
" <td>HFO</td>\n",
|
|
" <td><1</td>\n",
|
|
" <td>Nouveau fluide recherche</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>R1336mzz(E)</td>\n",
|
|
" <td>HFO</td>\n",
|
|
" <td><1</td>\n",
|
|
" <td>ORC, haute température</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>R513A</td>\n",
|
|
" <td>Mélange</td>\n",
|
|
" <td>631</td>\n",
|
|
" <td>R134a + R1234yf (56/44)</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>R454B</td>\n",
|
|
" <td>Mélange</td>\n",
|
|
" <td>146</td>\n",
|
|
" <td>R32 + R1234yf (50/50) - Opteon XL41</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>R452B</td>\n",
|
|
" <td>Mélange</td>\n",
|
|
" <td>676</td>\n",
|
|
" <td>R32 + R125 + R1234yf - Opteon XL55</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Fluide Type GWP Usage\n",
|
|
"0 R1234yf HFO <1 Remplacement R134a (automobile)\n",
|
|
"1 R1234ze(E) HFO <1 Remplacement R134a (stationnaire)\n",
|
|
"2 R1233zd(E) HCFO 1 Remplacement R123 (basse pression)\n",
|
|
"3 R1243zf HFO <1 Nouveau fluide recherche\n",
|
|
"4 R1336mzz(E) HFO <1 ORC, haute température\n",
|
|
"5 R513A Mélange 631 R134a + R1234yf (56/44)\n",
|
|
"6 R454B Mélange 146 R32 + R1234yf (50/50) - Opteon XL41\n",
|
|
"7 R452B Mélange 676 R32 + R125 + R1234yf - Opteon XL55"
|
|
]
|
|
},
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# HFO et alternatives Low-GWP\n",
|
|
"low_gwp_fluids = [\n",
|
|
" (\"R1234yf\", \"HFO\", \"<1\", \"Remplacement R134a (automobile)\"),\n",
|
|
" (\"R1234ze(E)\", \"HFO\", \"<1\", \"Remplacement R134a (stationnaire)\"),\n",
|
|
" (\"R1233zd(E)\", \"HCFO\", \"1\", \"Remplacement R123 (basse pression)\"),\n",
|
|
" (\"R1243zf\", \"HFO\", \"<1\", \"Nouveau fluide recherche\"),\n",
|
|
" (\"R1336mzz(E)\", \"HFO\", \"<1\", \"ORC, haute température\"),\n",
|
|
" (\"R513A\", \"Mélange\", \"631\", \"R134a + R1234yf (56/44)\"),\n",
|
|
" (\"R454B\", \"Mélange\", \"146\", \"R32 + R1234yf (50/50) - Opteon XL41\"),\n",
|
|
" (\"R452B\", \"Mélange\", \"676\", \"R32 + R125 + R1234yf - Opteon XL55\"),\n",
|
|
"]\n",
|
|
"\n",
|
|
"df_low_gwp = pd.DataFrame(low_gwp_fluids, columns=[\"Fluide\", \"Type\", \"GWP\", \"Usage\"])\n",
|
|
"df_low_gwp"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Cycles HFO / Low-GWP:\n",
|
|
"--------------------------------------------------\n",
|
|
" R1234yf → ✅ Supporté (8 vars)\n",
|
|
" R1234ze(E) → ✅ Supporté (8 vars)\n",
|
|
" R1233zd(E) → ✅ Supporté (8 vars)\n",
|
|
" R1243zf → ✅ Supporté (8 vars)\n",
|
|
" R1336mzz(E) → ✅ Supporté (8 vars)\n",
|
|
" R513A → ✅ Supporté (8 vars)\n",
|
|
" R454B → ✅ Supporté (8 vars)\n",
|
|
" R452B → ✅ Supporté (8 vars)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Test cycles HFO\n",
|
|
"print(\"Cycles HFO / Low-GWP:\")\n",
|
|
"print(\"-\" * 50)\n",
|
|
"for fluid, _, _, _ in low_gwp_fluids:\n",
|
|
" try:\n",
|
|
" system = build_simple_cycle(fluid)\n",
|
|
" print(f\" {fluid:12s} → ✅ Supporté ({system.state_vector_len} vars)\")\n",
|
|
" except Exception as e:\n",
|
|
" print(f\" {fluid:12s} → ❌ Erreur: {e}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 4. Fluides Naturels\n",
|
|
"\n",
|
|
"Les fluides naturels ont un GWP de ~0 et sont l'avenir de la réfrigération."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Code ASHRAE</th>\n",
|
|
" <th>Nom</th>\n",
|
|
" <th>GWP</th>\n",
|
|
" <th>Application</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>R744</td>\n",
|
|
" <td>CO2</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>Transcritique, commercial</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>R290</td>\n",
|
|
" <td>Propane</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>Climatisation, commercial</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>R600a</td>\n",
|
|
" <td>Isobutane</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>Domestique, commerc. faible charge</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>R600</td>\n",
|
|
" <td>Butane</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>Réfrigération basse température</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>R1270</td>\n",
|
|
" <td>Propylène</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>Climatisation industrielle</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>R717</td>\n",
|
|
" <td>Ammonia</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>Industriel, forte puissance</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Code ASHRAE Nom GWP Application\n",
|
|
"0 R744 CO2 1 Transcritique, commercial\n",
|
|
"1 R290 Propane 3 Climatisation, commercial\n",
|
|
"2 R600a Isobutane 3 Domestique, commerc. faible charge\n",
|
|
"3 R600 Butane 3 Réfrigération basse température\n",
|
|
"4 R1270 Propylène 3 Climatisation industrielle\n",
|
|
"5 R717 Ammonia 0 Industriel, forte puissance"
|
|
]
|
|
},
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Fluides naturels\n",
|
|
"natural_fluids = [\n",
|
|
" (\"R744\", \"CO2\", \"1\", \"Transcritique, commercial\"),\n",
|
|
" (\"R290\", \"Propane\", \"3\", \"Climatisation, commercial\"),\n",
|
|
" (\"R600a\", \"Isobutane\", \"3\", \"Domestique, commerc. faible charge\"),\n",
|
|
" (\"R600\", \"Butane\", \"3\", \"Réfrigération basse température\"),\n",
|
|
" (\"R1270\", \"Propylène\", \"3\", \"Climatisation industrielle\"),\n",
|
|
" (\"R717\", \"Ammonia\", \"0\", \"Industriel, forte puissance\"),\n",
|
|
"]\n",
|
|
"\n",
|
|
"df_natural = pd.DataFrame(natural_fluids, columns=[\"Code ASHRAE\", \"Nom\", \"GWP\", \"Application\"])\n",
|
|
"df_natural"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Cycles fluides naturels:\n",
|
|
"--------------------------------------------------\n",
|
|
" R744 (CO2 ) → ✅ Supporté\n",
|
|
" R290 (Propane ) → ✅ Supporté\n",
|
|
" R600a (Isobutane ) → ✅ Supporté\n",
|
|
" R600 (Butane ) → ✅ Supporté\n",
|
|
" R1270 (Propylène ) → ✅ Supporté\n",
|
|
" R717 (Ammonia ) → ✅ Supporté\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Test cycles fluides naturels\n",
|
|
"print(\"Cycles fluides naturels:\")\n",
|
|
"print(\"-\" * 50)\n",
|
|
"for code, name, _, app in natural_fluids:\n",
|
|
" try:\n",
|
|
" system = build_simple_cycle(code)\n",
|
|
" print(f\" {code:6s} ({name:10s}) → ✅ Supporté\")\n",
|
|
" except Exception as e:\n",
|
|
" print(f\" {code:6s} ({name:10s}) → ❌ Erreur: {e}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 5. Autres Réfrigérants (Classiques)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Total réfrigérants classiques: 26\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Autres réfrigérants disponibles\n",
|
|
"other_refrigerants = [\n",
|
|
" # CFC (obsolètes)\n",
|
|
" \"R11\", \"R12\", \"R13\", \"R14\",\n",
|
|
" # HCFC (phase-out)\n",
|
|
" \"R22\", \"R123\", \"R141b\", \"R142b\",\n",
|
|
" # HFC supplémentaires\n",
|
|
" \"R23\", \"R41\", \"R113\", \"R114\", \"R115\", \"R116\",\n",
|
|
" \"R124\", \"R143a\", \"R152A\", \"R218\", \"R227EA\",\n",
|
|
" \"R236EA\", \"R236FA\", \"R245fa\", \"R245ca\", \"R365MFC\",\n",
|
|
" \"RC318\", \"R507A\",\n",
|
|
"]\n",
|
|
"\n",
|
|
"print(f\"Total réfrigérants classiques: {len(other_refrigerants)}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 6. Fluides Non-Réfrigérants"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Nom CoolProp</th>\n",
|
|
" <th>Formule</th>\n",
|
|
" <th>Usage</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>Water</td>\n",
|
|
" <td>H2O</td>\n",
|
|
" <td>Fluide de travail, calibration</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>Air</td>\n",
|
|
" <td>N2+O2</td>\n",
|
|
" <td>Climatisation, psychrométrie</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>Nitrogen</td>\n",
|
|
" <td>N2</td>\n",
|
|
" <td>Cryogénie, inertage</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>Oxygen</td>\n",
|
|
" <td>O2</td>\n",
|
|
" <td>Applications spéciales</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>Argon</td>\n",
|
|
" <td>Ar</td>\n",
|
|
" <td>Cryogénie</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>Helium</td>\n",
|
|
" <td>He</td>\n",
|
|
" <td>Cryogénie très basse T</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>Hydrogen</td>\n",
|
|
" <td>H2</td>\n",
|
|
" <td>Énergie, cryogénie</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <td>Methane</td>\n",
|
|
" <td>CH4</td>\n",
|
|
" <td>GNL, pétrole</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <td>Ethane</td>\n",
|
|
" <td>C2H6</td>\n",
|
|
" <td>Pétrochimie</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <td>Ethylene</td>\n",
|
|
" <td>C2H4</td>\n",
|
|
" <td>Pétrochimie</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>10</th>\n",
|
|
" <td>Propane</td>\n",
|
|
" <td>C3H8</td>\n",
|
|
" <td>= R290</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>11</th>\n",
|
|
" <td>Butane</td>\n",
|
|
" <td>C4H10</td>\n",
|
|
" <td>= R600</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>12</th>\n",
|
|
" <td>Ethanol</td>\n",
|
|
" <td>C2H5OH</td>\n",
|
|
" <td>Solvant</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>13</th>\n",
|
|
" <td>Methanol</td>\n",
|
|
" <td>CH3OH</td>\n",
|
|
" <td>Solvant</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>14</th>\n",
|
|
" <td>Acetone</td>\n",
|
|
" <td>C3H6O</td>\n",
|
|
" <td>Solvant</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>15</th>\n",
|
|
" <td>Benzene</td>\n",
|
|
" <td>C6H6</td>\n",
|
|
" <td>Chimie</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>16</th>\n",
|
|
" <td>Toluene</td>\n",
|
|
" <td>C7H8</td>\n",
|
|
" <td>ORC</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Nom CoolProp Formule Usage\n",
|
|
"0 Water H2O Fluide de travail, calibration\n",
|
|
"1 Air N2+O2 Climatisation, psychrométrie\n",
|
|
"2 Nitrogen N2 Cryogénie, inertage\n",
|
|
"3 Oxygen O2 Applications spéciales\n",
|
|
"4 Argon Ar Cryogénie\n",
|
|
"5 Helium He Cryogénie très basse T\n",
|
|
"6 Hydrogen H2 Énergie, cryogénie\n",
|
|
"7 Methane CH4 GNL, pétrole\n",
|
|
"8 Ethane C2H6 Pétrochimie\n",
|
|
"9 Ethylene C2H4 Pétrochimie\n",
|
|
"10 Propane C3H8 = R290\n",
|
|
"11 Butane C4H10 = R600\n",
|
|
"12 Ethanol C2H5OH Solvant\n",
|
|
"13 Methanol CH3OH Solvant\n",
|
|
"14 Acetone C3H6O Solvant\n",
|
|
"15 Benzene C6H6 Chimie\n",
|
|
"16 Toluene C7H8 ORC"
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Fluides non-réfrigérants disponibles\n",
|
|
"other_fluids = [\n",
|
|
" (\"Water\", \"H2O\", \"Fluide de travail, calibration\"),\n",
|
|
" (\"Air\", \"N2+O2\", \"Climatisation, psychrométrie\"),\n",
|
|
" (\"Nitrogen\", \"N2\", \"Cryogénie, inertage\"),\n",
|
|
" (\"Oxygen\", \"O2\", \"Applications spéciales\"),\n",
|
|
" (\"Argon\", \"Ar\", \"Cryogénie\"),\n",
|
|
" (\"Helium\", \"He\", \"Cryogénie très basse T\"),\n",
|
|
" (\"Hydrogen\", \"H2\", \"Énergie, cryogénie\"),\n",
|
|
" (\"Methane\", \"CH4\", \"GNL, pétrole\"),\n",
|
|
" (\"Ethane\", \"C2H6\", \"Pétrochimie\"),\n",
|
|
" (\"Ethylene\", \"C2H4\", \"Pétrochimie\"),\n",
|
|
" (\"Propane\", \"C3H8\", \"= R290\"),\n",
|
|
" (\"Butane\", \"C4H10\", \"= R600\"),\n",
|
|
" (\"Ethanol\", \"C2H5OH\",\"Solvant\"),\n",
|
|
" (\"Methanol\", \"CH3OH\", \"Solvant\"),\n",
|
|
" (\"Acetone\", \"C3H6O\", \"Solvant\"),\n",
|
|
" (\"Benzene\", \"C6H6\", \"Chimie\"),\n",
|
|
" (\"Toluene\", \"C7H8\", \"ORC\"),\n",
|
|
"]\n",
|
|
"\n",
|
|
"df_other = pd.DataFrame(other_fluids, columns=[\"Nom CoolProp\", \"Formule\", \"Usage\"])\n",
|
|
"df_other"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 7. Résumé Complet des Fluides Disponibles"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"=== RÉSUMÉ DES FLUIDES DISPONIBLES ===\n",
|
|
"Total: 61+ fluides\n",
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Catégorie</th>\n",
|
|
" <th>Exemples</th>\n",
|
|
" <th>Nombre</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>HFC Classiques</td>\n",
|
|
" <td>R134a, R410A, R407C, R32, R125</td>\n",
|
|
" <td>5</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>HFO / Low-GWP</td>\n",
|
|
" <td>R1234yf, R1234ze(E), R1233zd(E)</td>\n",
|
|
" <td>6</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>Alternatives (Mélanges)</td>\n",
|
|
" <td>R513A, R454B, R452B, R507A</td>\n",
|
|
" <td>4</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>Fluides Naturels</td>\n",
|
|
" <td>R744 (CO2), R290, R600a, R717</td>\n",
|
|
" <td>6</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>CFC/HCFC (Obsolètes)</td>\n",
|
|
" <td>R11, R12, R22, R123, R141b</td>\n",
|
|
" <td>8</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>Autres HFC</td>\n",
|
|
" <td>R143a, R152A, R227EA, R245fa</td>\n",
|
|
" <td>15</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <td>Non-Réfrigérants</td>\n",
|
|
" <td>Water, Air, Nitrogen, Helium</td>\n",
|
|
" <td>17</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Catégorie Exemples Nombre\n",
|
|
"0 HFC Classiques R134a, R410A, R407C, R32, R125 5\n",
|
|
"1 HFO / Low-GWP R1234yf, R1234ze(E), R1233zd(E) 6\n",
|
|
"2 Alternatives (Mélanges) R513A, R454B, R452B, R507A 4\n",
|
|
"3 Fluides Naturels R744 (CO2), R290, R600a, R717 6\n",
|
|
"4 CFC/HCFC (Obsolètes) R11, R12, R22, R123, R141b 8\n",
|
|
"5 Autres HFC R143a, R152A, R227EA, R245fa 15\n",
|
|
"6 Non-Réfrigérants Water, Air, Nitrogen, Helium 17"
|
|
]
|
|
},
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Catégorisation complète\n",
|
|
"fluid_summary = {\n",
|
|
" \"Catégorie\": [\n",
|
|
" \"HFC Classiques\",\n",
|
|
" \"HFO / Low-GWP\",\n",
|
|
" \"Alternatives (Mélanges)\",\n",
|
|
" \"Fluides Naturels\",\n",
|
|
" \"CFC/HCFC (Obsolètes)\",\n",
|
|
" \"Autres HFC\",\n",
|
|
" \"Non-Réfrigérants\",\n",
|
|
" ],\n",
|
|
" \"Exemples\": [\n",
|
|
" \"R134a, R410A, R407C, R32, R125\",\n",
|
|
" \"R1234yf, R1234ze(E), R1233zd(E)\",\n",
|
|
" \"R513A, R454B, R452B, R507A\",\n",
|
|
" \"R744 (CO2), R290, R600a, R717\",\n",
|
|
" \"R11, R12, R22, R123, R141b\",\n",
|
|
" \"R143a, R152A, R227EA, R245fa\",\n",
|
|
" \"Water, Air, Nitrogen, Helium\",\n",
|
|
" ],\n",
|
|
" \"Nombre\": [5, 6, 4, 6, 8, 15, 17],\n",
|
|
"}\n",
|
|
"\n",
|
|
"df_summary = pd.DataFrame(fluid_summary)\n",
|
|
"print(\"\\n=== RÉSUMÉ DES FLUIDES DISPONIBLES ===\")\n",
|
|
"print(f\"Total: {sum(fluid_summary['Nombre'])}+ fluides\\n\")\n",
|
|
"df_summary"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 8. Exemple: Cycle CO2 Transcritique\n",
|
|
"\n",
|
|
"Le CO2 (R744) nécessite un traitement spécial car le point critique est à 31°C seulement."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"=== Cycle CO2 Transcritique (R744) ===\n",
|
|
"\n",
|
|
"Propriétés du CO2:\n",
|
|
" Point critique: 31.0°C, 73.8 bar\n",
|
|
" GWP: 1\n",
|
|
" Applications: Supermarchés, transports, chaleur industrielle\n",
|
|
"\n",
|
|
"Système créé: 8 variables d'état\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Cycle CO2 transcritique\n",
|
|
"print(\"=== Cycle CO2 Transcritique (R744) ===\")\n",
|
|
"print(\"\\nPropriétés du CO2:\")\n",
|
|
"print(\" Point critique: 31.0°C, 73.8 bar\")\n",
|
|
"print(\" GWP: 1\")\n",
|
|
"print(\" Applications: Supermarchés, transports, chaleur industrielle\")\n",
|
|
"\n",
|
|
"co2_system = build_simple_cycle(\"R744\")\n",
|
|
"print(f\"\\nSystème créé: {co2_system.state_vector_len} variables d'état\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 9. Exemple: Cycle Ammoniac (R717)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"=== Cycle Ammoniac (R717) ===\n",
|
|
"\n",
|
|
"Propriétés de l'Ammoniac:\n",
|
|
" Point critique: 132.4°C, 113.3 bar\n",
|
|
" GWP: 0 (naturel)\n",
|
|
" haute efficacité, toxique mais détectable\n",
|
|
" Applications: Industrie agroalimentaire, patinoires, entrepôts\n",
|
|
"\n",
|
|
"Système créé: 8 variables d'état\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Cycle Ammoniac\n",
|
|
"print(\"=== Cycle Ammoniac (R717) ===\")\n",
|
|
"print(\"\\nPropriétés de l'Ammoniac:\")\n",
|
|
"print(\" Point critique: 132.4°C, 113.3 bar\")\n",
|
|
"print(\" GWP: 0 (naturel)\")\n",
|
|
"print(\" haute efficacité, toxique mais détectable\")\n",
|
|
"print(\" Applications: Industrie agroalimentaire, patinoires, entrepôts\")\n",
|
|
"\n",
|
|
"nh3_system = build_simple_cycle(\"R717\")\n",
|
|
"print(f\"\\nSystème créé: {nh3_system.state_vector_len} variables d'état\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 10. Exemple: Cycle Propane (R290)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"=== Cycle Propane (R290) ===\n",
|
|
"\n",
|
|
"Propriétés du Propane:\n",
|
|
" Point critique: 96.7°C, 42.5 bar\n",
|
|
" GWP: 3 (très bas)\n",
|
|
" Excellentes propriétés thermodynamiques\n",
|
|
" Inflammable (A3)\n",
|
|
" Applications: Climatisation, pompes à chaleur, commercial\n",
|
|
"\n",
|
|
"Système créé: 8 variables d'état\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Cycle Propane\n",
|
|
"print(\"=== Cycle Propane (R290) ===\")\n",
|
|
"print(\"\\nPropriétés du Propane:\")\n",
|
|
"print(\" Point critique: 96.7°C, 42.5 bar\")\n",
|
|
"print(\" GWP: 3 (très bas)\")\n",
|
|
"print(\" Excellentes propriétés thermodynamiques\")\n",
|
|
"print(\" Inflammable (A3)\")\n",
|
|
"print(\" Applications: Climatisation, pompes à chaleur, commercial\")\n",
|
|
"\n",
|
|
"r290_system = build_simple_cycle(\"R290\")\n",
|
|
"print(f\"\\nSystème créé: {r290_system.state_vector_len} variables d'état\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 11. Configuration du Solveur"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Solver configuré: FallbackConfig(newton=NewtonConfig(max_iter=200, tol=1.0e-6, line_search=true), picard=PicardConfig(max_iter=500, tol=1.0e-4, relax=0.50))\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Exemple de configuration du solveur pour résolution\n",
|
|
"system = build_simple_cycle(\"R134a\")\n",
|
|
"\n",
|
|
"# Newton-Raphson avec recherche linéaire\n",
|
|
"newton = entropyk.NewtonConfig(\n",
|
|
" max_iterations=200,\n",
|
|
" tolerance=1e-6,\n",
|
|
" line_search=True,\n",
|
|
" timeout_ms=10000\n",
|
|
")\n",
|
|
"\n",
|
|
"# Picard pour problèmes difficiles\n",
|
|
"picard = entropyk.PicardConfig(\n",
|
|
" max_iterations=500,\n",
|
|
" tolerance=1e-4,\n",
|
|
" relaxation=0.5\n",
|
|
")\n",
|
|
"\n",
|
|
"# Fallback: Newton puis Picard\n",
|
|
"fallback = entropyk.FallbackConfig(newton=newton, picard=picard)\n",
|
|
"\n",
|
|
"print(f\"Solver configuré: {fallback}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## 12. Conclusion\n",
|
|
"\n",
|
|
"### Fluides disponibles par application:\n",
|
|
"\n",
|
|
"| Application | Fluide recommandé | Alternatives |\n",
|
|
"|-------------|-------------------|-------------|\n",
|
|
"| Climatisation résidentielle | R32, R290 | R410A, R454B |\n",
|
|
"| Climatisation commerciale | R410A, R32 | R454B, R290 |\n",
|
|
"| Réfrigération commerciale | R404A, R744 | R455A, R290 |\n",
|
|
"| Froid industriel | R717, R744 | R290 |\n",
|
|
"| Domestique | R600a, R290 | R134a |\n",
|
|
"| Automobile | R1234yf | R134a, R744 |\n",
|
|
"| ORC haute température | R1336mzz(E), Toluene | R245fa |"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "entropyk",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.13.11"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|