basic tools and definitions of quantities in thermofluids problems
The purpose of this package is to enable easy setup of quantities in thermofluids problems. It contains
- A large set of specialized types based on common thermofluid quantities
(e.g.
Velocity
,Pressure
, etc) that enable dispatch on these quantities - Treatment of typical units, using the Unitful package.
- Predefined properties for various common gases and liquids
- Plot recipes for the associated types
We can set the value of a quantity through a simple interface, specifying in units with the Unitful interface, or without units, so that it obtains the default units of the quantity. E.g., pressure has default units of Pascals, so we can set it in, say, atmospheres and it will convert it automatically, or we can just supply a number:
Pressure(1u"atm")
Pressure(50)
Quantities of the same units can be added or subtracted, e.g.,
p = Pressure(1u"atm") + StagnationPressure(3u"atm")
The result of this operation is just a Unitful quantity. This can then be wrapped by a type with the same units:
Pressure(p)
All quantities in this package are typed and are subtypes of either DimensionalPhysicalQuantity
or DimensionlessPhysicalQuantity
. These are
both subtypes of PhysicalQuantity
.
Pressure <: DimensionalPhysicalQuantity
Quantities with the same units but different names are of different types, so dispatch can distinguish them:
f(::Pressure) = "I am pressure!"
f(Pressure(5))
but this would fail:
f(StagnationPressure(2.5))
If we supply a ratio of quantities that are dimensionally compatible but are in disparate units, any non-dimensional variable will automatically convert to common units in performing the ratio and provide a truly dimensionless number, e.g.,
ReynoldsNumber(5u"ft/s"*1u"cm"/KinematicViscosity(0.1))
In this example, KinematicViscosity(0.1)
assumes the given value is in default units (m^2/s). Note that we also demonstrated in this example
that operations with a PhysicalQuantity
can be mixed with Unitful.Quantity
types.
If you don't have a name for a dimensionless parameter, then DimensionlessParameter
is a catch-all, e.g.,
v = Velocity(1u"m/s")
vref = Velocity(5u"m/s")
DimensionlessParameter(v/vref)
The list of predefined dimensional quantities is returned with
ThermofluidQuantities.dimvartypes
and non-dimensional variables with
ThermofluidQuantities.nondimvartypes
It is simple to define a new quantity and use it. For example, a non-dimnesional variable
@nondimvar MyDimensionlessNumber
MyDimensionlessNumber(25.3)
or a new dimensional quantity
@dimvar MyTimeVar TimeType
MyTimeVar(2.3u"minute")
The second argument represents a 'unit type' for time, a union of types with time units. This comes with a default unit (seconds). To see the list of predefined unit types
ThermofluidQuantities.unittypes
If you don't see the one you want, then add it with @displayedunits
import ThermofluidQuantities: ๐, ๐
@displayedunits MyInverseVelocityType "s/m" ๐/๐
Then you can create a quantity:
@dimvar MyInverseVelocityVar MyInverseVelocityType
MyInverseVelocityVar(8u"minute/mi")
There are several predefined properties for gases and liquids. You can see the lists here:
ThermofluidQuantities.gases
and
ThermofluidQuantities.liquids
For example, to see the properties of air,
Air
You can access any of the properties individually with, e.g.,
Viscosity(Air)
SpecificHeatRatio(Air)