docs: public static void symmRankNMinus_L(int blockLength ,
                                          DSubmatrixD1 A , DSubmatrixD1 B )
      {
          int widthB = B.col1-B.col0;
          if( widthB > blockLength )
              throw new IllegalArgumentException("Width of B cannot be greater than the block length");
  
          int N = B.row1-B.row0;
  
          if( A.col1-A.col0 != N )
              throw new IllegalArgumentException("A does not have the expected number of columns based on B's height");
          if( A.row1-A.row0 != N )
              throw new IllegalArgumentException("A does not have the expected number of rows based on B's height");
  
          for( int i = B.row0; i < B.row1; i += blockLength ) {
  
  
              int heightB_i = Math.min(blockLength,B.row1-i);
              int indexB_i = i*B.original.numCols + heightB_i*B.col0;
  
              int rowA = i-B.row0+A.row0;
              int heightA = Math.min( blockLength , A.row1 - rowA);
  
              for( int j = B.row0; j <= i; j += blockLength ) {
                  
                  int widthB_j = Math.min(blockLength,B.row1-j);
  
                  int indexA = rowA * A.original.numCols + (j-B.row0+A.col0)*heightA;
                  int indexB_j = j*B.original.numCols + widthB_j*B.col0;
  
                  if( i == j ) {
                      multTransBBlockMinus_L( B.original.data,A.original.data,
                              indexB_i,indexB_j,indexA,widthB,heightB_i,widthB_j);
                  } else {
                      multTransBBlockMinus( B.original.data,A.original.data,
                              indexB_i,indexB_j,indexA,widthB,heightB_i,widthB_j);
                  }
              }
          }
      }