16
16
* limitations under the License.
17
17
*/
18
18
19
- /* eslint-disable max-len, max-params, max-statements */
19
+ /* eslint-disable max-len, max-params, max-statements, max-lines-per-function */
20
20
21
21
'use strict' ;
22
22
@@ -226,8 +226,8 @@ function dgebal( job, N, A, strideA1, strideA2, offsetA, out, strideOut, offsetO
226
226
}
227
227
}
228
228
229
- // Initialize ` scale` for non-permuted submatrix
230
- is = offsetScale + ( k * strideScale ) ;
229
+ // Initialize scale for non-permuted submatrix
230
+ is = offsetScale + ( k * strideScale ) ;
231
231
for ( i = k ; i <= l ; i ++ ) {
232
232
scale [ is ] = 1.0 ;
233
233
is += strideScale ;
@@ -247,16 +247,25 @@ function dgebal( job, N, A, strideA1, strideA2, offsetA, out, strideOut, offsetO
247
247
248
248
noconv = true ;
249
249
while ( noconv ) {
250
+ is = offsetScale + ( k * strideScale ) ; // Follows scale
251
+ ia1 = offsetA + ( k * strideA1 ) + ( k * strideA2 ) ; // Follows A[ k, i ]
252
+ ia2 = offsetA + ( k * strideA1 ) + ( k * strideA2 ) ; // Follows A[ i, k ]
253
+ ia3 = offsetA + ( k * strideA2 ) ; // follows `i`th column of A
254
+
250
255
noconv = false ;
251
256
for ( i = k ; i <= l ; i ++ ) {
252
- c = dnrm2 ( l - k + 1 , A , strideA1 , offsetA + ( k * strideA1 ) + ( i * strideA2 ) ) ;
253
- r = dnrm2 ( l - k + 1 , A , strideA2 , offsetA + ( i * strideA1 ) + ( k * strideA2 ) ) ;
254
- ica = idamax ( l + 1 , A , strideA1 , offsetA + ( i * strideA2 ) ) ;
257
+ c = dnrm2 ( l - k + 1 , A , strideA1 , ia1 ) ;
258
+ r = dnrm2 ( l - k + 1 , A , strideA2 , ia2 ) ;
259
+ ica = idamax ( l + 1 , A , strideA1 , ia3 ) ;
255
260
ca = abs ( A [ offsetA + ( ica * strideA1 ) + ( i * strideA2 ) ] ) ;
256
- ira = idamax ( N - k + 1 , A , strideA2 , offsetA + ( i * strideA1 ) + ( k * strideA2 ) ) ;
261
+ ira = idamax ( N - k + 1 , A , strideA2 , ia2 ) ;
257
262
ra = abs ( A [ offsetA + ( i * strideA1 ) + ( ( ira + k ) * strideA2 ) ] ) ;
258
263
259
264
if ( c === 0.0 || r === 0.0 ) {
265
+ ia1 += strideA2 ;
266
+ ia2 += strideA1 ;
267
+ is += strideScale ;
268
+ ia3 += strideA2 ;
260
269
continue ;
261
270
}
262
271
@@ -290,27 +299,44 @@ function dgebal( job, N, A, strideA1, strideA2, offsetA, out, strideOut, offsetO
290
299
291
300
// Now balance
292
301
if ( ( c + r ) >= factor * s ) {
302
+ ia1 += strideA2 ;
303
+ ia2 += strideA1 ;
304
+ is += strideScale ;
305
+ ia3 += strideA2 ;
293
306
continue ;
294
307
}
295
308
296
- if ( f < 1.0 && scale [ offsetScale + ( i * strideScale ) ] < 1.0 ) {
297
- if ( f * scale [ offsetScale + ( i * strideScale ) ] <= sfmin1 ) {
309
+ if ( f < 1.0 && scale [ is ] < 1.0 ) {
310
+ if ( f * scale [ is ] <= sfmin1 ) {
311
+ ia1 += strideA2 ;
312
+ ia2 += strideA1 ;
313
+ is += strideScale ;
314
+ ia3 += strideA2 ;
298
315
continue ;
299
316
}
300
317
}
301
318
302
- if ( f > 1.0 && scale [ offsetScale + ( i * strideScale ) ] > 1.0 ) {
303
- if ( scale [ offsetScale + ( i * strideScale ) ] >= sfmax1 / f ) {
319
+ if ( f > 1.0 && scale [ is ] > 1.0 ) {
320
+ if ( scale [ is ] >= sfmax1 / f ) {
321
+ ia1 += strideA2 ;
322
+ ia2 += strideA1 ;
323
+ is += strideScale ;
324
+ ia3 += strideA2 ;
304
325
continue ;
305
326
}
306
327
}
307
328
308
329
g = 1.0 / f ;
309
- scale [ offsetScale + ( i * strideScale ) ] *= f ;
330
+ scale [ is ] *= f ;
310
331
noconv = true ;
311
332
312
- dscal ( N - k , g , A , strideA2 , offsetA + ( i * strideA1 ) + ( k * strideA2 ) ) ;
313
- dscal ( l + 1 , f , A , strideA1 , offsetA + ( i * strideA2 ) ) ;
333
+ dscal ( N - k , g , A , strideA2 , ia2 ) ;
334
+ dscal ( l + 1 , f , A , strideA1 , ia3 ) ;
335
+
336
+ ia1 += strideA2 ;
337
+ ia2 += strideA1 ;
338
+ is += strideScale ;
339
+ ia3 += strideA2 ;
314
340
}
315
341
}
316
342
0 commit comments