docs: def add_subprocess(self, name, proc):
          """Adds a single subprocess to this process.
  
          :param string name:     name of the subprocess
          :param proc:            a Process object
          :type proc:             :class:`~climlab.process.process.Process`
          :raises: :exc:`ValueError`
                                  if ``proc`` is not a process
  
          :Example:
  
              Replacing an albedo subprocess through adding a subprocess with
              same name::
  
                  >>> from climlab.model.ebm import EBM_seasonal
                  >>> from climlab.surface.albedo import StepFunctionAlbedo
  
                  >>> # creating EBM model
                  >>> ebm_s = EBM_seasonal()
  
                  >>> print ebm_s
  
              .. code-block:: none
                  :emphasize-lines: 8
  
                  climlab Process of type <class 'climlab.model.ebm.EBM_seasonal'>.
                  State variables and domain shapes:
                    Ts: (90, 1)
                  The subprocess tree:
                  top: <class 'climlab.model.ebm.EBM_seasonal'>
                     diffusion: <class 'climlab.dynamics.diffusion.MeridionalDiffusion'>
                     LW: <class 'climlab.radiation.AplusBT.AplusBT'>
                     albedo: <class 'climlab.surface.albedo.P2Albedo'>
                     insolation: <class 'climlab.radiation.insolation.DailyInsolation'>
  
              ::
  
                  >>> #  creating and adding albedo feedback subprocess
                  >>> step_albedo = StepFunctionAlbedo(state=ebm_s.state, **ebm_s.param)
                  >>> ebm_s.add_subprocess('albedo', step_albedo)
                  >>>
                  >>> print ebm_s
  
              .. code-block:: none
                  :emphasize-lines: 8
  
                  climlab Process of type <class 'climlab.model.ebm.EBM_seasonal'>.
                  State variables and domain shapes:
                    Ts: (90, 1)
                  The subprocess tree:
                  top: <class 'climlab.model.ebm.EBM_seasonal'>
                     diffusion: <class 'climlab.dynamics.diffusion.MeridionalDiffusion'>
                     LW: <class 'climlab.radiation.AplusBT.AplusBT'>
                     albedo: <class 'climlab.surface.albedo.StepFunctionAlbedo'>
                        iceline: <class 'climlab.surface.albedo.Iceline'>
                        cold_albedo: <class 'climlab.surface.albedo.ConstantAlbedo'>
                        warm_albedo: <class 'climlab.surface.albedo.P2Albedo'>
                     insolation: <class 'climlab.radiation.insolation.DailyInsolation'>
  
          """
          if isinstance(proc, Process):
              self.subprocess.update({name: proc})
              self.has_process_type_list = False
              # Add subprocess diagnostics to parent
              #  (if there are no name conflicts)
              for diagname, value in proc.diagnostics.items():
                  #if not (diagname in self.diagnostics or hasattr(self, diagname)):
                  #    self.add_diagnostic(diagname, value)
                  self.add_diagnostic(diagname, value)
          else:
              raise ValueError('subprocess must be Process object')