
"The flow coefficient is Q/sqrt(dP), a volumetric flow/sqrt(pressure)."
The units, specifically, are:
Kv = (m3/h)/sqrt(bar) Cv = (usgal/min)/sqrt(psi)
#include <boost/units/io.hpp> #include <boost/units/pow.hpp> #include <boost/units/base_units/metric/bar.hpp> #include <boost/units/base_units/metric/hour.hpp> #include <boost/units/base_units/metric/minute.hpp> #include <boost/units/base_units/us/gallon.hpp> #include <boost/units/base_units/us/inch.hpp> #include <boost/units/base_units/us/pound_force.hpp> #include <boost/units/systems/si/length.hpp> #include <boost/units/systems/si/pressure.hpp> #include <boost/units/systems/si/time.hpp> #include <boost/units/systems/si/volume.hpp> #include <iostream> namespace boost { namespace units { namespace us { typedef pound_force_base_unit::unit_type pound_force; typedef inch_base_unit::unit_type inch; } // namespace us } // namespace units } // namespace boost using namespace boost::units; typedef typeof(us::pound_force()/pow<2>(us::inch())) psi; typedef typeof(si::cubic_meter/metric::hour_base_unit::unit_type()/root<2>(metric::bar_base_unit::unit_type())) Kv; typedef typeof(us::gallon_base_unit::unit_type()/metric::minute_base_unit::unit_type()/root<2>(us::pound_force()/pow<2>(us::inch()))) Cv; void f1(const quantity<Kv>& arg) { std::cout << arg << std::endl; } int main(void) { std::cout << 1.0*Kv() << std::endl; std::cout << 1.0*Cv() << std::endl; f1(1.0*Kv()); f1(quantity<Kv>(1.0*Cv())); } gives 1 m^3 h^-1 bar^(-1/2) 1 lbf^(-1/2) gal in min^-1 1 m^3 h^-1 bar^(-1/2) 0.864978 m^3 h^-1 bar^(-1/2) You need a compiler that supports typeof for this to work... If you want a function that will take any quantity that is dimensionally-equivalent to (volumetric flow/sqrt(pressure)) then you will have to template it something like this : template<class Y,class System> void f(const quantity<unit<Dim,System>,Y>& arg); where you use derived_dimension to define the dimension list Dim for your units. Matthias If