diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 3503d7b..7af91b7 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ diff --git a/VolTriZmapVolume.cpp b/VolTriZmapVolume.cpp index 1fe481a..1f4c907 100644 --- a/VolTriZmapVolume.cpp +++ b/VolTriZmapVolume.cpp @@ -179,17 +179,24 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ if ( nGrid == 0) { - INTVECTOR nXBlock ; - INTVECTOR nYBlock ; + int nXStop = 1 ; + int nYStop = 1 ; - nXBlock.emplace_back( min( nI / m_nDexNumPBlock, m_nFracLin[0] - 1)) ; - nYBlock.emplace_back( min( nJ / m_nDexNumPBlock, m_nFracLin[1] - 1)) ; + int nXBlock[2] ; + int nYBlock[2] ; - if ( nI % N_DEXBLOCK == 0 && nXBlock[0] > 0) - nXBlock.emplace_back( nXBlock[0] - 1) ; + nXBlock[0] = min( nI / m_nDexNumPBlock, m_nFracLin[0] - 1) ; + nYBlock[0] = min( nJ / m_nDexNumPBlock, m_nFracLin[1] - 1) ; - if ( nJ % N_DEXBLOCK == 0 && nYBlock[0] > 0) - nYBlock.emplace_back( nYBlock[0] - 1) ; + if ( nI % N_DEXBLOCK == 0 && nXBlock[0] > 0) { + nXBlock[1] = nXBlock[0] - 1 ; + ++ nXStop ; + } + + if ( nJ % N_DEXBLOCK == 0 && nYBlock[0] > 0) { + nYBlock[1] = nYBlock[0] - 1 ; + ++ nYStop ; + } int nMinK = Clamp( int( floor( ( ( dMin - 0.5 * m_dStep) / m_dStep - EPS_SMALL))), 0, m_nNy[1] - 1) ; int nMaxK = Clamp( int( floor( ( ( dMax + 0.5 * m_dStep) / m_dStep + EPS_SMALL))), 0, m_nNy[1] - 1) ; @@ -197,8 +204,8 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ int nMinZBlock = ( m_nMapNum == 1 ? 0 : max( 0, nMinK / int( m_nDexNumPBlock))) ; int nMaxZBlock = min( int( m_nFracLin[2] - 1), nMaxK / int( m_nDexNumPBlock)) ; - for ( size_t tI = 0 ; tI < nXBlock.size() ; ++ tI) { - for ( size_t tJ = 0 ; tJ < nYBlock.size() ; ++ tJ) { + for ( int tI = 0 ; tI < nXStop ; ++ tI) { + for ( int tJ = 0 ; tJ < nYStop ; ++ tJ) { for ( int k = nMinZBlock ; k <= nMaxZBlock ; ++ k) { int nBlockNum = k * nLayerBlock + nYBlock[tJ] * m_nFracLin[0] + nXBlock[tI] ; m_BlockToUpdate[nBlockNum] = true ; @@ -209,17 +216,24 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ else if ( nGrid == 1) { - INTVECTOR nYBlock ; - INTVECTOR nZBlock ; + int nYStop = 1 ; + int nZStop = 1 ; - nYBlock.emplace_back( min( nI / m_nDexNumPBlock, m_nFracLin[1] - 1)) ; - nZBlock.emplace_back( min( nJ / m_nDexNumPBlock, m_nFracLin[2] - 1)) ; + int nYBlock[2] ; + int nZBlock[2] ; - if ( nI % N_DEXBLOCK == 0 && nYBlock[0] > 0) - nYBlock.emplace_back( nYBlock[0] - 1) ; + nYBlock[0] = min( nI / m_nDexNumPBlock, m_nFracLin[1] - 1) ; + nZBlock[0] = min( nJ / m_nDexNumPBlock, m_nFracLin[2] - 1) ; - if ( nJ % N_DEXBLOCK == 0 && nZBlock[0] > 0) - nZBlock.emplace_back( nZBlock[0] - 1) ; + if ( nI % N_DEXBLOCK == 0 && nYBlock[0] > 0) { + nYBlock[1] = nYBlock[0] - 1 ; + ++ nYStop ; + } + + if ( nJ % N_DEXBLOCK == 0 && nZBlock[0] > 0) { + nZBlock[1] = nZBlock[0] - 1 ; + ++ nZStop ; + } int nMinI = Clamp( int( floor( ( ( dMin - 0.5 * m_dStep) / m_dStep - EPS_SMALL))), 0, m_nNx[0] - 1) ; int nMaxI = Clamp( int( floor( ( ( dMax + 0.5 * m_dStep) / m_dStep + EPS_SMALL))), 0, m_nNx[0] - 1) ; @@ -227,8 +241,8 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ int nMinXBlock = max( 0, nMinI / int( m_nDexNumPBlock)) ; int nMaxXBlock = min( int( m_nFracLin[0] - 1), nMaxI / int( m_nDexNumPBlock)) ; - for ( size_t tI = 0 ; tI < nYBlock.size() ; ++ tI) { - for ( size_t tJ = 0 ; tJ < nZBlock.size() ; ++ tJ) { + for ( int tI = 0 ; tI < nYStop ; ++ tI) { + for ( int tJ = 0 ; tJ < nZStop ; ++ tJ) { for ( int k = nMinXBlock ; k <= nMaxXBlock ; ++ k) { int nBlockNum = nZBlock[tJ] * nLayerBlock + nYBlock[tI] * m_nFracLin[0] + k ; m_BlockToUpdate[nBlockNum] = true ; @@ -239,17 +253,24 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ else if ( nGrid == 2) { - INTVECTOR nXBlock ; - INTVECTOR nZBlock ; + int nXStop = 1 ; + int nZStop = 1 ; - nXBlock.emplace_back( min( nJ / m_nDexNumPBlock, m_nFracLin[0] - 1)) ; - nZBlock.emplace_back( min( nI / m_nDexNumPBlock, m_nFracLin[2] - 1)) ; + int nXBlock[2] ; + int nZBlock[2] ; - if ( nJ % N_DEXBLOCK && nXBlock[0] > 0) - nXBlock.emplace_back( nXBlock[0] - 1) ; + nXBlock[0] = min( nJ / m_nDexNumPBlock, m_nFracLin[0] - 1) ; + nZBlock[0] = min( nI / m_nDexNumPBlock, m_nFracLin[2] - 1) ; - if ( nI % N_DEXBLOCK && nZBlock[0] > 0) - nZBlock.emplace_back( nZBlock[0] - 1) ; + if ( nJ % N_DEXBLOCK == 0 && nXBlock[0] > 0) { + nXBlock[1] = nXBlock[0] - 1 ; + ++ nXStop ; + } + + if ( nI % N_DEXBLOCK == 0 && nZBlock[0] > 0) { + nZBlock[1] = nZBlock[0] - 1 ; + ++ nZStop ; + } int nMinJ = Clamp( int( floor( ( ( dMin - 0.5 * m_dStep) / m_dStep - EPS_SMALL))), 0, m_nNy[0] - 1) ; int nMaxJ = Clamp( int( floor( ( ( dMax + 0.5 * m_dStep) / m_dStep + EPS_SMALL))), 0, m_nNy[0] - 1) ; @@ -257,8 +278,8 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ int nMinYBlock = max( 0, nMinJ / int( m_nDexNumPBlock)) ; int nMaxYBlock = min( int( m_nFracLin[1] - 1), nMaxJ / int( m_nDexNumPBlock)) ; - for ( size_t tI = 0 ; tI < nZBlock.size() ; ++ tI) { - for ( size_t tJ = 0 ; tJ < nXBlock.size() ; ++ tJ) { + for ( int tI = 0 ; tI < nZStop ; ++ tI) { + for ( int tJ = 0 ; tJ < nXStop ; ++ tJ) { for ( int k = nMinYBlock ; k <= nMaxYBlock ; ++ k) { int nBlockNum = nZBlock[tI] * nLayerBlock + k * m_nFracLin[0] + nXBlock[tJ] ; m_BlockToUpdate[nBlockNum] = true ;