COMPUTE_WHISKER
function [W_0, R_0] = compute_whisker(obj, order)
        
          
            This function computes the invariant manifold in the autonomous
            system limit either a tensor- based or a multi-index based algorithm
            may be chosen for the computation. This function sets up the
            computation, the order
             cohomological equation for obtaining the parametrisation
            coefficients and the coefficients for the reduced dynamics are
            computed by calling
            cohomological_solution.
            
            cohomological equation for obtaining the parametrisation
            coefficients and the coefficients for the reduced dynamics are
            computed by calling
            cohomological_solution.
          
Leading-order terms
Lambda_E = obj.E.spectrum; W_01 = obj.E.basis; switch obj.Options.notation case 'tensor' % Initialize W_0 = cell(1,order); R_0 = cell(1,order); W_0{1} = sptensor(W_01); R_0{1} = sptensor(diag(Lambda_E)); % *Outer resonance case* : issue warning if obj.resonance.outer.occurs prompt = 'Due to (near) outer resonance, the exisitence of the manifold is questionable and the underlying computation may suffer.'; disp(prompt) disp('Attempting manifold computation') end for j = 2:order %recursively approximate at j-th order startOrderj = tic; [W_0{j},R_0{j},~] = cohomological_solution(obj,j,W_0,R_0,[]); obj.solInfo.timeEstimate(j) = toc(startOrderj); disp(['Manifold computation time at order ' num2str(j) ' = ' datestr(datenum(0,0,0,0,0,obj.solInfo.timeEstimate(j)),'HH:MM:SS')]) fprintf('Estimated memory usage at order % 2i = %05.2E MB\n', j, obj.solInfo.memoryEstimate(j)) end for j = 1:order W_0{j} = tensor_to_multi_index(W_0{j}); R_0{j} = tensor_to_multi_index(R_0{j}); end W_0 = [W_0{:}]; R_0 = [R_0{:}]; case 'multiindex'
W_0 = repmat(struct('coeffs',[]),1,order); R_0 = repmat(struct('coeffs',[]),1,order); % Set up system for Multi-index notation version check_COMPtype(obj); % determine whether system is real or complex [W_0(1),R_0(1),multi_input] = coeffs_setup(obj,order); % *Outer resonance case* : issue warning if obj.resonance.outer.occurs prompt = 'Due to (near) outer resonance, the exisitence of the manifold is questionable and the underlying computation may suffer.'; disp(prompt) disp('Attempting manifold computation') end for j = 2:order %recursively approximate at j-th order startOrderj = tic; [W_0(j).coeffs,R_0(j).coeffs,multi_input] = cohomological_solution(obj,j,W_0,R_0,multi_input); obj.solInfo.timeEstimate(j) = toc(startOrderj); disp(['Manifold computation time at order ' num2str(j) ' = ' datestr(datenum(0,0,0,0,0,obj.solInfo.timeEstimate(j)),'HH:MM:SS')]) fprintf('Estimated memory usage at order % 2i = %05.2E MB\n', j, obj.solInfo.memoryEstimate(j)) end switch obj.System.Options.DStype case 'real' [W_0,R_0] = coeffs_conj2lex(multi_input,order,W_0,R_0); case 'complex' [W_0] = coeffs_lex2revlex(W_0,'TaylorCoeff'); [R_0] = coeffs_lex2revlex(R_0,'TaylorCoeff'); end
Add multi-indices field to the coefficients field at every order
[W_0,R_0] = coeffs_output(W_0,R_0,order);
end
        
          
        