function result = evaluateSimpleApproach(pbeDef, projectionMatrix)

% The "simple" approach can be achieved by using the original improper
%   representation where NO growth rate correction is applied during
%   growth. But this is not sufficiently safe to work properly.
% As the "simple" approach is a very blind integration, we can perform it -
%   as such. The result is a time vector and the corresponding position
%   matrix. We can even build up a proper result structure.


%% integration
nC = pbeDef.dec.nC;
nVec = size(pbeDef.seeding.positionMatrix, 2);
if ~exist('projectionMatrix', 'var')
    projectionMatrix = eye(nC);
end
xVector = pbeDef.seeding.positionMatrix(:);
derivativeVector = @(t,x)(reshape(...
    projectionMatrix*pbeDef.growthRate(...
      reshape(x, nC, nVec), ...
      [], [], t), ...
    nC*nVec, 1));
[tVector xMatrix] = ode45(derivativeVector, pbeDef.timeSpan, xVector, ...
    odeset('relTol', 1e-7, 'absTol', 1e-20));

%% build result vector
result(length(tVector)) = struct();
for iTime = 1:length(tVector)
    result(iTime).time = tVector(iTime);
    result(iTime).evalTime = nan;
    result(iTime).bulkStateVector = [];
    result(iTime).hcMatrix = reshape(xMatrix(iTime, :), nC, nVec);
    result(iTime).hcMatrix = mapToConfinementCone(...
        result(iTime).hcMatrix, pbeDef.dec, 0);
    if all(abs(result(iTime).hcMatrix) < 1e-10)
        result(iTime).hcMatrix = zeros(nC, 0);
    else
        result(iTime).upVector = computePartitionIndexDec(...
            pbeDef.dec, result(iTime).hcMatrix, 1e-10, 1);
    end
%     result(iTime).numberVector = pbeDef.seeding.numberVector;
%     result(iTime).probabilityVector = pbeDef.seeding.probabilityVector;
%     result(iTime).indexVector = nan;
    
%     dissolvedPivotVector
%     pivotPropertyMatrix
%     bulkPropertyVector
%     flagNucleation
%     flagDensity
%     hcMatrixDynamic
%     derivativeStruct
end