Skip to content

Commit f5f0213

Browse files
committed
refactor: precompute indices
--- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed ---
1 parent a4fb01d commit f5f0213

File tree

1 file changed

+41
-27
lines changed
  • lib/node_modules/@stdlib/lapack/base/dgttrf/lib

1 file changed

+41
-27
lines changed

lib/node_modules/@stdlib/lapack/base/dgttrf/lib/base.js

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,12 @@ function dgttrf( N, DL, sdl, odl, D, sd, od, DU, sdu, odu, DU2, sdu2, odu2, IPIV
7878
var idu2;
7979
var idu;
8080
var idl;
81+
var dli;
82+
var dui;
8183
var id;
8284
var ip;
85+
var di;
86+
var ii;
8387
var i;
8488

8589
// Quick return if possible
@@ -100,51 +104,61 @@ function dgttrf( N, DL, sdl, odl, D, sd, od, DU, sdu, odu, DU2, sdu2, odu2, IPIV
100104

101105
// Initialise ith element of DU2 as 0
102106
for ( i = 0; i < N-2; i++ ) {
103-
DU2[ idu + (sdu*i) ] = 0;
107+
DU2[ idu + dui ] = 0;
104108
}
105109

106110
for ( i = 0; i < N-2; i++ ) {
107-
if ( abs( D[ id + (sd*i) ] ) >= abs( DL[ idl + (sdl*i) ] ) ) { // No row interchange required, eleminate ith element of DL
111+
di = sd * i;
112+
dli = sdl * i;
113+
ii = si * i;
114+
dui = sdu * i;
115+
116+
if ( abs( D[ id + di ] ) >= abs( DL[ idl + dli ] ) ) { // No row interchange required, eleminate ith element of DL
108117
if ( D[ id ] !== 0.0 ) {
109-
fact = DL[ idl + (sdl*i) ] / D[ id + (sd*i) ];
110-
DL[ idl + (sdl*i) ] = fact;
111-
D[ id + (sd*(i+1)) ] = D[ id + (sd*(i+1)) ] - ( fact*DU[ idu + (sdu*i) ] ); // eslint-disable-line max-len
118+
fact = DL[ idl + dli ] / D[ id + di ];
119+
DL[ idl + dli ] = fact;
120+
D[ id + di + sd ] = D[ id + di + sd ] - ( fact*DU[ idu + dui ] ); // eslint-disable-line max-len
112121
}
113122
} else { // Interchange the ith and (i+1)th rows and eliminate ith element of DL
114-
fact = D[ id+(sd*i) ] / DL[ idl+(sdl*i) ];
115-
D[ id+(sd*i) ] = DL[ idl+(sdl*i) ];
116-
DL[ idl+(sdl*i) ] = fact;
117-
temp = DU[ idu+(sdu*i) ];
118-
DU[ idu+(sdu*i) ] = D[ id + (sd*(i+1)) ];
119-
D[ id+(sd*(i+1)) ] = temp - ( fact*D[ id+(sd*(i+1)) ] );
120-
DU2[ idu2+(sdu2*i) ] = DU[ idu+(sdu*(i+1)) ];
121-
DU[ idu+(sdu*(i+1)) ] = -fact*DU[ idu+(sdu*(i+1)) ];
122-
IPIV[ ip+(si*i) ] = i + 1;
123+
fact = D[ id + di ] / DL[ idl + dli ];
124+
D[ id + di ] = DL[ idl + dli ];
125+
DL[ idl + dli ] = fact;
126+
temp = DU[ idu + dui ];
127+
DU[ idu + dui ] = D[ id + di + sd ];
128+
D[ id + di + sd ] = temp - ( fact * D[ id + di + sd ] );
129+
DU2[ idu2 + ( sdu2 * i ) ] = DU[ idu + dui + sdu ];
130+
DU[ idu + dui + sdu ] = -fact * DU[ idu + dui + sdu ];
131+
IPIV[ ip + ii ] = i + 1;
123132
}
124133
}
125134

126135
if ( N > 1 ) {
127136
i = N - 2;
128-
if ( abs( D[ id + (sd*i) ] ) >= abs( DL[ idl + (sdl*i) ] ) ) {
129-
if ( D[ id + (sd*i) ] !== 0 ) {
130-
fact = DL[ idl + (sdl*i) ] / D[ id + (sd*i) ];
131-
DL[ idl + (sdl*i) ] = fact;
132-
D[ id + (sd*(i+1)) ] = D[ id + (sd*(i+1)) ] - (fact*DU[ idu + (sdu*i) ]); // eslint-disable-line max-len
137+
di = sd * i;
138+
dli = sdl * i;
139+
ii = si * i;
140+
dui = sdu * i;
141+
142+
if ( abs( D[ id + di ] ) >= abs( DL[ idl + dli ] ) ) {
143+
if ( D[ id + di ] !== 0 ) {
144+
fact = DL[ idl + dli ] / D[ id + di ];
145+
DL[ idl + dli ] = fact;
146+
D[ id + di + sd ] = D[ id + di + sd ] - (fact*DU[ idu + dui ]);
133147
}
134148
} else {
135-
fact = D[ id+(sd*i) ] / DL[ idl+(sdl*i) ];
136-
D[ id+(sd*i) ] = DL[ idl+(sdl*i) ];
137-
DL[ idl+(sdl*i) ] = fact;
138-
temp = DU[ idu+(sdu*i) ];
139-
DU[ idu+(sdu*i) ] = D[ id + (sd*(i+1)) ];
140-
D[ id+(sd*(i+1)) ] = temp - ( fact*D[ id+(sd*(i+1)) ] );
141-
IPIV[ ip+(si*i) ] = i + 1;
149+
fact = D[ id + di ] / DL[ idl + dli ];
150+
D[ id + di ] = DL[ idl + dli ];
151+
DL[ idl + dli ] = fact;
152+
temp = DU[ idu + dui ];
153+
DU[ idu + dui ] = D[ id + di + sd ];
154+
D[ id + di + sd ] = temp - ( fact * D[ id + di + sd ] );
155+
IPIV[ ip + ii ] = i + 1;
142156
}
143157
}
144158

145159
// Check for a 0 on the diagonal of U
146160
for ( i = 0; i < N; i++ ) {
147-
if ( D[ id+(sd*i) ] === 0.0 ) {
161+
if ( D[ sd * i ] === 0.0 ) {
148162
return i;
149163
}
150164
}

0 commit comments

Comments
 (0)