0001 function result = obtainProjectionDataForVector(dec, hE, zerotol)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 if ~dec.isProper
0024 error('elk:decomposition:numericalError', ['Developer uses wrong ' ...
0025 'function. This should not happen.']);
0026 end
0027
0028
0029
0030 violatedIndexVector = find((dec.confinementMappingData.A * hE) > zerotol)';
0031
0032 invalidFacetGroupVector = dec.confinementMappingData.responsibleVector(...
0033 violatedIndexVector);
0034
0035
0036 result.constraintMatrix = zeros(0, length(hE));
0037 result.projectionMatrix = eye(length(hE));
0038 result.constraintList = cell([1, length(violatedIndexVector)]);
0039 result.projectionList = cell([1, length(violatedIndexVector)]);
0040 result.violatedConstraintIndexVector = violatedIndexVector;
0041 result.invalidFacetGroupVector = invalidFacetGroupVector;
0042 result.projectionIndexVector = 0*invalidFacetGroupVector;
0043
0044
0045
0046
0047 if isempty(invalidFacetGroupVector)
0048 result.constraintMatrix = dec.confinementMappingData.A;
0049
0050
0051
0052
0053
0054
0055 return
0056 end
0057
0058
0059
0060
0061
0062 for iConstraint = 1:length(invalidFacetGroupVector)
0063 projectionData = dec.confinementMappingData.projectionData(...
0064 invalidFacetGroupVector(iConstraint));
0065
0066 [dump thisProjectionIndex thisConstraintMatrixList] = ...
0067 projectFromData(hE, projectionData, zerotol, 1);
0068 thisProjectionMatrix = projectionData.projectionList{thisProjectionIndex};
0069
0070
0071 result.constraintMatrix = [result.constraintMatrix; ...
0072 thisConstraintMatrixList{1}];
0073 result.projectionMatrix = result.projectionMatrix * ...
0074 thisProjectionMatrix;
0075 result.constraintList{iConstraint} = thisConstraintMatrixList{1};
0076 result.projectionList{iConstraint} = thisProjectionMatrix;
0077 result.projectionIndexVector(iConstraint) = thisProjectionIndex;
0078 end