diff --git a/src/include/ngspice/klu.h b/src/include/ngspice/klu.h index 8bbe0e324..248b9bf64 100644 --- a/src/include/ngspice/klu.h +++ b/src/include/ngspice/klu.h @@ -980,7 +980,7 @@ typedef struct sKLUmatrix { unsigned int KLUmatrixNZ ; /* KLU nz */ BindElement *KLUmatrixBindStructCOO ; /* KLU COO Binding Structure */ KluLinkedListCOO *KLUmatrixLinkedListCOO ; /* KLU COO in Linked List Format for Initial Parsing */ - unsigned int *KLUmatrixNodeCollapsingOldToNew ; /* KLU Node Collapsing Mapping from New Node to Old Node */ +// unsigned int *KLUmatrixNodeCollapsingOldToNew ; /* KLU Node Collapsing Mapping from New Node to Old Node */ unsigned int *KLUmatrixNodeCollapsingNewToOld ; /* KLU Node Collapsing Mapping from New Node to Old Node */ unsigned int KLUmatrixLinkedListNZ ; /* KLU nz for the Initial Parsing */ double *KLUmatrixTrashCOO ; /* KLU COO Trash Pointer for Ground Node not Stored in the Matrix */ diff --git a/src/maths/KLU/klusmp.c b/src/maths/KLU/klusmp.c index b8a6539e2..fcd010fe0 100644 --- a/src/maths/KLU/klusmp.c +++ b/src/maths/KLU/klusmp.c @@ -208,17 +208,17 @@ void SMPconvertCOOtoCSC (SMPmatrix *Matrix) } /* Look for columns with all structural zeroes, not numerical zeroes - Circuits Matrix are NxN, so checking for columns is sufficient */ - Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew = (unsigned int *) malloc (Matrix->SMPkluMatrix->KLUmatrixLinkedListNZ * sizeof (unsigned int)) ; - Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingNewToOld = (unsigned int *) malloc (Matrix->SMPkluMatrix->KLUmatrixLinkedListNZ * sizeof (unsigned int)) ; - for (i = 0 ; i < Matrix->SMPkluMatrix->KLUmatrixLinkedListNZ ; i++) { + unsigned int n = MatrixCOO [Matrix->SMPkluMatrix->KLUmatrixLinkedListNZ - 1].col + 1 ; +// Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew = (unsigned int *) malloc (Matrix->SMPkluMatrix->KLUmatrixLinkedListNZ * sizeof (unsigned int)) ; + Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingNewToOld = (unsigned int *) malloc (MAX (Matrix->SMPkluMatrix->KLUmatrixLinkedListNZ, n + 1) * sizeof (unsigned int)) ; + for (i = 0 ; i < MAX (Matrix->SMPkluMatrix->KLUmatrixLinkedListNZ, n) ; i++) { // Initialization - Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew [i] = 0 ; // Pre-Allocation to 0 - Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew [MatrixCOO [i].col] = MatrixCOO [i].col ; +// Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew [i] = 0 ; // Pre-Allocation to 0 +// Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew [MatrixCOO [i].col] = MatrixCOO [i].col ; Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingNewToOld [i] = 0 ; // Pre-Allocation to 0 Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingNewToOld [MatrixCOO [i].col] = MatrixCOO [i].col ; } - unsigned int n = MatrixCOO [Matrix->SMPkluMatrix->KLUmatrixLinkedListNZ - 1].col + 1 ; - Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew [n] = n ; +// Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew [n] = n ; Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingNewToOld [n] = n ; unsigned int search_index = 0 ; @@ -243,7 +243,7 @@ void SMPconvertCOOtoCSC (SMPmatrix *Matrix) for (i = 0 ; i < Matrix->SMPkluMatrix->KLUmatrixLinkedListNZ ; i++) { if (MatrixCOO [i].col > (unsigned int)col_index) { - Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew [MatrixCOO [i].col] = MatrixCOO [i].col - col_diff + 1 ; +// Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew [MatrixCOO [i].col] = MatrixCOO [i].col - col_diff + 1 ; Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingNewToOld [MatrixCOO [i].col - col_diff + 1] = MatrixCOO [i].col ; MatrixCOO [i].col = MatrixCOO [i].col - col_diff + 1 ; } @@ -1086,7 +1086,7 @@ SMPnewMatrix (SMPmatrix *Matrix, int size) Matrix->SMPkluMatrix->KLUmatrixIntermediateComplex = NULL ; Matrix->SMPkluMatrix->KLUmatrixNZ = 0 ; Matrix->SMPkluMatrix->KLUmatrixBindStructCOO = NULL ; - Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew = NULL ; +// Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew = NULL ; Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingNewToOld = NULL ; Matrix->SMPkluMatrix->KLUmatrixDiag = NULL ; @@ -1175,7 +1175,7 @@ SMPdestroy (SMPmatrix *Matrix) free (Matrix->SMPkluMatrix->KLUmatrixIntermediate) ; free (Matrix->SMPkluMatrix->KLUmatrixIntermediateComplex) ; free (Matrix->SMPkluMatrix->KLUmatrixBindStructCOO) ; - free (Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew) ; +// free (Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew) ; free (Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingNewToOld) ; free (Matrix->SMPkluMatrix->KLUmatrixTrashCOO) ; Matrix->SMPkluMatrix->KLUmatrixAp = NULL ; @@ -1185,7 +1185,7 @@ SMPdestroy (SMPmatrix *Matrix) Matrix->SMPkluMatrix->KLUmatrixIntermediate = NULL ; Matrix->SMPkluMatrix->KLUmatrixIntermediateComplex = NULL ; Matrix->SMPkluMatrix->KLUmatrixBindStructCOO = NULL ; - Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew = NULL ; +// Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingOldToNew = NULL ; Matrix->SMPkluMatrix->KLUmatrixNodeCollapsingNewToOld = NULL ; Matrix->SMPkluMatrix->KLUmatrixTrashCOO = NULL ; free (Matrix->SMPkluMatrix->KLUmatrixDiag) ;