function varargout = bicgstabl(varargin)
%BICGSTABL   BiConjugate Gradients Stabilized(l) Method for gpuArray.
%   X = BICGSTABL(A,B)
%   X = BICGSTABL(A,B)
%   X = BICGSTABL(A,B,TOL)
%   X = BICGSTABL(A,B,TOL,MAXIT)
%   X = BICGSTABL(A,B,TOL,MAXIT,M)
%   X = BICGSTABL(A,B,TOL,MAXIT,M1,M2)
%   X = BICGSTABL(A,B,TOL,MAXIT,M1,M2,X0)
%   [X,FLAG] = BICGSTABL(A,B,...)
%   [X,FLAG,RELRES] = BICGSTABL(A,B,...)
%   [X,FLAG,RELRES,ITER] = BICGSTABL(A,B,...)
%   [X,FLAG,RELRES,ITER,RESVEC] = BICGSTABL(A,B,...)
%      
%   Note that B must be a non-sparse column vector.
%   
%   
%   Example:
%   Using BICGSTABL to solve a large system of gpuArray data:
%    
%       n = 100; 
%       dOnes = gpuArray.ones(n,1); 
%       dA = spdiags([-2*dOnes 4*dOnes -dOnes],-1:1,n,n);
%       db = full(sum(A,2)); 
%       tol = 1e-10; 
%       maxit = 15; 
%       dM = spdiags(4*dOnes, 0, n, n);
%       
%       dX = BICGSTABL(dA, db, tol, maxit, dM)
%   
%   See also BICGSTABL, GPUARRAY, ONES, SPDIAGS, SUM.


%   Copyright 1984-2018 The MathWorks, Inc.

% Ensure that only the data inputs (args 1,2,5,6,7) are on the GPU
varargin = prepareSolverInputs(varargin, [1 1 0 0 1 1 1]);

% Call the local copy of the MATLAB code
[varargout{1:nargout}] = parallel.internal.flowthrough.bicgstabl(varargin{:});
