"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
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#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
void f(const quantity,Y>& arg);
where you use derived_dimension to define the dimension list Dim for your units.
Matthias
If