Changeset b859805f in OpenModelica
- Timestamp:
- 2019-09-25T11:31:20+02:00 (5 years ago)
- Parents:
- 77fc13e9
- git-author:
- Julien Schueller <schueller@…> (09/25/19 11:31:17)
- git-committer:
- Julien Schueller <schueller@…> (09/25/19 11:31:20)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
OMCompiler/Compiler/runtime/lapackimpl.c
r83be5f2b rb859805f 356 356 void **outWORK, int *INFO) 357 357 { 358 #ifndef NO_LAPACK 359 integer n, lda, ldb, ldvl, ldvr, lwork, info = 0; 360 double *a, *b, *work, *alphar, *alphai, *beta, *vl, *vr; 361 362 n = N; 363 lda = LDA; 364 ldb = LDB; 365 ldvl = LDVL; 366 ldvr = LDVR; 367 lwork = LWORK; 368 369 a = alloc_real_matrix(lda, n, A); 370 b = alloc_real_matrix(ldb, n, B); 371 alphar = alloc_zeroed_real_vector(n); 372 alphai = alloc_zeroed_real_vector(n); 373 beta = alloc_zeroed_real_vector(n); 374 vl = alloc_zeroed_real_matrix(ldvl, n); 375 vr = alloc_zeroed_real_matrix(ldvl, n); 376 work = alloc_real_vector(lwork, inWORK); 377 378 dgegv_(&*jobvl, &*jobvr, &n, a, &lda, b, &ldb, alphar, alphai, beta, vl, 379 &ldvl, vr, &ldvr, work, &lwork, &info); 380 381 *ALPHAR = mk_rml_real_vector(n, alphar); 382 *ALPHAI = mk_rml_real_vector(n, alphai); 383 *BETA = mk_rml_real_vector(n, beta); 384 *VL = mk_rml_real_matrix(ldvl, n, vl); 385 *VR = mk_rml_real_matrix(ldvl, n, vr); 386 *outWORK = mk_rml_real_vector(lwork, work); 387 *INFO = info; 388 389 free(a); 390 free(b); 391 free(alphar); 392 free(alphai); 393 free(beta); 394 free(vl); 395 free(vr); 396 free(work); 397 #else 398 MMC_THROW(); 399 #endif 358 MMC_THROW(); 400 359 } 401 360 … … 438 397 void **outA, void **outB, void **outJPVT, int *RANK, int *INFO) 439 398 { 440 #ifndef NO_LAPACK 441 integer m, n, nrhs, lda, ldb, rank = 0, info = 0, lwork; 442 double *a, *b, *work; 443 integer *jpvt; 444 445 m = M; 446 n = N; 447 nrhs = NRHS; 448 lda = LDA; 449 ldb = LDB; 450 lwork = (integer)fmax(fmin(M, N) + 3*N, 2*fmin(M, N) + nrhs); 451 452 a = alloc_real_matrix(lda, n, inA); 453 b = alloc_real_matrix(ldb, nrhs, inB); 454 work = alloc_real_vector(lwork, WORK); 455 jpvt = alloc_int_vector(n, inJPVT); 456 457 dgelsx_(&m, &n, &nrhs, a, &lda, b, &ldb, jpvt, &rcond, &rank, work, &info); 458 459 *outA = mk_rml_real_matrix(lda, n, a); 460 *outB = mk_rml_real_matrix(lda, nrhs, b); 461 *outJPVT = mk_rml_int_vector(n, jpvt); 462 *RANK = rank; 463 *INFO = info; 464 465 free(a); 466 free(b); 467 free(work); 468 free(jpvt); 469 #else 470 MMC_THROW(); 471 #endif 399 MMC_THROW(); 472 400 } 473 401 … … 793 721 void *WORK, void **outA, void **outJPVT, void **TAU, int *INFO) 794 722 { 795 #ifndef NO_LAPACK 796 integer m, n, lda, lwork, ldtau, info = 0; 797 double *a, *tau, *work; 798 integer *jpvt; 799 800 m = M; 801 n = N; 802 lda = LDA; 803 lwork = 3 * n; 804 ldtau = (m < n ? m : n); 805 806 a = alloc_real_matrix(lda, n, inA); 807 jpvt = alloc_int_vector(n, inJPVT); 808 tau = alloc_zeroed_real_vector(ldtau); 809 work = alloc_real_vector(lwork, WORK); 810 811 dgeqpf_(&m, &n, a, &lda, jpvt, tau, work, &info); 812 813 *outA = mk_rml_real_matrix(lda, n, a); 814 *outJPVT = mk_rml_int_vector(n, jpvt); 815 *TAU = mk_rml_real_vector(ldtau, tau); 816 *INFO = info; 817 818 free(a); 819 free(jpvt); 820 free(tau); 821 free(work); 822 #else 823 MMC_THROW(); 824 #endif 723 MMC_THROW(); 825 724 } 826 725
Note: See TracChangeset
for help on using the changeset viewer.