static VALUE rb_gsl_blas_ztrmm(VALUE obj, VALUE s, VALUE u, VALUE ta, VALUE d, VALUE a, VALUE aa, VALUE bb) { gsl_matrix_complex *A = NULL, *B = NULL; gsl_complex *pa = NULL; CBLAS_SIDE_t Side; CBLAS_UPLO_t Uplo; CBLAS_TRANSPOSE_t TransA; CBLAS_DIAG_t Diag; CHECK_FIXNUM(s); CHECK_FIXNUM(u); CHECK_FIXNUM(ta); CHECK_FIXNUM(d); CHECK_COMPLEX(a); CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(bb); Side = FIX2INT(s); Uplo = FIX2INT(u); TransA = FIX2INT(ta); Diag = FIX2INT(d); Data_Get_Struct(a, gsl_complex, pa); Data_Get_Struct(aa, gsl_matrix_complex, A); Data_Get_Struct(bb, gsl_matrix_complex, B); gsl_blas_ztrmm(Side, Uplo, TransA, Diag, *pa, A, B); return bb; }
static VALUE rb_gsl_blas_ztrmm2(VALUE obj, VALUE s, VALUE u, VALUE ta, VALUE d, VALUE a, VALUE aa, VALUE bb) { gsl_matrix_complex *A = NULL, *B = NULL, *Bnew = NULL; gsl_complex *pa = NULL; CBLAS_SIDE_t Side; CBLAS_UPLO_t Uplo; CBLAS_TRANSPOSE_t TransA; CBLAS_DIAG_t Diag; CHECK_FIXNUM(s); CHECK_FIXNUM(u); CHECK_FIXNUM(ta); CHECK_FIXNUM(d); CHECK_COMPLEX(a); CHECK_MATRIX_COMPLEX(aa); CHECK_MATRIX_COMPLEX(bb); Side = FIX2INT(s); Uplo = FIX2INT(u); TransA = FIX2INT(ta); Diag = FIX2INT(d); Data_Get_Struct(a, gsl_complex, pa); Data_Get_Struct(aa, gsl_matrix_complex, A); Data_Get_Struct(bb, gsl_matrix_complex, B); Bnew = gsl_matrix_complex_alloc(B->size1, B->size2); gsl_matrix_complex_memcpy(Bnew, B); gsl_blas_ztrmm(Side, Uplo, TransA, Diag, *pa, A, Bnew); return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, Bnew); }
/** * C++ version of gsl_blas_ztrmm(). * @param Side Side to apply operation to * @param Uplo Upper or lower triangular * @param TransA Transpose type * @param Diag Diagonal type * @param alpha A constant * @param A A matrix * @param B Another matrix * @return Error code on failure */ int ztrmm( CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Diag, complex const& alpha, matrix_complex const& A, matrix_complex& B ){ return gsl_blas_ztrmm( Side, Uplo, TransA, Diag, alpha.get(), A.get(), B.get() ); }