add partition function