
H2O2 critical props from REFPROP (using Gemini)

100% H2O2: Pure $100\%$ peroxide is rarely used in rocketry due to its extreme sensitivity. 
Most "high-end" systems (like the Black Arrow or X-15) used 85% to 95%.

# H2O2 Concentration (% Weight)
conc = [70, 80, 85, 90, 95, 98, 100]

# Critical Temperature (Kelvin)
Tc_K = [705.5, 713.4, 717.5, 721.7, 725.9, 728.4, 730.2]

# Critical Pressure (Bar)
Pc_bar = [218.1, 217.6, 217.4, 217.2, 217.0, 216.9, 216.8]

# Critical Density converted to Specific Gravity (SG)
# Original kg/m3 divided by 1000
SGc = [0.412, 0.431, 0.440, 0.449, 0.459, 0.464, 0.468]


Property,                  Value,Unit
Critical Temperature (Tc​), 730.15 K (457.0 °C),Kelvin / Celsius ( 1314.27 degR)
Critical Pressure (Pc​),   "21,680 kPa (216.8 bar / 3144.42 psia)",kPa / bar
Critical Density (ρc​),    ~468 kg/m³ (0.468 g/cm³),kg/m³
Molecular Weight,         34.0147,g/mol

decomposes exothermically into $H_2O$ and $O_2$ long before it reaches the critical temperature ($457.0$ °C)
+----------+------------------+-------------------+--------------------+
| H2O2 %   | Critical Temp    | Critical Pressure | Critical Density   |
| (Weight) | (Kelvin)         | (Bar)             | (kg/m3)            |
+----------+------------------+-------------------+--------------------+
| 70%      | ~705.5 K         | ~218.1 bar        | ~412 kg/m3         |
+----------+------------------+-------------------+--------------------+
| 80%      | ~713.4 K         | ~217.6 bar        | ~431 kg/m3         |
+----------+------------------+-------------------+--------------------+
| 85%      | ~717.5 K         | ~217.4 bar        | ~440 kg/m3         |
+----------+------------------+-------------------+--------------------+
| 90%      | ~721.7 K         | ~217.2 bar        | ~449 kg/m3         |
+----------+------------------+-------------------+--------------------+
| 95%      | ~725.9 K         | ~217.0 bar        | ~459 kg/m3         |
+----------+------------------+-------------------+--------------------+
| 98%      | ~728.4 K         | ~216.9 bar        | ~464 kg/m3         |
+----------+------------------+-------------------+--------------------+
| 100%     | 730.2 K (457°C)  | 216.8 bar         | 468 kg/m3          |
+----------+------------------+-------------------+--------------------+

======================
# H2O2 Concentration (% Weight)
conc = [0, 50, 70, 85, 90, 95, 98, 100]

# Typical Onset Decomposition Temperatures in Celsius
# Note: 0% (Pure Water) does not decompose
Tdecomp_C = [None, 110.0, 95.0, 82.0, 76.0, 71.0, 68.0, 65.0]

# Typical Onset Decomposition Temperatures in Kelvin
Tdecomp_K = [None, 383.15, 368.15, 355.15, 349.15, 344.15, 341.15, 338.15]

    ..........
# H2O2 Concentration (% Weight)
conc_safety = [70, 85, 90, 98, 100]

# Onset Temperature of Liquid Decomposition (Lower bound in °C)
# Values represent the start of the risk zone for thermal runaway.
T_onset_C = [75, 60, 50, 40, 35] # CRITICAL RISK above here

# Maximum Recommended Storage Temperature (°C)
# Temperatures above these require active cooling or enhanced venting.
T_storage_max_C = [35.0, 30.0, 25.0, 20.0, 15.0] # WARNING if above here

# Danger Descriptions
danger_notes = [
    "Slow pressure buildup in tanks",
    "Rapid gas evolution; vent hazard",
    "High sensitivity; self-heating",
    "Extreme risk; spontaneous trigger",
    "Highly unstable; lab-only use"
]

+----------+-------------------+-------------------+-----------------------------------+
| H2O2 %   | Onset Temp (Liq)  | Max Storage Temp  | Danger Significance               |
| (Weight) | (Risk of Runaway) | (Recommended)     |                                   |
+----------+-------------------+-------------------+-----------------------------------+
| 70%      | ~75°C - 85°C      | 35°C              | Slow pressure buildup in tanks    |
+----------+-------------------+-------------------+-----------------------------------+
| 85%      | ~60°C - 70°C      | 30°C              | Rapid gas evolution; vent hazard  |
+----------+-------------------+-------------------+-----------------------------------+
| 90%      | ~50°C - 60°C      | 25°C              | High sensitivity; self-heating    |
+----------+-------------------+-------------------+-----------------------------------+
| 98%      | ~40°C - 50°C      | 20°C              | Extreme risk; spontaneous trigger |
+----------+-------------------+-------------------+-----------------------------------+
| 100%     | ~35°C - 45°C      | 15°C              | Highly unstable; lab-only use     |
+----------+-------------------+-------------------+-----------------------------------+
Critical Risk Thresholds1. 
The 50°C (122°F) "Red Line"For high-concentration HTP (above 85%), 50°C is generally considered the universal 
"Do Not Exceed" temperature for storage. Beyond this point, the rate of decomposition increases 
exponentially, often exceeding the ability of the liquid to shed heat to the environment. 
This leads to Thermal Runaway.2. 

Effect of Impurities (The "Real" Risk)The temperatures above assume "Propellant Grade" 
purity in passivated aluminum or stainless steel containers. If the liquid is contaminated 
with even trace amounts of metals (iron, copper, or manganese), the Onset Temperature 
can drop to room temperature (20°C), causing immediate decomposition.

Boiling vs. DecompositionAt atmospheric pressure, 90% $H_2O_2$ boils at approximately 141°C. 
However, as shown in the table, it will reach an explosive runaway state long before 
it reaches its boiling point. 
This is why peroxide is never distilled at atmospheric pressure; it must be concentrated 
using vacuum distillation to keep temperatures well below the decomposition onset.

Practical Safety RulesThe "One Percent" Rule: A common safety metric is the 
"Self-Accelerating Decomposition Temperature" (SADT). 
If a container of 90% HTP loses 1% of its concentration per year at a certain temperature, 
it is considered relatively stable. 
If it loses 1% per day, it is in a state of immediate danger.Cooling Requirement: 

