docs: def integrate_years(self, years=1.0, verbose=True):
          """Integrates the model by a given number of years.
  
          :param float years:     integration time for the model in years
                                  [default: 1.0]
          :param bool verbose:    information whether model time details
                                  should be printed [default: True]
  
          It calls :func:`step_forward` repetitively and calculates a time
          averaged value over the integrated period for every model state and all
          diagnostics processes.
  
          :Example:
  
              ::
  
                  >>> import climlab
                  >>> model = climlab.EBM()
  
                  >>> model.global_mean_temperature()
                  Field(11.997968598413685)
  
                  >>> model.integrate_years(2.)
                  Integrating for 180 steps, 730.4844 days, or 2.0 years.
                  Total elapsed time is 2.0 years.
  
                  >>> model.global_mean_temperature()
                  Field(13.531055349437258)
  
  
          """
          days = years * const.days_per_year
          numsteps = int(self.time['num_steps_per_year'] * years)
          if verbose:
              print("Integrating for " + str(numsteps) + " steps, "
                    + str(days) + " days, or " + str(years) + " years.")
          #  begin time loop
          for count in range(numsteps):
              # Compute the timestep
              self.step_forward()
              if count == 0:
                  # on first step only...
                  #  This implements a generic time-averaging feature
                  # using the list of model state variables
                  self.timeave = self.state.copy()
                  # add any new diagnostics to the timeave dictionary
                  self.timeave.update(self.diagnostics)
                  # reset all values to zero
                  for varname, value in self.timeave.items():
                  # moves on to the next varname if value is None
                  # this preserves NoneType diagnostics
                      if value is None:
                          continue
                      self.timeave[varname] = 0*value
              # adding up all values for each timestep
              for varname in list(self.timeave.keys()):
                  try:
                      self.timeave[varname] += self.state[varname]
                  except:
                      try:
                          self.timeave[varname] += self.diagnostics[varname]
                      except: pass
          # calculating mean values through dividing the sum by number of steps
          for varname, value in self.timeave.items():
              if value is None:
                  continue
              self.timeave[varname] /= numsteps
          if verbose:
              print("Total elapsed time is %s years."
                    % str(self.time['days_elapsed']/const.days_per_year))