docs: def D_for_Ntubes_VDI(N, Ntp, Do, pitch, angle=30):
      r'''A rough equation presented in the VDI Heat Atlas for estimating
      the size of a tube bundle from a given number of tubes, number of tube
      passes, outer tube diameter, pitch, and arrangement.
      No accuracy estimation given.
  
      .. math::
          OTL = \sqrt{f_1 z t^2 + f_2 t \sqrt{z} - d_o}
  
      Parameters
      ----------
      N : float
          Number of tubes, [-]
      Ntp : float
          Number of tube passes, [-]
      Do : float
          Tube outer diameter, [m]
      pitch : float
          Pitch; distance between two orthogonal tube centers, [m]
      angle : float
          The angle the tubes are positioned; 30, 45, 60 or 90
  
      Returns
      -------
      DBundle : float
          Outer diameter of tube bundle, [m]
  
      Notes
      -----
      f1 = 1.1 for triangular, 1.3 for square patterns
      f2 is as follows: 1 pass, 0; 2 passes, 22; 4 passes, 70; 8 passes, 105.
      6 tube passes is not officially supported, only 1, 2, 4 and 8.
      However, an estimated constant has been added to support it.
      f2 = 90.
  
      Examples
      --------
      >>> D_for_Ntubes_VDI(N=970, Ntp=2., Do=0.00735, pitch=0.015, angle=30.)
      0.5003600119829544
  
      References
      ----------
      .. [1] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition.
         Berlin; New York:: Springer, 2010.
      '''
      if Ntp == 1:
          f2 = 0.
      elif Ntp == 2:
          f2 = 22.
      elif Ntp == 4:
          f2 = 70.
      elif Ntp == 6:
          f2 = 90.
      elif Ntp == 8:
          f2 = 105.
      else:
          raise Exception('Only 1, 2, 4 and 8 passes are supported')
      if angle == 30 or angle == 60:
          f1 = 1.1
      elif angle == 45 or angle == 90:
          f1 = 1.3
      else:
          raise Exception('Only 30, 60, 45 and 90 degree layouts are supported')
      Do, pitch = Do*1000, pitch*1000 # convert to mm, equation is dimensional.
      Dshell = (f1*N*pitch**2 + f2*N**0.5*pitch +Do)**0.5
      return Dshell/1000.