1 #include <../../nrnconf.h>
33 static char rcsid[] =
"solve.c,v 1.1 1997/12/04 17:55:47 hines Exp";
54 Real **mat_ent, *mat_row, *b_ent, *out_ent, *out_col, sum, tiny;
58 dim =
min(matrix->m,matrix->n);
63 mat_ent = matrix->me; b_ent = b->
ve; out_ent = out->
ve;
67 for (
i=dim-1;
i>=0;
i-- )
68 if ( b_ent[
i] != 0.0 )
77 mat_row = &(mat_ent[
i][
i+1]);
78 out_col = &(out_ent[
i+1]);
79 sum -=
__ip__(mat_row,out_col,i_lim-
i);
90 out_ent[
i] = sum/mat_ent[
i][
i];
93 out_ent[
i] = sum/
diag;
106 Real **mat_ent, *mat_row, *b_ent, *out_ent, *out_col, sum, tiny;
110 dim =
min(matrix->m,matrix->n);
115 mat_ent = matrix->me; b_ent = b->
ve; out_ent = out->
ve;
117 for (
i=0;
i<dim;
i++ )
118 if ( b_ent[
i] != 0.0 )
129 mat_row = &(mat_ent[
i][i_lim]);
130 out_col = &(out_ent[i_lim]);
131 sum -=
__ip__(mat_row,out_col,(
int)(
i-i_lim));
142 out_ent[
i] = sum/mat_ent[
i][
i];
145 out_ent[
i] = sum/
diag;
160 Real **U_me, *b_ve, *out_ve, tmp, invdiag, tiny;
164 dim =
min(U->m,U->n);
168 U_me = U->me; b_ve = b->
ve; out_ve = out->
ve;
172 for (
i=0;
i<dim;
i++ )
173 if ( b_ve[
i] != 0.0 )
181 MEM_COPY(&(b_ve[i_lim]),&(out_ve[i_lim]),(dim-i_lim)*
sizeof(
Real));
200 out_ve[
i] *= invdiag;
217 dim =
min(
A->m,
A->n);
225 for (
i=0;
i<dim;
i++ )
244 Real **L_me, *b_ve, *out_ve, tmp, invdiag, tiny;
248 dim =
min(L->m,L->n);
252 L_me = L->me; b_ve = b->
ve; out_ve = out->
ve;
256 for (
i=dim-1;
i>=0;
i-- )
257 if ( b_ve[
i] != 0.0 )
283 out_ve[
i] *= invdiag;
#define error(err_num, fn_name)
static Object ** v_resize(void *v)
void __zero__(Real *dp, int len)
double __ip__(Real *dp1, Real *dp2, int len)
void __mltadd__(Real *dp1, Real *dp2, double s, int len)
VEC * Usolve(MAT *matrix, VEC *b, VEC *out, double diag)
VEC * Dsolve(MAT *A, VEC *b, VEC *x)
VEC * Lsolve(MAT *matrix, VEC *b, VEC *out, double diag)
VEC * UTsolve(MAT *U, VEC *b, VEC *out, double diag)
VEC * LTsolve(MAT *L, VEC *b, VEC *out, double diag)