

    //private Grid startFlooding(double floodDepth,Grid floodDepthGrid,int floodRow,int floodColumn,double unknownFloodDepth) {
    private Vector startFlooding(double floodDepth,Grid floodDepthGrid,int floodRow,
                                int floodColumn,double unknownFloodDepth,int origRow,int origColumn) {


        //System.out.println("Grid.startFlooding()");

        recursionLevel++;
        System.out.println(recursionLevel + "  " + floodRow + "  " + floodColumn);

        boolean gridComplete;
        Vector floodGridVector = new Vector();

        if(recursionLevel < MAX_RECURSION_LEVEL) {

            //if((floodRow >= 0) && (floodRow <= (nRows-1)) && (floodColumn >= 0) && (floodColumn <= (nColumns-1))) {

            if(isWithinRange(floodRow,floodColumn)) {

                double floodValue = (double) floodDepthGrid.getValue(floodColumn,floodRow);
                //System.out.println("flood grid value  = " + floodValue);

                if(Math.abs(floodValue-unknownFloodDepth) < 0.01) {

                    double demValue = (double) getValue(floodColumn,floodRow);

                    //System.out.println("WL = " + floodDepth + ", DEM = " + demValue + " at " + floodRow + "," + floodColumn);

                    if(Math.abs(demValue-(double)noDataValue)<0.01) {
                        floodDepthGrid.setDataAt(floodColumn,floodRow,(double)noDataValue);
                        //System.out.println("Nodata");
                    }

                    else if(demValue >= floodDepth) {
                        floodDepthGrid.setDataAt(floodColumn,floodRow,0);
                        //System.out.println("Dry");
                    }

                    else {

                        double fd = floodDepth-demValue;
                        //System.out.println(floodRow + "  " + floodColumn);
                        floodDepthGrid.setDataAt(floodColumn,floodRow,fd);

                        for(int i=(floodRow-1);i<=(floodRow+1);i++) {

                            for(int j=(floodColumn-1);j<=(floodColumn+1);j++) {

                                if((i == (origRow-1)) && (j == (origColumn-1))) {}
                                else if((i == (origRow-1)) && (j == (origColumn-0))) {}
                                else if((i == (origRow-1)) && (j == (origColumn+1))) {}
                                else if((i == (origRow-0)) && (j == (origColumn-1))) {}
                                else if((i == (origRow-0)) && (j == (origColumn-0))) {}
                                else if((i == (origRow-0)) && (j == (origColumn+1))) {}
                                else if((i == (origRow+1)) && (j == (origColumn-1))) {}
                                else if((i == (origRow+1)) && (j == (origColumn-0))) {}
                                else if((i == (origRow+1)) && (j == (origColumn+1))) {}
                                else if((i == (floodRow)) && (j == (floodColumn))) {}

                                else {

                                    if(isWithinRange(i,j)) {

                                        double fValue = (double) floodDepthGrid.getValue(i,j);

                                        if(Math.abs(fValue-unknownFloodDepth) < 0.01) {

                                            //System.out.println(floodRow + "  " + floodColumn);
                                            startFlooding(floodDepth,floodDepthGrid,i,j,
                                                            unknownFloodDepth,floodRow,floodColumn);
                                        }
                                    
                                    } //if(isWithinRange(i,j))

                                } //else

                            } //for(int j=jMin;j<=jMax;j++)

                        } //for(int i=iMin;i<=iMax;i++)

                    } //else

                } //if(Math.abs(floodValue-unknownFloodDepth) < 0.01)

            } //if((floodRow >= 0) && (floodRow <= (nRows-1)) && (floodColumn >= 0) && (floodColumn <= (nColumns-1)))


            recursionLevel = 0;
            gridComplete = true;
            floodGridVector.add(floodDepthGrid);
            floodGridVector.add(new Boolean(gridComplete));
            floodGridVector.add(new Integer(0));
            floodGridVector.add(new Integer(0));
            floodGridVector.add(new Integer(0));
            floodGridVector.add(new Integer(0));

        } //if(recursionLevel < MAX_RECURSION_LEVEL)


        else {  //if(recursionLevel < MAX_RECURSION_LEVEL)

            recursionLevel = 0;
            gridComplete = false;

            floodGridVector.add(floodDepthGrid);
            floodGridVector.add(new Boolean(gridComplete));
            floodGridVector.add(new Integer(floodRow));
            floodGridVector.add(new Integer(floodColumn));
            floodGridVector.add(new Integer(origRow));
            floodGridVector.add(new Integer(origColumn));

        } //if(recursionLevel < MAX_RECURSION_LEVEL)

        //return floodDepthGrid;
        return floodGridVector;

    } //private Grid startFlooding(double floodDepth,Grid floodDepthGrid,int floodStartRow,int floodStartColumn)


