docs: def Darby3K(NPS=None, Re=None, name=None, K1=None, Ki=None, Kd=None):
      r'''Returns loss coefficient for any various fittings, depending
      on the name input. Alternatively, the Darby constants K1, Ki and Kd
      may be provided and used instead. Source of data is [1]_.
      Reviews of this model are favorable.
  
      .. math::
          K_f = \frac{K_1}{Re} + K_i\left(1 + \frac{K_d}{D_{\text{NPS}}^{0.3}}
          \right)
  
      Note this model uses nominal pipe diameter in inches.
      
      Parameters
      ----------
      NPS : float
          Nominal diameter of the pipe, [in]
      Re : float
          Reynolds number, [-]
      name : str
          String from Darby dict representing a fitting
      K1 : float
          K1 parameter of Darby model, optional [-]
      Ki : float
          Ki parameter of Darby model, optional [-]
      Kd : float
          Kd parameter of Darby model, optional [in]
  
      Returns
      -------
      K : float
          Loss coefficient [-]
  
      Notes
      -----
      Also described in Albright's Handbook and Ludwig's Applied Process Design.
      Relatively uncommon to see it used.
  
      The possibility of combining these methods with those above are attractive.
  
      Examples
      --------
      >>> Darby3K(NPS=2., Re=10000., name='Valve, Angle valve, 45°, full line size, β = 1')
      1.1572523963562353
      >>> Darby3K(NPS=12., Re=10000., K1=950,  Ki=0.25,  Kd=4)
      0.819510280626355
  
      References
      ----------
      .. [1] Silverberg, Peter, and Ron Darby. "Correlate Pressure Drops through
         Fittings: Three Constants Accurately Calculate Flow through Elbows,
         Valves and Tees." Chemical Engineering 106, no. 7 (July 1999): 101.
      .. [2] Silverberg, Peter. "Correlate Pressure Drops Through Fittings."
         Chemical Engineering 108, no. 4 (April 2001): 127,129-130.
      '''
      if name:
          if name in Darby:
              d = Darby[name]
              K1, Ki, Kd = d['K1'], d['Ki'], d['Kd']
          else:
              raise Exception('Name of fitting not in list')
      elif K1 and Ki and Kd:
          pass
      else:
          raise Exception('Name of fitting or constants are required')
      return K1/Re + Ki*(1. + Kd/NPS**0.3)