zlarzt function

void zlarzt(
  1. String DIRECT,
  2. String STOREV,
  3. int N,
  4. int K,
  5. Matrix<Complex> V_,
  6. int LDV,
  7. Array<Complex> TAU_,
  8. Matrix<Complex> T_,
  9. int LDT,
)

Implementation

void zlarzt(
  final String DIRECT,
  final String STOREV,
  final int N,
  final int K,
  final Matrix<Complex> V_,
  final int LDV,
  final Array<Complex> TAU_,
  final Matrix<Complex> T_,
  final int LDT,
) {
  final V = V_.having(ld: LDV);
  final T = T_.having(ld: LDT);
  final TAU = TAU_.having();
  int I, J;
  final INFO = Box(0);

  // Check for currently supported options

  INFO.value = 0;
  if (!lsame(DIRECT, 'B')) {
    INFO.value = -1;
  } else if (!lsame(STOREV, 'R')) {
    INFO.value = -2;
  }
  if (INFO.value != 0) {
    xerbla('ZLARZT', -INFO.value);
    return;
  }

  for (I = K; I >= 1; I--) {
    if (TAU[I] == Complex.zero) {
      // H(i)  =  I

      for (J = I; J <= K; J++) {
        T[J][I] = Complex.zero;
      }
    } else {
      // general case

      if (I < K) {
        // T(i+1:k,i) = - tau(i) * V(i+1:k,1:n) * V(i,1:n)**H

        zlacgv(N, V(I, 1).asArray(), LDV);
        zgemv('No transpose', K - I, N, -TAU[I], V(I + 1, 1), LDV,
            V(I, 1).asArray(), LDV, Complex.zero, T(I + 1, I).asArray(), 1);
        zlacgv(N, V(I, 1).asArray(), LDV);

        // T(i+1:k,i) = T(i+1:k,i+1:k) * T(i+1:k,i)

        ztrmv('Lower', 'No transpose', 'Non-unit', K - I, T(I + 1, I + 1), LDT,
            T(I + 1, I).asArray(), 1);
      }
      T[I][I] = TAU[I];
    }
  }
}