code: public static boolean cs_lusol(int order, DZcs A, DZcsa b, double tol)
  	{
  		DZcsa x ;
  		DZcss S ;
  		DZcsn N ;
  		int n ;
  		boolean ok ;
  		if (!CS_CSC (A) || b == null) return (false);	/* check inputs */
  		n = A.n ;
  		S = cs_sqr (order, A, false) ; 			/* ordering and symbolic analysis */
  		N = cs_lu (A, S, tol) ;				/* numeric LU factorization */
  		x = new DZcsa(n) ; 				/* get workspace */
  		ok = (S != null && N != null) ;
  		if (ok)
  		{
  			cs_ipvec (N.pinv, b, x, n) ;		/* x = b(p) */
  			cs_lsolve (N.L, x) ;			/* x = L\x */
  			cs_usolve (N.U, x) ;			/* x = U\x */
  			cs_ipvec (S.q, x, b, n) ;		/* b(q) = x */
  		}
  		x = null ;
  		S = null ;
  		N = null ;
  		return (ok) ;
  	}
docs: Solves Ax=b, where A is square and nonsingular. b overwritten with
  solution. Partial pivoting if tol = 1.
  
  @param order
  ordering method to use (0 to 3)
  @param A
  column-compressed matrix
  @param b
  size n, b on input, x on output
  @param tol
  partial pivoting tolerance
  @return true if successful, false on error