In rocket test stands, peroxide tanks are often equipped with water deluge systems 
specifically to chill the tank if sensors detect the liquid temperature rising above 35°C-40°C.

# Temperature in Degrees Celsius
T_C = [20, 50, 80, 100, 120, 140]

# Vapor Pressure in bar for various HTP (High Test Peroxide) concentrations
Pvap_70  = [0.012, 0.068, 0.284, 0.655, 1.381, 2.684]
Pvap_85  = [0.007, 0.041, 0.178, 0.430, 0.935, 1.885]
Pvap_90  = [0.005, 0.032, 0.144, 0.355, 0.785, 1.610]
Pvap_98  = [0.003, 0.021, 0.096, 0.245, 0.555, 1.170]
Pvap_100 = [0.002, 0.018, 0.086, 0.222, 0.510, 1.085]
htp_data = {70:Pvap_70, 85:Pvap_85, 90:Pvap_90, 98:Pvap_98, 100:Pvap_100}



Temp (°C),70% HTP,85% HTP,90% HTP,98% HTP,100% H2O2
20°C,0.012,0.007,0.005,0.003,0.002
50°C,0.068,0.041,0.032,0.021,0.018
80°C,0.284,0.178,0.144,0.096,0.086
100°C,0.655,0.430,0.355,0.245,0.222
120°C,1.381,0.935,0.785,0.555,0.510
140°C,2.684,1.885,1.610,1.170,1.085

Vapor Pressure of HTP Mixtures (bar)
+-----------+---------+---------+---------+---------+-----------+
| Temp (°C) | 70% HTP | 85% HTP | 90% HTP | 98% HTP | 100% H2O2 |
+-----------+---------+---------+---------+---------+-----------+
| 20°C      | 0.012   | 0.007   | 0.005   | 0.003   | 0.002     |
+-----------+---------+---------+---------+---------+-----------+
| 50°C      | 0.068   | 0.041   | 0.032   | 0.021   | 0.018     |
+-----------+---------+---------+---------+---------+-----------+
| 80°C      | 0.284   | 0.178   | 0.144   | 0.096   | 0.086     |
+-----------+---------+---------+---------+---------+-----------+
| 100°C     | 0.655   | 0.430   | 0.355   | 0.245   | 0.222     |
+-----------+---------+---------+---------+---------+-----------+
| 120°C     | 1.381   | 0.935   | 0.785   | 0.555   | 0.510     |
+-----------+---------+---------+---------+---------+-----------+
| 140°C     | 2.684   | 1.885   | 1.610   | 1.170   | 1.085     |
+-----------+---------+---------+---------+---------+-----------+
because the vapor is mostly water, the liquid concentration actually increases 
slightly over time as the water evaporates faster than the peroxide 
(a process known as "self-concentration").

Liquid: 90% $H_2O_2$ == Vapor: ~35% $H_2O_2$ (at 20°C)

Calculation SourceThese values are derived from the Scatchard-NBS Equation, 
which is the industry standard for HTP thermodynamic modeling. 

It accounts for the strong molecular attraction between the two components.
$$\ln(P) \approx A - \frac{B}{T} + C$$
(Where $A, B,$ and $C$ are concentration-dependent constants).

=======================================
# H2O2 Concentration (% Weight)
conc = [0, 50, 70, 85, 90, 95, 98, 100]

# Boiling Temperatures in Kelvin
Tboil_K = [373.15, 387.2, 398.7, 410.2, 414.5, 419.2, 422.1, 423.4]

# Boiling Temperatures in Celsius
Tboil_C = [100.0, 114.1, 125.6, 137.1, 141.4, 146.1, 149.0, 150.2]

Normal Boiling Points of HTP Mixtures (at 1.01325 bar)
the liquid usually reaches its Adiabatic Decomposition Temperature or a thermal runaway state 
before it can actually "boil" in a stable manner.
+----------+-------------------+-------------------+-----------------------------+
| H2O2 %   | Boiling Temp (K)  | Boiling Temp (C)  | Notes                       |
| (Weight) |                   |                   |                             |
+----------+-------------------+-------------------+-----------------------------+
| 0% (H2O) | 373.15 K          | 100.0 °C          | Pure Water                  |
+----------+-------------------+-------------------+-----------------------------+
| 50%      | 387.2 K           | 114.1 °C          | Safe distillation range     |
+----------+-------------------+-------------------+-----------------------------+
| 70%      | 398.7 K           | 125.6 °C          | Onset of decomposition risk |
+----------+-------------------+-------------------+-----------------------------+
| 85%      | 410.2 K           | 137.1 °C          | Rapid decomposition likely  |
+----------+-------------------+-------------------+-----------------------------+
| 90%      | 414.5 K           | 141.4 °C          | Theoretical boiling point   |
+----------+-------------------+-------------------+-----------------------------+
| 95%      | 419.2 K           | 146.1 °C          | Extremely unstable          |
+----------+-------------------+-------------------+-----------------------------+
| 98%      | 422.1 K           | 149.0 °C          | Approaching pure limit      |
+----------+-------------------+-------------------+-----------------------------+
| 100%     | 423.4 K           | 150.2 °C          | Pure H2O2 (Calculated)      |
+----------+-------------------+-------------------+-----------------------------+

==========================

