docs: def _disc_kn(clearness_index, airmass, max_airmass=12):
      """
      Calculate Kn for `disc`
  
      Args:
          clearness_index : numeric
          airmass : numeric
          max_airmass : float
              airmass > max_airmass is set to max_airmass before being used
              in calculating Kn.
  
      Returns:
          Kn : numeric
          am : numeric
              airmass used in the calculation of Kn. am <= max_airmass.
      """
      # short names for equations
      kt = clearness_index
      am = airmass
  
      am = min(am, max_airmass)  # GH 450
  
      # powers of kt will be used repeatedly, so compute only once
      kt2 = kt * kt  # about the same as kt ** 2
      kt3 = kt2 * kt  # 5-10x faster than kt ** 3
  
      if kt <= 0.6:
          a = 0.512 - 1.56*kt + 2.286*kt2 - 2.222*kt3
          b = 0.37 + 0.962*kt
          c = -0.28 + 0.932*kt - 2.048*kt2
      else:
          a = -5.743 + 21.77*kt - 27.49*kt2 + 11.56*kt3
          b = 41.4 - 118.5*kt + 66.05*kt2 + 31.9*kt3
          c = -47.01 + 184.2*kt - 222.0*kt2 + 73.81*kt3
  
      delta_kn = a + b * math.exp(c*am)
  
      Knc = 0.866 - 0.122*am + 0.0121*am**2 - 0.000653*am**3 + 1.4e-05*am**4
      Kn = Knc - delta_kn
      return Kn, am