docs: def Ft_aircooler(Thi, Tho, Tci, Tco, Ntp=1, rows=1):
      r'''Calculates log-mean temperature difference correction factor for
      a crossflow heat exchanger, as in an Air Cooler. Method presented in [1]_,
      fit to other's nonexplicit work. Error is < 0.1%. Requires number of rows
      and tube passes as well as stream temperatures.
  
      .. math::
          F_T = 1 - \sum_{i=1}^m \sum_{k=1}^n a_{i,k}(1-r_{1,m})^k\sin(2i\arctan R)
  
          R = \frac{T_{hi} - T_{ho}}{T_{co}-T_{ci}}
  
          r_{1,m} = \frac{\Delta T_{lm}}{T_{hi} - T_{ci}}
  
      Parameters
      ----------
      Thi : float
          Temperature of hot fluid in [K]
      Tho : float
          Temperature of hot fluid out [K]
      Tci : float
          Temperature of cold fluid in [K]
      Tco : float
          Temperature of cold fluid out [K]
      Ntp : int
          Number of passes the tubeside fluid will flow through [-]
      rows : int
          Number of rows of tubes [-]
  
      Returns
      -------
      Ft : float
          Log-mean temperature difference correction factor [-]
  
      Notes
      -----
      This equation assumes that the hot fluid is tubeside, as in the case of air
      coolers. The model is not symmetric, so ensure to switch around the inputs
      if using this function for other purposes.
  
      This equation appears in [1]_. It has been verified.
      For some cases, approximations are made to match coefficients with the
      number of tube passes and rows provided.
      16 coefficients are used for each case; 8 cases are considered:
  
      * 1 row 1 pass
      * 2 rows 1 pass
      * 2 rows 2 passes
      * 3 rows 1 pass
      * 3 rows 3 passes
      * 4 rows 1 pass
      * 4 rows 2 passes
      * 4 rows 4 passes
  
      Examples
      --------
      >>> Ft_aircooler(Thi=125., Tho=45., Tci=25., Tco=95., Ntp=1, rows=4)
      0.5505093604092708
  
      References
      ----------
      .. [1] Roetzel, W., and F. J. L. Nicole. "Mean Temperature Difference for
         Heat Exchanger Design-A General Approximate Explicit Equation." Journal
         of Heat Transfer 97, no. 1 (February 1, 1975): 5-8.
         doi:10.1115/1.3450288
      '''
      dTlm = LMTD(Thi=Thi, Tho=Tho, Tci=Tci, Tco=Tco)
      rlm = dTlm/(Thi-Tci)
      R = (Thi-Tho)/(Tco-Tci)
  #    P = (Tco-Tci)/(Thi-Tci)
  
      if Ntp == 1 and rows == 1:
          coefs = _crossflow_1_row_1_pass
      elif Ntp == 1 and rows == 2:
          coefs = _crossflow_2_rows_1_pass
      elif Ntp == 1 and rows == 3:
          coefs = _crossflow_3_rows_1_pass
      elif Ntp == 1 and rows == 4:
          coefs = _crossflow_4_rows_1_pass
      elif Ntp == 1 and rows > 4:
          # A reasonable assumption
          coefs = _crossflow_4_rows_1_pass
      elif Ntp == 2 and rows == 2:
          coefs = _crossflow_2_rows_2_pass
      elif Ntp == 3 and rows == 3:
          coefs = _crossflow_3_rows_3_pass
      elif Ntp == 4 and rows == 4:
          coefs = _crossflow_4_rows_4_pass
      elif Ntp > 4 and rows > 4 and Ntp == rows:
          # A reasonable assumption
          coefs = _crossflow_4_rows_4_pass
      elif Ntp  == 2 and rows == 4:
          coefs = _crossflow_4_rows_2_pass
      else:
          # A bad assumption, but hey, gotta pick something.
          coefs = _crossflow_4_rows_2_pass
      tot = 0
      atanR = atan(R)
      cmps = range(len(coefs))
      for k in cmps:
          x0 = (1. - rlm)**(k + 1.)
          for i in cmps:
              tot += coefs[k][i]*x0*sin(2.*(i + 1.)*atanR)
      return 1. - tot