Code covered by the BSD License  

Highlights from
Dynamical Systems Toolbox

image thumbnail
from Dynamical Systems Toolbox by Etienne Coetzee
Bifurcation analysis of dynamical systems. Integration of AUTO bifurcation software into MATLAB.

[]=wr78outvars()
function []=wr78outvars()

dbstop if error

%% f8 file variables
F8{1}={'IBR',1,'int'};
F8{2}={'MTOT',1,'int'};
F8{3}={'ITP',1,'int'};
F8{4}={'LAB',1,'int'};
F8{5}={'NFPR',1,'int'};
F8{6}={'ISW',1,'int'};
F8{7}={'NTPL',1,'int'};
F8{8}={'NAR',1,'int'};
F8{9}={'NROWPR',1,'int'};
F8{10}={'NTST',1,'int'};
F8{11}={'NCOL',1,'int'};
F8{12}={'NPARX',1,'int'};
F8{13}={'IFPR',2,'int','NFPR','ICP(J)'};
F8{14}={'T',1,'dbl'};
F8{15}={'TM',2,'dbl','NTST+1','J'};
F8{16}={'PAR',2,'dbl','NPARX','J'};
F8{17}={'RLDOT',2,'dbl','NFPR','J'};
F8{18}={'U',2,'dbl','NDIM','J','NTPL','I'};
F8{19}={'UPS',3,'dbl','NDIM','J','NTPL','I'};
F8{20}={'UDOTPS',3,'dbl','NDIM','J','NTPL','I'};

fid=fopen('F8NormalDefinition2.txt','w');

if fid<0
    error('Could not open F8 definition file')
end

%% write header
str=['C HEADER INFORMATION --------------------------------------------------------------------'];
fprintf(fid,'C\n%s\nC\n',str(1:72));
str='USE AUTO_CONSTANTS, ONLY:';
for i=1:length(F8)
   str=[str,F8{i}{1},'F8,','old',F8{i}{1},'F8,'];
end
str=[str,'NPARX'];

while ~isempty(str)
    if length(str)>=66
       idx=1:66;
    else
       idx=1:length(str); 
    end

    fstr=str(idx); 
    str(idx)=[];
    if strmatch('USE',fstr)
      fprintf(fid,'      %s\n',fstr);
    else
      fprintf(fid,'     &%s\n',fstr);    
    end
end

    fprintf(fid,'\n\n');
    str=['C ARRAY ALLOCATION  --------------------------------------------------------------------'];
    fprintf(fid,'C\n%s\nC\n',str(1:72));
    
