JCublasJava/src/main/java/jcuda/jcublas/JCublas.java
public static void cublasCtrmm(char side, char uplo, char transa, char diag, int m, int n, cuComplex alpha, Pointer A, int lda, Pointer B, int ldb)
    {
        cublasCtrmmNative(side, uplo, transa, diag, m, n, alpha, A, lda, B, ldb);
        checkResultBLAS();
    }
public static void cublasCtrmm(char side, char uplo, char transa, char diag, int m, int n, cuComplex alpha, Pointer A, int lda, Pointer B, int ldb)
    {
        cublasCtrmmNative(side, uplo, transa, diag, m, n, alpha, A, lda, B, ldb);
        checkResultBLAS();
    }
<pre>
void
cublasCtrmm (char side, char uplo, char transa, char diag, int m, int n,
cuComplex alpha, const cuComplex *A, int lda, const cuComplex *B,
int ldb)

performs one of the matrix-matrix operations

B = alpha * op(A) * B,  or  B = alpha * B * op(A)

where alpha is a single-precision complex scalar, B is an m x n matrix composed
of single precision complex elements, and A is a unit or non-unit, upper or lower,
triangular matrix composed of single precision complex elements. op(A) is one of

op(A) = A  , op(A) = transpose(A) or op(A) = conjugate(transpose(A))

Matrices A and B are stored in column major format, and lda and ldb are
the leading dimensions of the two-dimensonials arrays that contain A and
B, respectively.

Input
-----
side   specifies whether op(A) multiplies B from the left or right.
If side = 'L' or 'l', then B = alpha * op(A) * B. If side =
'R' or 'r', then B = alpha * B * op(A).
uplo   specifies whether the matrix A is an upper or lower triangular
matrix. If uplo = 'U' or 'u', A is an upper triangular matrix.
If uplo = 'L' or 'l', A is a lower triangular matrix.
transa specifies the form of op(A) to be used in the matrix
multiplication. If transa = 'N' or 'n', then op(A) = A. If
transa = 'T' or 't', then op(A) = transpose(A).
If transa = 'C' or 'c', then op(A) = conjugate(transpose(A)).
diag   specifies whether or not A is unit triangular. If diag = 'U'
or 'u', A is assumed to be unit triangular. If diag = 'N' or
'n', A is not assumed to be unit triangular.
m      the number of rows of matrix B. m must be at least zero.
n      the number of columns of matrix B. n must be at least zero.
alpha  single precision complex scalar multiplier applied to op(A)*B, or
B*op(A), respectively. If alpha is zero no accesses are made
to matrix A, and no read accesses are made to matrix B.
A      single precision complex array of dimensions (lda, k). k = m if side =
'L' or 'l', k = n if side = 'R' or 'r'. If uplo = 'U' or 'u'
the leading k x k upper triangular part of the array A must
contain the upper triangular matrix, and the strictly lower
triangular part of A is not referenced. If uplo = 'L' or 'l'
the leading k x k lower triangular part of the array A must
contain the lower triangular matrix, and the strictly upper
triangular part of A is not referenced. When diag = 'U' or 'u'
the diagonal elements of A are no referenced and are assumed
to be unity.
lda    leading dimension of A. When side = 'L' or 'l', it must be at
least max(1,m) and at least max(1,n) otherwise
B      single precision complex array of dimensions (ldb, n). On entry, the
leading m x n part of the array contains the matrix B. It is
overwritten with the transformed matrix on exit.
ldb    leading dimension of B. It must be at least max (1, m).

Output
------
B      updated according to B = alpha * op(A) * B  or B = alpha * B * op(A)

Reference: http://www.netlib.org/blas/ctrmm.f

Error status for this function can be retrieved via cublasGetError().

Error Status
------------
CUBLAS_STATUS_NOT_INITIALIZED  if CUBLAS library has not been initialized
CUBLAS_STATUS_INVALID_VALUE    if m or n < 0
CUBLAS_STATUS_EXECUTION_FAILED if function failed to launch on GPU
</pre>