Webel: Psy/MPsy: Psychrometrics for Mathematica: The default MPsy class is a readonly one-shot class that pre-builds many frequently used psychrometric properties (offered as public fields) using CoolProp, and also offers some value-adding methods.

Webel IT Australia promotes the amazing Mathematica tool and the powerful Wolfram Language and offers professional Mathematica services for computational computing and data analysis. Our Mathematica tips, issue tracking, and wishlist is offered here most constructively to help improve the tool and language and support the Mathematica user community.
DISCLAIMER: Wolfram Research does not officially endorse analysis by Webel IT Australia.
Icon class
far fa-sticky-note
far fa-sticky-note
Note kind
Policy level

The Webel MPsy MTools class for psychrometrics in Mathematica is intended for use as "one-shot" readonly objects. Frequently used psychrometric values are pre-calculated in the newPsy[tdb] builder function for rapid access, and are available as populated public fields, which are then available to downstream psychrometrics calculations.

This approach offers a trade-off between performance (not every pre-populated field might be used in every calculation scenario, so some CoolProp calls made during construction might be unnecessary), and convenience.

Some additional derived properties are available via accessor methods (which may cascade):

MPsy.dda[] :=  1. / (M`o.vda);

MPsy.hPerVol[] := M`o.hda M`o.dda[];

Some additional derived properties available via methods require additional CoolProp wrapper calls, such as for obtaining the specific heat capacity per dry air:

MPsy.cpDa[] := propHA$Cp[M`o.tdb, M`o.p, M`o.r];

Some additional derived quantities are available via public methods that take arguments for external quantities:

MPsy.mDotDa[vfr_Quantity] := UnitConvert[vfr,$unitVFR] / (M`o.vda);

In the example above, $unitVFR is a convenient String for the units of volumetric flow rate in SI. Internally, MPsy uses SI units, so it knows vda is already an SI Quantity.

The values of the public fields of MPsy may also be accessed via corresponding accessor methods, which share a common API with the MPsyLazy implementation, which does not offer public fields and only populates privately held fields via lazy accessor methods as required, to reduce calls to CoolProp.

For example, the same value as the public field MPsy.hda (specific enthalpy per dry air) may be accessed uniformly via methods MPsy.hda[] or MPsyLazy.hda[].

The MPsyLazy implementation is faster during construction but comes with the slight overhead of If checks during lazy fetching.

MPsy and MPsyLazy implement the methods of the common abstract IPsy "interface". So functions that accept IPsy arguments can be robustly used with objects of either class (design by contract). However, type checking in MTools is expensive!

Relates to
Related notes
Related notes (backlinks)
Related snippets (extracts)
Visit also
Visit also (backlinks)
External links