public void markCurrentPhaseAsComplete(long totalUnitsNextPhase) {

        if ((this.currentPhase > this.numPhases)) {
            String message = "The phase just completed (";
            message += this.currentPhase;
            message += ") is greater than the total number ";
            message += "of anticipated phases (";
    		message += this.numPhases;
    		message += "); the latter is probably incorrect.";
              
            Log.warn(message);
        }
        
        this.currentPhase += 1;
        this.unitsCompletedSoFarThisPhase = 0;
        setTotalUnitsThisPhase(totalUnitsNextPhase);
        this.currentPhaseExponent = 1;

        long nowTime = (new Date().getTime()/1000);
        long durationOfThisPhaseSec = nowTime - this.currentPhaseStartTime;
        if (durationOfThisPhaseSec < 0) {
            durationOfThisPhaseSec = 0;
        }
        
        if (0 <= currentPhase-2 && currentPhase-2 < phaseDurationHistorySecList.length) {
        	this.phaseDurationHistorySecList[currentPhase-2] = durationOfThisPhaseSec;
        }
        this.currentPhaseStartTime = nowTime;
        
        if (this.currentPhase >= this.numPhases) {
        	String message = "Actual individual phase durations: [";
        	for (int ix = 0 ; ix < phaseDurationHistorySecList.length ; ix++) {
        		message += phaseDurationHistorySecList[ix] + ", ";
        	}

        	Log.info(message + ']');
        }
    }