docs: def Stephan_Abdelsalam(rhol, rhog, mul, kl, Cpl, Hvap, sigma, Tsat, Te=None, 
                         q=None, kw=401, rhow=8.96, Cpw=384, angle=None, 
                         correlation='general'):
      r'''Calculates heat transfer coefficient for a evaporator operating
      in the nucleate boiling regime according to [2]_ as presented in [1]_.
      Five variants are possible.
  
      Either heat flux or excess temperature is required. The forms for `Te` are
      not shown here, but are similar to those of the other functions.
  
      .. math::
          h = 0.23X_1^{0.674} X_2^{0.35} X_3^{0.371} X_5^{0.297} X_8^{-1.73} k_L/d_B
  
          X1 = \frac{q D_d}{K_L T_{sat}}
  
          X2 = \frac{\alpha^2 \rho_L}{\sigma D_d}
  
          X3 = \frac{C_{p,L} T_{sat} D_d^2}{\alpha^2}
  
          X4 = \frac{H_{vap} D_d^2}{\alpha^2}
  
          X5 = \frac{\rho_V}{\rho_L}
  
          X6 = \frac{C_{p,l} \mu_L}{k_L}
  
          X7 = \frac{\rho_W C_{p,W} k_W}{\rho_L C_{p,L} k_L}
  
          X8 = \frac{\rho_L-\rho_V}{\rho_L}
  
          D_b = 0.0146\theta\sqrt{\frac{2\sigma}{g(\rho_L-\rho_g)}}
  
      Respectively, the following four correlations are for water, hydrocarbons,
      cryogenic fluids, and refrigerants.
  
      .. math::
          h = 0.246\times 10^7 X1^{0.673} X4^{-1.58} X3^{1.26}X8^{5.22}k_L/d_B
  
          h = 0.0546 X5^{0.335} X1^{0.67} X8^{-4.33} X4^{0.248}k_L/d_B
  
          h = 4.82 X1^{0.624} X7^{0.117} X3^{0.374} X4^{-0.329}X5^{0.257} k_L/d_B
  
          h = 207 X1^{0.745} X5^{0.581} X6^{0.533} k_L/d_B
  
      Parameters
      ----------
      rhol : float
          Density of the liquid [kg/m^3]
      rhog : float
          Density of the produced gas [kg/m^3]
      mul : float
          Viscosity of liquid [Pa*s]
      kl : float
          Thermal conductivity of liquid [W/m/K]
      Cpl : float
          Heat capacity of liquid [J/kg/K]
      Hvap : float
          Heat of vaporization of the fluid at P, [J/kg]
      sigma : float
          Surface tension of liquid [N/m]
      Tsat : float
          Saturation temperature at operating pressure [Pa]
      Te : float, optional
          Excess wall temperature, [K]
      q : float, optional
          Heat flux, [W/m^2]
      kw : float, optional
          Thermal conductivity of wall (only for cryogenics) [W/m/K]
      rhow : float, optional
          Density of the wall (only for cryogenics) [kg/m^3]
      Cpw : float, optional
          Heat capacity of wall (only for cryogenics) [J/kg/K]
      angle : float, optional
          Contact angle of bubble with wall [degrees]
      correlation : str, optional
          Any of 'general', 'water', 'hydrocarbon', 'cryogenic', or 'refrigerant'
  
      Returns
      -------
      h : float
          Heat transfer coefficient [W/m^2/K]
  
      Notes
      -----
      If cryogenic correlation is selected, metal properties are used. Default
      values are the properties of copper at STP.
  
      The angle is selected automatically if a correlation is selected; if angle
      is provided anyway, the automatic selection is ignored. A IndexError
      exception is raised if the correlation is not in the dictionary
      _angles_Stephan_Abdelsalam.
  
      Examples
      --------
      Example is from [3]_ and matches.
  
      >>> Stephan_Abdelsalam(Te=16.2, Tsat=437.5, Cpl=2730., kl=0.086, mul=156E-6,
      ... sigma=0.0082, Hvap=272E3, rhol=567, rhog=18.09, angle=35)
      26722.441071108373
  
      References
      ----------
      .. [1] Cao, Eduardo. Heat Transfer in Process Engineering.
         McGraw Hill Professional, 2009.
      .. [2] Stephan, K., and M. Abdelsalam. "Heat-Transfer Correlations for
         Natural Convection Boiling." International Journal of Heat and Mass
         Transfer 23, no. 1 (January 1980): 73-87.
         doi:10.1016/0017-9310(80)90140-4.
      .. [3] Serth, R. W., Process Heat Transfer: Principles,
         Applications and Rules of Thumb. 2E. Amsterdam: Academic Press, 2014.
      '''
      if Te is None and q is None:
          raise Exception('Either q or Te is needed for this correlation')
      angle = _angles_Stephan_Abdelsalam[correlation]
  
      db = 0.0146*angle*(2*sigma/g/(rhol-rhog))**0.5
      diffusivity_L = kl/rhol/Cpl
  
      if Te:
          X1 = db/kl/Tsat*Te
      else:
          X1 = db/kl/Tsat*q
      X2 = diffusivity_L**2*rhol/sigma/db
      X3 = Hvap*db**2/diffusivity_L**2
      X4 = Hvap*db**2/diffusivity_L**2
      X5 = rhog/rhol
      X6 = Cpl*mul/kl
      X7 = rhow*Cpw*kw/(rhol*Cpl*kl)
      X8 = (rhol-rhog)/rhol
  
      if correlation == 'general':
          if Te:
              h = (0.23*X1**0.674*X2**0.35*X3**0.371*X5**0.297*X8**-1.73*kl/db)**(1/0.326)
          else:
              h = (0.23*X1**0.674*X2**0.35*X3**0.371*X5**0.297*X8**-1.73*kl/db)
      elif correlation == 'water':
          if Te:
              h = (0.246E7*X1**0.673*X4**-1.58*X3**1.26*X8**5.22*kl/db)**(1/0.327)
          else:
              h = (0.246E7*X1**0.673*X4**-1.58*X3**1.26*X8**5.22*kl/db)
      elif correlation == 'hydrocarbon':
          if Te:
              h = (0.0546*X5**0.335*X1**0.67*X8**-4.33*X4**0.248*kl/db)**(1/0.33)
          else:
              h = (0.0546*X5**0.335*X1**0.67*X8**-4.33*X4**0.248*kl/db)
      elif correlation == 'cryogenic':
          if Te:
              h = (4.82*X1**0.624*X7**0.117*X3**0.374*X4**-0.329*X5**0.257*kl/db)**(1/0.376)
          else:
              h = (4.82*X1**0.624*X7**0.117*X3**0.374*X4**-0.329*X5**0.257*kl/db)
      else:
          if Te:
              h = (207*X1**0.745*X5**0.581*X6**0.533*kl/db)**(1/0.255)
          else:
              h = (207*X1**0.745*X5**0.581*X6**0.533*kl/db)
      return h