public void handleDoMPIMaster(MutationManager mutMan, int size) throws MPIException, InterruptedException {
		
		//KER: If it isn't an mpiRun start extra threads so that we can simulate
		//an mpiRun
		if(!mpiRun)
			MPItoThread.startThreads(this,Thread.currentThread());
		
		CommucObj cObjArray[] = new CommucObj[size];
		int numFinished = 0;
		
		int curMut = 0;
		for (int curProc=1; curProc<numProc; curProc++){ //distribute a single mutation per processor, for all processors
			
			if (curMut<cObjArray.length){ //more mutations to distribute
				
				System.out.println("Retrieving "+curMut+" of "+(cObjArray.length));
				cObjArray[curMut] = mutMan.getNextComObj(curMut);
				
				MPItoThread.Send(cObjArray, curMut, 1, ThreadMessage.OBJECT, curProc, regTag);
				curMut++;
				
				System.out.println("Sent to proc "+curProc);
				System.out.println();
			}
			else
				break;
		}
		
		boolean distrDACS = mutMan.getDistrDACS(); //distributed DACS computation
		
		while (numFinished<cObjArray.length){ //distribute and receive all remaining mutations
			
			CommucObj cObj[] = new CommucObj[1];
			cObj[0] = new CommucObj();
			
			//System.out.println("Receiving message on main node..");
			
			Object s = MPItoThread.Recv(cObj, 0, 1, ThreadMessage.OBJECT, ThreadMessage.ANY_SOURCE, ThreadMessage.ANY_TAG);
			
			//System.out.println("Received message on main node: tag "+s.tag+" source "+s.source);
			
			if (distrDACS){ //DACS computation, so check if the new energy is better than the best energy so far
				
				double curBestE = mutMan.getPruningE();
				
				if (cObj[0].pruningE<curBestE){ //the new energy is better
					
					//System.out.println("Updating best energy on main node from "+curBestE+" to "+cObj[0].pruningE+", source (partition): "+cObj[0].partIndex);
					
					mutMan.setBestScore(new BigDecimal(cObj[0].pruningE));
					mutMan.setPruningE(cObj[0].pruningE);
					
					double c[] = new double[1];
					c[0] = cObj[0].pruningE;
					for (int curProc=1; curProc<numProc; curProc++){ //update the best energy in each partition
						MPItoThread.Isend(c, 0, 1, ThreadMessage.FLOAT, curProc, updateTag);
					}
				}
			}
			
			if (MPItoThread.getStatusTag(s)==regTag){ //completed job
				mutMan.processFinishedMutation(cObj[0]);
				numFinished++;
				
				System.out.println("Finished: "+cObj[0].mutationNumber+", Time: "+(cObj[0].elapsedTime/60.0));
				
				if (curMut<cObjArray.length){
					
					System.out.print("Retrieving "+curMut+" of "+(cObjArray.length));
					cObjArray[curMut] = mutMan.getNextComObj(curMut);
					
					MPItoThread.Send(cObjArray, curMut, 1, ThreadMessage.OBJECT, MPItoThread.getStatusSource(s), regTag);
					curMut++;
					
					System.out.println(", Sent to proc "+MPItoThread.getStatusSource(s));
					System.out.println();
				}
			}
		}
	}