override public void initialize()
        {
            setProblemClass();

            int _num = this.Ranks.Length;
//            _node   = this.GlobalRank;
//            _ndim   = Constants.nodedim(_num);

            int ydiv = Constants.ilog2(_num) / 2;
            int xdiv = ydiv;

            if (xdiv + ydiv != Constants.ilog2(_num))
            {
                xdiv += 1;
            }
            xdiv   = Constants.ipow2(xdiv);
            ydiv   = Constants.ipow2(ydiv);
            _isiz1 = _isiz01 / xdiv;
            if (_isiz1 * xdiv < _isiz01)
            {
                _isiz1++;
            }
            _isiz2 = _isiz01 / ydiv;
            if (_isiz2 * ydiv < _isiz01)
            {
                _isiz2++;
            }

//			_icommn = new bool[_nx0+_ny0+1];
//			_icomms = new bool[_nx0+_ny0+1];
//			_icomme = new bool[_nx0+_ny0+1];
//			_icommw = new bool[_nx0+_ny0+1];

            A.initialize_field("a", _isiz2, _isiz1, 5, 5);
            B.initialize_field("b", _isiz2, _isiz1, 5, 5);
            _C.initialize_field("c", _isiz2, _isiz1, 5, 5);
            D.initialize_field("d", _isiz2, _isiz1, 5, 5);

            U.initialize_field("u", _isiz3, _isiz2 + 4, _isiz1 + 4, 5);
            Rsd.initialize_field("rsd", _isiz3, _isiz2 + 4, _isiz1 + 4, 5);
            Frct.initialize_field("frct", _isiz3, _isiz2 + 4, _isiz1 + 4, 5);
            Flux.initialize_field("flux", _isiz3, _isiz2 + 2, _isiz1 + 2, 5);

            //proc_grid()
//	            _xdim   = (int)Math.Pow(2, (_ndim/2));
//	            if(Constants.mod(_ndim, 2)==1)
//	                _xdim = _xdim + _xdim;
//	            _ydim   = _num/_xdim;
//	            _row    = (int)Constants.mod(_node, _xdim) + 1;
//	            _col    = _node/_xdim + 1;
            //

            Constants.setConstants(Instance.isiz01, Instance.isiz02, Instance.isiz03);
        }