Lines Matching refs:N

34 CEED_QFUNCTION_HELPER CeedInt MaxEntryRow(const CeedScalar *A, CeedInt N, CeedInt i) {  in MaxEntryRow()  argument
36 for (CeedInt j = i + 2; j < N; j++) in MaxEntryRow()
37 if (fabs(A[i * N + j]) > fabs(A[i * N + j_max])) j_max = j; in MaxEntryRow()
48 CEED_QFUNCTION_HELPER void MaxEntry(const CeedScalar *A, CeedInt N, CeedInt *max_idx_row, CeedInt *… in MaxEntry() argument
51 CeedScalar max_entry = fabs(A[*i_max * N + *j_max]); in MaxEntry()
52 for (CeedInt i = 1; i < N - 1; i++) { in MaxEntry()
54 if (fabs(A[i * N + j]) > max_entry) { in MaxEntry()
55 max_entry = fabs(A[i * N + j]); in MaxEntry()
71 CEED_QFUNCTION_HELPER void CalcRot(const CeedScalar *A, CeedInt N, CeedInt i, CeedInt j, CeedScalar… in CalcRot() argument
73 CeedScalar A_jj_ii = (A[j * N + j] - A[i * N + i]); in CalcRot()
78 CeedScalar A_ij = A[i * N + j]; in CalcRot()
159 CEED_QFUNCTION_HELPER void ApplyRot(CeedScalar *A, CeedInt N, CeedInt i, CeedInt j, CeedInt *max_id… in ApplyRot() argument
161 A[i * N + i] -= rotmat_cst[2] * A[i * N + j]; in ApplyRot()
162 A[j * N + j] += rotmat_cst[2] * A[i * N + j]; in ApplyRot()
169 A[i * N + j] = 0.0; in ApplyRot()
173 …A[i * N + w] = A[w * N + i]; // backup the previou… in ApplyRot()
174 …A[w * N + i] = rotmat_cst[0] * A[w * N + i] - rotmat_cst[1] * A[w * N + j]; // A[w][i], A[w][j] f… in ApplyRot()
175 if (i == max_idx_row[w]) max_idx_row[w] = MaxEntryRow(A, N, w); in ApplyRot()
176 else if (fabs(A[w * N + i]) > fabs(A[w * N + max_idx_row[w]])) max_idx_row[w] = i; in ApplyRot()
179 …A[w * N + i] = A[i * N + w]; // backup the previou… in ApplyRot()
180 …A[i * N + w] = rotmat_cst[0] * A[i * N + w] - rotmat_cst[1] * A[w * N + j]; // A[i][w], A[w][j] f… in ApplyRot()
182 …for (CeedInt w = j + 1; w < N; w++) { // 0 <= i < j+1 <= … in ApplyRot()
183 …A[w * N + i] = A[i * N + w]; // backup the previou… in ApplyRot()
184 …A[i * N + w] = rotmat_cst[0] * A[i * N + w] - rotmat_cst[1] * A[j * N + w]; // A[i][w], A[j][w] f… in ApplyRot()
188 max_idx_row[i] = MaxEntryRow(A, N, i); in ApplyRot()
192 …A[w * N + j] = rotmat_cst[1] * A[i * N + w] + rotmat_cst[0] * A[w * N + j]; // A[i][w], A[w][j] f… in ApplyRot()
193 if (j == max_idx_row[w]) max_idx_row[w] = MaxEntryRow(A, N, w); in ApplyRot()
194 else if (fabs(A[w * N + j]) > fabs(A[w * N + max_idx_row[w]])) max_idx_row[w] = j; in ApplyRot()
197 …A[w * N + j] = rotmat_cst[1] * A[w * N + i] + rotmat_cst[0] * A[w * N + j]; // A[w][i], A[w][j] f… in ApplyRot()
198 if (j == max_idx_row[w]) max_idx_row[w] = MaxEntryRow(A, N, w); in ApplyRot()
199 else if (fabs(A[w * N + j]) > fabs(A[w * N + max_idx_row[w]])) max_idx_row[w] = j; in ApplyRot()
201 …for (CeedInt w = j + 1; w < N; w++) { // 0 <= i < j < … in ApplyRot()
202 …A[j * N + w] = rotmat_cst[1] * A[w * N + i] + rotmat_cst[0] * A[j * N + w]; // A[w][i], A[j][w] f… in ApplyRot()
205 max_idx_row[j] = MaxEntryRow(A, N, j); in ApplyRot()
218 CEED_QFUNCTION_HELPER void ApplyRotLeft(CeedScalar *A, CeedInt N, CeedInt i, CeedInt j, CeedScalar … in ApplyRotLeft() argument
220 for (CeedInt v = 0; v < N; v++) { in ApplyRotLeft()
221 CeedScalar Aiv = A[i * N + v]; in ApplyRotLeft()
222 A[i * N + v] = rotmat_cst[0] * A[i * N + v] - rotmat_cst[1] * A[j * N + v]; in ApplyRotLeft()
223 A[j * N + v] = rotmat_cst[1] * Aiv + rotmat_cst[0] * A[j * N + v]; in ApplyRotLeft()
233 CEED_QFUNCTION_HELPER void SortRows(CeedScalar *eval, CeedScalar *evec, CeedInt N, SortCriteria sor… in SortRows() argument
236 for (CeedInt i = 0; i < N - 1; i++) { in SortRows()
238 for (CeedInt j = i + 1; j < N; j++) { in SortRows()
258 for (CeedInt k = 0; k < N; k++) SwapScalar(&evec[i * N + k], &evec[i_max * N + k]); in SortRows()
281 CEED_QFUNCTION_HELPER CeedInt Diagonalize(CeedScalar *A, CeedInt N, CeedScalar *eval, CeedScalar *e… in Diagonalize() argument
286 for (CeedInt i = 0; i < N; i++) in Diagonalize()
287 …for (CeedInt j = 0; j < N; j++) evec[i * N + j] = (i == j) ? 1.0 : 0.0; // Set evec equal to the … in Diagonalize()
289 for (CeedInt i = 0; i < N - 1; i++) max_idx_row[i] = MaxEntryRow(A, N, i); in Diagonalize()
293 CeedInt max_num_iters = max_num_sweeps * N * (N - 1) / 2; in Diagonalize()
296 MaxEntry(A, N, max_idx_row, &i, &j); in Diagonalize()
299 …if ((A[i * N + i] + A[i * N + j] == A[i * N + i]) && (A[j * N + j] + A[i * N + j] == A[j * N + j])… in Diagonalize()
300 A[i * N + j] = 0.0; in Diagonalize()
301 max_idx_row[i] = MaxEntryRow(A, N, i); in Diagonalize()
304 if (A[i * N + j] == 0.0) break; in Diagonalize()
306 …CalcRot(A, N, i, j, rotmat_cst); // Calculate the parameters of the rotation matrix. in Diagonalize()
307 ApplyRot(A, N, i, j, max_idx_row, rotmat_cst); // Apply this rotation to the A matrix. in Diagonalize()
308 if (calc_evec) ApplyRotLeft(evec, N, i, j, rotmat_cst); in Diagonalize()
311 for (CeedInt i = 0; i < N; i++) eval[i] = A[i * N + i]; in Diagonalize()
314 SortRows(eval, evec, N, sort_criteria); in Diagonalize()
316 if ((n_iters > max_num_iters) && (N > 1)) // If we exceeded max_num_iters, in Diagonalize()