#ifndef FRICTIONFACTOR_HH
#define FRICTIONFACTOR_HH
#include <iostream>
#include <cmath>
#include "constants.hh" // ReL, ReT
#include "fade.hh"
inline double
frictionfactor(const double Re, const double r) {
if (0.0 == Re) {
return 0.0;
}
else if (ReL >= Re) { // laminar flow
return 16.0 / Re; // using k = 4.f.(l/d)
} else if (ReT <= Re) { // turbulent flow
/* S.E.Haaland
* Simple and explicit formulas for the friction factor in turbulent pipe flow
* Journal of Fluids Engineering, 105 (1983)
*/
double A = 6.91 / Re;
double B = pow((r / 3.71), 1.11);
double f = pow(-3.6 * log10(A + B), -2);
return f;
} else { // transition region
double ffL = frictionfactor(ReL, r);
double ffT = frictionfactor(ReT, r);
return fade(Re, ReL, ReT, ffL, ffT);
}
}
#endif // FRICTIONFACTOR_HH