ztfsm function

void ztfsm(
  1. String TRANSR,
  2. String SIDE,
  3. String UPLO,
  4. String TRANS,
  5. String DIAG,
  6. int M,
  7. int N,
  8. Complex ALPHA,
  9. Array<Complex> A_,
  10. Matrix<Complex> B_,
  11. int LDB,
)

Implementation

void ztfsm(
  final String TRANSR,
  final String SIDE,
  final String UPLO,
  final String TRANS,
  final String DIAG,
  final int M,
  final int N,
  final Complex ALPHA,
  final Array<Complex> A_,
  final Matrix<Complex> B_,
  final int LDB,
) {
  final A = A_.having(offset: zeroIndexedArrayOffset);
  final B = B_.having(ld: LDB, offset: zeroIndexedMatrixOffset);
  int M1 = 0, M2 = 0, N1 = 0, N2 = 0, K = 0, INFO, I, J;

  // Test the input parameters.

  INFO = 0;
  final NORMALTRANSR = lsame(TRANSR, 'N');
  final LSIDE = lsame(SIDE, 'L');
  final LOWER = lsame(UPLO, 'L');
  final NOTRANS = lsame(TRANS, 'N');
  if (!NORMALTRANSR && !lsame(TRANSR, 'C')) {
    INFO = -1;
  } else if (!LSIDE && !lsame(SIDE, 'R')) {
    INFO = -2;
  } else if (!LOWER && !lsame(UPLO, 'U')) {
    INFO = -3;
  } else if (!NOTRANS && !lsame(TRANS, 'C')) {
    INFO = -4;
  } else if (!lsame(DIAG, 'N') && !lsame(DIAG, 'U')) {
    INFO = -5;
  } else if (M < 0) {
    INFO = -6;
  } else if (N < 0) {
    INFO = -7;
  } else if (LDB < max(1, M)) {
    INFO = -11;
  }
  if (INFO != 0) {
    xerbla('ZTFSM', -INFO);
    return;
  }

  // Quick return when ( (N == 0) || (M == 0) )

  if ((M == 0) || (N == 0)) return;

  // Quick return when ALPHA == (0D+0,0D+0)

  if (ALPHA == Complex.zero) {
    for (J = 0; J <= N - 1; J++) {
      for (I = 0; I <= M - 1; I++) {
        B[I][J] = Complex.zero;
      }
    }
    return;
  }

  if (LSIDE) {
    // SIDE = 'L'

    // A is M-by-M.
    // If M is odd, set NISODD = true , and M1 and M2.
    // If M is even, NISODD = false , and M.
    bool MISODD;
    if ((M % 2) == 0) {
      MISODD = false;
      K = M ~/ 2;
    } else {
      MISODD = true;
      if (LOWER) {
        M2 = M ~/ 2;
        M1 = M - M2;
      } else {
        M1 = M ~/ 2;
        M2 = M - M1;
      }
    }

    if (MISODD) {
      // SIDE = 'L' and N is odd

      if (NORMALTRANSR) {
        // SIDE = 'L', N is odd, and TRANSR = 'N'

        if (LOWER) {
          // SIDE  ='L', N is odd, TRANSR = 'N', and UPLO = 'L'

          if (NOTRANS) {
            // SIDE  ='L', N is odd, TRANSR = 'N', UPLO = 'L', and
            // TRANS = 'N'

            if (M == 1) {
              ztrsm('L', 'L', 'N', DIAG, M1, N, ALPHA, A.asMatrix(), M, B, LDB);
            } else {
              ztrsm('L', 'L', 'N', DIAG, M1, N, ALPHA, A(0).asMatrix(), M, B,
                  LDB);
              zgemm('N', 'N', M2, N, M1, -Complex.one, A(M1).asMatrix(), M, B,
                  LDB, ALPHA, B(M1, 0), LDB);
              ztrsm('L', 'U', 'C', DIAG, M2, N, Complex.one, A(M).asMatrix(), M,
                  B(M1, 0), LDB);
            }
          } else {
            // SIDE  ='L', N is odd, TRANSR = 'N', UPLO = 'L', and
            // TRANS = 'C'

            if (M == 1) {
              ztrsm('L', 'L', 'C', DIAG, M1, N, ALPHA, A(0).asMatrix(), M, B,
                  LDB);
            } else {
              ztrsm('L', 'U', 'N', DIAG, M2, N, ALPHA, A(M).asMatrix(), M,
                  B(M1, 0), LDB);
              zgemm('C', 'N', M1, N, M2, -Complex.one, A(M1).asMatrix(), M,
                  B(M1, 0), LDB, ALPHA, B, LDB);
              ztrsm('L', 'L', 'C', DIAG, M1, N, Complex.one, A(0).asMatrix(), M,
                  B, LDB);
            }
          }
        } else {
          // SIDE  ='L', N is odd, TRANSR = 'N', and UPLO = 'U'

          if (!NOTRANS) {
            // SIDE  ='L', N is odd, TRANSR = 'N', UPLO = 'U', and
            // TRANS = 'N'

            ztrsm(
                'L', 'L', 'N', DIAG, M1, N, ALPHA, A(M2).asMatrix(), M, B, LDB);
            zgemm('C', 'N', M2, N, M1, -Complex.one, A(0).asMatrix(), M, B, LDB,
                ALPHA, B(M1, 0), LDB);
            ztrsm('L', 'U', 'C', DIAG, M2, N, Complex.one, A(M1).asMatrix(), M,
                B(M1, 0), LDB);
          } else {
            // SIDE  ='L', N is odd, TRANSR = 'N', UPLO = 'U', and
            // TRANS = 'C'

            ztrsm('L', 'U', 'N', DIAG, M2, N, ALPHA, A(M1).asMatrix(), M,
                B(M1, 0), LDB);
            zgemm('N', 'N', M1, N, M2, -Complex.one, A(0).asMatrix(), M,
                B(M1, 0), LDB, ALPHA, B, LDB);
            ztrsm('L', 'L', 'C', DIAG, M1, N, Complex.one, A(M2).asMatrix(), M,
                B, LDB);
          }
        }
      } else {
        // SIDE = 'L', N is odd, and TRANSR = 'C'

        if (LOWER) {
          // SIDE  ='L', N is odd, TRANSR = 'C', and UPLO = 'L'

          if (NOTRANS) {
            // SIDE  ='L', N is odd, TRANSR = 'C', UPLO = 'L', and
            // TRANS = 'N'

            if (M == 1) {
              ztrsm('L', 'U', 'C', DIAG, M1, N, ALPHA, A(0).asMatrix(), M1, B,
                  LDB);
            } else {
              ztrsm('L', 'U', 'C', DIAG, M1, N, ALPHA, A(0).asMatrix(), M1, B,
                  LDB);
              zgemm('C', 'N', M2, N, M1, -Complex.one, A(M1 * M1).asMatrix(),
                  M1, B, LDB, ALPHA, B(M1, 0), LDB);
              ztrsm('L', 'L', 'N', DIAG, M2, N, Complex.one, A(1).asMatrix(),
                  M1, B(M1, 0), LDB);
            }
          } else {
            // SIDE  ='L', N is odd, TRANSR = 'C', UPLO = 'L', and
            // TRANS = 'C'

            if (M == 1) {
              ztrsm('L', 'U', 'N', DIAG, M1, N, ALPHA, A(0).asMatrix(), M1, B,
                  LDB);
            } else {
              ztrsm('L', 'L', 'C', DIAG, M2, N, ALPHA, A(1).asMatrix(), M1,
                  B(M1, 0), LDB);
              zgemm('N', 'N', M1, N, M2, -Complex.one, A(M1 * M1).asMatrix(),
                  M1, B(M1, 0), LDB, ALPHA, B, LDB);
              ztrsm('L', 'U', 'N', DIAG, M1, N, Complex.one, A(0).asMatrix(),
                  M1, B, LDB);
            }
          }
        } else {
          // SIDE  ='L', N is odd, TRANSR = 'C', and UPLO = 'U'

          if (!NOTRANS) {
            // SIDE  ='L', N is odd, TRANSR = 'C', UPLO = 'U', and
            // TRANS = 'N'

            ztrsm('L', 'U', 'C', DIAG, M1, N, ALPHA, A(M2 * M2).asMatrix(), M2,
                B, LDB);
            zgemm('N', 'N', M2, N, M1, -Complex.one, A(0).asMatrix(), M2, B,
                LDB, ALPHA, B(M1, 0), LDB);
            ztrsm('L', 'L', 'N', DIAG, M2, N, Complex.one,
                A(M1 * M2).asMatrix(), M2, B(M1, 0), LDB);
          } else {
            // SIDE  ='L', N is odd, TRANSR = 'C', UPLO = 'U', and
            // TRANS = 'C'

            ztrsm('L', 'L', 'C', DIAG, M2, N, ALPHA, A(M1 * M2).asMatrix(), M2,
                B(M1, 0), LDB);
            zgemm('C', 'N', M1, N, M2, -Complex.one, A(0).asMatrix(), M2,
                B(M1, 0), LDB, ALPHA, B, LDB);
            ztrsm('L', 'U', 'N', DIAG, M1, N, Complex.one,
                A(M2 * M2).asMatrix(), M2, B, LDB);
          }
        }
      }
    } else {
      // SIDE = 'L' and N is even

      if (NORMALTRANSR) {
        // SIDE = 'L', N is even, and TRANSR = 'N'

        if (LOWER) {
          // SIDE  ='L', N is even, TRANSR = 'N', and UPLO = 'L'

          if (NOTRANS) {
            // SIDE  ='L', N is even, TRANSR = 'N', UPLO = 'L',
            // and TRANS = 'N'

            ztrsm('L', 'L', 'N', DIAG, K, N, ALPHA, A(1).asMatrix(), M + 1, B,
                LDB);
            zgemm('N', 'N', K, N, K, -Complex.one, A(K + 1).asMatrix(), M + 1,
                B, LDB, ALPHA, B(K, 0), LDB);
            ztrsm('L', 'U', 'C', DIAG, K, N, Complex.one, A(0).asMatrix(),
                M + 1, B(K, 0), LDB);
          } else {
            // SIDE  ='L', N is even, TRANSR = 'N', UPLO = 'L',
            // and TRANS = 'C'

            ztrsm('L', 'U', 'N', DIAG, K, N, ALPHA, A(0).asMatrix(), M + 1,
                B(K, 0), LDB);
            zgemm('C', 'N', K, N, K, -Complex.one, A(K + 1).asMatrix(), M + 1,
                B(K, 0), LDB, ALPHA, B, LDB);
            ztrsm('L', 'L', 'C', DIAG, K, N, Complex.one, A(1).asMatrix(),
                M + 1, B, LDB);
          }
        } else {
          // SIDE  ='L', N is even, TRANSR = 'N', and UPLO = 'U'

          if (!NOTRANS) {
            // SIDE  ='L', N is even, TRANSR = 'N', UPLO = 'U',
            // and TRANS = 'N'

            ztrsm('L', 'L', 'N', DIAG, K, N, ALPHA, A(K + 1).asMatrix(), M + 1,
                B, LDB);
            zgemm('C', 'N', K, N, K, -Complex.one, A(0).asMatrix(), M + 1, B,
                LDB, ALPHA, B(K, 0), LDB);
            ztrsm('L', 'U', 'C', DIAG, K, N, Complex.one, A(K).asMatrix(),
                M + 1, B(K, 0), LDB);
          } else {
            // SIDE  ='L', N is even, TRANSR = 'N', UPLO = 'U',
            // and TRANS = 'C'
            ztrsm('L', 'U', 'N', DIAG, K, N, ALPHA, A(K).asMatrix(), M + 1,
                B(K, 0), LDB);
            zgemm('N', 'N', K, N, K, -Complex.one, A(0).asMatrix(), M + 1,
                B(K, 0), LDB, ALPHA, B, LDB);
            ztrsm('L', 'L', 'C', DIAG, K, N, Complex.one, A(K + 1).asMatrix(),
                M + 1, B, LDB);
          }
        }
      } else {
        // SIDE = 'L', N is even, and TRANSR = 'C'

        if (LOWER) {
          // SIDE  ='L', N is even, TRANSR = 'C', and UPLO = 'L'

          if (NOTRANS) {
            // SIDE  ='L', N is even, TRANSR = 'C', UPLO = 'L',
            // and TRANS = 'N'

            ztrsm('L', 'U', 'C', DIAG, K, N, ALPHA, A(K).asMatrix(), K, B, LDB);
            zgemm('C', 'N', K, N, K, -Complex.one, A(K * (K + 1)).asMatrix(), K,
                B, LDB, ALPHA, B(K, 0), LDB);
            ztrsm('L', 'L', 'N', DIAG, K, N, Complex.one, A(0).asMatrix(), K,
                B(K, 0), LDB);
          } else {
            // SIDE  ='L', N is even, TRANSR = 'C', UPLO = 'L',
            // and TRANS = 'C'

            ztrsm('L', 'L', 'C', DIAG, K, N, ALPHA, A(0).asMatrix(), K, B(K, 0),
                LDB);
            zgemm('N', 'N', K, N, K, -Complex.one, A(K * (K + 1)).asMatrix(), K,
                B(K, 0), LDB, ALPHA, B, LDB);
            ztrsm('L', 'U', 'N', DIAG, K, N, Complex.one, A(K).asMatrix(), K, B,
                LDB);
          }
        } else {
          // SIDE  ='L', N is even, TRANSR = 'C', and UPLO = 'U'

          if (!NOTRANS) {
            // SIDE  ='L', N is even, TRANSR = 'C', UPLO = 'U',
            // and TRANS = 'N'

            ztrsm('L', 'U', 'C', DIAG, K, N, ALPHA, A(K * (K + 1)).asMatrix(),
                K, B, LDB);
            zgemm('N', 'N', K, N, K, -Complex.one, A(0).asMatrix(), K, B, LDB,
                ALPHA, B(K, 0), LDB);
            ztrsm('L', 'L', 'N', DIAG, K, N, Complex.one, A(K * K).asMatrix(),
                K, B(K, 0), LDB);
          } else {
            // SIDE  ='L', N is even, TRANSR = 'C', UPLO = 'U',
            // and TRANS = 'C'

            ztrsm('L', 'L', 'C', DIAG, K, N, ALPHA, A(K * K).asMatrix(), K,
                B(K, 0), LDB);
            zgemm('C', 'N', K, N, K, -Complex.one, A(0).asMatrix(), K, B(K, 0),
                LDB, ALPHA, B, LDB);
            ztrsm('L', 'U', 'N', DIAG, K, N, Complex.one,
                A(K * (K + 1)).asMatrix(), K, B, LDB);
          }
        }
      }
    }
  } else {
    // SIDE = 'R'

    // A is N-by-N.
    // If N is odd, set NISODD = true , and N1 and N2.
    // If N is even, NISODD = false , and K.
    bool NISODD;
    if ((N % 2) == 0) {
      NISODD = false;
      K = N ~/ 2;
    } else {
      NISODD = true;
      if (LOWER) {
        N2 = N ~/ 2;
        N1 = N - N2;
      } else {
        N1 = N ~/ 2;
        N2 = N - N1;
      }
    }

    if (NISODD) {
      // SIDE = 'R' and N is odd

      if (NORMALTRANSR) {
        // SIDE = 'R', N is odd, and TRANSR = 'N'

        if (LOWER) {
          // SIDE  ='R', N is odd, TRANSR = 'N', and UPLO = 'L'

          if (NOTRANS) {
            // SIDE  ='R', N is odd, TRANSR = 'N', UPLO = 'L', and
            // TRANS = 'N'

            ztrsm('R', 'U', 'C', DIAG, M, N2, ALPHA, A(N).asMatrix(), N,
                B(0, N1), LDB);
            zgemm('N', 'N', M, N1, N2, -Complex.one, B(0, N1), LDB,
                A(N1).asMatrix(), N, ALPHA, B(0, 0), LDB);
            ztrsm('R', 'L', 'N', DIAG, M, N1, Complex.one, A(0).asMatrix(), N,
                B(0, 0), LDB);
          } else {
            // SIDE  ='R', N is odd, TRANSR = 'N', UPLO = 'L', and
            // TRANS = 'C'

            ztrsm('R', 'L', 'C', DIAG, M, N1, ALPHA, A(0).asMatrix(), N,
                B(0, 0), LDB);
            zgemm('N', 'C', M, N2, N1, -Complex.one, B(0, 0), LDB,
                A(N1).asMatrix(), N, ALPHA, B(0, N1), LDB);
            ztrsm('R', 'U', 'N', DIAG, M, N2, Complex.one, A(N).asMatrix(), N,
                B(0, N1), LDB);
          }
        } else {
          // SIDE  ='R', N is odd, TRANSR = 'N', and UPLO = 'U'

          if (NOTRANS) {
            // SIDE  ='R', N is odd, TRANSR = 'N', UPLO = 'U', and
            // TRANS = 'N'

            ztrsm('R', 'L', 'C', DIAG, M, N1, ALPHA, A(N2).asMatrix(), N,
                B(0, 0), LDB);
            zgemm('N', 'N', M, N2, N1, -Complex.one, B(0, 0), LDB,
                A(0).asMatrix(), N, ALPHA, B(0, N1), LDB);
            ztrsm('R', 'U', 'N', DIAG, M, N2, Complex.one, A(N1).asMatrix(), N,
                B(0, N1), LDB);
          } else {
            // SIDE  ='R', N is odd, TRANSR = 'N', UPLO = 'U', and
            // TRANS = 'C'

            ztrsm('R', 'U', 'C', DIAG, M, N2, ALPHA, A(N1).asMatrix(), N,
                B(0, N1), LDB);
            zgemm('N', 'C', M, N1, N2, -Complex.one, B(0, N1), LDB,
                A(0).asMatrix(), N, ALPHA, B(0, 0), LDB);
            ztrsm('R', 'L', 'N', DIAG, M, N1, Complex.one, A(N2).asMatrix(), N,
                B(0, 0), LDB);
          }
        }
      } else {
        // SIDE = 'R', N is odd, and TRANSR = 'C'

        if (LOWER) {
          // SIDE  ='R', N is odd, TRANSR = 'C', and UPLO = 'L'

          if (NOTRANS) {
            // SIDE  ='R', N is odd, TRANSR = 'C', UPLO = 'L', and
            // TRANS = 'N'

            ztrsm('R', 'L', 'N', DIAG, M, N2, ALPHA, A(1).asMatrix(), N1,
                B(0, N1), LDB);
            zgemm('N', 'C', M, N1, N2, -Complex.one, B(0, N1), LDB,
                A(N1 * N1).asMatrix(), N1, ALPHA, B(0, 0), LDB);
            ztrsm('R', 'U', 'C', DIAG, M, N1, Complex.one, A(0).asMatrix(), N1,
                B(0, 0), LDB);
          } else {
            // SIDE  ='R', N is odd, TRANSR = 'C', UPLO = 'L', and
            // TRANS = 'C'

            ztrsm('R', 'U', 'N', DIAG, M, N1, ALPHA, A(0).asMatrix(), N1,
                B(0, 0), LDB);
            zgemm('N', 'N', M, N2, N1, -Complex.one, B(0, 0), LDB,
                A(N1 * N1).asMatrix(), N1, ALPHA, B(0, N1), LDB);
            ztrsm('R', 'L', 'C', DIAG, M, N2, Complex.one, A(1).asMatrix(), N1,
                B(0, N1), LDB);
          }
        } else {
          // SIDE  ='R', N is odd, TRANSR = 'C', and UPLO = 'U'

          if (NOTRANS) {
            // SIDE  ='R', N is odd, TRANSR = 'C', UPLO = 'U', and
            // TRANS = 'N'

            ztrsm('R', 'U', 'N', DIAG, M, N1, ALPHA, A(N2 * N2).asMatrix(), N2,
                B(0, 0), LDB);
            zgemm('N', 'C', M, N2, N1, -Complex.one, B(0, 0), LDB,
                A(0).asMatrix(), N2, ALPHA, B(0, N1), LDB);
            ztrsm('R', 'L', 'C', DIAG, M, N2, Complex.one,
                A(N1 * N2).asMatrix(), N2, B(0, N1), LDB);
          } else {
            // SIDE  ='R', N is odd, TRANSR = 'C', UPLO = 'U', and
            // TRANS = 'C'

            ztrsm('R', 'L', 'N', DIAG, M, N2, ALPHA, A(N1 * N2).asMatrix(), N2,
                B(0, N1), LDB);
            zgemm('N', 'N', M, N1, N2, -Complex.one, B(0, N1), LDB,
                A(0).asMatrix(), N2, ALPHA, B(0, 0), LDB);
            ztrsm('R', 'U', 'C', DIAG, M, N1, Complex.one,
                A(N2 * N2).asMatrix(), N2, B(0, 0), LDB);
          }
        }
      }
    } else {
      // SIDE = 'R' and N is even

      if (NORMALTRANSR) {
        // SIDE = 'R', N is even, and TRANSR = 'N'

        if (LOWER) {
          // SIDE  ='R', N is even, TRANSR = 'N', and UPLO = 'L'

          if (NOTRANS) {
            // SIDE  ='R', N is even, TRANSR = 'N', UPLO = 'L',
            // and TRANS = 'N'

            ztrsm('R', 'U', 'C', DIAG, M, K, ALPHA, A(0).asMatrix(), N + 1,
                B(0, K), LDB);
            zgemm('N', 'N', M, K, K, -Complex.one, B(0, K), LDB,
                A(K + 1).asMatrix(), N + 1, ALPHA, B(0, 0), LDB);
            ztrsm('R', 'L', 'N', DIAG, M, K, Complex.one, A(1).asMatrix(),
                N + 1, B(0, 0), LDB);
          } else {
            // SIDE  ='R', N is even, TRANSR = 'N', UPLO = 'L',
            // and TRANS = 'C'

            ztrsm('R', 'L', 'C', DIAG, M, K, ALPHA, A(1).asMatrix(), N + 1,
                B(0, 0), LDB);
            zgemm('N', 'C', M, K, K, -Complex.one, B(0, 0), LDB,
                A(K + 1).asMatrix(), N + 1, ALPHA, B(0, K), LDB);
            ztrsm('R', 'U', 'N', DIAG, M, K, Complex.one, A(0).asMatrix(),
                N + 1, B(0, K), LDB);
          }
        } else {
          // SIDE  ='R', N is even, TRANSR = 'N', and UPLO = 'U'

          if (NOTRANS) {
            // SIDE  ='R', N is even, TRANSR = 'N', UPLO = 'U',
            // and TRANS = 'N'

            ztrsm('R', 'L', 'C', DIAG, M, K, ALPHA, A(K + 1).asMatrix(), N + 1,
                B(0, 0), LDB);
            zgemm('N', 'N', M, K, K, -Complex.one, B(0, 0), LDB,
                A(0).asMatrix(), N + 1, ALPHA, B(0, K), LDB);
            ztrsm('R', 'U', 'N', DIAG, M, K, Complex.one, A(K).asMatrix(),
                N + 1, B(0, K), LDB);
          } else {
            // SIDE  ='R', N is even, TRANSR = 'N', UPLO = 'U',
            // and TRANS = 'C'

            ztrsm('R', 'U', 'C', DIAG, M, K, ALPHA, A(K).asMatrix(), N + 1,
                B(0, K), LDB);
            zgemm('N', 'C', M, K, K, -Complex.one, B(0, K), LDB,
                A(0).asMatrix(), N + 1, ALPHA, B(0, 0), LDB);
            ztrsm('R', 'L', 'N', DIAG, M, K, Complex.one, A(K + 1).asMatrix(),
                N + 1, B(0, 0), LDB);
          }
        }
      } else {
        // SIDE = 'R', N is even, and TRANSR = 'C'

        if (LOWER) {
          // SIDE  ='R', N is even, TRANSR = 'C', and UPLO = 'L'

          if (NOTRANS) {
            // SIDE  ='R', N is even, TRANSR = 'C', UPLO = 'L',
            // and TRANS = 'N'

            ztrsm('R', 'L', 'N', DIAG, M, K, ALPHA, A(0).asMatrix(), K, B(0, K),
                LDB);
            zgemm('N', 'C', M, K, K, -Complex.one, B(0, K), LDB,
                A((K + 1) * K).asMatrix(), K, ALPHA, B(0, 0), LDB);
            ztrsm('R', 'U', 'C', DIAG, M, K, Complex.one, A(K).asMatrix(), K,
                B(0, 0), LDB);
          } else {
            // SIDE  ='R', N is even, TRANSR = 'C', UPLO = 'L',
            // and TRANS = 'C'

            ztrsm('R', 'U', 'N', DIAG, M, K, ALPHA, A(K).asMatrix(), K, B(0, 0),
                LDB);
            zgemm('N', 'N', M, K, K, -Complex.one, B(0, 0), LDB,
                A((K + 1) * K).asMatrix(), K, ALPHA, B(0, K), LDB);
            ztrsm('R', 'L', 'C', DIAG, M, K, Complex.one, A(0).asMatrix(), K,
                B(0, K), LDB);
          }
        } else {
          // SIDE  ='R', N is even, TRANSR = 'C', and UPLO = 'U'

          if (NOTRANS) {
            // SIDE  ='R', N is even, TRANSR = 'C', UPLO = 'U',
            // and TRANS = 'N'

            ztrsm('R', 'U', 'N', DIAG, M, K, ALPHA, A((K + 1) * K).asMatrix(),
                K, B(0, 0), LDB);
            zgemm('N', 'C', M, K, K, -Complex.one, B(0, 0), LDB,
                A(0).asMatrix(), K, ALPHA, B(0, K), LDB);
            ztrsm('R', 'L', 'C', DIAG, M, K, Complex.one, A(K * K).asMatrix(),
                K, B(0, K), LDB);
          } else {
            // SIDE  ='R', N is even, TRANSR = 'C', UPLO = 'U',
            // and TRANS = 'C'

            ztrsm('R', 'L', 'N', DIAG, M, K, ALPHA, A(K * K).asMatrix(), K,
                B(0, K), LDB);
            zgemm('N', 'N', M, K, K, -Complex.one, B(0, K), LDB,
                A(0).asMatrix(), K, ALPHA, B(0, 0), LDB);
            ztrsm('R', 'U', 'C', DIAG, M, K, Complex.one,
                A((K + 1) * K).asMatrix(), K, B(0, 0), LDB);
          }
        }
      }
    }
  }
}