docs: def dP_packed_bed(dp, voidage, vs, rho, mu, L=1, Dt=None, sphericity=None,
                    Method=None, AvailableMethods=False):
      r'''This function handles choosing which pressure drop in a packed bed
      correlation is used. Automatically select which correlation
      to use if none is provided. Returns None if insufficient information is
      provided.
  
      Preferred correlations are 'Erdim, Akgiray & Demir' when tube
      diameter is not provided, and 'Harrison, Brunner & Hecker' when tube
      diameter is provided. If you are using a particles in a narrow tube 
      between 2 and 3 particle diameters, expect higher than normal voidages 
      (0.4-0.5) and used the method 'Guo, Sun, Zhang, Ding & Liu'.
  
      Examples
      --------
      >>> dP_packed_bed(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3)
      1438.2826958844414
      >>> dP_packed_bed(dp=8E-4, voidage=0.4, vs=1E-3, rho=1E3, mu=1E-3, Dt=0.01)
      1255.1625662548427
      >>> dP_packed_bed(dp=0.05, voidage=0.492, vs=0.1, rho=1E3, mu=1E-3, Dt=0.015, Method='Guo, Sun, Zhang, Ding & Liu')
      18782.499710673364
  
      Parameters
      ----------
      dp : float
          Particle diameter of spheres [m]
      voidage : float
          Void fraction of bed packing [-]
      vs : float
          Superficial velocity of the fluid (volumetric flow rate/cross-sectional 
          area) [m/s]
      rho : float
          Density of the fluid [kg/m^3]
      mu : float
          Viscosity of the fluid, [Pa*s]
      L : float, optional
          Length the fluid flows in the packed bed [m]
      Dt : float, optional
          Diameter of the tube, [m]
      sphericity : float, optional
          Sphericity of the particles [-]
  
      Returns
      -------
      dP : float
          Pressure drop across the bed [Pa]
      methods : list, only returned if AvailableMethods == True
          List of methods which can be used to calculate `dP` with the given inputs
  
      Other Parameters
      ----------------
      Method : string, optional
          A string of the function name to use, as in the dictionary
          packed_beds_correlations
      AvailableMethods : bool, optional
          If True, function will consider which methods which can be used to
          calculate `dP` with the given inputs and return them as a list
      '''
      def list_methods():
          methods = []
          if all((dp, voidage, vs, rho, mu, L)):
              for key, values in packed_beds_correlations.items():
                  if Dt or not values[1]:
                      methods.append(key)
          if 'Harrison, Brunner & Hecker' in methods:
              methods.remove('Harrison, Brunner & Hecker')
              methods.insert(0, 'Harrison, Brunner & Hecker')
          elif 'Erdim, Akgiray & Demir' in methods:
              methods.remove('Erdim, Akgiray & Demir')
              methods.insert(0, 'Erdim, Akgiray & Demir')
          return methods
  
      if AvailableMethods:
          return list_methods()
      if not Method:
          Method = list_methods()[0]
  
      if dp and sphericity:
          dp = dp*sphericity
      if Method in packed_beds_correlations:
          if packed_beds_correlations[Method][1]:
              return packed_beds_correlations[Method][0](dp=dp, voidage=voidage, vs=vs, rho=rho, mu=mu, L=L, Dt=Dt)
          else:
              return packed_beds_correlations[Method][0](dp=dp, voidage=voidage, vs=vs, rho=rho, mu=mu, L=L)
      else:
          raise Exception('Failure in in function')