%% write allocation statements
for i=1:length(F8)
    fprintf(fid,'C %s ------------\n',F8{i}{1});
    
    if F8{i}{2} == 1
    fprintf(fid,'      R=SIZE(%sF8,1)\n',F8{i}{1});
    fprintf(fid,'      ALLOCATE(old%sF8(R))\n',F8{i}{1});
    fprintf(fid,'      old%sF8=%sF8\n',F8{i}{1},F8{i}{1});
    fprintf(fid,'      DEALLOCATE(%sF8)\n',F8{i}{1});
    fprintf(fid,'      ALLOCATE(%sF8(R+1))\n',F8{i}{1});
    fprintf(fid,'      IF(R > 0) THEN\n');
    fprintf(fid,'          DO I=1,R\n');
    fprintf(fid,'            %sF8(I)=old%sF8(I)\n',F8{i}{1},F8{i}{1});
    fprintf(fid,'          ENDDO\n');       
    fprintf(fid,'      ENDIF\n');
    fprintf(fid,'      %sF8(R+1)=%s\n',F8{i}{1},F8{i}{1});
    fprintf(fid,'      DEALLOCATE(old%sF8)\n',F8{i}{1});
    elseif F8{i}{2} == 2
    fprintf(fid,'      R=SIZE(%sF8,1)\n',F8{i}{1});
    fprintf(fid,'      C=SIZE(%sF8,2)\n',F8{i}{1});
    fprintf(fid,'      ALLOCATE(old%sF8(R,%s))\n',F8{i}{1},F8{i}{4});
    fprintf(fid,'      old%sF8=%sF8\n',F8{i}{1},F8{i}{1});
    fprintf(fid,'      DEALLOCATE(%sF8)\n',F8{i}{1});
    fprintf(fid,'      ALLOCATE(%sF8(R+1,%s))\n',F8{i}{1},F8{i}{4});
    fprintf(fid,'      IF(R > 0) THEN\n');
    fprintf(fid,'          DO I=1,R\n');
    fprintf(fid,'            DO J=1,%s\n',F8{i}{4});
    fprintf(fid,'              %sF8(I,J)=old%sF8(I,J)\n',F8{i}{1},F8{i}{1});
    fprintf(fid,'            ENDDO\n'); 
    fprintf(fid,'          ENDDO\n'); 
    fprintf(fid,'      ENDIF\n');   
    fprintf(fid,'      DO J=1,%s\n',F8{i}{4});
    fprintf(fid,'        %sF8(R+1,J)=%s(%s)\n',F8{i}{1},F8{i}{1},F8{i}{5});
    fprintf(fid,'      ENDDO\n');
    fprintf(fid,'      DEALLOCATE(old%sF8)\n',F8{i}{1});
    elseif F8{i}{2} == 3
    fprintf(fid,'      R=SIZE(%sF8,1)\n',F8{i}{1});
    fprintf(fid,'      C=SIZE(%sF8,2)\n',F8{i}{1});
    fprintf(fid,'      P=SIZE(%sF8,3)\n',F8{i}{1});
    fprintf(fid,'      ALLOCATE(old%sF8(%s,%s,P))\n',F8{i}{1},F8{i}{6},F8{i}{4});
    fprintf(fid,'      old%sF8=%sF8\n',F8{i}{1},F8{i}{1});
    fprintf(fid,'      DEALLOCATE(%sF8)\n',F8{i}{1});
    fprintf(fid,'      ALLOCATE(%sF8(%s,%s,P+1))\n',F8{i}{1},F8{i}{6},F8{i}{4});
    fprintf(fid,'      IF(R > 0) THEN\n');
    fprintf(fid,'        DO I=1,%s\n',F8{i}{6});
    fprintf(fid,'          DO J=1,%s\n',F8{i}{4});
    fprintf(fid,'            DO K=1,P\n');    
    fprintf(fid,'              %sF8(I,J,K)=old%sF8(I,J,K)\n',F8{i}{1},F8{i}{1});
    fprintf(fid,'            ENDDO\n');    
    fprintf(fid,'          ENDDO\n');
    fprintf(fid,'        ENDDO\n');    
    fprintf(fid,'      ENDIF\n');   
    fprintf(fid,'      DO I=1,%s\n',F8{i}{6});
    fprintf(fid,'        DO J=1,%s\n',F8{i}{4});
    fprintf(fid,'          %sF8(I,J,P+1)=%s(%s,%s)\n',F8{i}{1},F8{i}{1},F8{i}{7},F8{i}{5});
    fprintf(fid,'        ENDDO\n');
    fprintf(fid,'      ENDDO\n');    
    fprintf(fid,'      DEALLOCATE(old%sF8)\n',F8{i}{1});    
    end
    fprintf(fid,'C\n');    
end        
       
    fprintf(fid,'\n\n');
    
%% declare variables in module
str=['C MODULE DECLARATIONS --------------------------------------------------------------------'];
fprintf(fid,'C\n%s\nC\n',str(1:72));
    
for i=1:length(F8)
    if F8{i}{2}==1
        str='(:)';
    elseif F8{i}{2}==2
        str='(:,:)';
    elseif F8{i}{2}==3
        str='(:,:,:)';
    end
    
    if strmatch('int',F8{i}{3})
    fprintf(fid,'      INTEGER,ALLOCATABLE :: %sF8%s\n',F8{i}{1},str);
    fprintf(fid,'      INTEGER,ALLOCATABLE :: old%sF8%s\n',F8{i}{1},str); 
    else
    fprintf(fid,'      DOUBLE PRECISION,ALLOCATABLE :: %sF8%s\n',F8{i}{1},str);
    fprintf(fid,'      DOUBLE PRECISION,ALLOCATABLE :: old%sF8%s\n',F8{i}{1},str);         
    end
    
end
    
%% In copydstobjects.f allocate variables
str=['C ALLOCATE VARIABLES IN COPYDSTOBJECTS.F --------------------------------------------------------------------'];
fprintf(fid,'C\n%s\nC\n',str(1:72));

for i=1:length(F8)
    if F8{i}{2}==1
        str='0';
    elseif F8{i}{2}==2
        str='0,0';
    elseif F8{i}{2}==3
        str='0,0,0';
    end
    
    fprintf(fid,'      ALLOCATE(%sF8(%s))\n',F8{i}{1},str);    
end


%% In Autostop deallocate allocated variables
str=['C DEALLOCATE ALLOCATED VARIABLES --------------------------------------------------------------------'];
fprintf(fid,'C\n%s\nC\n',str(1:72));

for i=1:length(F8) 
    fprintf(fid,'      IF(ALLOCATED(%sF8))DEALLOCATE(%sF8)\n',F8{i}{1},F8{i}{1});
    fprintf(fid,'      IF(ALLOCATED(old%sF8))DEALLOCATE(old%sF8)\n',F8{i}{1},F8{i}{1}); 
end

fclose(fid);

Contact us