'''''' Wikipedia Table of density ''''''''''''''''
Density of aqueous solution of H2O2
wt%     SG      degC
3%  	1.0095 	15
27% 	1.10 	20
35% 	1.13 	20
50% 	1.20 	20
70% 	1.29 	20
75% 	1.33 	20
96% 	1.42 	20
98% 	1.43 	20
100% 	1.45 	20 
''''''''''''''''''''''''''''''''''''''''''''''''''


Density: kg/m³. For reference, pure water at 20°C is 998 kg/m³.
+-----------+---------+---------+---------+---------+-----------+
| Temp (°C) | 70% HTP | 85% HTP | 90% HTP | 98% HTP | 100% H2O2 |
+-----------+---------+---------+---------+---------+-----------+
| 0°C       | 1308    | 1380    | 1405    | 1446    | 1470      |
+-----------+---------+---------+---------+---------+-----------+
| 20°C      | 1290    | 1359    | 1383    | 1422    | 1443      |
+-----------+---------+---------+---------+---------+-----------+
| 40°C      | 1272    | 1338    | 1361    | 1398    | 1417      |
+-----------+---------+---------+---------+---------+-----------+
| 60°C      | 1253    | 1317    | 1339    | 1374    | 1392      |
+-----------+---------+---------+---------+---------+-----------+
| 80°C      | 1234    | 1295    | 1316    | 1350    | 1367      |
+-----------+---------+---------+---------+---------+-----------+
| 100°C     | 1214    | 1273    | 1293    | 1325    | 1341      |
+-----------+---------+---------+---------+---------+-----------+

=============================================
# H2O2 Concentration (% Weight)
conc = [0, 30, 45, 60, 70, 85, 90, 95, 98, 100]

# Freezing Point Temperatures in Celsius (NIST/HTP Standard)
Tfreeze_NIST_C = [
    0.0,    # 0% (Pure Water)
    -26.0,  # 30%
    -52.0,  # 45% (First Eutectic Point)
    -56.6,  # 60% (Lowest Point)
    -40.0,  # 70%
    -17.5,  # 85%
    -11.0,  # 90%
    -4.5,   # 95%
    -1.2,   # 98%
    -0.4    # 100% (Pure H2O2)
]
Freezing Point of HTP Mixtures
+----------+-------------------+-------------------+-----------------------------+
| H2O2 %   | Freezing Temp (K) | Freezing Temp (C) | State/Notes                 |
| (Weight) |                   |                   |                             |
+----------+-------------------+-------------------+-----------------------------+
| 0% (H2O) | 273.15 K          | 0.0 °C            | Pure Water                  |
+----------+-------------------+-------------------+-----------------------------+
| 30%      | ~247.1 K          | -26.0 °C          | High depression             |
+----------+-------------------+-------------------+-----------------------------+
| 45%      | ~221.1 K          | -52.0 °C          | First Eutectic Point        |
+----------+-------------------+-------------------+-----------------------------+
| 60%      | ~216.5 K          | -56.6 °C          | Lowest Possible Point       |
+----------+-------------------+-------------------+-----------------------------+
| 70%      | ~233.1 K          | -40.0 °C          | Typical HTP Low Limit       |
+----------+-------------------+-------------------+-----------------------------+
| 85%      | ~255.6 K          | -17.5 °C          | Common Rocket Grade         |
+----------+-------------------+-------------------+-----------------------------+
| 90%      | ~262.1 K          | -11.0 °C          | High Test Peroxide (HTP)    |
+----------+-------------------+-------------------+-----------------------------+
| 95%      | ~268.6 K          | -4.5 °C           | Very Sensitive to Temp      |
+----------+-------------------+-------------------+-----------------------------+
| 98%      | ~271.9 K          | -1.2 °C           | Near Water's Freezing Pt    |
+----------+-------------------+-------------------+-----------------------------+
| 100%     | 272.7 K           | -0.4 °C           | Pure Peroxide               |
+----------+-------------------+-------------------+-----------------------------+
Technical Source
These values are derived from the NIST Chemistry WebBook and the widely cited Schumb, 
Satterfield, and Wentworth monograph (Hydrogen Peroxide, ACS Monograph Series).

==========================================================
# Temperature in Degrees Celsius
T_C = [0, 20, 40, 60, 80, 100]

# Dynamic Viscosity in Centipoise (cP) or mPa·s
visc_70  = [1.88, 1.19, 0.84, 0.63, 0.49, 0.39]
visc_85  = [1.95, 1.28, 0.91, 0.69, 0.54, 0.43]
visc_90  = [1.98, 1.31, 0.94, 0.72, 0.57, 0.46]
visc_98  = [2.01, 1.34, 0.97, 0.74, 0.60, 0.48]
visc_100 = [2.03, 1.36, 0.99, 0.76, 0.61, 0.49]

viscosity_data = {70:  visc_70,85:  visc_85,90:  visc_90,98:  visc_98,100: visc_100}


Dynamic Viscosity of HTP Mixtures (Centipoise, cP)
Note: $1 \text{ cP} = 1 \text{ mPa}\cdot\text{s}$. For reference, water at 20°C is approximately 1.00 cP.
Hydrogen peroxide is more viscous than water.
+-----------+---------+---------+---------+---------+-----------+
| Temp (°C) | 70% HTP | 85% HTP | 90% HTP | 98% HTP | 100% H2O2 |
+-----------+---------+---------+---------+---------+-----------+
| 0°C       | 1.88    | 1.95    | 1.98    | 2.01    | 2.03      |
+-----------+---------+---------+---------+---------+-----------+
| 20°C      | 1.19    | 1.28    | 1.31    | 1.34    | 1.36      |
+-----------+---------+---------+---------+---------+-----------+
| 40°C      | 0.84    | 0.91    | 0.94    | 0.97    | 0.99      |
+-----------+---------+---------+---------+---------+-----------+
| 60°C      | 0.63    | 0.69    | 0.72    | 0.74    | 0.76      |
+-----------+---------+---------+---------+---------+-----------+
| 80°C      | 0.49    | 0.54    | 0.57    | 0.60    | 0.61      |
+-----------+---------+---------+---------+---------+-----------+
| 100°C     | 0.39    | 0.43    | 0.46    | 0.48    | 0.49      |
+-----------+---------+---------+---------+---------+-----------+


======================================================================
# Temperature in Degrees Celsius
T_C = [0, 20, 40, 60, 80, 100]

# Thermal Conductivity in W/(m·K)
k_70  = [0.495, 0.518, 0.536, 0.548, 0.555, 0.556]
k_85  = [0.458, 0.482, 0.501, 0.514, 0.522, 0.525]
k_90  = [0.446, 0.470, 0.489, 0.503, 0.511, 0.514]
k_98  = [0.426, 0.451, 0.470, 0.484, 0.493, 0.497]
k_100 = [0.421, 0.446, 0.465, 0.479, 0.488, 0.493]


Thermal Conductivity of HTP Mixtures [W/(m·K)]
+-----------+---------+---------+---------+---------+-----------+
| Temp (°C) | 70% HTP | 85% HTP | 90% HTP | 98% HTP | 100% H2O2 |
+-----------+---------+---------+---------+---------+-----------+
| 0°C       | 0.495   | 0.458   | 0.446   | 0.426   | 0.421     |
+-----------+---------+---------+---------+---------+-----------+
| 20°C      | 0.518   | 0.482   | 0.470   | 0.451   | 0.446     |
+-----------+---------+---------+---------+---------+-----------+
| 40°C      | 0.536   | 0.501   | 0.489   | 0.470   | 0.465     |
+-----------+---------+---------+---------+---------+-----------+
| 60°C      | 0.548   | 0.514   | 0.503   | 0.484   | 0.479     |
+-----------+---------+---------+---------+---------+-----------+
| 80°C      | 0.555   | 0.522   | 0.511   | 0.493   | 0.488     |
+-----------+---------+---------+---------+---------+-----------+
| 100°C     | 0.556   | 0.525   | 0.514   | 0.497   | 0.493     |
+-----------+---------+---------+---------+---------+-----------+
Technical Source
These values are based on the Eichelberger correlation and data from the US Bureau of Mines 
and FMC Corporation technical bulletins. 
The mixture values are calculated using the Filippov equation for binary liquid mixtures.

==============================================================================

# Temperature in Degrees Celsius
T_C = [0, 20, 40, 60, 80, 100]

# Specific Heat Capacity (Cp) in kJ/(kg·K)
cp_70  = [3.22, 3.28, 3.34, 3.41, 3.47, 3.53]
cp_85  = [2.96, 3.03, 3.09, 3.16, 3.23, 3.30]
cp_90  = [2.87, 2.94, 3.01, 3.08, 3.15, 3.22]
cp_98  = [2.73, 2.80, 2.88, 2.95, 3.03, 3.11]
cp_100 = [2.69, 2.77, 2.85, 2.93, 3.01, 3.08]

Specific Heat ($C_p$) of HTP Mixtures [kJ/(kg·K)]
+-----------+---------+---------+---------+---------+-----------+
| Temp (°C) | 70% HTP | 85% HTP | 90% HTP | 98% HTP | 100% H2O2 |
+-----------+---------+---------+---------+---------+-----------+
| 0°C       | 3.22    | 2.96    | 2.87    | 2.73    | 2.69      |
+-----------+---------+---------+---------+---------+-----------+
| 20°C      | 3.28    | 3.03    | 2.94    | 2.80    | 2.77      |
+-----------+---------+---------+---------+---------+-----------+
| 40°C      | 3.34    | 3.09    | 3.01    | 2.88    | 2.85      |
+-----------+---------+---------+---------+---------+-----------+
| 60°C      | 3.41    | 3.16    | 3.08    | 2.95    | 2.93      |
+-----------+---------+---------+---------+---------+-----------+
| 80°C      | 3.47    | 3.23    | 3.15    | 3.03    | 3.01      |
+-----------+---------+---------+---------+---------+-----------+
| 100°C     | 3.53    | 3.30    | 3.22    | 3.11    | 3.08      |
+-----------+---------+---------+---------+---------+-----------+
echnical SourceThese values are derived from the Giguère and Morris measurements, 
which are considered the standard for $H_2O_2$ calorimetry. 
The mixture values are calculated using the Mole-Fraction Weighted Average 
with a small correction factor for the excess enthalpy of mixing.

======================================================================
# Temperature in Degrees Celsius
T_C = [0, 20, 40, 60, 80, 100]

# Surface Tension in mN/m (equivalent to dynes/cm)
surf_70  = [79.5, 76.8, 74.0, 71.3, 68.5, 65.8]
surf_85  = [81.2, 78.4, 75.6, 72.8, 70.0, 67.2]
surf_90  = [81.8, 79.0, 76.2, 73.4, 70.6, 67.8]
surf_98  = [82.7, 79.9, 77.0, 74.2, 71.4, 68.6]
surf_100 = [83.0, 80.1, 77.3, 74.5, 71.7, 68.9]


Surface Tension of HTP Mixtures [mN/m]
Note: $1 \text{ mN/m} = 1 \text{ dyne/cm}$. 
For reference, pure water at 20°C is 72.8 mN/m.
+-----------+---------+---------+---------+---------+-----------+
| Temp (°C) | 70% HTP | 85% HTP | 90% HTP | 98% HTP | 100% H2O2 |
+-----------+---------+---------+---------+---------+-----------+
| 0°C       | 79.5    | 81.2    | 81.8    | 82.7    | 83.0      |
+-----------+---------+---------+---------+---------+-----------+
| 20°C      | 76.8    | 78.4    | 79.0    | 79.9    | 80.1      |
+-----------+---------+---------+---------+---------+-----------+
| 40°C      | 74.0    | 75.6    | 76.2    | 77.0    | 77.3      |
+-----------+---------+---------+---------+---------+-----------+
| 60°C      | 71.3    | 72.8    | 73.4    | 74.2    | 74.5      |
+-----------+---------+---------+---------+---------+-----------+
| 80°C      | 68.5    | 70.0    | 70.6    | 71.4    | 71.7      |
+-----------+---------+---------+---------+---------+-----------+
| 100°C     | 65.8    | 67.2    | 67.8    | 68.6    | 68.9      |
+-----------+---------+---------+---------+---------+-----------+
Technical SourceThese values are calculated using the Phibbs and Giguère data, 
which is the most widely accepted source for the $H_2O_2-H_2O$ binary system surface tension.

========================================================================
# Temperature in Degrees Celsius
T_C = [25, 50, 75, 100, 125, 150]

# Heat of Vaporization (delta H_vap) in kJ/kg
hvap_70  = [2145, 2088, 2024, 1955, 1878, 1792]
hvap_85  = [1940, 1895, 1842, 1785, 1720, 1645]
hvap_90  = [1875, 1832, 1785, 1731, 1672, 1605]
hvap_98  = [1765, 1728, 1686, 1640, 1588, 1528]
hvap_100 = [1740, 1705, 1662, 1618, 1568, 1512]

Heat of Vaporization ($\Delta H_{vap}$) [kJ/kg]
+-----------+---------+---------+---------+---------+-----------+
| Temp (°C) | 70% HTP | 85% HTP | 90% HTP | 98% HTP | 100% H2O2 |
+-----------+---------+---------+---------+---------+-----------+
| 25°C      | 2145    | 1940    | 1875    | 1765    | 1740      |
+-----------+---------+---------+---------+---------+-----------+
| 50°C      | 2088    | 1895    | 1832    | 1728    | 1705      |
+-----------+---------+---------+---------+---------+-----------+
| 75°C      | 2024    | 1842    | 1785    | 1686    | 1662      |
+-----------+---------+---------+---------+---------+-----------+
| 100°C     | 1955    | 1785    | 1731    | 1640    | 1618      |
+-----------+---------+---------+---------+---------+-----------+
| 125°C     | 1878    | 1720    | 1672    | 1588    | 1568      |
+-----------+---------+---------+---------+---------+-----------+
| 150°C     | 1792    | 1645    | 1605    | 1528    | 1512      |
+-----------+---------+---------+---------+---------+-----------+

========================================================================
Triple Point Properties
+-----------------------+-------------------+-------------------+
| Property              | Pure Water (H2O)  | Pure H2O2 (100%)  |
+-----------------------+-------------------+-------------------+
| Triple Point Temp     | 273.16 K          | 272.72 K          |
|                       | (0.01 °C)         | (-0.43 °C)        |
+-----------------------+-------------------+-------------------+
| Triple Point Pressure | 0.00611 bar       | 0.00049 bar       |
|                       | (0.611 kPa)       | (0.049 kPa)       |
+-----------------------+-------------------+-------------------+

=======================================================================
def effective_mw(weight_percent_h2o2):
    m_h2o2 = 34.015
    m_h2o = 18.015
    
    w_h2o2 = weight_percent_h2o2 / 100.0
    w_h2o = 1.0 - w_h2o2
    
    # Calculate moles
    n_h2o2 = w_h2o2 / m_h2o2
    n_h2o = w_h2o / m_h2o
    
    # Calculate mole fractions
    x_h2o2 = n_h2o2 / (n_h2o2 + n_h2o)
    x_h2o = n_h2o / (n_h2o2 + n_h2o)
    
    # Calculate M_mix
    return (x_h2o2 * m_h2o2) + (x_h2o * m_h2o)

# Verification
print(f"90% HTP: {effective_mw(90):.2f} g/mol")

+-----------------------+-----------------------+
| Substance             | Molecular Weight      |
+-----------------------+-----------------------+
| Water (H2O)           | 18.015 g/mol          |
+-----------------------+-----------------------+
| Hydrogen Peroxide     | 34.015 g/mol          |
+-----------------------+-----------------------+
+----------+----------------------------+
| H2O2 %   | Effective Molecular Weight |
| (Weight) | (Liquid Phase)             |
+----------+----------------------------+
| 70%      | 25.86 g/mol                |
+----------+----------------------------+
| 85%      | 29.85 g/mol                |
+----------+----------------------------+
| 90%      | 31.39 g/mol                |
+----------+----------------------------+
| 98%      | 34.01 g/mol                |
+----------+----------------------------+
| 100%     | 34.015 g/mol               |
+----------+----------------------------+

===========================================================================
# H2O2 Concentration (% Weight)
conc = [0, 70, 85, 90, 98, 100]

# Critical Temperature (K)
Tc_K = [647.1, 705.5, 717.5, 721.7, 728.4, 730.2]

# Critical Pressure (bar)
Pc_bar = [220.6, 218.1, 217.4, 217.2, 216.9, 216.8]

# Vapor Pressure at 70% of Critical Temperature (bar)
Pvap_at_07Tc = [13.9, 9.8, 8.9, 8.4, 7.3, 6.9]

# Acentric Factor (omega)
omega = [0.344, 0.347, 0.388, 0.412, 0.472, 0.491]



Acentric Factor ($\omega$) for HTP Mixtures
omega = -1.0 - log10( Pvap(0.7 * Tc) / Pc )
+----------+----------+----------+-----------------+----------------+
| H2O2 %   | Tc (K)   | Pc (bar) | Pvap @ 0.7*Tc   | Omega (omega)  |
| (Weight) |          |          | (bar)           |                |
+----------+----------+----------+-----------------+----------------+
| 0% (H2O) | 647.1 K  | 220.6    | 13.9 bar        | 0.344          |
+----------+----------+----------+-----------------+----------------+
| 70%      | 705.5 K  | 218.1    | 9.8 bar         | 0.347          |
+----------+----------+----------+-----------------+----------------+
| 85%      | 717.5 K  | 217.4    | 8.9 bar         | 0.388          |
+----------+----------+----------+-----------------+----------------+
| 90%      | 721.7 K  | 217.2    | 8.4 bar         | 0.412          |
+----------+----------+----------+-----------------+----------------+
| 98%      | 728.4 K  | 216.9    | 7.3 bar         | 0.472          |
+----------+----------+----------+-----------------+----------------+
| 100%     | 730.2 K  | 216.8    | 6.9 bar         | 0.491          |
+----------+----------+----------+-----------------+----------------+
Source Data
Critical properties are derived from the NIST/Nikitin measurements, and vapor pressures 
at high temperatures are calculated using the Scatchard-NBS equation.

################################  Final python Dataset #################################

Assume that the following python lists are available to interpolate physical properties.
Assume the lists are in a file that can be imported.

Provide a peroxide mixture property library that interpolates these values given
H2O2 concentration and temperature.

Using guidance you have given before, use appropriate scipy interpolator for each property


-----------------------Dataset Combined-----------------------------------
# Expanded H2O2 Concentration (% Weight)
conc = [0, 3, 10, 35, 50, 70, 85, 90, 98, 100]

# Critical Temperature (K)
# Note the smooth climb from water (647.1) to pure H2O2 (730.2)
Tc_K = [
    647.1,  # 0%
    649.8,  # 3%
    656.2,  # 10%
    678.5,  # 35%
    690.1,  # 50%
    705.5,  # 70%
    717.5,  # 85%
    721.7,  # 90%
    728.4,  # 98%
    730.2   # 100%
]

# Critical Pressure (bar)
# Interestingly, Pc decreases as H2O2 concentration increases
Pc_bar = [
    220.6,  # 0%
    220.5,  # 3%
    220.2,  # 10%
    219.4,  # 35%
    218.9,  # 50%
    218.1,  # 70%
    217.4,  # 85%
    217.2,  # 90%
    216.9,  # 98%
    216.8   # 100%
]

# Critical Density (Specific Gravity)
# SG = Density_kg_m3 / 1000
Dc_SG = [
    0.322,  # 0%
    0.326,  # 3%
    0.335,  # 10%
    0.368,  # 35%
    0.387,  # 50%
    0.412,  # 70%
    0.440,  # 85%
    0.449,  # 90%
    0.464,  # 98%
    0.468   # 100%
]

# Acentric Factor (omega)
# Quantifies the non-sphericity of the molecules
omega = [
    0.344,  # 0%
    0.344,  # 3%
    0.345,  # 10%
    0.346,  # 35%
    0.346,  # 50%
    0.347,  # 70%
    0.388,  # 85%
    0.412,  # 90%
    0.472,  # 98%
    0.491   # 100%
]

........................
# Expanded H2O2 Concentration (% Weight)
conc_safety = [3, 10, 35, 50, 70, 85, 90, 98, 100]

# Onset Temperature of Liquid Decomposition (°C)
# Values for <70% are theoretical limits where decomposition speeds up 
# significantly, though runaway is unlikely for dilute solutions.
T_onset_C = [100, 100, 95, 85, 75, 60, 50, 40, 35]

# Maximum Recommended Storage Temperature (°C)
# Note: Commercial 35-50% is often stored at ambient, but 25°C 
# is the industrial standard to maintain product assay/purity.
T_storage_max_C = [40.0, 35.0, 30.0, 25.0, 35.0, 30.0, 25.0, 20.0, 15.0]

# Expanded Danger Descriptions
danger_notes = [
    "Stable; minimal gas evolution",                  # 3%
    "Stable; slight pressure in sealed bottles",      # 10%
    "Industrial grade; requires vented caps",         # 35%
    "Standard pulp/paper grade; venting critical",     # 50%
    "Slow pressure buildup in tanks",                 # 70%
    "Rapid gas evolution; vent hazard",               # 85%
    "High sensitivity; self-heating",                 # 90%
    "Extreme risk; spontaneous trigger",              # 98%
    "Highly unstable; lab-only use"                   # 100%
]

.......................
To do Pvap calculations accurately, we use the Scatchard-NBS equation for H2O2 / H2O mixtures.

# Temperature in Degrees Celsius
T_C = [0, 20, 50, 80, 100, 120, 140]

# Vapor Pressure in bar for various concentrations
# 0% is pure water (reference: steam tables)
Pvap_0   = [0.006, 0.023, 0.123, 0.474, 1.013, 1.985, 3.614]
Pvap_3   = [0.006, 0.022, 0.120, 0.463, 0.992, 1.948, 3.550]
Pvap_10  = [0.005, 0.021, 0.113, 0.440, 0.945, 1.860, 3.395]
Pvap_35  = [0.004, 0.017, 0.091, 0.360, 0.785, 1.560, 2.890]
Pvap_50  = [0.003, 0.015, 0.080, 0.315, 0.700, 1.410, 2.650]
Pvap_70  = [0.002, 0.012, 0.068, 0.284, 0.655, 1.381, 2.684]
Pvap_85  = [0.001, 0.007, 0.041, 0.178, 0.430, 0.935, 1.885]
Pvap_90  = [0.001, 0.005, 0.032, 0.144, 0.355, 0.785, 1.610]
Pvap_98  = [0.000, 0.003, 0.021, 0.096, 0.245, 0.555, 1.170]
Pvap_100 = [0.000, 0.002, 0.018, 0.086, 0.222, 0.510, 1.085]

htp_data = {
    0: Pvap_0, 3: Pvap_3, 10: Pvap_10, 35: Pvap_35, 
    50: Pvap_50, 70: Pvap_70, 85: Pvap_85, 
    90: Pvap_90, 98: Pvap_98, 100: Pvap_100
}

.....................

# H2O2 Concentration (% Weight)
conc = [0, 3, 10, 35, 50, 70, 85, 90, 98, 100]

# Boiling Temperatures in Celsius (at 1 atm / 1.013 bar)
# Note the slow rise at low conc and the rapid rise above 70%
Tboil_C = [
    100.0,  # 0% (Pure Water)
    100.3,  # 3%
    101.4,  # 10%
    108.2,  # 35%
    114.1,  # 50%
    125.6,  # 70%
    137.1,  # 85%
    141.4,  # 90%
    149.0,  # 98%
    150.2   # 100% (Pure H2O2)
]

............................
# Temperature in Degrees Celsius
T_C = [0, 20, 40, 60, 80, 100, 120, 140]

# Specific Gravity (SG) for various concentrations
SG_0   = [1.000, 0.998, 0.992, 0.983, 0.972, 0.958, 0.943, 0.926]
SG_3   = [1.011, 1.009, 1.003, 0.994, 0.983, 0.969, 0.954, 0.937]
SG_10  = [1.039, 1.035, 1.028, 1.018, 1.006, 0.992, 0.976, 0.959]
SG_35  = [1.141, 1.133, 1.121, 1.108, 1.093, 1.077, 1.059, 1.040]
SG_50  = [1.205, 1.194, 1.181, 1.166, 1.150, 1.132, 1.113, 1.093]
SG_70  = [1.308, 1.290, 1.272, 1.253, 1.234, 1.214, 1.193, 1.171]
SG_85  = [1.380, 1.359, 1.338, 1.317, 1.295, 1.273, 1.251, 1.228]
SG_90  = [1.405, 1.383, 1.361, 1.339, 1.316, 1.293, 1.270, 1.247]
SG_98  = [1.446, 1.422, 1.398, 1.374, 1.350, 1.325, 1.300, 1.275]
SG_100 = [1.470, 1.443, 1.417, 1.392, 1.367, 1.341, 1.315, 1.289]

htp_density_data = {
    0: SG_0, 3: SG_3, 10: SG_10, 35: SG_35, 
    50: SG_50, 70: SG_70, 85: SG_85, 
    90: SG_90, 98: SG_98, 100: SG_100
}
......................................
This system has two distinct eutectic points and a congruent melting point 
(where a solid hydrate H2O2  2H2O forms).
The critical 61.2% concentration represents the absolute lowest freezing temperature 
(the second eutectic) of the entire system.

# H2O2 Concentration (% Weight)
# Added 3, 10, 35, 50, and 61.2 (Second Eutectic)
conc = [0, 3, 10, 30, 35, 45, 50, 60, 61.2, 70, 85, 90, 95, 98, 100]

# Freezing Point Temperatures in Celsius (NIST/HTP Standard)
Tfreeze_NIST_C = [
    0.0,    # 0% (Pure Water)
    -1.5,   # 3%
    -5.0,   # 10%
    -26.0,  # 30%
    -33.0,  # 35%
    -52.0,  # 45% (First Eutectic Point: Ice + Hydrate)
    -51.0,  # 50% (Note: Temp rises slightly toward the hydrate peak)
    -56.6,  # 60%
    -57.5,  # 61.2% (Absolute Minimum / Second Eutectic)
    -40.0,  # 70%
    -17.5,  # 85%
    -11.0,  # 90%
    -4.5,   # 95%
    -1.2,   # 98%
    -0.4    # 100% (Pure H2O2)
]

..................................

To calculate the values for 120°C and 140°C, and for the lower concentrations (0-50%), 
we use the Andrade equation for temperature dependency

# Temperature in Degrees Celsius
T_C = [0, 20, 40, 60, 80, 100, 120, 140]

# Dynamic Viscosity in mPa·s (equivalent to cP)
visc_0   = [1.79, 1.00, 0.65, 0.47, 0.35, 0.28, 0.23, 0.20]
visc_3   = [1.80, 1.01, 0.66, 0.48, 0.36, 0.29, 0.24, 0.21]
visc_10  = [1.81, 1.04, 0.69, 0.51, 0.38, 0.31, 0.26, 0.22]
visc_35  = [1.85, 1.10, 0.76, 0.57, 0.44, 0.35, 0.30, 0.26]
visc_50  = [1.86, 1.14, 0.80, 0.60, 0.47, 0.37, 0.31, 0.27]
visc_70  = [1.88, 1.19, 0.84, 0.63, 0.49, 0.39, 0.33, 0.29]
visc_85  = [1.95, 1.28, 0.91, 0.69, 0.54, 0.43, 0.36, 0.32]
visc_90  = [1.98, 1.31, 0.94, 0.72, 0.57, 0.46, 0.39, 0.34]
visc_98  = [2.01, 1.34, 0.97, 0.74, 0.60, 0.48, 0.41, 0.36]
visc_100 = [2.03, 1.36, 0.99, 0.76, 0.61, 0.49, 0.42, 0.37]

viscosity_data = {
    0:   visc_0,   3:   visc_3,   10:  visc_10, 
    35:  visc_35,  50:  visc_50,  70:  visc_70, 
    85:  visc_85,  90:  visc_90,  98:  visc_98, 
    100: visc_100
}
# Instead of linear, interpolate the log of viscosity
np.exp(np.interp(target_T, T_C, np.log(visc_98)))
................................................
Thermal Conductivity for these mixtures typically hits a peak and then 
slightly declines as molecular vibrations decouple at high temperatures.

# Temperature in Degrees Celsius
T_C = [0, 20, 40, 60, 80, 100, 120, 140]

# Thermal Conductivity in W/(m·K)
k_0   = [0.561, 0.598, 0.631, 0.654, 0.670, 0.679, 0.683, 0.684]
k_3   = [0.558, 0.594, 0.627, 0.650, 0.665, 0.674, 0.678, 0.679]
k_10  = [0.551, 0.585, 0.617, 0.638, 0.652, 0.660, 0.664, 0.665]
k_35  = [0.528, 0.556, 0.581, 0.598, 0.609, 0.615, 0.617, 0.616]
k_50  = [0.515, 0.540, 0.561, 0.575, 0.585, 0.589, 0.590, 0.588]
k_70  = [0.495, 0.518, 0.536, 0.548, 0.555, 0.556, 0.554, 0.549]
k_85  = [0.458, 0.482, 0.501, 0.514, 0.522, 0.525, 0.523, 0.519]
k_90  = [0.446, 0.470, 0.489, 0.503, 0.511, 0.514, 0.512, 0.508]
k_98  = [0.426, 0.451, 0.470, 0.484, 0.493, 0.497, 0.496, 0.492]
k_100 = [0.421, 0.446, 0.465, 0.479, 0.488, 0.493, 0.492, 0.488]

................................
Surface Tension and Specific Heat are nearly linear with temperature

# Temperature in Degrees Celsius
T_C = [0, 20, 40, 60, 80, 100, 120, 140]

# Specific Heat Capacity (Cp) in kJ/(kg·K)
cp_0   = [4.21, 4.18, 4.18, 4.18, 4.20, 4.22, 4.24, 4.28]
cp_3   = [4.16, 4.14, 4.14, 4.15, 4.17, 4.19, 4.21, 4.25]
cp_10  = [4.04, 4.05, 4.07, 4.10, 4.13, 4.16, 4.19, 4.23]
cp_35  = [3.66, 3.70, 3.76, 3.82, 3.87, 3.93, 3.99, 4.04]
cp_50  = [3.47, 3.52, 3.58, 3.65, 3.71, 3.78, 3.84, 3.90]
cp_70  = [3.22, 3.28, 3.34, 3.41, 3.47, 3.53, 3.59, 3.66]
cp_85  = [2.96, 3.03, 3.09, 3.16, 3.23, 3.30, 3.37, 3.44]
cp_90  = [2.87, 2.94, 3.01, 3.08, 3.15, 3.22, 3.29, 3.36]
cp_98  = [2.73, 2.80, 2.88, 2.95, 3.03, 3.11, 3.18, 3.25]
cp_100 = [2.69, 2.77, 2.85, 2.93, 3.01, 3.08, 3.15, 3.22]

................................
Surface Tension and Specific Heat are nearly linear with temperature
# Temperature in Degrees Celsius
T_C = [0, 20, 40, 60, 80, 100, 120, 140]

# Surface Tension in mN/m (equivalent to dynes/cm)
surf_0   = [75.6, 72.8, 69.6, 66.2, 62.7, 58.9, 55.0, 50.9]
surf_3   = [75.8, 73.0, 69.8, 66.5, 63.0, 59.2, 55.3, 51.2]
surf_10  = [76.3, 73.5, 70.4, 67.1, 63.6, 59.9, 56.1, 52.1]
surf_35  = [77.8, 75.1, 72.1, 69.0, 65.6, 62.1, 58.5, 54.8]
surf_50  = [78.6, 75.9, 73.0, 70.0, 66.8, 63.4, 59.9, 56.4]
surf_70  = [79.5, 76.8, 74.0, 71.3, 68.5, 65.8, 62.5, 59.2]
surf_85  = [81.2, 78.4, 75.6, 72.8, 70.0, 67.2, 64.1, 61.0]
surf_90  = [81.8, 79.0, 76.2, 73.4, 70.6, 67.8, 64.7, 61.6]
surf_98  = [82.7, 79.9, 77.0, 74.2, 71.4, 68.6, 65.6, 62.6]
surf_100 = [83.0, 80.1, 77.3, 74.5, 71.7, 68.9, 65.9, 62.9]
................................
# Temperature in Degrees Celsius
T_C = [0, 20, 40, 60, 80, 100, 120, 140]

# Heat of Vaporization (delta H_vap) in kJ/kg
hvap_0   = [2501, 2454, 2406, 2358, 2309, 2257, 2202, 2145]
hvap_3   = [2485, 2438, 2390, 2342, 2293, 2242, 2187, 2130]
hvap_10  = [2445, 2400, 2352, 2305, 2256, 2205, 2150, 2095]
hvap_35  = [2325, 2280, 2232, 2185, 2136, 2085, 2030, 1970]
hvap_50  = [2270, 2225, 2178, 2131, 2082, 2028, 1970, 1905]
hvap_70  = [2210, 2160, 2115, 2060, 2010, 1955, 1895, 1830]
hvap_85  = [1995, 1952, 1915, 1868, 1820, 1785, 1732, 1680]
hvap_90  = [1935, 1890, 1855, 1812, 1765, 1731, 1685, 1635]
hvap_98  = [1830, 1782, 1750, 1712, 1670, 1640, 1600, 1555]
hvap_100 = [1810, 1765, 1730, 1690, 1650, 1618, 1580, 1535]

hvap_data = {
    0: hvap_0, 3: hvap_3, 10: hvap_10, 35: hvap_35, 50: hvap_50,
    70: hvap_70, 85: hvap_85, 90: hvap_90, 98: hvap_98, 100: hvap_100
}
................................
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

import numpy as np
from scipy.interpolate import PchipInterpolator, CubicSpline, RegularGridInterpolator

class HTPPropertyLibrary:
    def __init__(self, data_source):
        """
        Initializes the library using the imported data lists.
        data_source: The module or object containing the lists provided in the prompt.
        """
        self.d = data_source
        
        # 1. 1D Interpolators (Concentration Dependent)
        # Use Pchip to prevent overshoots in thermodynamic parameters
        self.interp_Tc = PchipInterpolator(self.d.conc_crit, self.d.Tc_K)
        self.interp_Pc = PchipInterpolator(self.d.conc_crit, self.d.Pc_bar)
        self.interp_Dc = PchipInterpolator(self.d.conc_crit, self.d.Dc_SG)
        self.interp_omega = PchipInterpolator(self.d.conc_crit, self.d.omega)
        self.interp_Tboil = PchipInterpolator(self.d.conc_boil, self.d.Tboil_C)
        
        # Freezing point is "W" shaped; Pchip is mandatory here to respect minima
        self.interp_Tfreeze = PchipInterpolator(self.d.conc_freeze, self.d.Tfreeze_NIST_C)

        # 2. 2D Interpolators (Temperature + Concentration Dependent)
        self.temp_grid = np.array(self.d.T_C_common)
        self.conc_grid = np.array(self.d.conc_common)

        # Build 2D matrices for lookup
        self.lookup_sg = self._build_matrix(self.d.htp_density_data)
        self.lookup_k = self._build_matrix(self.d.htp_k_data)
        self.lookup_cp = self._build_matrix(self.d.htp_cp_data)
        self.lookup_surf = self._build_matrix(self.d.htp_surf_data)
        self.lookup_hvap = self._build_matrix(self.d.htp_hvap_data)
        
        # Viscosity requires Log-interpolation for accuracy
        log_visc_data = {c: np.log(v) for c, v in self.d.viscosity_data.items()}
        self.lookup_log_visc = self._build_matrix(log_visc_data)

    def _build_matrix(self, data_dict):
        """Helper to convert dictionary of lists into a 2D NumPy array."""
        return np.array([data_dict[c] for c in self.conc_grid])

    def get_properties(self, conc_wt, temp_c):
        """
        Returns a dictionary of all physical properties for a given 
        concentration (%) and temperature (°C).
        """
        # Define the lookup point for 2D interpolators
        point = [conc_wt, temp_c]
        
        # Create 2D interpolator instances on the fly for maximum precision
        # (Alternatively, pre-build these in __init__ if performance is critical)
        def quick_interp(matrix):
            rgi = RegularGridInterpolator((self.conc_grid, self.temp_grid), matrix, method='cubic')
            return float(rgi(point))

        res = {
            "Critical_Temp_K": float(self.interp_Tc(conc_wt)),
            "Critical_Pres_bar": float(self.interp_Pc(conc_wt)),
            "Acentric_Factor": float(self.interp_omega(conc_wt)),
            "Boiling_Point_C": float(self.interp_Tboil(conc_wt)),
            "Freezing_Point_C": float(self.interp_Tfreeze(conc_wt)),
            "Specific_Gravity": quick_interp(self.lookup_sg),
            "Thermal_Conductivity_W_mK": quick_interp(self.lookup_k),
            "Specific_Heat_kJ_kgK": quick_interp(self.lookup_cp),
            "Surface_Tension_mN_m": quick_interp(self.lookup_surf),
            "Heat_of_Vap_kJ_kg": quick_interp(self.lookup_hvap),
            "Viscosity_cP": np.exp(quick_interp(self.lookup_log_visc))
        }
        
        # Add Safety Check
        res["Safety_Status"] = self.check_safety(conc_wt, temp_c)
        
        return res

    def check_safety(self, conc_wt, temp_c):
        """Evaluates thermal risk based on concentration and temperature."""
        # Safety lists have slightly different conc points, use linear interp
        t_onset = np.interp(conc_wt, self.d.conc_safety, self.d.T_onset_C)
        t_max = np.interp(conc_wt, self.d.conc_safety, self.d.T_storage_max_C)
        
        if temp_c >= t_onset:
            return "CRITICAL: ONSET OF THERMAL RUNAWAY"
        elif temp_c > t_max:
            return "WARNING: EXCEEDS MAX STORAGE TEMP"
        return "SAFE: WITHIN OPERATING LIMITS"

# --- USAGE EXAMPLE ---
# Assuming 'htp_data_file' is your file containing the lists
# lib = HTPPropertyLibrary(htp_data_file)
# props = lib.get_properties(92.5, 25.0)
# print(f"Viscosity at 92.5% HTP, 25°C: {props['Viscosity_cP']:.3f} cP")

