4 #include "types/simple.h"
5 #include "../gmx_blas.h"
8 F77_FUNC(strsm,STRSM)(const char * side,
20 const char xside = toupper(*side);
21 const char xuplo = toupper(*uplo);
22 const char xtrans = toupper(*transa);
23 const char xdiag = toupper(*diag);
31 float alpha = *alpha__;
37 if(fabs(alpha)<GMX_FLOAT_MIN) {
51 if(fabs(alpha-1.0)>GMX_FLOAT_EPS) {
53 b[j*(ldb)+i] *= alpha;
56 if( fabs(b[j*(ldb)+k])>GMX_FLOAT_MIN) {
58 b[j*(ldb)+k] /= a[k*(lda)+k];
60 b[j*(ldb)+i] -= b[j*(ldb)+k]*a[k*(lda)+i];
67 if(fabs(alpha-1.0)>GMX_FLOAT_EPS)
69 b[j*(ldb)+i] *= alpha;
71 if( fabs(b[j*(ldb)+k])>GMX_FLOAT_MIN) {
73 b[j*(ldb)+k] /= a[k*(lda)+k];
75 b[j*(ldb)+i] -= b[j*(ldb)+k]*a[k*(lda)+i];
86 temp = alpha * b[j*(ldb)+i];
88 temp -= a[i*(lda)+k] * b[j*(ldb)+k];
98 temp = alpha * b[j*(ldb)+i];
100 temp -= a[i*(lda)+k] * b[j*(ldb)+k];
102 temp /= a[i*(lda)+i];
115 if(fabs(alpha-1.0)>GMX_FLOAT_EPS)
117 b[j*(ldb)+i] *= alpha;
119 if( fabs(a[j*(lda)+k])>GMX_FLOAT_MIN) {
121 b[j*(ldb)+i] -= a[j*(lda)+k]*b[k*(ldb)+i];
125 temp = 1.0/a[j*(lda)+j];
127 b[j*(ldb)+i] *= temp;
132 for(j=n-1;j>=0;j--) {
133 if(fabs(alpha-1.0)>GMX_FLOAT_EPS)
135 b[j*(ldb)+i] *= alpha;
137 if( fabs(a[j*(lda)+k])>GMX_FLOAT_MIN ) {
139 b[j*(ldb)+i] -= a[j*(lda)+k]*b[k*(ldb)+i];
143 temp = 1.0/a[j*(lda)+j];
145 b[j*(ldb)+i] *= temp;
153 for(k=n-1;k>=0;k--) {
155 temp = 1.0/a[k*(lda)+k];
157 b[k*(ldb)+i] *= temp;
160 if( fabs(a[k*(lda)+j])>GMX_FLOAT_MIN) {
163 b[j*(ldb)+i] -= temp * b[k*(ldb)+i];
166 if(fabs(alpha-1.0)>GMX_FLOAT_EPS)
168 b[k*(ldb)+i] *= alpha;
174 temp = 1.0/a[k*(lda)+k];
176 b[k*(ldb)+i] *= temp;
179 if( fabs(a[k*(lda)+j])>GMX_FLOAT_MIN) {
182 b[j*(ldb)+i] -= temp * b[k*(ldb)+i];
185 if(fabs(alpha-1.0)>GMX_FLOAT_EPS)
187 b[k*(ldb)+i] *= alpha;