VrArrayPtrCF64 BlasComplexDouble::mat_ldiv(int matrix_order ,VrArrayPtrCF64 A, VrArrayPtrCF64 B) { VrArrayPtrCF64 C = vec_copy(VR_GET_NDIMS_CF64(B),B); VrArrayPtrCF64 D = vec_copy(VR_GET_NDIMS_CF64(A),A); double complex* data= VR_GET_DATA_CF64(D); double complex * out_data=VR_GET_DATA_CF64(C); long int lda=(long int)VR_GET_DIMS_CF64(D)[0]; long int ldb= (long int)VR_GET_DIMS_CF64(C)[0]; long int n=(long int )VR_GET_DIMS_CF64(D)[1]; long int nrhs= (long int )VR_GET_DIMS_CF64(C)[1]; int *IPIV=(int*)VR_MALLOC(sizeof(int)*n); long int info=0; // dgesv_(&n,&nrhs,data,&lda,IPIV,out_data,&ldb,&info); info= LAPACKE_zgesv(LAPACK_COL_MAJOR,n,nrhs,data,lda,IPIV,out_data,ldb); return C; }
template <> inline int gesvd(const char order, const int N, const int M, complex<double> *A, const int LDA, int *IPIV, complex<double> *B, const int LDB) { return LAPACKE_zgesv(order, N, M, A, LDA, IPIV, B, LDB); }