docs: def friction_factor_curved(Re, Di, Dc, roughness=0.0, Method=None, 
                             Rec_method='Schmidt', 
                             laminar_method='Schmidt laminar',
                             turbulent_method='Schmidt turbulent', Darcy=True, 
                             AvailableMethods=False):
      r'''Calculates friction factor fluid flowing in a curved pipe or helical
      coil, supporting both laminar and turbulent regimes. Selects the 
      appropriate regime by default, and has default correlation choices.
      Optionally, a specific correlation can be specified with the `Method` 
      keyword.
      
      The default correlations are those recommended in [1]_, and are believed to 
      be the best publicly available.
      
      Examples
      --------
      >>> friction_factor_curved(Re=1E5, Di=0.02, Dc=0.5)
      0.022961996738387523
  
      Parameters
      ----------
      Re : float
          Reynolds number with `D=Di`, [-]
      Di : float
          Inner diameter of the tube making up the coil, [m]
      Dc : float
          Diameter of the helix/coil measured from the center of the tube on one
          side to the center of the tube on the other side, [m]
      roughness : float, optional
          Roughness of pipe wall [m]        
  
      Returns
      -------
      f : float
          Friction factor, [-]
      methods : list, only returned if AvailableMethods == True
          List of methods in the regime the specified `Re` is in at the given
          `Di` and `Dc`.
  
      Other Parameters
      ----------------
      Method : string, optional
          A string of the function name to use, overriding the default turbulent/
          laminar selection.
      Rec_method : str, optional
          Critical Reynolds number transition criteria; one of ['Seth Stahel', 
          'Ito', 'Kubair Kuloor', 'Kutateladze Borishanskii', 'Schmidt', 
          'Srinivasan']; the default is 'Schmidt'.
      laminar_method : str, optional
          Friction factor correlation for the laminar regime; one of 
          ['White', 'Mori Nakayama laminar', 'Schmidt laminar']; the default is
          'Schmidt laminar'.
      turbulent_method : str, optional
          Friction factor correlation for the turbulent regime; one of 
          ['Guo', 'Ju', 'Schmidt turbulent', 'Prasad', 'Mandel Nigam', 
          'Mori Nakayama turbulent', 'Czop']; the default is 'Schmidt turbulent'.
      Darcy : bool, optional
          If False, will return fanning friction factor, 1/4 of the Darcy value
      AvailableMethods : bool, optional
          If True, function will consider which methods claim to be valid for
          the range of `Re` and `eD` given
      
      See Also
      --------
      fluids.geometry.HelicalCoil
      helical_turbulent_fd_Schmidt
      helical_turbulent_fd_Srinivasan
      helical_turbulent_fd_Mandal_Nigam
      helical_turbulent_fd_Ju
      helical_turbulent_fd_Guo
      helical_turbulent_fd_Czop
      helical_turbulent_fd_Prasad
      helical_turbulent_fd_Mori_Nakayama
      helical_laminar_fd_Schmidt
      helical_laminar_fd_Mori_Nakayama
      helical_laminar_fd_White
      helical_transition_Re_Schmidt
      helical_transition_Re_Srinivasan
      helical_transition_Re_Kutateladze_Borishanskii
      helical_transition_Re_Kubair_Kuloor
      helical_transition_Re_Ito
      helical_transition_Re_Seth_Stahel
  
      Notes
      -----
      The range of acccuracy of these correlations is much than that in a 
      straight pipe.    
      
      References
      ----------
      .. [1] Schlunder, Ernst U, and International Center for Heat and Mass
         Transfer. Heat Exchanger Design Handbook. Washington:
         Hemisphere Pub. Corp., 1983.
      '''
      if Rec_method in curved_friction_transition_methods:
          Re_crit = curved_friction_transition_methods[Rec_method](Di, Dc)
      else:
          raise Exception('Invalid method specified for transition Reynolds number.')
      
      turbulent = False if Re < Re_crit else True
      
      def list_methods():
          if turbulent:
              return list(curved_friction_turbulent_methods.keys())
          else:
              return list(curved_friction_laminar_methods.keys())
      if AvailableMethods:
          return list_methods()
      
      if not Method:
          Method = turbulent_method if turbulent else laminar_method
      
      if Method in curved_friction_laminar_methods:
          f = curved_friction_laminar_methods[Method](Re, Di, Dc)
      elif Method in curved_friction_turbulent_methods:
          correlation, supports_roughness = curved_friction_turbulent_methods[Method]
          if supports_roughness:
              f = correlation(Re, Di, Dc, roughness)
          else:
              f = correlation(Re, Di, Dc)
      else:
          raise Exception('Invalid method for friction factor calculation')
          
      if not Darcy:
          f *= 0.25
      return f