Moteur de simulation thermique RC — Synoptique détaillé

Modèle résistance-capacité · 8 760 itérations horaires · meteo.js v6 · simulation.js v20 · resultats.js v19 · mesures.js v51 — Aide Clim EHPAD · ANAP

☀️ CALCUL MÉTÉO — meteo.js (par heure)
1
Altitude solaire astronomique
sinAlt = sin(lat)·sin(decl) + cos(lat)·cos(decl)·cos(ha)
decl = 23.45·sin(2π/365·(doy−81))
2
GHI ciel clair (Ineichen simplifié)
GHI_cs = 1361 × 0.78 × sinAlt
3
Facteur nuageux (Kasten-Czeplak)
cf = 1 − 0.75 × cc^3.4
GHI_mod = GHI_cs × cf · si API plausible → GHI_api
4
Décomposition Erbs (indice clarté Kt)
Kt = GHI/GHI_cs · fd = f(Kt)
dif = GHI·fd · dir = GHI−dif
Indépendant des champs API direct/diffuse (souvent nuls ERA5-Land)
🏗️ Bâtiment
  • Parois : U, S, orient., masse
  • Vitrages : U, g (fs), surface
  • Volume, SdO (m²)
  • Masse thermique (tonnes)
  • Époque (pre_rt → re2020)
  • VMC : débit (m³/h)
  • Occultation : mode, mois, usage %
  • ach_inf_base : tabl. époque v16
  • ach_inf_override : saisie utilisateur
⚙️ Options & mesures
  • tConfort : 28–32 °C (slider)
  • avecClim : bool
  • Latitude EHPAD
  • dlt2050 : scénario CORDEX
  • vmc_df : bool — bypass + échangeur v16
  • vmc_df_cool : bool — batterie froide
  • ouvertures_nuit : bool — aération nocturne v20
  • minHeuresDep : 1–24 h (défaut 4h) v20
  • Aide contextuelle ⓘ sur chaque paramètre v19
⟳ BOUCLE HORAIRE — 8 760 itérations (j = 0..364, h = 0..23)
Pré-calculs (avant boucle)
ach_inf = ach_inf_override ?? ach_inf_base ?? f(époque) : pre_rt→0.60 · rt2000→0.25 · re2020→0.06 edeg = masse × 840 / 3 600 000 (kWh/K) edegEff = edeg × 0.72 (fraction effective RI/(RI+RC)) depE[paroi][25] = 0 (buffer déphasage circulaire) tInt₀ = 20 °C
A
Position du soleil
sunVector(j, h, lat) → alt, az
Déclinaison + angle horaire → altitude & azimut solaires
Géométrie solaire astronomique
B
Apports solaires par paroi
f = wallFactor(alt, az, orient, tilt)
Vitrage :
 directTilt = dir × f / sinAlt
 diffuseTilt = dif × 0.5  ·  reflected = (dir+dif) × 0.10
 fsEff = g×(1−occ%) + occ_g×occ%  si mois occultation
 pu = (directTilt + diffuseTilt + reflected) × fsEff × S [W]
Opaque : déphasage buffer circulaire 25 h → solarGain [kW]
dir & dif séparés · buffer déphasage lourde
C
Apports conductifs
condGain = Σ U × S × (Te_ref − Ti) [kW]
Vitrages : U = 1/R_vit (Ug ISO 10077)
Murs/toit : U = 1/(R + 0.13 + 0.04)
Plancher (i=180°) : Te_ref = 12 + (Te−15)×0.10  (température sol, pas air extérieur)
Sol ~12 °C stable · pas Te extérieure
D
Ventilation / infiltrations v16
Débits parallèles (m³/h) :
debit_inf = ach_inf × Vol  ·  debit_nv (ouvertures)  ·  debit_fc (free cooling)
Infiltrations + naturelle
ACH_NV jour : 0.8 vol/h (fenêtres entrebâillées)
ACH_NV nuit : 2.5 vol/h si ouvertures_nuit && Te < Ti−1°C v20
Si ouvertures_nuit=false : infiltrations seules (ITE+châssis peut aggraver la surchauffe)
ACH_FC : +1.5 vol/h nuit si free_cooling && Te < Ti−2°C
VMC double flux standard (vmc_df)
Hiver : échangeur η = 75 % → vmc_factor = 0.25
Été (mai–sept), Te < Ti : bypass complet → vmc_factor = 1.0
Surventilation nocturne : 22h–7h, Te < Ti−1°C → vmc_factor = 2.0
(purge thermique accélérée — pilotage différentiel T°)
VMC DF rafraîchie (vmc_df_cool)
Batterie froide : T_soufflage ≥ 18°C (marge/rosée ~12-14°C, sans condensation)
 si Te > 18°C : te_vmc = 18°C, kWh_froid += 0.34 × debit × (Te−18) / 1000
 si Te ≤ 18°C : batterie inactive → free cooling pur
