# CoolProp-Node A Node.js wrapper for CoolProp providing an easy-to-use interface for thermodynamic calculations and refrigerant properties. Unlike all the other CoolProp npm packages I've seen, this one should actually work. Please report any issues. ## Installation ```bash npm install coolprop-node ``` ## Features - Easy-to-use async interface for CoolProp - Unit conversion support (Temperature: K/C/F, Pressure: Pa/kPa/bar/psi) - Automatic initialization - Configurable defaults - Comprehensive error handling ## Dependencies No External Dependencies, as CoolProp.js and CoolProp.wasm are bundled with the package. - [CoolProp](https://github.com/CoolProp/CoolProp) for the powerful thermodynamic library ## Quick Start ```javascript const nodeprop = require('coolprop-node'); async function example() { // Initialize with defaults (optional) await nodeprop.init({ refrigerant: 'R404A', tempUnit: 'C', pressureUnit: 'bar' }); // Calculate superheat const result = await nodeprop.calculateSuperheat({ temperature: 25, // 25°C pressure: 10, // 10 bar refrigerant: 'R404A' // optional if set in init }); console.log(result); // expected output: { type: 'success', superheat: 5.2, saturationTemperature: 19.8, refrigerant: 'R404A', units: { temperature: 'C', pressure: 'bar' } } } example(); ``` ## API Reference ### nodeprop.init(config) Initializes the wrapper with optional configuration. ###### Note: Calling `init()` is optional. The library will initialize automatically when you make your first call to any function, but you must provide a `refrigerant` parameter in that first call. ```javascript await nodeprop.init({ refrigerant: 'R404A', // Required on first init tempUnit: 'C', // Optional, defaults to 'K' pressureUnit: 'bar' // Optional, defaults to 'Pa' }); ``` ### nodeprop.calculateSuperheat(input) Calculates superheat for a given refrigerant. ```javascript const result = await nodeprop.calculateSuperheat({ temperature: 25, // 25°C pressure: 10, // 10 bar refrigerant: 'R404A' // optional if set in init }); returns: { type: 'success', superheat: 5.2, saturationTemperature: 19.8, refrigerant: 'R404A', units: { temperature: 'C', pressure: 'bar' } } ``` ### nodeprop.getSaturationTemperature(input) Calculates saturation temperature for a given refrigerant. ```javascript const result = await nodeprop.calculateSaturationTemperature({ temperature: 25, // 25°C pressure: 10, // 10 bar refrigerant: 'R404A' // optional if set in init }); returns: { type: 'success', temperature: 19.8, refrigerant: 'R404A', units: { temperature: 'C', pressure: 'bar' } } ``` ### nodeprop.getSaturationPressure(input) Calculates saturation pressure for a given refrigerant. ```javascript const result = await nodeprop.calculateSaturationPressure({ temperature: 25, // 25°C refrigerant: 'R404A' // optional if set in init }); returns: { type: 'success', pressure: 10, refrigerant: 'R404A', units: { temperature: 'C', pressure: 'bar' } } ``` ### nodeprop.calculateSubcooling(input) Calculates subcooling for a given refrigerant. ```javascript const result = await nodeprop.calculateSubcooling({ temperature: 25, // 25°C pressure: 10, // 10 bar refrigerant: 'R404A' // optional if set in init }); returns: { type: 'success', subcooling: 5.2, saturationTemperature: 19.8, refrigerant: 'R404A', units: { temperature: 'C', pressure: 'bar' } } ``` ### nodeprop.calculateSuperheat(input) Calculates superheat for a given refrigerant. ```javascript const result = await nodeprop.calculateSuperheat({ temperature: 25, // 25°C pressure: 10, // 10 bar refrigerant: 'R404A' // optional if set in init }); returns: { type: 'success', superheat: 5.2, saturationTemperature: 19.8, refrigerant: 'R404A', units: { temperature: 'C', pressure: 'bar' } } ``` ### nodeprop.getProperties(input) Gets all properties for a given refrigerant. ```javascript const result = await nodeprop.getProperties({ temperature: 25, // 25°C pressure: 10, // 10 bar refrigerant: 'R404A' // optional if set in init }); returns: { type: 'success', properties: { temperature: 25, // in configured temperature unit (e.g., °C) pressure: 10, // in configured pressure unit (e.g., bar) density: 1234.56, // in kg/m³ enthalpy: 400000, // in J/kg entropy: 1750, // in J/kg/K quality: 1, // dimensionless (0-1) conductivity: 0.013, // in W/m/K viscosity: 1.2e-5, // in Pa·s specificHeat: 850 // in J/kg/K }, refrigerant: 'R404A', units: { temperature: 'C', pressure: 'bar', density: 'kg/m³', enthalpy: 'J/kg', entropy: 'J/kg/K', quality: 'dimensionless', conductivity: 'W/m/K', viscosity: 'Pa·s', specificHeat: 'J/kg/K' } } ``` ### nodeprop.PropsSI Direct access to CoolProp's PropsSI function. ```javascript const PropsSI = await nodeprop.getPropsSI(); const result = PropsSI('H', 'T', 298.15, 'P', 101325, 'R134a'); ``` ### Error Handling ```javascript const result = await nodeprop.calculateSuperheat({ temperature: 25, // 25°C pressure: 10, // 10 bar refrigerant: 'R404' // Invalid refrigerant. Must be supported by CoolProp, but R404 is not even a valid refrigerant. }); returns: { type: 'error', message: 'Invalid refrigerant' } ``` ### Acknowledgements - [CoolProp](https://github.com/CoolProp/CoolProp) for the powerful thermodynamic library