Split g96 I/O routines from confio.cpp
[gromacs.git] / src / gromacs / linearalgebra / gmx_lapack / strti2.c
blobeca8db374d2c7833eaf28f47a2f67b6850dfc2c3
1 #include "../gmx_blas.h"
2 #include "../gmx_lapack.h"
3 #include "lapack_limits.h"
5 void
6 F77_FUNC(strti2,STRTI2)(const char *uplo,
7 const char *diag,
8 int *n,
9 float *a,
10 int *lda,
11 int *info)
13 int a_dim1, a_offset, i__1, i__2;
15 int j;
16 float ajj;
17 int upper, nounit;
18 int c__1 = 1;
21 a_dim1 = *lda;
22 a_offset = 1 + a_dim1;
23 a -= a_offset;
25 *info = 0;
26 upper = (*uplo=='U' || *uplo=='u');
27 nounit = (*diag=='N' || *diag=='n');
29 if (*info != 0) {
30 i__1 = -(*info);
31 return;
34 if (upper) {
36 i__1 = *n;
37 for (j = 1; j <= i__1; ++j) {
38 if (nounit) {
39 a[j + j * a_dim1] = 1. / a[j + j * a_dim1];
40 ajj = -a[j + j * a_dim1];
41 } else {
42 ajj = -1.;
45 i__2 = j - 1;
46 F77_FUNC(strmv,STRMV)("Upper", "No transpose", diag, &i__2, &a[a_offset], lda, &
47 a[j * a_dim1 + 1], &c__1);
48 i__2 = j - 1;
49 F77_FUNC(sscal,SSCAL)(&i__2, &ajj, &a[j * a_dim1 + 1], &c__1);
51 } else {
53 for (j = *n; j >= 1; --j) {
54 if (nounit) {
55 a[j + j * a_dim1] = 1. / a[j + j * a_dim1];
56 ajj = -a[j + j * a_dim1];
57 } else {
58 ajj = -1.;
60 if (j < *n) {
62 i__1 = *n - j;
63 F77_FUNC(strmv,STRMV)("Lower", "No transpose", diag, &i__1, &a[j + 1 + (j +
64 1) * a_dim1], lda, &a[j + 1 + j * a_dim1], &c__1);
65 i__1 = *n - j;
66 F77_FUNC(sscal,SSCAL)(&i__1, &ajj, &a[j + 1 + j * a_dim1], &c__1);
70 return;