Reformat spoutput.c

Replace tabs by spaces
This commit is contained in:
Holger Vogt 2025-02-24 17:00:44 +01:00
parent 77131a2a33
commit 8694ce2649
1 changed files with 172 additions and 172 deletions

View File

@ -18,33 +18,33 @@
*/ */
/* /*
* Revision and copyright information. * Revision and copyright information.
* *
* Copyright (c) 1985,86,87,88,89,90 * Copyright (c) 1985,86,87,88,89,90
* by Kenneth S. Kundert and the University of California. * by Kenneth S. Kundert and the University of California.
* *
* Permission to use, copy, modify, and distribute this software and * Permission to use, copy, modify, and distribute this software and
* its documentation for any purpose and without fee is hereby granted, * its documentation for any purpose and without fee is hereby granted,
* provided that the copyright notices appear in all copies and * provided that the copyright notices appear in all copies and
* supporting documentation and that the authors and the University of * supporting documentation and that the authors and the University of
* California are properly credited. The authors and the University of * California are properly credited. The authors and the University of
* California make no representations as to the suitability of this * California make no representations as to the suitability of this
* software for any purpose. It is provided `as is', without express * software for any purpose. It is provided `as is', without express
* or implied warranty. * or implied warranty.
*/ */
/* /*
* IMPORTS * IMPORTS
* *
* >>> Import descriptions: * >>> Import descriptions:
* spConfig.h * spConfig.h
* Macros that customize the sparse matrix routines. * Macros that customize the sparse matrix routines.
* spMatrix.h * spMatrix.h
* Macros and declarations to be imported by the user. * Macros and declarations to be imported by the user.
* spDefs.h * spDefs.h
* Matrix type and macro definitions for the sparse matrix routines. * Matrix type and macro definitions for the sparse matrix routines.
*/ */
#include <assert.h> #include <assert.h>
#include <stdlib.h> #include <stdlib.h>
@ -63,7 +63,7 @@ int Printer_Width = PRINTER_WIDTH;
#if DOCUMENTATION #if DOCUMENTATION
/* /*
* PRINT MATRIX * PRINT MATRIX
* *
@ -140,22 +140,22 @@ spPrint(MatrixPtr Matrix, int PrintReordered, int Data, int Header)
int J = 0; int J = 0;
int I, Row, Col, Size, Top; int I, Row, Col, Size, Top;
int StartCol = 1, StopCol, Columns, ElementCount = 0; int StartCol = 1, StopCol, Columns, ElementCount = 0;
double Magnitude; double Magnitude;
double SmallestDiag = 0; double SmallestDiag = 0;
double SmallestElement = 0; double SmallestElement = 0;
double LargestElement = 0.0, LargestDiag = 0.0; double LargestElement = 0.0, LargestDiag = 0.0;
ElementPtr pElement, *pImagElements; ElementPtr pElement, * pImagElements;
int *PrintOrdToIntRowMap, *PrintOrdToIntColMap; int* PrintOrdToIntRowMap, * PrintOrdToIntColMap;
/* Begin `spPrint'. */ /* Begin `spPrint'. */
assert( IS_SPARSE( Matrix ) ); assert(IS_SPARSE(Matrix));
Size = Matrix->Size; Size = Matrix->Size;
SP_CALLOC(pImagElements, ElementPtr, Printer_Width / 10 + 1); SP_CALLOC(pImagElements, ElementPtr, Printer_Width / 10 + 1);
if ( pImagElements == NULL) if (pImagElements == NULL)
{ {
Matrix->Error = spNO_MEMORY; Matrix->Error = spNO_MEMORY;
SP_FREE(pImagElements); SP_FREE(pImagElements);
return; return;
} }
/* Create a packed external to internal row and column translation /* Create a packed external to internal row and column translation
@ -165,49 +165,49 @@ spPrint(MatrixPtr Matrix, int PrintReordered, int Data, int Header)
#else #else
Top = Matrix->AllocatedSize; Top = Matrix->AllocatedSize;
#endif #endif
SP_CALLOC( PrintOrdToIntRowMap, int, Top + 1 ); SP_CALLOC(PrintOrdToIntRowMap, int, Top + 1);
if ( PrintOrdToIntRowMap == NULL) if (PrintOrdToIntRowMap == NULL)
{ {
Matrix->Error = spNO_MEMORY; Matrix->Error = spNO_MEMORY;
SP_FREE(pImagElements); SP_FREE(pImagElements);
return; return;
} }
SP_CALLOC( PrintOrdToIntColMap, int, Top + 1 ); SP_CALLOC(PrintOrdToIntColMap, int, Top + 1);
if (PrintOrdToIntColMap == NULL) if (PrintOrdToIntColMap == NULL)
{ {
Matrix->Error = spNO_MEMORY; Matrix->Error = spNO_MEMORY;
SP_FREE(pImagElements); SP_FREE(pImagElements);
SP_FREE(PrintOrdToIntRowMap); SP_FREE(PrintOrdToIntRowMap);
return; return;
} }
for (I = 1; I <= Size; I++) for (I = 1; I <= Size; I++)
{ {
PrintOrdToIntRowMap[ Matrix->IntToExtRowMap[I] ] = I; PrintOrdToIntRowMap[Matrix->IntToExtRowMap[I]] = I;
PrintOrdToIntColMap[ Matrix->IntToExtColMap[I] ] = I; PrintOrdToIntColMap[Matrix->IntToExtColMap[I]] = I;
} }
/* Pack the arrays. */ /* Pack the arrays. */
for (J = 1, I = 1; I <= Top; I++) for (J = 1, I = 1; I <= Top; I++)
{ {
if (PrintOrdToIntRowMap[I] != 0) if (PrintOrdToIntRowMap[I] != 0)
PrintOrdToIntRowMap[ J++ ] = PrintOrdToIntRowMap[ I ]; PrintOrdToIntRowMap[J++] = PrintOrdToIntRowMap[I];
} }
for (J = 1, I = 1; I <= Top; I++) for (J = 1, I = 1; I <= Top; I++)
{ {
if (PrintOrdToIntColMap[I] != 0) if (PrintOrdToIntColMap[I] != 0)
PrintOrdToIntColMap[ J++ ] = PrintOrdToIntColMap[ I ]; PrintOrdToIntColMap[J++] = PrintOrdToIntColMap[I];
} }
/* Print header. */ /* Print header. */
if (Header) if (Header)
{ {
printf("MATRIX SUMMARY\n\n"); printf("MATRIX SUMMARY\n\n");
printf("Size of matrix = %1d x %1d.\n", Size, Size); printf("Size of matrix = %1d x %1d.\n", Size, Size);
if ( Matrix->Reordered && PrintReordered ) if (Matrix->Reordered && PrintReordered)
printf("Matrix has been reordered.\n"); printf("Matrix has been reordered.\n");
putchar('\n'); putchar('\n');
if ( Matrix->Factored ) if (Matrix->Factored)
printf("Matrix after factorization:\n"); printf("Matrix after factorization:\n");
else else
printf("Matrix before factorization:\n"); printf("Matrix before factorization:\n");
@ -219,74 +219,74 @@ spPrint(MatrixPtr Matrix, int PrintReordered, int Data, int Header)
/* Determine how many columns to use. */ /* Determine how many columns to use. */
Columns = Printer_Width; Columns = Printer_Width;
if (Header) Columns -= 5; if (Header) Columns -= 5;
if (Data) Columns = (Columns+1) / 10; if (Data) Columns = (Columns + 1) / 10;
/* Print matrix by printing groups of complete columns until all /* Print matrix by printing groups of complete columns until all
* the columns are printed. */ * the columns are printed. */
J = 0; J = 0;
while ( J <= Size ) while (J <= Size)
{ {
/* Calculatestrchr of last column to printed in this group. */ /* Calculatestrchr of last column to printed in this group. */
StopCol = StartCol + Columns - 1; StopCol = StartCol + Columns - 1;
if (StopCol > Size) if (StopCol > Size)
StopCol = Size; StopCol = Size;
/* Label the columns. */ /* Label the columns. */
if (Header) if (Header)
{ {
if (Data) if (Data)
{ {
printf(" "); printf(" ");
for (I = StartCol; I <= StopCol; I++) for (I = StartCol; I <= StopCol; I++)
{ {
if (PrintReordered) if (PrintReordered)
Col = I; Col = I;
else else
Col = PrintOrdToIntColMap[I]; Col = PrintOrdToIntColMap[I];
printf(" %9d", Matrix->IntToExtColMap[ Col ]); printf(" %9d", Matrix->IntToExtColMap[Col]);
} }
printf("\n\n"); printf("\n\n");
} }
else else
{ {
if (PrintReordered) if (PrintReordered)
printf("Columns %1d to %1d.\n",StartCol,StopCol); printf("Columns %1d to %1d.\n", StartCol, StopCol);
else else
{ {
printf("Columns %1d to %1d.\n", printf("Columns %1d to %1d.\n",
Matrix->IntToExtColMap[ PrintOrdToIntColMap[StartCol] ], Matrix->IntToExtColMap[PrintOrdToIntColMap[StartCol]],
Matrix->IntToExtColMap[ PrintOrdToIntColMap[StopCol] ]); Matrix->IntToExtColMap[PrintOrdToIntColMap[StopCol]]);
} }
} }
} }
/* Print every row ... */ /* Print every row ... */
for (I = 1; I <= Size; I++) for (I = 1; I <= Size; I++)
{ {
if (PrintReordered) if (PrintReordered)
Row = I; Row = I;
else else
Row = PrintOrdToIntRowMap[I]; Row = PrintOrdToIntRowMap[I];
if (Header) if (Header)
{ {
if (PrintReordered && !Data) if (PrintReordered && !Data)
printf("%4d", I); printf("%4d", I);
else else
printf("%4d", Matrix->IntToExtRowMap[ Row ]); printf("%4d", Matrix->IntToExtRowMap[Row]);
if (!Data) putchar(' '); if (!Data) putchar(' ');
} }
/* ... in each column of the group. */ /* ... in each column of the group. */
for (J = StartCol; J <= StopCol; J++) for (J = StartCol; J <= StopCol; J++)
{ {
if (PrintReordered) if (PrintReordered)
Col = J; Col = J;
else else
Col = PrintOrdToIntColMap[J]; Col = PrintOrdToIntColMap[J];
pElement = Matrix->FirstInCol[Col]; pElement = Matrix->FirstInCol[Col];
while(pElement != NULL && pElement->Row != Row) while (pElement != NULL && pElement->Row != Row)
pElement = pElement->NextInCol; pElement = pElement->NextInCol;
if (Data) if (Data)
@ -294,24 +294,24 @@ spPrint(MatrixPtr Matrix, int PrintReordered, int Data, int Header)
if (pElement != NULL) if (pElement != NULL)
{ {
/* Case where element exists */ /* Case where element exists */
if (Data) if (Data)
printf(" %9.3g", pElement->Real); printf(" %9.3g", pElement->Real);
else else
putchar('x'); putchar('x');
/* Update status variables */ /* Update status variables */
if ( (Magnitude = ELEMENT_MAG(pElement)) > LargestElement ) if ((Magnitude = ELEMENT_MAG(pElement)) > LargestElement)
LargestElement = Magnitude; LargestElement = Magnitude;
if ((Magnitude < SmallestElement) && (Magnitude != 0.0)) if ((Magnitude < SmallestElement) && (Magnitude != 0.0))
SmallestElement = Magnitude; SmallestElement = Magnitude;
ElementCount++; ElementCount++;
} }
/* Case where element is structurally zero */ /* Case where element is structurally zero */
else else
{ {
if (Data) if (Data)
printf(" ..."); printf(" ...");
else else
putchar('.'); putchar('.');
@ -321,13 +321,13 @@ spPrint(MatrixPtr Matrix, int PrintReordered, int Data, int Header)
if (Matrix->Complex && Data) if (Matrix->Complex && Data)
{ {
printf(" "); printf(" ");
for (J = StartCol; J <= StopCol; J++) for (J = StartCol; J <= StopCol; J++)
{ {
if (pImagElements[J - StartCol] != NULL) if (pImagElements[J - StartCol] != NULL)
{ {
printf(" %8.2gj", printf(" %8.2gj",
pImagElements[J-StartCol]->Imag); pImagElements[J - StartCol]->Imag);
} }
else printf(" "); else printf(" ");
} }
@ -335,44 +335,44 @@ spPrint(MatrixPtr Matrix, int PrintReordered, int Data, int Header)
} }
} }
/* Calculatestrchr of first column in next group. */ /* Calculatestrchr of first column in next group. */
StartCol = StopCol; StartCol = StopCol;
StartCol++; StartCol++;
putchar('\n'); putchar('\n');
} }
if (Header) if (Header)
{ {
printf("\nLargest element in matrix = %-1.4g.\n", LargestElement); printf("\nLargest element in matrix = %-1.4g.\n", LargestElement);
printf("Smallest element in matrix = %-1.4g.\n", SmallestElement); printf("Smallest element in matrix = %-1.4g.\n", SmallestElement);
/* Search for largest and smallest diagonal values */ /* Search for largest and smallest diagonal values */
for (I = 1; I <= Size; I++) for (I = 1; I <= Size; I++)
{ {
if (Matrix->Diag[I] != NULL) if (Matrix->Diag[I] != NULL)
{ {
Magnitude = ELEMENT_MAG( Matrix->Diag[I] ); Magnitude = ELEMENT_MAG(Matrix->Diag[I]);
if ( Magnitude > LargestDiag ) LargestDiag = Magnitude; if (Magnitude > LargestDiag) LargestDiag = Magnitude;
if ( Magnitude < SmallestDiag ) SmallestDiag = Magnitude; if (Magnitude < SmallestDiag) SmallestDiag = Magnitude;
} }
} }
/* Print the largest and smallest diagonal values */ /* Print the largest and smallest diagonal values */
if ( Matrix->Factored ) if (Matrix->Factored)
{ {
printf("\nLargest diagonal element = %-1.4g.\n", LargestDiag); printf("\nLargest diagonal element = %-1.4g.\n", LargestDiag);
printf("Smallest diagonal element = %-1.4g.\n", SmallestDiag); printf("Smallest diagonal element = %-1.4g.\n", SmallestDiag);
} }
else else
{ {
printf("\nLargest pivot element = %-1.4g.\n", LargestDiag); printf("\nLargest pivot element = %-1.4g.\n", LargestDiag);
printf("Smallest pivot element = %-1.4g.\n", SmallestDiag); printf("Smallest pivot element = %-1.4g.\n", SmallestDiag);
} }
/* Calculate and print sparsity and number of fill-ins created. */ /* Calculate and print sparsity and number of fill-ins created. */
printf("\nDensity = %2.2f%%.\n", ((double)(ElementCount * 100)) / printf("\nDensity = %2.2f%%.\n", ((double)(ElementCount * 100)) /
((double)(Size * Size))); ((double)(Size * Size)));
printf("Number of originals = %1d.\n", Matrix->Originals); printf("Number of originals = %1d.\n", Matrix->Originals);
if (!Matrix->NeedsOrdering) if (!Matrix->NeedsOrdering)
printf("Number of fill-ins = %1d.\n", Matrix->Fillins); printf("Number of fill-ins = %1d.\n", Matrix->Fillins);
} }
@ -393,7 +393,7 @@ spPrint(MatrixPtr Matrix, int PrintReordered, int Data, int Header)
/* /*
* OUTPUT MATRIX TO FILE * OUTPUT MATRIX TO FILE
* *
@ -437,16 +437,16 @@ spPrint(MatrixPtr Matrix, int PrintReordered, int Data, int Header)
*/ */
int int
spFileMatrix(MatrixPtr Matrix, char *File, char *Label, int Reordered, spFileMatrix(MatrixPtr Matrix, char* File, char* Label, int Reordered,
int Data, int Header) int Data, int Header)
{ {
int I, Size; int I, Size;
ElementPtr pElement; ElementPtr pElement;
int Row, Col, Err; int Row, Col, Err;
FILE *pMatrixFile; FILE* pMatrixFile;
/* Begin `spFileMatrix'. */ /* Begin `spFileMatrix'. */
assert( IS_SPARSE( Matrix ) ); assert(IS_SPARSE(Matrix));
/* Open file matrix file in write mode. */ /* Open file matrix file in write mode. */
if ((pMatrixFile = fopen(File, "w")) == NULL) if ((pMatrixFile = fopen(File, "w")) == NULL)
@ -456,100 +456,100 @@ spFileMatrix(MatrixPtr Matrix, char *File, char *Label, int Reordered,
Size = Matrix->Size; Size = Matrix->Size;
if (Header) if (Header)
{ {
if (Matrix->Factored && Data) if (Matrix->Factored && Data)
{ {
Err = fprintf(pMatrixFile, Err = fprintf(pMatrixFile,
"Warning : The following matrix is " "Warning : The following matrix is "
"factored in to LU form.\n"); "factored in to LU form.\n");
if (Err < 0) if (Err < 0)
return 0; return 0;
} }
if (fprintf(pMatrixFile, "%s\n", Label) < 0) if (fprintf(pMatrixFile, "%s\n", Label) < 0)
return 0; return 0;
Err = fprintf( pMatrixFile, "%d\t%s\n", Size, Err = fprintf(pMatrixFile, "%d\t%s\n", Size,
(Matrix->Complex ? "complex" : "real")); (Matrix->Complex ? "complex" : "real"));
if (Err < 0) if (Err < 0)
return 0; return 0;
} }
/* Output matrix. */ /* Output matrix. */
if (!Data) if (!Data)
{ {
for (I = 1; I <= Size; I++) for (I = 1; I <= Size; I++)
{ {
pElement = Matrix->FirstInCol[I]; pElement = Matrix->FirstInCol[I];
while (pElement != NULL) while (pElement != NULL)
{ {
if (Reordered) if (Reordered)
{ {
Row = pElement->Row; Row = pElement->Row;
Col = I; Col = I;
} }
else else
{ {
Row = Matrix->IntToExtRowMap[pElement->Row]; Row = Matrix->IntToExtRowMap[pElement->Row];
Col = Matrix->IntToExtColMap[I]; Col = Matrix->IntToExtColMap[I];
} }
pElement = pElement->NextInCol; pElement = pElement->NextInCol;
if (fprintf(pMatrixFile, "%d\t%d\n", Row, Col) < 0) return 0; if (fprintf(pMatrixFile, "%d\t%d\n", Row, Col) < 0) return 0;
} }
} }
/* Output terminator, a line of zeros. */ /* Output terminator, a line of zeros. */
if (Header) if (Header)
if (fprintf(pMatrixFile, "0\t0\n") < 0) return 0; if (fprintf(pMatrixFile, "0\t0\n") < 0) return 0;
} }
if (Data && Matrix->Complex) if (Data && Matrix->Complex)
{ {
for (I = 1; I <= Size; I++) for (I = 1; I <= Size; I++)
{ {
pElement = Matrix->FirstInCol[I]; pElement = Matrix->FirstInCol[I];
while (pElement != NULL) while (pElement != NULL)
{ {
if (Reordered) if (Reordered)
{ {
Row = pElement->Row; Row = pElement->Row;
Col = I; Col = I;
} }
else else
{ {
Row = Matrix->IntToExtRowMap[pElement->Row]; Row = Matrix->IntToExtRowMap[pElement->Row];
Col = Matrix->IntToExtColMap[I]; Col = Matrix->IntToExtColMap[I];
} }
Err = fprintf Err = fprintf
( pMatrixFile,"%d\t%d\t%-.15g\t%-.15g\n", (pMatrixFile, "%d\t%d\t%-.15g\t%-.15g\n",
Row, Col, pElement->Real, pElement->Imag Row, Col, pElement->Real, pElement->Imag
); );
if (Err < 0) return 0; if (Err < 0) return 0;
pElement = pElement->NextInCol; pElement = pElement->NextInCol;
} }
} }
/* Output terminator, a line of zeros. */ /* Output terminator, a line of zeros. */
if (Header) if (Header)
if (fprintf(pMatrixFile,"0\t0\t0.0\t0.0\n") < 0) return 0; if (fprintf(pMatrixFile, "0\t0\t0.0\t0.0\n") < 0) return 0;
} }
if (Data && !Matrix->Complex) if (Data && !Matrix->Complex)
{ {
for (I = 1; I <= Size; I++) for (I = 1; I <= Size; I++)
{ {
pElement = Matrix->FirstInCol[I]; pElement = Matrix->FirstInCol[I];
while (pElement != NULL) while (pElement != NULL)
{ {
Row = Matrix->IntToExtRowMap[pElement->Row]; Row = Matrix->IntToExtRowMap[pElement->Row];
Col = Matrix->IntToExtColMap[I]; Col = Matrix->IntToExtColMap[I];
Err = fprintf Err = fprintf
( pMatrixFile,"%d\t%d\t%-.15g\n", (pMatrixFile, "%d\t%d\t%-.15g\n",
Row, Col, pElement->Real Row, Col, pElement->Real
); );
if (Err < 0) return 0; if (Err < 0) return 0;
pElement = pElement->NextInCol; pElement = pElement->NextInCol;
} }
} }
/* Output terminator, a line of zeros. */ /* Output terminator, a line of zeros. */
if (Header) if (Header)
if (fprintf(pMatrixFile,"0\t0\t0.0\n") < 0) return 0; if (fprintf(pMatrixFile, "0\t0\t0.0\n") < 0) return 0;
} }
@ -563,7 +563,7 @@ spFileMatrix(MatrixPtr Matrix, char *File, char *Label, int Reordered,
/* /*
* OUTPUT SOURCE VECTOR TO FILE * OUTPUT SOURCE VECTOR TO FILE
* *
@ -595,22 +595,22 @@ spFileMatrix(MatrixPtr Matrix, char *File, char *Label, int Reordered,
*/ */
int int
spFileVector(MatrixPtr Matrix, char *File, RealVector RHS, RealVector iRHS) spFileVector(MatrixPtr Matrix, char* File, RealVector RHS, RealVector iRHS)
{ {
int I, Size, Err; int I, Size, Err;
FILE *pMatrixFile; FILE* pMatrixFile;
/* Begin `spFileVector'. */ /* Begin `spFileVector'. */
assert( IS_SPARSE( Matrix ) && RHS != NULL); assert(IS_SPARSE(Matrix) && RHS != NULL);
if (File) { if (File) {
/* Open File in write mode. */ /* Open File in write mode. */
pMatrixFile = fopen(File,"w"); pMatrixFile = fopen(File, "w");
if (pMatrixFile == NULL) if (pMatrixFile == NULL)
return 0; return 0;
} }
else else
pMatrixFile=stdout; pMatrixFile = stdout;
/* Output vector. */ /* Output vector. */
Size = Matrix->Size; Size = Matrix->Size;
@ -618,18 +618,18 @@ spFileVector(MatrixPtr Matrix, char *File, RealVector RHS, RealVector iRHS)
{ {
for (I = 1; I <= Size; I++) for (I = 1; I <= Size; I++)
{ {
Err = fprintf Err = fprintf
( pMatrixFile, "%-.15g\t%-.15g\n", (pMatrixFile, "%-.15g\t%-.15g\n",
RHS[I], iRHS[I] RHS[I], iRHS[I]
); );
if (Err < 0) return 0; if (Err < 0) return 0;
} }
} }
else else
{ {
for (I = 1; I <= Size; I++) for (I = 1; I <= Size; I++)
{ {
if (fprintf(pMatrixFile, "%-.15g\n", RHS[I]) < 0) if (fprintf(pMatrixFile, "%-.15g\n", RHS[I]) < 0)
return 0; return 0;
} }
} }
@ -647,13 +647,13 @@ spFileVector(MatrixPtr Matrix, char *File, RealVector RHS, RealVector iRHS)
/* /*
* OUTPUT STATISTICS TO FILE * OUTPUT STATISTICS TO FILE
* *
* Writes useful information concerning the matrix to a file. Should be * Writes useful information concerning the matrix to a file. Should be
* executed after the matrix is factored. * executed after the matrix is factored.
* *
* >>> Returns: * >>> Returns:
* One is returned if routine was successful, otherwise zero is returned. * One is returned if routine was successful, otherwise zero is returned.
* The calling function can query errno (the system global error variable) * The calling function can query errno (the system global error variable)
@ -685,16 +685,16 @@ spFileVector(MatrixPtr Matrix, char *File, RealVector RHS, RealVector iRHS)
*/ */
int int
spFileStats(MatrixPtr Matrix, char *File, char *Label) spFileStats(MatrixPtr Matrix, char* File, char* Label)
{ {
int Size, I; int Size, I;
ElementPtr pElement; ElementPtr pElement;
int NumberOfElements; int NumberOfElements;
RealNumber Data, LargestElement, SmallestElement; RealNumber Data, LargestElement, SmallestElement;
FILE *pStatsFile; FILE* pStatsFile;
/* Begin `spFileStats'. */ /* Begin `spFileStats'. */
assert( IS_SPARSE( Matrix ) ); assert(IS_SPARSE(Matrix));
/* Open File in append mode. */ /* Open File in append mode. */
if ((pStatsFile = fopen(File, "a")) == NULL) if ((pStatsFile = fopen(File, "a")) == NULL)
@ -710,7 +710,7 @@ spFileStats(MatrixPtr Matrix, char *File, char *Label)
fprintf(pStatsFile, "Matrix is complex.\n"); fprintf(pStatsFile, "Matrix is complex.\n");
else else
fprintf(pStatsFile, "Matrix is real.\n"); fprintf(pStatsFile, "Matrix is real.\n");
fprintf(pStatsFile," Size = %d\n",Size); fprintf(pStatsFile, " Size = %d\n", Size);
/* Search matrix. */ /* Search matrix. */
NumberOfElements = 0; NumberOfElements = 0;
@ -719,10 +719,10 @@ spFileStats(MatrixPtr Matrix, char *File, char *Label)
for (I = 1; I <= Size; I++) for (I = 1; I <= Size; I++)
{ {
pElement = Matrix->FirstInCol[I]; pElement = Matrix->FirstInCol[I];
while (pElement != NULL) while (pElement != NULL)
{ {
NumberOfElements++; NumberOfElements++;
Data = ELEMENT_MAG(pElement); Data = ELEMENT_MAG(pElement);
if (Data > LargestElement) if (Data > LargestElement)
LargestElement = Data; LargestElement = Data;
@ -732,27 +732,27 @@ spFileStats(MatrixPtr Matrix, char *File, char *Label)
} }
} }
SmallestElement = MIN( SmallestElement, LargestElement ); SmallestElement = MIN(SmallestElement, LargestElement);
/* Output remaining statistics. */ /* Output remaining statistics. */
fprintf(pStatsFile, " Initial number of elements = %d\n", fprintf(pStatsFile, " Initial number of elements = %d\n",
NumberOfElements - Matrix->Fillins); NumberOfElements - Matrix->Fillins);
fprintf(pStatsFile, fprintf(pStatsFile,
" Initial average number of elements per row = %f\n", " Initial average number of elements per row = %f\n",
(double)(NumberOfElements - Matrix->Fillins) / (double)Size); (double)(NumberOfElements - Matrix->Fillins) / (double)Size);
fprintf(pStatsFile, " Fill-ins = %d\n",Matrix->Fillins); fprintf(pStatsFile, " Fill-ins = %d\n", Matrix->Fillins);
fprintf(pStatsFile, " Average number of fill-ins per row = %f%%\n", fprintf(pStatsFile, " Average number of fill-ins per row = %f%%\n",
(double)Matrix->Fillins / (double)Size); (double)Matrix->Fillins / (double)Size);
fprintf(pStatsFile, " Total number of elements = %d\n", fprintf(pStatsFile, " Total number of elements = %d\n",
NumberOfElements); NumberOfElements);
fprintf(pStatsFile, " Average number of elements per row = %f\n", fprintf(pStatsFile, " Average number of elements per row = %f\n",
(double)NumberOfElements / (double)Size); (double)NumberOfElements / (double)Size);
fprintf(pStatsFile," Density = %f%%\n", fprintf(pStatsFile, " Density = %f%%\n",
(double)(100.0*NumberOfElements)/(double)(Size*Size)); (double)(100.0 * NumberOfElements) / (double)(Size * Size));
fprintf(pStatsFile," Relative Threshold = %e\n", Matrix->RelThreshold); fprintf(pStatsFile, " Relative Threshold = %e\n", Matrix->RelThreshold);
fprintf(pStatsFile," Absolute Threshold = %e\n", Matrix->AbsThreshold); fprintf(pStatsFile, " Absolute Threshold = %e\n", Matrix->AbsThreshold);
fprintf(pStatsFile," Largest Element = %e\n", LargestElement); fprintf(pStatsFile, " Largest Element = %e\n", LargestElement);
fprintf(pStatsFile," Smallest Element = %e\n\n\n", SmallestElement); fprintf(pStatsFile, " Smallest Element = %e\n\n\n", SmallestElement);
/* Close file. */ /* Close file. */
(void)fclose(pStatsFile); (void)fclose(pStatsFile);