1 #include <../../nrnconf.h> 33 static char rcsid[] =
"zsolve.c,v 1.1 1997/12/04 17:56:17 hines Exp";
40 #define is_zero(z) ((z).re == 0.0 && (z).im == 0.0 ) 53 complex **mat_ent, *mat_row, *b_ent, *out_ent, *out_col, sum;
57 dim =
min(matrix->m,matrix->n);
62 mat_ent = matrix->me; b_ent = b->
ve; out_ent = out->
ve;
64 for ( i=dim-1; i>=0; i-- )
68 out_ent[
i].
re = out_ent[
i].
im = 0.0;
71 for ( i = i_lim; i>=0; i-- )
74 mat_row = &(mat_ent[
i][i+1]);
75 out_col = &(out_ent[i+1]);
88 out_ent[
i] =
zdiv(sum,mat_ent[i][i]);
108 complex **mat_ent, *mat_row, *b_ent, *out_ent, *out_col, sum;
112 dim =
min(matrix->m,matrix->n);
117 mat_ent = matrix->me; b_ent = b->
ve; out_ent = out->
ve;
119 for ( i=0; i<dim; i++ )
123 out_ent[
i].
re = out_ent[
i].
im = 0.0;
126 for ( i = i_lim; i<dim; i++ )
129 mat_row = &(mat_ent[
i][i_lim]);
130 out_col = &(out_ent[i_lim]);
142 out_ent[
i] =
zdiv(sum,mat_ent[i][i]);
163 complex **U_me, *b_ve, *out_ve, tmp;
168 dim =
min(U->m,U->n);
172 U_me = U->me; b_ve = b->
ve; out_ve = out->
ve;
174 for ( i=0; i<dim; i++ )
178 out_ve[
i].
re = out_ve[
i].
im = 0.0;
192 tmp =
zconj(U_me[i][i]);
196 out_ve[
i] =
zdiv(out_ve[i],tmp);
197 tmp.
re = - out_ve[
i].
re;
198 tmp.
im = - out_ve[
i].
im;
207 out_ve[
i].
re *= invdiag;
208 out_ve[
i].
im *= invdiag;
209 tmp.
re = - out_ve[
i].
re;
210 tmp.
im = - out_ve[
i].
im;
226 dim =
min(
A->m,
A->n);
232 for ( i=0; i<dim; i++ )
251 complex **L_me, *b_ve, *out_ve, tmp;
256 dim =
min(L->m,L->n);
260 L_me = L->me; b_ve = b->
ve; out_ve = out->
ve;
262 for ( i=dim-1; i>=0; i-- )
278 tmp =
zconj(L_me[i][i]);
281 out_ve[
i] =
zdiv(out_ve[i],tmp);
282 tmp.
re = - out_ve[
i].
re;
283 tmp.
im = - out_ve[
i].
im;
292 out_ve[
i].
re *= invdiag;
293 out_ve[
i].
im *= invdiag;
294 tmp.
re = - out_ve[
i].
re;
295 tmp.
im = - out_ve[
i].
im;
ZVEC * zLsolve(ZMAT *matrix, ZVEC *b, ZVEC *out, double diag)
ZVEC * zLAsolve(ZMAT *L, ZVEC *b, ZVEC *out, double diag)
#define MEMCOPY(from, to, n_items, type)
void __zmltadd__(complex *zp1, complex *zp2, complex s, int len, int flag)
complex __zip__(complex *zp1, complex *zp2, int len, int flag)
ZVEC * zUsolve(ZMAT *matrix, ZVEC *b, ZVEC *out, double diag)
ZVEC * zDsolve(ZMAT *A, ZVEC *b, ZVEC *x)
ZVEC * zUAsolve(ZMAT *U, ZVEC *b, ZVEC *out, double diag)
ZVEC * zv_resize(ZVEC *x, int new_dim)
void __zzero__(complex *zp, int len)
complex zdiv(complex z1, complex z2)
#define error(err_num, fn_name)
complex zsub(complex z1, complex z2)