* and continues to be available under such terms.
* For more information, see the COPYING file which you should have received
* along with this program.
- * === LICENSE_END ===
*
*/
/*--------------------------------------------------------------------------*/
bool symmetric = FALSE;
int iRet = 0;
+ _iRetCount = std::max(1, _iRetCount);
+
if (in.size() != 1 && in.size() != 2)
{
Scierror(77, _("%s: Wrong number of input argument(s): %d to %d expected.\n"), "spec", 1, 2);
}
symmetric = isSymmetric(pDblA->getReal(), pDblA->getImg(), pDblA->isComplex(), pDblA->getRows(), pDblA->getCols()) == 1;
- int eigenValuesCols = (_iRetCount == 1) ? 1 : pDblA->getCols();
+ int eigenValuesCols = (_iRetCount <= 1) ? 1 : pDblA->getCols();
if (symmetric)
{
{
vFreeDoubleComplexFromPointer((doublecomplex*)pDataA);
pDblA->killMe();
- Scierror(998, _("%s: On entry to ZGEEV parameter number 3 had an illegal value (lapack library problem).\n"), "spec", iRet);
+ Scierror(998, _("%s: On entry to ZGEEV parameter number 3 had an illegal value (lapack library problem).\n"), "spec");
return types::Function::Error;
}
if (_iRetCount == 2)
{
- vGetPointerFromDoubleComplex((doublecomplex*)pDataA, pDblA->getSize() , pDblEigenVectors->getReal(), pDblEigenVectors->getImg());
- vFreeDoubleComplexFromPointer((doublecomplex*)pDataA);
+ vGetPointerFromDoubleComplex((doublecomplex*)pDataA, pDblA->getSize(), pDblEigenVectors->getReal(), pDblEigenVectors->getImg());
expandToDiagonalOfMatrix(pDblEigenValues->getReal(), pDblA->getCols());
out.push_back(pDblEigenVectors);
}
out.push_back(pDblEigenValues);
pDblA->killMe();
+ vFreeDoubleComplexFromPointer((doublecomplex*)pDataA);
}
else // not symmetric
{
if (iRet < 0)
{
pDblA->killMe();
- Scierror(998, _("%s: On entry to ZHEEV parameter number 3 had an illegal value (lapack library problem).\n"), "spec", iRet);
+ Scierror(998, _("%s: On entry to ZHEEV parameter number 3 had an illegal value (lapack library problem).\n"), "spec");
return types::Function::Error;
}
if (iRet < 0)
{
pDblA->killMe();
- Scierror(998, _("%s: On entry to ZGEEV parameter number 3 had an illegal value (lapack library problem).\n"), "spec", iRet);
+ Scierror(998, _("%s: On entry to ZGEEV parameter number 3 had an illegal value (lapack library problem).\n"), "spec");
return types::Function::Error;
}
if (_iRetCount == 2)
{
+ if (pDblEigenVectors)
+ {
+ pDblEigenVectors->killMe();
+ }
expandToDiagonalOfMatrix(pDblEigenValues->getReal(), pDblA->getCols());
out.push_back(pDblA);
}
if (iRet < 0)
{
pDblA->killMe();
- Scierror(998, _("%s: On entry to ZHEEV parameter number 3 had an illegal value (lapack library problem).\n"), "spec", iRet);
+ if (pDblEigenVectors)
+ {
+ pDblEigenVectors->killMe();
+ }
+ Scierror(998, _("%s: On entry to ZHEEV parameter number 3 had an illegal value (lapack library problem).\n"), "spec");
return types::Function::Error;
}
if (iRet > 0)
{
pDblA->killMe();
+ if (pDblEigenVectors)
+ {
+ pDblEigenVectors->killMe();
+ }
Scierror(24, _("%s: The QR algorithm failed to compute all the eigenvalues, and no eigenvectors have been computed. Elements and %d+1:N of WR and WI contain eigenvalues which have converged.\n"), "spec", iRet);
return types::Function::Error;
}
pDataA = (double*)oGetDoubleComplexFromPointer(pDblA->getReal(), pDblA->getImg(), pDblA->getSize());
pDataB = (double*)oGetDoubleComplexFromPointer(pDblB->getReal(), pDblB->getImg(), pDblB->getSize());
- if (!pDataA || !pDataB)
+ if (!pDataA && !pDataB)
+ {
+ Scierror(999, _("%s: Cannot allocate more memory.\n"), "spec");
+ return types::Function::Error;
+ }
+
+ if (!pDataA)
{
- delete pDataA;
- delete pDataB;
+ vFreeDoubleComplexFromPointer((doublecomplex*)pDataB);
+ Scierror(999, _("%s: Cannot allocate more memory.\n"), "spec");
+ return types::Function::Error;
+ }
+
+ if (!pDataB)
+ {
+ vFreeDoubleComplexFromPointer((doublecomplex*)pDataA);
Scierror(999, _("%s: Cannot allocate more memory.\n"), "spec");
return types::Function::Error;
}
{
pDblA->killMe();
pDblB->killMe();
- Scierror(998, _("%s: On entry to ZHEEV parameter number 3 had an illegal value (lapack library problem).\n"), "spec", iRet);
+ Scierror(998, _("%s: On entry to ZHEEV parameter number 3 had an illegal value (lapack library problem).\n"), "spec");
return types::Function::Error;
}