Files
lammps-gran-kokkos/lib/linalg/zlaswp.cpp
2024-11-09 04:14:11 -05:00

80 lines
2.3 KiB
C++

#ifdef __cplusplus
extern "C" {
#endif
#include "lmp_f2c.h"
int zlaswp_(integer *n, doublecomplex *a, integer *lda, integer *k1, integer *k2, integer *ipiv,
integer *incx)
{
integer a_dim1, a_offset, i__1, i__2, i__3, i__4, i__5, i__6;
integer i__, j, k, i1, i2, n32, ip, ix, ix0, inc;
doublecomplex temp;
a_dim1 = *lda;
a_offset = 1 + a_dim1;
a -= a_offset;
--ipiv;
if (*incx > 0) {
ix0 = *k1;
i1 = *k1;
i2 = *k2;
inc = 1;
} else if (*incx < 0) {
ix0 = *k1 + (*k1 - *k2) * *incx;
i1 = *k2;
i2 = *k1;
inc = -1;
} else {
return 0;
}
n32 = *n / 32 << 5;
if (n32 != 0) {
i__1 = n32;
for (j = 1; j <= i__1; j += 32) {
ix = ix0;
i__2 = i2;
i__3 = inc;
for (i__ = i1; i__3 < 0 ? i__ >= i__2 : i__ <= i__2; i__ += i__3) {
ip = ipiv[ix];
if (ip != i__) {
i__4 = j + 31;
for (k = j; k <= i__4; ++k) {
i__5 = i__ + k * a_dim1;
temp.r = a[i__5].r, temp.i = a[i__5].i;
i__5 = i__ + k * a_dim1;
i__6 = ip + k * a_dim1;
a[i__5].r = a[i__6].r, a[i__5].i = a[i__6].i;
i__5 = ip + k * a_dim1;
a[i__5].r = temp.r, a[i__5].i = temp.i;
}
}
ix += *incx;
}
}
}
if (n32 != *n) {
++n32;
ix = ix0;
i__1 = i2;
i__3 = inc;
for (i__ = i1; i__3 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__3) {
ip = ipiv[ix];
if (ip != i__) {
i__2 = *n;
for (k = n32; k <= i__2; ++k) {
i__4 = i__ + k * a_dim1;
temp.r = a[i__4].r, temp.i = a[i__4].i;
i__4 = i__ + k * a_dim1;
i__5 = ip + k * a_dim1;
a[i__4].r = a[i__5].r, a[i__4].i = a[i__5].i;
i__4 = ip + k * a_dim1;
a[i__4].r = temp.r, a[i__4].i = temp.i;
}
}
ix += *incx;
}
}
return 0;
}
#ifdef __cplusplus
}
#endif