SharpProp 3.2.1
See the version list below for details.
dotnet add package SharpProp --version 3.2.1
NuGet\Install-Package SharpProp -Version 3.2.1
<PackageReference Include="SharpProp" Version="3.2.1" />
paket add SharpProp --version 3.2.1
#r "nuget: SharpProp, 3.2.1"
// Install SharpProp as a Cake Addin #addin nuget:?package=SharpProp&version=3.2.1 // Install SharpProp as a Cake Tool #tool nuget:?package=SharpProp&version=3.2.1
A simple, full-featured, lightweight, cross-platform CoolProp wrapper for C#.
Overview
- Project structure
- Unit safety
- List of properties
- Examples
- Equality of instances
- Converting to a JSON string
- Deep cloning
- Adding other properties
- Adding other inputs
Project structure
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 theFluid
andMixture
classes.HumidAir
class - for humid air.InputHumidAir
record - inputs for theHumidAir
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 instances of Fluid
and Mixture
:
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).KinematicViscosity
- kinematic viscosity (by default, cSt).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 state (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 instances of HumidAir
:
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.).KinematicViscosity
- kinematic viscosity (by default, cSt).PartialPressure
- partial pressure of water vapor (by default, kPa).Prandtl
- Prandtl number (dimensionless).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 (see how to add other properties).
Examples
Pure fluids
To calculate the specific heat of saturated water vapor 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
Equality of instances
You can simply determine the equality of Fluid
, Mixture
and HumidAir
instances by its state.
Just use the Equals
method 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
Converting to a JSON string
The Fluid
, Mixture
and HumidAir
classes have an extension method AsJson
,
which performs converting of instance to a JSON string.
For example, converting a Fluid
instance to an indented JSON string:
using System;
using SharpProp;
using SharpProp.Extensions;
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
}
}
Deep cloning
The Fluid
, Mixture
and HumidAir
classes have an extension method Clone
,
which performs deep (full) copy of instance:
using System;
using SharpProp;
using SharpProp.Extensions;
using UnitsNet.NumberExtensions.NumberToPressure;
using UnitsNet.NumberExtensions.NumberToTemperature;
var water = new Fluid(FluidsList.Water);
water.Update(Input.Pressure((1).Atmospheres()), Input.Temperature((20).DegreesCelsius()));
var clone = water.Clone();
Console.WriteLine(water == clone); // true
water.Update(Input.Pressure((1).Atmospheres()), Input.Temperature((30).DegreesCelsius()));
Console.WriteLine(water == clone); // false
Adding other properties
Adding other inputs
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net5.0
- DeepCloner (>= 0.10.3)
- Newtonsoft.Json (>= 13.0.1)
- UnitsNet (>= 4.127.0)
- UnitsNet.NumberExtensions (>= 4.127.0)
- UnitsNet.Serialization.JsonNet (>= 4.5.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on SharpProp:
Package | Downloads |
---|---|
VCRC
Cross-platform vapor-compression refrigeration cycles analysis tool |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
7.3.0 | 407 | 10/3/2024 |
7.2.11 | 830 | 8/29/2024 |
7.2.10 | 784 | 7/2/2024 |
7.2.9 | 418 | 6/11/2024 |
7.2.8 | 875 | 3/19/2024 |
7.2.7 | 589 | 2/21/2024 |
7.2.6 | 310 | 1/19/2024 |
7.2.4 | 203 | 1/16/2024 |
7.2.3 | 305 | 12/27/2023 |
7.2.2 | 234 | 12/20/2023 |
7.2.1 | 303 | 12/10/2023 |
7.2.0 | 275 | 11/30/2023 |
7.1.0 | 315 | 11/15/2023 |
7.0.6 | 190 | 11/10/2023 |
7.0.5 | 363 | 10/11/2023 |
7.0.4 | 356 | 9/26/2023 |
7.0.3 | 351 | 9/6/2023 |
7.0.2 | 347 | 8/31/2023 |
7.0.1 | 226 | 8/30/2023 |
7.0.0 | 394 | 8/4/2023 |
6.0.4 | 1,151 | 3/18/2023 |
6.0.3 | 367 | 3/10/2023 |
6.0.2 | 408 | 3/5/2023 |
6.0.1 | 437 | 2/26/2023 |
6.0.0 | 492 | 2/18/2023 |
5.0.0 | 1,055 | 12/4/2022 |
4.4.1 | 5,302 | 11/21/2022 |
4.4.0 | 473 | 11/15/2022 |
4.3.3 | 636 | 11/7/2022 |
4.3.2 | 533 | 11/2/2022 |
4.3.1 | 690 | 9/12/2022 |
4.2.5 | 615 | 9/5/2022 |
4.2.4 | 646 | 8/17/2022 |
4.2.3 | 642 | 8/5/2022 |
4.2.2 | 634 | 7/22/2022 |
4.2.1 | 668 | 7/4/2022 |
4.2.0 | 667 | 6/29/2022 |
4.1.0 | 459 | 6/27/2022 |
4.0.3 | 871 | 6/22/2022 |
4.0.2 | 644 | 6/14/2022 |
4.0.1 | 663 | 6/7/2022 |
4.0.0 | 557 | 5/27/2022 |
3.2.4 | 579 | 5/7/2022 |
3.2.3 | 726 | 4/24/2022 |
3.2.2 | 864 | 4/6/2022 |
3.2.1 | 711 | 4/4/2022 |
3.2.0 | 735 | 3/22/2022 |
3.1.19 | 680 | 3/11/2022 |
3.1.18 | 685 | 3/4/2022 |
3.1.17 | 652 | 3/1/2022 |
3.1.16 | 668 | 2/17/2022 |
3.1.15 | 656 | 2/12/2022 |
3.1.14 | 728 | 1/29/2022 |
3.1.13 | 410 | 1/10/2022 |
3.1.11 | 559 | 12/8/2021 |
3.1.10 | 477 | 12/5/2021 |
3.1.9 | 1,535 | 11/28/2021 |
3.1.8 | 426 | 11/27/2021 |
3.1.7 | 3,312 | 11/25/2021 |
3.1.6 | 311 | 11/23/2021 |
3.1.4 | 363 | 11/16/2021 |
3.1.3 | 357 | 11/13/2021 |
3.1.2 | 426 | 11/6/2021 |
3.1.1 | 394 | 11/5/2021 |
3.1.0 | 404 | 10/29/2021 |
3.0.4 | 371 | 10/26/2021 |
3.0.3 | 483 | 10/24/2021 |
3.0.2 | 473 | 10/23/2021 |
3.0.1 | 378 | 10/22/2021 |
3.0.0 | 403 | 10/21/2021 |
2.0.4 | 382 | 10/18/2021 |
2.0.3 | 424 | 10/17/2021 |
2.0.2 | 364 | 10/15/2021 |
2.0.1 | 361 | 10/5/2021 |
2.0.0 | 356 | 9/27/2021 |
1.1.0 | 422 | 9/18/2021 |
1.0.6 | 344 | 9/18/2021 |
1.0.5 | 433 | 9/15/2021 |
1.0.4 | 370 | 9/15/2021 |
1.0.3 | 389 | 9/15/2021 |
1.0.2 | 366 | 9/15/2021 |
1.0.1 | 438 | 9/12/2021 |
- Bump UnitsNet from 4.126.0 to 4.127.0.
- Bump UnitsNet.NumberExtensions from 4.126.0 to 4.127.0.