code: public void setStrictlyCoLocatedWith(JobVertex strictlyCoLocatedWith) {
  		if (this.slotSharingGroup == null || this.slotSharingGroup != strictlyCoLocatedWith.slotSharingGroup) {
  			throw new IllegalArgumentException("Strict co-location requires that both vertices are in the same slot sharing group.");
  		}
  
  		CoLocationGroup thisGroup = this.coLocationGroup;
  		CoLocationGroup otherGroup = strictlyCoLocatedWith.coLocationGroup;
  
  		if (otherGroup == null) {
  			if (thisGroup == null) {
  				CoLocationGroup group = new CoLocationGroup(this, strictlyCoLocatedWith);
  				this.coLocationGroup = group;
  				strictlyCoLocatedWith.coLocationGroup = group;
  			}
  			else {
  				thisGroup.addVertex(strictlyCoLocatedWith);
  				strictlyCoLocatedWith.coLocationGroup = thisGroup;
  			}
  		}
  		else {
  			if (thisGroup == null) {
  				otherGroup.addVertex(this);
  				this.coLocationGroup = otherGroup;
  			}
  			else {
  				// both had yet distinct groups, we need to merge them
  				thisGroup.mergeInto(otherGroup);
  			}
  		}
  	}
docs: Tells this vertex to strictly co locate its subtasks with the subtasks of the given vertex.
  Strict co-location implies that the n'th subtask of this vertex will run on the same parallel computing
  instance (TaskManager) as the n'th subtask of the given vertex.
  
  NOTE: Co-location is only possible between vertices in a slot sharing group.
  
  NOTE: This vertex must (transitively) depend on the vertex to be co-located with. That means that the
  respective vertex must be a (transitive) input of this vertex.
  
  @param strictlyCoLocatedWith The vertex whose subtasks to co-locate this vertex's subtasks with.
  
  @throws IllegalArgumentException Thrown, if this vertex and the vertex to co-locate with are not in a common
  slot sharing group.
  
  @see #setSlotSharingGroup(SlotSharingGroup)