Surventilation nocturne : 22h–7h, Te < Ti−1°C ET Te ≤ 18°C → vmc_factor = 2.0

Bilan :
ventGain = (0.34 × debit_vmc × vmc_factor × (te_vmc − Ti) + 0.34 × debit_other × (Te − Ti)) / 1000 [kW]
Perméabilité par époque · VMC DF avec bypass/échangeur/batterie · purge nocturne ×2
E
Apports internes
p_int = 9 W/m² (7h–22h) · 3 W/m² (22h–7h)
internalGain = p_int × SdO / 1 000 [kW]
Résidents âgés + équipements médicaux + éclairage
Profil jour/nuit EHPAD
F
Mise à jour Ti — cœur RC
dT = (solarGain + condGain + ventGain + internalGain) / edegEff
tInt += dT · Δt  —  clamp(−20 °C … 60 °C)
edegEff = masse × 840 J/kg·K / 3,6 MJ · 0,72
Capacité thermique effective — modèle RC
G
Climatisation active (conditionnel) v20
consigne = tConfort − 2°C  (ex. 26°C si seuil=28°C)
si avecClim && tInt > tConfort−2 :
excédent = (tInt − (tConfort−2)) × edegEff [kWh]
climKwhFroid += excédent  (charge frigorigène réelle)
tInt ← tConfort−2  (thermostat)
La clim s'enclenche 2°C sous le seuil de dépassement → charge non nulle même pour bâtiment modérément surchauffé
VMC DF rafraîchie : climKwhFroid accumulé en D (batterie seule, pas de thermostat)
kWh froid → ÷ COP/EER → kWh élec
H
Statistiques & compteurs horaires v20
si tInt > tConfort → hDep++ && hDepDay[jj]++
tiMaxDay[j] = max(tiMaxDay[j], tInt)
tiDays[j] += tInt / 24  ·  teDays[j] += Te / 24
Cumuls mensuels · stats annuelles
Après boucle :
joursDep = hDepDay.filter(h ≥ minHeuresDep).length
Un jour compte seulement si ≥ minHeuresDep heures dépassent tConfort (défaut 4h)
Profils Ti/Te · hDepDay[365] pour filtrage minHeuresDep
📊 Indicateurs clés
  • joursDep : jours avec ≥ minHeuresDep h > tConfort v20
  • hDepDay[365] : heures/jour > tConfort v20
  • tiMax : pic Ti annuel (°C)
  • climKwhFroid : charge froid (kWh) à consigne tConfort−2°C v20
  • hDep : total heures dépassement
📈 Courbes temporelles
  • tiDays[365] — Ti moyen/j
  • teDays[365] — Te moyen/j
  • tiMaxDay[365] — Ti max/j
  • teMinDay / teMaxDay
  • tiAnnMoy / teAnnMoy
🔧 Vers Mesures (étape 5)
  • Δ joursDep vs base (filtré minHeuresDep)
  • Δ climKwhFroid vs base
  • Coût élec : climKwhFroid ÷ EER × prix_kWh v20
  • Fallback si climKwhFroid≈0 : p_kW×700h÷EER (estimation dimensionnement) v20
  • Coût investissement HT/TTC (base BT avril 2026)
  • climKwhFroid VMC DF rafraîchie : kWh batterie v16
  • ach_inf résultante : synergie ITE + châssis → ×0.35
🔑 Perméabilité à l'air
  • Époque → ach_inf_base (vol/h)
  • Châssis seul : base × 0.65
  • Triple vitrage seul : base × 0.55
  • ITE + châssis : base × 0.35
  • Saisie libre étape 6 (override)
Météo / Solaire
Flux conductif
Ventilation
Gains internes
Modèle RC (Ti)
Clim. conditionnelle
Sorties / stats
Nouveauté v16/v20