Canoe
Comprehensive Atmosphere N' Ocean Engine
ludcmp.c
Go to the documentation of this file.
1 #include <math.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 
14 int ludcmp(double **a, int n, int *indx) {
15  int i, imax, j, k, d;
16  double big, dum, sum, temp;
17  double *vv = (double *)malloc(n * sizeof(double));
18 
19  d = 1;
20  for (i = 0; i < n; i++) {
21  big = 0.0;
22  for (j = 0; j < n; j++)
23  if ((temp = fabs(a[i][j])) > big) big = temp;
24  if (big == 0.0) {
25  fprintf(stderr, "Singular matrix in routine ludcmp");
26  exit(1);
27  }
28  vv[i] = 1.0 / big;
29  }
30  for (j = 0; j < n; j++) {
31  for (i = 0; i < j; i++) {
32  sum = a[i][j];
33  for (k = 0; k < i; k++) sum -= a[i][k] * a[k][j];
34  a[i][j] = sum;
35  }
36  big = 0.0;
37  for (i = j; i < n; i++) {
38  sum = a[i][j];
39  for (k = 0; k < j; k++) sum -= a[i][k] * a[k][j];
40  a[i][j] = sum;
41  if ((dum = vv[i] * fabs(sum)) >= big) {
42  big = dum;
43  imax = i;
44  }
45  }
46  if (j != imax) {
47  for (k = 0; k < n; k++) {
48  dum = a[imax][k];
49  a[imax][k] = a[j][k];
50  a[j][k] = dum;
51  }
52  d = -d;
53  vv[imax] = vv[j];
54  }
55  indx[j] = imax;
56  if (j != n - 1) {
57  dum = (1.0 / a[j][j]);
58  for (i = j + 1; i < n; i++) a[i][j] *= dum;
59  }
60  }
61  free(vv);
62 
63  return d;
64 }
int ludcmp(double **a, int n, int *indx)
Definition: ludcmp.c:14
float temp
Definition: fit_ammonia.py:6