UCFD_SPARSE  v1.0
Documentation
Loading...
Searching...
No Matches
inverse.c
Go to the documentation of this file.
1
34void ludcmp(int n, double *A)
35{
36 int row, col, kdx;
37 int nrow;
38 double val;
39
40 if (n == 1) { // 1-equation RANS model
41 A[0] = 1.0/A[0];
42 }
43
44 else {
45 for (row=1; row<n; row++) { // Skip first row
46 nrow = n*row;
47 A[nrow] /= A[0];
48 for (col=1; col<n; col++) {
49 // Lower triangular matrix
50 if (row > col) {
51 val = 0.0;
52 for (kdx=0; kdx<col; kdx++)
53 val += A[nrow+kdx] * A[n*kdx+col];
54 A[nrow+col] = (A[nrow+col] - val)/A[(n+1)*col];
55 }
56
57 // Upper triangular matrix
58 else {
59 val = 0.0;
60 for (kdx=0; kdx<row; kdx++)
61 val += A[nrow+kdx]*A[n*kdx+col];
62 A[nrow+col] -= val;
63 }
64 }
65 }
66 }
67}
68
69
73void lusubst(int n, double *LU, double *b)
74{
75 int row, col, nrow;
76 double val;
77
78 if (n == 1) { // 1-equation RANS model
79 b[0] *= LU[0];
80 }
81
82 else {
83 // Forward substitution
84 for (row=1; row<n; row++) {
85 nrow = n*row;
86 val = 0.0;
87 for (col=0; col<row; col++)
88 val += LU[nrow+col]*b[col];
89 b[row] -= val;
90 }
91
92 // Backward substitution
93 b[n-1] /= LU[n*n-1];
94 for (row=n-2; row>-1; row--) {
95 nrow = n*row;
96 val = 0.0;
97 for (col=row+1; col<n; col++)
98 val += LU[nrow+col]*b[col];
99 b[row] = (b[row] - val)/LU[nrow+row];
100 }
101 }
102}
103
void lusubst(int n, double *LU, double *b)
Forward/Backward Substitution function.
Definition: inverse.c:73
void ludcmp(int n, double *A)
LU Decomposition function.
Definition: inverse.c:34