code: public static Range create2D(Device _device, int _globalWidth, int _globalHeight, int _localWidth, int _localHeight) {
        final Range range = new Range(_device, 2);
  
        range.setGlobalSize_0(_globalWidth);
        range.setLocalSize_0(_localWidth);
        range.setGlobalSize_1(_globalHeight);
        range.setLocalSize_1(_localHeight);
  
        range.setValid((range.getLocalSize_0() > 0) && (range.getLocalSize_1() > 0)
              && (range.getLocalSize_0() <= range.getMaxWorkItemSize()[0])
              && (range.getLocalSize_1() <= range.getMaxWorkItemSize()[1])
              && ((range.getLocalSize_0() * range.getLocalSize_1()) <= range.getMaxWorkGroupSize())
              && ((range.getGlobalSize_0() % range.getLocalSize_0()) == 0)
              && ((range.getGlobalSize_1() % range.getLocalSize_1()) == 0));
  
        return (range);
     }
docs: Create a two dimensional range 0.._globalWidth x 0.._globalHeight using a group which is _localWidth x _localHeight in size.
  <br/>
  Note that for this range to be valid  _globalWidth > 0 &&  _globalHeight >0 && _localWidth>0 && _localHeight>0 && _localWidth*_localHeight < MAX_GROUP_SIZE && _globalWidth%_localWidth==0 && _globalHeight%_localHeight==0.
  
  @param _globalWidth the overall range we wish to process
  @return