SharpProp 3.0.4

Install-Package SharpProp -Version 3.0.4
dotnet add package SharpProp --version 3.0.4
<PackageReference Include="SharpProp" Version="3.0.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SharpProp --version 3.0.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: SharpProp, 3.0.4"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install SharpProp as a Cake Addin
#addin nuget:?package=SharpProp&version=3.0.4

// Install SharpProp as a Cake Tool
#tool nuget:?package=SharpProp&version=3.0.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

SharpProp

Build & Tests CodeQL NuGet Platform License Codecov

A simple, full-featured, lightweight, cross-platform CoolProp wrapper for C#

Quick start

  • Fluid class - for pure fluids and binary mixtures
  • Mixture class - for mixtures with pure fluids components
  • FluidsList enum - list of all available fluids
  • Input record - inputs for the Fluid and Mixture classes
  • HumidAir class - for humid air
  • InputHumidAir record - inputs for the HumidAir class

Unit safety

All calculations of thermophysical properties are unit safe (thanks to UnitsNet). This allows you to avoid errors associated with incorrect dimensions of quantities, and will help you save a lot of time on their search and elimination. In addition, you will be able to convert all values to many other dimensions without the slightest difficulty.

List of properties

For the Fluid and Mixture instances:

  • Compressibility - compressibility factor (dimensionless)
  • Conductivity - thermal conductivity (by default, W/m/K)
  • CriticalPressure - absolute pressure at the critical point (by default, kPa)
  • CriticalTemperature - temperature at the critical point (by default, °C)
  • Density - mass density (by default, kg/m3)
  • DynamicViscosity - dynamic viscosity (by default, mPa*s)
  • Enthalpy - mass specific enthalpy (by default, kJ/kg)
  • Entropy - mass specific entropy (by default, kJ/kg/K)
  • FreezingTemperature - temperature at freezing point (for incompressible fluids) (by default, °C)
  • InternalEnergy - mass specific internal energy (by default, kJ/kg)
  • MaxPressure - maximum pressure limit (by default, kPa)
  • MaxTemperature - maximum temperature limit (by default, °C)
  • MinPressure - minimum pressure limit (by default, kPa)
  • MinTemperature - minimum temperature limit (by default, °C)
  • MolarMass - molar mass (by default, g/mol)
  • Phase - phase (enum)
  • Prandtl - Prandtl number (dimensionless)
  • Pressure - absolute pressure (by default, kPa)
  • Quality - mass vapor quality (by default, %)
  • SoundSpeed - sound speed (by default, m/s)
  • SpecificHeat - mass specific constant pressure specific heat (by default, kJ/kg/K)
  • SurfaceTension - surface tension (by default, N/m)
  • Temperature - temperature (by default, °C)
  • TriplePressure - absolute pressure at the triple point (by default, kPa)
  • TripleTemperature - temperature at the triple point (by default, °C)

For the HumidAir instances:

  • Compressibility - compressibility factor (dimensionless)
  • Conductivity - thermal conductivity (by default, W/m/K)
  • Density - mass density per humid air unit (by default, kg/m3)
  • DewTemperature - dew-point temperature (by default, °C)
  • DynamicViscosity - dynamic viscosity (by default, mPa*s)
  • Enthalpy - mass specific enthalpy per humid air (by default, kJ/kg)
  • Entropy - mass specific entropy per humid air (by default, kJ/kg/K)
  • Humidity - absolute humidity ratio (by default, g/kg d.a.)
  • PartialPressure - partial pressure of water vapor (by default, kPa)
  • Pressure - absolute pressure (by default, kPa)
  • RelativeHumidity - relative humidity ratio (by default, %)
  • SpecificHeat - mass specific constant pressure specific heat per humid air (by default, kJ/kg/K)
  • Temperature - dry-bulb temperature (by default, °C)
  • WetBulbTemperature - wet-bulb temperature (by default, °C)

NB. If the required property is not present in the instance of the fluid, then you can add it by extending the Fluid, Mixture or HumidAir classes.

Examples

Pure fluids

To calculate the specific heat of saturated water vapour at 1 atm:

using System;
using SharpProp;
using UnitsNet.NumberExtensions.NumberToPressure;
using UnitsNet.NumberExtensions.NumberToRatio;
using UnitsNet.Units;
var waterVapour = new Fluid(FluidsList.Water);
waterVapour.Update(Input.Pressure((1).Atmospheres()), Input.Quality((100).Percent()));
Console.WriteLine(waterVapour.SpecificHeat.JoulesPerKilogramKelvin); // 2079.937085633241
Console.WriteLine(waterVapour.SpecificHeat);                         // 2.08 kJ/kg.K
Console.WriteLine(waterVapour.SpecificHeat
    .ToUnit(SpecificEntropyUnit.CaloriePerGramKelvin));              // 0.5 cal/g.K
