public static void multAdd_zeros ( final int blockLength , final DSubmatrixD1 Y , final DSubmatrixD1 B , final DSubmatrixD1 C ) { int widthY = Y . col1 - Y . col0 ; for ( int i = Y . row0 ; i < Y . row1 ; i += blockLength ) { int heightY = Math . min ( blockLength , Y . row1 - i ) ; for ( int j = B . col0 ; j < B . col1 ; j += blockLength ) { int widthB = Math . min ( blockLength , B . col1 - j ) ; int indexC = ( i - Y . row0 + C . row0 ) * C . original . numCols + ( j - B . col0 + C . col0 ) * heightY ; for ( int k = Y . col0 ; k < Y . col1 ; k += blockLength ) { int indexY = i * Y . original . numCols + k * heightY ; int indexB = ( k - Y . col0 + B . row0 ) * B . original . numCols + j * widthY ; if ( i == Y . row0 ) { multBlockAdd_zerosone ( Y . original . data , B . original . data , C . original . data , indexY , indexB , indexC , heightY , widthY , widthB ) ; } else { InnerMultiplication_DDRB . blockMultPlus ( Y . original . data , B . original . data , C . original . data , indexY , indexB , indexC , heightY , widthY , widthB ) ; } } } } }
Special multiplication that takes in account the zeros and one in Y which is the matrix that stores the householder vectors .