dsyswapr function

void dsyswapr(
  1. String UPLO,
  2. int N,
  3. Matrix<double> A_,
  4. int LDA,
  5. int I1,
  6. int I2,
)

Implementation

void dsyswapr(
  final String UPLO,
  final int N,
  final Matrix<double> A_,
  final int LDA,
  final int I1,
  final int I2,
) {
  final A = A_.having(ld: LDA);
  bool UPPER;
  double TMP;

  UPPER = lsame(UPLO, 'U');
  if (UPPER) {
    // UPPER
    // first swap
    //  - swap column I1 and I2 from I1 to I1-1
    dswap(I1 - 1, A(1, I1).asArray(), 1, A(1, I2).asArray(), 1);

    // second swap :
    // - swap A(I1,I1) and A(I2,I2)
    // - swap row I1 from I1+1 to I2-1 with col I2 from I1+1 to I2-1
    TMP = A[I1][I1];
    A[I1][I1] = A[I2][I2];
    A[I2][I2] = TMP;

    dswap(
        I2 - I1 - 1, A(I1, I1 + 1).asArray(), LDA, A(I1 + 1, I2).asArray(), 1);

    // third swap
    // - swap row I1 and I2 from I2+1 to N
    if (I2 < N) {
      dswap(N - I2, A(I1, I2 + 1).asArray(), LDA, A(I2, I2 + 1).asArray(), LDA);
    }
  } else {
    // LOWER
    // first swap
    //  - swap row I1 and I2 from I1 to I1-1
    dswap(I1 - 1, A(I1, 1).asArray(), LDA, A(I2, 1).asArray(), LDA);

    // second swap :
    //  - swap A(I1,I1) and A(I2,I2)
    //  - swap col I1 from I1+1 to I2-1 with row I2 from I1+1 to I2-1
    TMP = A[I1][I1];
    A[I1][I1] = A[I2][I2];
    A[I2][I2] = TMP;

    dswap(
        I2 - I1 - 1, A(I1 + 1, I1).asArray(), 1, A(I2, I1 + 1).asArray(), LDA);

    // third swap
    //  - swap col I1 and I2 from I2+1 to N
    if (I2 < N) {
      dswap(N - I2, A(I2 + 1, I1).asArray(), 1, A(I2 + 1, I2).asArray(), 1);
    }
  }
}