#include "lbfgsb.h"
static integer c__1 = 1;
int dpofa(double *a, integer *lda, integer *n, integer *
info)
{
integer a_dim1, a_offset, i__1, i__2, i__3;
double sqrt(double);
static integer j, k;
static double s, t;
static integer jm1;
a_dim1 = *lda;
a_offset = 1 + a_dim1;
a -= a_offset;
i__1 = *n;
for (j = 1; j <= i__1; ++j) {
*info = j;
s = 0.;
jm1 = j - 1;
if (jm1 < 1) {
goto L20;
}
i__2 = jm1;
for (k = 1; k <= i__2; ++k) {
i__3 = k - 1;
t = a[k + j * a_dim1] - ddot(&i__3, &a[k * a_dim1 + 1], &c__1, &
a[j * a_dim1 + 1], &c__1);
t /= a[k + k * a_dim1];
a[k + j * a_dim1] = t;
s += t * t;
}
L20:
s = a[j + j * a_dim1] - s;
if (s <= 0.) {
goto L40;
}
a[j + j * a_dim1] = sqrt(s);
}
*info = 0;
L40:
return 0;
}
int dtrsl(double *t, integer *ldt, integer *n,
double *b, integer *job, integer *info)
{
integer t_dim1, t_offset, i__1, i__2;
static integer j, jj, case__;
static double temp;
t_dim1 = *ldt;
t_offset = 1 + t_dim1;
t -= t_offset;
--b;
i__1 = *n;
for (*info = 1; *info <= i__1; ++(*info)) {
if (t[*info + *info * t_dim1] == 0.) {
goto L150;
}
}
*info = 0;
case__ = 1;
if (*job % 10 != 0) {
case__ = 2;
}
if (*job % 100 / 10 != 0) {
case__ += 2;
}
switch (case__) {
case 1: goto L20;
case 2: goto L50;
case 3: goto L80;
case 4: goto L110;
}
L20:
b[1] /= t[t_dim1 + 1];
if (*n < 2) {
goto L40;
}
i__1 = *n;
for (j = 2; j <= i__1; ++j) {
temp = -b[j - 1];
i__2 = *n - j + 1;
daxpy(&i__2, &temp, &t[j + (j - 1) * t_dim1], &c__1, &b[j], &c__1);
b[j] /= t[j + j * t_dim1];
}
L40:
goto L140;
L50:
b[*n] /= t[*n + *n * t_dim1];
if (*n < 2) {
goto L70;
}
i__1 = *n;
for (jj = 2; jj <= i__1; ++jj) {
j = *n - jj + 1;
temp = -b[j + 1];
daxpy(&j, &temp, &t[(j + 1) * t_dim1 + 1], &c__1, &b[1], &c__1);
b[j] /= t[j + j * t_dim1];
}
L70:
goto L140;
L80:
b[*n] /= t[*n + *n * t_dim1];
if (*n < 2) {
goto L100;
}
i__1 = *n;
for (jj = 2; jj <= i__1; ++jj) {
j = *n - jj + 1;
i__2 = jj - 1;
b[j] -= ddot(&i__2, &t[j + 1 + j * t_dim1], &c__1, &b[j + 1], &c__1);
b[j] /= t[j + j * t_dim1];
}
L100:
goto L140;
L110:
b[1] /= t[t_dim1 + 1];
if (*n < 2) {
goto L130;
}
i__1 = *n;
for (j = 2; j <= i__1; ++j) {
i__2 = j - 1;
b[j] -= ddot(&i__2, &t[j * t_dim1 + 1], &c__1, &b[1], &c__1);
b[j] /= t[j + j * t_dim1];
}
L130:
L140:
L150:
return 0;
}