Incompressible binary mixtures

To calculate the dynamic viscosity of propylene glycol aqueous solution with 60 % mass fraction at 100 kPa and -20 °C:

using System;
using SharpProp;
using UnitsNet.NumberExtensions.NumberToPressure;
using UnitsNet.NumberExtensions.NumberToRatio;
using UnitsNet.NumberExtensions.NumberToTemperature;
using UnitsNet.Units;
var propyleneGlycol = new Fluid(FluidsList.MPG, (60).Percent());
propyleneGlycol.Update(Input.Pressure((100).Kilopascals()), Input.Temperature((-20).DegreesCelsius()));
Console.WriteLine(propyleneGlycol.DynamicViscosity?.PascalSeconds); // 0.13907391053938878
Console.WriteLine(propyleneGlycol.DynamicViscosity);                // 139.07 mPa·s
Console.WriteLine(propyleneGlycol.DynamicViscosity?
    .ToUnit(DynamicViscosityUnit.Poise));                           // 1.39 P
Mixtures

To calculate the density of ethanol aqueous solution(with ethanol 40 % mass fraction) at 200 kPa and 277.15 K:

using System;
using System.Collections.Generic;
using SharpProp;
using UnitsNet;
using UnitsNet.NumberExtensions.NumberToPressure;
using UnitsNet.NumberExtensions.NumberToRatio;
using UnitsNet.NumberExtensions.NumberToTemperature;
using UnitsNet.Units;
var mixture = new Mixture(new List<FluidsList> {FluidsList.Water, FluidsList.Ethanol}, 
    new List<Ratio> {(60).Percent(), (40).Percent()});
mixture.Update(Input.Pressure((200).Kilopascals()), Input.Temperature((277.15).Kelvins()));
Console.WriteLine(mixture.Density.KilogramsPerCubicMeter);               // 883.3922771627759
Console.WriteLine(mixture.Density);                                      // 883.39 kg/m3
Console.WriteLine(mixture.Density.ToUnit(DensityUnit.GramPerDeciliter)); // 88.34 g/dl
Humid air

To calculate the wet bulb temperature of humid air at 99 kPa, 30 °C and 50 % relative humidity:

using System;
using SharpProp;
using UnitsNet.NumberExtensions.NumberToPressure;
using UnitsNet.NumberExtensions.NumberToRelativeHumidity;
using UnitsNet.NumberExtensions.NumberToTemperature;
using UnitsNet.Units;
var humidAir = new HumidAir();
humidAir.Update(InputHumidAir.Pressure((99).Kilopascals()), 
    InputHumidAir.Temperature((30).DegreesCelsius()), InputHumidAir.RelativeHumidity((50).Percent()));
// or use:
// var humidAir1 = 
//     HumidAir.WithState(InputHumidAir.Pressure((99).Kilopascals()), 
//         InputHumidAir.Temperature((30).DegreesCelsius()), InputHumidAir.RelativeHumidity((50).Percent()));
Console.WriteLine(humidAir.WetBulbTemperature.Kelvins); // 295.0965785590792
Console.WriteLine(humidAir.WetBulbTemperature);         // 21.95 °C
Console.WriteLine(humidAir.WetBulbTemperature
    .ToUnit(TemperatureUnit.DegreeFahrenheit));         // 71.5 °F
Converting to JSON string

For example, converting the Fluid instance to indented JSON string:

using System;
using SharpProp;
using UnitsNet.NumberExtensions.NumberToRatio;
using UnitsNet.NumberExtensions.NumberToTemperature;
var refrigerant = new Fluid(FluidsList.R32);
refrigerant.Update(Input.Temperature((5).DegreesCelsius()), Input.Quality((100).Percent()));
Console.WriteLine(refrigerant.AsJson());

As a result:

