Example #1
0
// DTRTRS: (Double-precision) TRiangular Solve
//
// http://www.netlib.org/lapack/double/dtrtrs.f
func dtrtrs(tri Triangle, t bool, diag diagType, n, nrhs int, a []float64, lda int, b []float64, ldb int) error {
	var (
		uplo_  = uploChar(tri)
		trans_ = transChar(t)
		diag_  = diagChar(diag)
		n_     = C.integer(n)
		nrhs_  = C.integer(nrhs)
		a_     = ptrFloat64(a)
		lda_   = C.integer(lda)
		b_     = ptrFloat64(b)
		ldb_   = C.integer(ldb)
	)
	var info_ C.integer

	C.dtrtrs_(&uplo_, &trans_, &diag_, &n_, &nrhs_, a_, &lda_, b_, &ldb_, &info_)

	info := int(info_)
	switch {
	case info < 0:
		return errInvalidArg(-info)
	case info > 0:
		return errSingular(info)
	default:
		return nil
	}
}
Example #2
0
// void dtrtrs_(char *uplo, char *trans, char *diag, int *n, int *nrhs,
//		double  *A, int *lda, double *B, int *ldb, int *info);
func dtrtrs(uplo, trans, diag string, N, Nrhs int, A []float64, lda int, B []float64, ldb int) int {

	var info int = 0
	cuplo := C.CString(uplo)
	defer C.free(unsafe.Pointer(cuplo))
	ctrans := C.CString(trans)
	defer C.free(unsafe.Pointer(ctrans))
	cdiag := C.CString(diag)
	defer C.free(unsafe.Pointer(cdiag))

	C.dtrtrs_(cuplo, ctrans, cdiag,
		(*C.int)(unsafe.Pointer(&N)),
		(*C.int)(unsafe.Pointer(&Nrhs)),
		(*C.double)(unsafe.Pointer(&A[0])),
		(*C.int)(unsafe.Pointer(&lda)),
		(*C.double)(unsafe.Pointer(&B[0])),
		(*C.int)(unsafe.Pointer(&ldb)),
		(*C.int)(unsafe.Pointer(&info)))
	return info
}