function [ A_out ] = LHAL_blk_var3( A, L, nb_alg )

  Y = zeros( size( A ) );

  [ ATL, ATR, ...
    ABL, ABR ] = FLA_Part_2x2( A, ...
                               0, 0, 'FLA_TL' );

  [ LTL, LTR, ...
    LBL, LBR ] = FLA_Part_2x2( L, ...
                               0, 0, 'FLA_TL' );

  [ YTL, YTR, ...
    YBL, YBR ] = FLA_Part_2x2( Y, ...
                               0, 0, 'FLA_TL' );

  while ( size( ATL, 1 ) < size( A, 1 ) )

    b = min( size( ABR, 1 ), nb_alg );

    [ A00, A01, A02, ...
      A10, A11, A12, ...
      A20, A21, A22 ] = FLA_Repart_2x2_to_3x3( ATL, ATR, ...
                                               ABL, ABR, ...
                                               b, b, 'FLA_BR' );

    [ L00, L01, L02, ...
      L10, L11, L12, ...
      L20, L21, L22 ] = FLA_Repart_2x2_to_3x3( LTL, LTR, ...
                                               LBL, LBR, ...
                                               b, b, 'FLA_BR' );

    [ Y00, Y01, Y02, ...
      Y10, Y11, Y12, ...
      Y20, Y21, Y22 ] = FLA_Repart_2x2_to_3x3( YTL, YTR, ...
                                               YBL, YBR, ...
                                               b, b, 'FLA_BR' );

    %------------------------------------------------------------%

    Y21 = Symm_l( A22 ) * L21;                   % SYMM
    A21 = A21 * tril( L11 );                     % TRMM
    A21 = A21 + 0.5 * Y21;        
    A11 = LHAL_unb_var3( A11, L11 ); 
    A11 = A11 + tril( A21' * L21 + L21' * A21 ); % SYR2K
    A21 = A21 + 0.5 * Y21;
    A21 = tril( L22 )' * A21;                    % TRMM

    %------------------------------------------------------------%

    [ ATL, ATR, ...
      ABL, ABR ] = FLA_Cont_with_3x3_to_2x2( A00, A01, A02, ...
                                             A10, A11, A12, ...
                                             A20, A21, A22, ...
                                             'FLA_TL' );

    [ LTL, LTR, ...
      LBL, LBR ] = FLA_Cont_with_3x3_to_2x2( L00, L01, L02, ...
                                             L10, L11, L12, ...
                                             L20, L21, L22, ...
                                             'FLA_TL' );

    [ YTL, YTR, ...
      YBL, YBR ] = FLA_Cont_with_3x3_to_2x2( Y00, Y01, Y02, ...
                                             Y10, Y11, Y12, ...
                                             Y20, Y21, Y22, ...
                                             'FLA_TL' );

  end

  A_out = [ ATL, ATR
            ABL, ABR ];

return