{
  "Name": "R32",
  "Fraction": {
    "Unit": "RatioUnit.Percent",
    "Value": 100.0
  },
  "Compressibility": 0.8266625877210833,
  "Conductivity": {
    "Unit": "ThermalConductivityUnit.WattPerMeterKelvin",
    "Value": 0.013435453854396475
  },
  "CriticalPressure": {
    "Unit": "PressureUnit.Kilopascal",
    "Value": 5782.0
  },
  "CriticalTemperature": {
    "Unit": "TemperatureUnit.DegreeCelsius",
    "Value": 78.10500000000002
  },
  "Density": {
    "Unit": "DensityUnit.KilogramPerCubicMeter",
    "Value": 25.89088151061046
  },
  "DynamicViscosity": {
    "Unit": "DynamicViscosityUnit.MillipascalSecond",
    "Value": 0.012606543144761657
  },
  "Enthalpy": {
    "Unit": "SpecificEnergyUnit.KilojoulePerKilogram",
    "Value": 516.1057800378023
  },
  "Entropy": {
    "Unit": "SpecificEntropyUnit.KilojoulePerKilogramKelvin",
    "Value": 2.1362654412978777
  },
  "FreezingTemperature": null,
  "InternalEnergy": {
    "Unit": "SpecificEnergyUnit.KilojoulePerKilogram",
    "Value": 479.35739743435374
  },
  "MaxPressure": {
    "Unit": "PressureUnit.Kilopascal",
    "Value": 70000.0
  },
  "MaxTemperature": {
    "Unit": "TemperatureUnit.DegreeCelsius",
    "Value": 161.85000000000002
  },
  "MinPressure": {
    "Unit": "PressureUnit.Kilopascal",
    "Value": 0.04799989387605937
  },
  "MinTemperature": {
    "Unit": "TemperatureUnit.DegreeCelsius",
    "Value": -136.80999999999997
  },
  "MolarMass": {
    "Unit": "MolarMassUnit.GramPerMole",
    "Value": 52.024
  },
  "Phase": "TwoPhase",
  "Prandtl": 1.2252282243443504,
  "Pressure": {
    "Unit": "PressureUnit.Kilopascal",
    "Value": 951.448019691762
  },
  "Quality": {
    "Unit": "RatioUnit.Percent",
    "Value": 100.0
  },
  "SoundSpeed": {
    "Unit": "SpeedUnit.MeterPerSecond",
    "Value": 209.6337575990297
  },
  "SpecificHeat": {
    "Unit": "SpecificEntropyUnit.KilojoulePerKilogramKelvin",
    "Value": 1.3057899441785379
  },
  "SurfaceTension": {
    "Unit": "ForcePerLengthUnit.NewtonPerMeter",
    "Value": 0.010110117241546162
  },
  "Temperature": {
    "Unit": "TemperatureUnit.DegreeCelsius",
    "Value": 5.0
  },
  "TriplePressure": {
    "Unit": "PressureUnit.Kilopascal",
    "Value": 0.04799989387605937
  },
  "TripleTemperature": {
    "Unit": "TemperatureUnit.DegreeCelsius",
    "Value": -136.80999999999997
  }
}
Equality of instances

You can simply determine the equality of Fluid, Mixture and HumidAir instances by its state. Just use the Equalsmethod or the equality operators (== or !=). Exactly the same way you can compare inputs (Input, InputHumidAir or any IKeyedInput record).

For example:

using System;
using SharpProp;
using UnitsNet.NumberExtensions.NumberToPressure;
using UnitsNet.NumberExtensions.NumberToRelativeHumidity;
using UnitsNet.NumberExtensions.NumberToTemperature;
var humidAir = HumidAir.WithState(InputHumidAir.Pressure((1).Atmospheres()),
    InputHumidAir.Temperature((20).DegreesCelsius()), InputHumidAir.RelativeHumidity((50).Percent()));
var humidAirWithSameState = HumidAir.WithState(InputHumidAir.Pressure((101325).Pascals()),
    InputHumidAir.Temperature((293.15).Kelvins()), InputHumidAir.RelativeHumidity((50).Percent()));
Console.WriteLine(humidAir == humidAirWithSameState);               // true
Console.WriteLine(InputHumidAir.Pressure((1).Atmospheres()) == 
                  InputHumidAir.Pressure((101.325).Kilopascals())); // true
Adding other properties
Adding other inputs

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.0.4 0 10/26/2021
3.0.3 149 10/24/2021
3.0.2 146 10/23/2021
3.0.1 48 10/22/2021
3.0.0 56 10/21/2021
2.0.4 49 10/18/2021
2.0.3 109 10/17/2021
2.0.2 51 10/15/2021
2.0.1 61 10/5/2021
2.0.0 49 9/27/2021
1.1.0 107 9/18/2021
1.0.6 47 9/18/2021
1.0.5 94 9/15/2021
1.0.4 43 9/15/2021
1.0.3 54 9/15/2021
1.0.2 45 9/15/2021
1.0.1 106 9/12/2021

Documentation update