public synchronized void gridletSubmit(Gridlet gl, boolean ack)
	    {
	        // update the current Gridlets in exec list up to this point in time
	        updateGridletProcessing();

	        // reset number of PE since at the moment, it is not supported
	        if (gl.getNumPE() > 1)
	        {
	            String userName = GridSim.getEntityName( gl.getUserID() );
	            logger.log(Level.INFO,super.get_name() + ".gridletSubmit(): " +
	                " Gridlet #" + gl.getGridletID() + " from " + userName +
	                " user requires " + gl.getNumPE() + " PEs.");
	            logger.log(Level.INFO,"--> Process this Gridlet to 1 PE only.");

	            // also adjusted the length because the number of PEs are reduced
	            int numPE = gl.getNumPE();
	            double len = gl.getGridletLength();
	            gl.setGridletLength(len*numPE);
	            gl.setNumPE(1);
	        }

	        ResGridlet rgl = new ResGridlet(gl);
	        boolean success = false;

	        // if there is an available PE slot, then allocate immediately
	        if (gridletInExecList_.size() < super.totalPE_) {
	            success = allocatePEtoGridlet(rgl);
	        }

	        // if no available PE then put the ResGridlet into a Queue list
	        if (!success)
	        {
	            rgl.setGridletStatus(Gridlet.QUEUED);
	            gridletQueueList_.add(rgl);
	        }

	        // sends back an ack if required
	        if (ack)
	        {
	            super.sendAck(GridSimTags.GRIDLET_SUBMIT_ACK, true,
	                          gl.getGridletID(), gl.getUserID()
	            );
	        }
	    }