38 static char copyright[] =
39 "Sparse1.3: Copyright (c) 1985,86,87,88,89,90 by Kenneth S. Kundert";
41 "@(#)$Header: spSolve.c,v 1.3 88/06/24 05:02:49 kundert Exp $";
58 #define spINSIDE_SPARSE 71 #if spSEPARATED_COMPLEX_VECTORS 189 for (I = Size; I > 0; I--)
190 Intermediate[I] =
RHS[*(pExtOrder--)];
193 for (I = 1; I <=
Size; I++)
196 if ((Temp = Intermediate[I]) != 0.0)
197 { pPivot = Matrix->
Diag[
I];
198 Intermediate[
I] = (Temp *= pPivot->
Real);
201 while (pElement !=
NULL)
202 { Intermediate[pElement->
Row] -= Temp * pElement->
Real;
209 for (I = Size; I > 0; I--)
210 { Temp = Intermediate[
I];
212 while (pElement !=
NULL)
213 { Temp -= pElement->
Real * Intermediate[pElement->
Col];
216 Intermediate[
I] =
Temp;
221 for (I = Size; I > 0; I--)
222 Solution[*(pExtOrder--)] = Intermediate[
I];
322 --Solution; --iSolution;
324 RHS -= 2; Solution -= 2;
329 pExtOrder = &Matrix->IntToExtRowMap[Size];
332 for (I = Size; I > 0; I--)
334 Intermediate[
I].
Imag = iRHS[*(pExtOrder--)];
338 for (I = Size; I > 0; I--)
339 Intermediate[I] = ExtVector[*(pExtOrder--)];
343 for (I = 1; I <=
Size; I++)
344 { Temp = Intermediate[
I];
348 { pPivot = Matrix->Diag[
I];
351 Intermediate[
I] =
Temp;
353 while (pElement !=
NULL)
364 for (I = Size; I > 0; I--)
365 { Temp = Intermediate[
I];
368 while (pElement !=
NULL)
374 Intermediate[
I] =
Temp;
378 pExtOrder = &Matrix->IntToExtColMap[
Size];
380 #if spSEPARATED_COMPLEX_VECTORS 381 for (I = Size; I > 0; I--)
382 { Solution[*(
pExtOrder)] = Intermediate[I].Real;
383 iSolution[*(pExtOrder--)] = Intermediate[I].Imag;
387 for (I = Size; I > 0; I--)
388 ExtVector[*(pExtOrder--)] = Intermediate[
I];
507 for (I = Size; I > 0; I--)
508 Intermediate[I] = RHS[*(pExtOrder--)];
511 for (I = 1; I <=
Size; I++)
514 if ((Temp = Intermediate[I]) != 0.0)
516 while (pElement !=
NULL)
517 { Intermediate[pElement->
Col] -= Temp * pElement->
Real;
525 for (I = Size; I > 0; I--)
526 { pPivot = Matrix->
Diag[
I];
527 Temp = Intermediate[
I];
529 while (pElement !=
NULL)
530 { Temp -= pElement->
Real * Intermediate[pElement->
Row];
533 Intermediate[
I] = Temp * pPivot->
Real;
538 for (I = Size; I > 0; I--)
539 Solution[*(pExtOrder--)] = Intermediate[
I];
555 #if TRANSPOSE AND spCOMPLEX 642 --Solution; --iSolution;
644 RHS -= 2; Solution -= 2;
649 pExtOrder = &Matrix->IntToExtColMap[Size];
652 for (I = Size; I > 0; I--)
654 Intermediate[
I].
Imag = iRHS[*(pExtOrder--)];
658 for (I = Size; I > 0; I--)
659 Intermediate[I] = ExtVector[*(pExtOrder--)];
663 for (I = 1; I <=
Size; I++)
664 { Temp = Intermediate[
I];
669 while (pElement !=
NULL)
680 for (I = Size; I > 0; I--)
681 { pPivot = Matrix->Diag[
I];
682 Temp = Intermediate[
I];
685 while (pElement !=
NULL)
697 pExtOrder = &Matrix->IntToExtRowMap[
Size];
699 #if spSEPARATED_COMPLEX_VECTORS 700 for (I = Size; I > 0; I--)
701 { Solution[*(
pExtOrder)] = Intermediate[I].Real;
702 iSolution[*(pExtOrder--)] = Intermediate[I].Imag;
706 for (I = Size; I > 0; I--)
707 ExtVector[*(pExtOrder--)] = Intermediate[
I];
#define CMPLX_MULT_ASSIGN(to, from)
#define IS_FACTORED(matrix)
#define spSEPARATED_COMPLEX_VECTORS
struct ComplexNumber * ComplexVector
RealVector Solution IMAG_VECTORS
#define CMPLX_MULT_SUBT_ASSIGN(to, from_a, from_b)
struct MatrixElement * NextInCol
ASSERT(IS_VALID(Matrix) AND IS_FACTORED(Matrix))
register ElementPtr pElement
static void SolveComplexTransposedMatrix()
void spSolve(eMatrix, RHS, Solution IMAG_VECTORS) char *eMatrix
static void SolveComplexMatrix()
struct MatrixElement * NextInRow
struct MatrixFrame * MatrixPtr
#define CMPLX_MULT(to, from_a, from_b)
register RealVector Intermediate