254 lines
6.1 KiB
Markdown
254 lines
6.1 KiB
Markdown
# 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
|
|
|
|
|
|
|
|
|