code: def results(self, Pc):
          r
          Psatn = self['pore.invasion_pressure'] <= Pc
          Tsatn = self['throat.invasion_pressure'] <= Pc
          inv_phase = {}
          inv_phase['pore.occupancy'] = sp.array(Psatn, dtype=float)
          inv_phase['throat.occupancy'] = sp.array(Tsatn, dtype=float)
          return inv_phase
docs: r"""
          This method determines which pores and throats are filled with invading
          phase at the specified capillary pressure, and creates several arrays
          indicating the occupancy status of each pore and throat for the given
          pressure.
  
          Parameters
          ----------
          Pc : scalar
              The capillary pressure for which an invading phase configuration
              is desired.
  
          Returns
          -------
          A dictionary containing an assortment of data about distribution
          of the invading phase at the specified capillary pressure.  The data
          include:
  
          **'pore.occupancy'** : A value between 0 and 1 indicating the
          fractional volume of each pore that is invaded.  If no late pore
          filling model was applied, then this will only be integer values
          (either filled or not).
  
          **'throat.occupancy'** : The same as 'pore.occupancy' but for throats.
  
          This dictionary can be passed directly to the ``update`` method of
          the *Phase* object. These values can then be accessed by models
          or algorithms.