0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 function [AX,AX_ORIG] = DSA_BD_AXfun_aux(blk,At,X,AL)
0014
0015
0016 if (nargin < 4); AL = []; end
0017 if isempty(AL); existAL = 0; else existAL = 1; end
0018
0019 if iscell(At)
0020 m = size(At{1},2);
0021 AX = zeros(m,1);
0022 for p = 1:size(blk,1);
0023 pblk = blk(p,:);
0024 if strcmp(pblk{1},'s')
0025 if (length(pblk{2}) == 1)
0026 AXtmp = (mexsvec(pblk,X{p})'*At{p,1})';
0027 else
0028 AXtmp = (mexsvec(pblk,sparse(X{p}))'*At{p,1})';
0029 end
0030 elseif strcmp(pblk{1},'l') || strcmp(pblk{1},'u')
0031 AXtmp = (X{p}'*At{p,1})';
0032 end
0033 AX = AX + AXtmp;
0034 end
0035 else
0036 if strcmp(blk{1,1},'s')
0037 if (length(blk{1,2})==1)
0038 AX = (mexsvec(blk,X)'*At)';
0039 else
0040 AX = (mexsvec(blk,sparse(X))'*At)';
0041 end
0042 elseif strcmp(blk{1,1},'l') || strcmp(blk{1,1},'u')
0043 AX = (X'*At)';
0044 end
0045 end
0046 AX_ORIG = [];
0047 if (existAL)
0048 AX_ORIG = AX;
0049 if strcmp(AL.matfct_options,'chol')
0050 AX = AL.Rt \ AX;
0051 elseif strcmp(AL.matfct_options,'spcholmatlab')
0052 AX = AL.Rt\(AL.St*AX);
0053 end
0054 end
0055