53#ifdef SCIP_WITH_LAPACK
55typedef int64_t LAPACKINTTYPE;
58#define SCIP_RealTOINT(x) ((LAPACKINTTYPE) (x + 0.5))
69#ifdef FNAME_LCASE_DECOR
70#define F77_FUNC(name,NAME) name ## _
72#ifdef FNAME_UCASE_DECOR
73#define F77_FUNC(name,NAME) NAME ## _
75#ifdef FNAME_LCASE_NODECOR
76#define F77_FUNC(name,NAME) name
78#ifdef FNAME_UCASE_NODECOR
79#define F77_FUNC(name,NAME) NAME
84#define F77_FUNC(name,NAME) name ## _
89void F77_FUNC(dsyevr, DSYEVR)(
char* JOBZ,
char* RANGE,
char* UPLO,
90 LAPACKINTTYPE* N,
SCIP_Real* A, LAPACKINTTYPE* LDA,
92 LAPACKINTTYPE* IL, LAPACKINTTYPE* IU,
94 LAPACKINTTYPE* LDZ, LAPACKINTTYPE* ISUPPZ,
SCIP_Real* WORK,
95 LAPACKINTTYPE* LWORK, LAPACKINTTYPE* IWORK, LAPACKINTTYPE* LIWORK,
100 LAPACKINTTYPE* LDA, LAPACKINTTYPE* IPIV, LAPACKINTTYPE* INFO);
103void F77_FUNC(dgetrs, DGETRS)(
char* TRANS, LAPACKINTTYPE* N, LAPACKINTTYPE* NRHS,
104 SCIP_Real* A, LAPACKINTTYPE* LDA, LAPACKINTTYPE* IPIV,
SCIP_Real* B, LAPACKINTTYPE* LDB,
105 LAPACKINTTYPE* INFO);
108void F77_FUNC(ilaver, ILAVER)(LAPACKINTTYPE* MAJOR, LAPACKINTTYPE* MINOR, LAPACKINTTYPE* PATCH);
126#ifdef SCIP_WITH_LAPACK
133#ifdef SCIP_WITH_LAPACK
151 assert(
sizeof(work) >
sizeof(checkval));
156 if ( *(int8_t*)&checkval != 0 )
159 if ( work.small[1] != 0 )
162 return -work.small[0];
164 return work.small[0];
168 assert( *(int8_t*)&checkval == 0 );
171 if ( work.small[0] != 0 )
174 return -work.small[1];
176 return work.small[1];
187#ifdef SCIP_WITH_LAPACK
188 LAPACKINTTYPE MAJOR = 0LL;
189 LAPACKINTTYPE MINOR = 0LL;
190 LAPACKINTTYPE PATCH = 0LL;
197#ifdef SCIP_WITH_LAPACK
198 F77_FUNC(ilaver, ILAVER)(&MAJOR, &MINOR, &PATCH);
200 *majorver = convertToInt(MAJOR);
201 *minorver = convertToInt(MINOR);
202 *patchver = convertToInt(PATCH);
210#ifdef SCIP_WITH_LAPACK
221 LAPACKINTTYPE* IWORK;
222 LAPACKINTTYPE* ISUPPZ;
226 LAPACKINTTYPE WISIZE;
232 LAPACKINTTYPE LIWORK;
251 JOBZ = geteigenvectors ?
'V' :
'N';
269 F77_FUNC(dsyevr, DSYEVR)( &JOBZ, &RANGE, &UPLO,
275 &LWORK, &WISIZE, &LIWORK,
278 if ( convertToInt(INFO) != 0 )
280 SCIPerrorMessage(
"There was an error when calling DSYEVR. INFO = %d.\n", convertToInt(INFO));
285 LWORK = SCIP_RealTOINT(WSIZE);
286 LIWORK =
MAX(1, 10 * N);
292 if ( geteigenvectors )
298 F77_FUNC(dsyevr, DSYEVR)( &JOBZ, &RANGE, &UPLO,
302 &ABSTOL, &M, WTMP, Z,
304 &LWORK, IWORK, &LIWORK,
308 if ( convertToInt(INFO) == 0 )
315 for (
i = 0;
i < m; ++
i)
316 eigenvalues[
i] = WTMP[
i];
317 for (
i = m;
i < n; ++
i)
321 if ( geteigenvectors )
323 for (
i = 0;
i < m; ++
i)
325 for (j = 0; j < n; ++j)
326 A[
i * n + j] = Z[
i * n + j];
338 if ( convertToInt(INFO) != 0 )
340 SCIPerrorMessage(
"There was an error when calling DSYEVR. INFO = %d.\n", convertToInt(INFO));
368#ifdef SCIP_WITH_LAPACK
369 SCIP_CALL( lapackComputeEigenvalues(bufmem, geteigenvectors, N,
a,
w) );
408#ifdef SCIP_WITH_LAPACK
411 LAPACKINTTYPE* pivots;
423 F77_FUNC(dgetrf, DGETRF)(&N, &N, Atmp, &N, pivots, &INFO);
425 if ( convertToInt(INFO) != 0 )
427 SCIPdebugMessage(
"There was an error when calling DGETRF. INFO = %d\n", convertToInt(INFO));
432 LAPACKINTTYPE NRHS = 1LL;
436 F77_FUNC(dgetrs, DGETRS)(&TRANS, &N, &NRHS, Atmp, &N, pivots, btmp, &N, &INFO);
438 if ( convertToInt(INFO) != 0 )
440 SCIPdebugMessage(
"There was an error when calling DGETRF. INFO = %d\n", convertToInt(INFO));
common defines and data types used in all packages of SCIP
SCIP_RETCODE SCIPcallLapackDsyevIpopt(SCIP_Bool computeeigenvectors, int N, SCIP_Real *a, SCIP_Real *w)
SCIP_RETCODE SCIPsolveLinearEquationsIpopt(int N, SCIP_Real *A, SCIP_Real *b, SCIP_Real *x, SCIP_Bool *success)
SCIP_Bool SCIPisIpoptAvailableIpopt(void)
assert(minobj< SCIPgetCutoffbound(scip))
SCIP_Bool SCIPlapackIsAvailable(void)
SCIP_RETCODE SCIPlapackComputeEigenvalues(BMS_BUFMEM *bufmem, SCIP_Bool geteigenvectors, int N, SCIP_Real *a, SCIP_Real *w)
SCIP_RETCODE SCIPlapackSolveLinearEquations(BMS_BUFMEM *bufmem, int n, SCIP_Real *A, SCIP_Real *b, SCIP_Real *x, SCIP_Bool *success)
void SCIPlapackVersion(int *majorver, int *minorver, int *patchver)
interface methods for lapack functions
memory allocation routines
#define BMSduplicateBufferMemoryArray(mem, ptr, source, num)
#define BMSfreeBufferMemoryArray(mem, ptr)
#define BMScopyMemoryArray(ptr, source, num)
#define BMSallocBufferMemoryArray(mem, ptr, num)
#define BMSfreeBufferMemoryArrayNull(mem, ptr)
struct BMS_BufMem BMS_BUFMEM
void F77_FUNC(filtersqp, FILTERSQP)
public methods for message output
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE