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