\% ********** About ********** \topic kh_About {about CONTENT} \qc{\jump kh_Content {CONTENT} was developed}\par \qc{by}\par \qc{{\bf Yu.A.Kuznetsov} and {\bf V.V.Levitin}}\par \qc{at}\par \qc{\bf Centrum voor Wiskunde en Informatica (CWI),}\par \qc{Kruislaan 413, 1098 SJ Amsterdam, The Netherlands.}\par {\sb 2 CONTENT (CONTinuation ENvironmenT) is an interactive multi-platform software for numerical bifurcation analysis of dynamical systems defined by ODEs, PDEs, and iterated maps. } \include kh_RunsOn \par {\sb 2 The following organizations have supported the project:\par } { {\li 2 \bf Nederlandse Organisatie voor Wetenschappelijk Onderzoek} (NWO) under the Priority Program 'Niet-lineaire Systemen',\par {\li 2 \bf Stichting Mathematisch Centrum} (SMC) under the Program 'Wiskundige Aspecten van Niet-lineaire Dynamische Systemen',\par \%{\bf Centrum voor Wiskunde en Informatica} (CWI),\par {\li 2 \bf Research Institute for Applications of Computer Algebra} (RIACA) under the Dynamical Systems Laboratory Project.\par } {\sb 2 Several people have cooperated in the development of CONTENT:\par } {\li 2 {\bf W.Govaerts} and {\bf B.Sijnave} (University of Gent),\par {\bf E.Doedel} (Concordia University, Montreal),\par {\bf A.R.Skovoroda}(Institute of Mathematical Problems of Biology, Pushchino),\par {\bf O.De Feo} (Swiss Federal Institute of Technology, Lausanne).\par } {\sb 2 We are thankful to \par } {\li 2 {\bf J.A.Sanders}(CWI/RIACA/Vrije Universiteit, Amsterdam),\par {\bf O.Diekmann}(Utrecht Universiteit),\par {\bf A.R.Champneys}(University of Bristol),\par {\bf S.A.van Gils}(Universiteit Twente, Enshede),\par {\bf W.-J.Beyn} and {\bf J.-M.Kleinkauf}(University of Bielefeld),\par {\bf J.Kans} and {\bf D.Vakatov}(National Center for Biotechnology Information, NLM, NIH, Bethesda),\par } for various support and advise. \end \% kh_About \% ********** Runs on ********** \topic kh_RunsOn {-} {CONTENT} currently runs on the following platforms:\par {\li 2 $ \table 8 llll 0 2 {\bf Hardware} {\bf OS} {\bf Environment} {\bf Compiler(s)} {SGI} {Irix\;5.x,6.x} {X11/Motif} {cc,\;CC} {Sun} {OS\;5.x} {OpenWin} {cc,\;CC} {DEC\;Alpha} {OSF1\;3.2} {X11/Motif} {cc,\;c++/cxx} {HP\;Appolo} {HP-UX} {X11/Motif} {cc,\;CC} {R6000} {AIX\;4} {X11/Motif} {cc} {IBM\;PC} {Linux\;1.2.13} {X11/Motif} {cc,\;CC} {IBM\;PC} {DOS} {Windows\;NT/95} {Borland\;C++\;5.0} $ } \end \% kh_RunsOn \% ********** empty topic ********** \topic kh_Empty {-} \end \% kh_Empty \% ********** Types are not selected ********** \topic kh_NoTypes {-} Cannot provide help information until types of initial point and curve are set. Use the \jump kh_menuType {Type menu} in the \jump kh_MainWin {Main window.} \end \% kh_NoTypes \% ********** All topics not written yet ********** \topic kh_NotAvail {-} Sorry, this help topic does not exist. \end \% kh_NotAvail \%\% ********** Index ********** \%\topic kh_Index {index} \%\end \% kh_Index \% ********** Main window ********** \topic kh_MainWin {main window} The {\bf main window} contains several menus to control \jump kh_Content CONTENT. It displays useful information about objects you are currently operating on.\par { \li 1 {\sb 1 \bf Menu commands}\par \li 0 \desc 6 \jump kh_menuSelect {Select menu commands}\> are used to specify and select objects.\par \jump kh_menuWindow {Window menu commands}\> allow you to open and manipulate windows.\par \jump kh_menuType {Type menu commands}\> are used to set the type of a curve to be computed and its initial point.\par \jump kh_menuCompute {Compute menu commands}\>begin computation of curves.\par \jump kh_menuOptions {Options menu commands}\> allow you to set various options of processing and storing your data.\par \jump kh_menuHelp {Help menu commands}\>provide you with access to online Help.\par } { \li 1 {\sb 1 \bf Information fields}\par \li 0 \desc 11 {\bf Class}\>displays the \jump Classes {class} of the current dynamical system.\par {\bf Archive}\>displays the file name of current \jump kh_Archive {archives.}\par {\bf System}\>displays the name of the current \jump DynSys {dynamical system.}\par {\bf Diagram}\>displays the name of the \jump kh_CurDiagram {current diagram.}\par {\bf Curve}\>displays the name of the \jump kh_CurCurve {current curve.}\par {\bf Point\+type}\>displays the \jump kh_PointType {type} of the \jump kh_InitialPoint {initial point} of the current curve.\par {\bf Curve\+type}\>displays the type of the current curve.\par {\bf Derivatives}\>indicates methods used for computation of \jump kh_RHSWin {derivatives of RHS.}\par {\bf Status}\>displays status of CONTENT.\par {\bf Duration}\>displays the duration of the last action.\par {\bf Message}\>displays the last message produced during the computation of the curve.\par } You can make any of these fields invisible using the \jump kh_MainOptWin {Options|Main window} command. \end \% kh_MainWin \% ********** What is CONTENT ********** \topic kh_Content {what is CONTENT} {CONTENT} is an integrated environment that you can use to study various properties of \jump DynSys {dynamical systems} with particular emphasis on bifurcation analysis.\par The conceptual structure of {CONTENT} is shown below:\par \qc{\picture 0.7 h_struct.fig} \par The {\bf Interface,} {\bf Archives,} and {\bf Dynamic objects} components constitute an environment for analysis procedures providing the interaction between the user and the computer's resources.\par \qc{\bf Analysis procedures}\par Analysis procedures form the computational core of {CONTENT.} They are organized as follows. For each supported \jump Classes {class} of dynamical systems and each \jump *curtypes {solution type} there are a set of numerical routines which compute relevant curves and perform their analysis. Each routine performs its own part of the task.\par { \include kh_DefFunc \par \include kh_TestFunc \par \include kh_ProcFunc \par \include kh_Starter \par \include kh_Generator \par } \qc{\bf Interface}\par The interface manager performs three main tasks:\par { \desc 3 1)\>it interacts with the user through windows and menus and allows to select various objects, modify parameters of analysis procedures, and set various processing modes,\par 2)\>it organizes the execution of analysis procedures (starters and generators),\par 3)\>it manages various windows and visualizes computed curves.\par } The following windows and dialog boxes are used by the interface manager to communicate with the user (not all of them are always visible on the screen):\par { \li 2 \desc 15 \jump kh_MainWin {Main}\>\jump kh_HelpWin {Help}\par \jump kh_SystemWin {Dynamical systems list}\>\jump kh_RHSWin {System specification}\par \jump kh_DiagramWin {Diagrams list}\>\jump kh_CurveWin {Curves list}\par \jump kh_InitPointWin {Initial points list}\>\par \jump kh_UserFuncWin {User functions}\>\par \jump kh_ResultWindows {Result windows}\>\jump kh_HiddenListWin {Hidden windows list}\par \jump kh_StarterWin {Starter}\>\jump kh_GeneratorWin {Generator}\par \jump kh_ArchFilterWin {Archive filter}\>\par \jump kh_PauseModeWin {Pause mode}\>\par \jump kh_SpecPointWin {Special points list}\>\par \jump kh_SysFontWin {System font}\>\jump kh_TextFontWin {Text font}\par \jump kh_MainOptWin {Options of Main window}\>\par \jump kh_SysExpWin {System export}\>\jump kh_SysImpWin {System import}\par \jump kh_DgmExpWin {Diagram export}\>\jump kh_DgmImpWin {Diagram import}\par \jump kh_CrvExpWin {Curve export}\>\par } \par The interface manager is based on the \jump kh_Vibrant {Vibrant.}\par \qc{\bf Archives}\par \include kh_Archive \par \qc{\bf Dynamic objects}\par \include kh_DynObj \par \include kh_RunsOn \par \end \% kh_Content \% ******* Vibrant ********** \topic kh_Vibrant {Vibrant toolbox} The interface manager of CONTENT is based on the Vibrant Portable Interface Development Library developed by Jonathan A. Kans from the Information Engineering Branch of NCBI, NLM, NIH.\par The Vibrant library is a useful tool by itself.\par "The NCBI Software Development Kit, of which Vibrant is a part, is available via anonymous ftp from the NCBI file server (ncbi.nlm.nih.gov,130.14.20.1). Cd to toolbox, cd to ncbi\|_tools, set bin mode, and get ncbi.tar.Z. \par ...Questions or comments can be directed to toolbox@ncbi.nlm.nih.gov \par ... There are versions for Macintosh, PC/Windows, and UNIX and VMS machines with X11/Motif." \end \% kh_Vibrant \% ********** Select menu ********** \topic kh_menuSelect {select menu} The {\bf select menu} in the Main window allows you to choose various objects for processing, and to specify new objects and manipulate them.\par { \desc 8 {\sb 1 \bf Command\>What it does}\par {\bf Class}\>displays the menu that lists all supported \jump Classes {classes} of dynamical systems and allows you to set the class of systems you want to investigate.\par {\bf System}\>displays the \jump kh_SystemWin {systems list} dialog box with a list of \jump DynSys {dynamical systems} stored in \jump kh_Archive {archives} and allows you to manipulate them (select a system, specify a new system, edit a system, etc.).\par {\bf Diagram}\>displays the \jump kh_DiagramWin {diagrams list} dialog box with a list of \jump kh_Diagram {diagrams} associated with the \jump kh_CurDynSys {current system} and allows you to select, create, delete and rename diagrams.\par {\bf Curve}\>displays the \jump kh_CurveWin {curves list} dialog box with a list of \jump kh_Curve {curves} stored in the \jump kh_CurDiagram {current diagram} and allows you to select, rename or delete curves.\par {\bf Initial\+point}\>displays the \jump kh_InitPointWin {initial points} dialog box with a list of \jump kh_SpecialPoint {special points} detected on curves stored in the current diagram and allows you to take one of them as the \jump kh_InitialPoint {initial point} for a curve being computed next.\par {\bf User\+functions}\>displays the \jump kh_UserFuncWin {user functions} dialog box and allows you to specify functions whose values may be monitored along curves.\par {\bf Exit}\>quits CONTENT.\par } {CONTENT} remembers current class, dynamical system, diagram, and curve between sessions and selects them automatically after startup. You may change any of them explicitly with this menu. \end \% kh_menuSelect \% ********** Window menu ********** \topic kh_menuWindow {window menu (main window)} The {\bf window menu} in the Main window allows you to open and manipulate windows.\par { \desc 6 {\sb 1 \bf Command\>What it does}\par {\bf Open}\>commands from this submenu are used to open \jump kh_ResultWindows {result windows} for representation of computed \jump kh_Curve {curves.}\par {\bf Redraw\+diagram}\>clears all windows and then redraws all the \jump kh_Curve {curves} from the \jump kh_CurDiagram {current diagram} in all windows. A curve is ignored by this command if the first symbol of its name is '%' or '!'.\par {\bf Redraw\+curve}\> \%clears all windows and then redraws the \jump kh_CurCurve {current curve} in all windows. Windows are not cleared by this command. \par {\bf Clear\+all}\>clears all windows.\par {\bf Show\+hidden}\>displays the \jump kh_HiddenListWin {hidden windows list dialog box} which lists all \jump kh_HiddenWindow {hidden windows} and allows you to pick up one you want to become visible.\par } You may open several windows of each kind.\par {CONTENT} associates opened windows with the \jump kh_CurDynSys {current dynamical system} and stores their descriptions in the \jump kh_Archive {archives.} These windows will be opened automatically next time you start {CONTENT} or select the \jump DynSys {dynamical system.} \end \% kh_menuWindow \% ********** Type menu ********** \topic kh_menuType {type menu} The {\bf type menu} in the Main window allows you to set the \jump kh_PointType {type of an initial point} and the \jump kh_CurveType {type of a curve.} The menu has two submenus {\bf Initial point} and {\bf Curve} for types of an \jump kh_InitialPoint {initial point} and a \jump kh_Curve {curve} respectively.\par \include *curtypes \end \% kh_menuType \% ********** Compute menu ********** \topic kh_menuCompute {compute menu} The {\bf compute menu} in the Main window allows you to begin the computation of curves.\par { \desc 3 {\sb 1 \bf Command\>What it does}\par {\bf Forward}\>starts the computation of a new \jump kh_Curve {curve} in the forward$\!\!\empty^*$ direction.\par {\bf Backward}\>starts the computation of a new curve in the backward$\!\!\empty^*$ direction.\par {\bf Extend}\>extends the \jump kh_CurCurve {current curve} in the same direction as it was first computed. Note that this command is enabled only if {\bf the number of untitled curves} in the \jump kh_CurDiagram {current diagram} is greater then 0. To change the number open the \jump kh_ArchFilterWin {archive filter dialog box} by the {\bf Options|Archive\+Filter} command from the Main window. \par } You can abort computation by pressing the {\bf Esc} key at any moment. It is also possible to suspend computation by setting an appropriate \jump kh_PauseMode {pause mode.}\par $\arrowhorizex\arrowhorizex\arrowhorizex\arrowhorizex$\par $\empty^*$ \f scrt There are two directions in which a curve can be computed starting from a given initial point. Arbitrarily one of them is called 'forward direction' and the other one is called 'backward direction'. \end \% kh_menuCompute \% ********** Options menu ********** \topic kh_menuOptions {options menu} The {\bf options menu} in the Main window allows you to set various options that affect computation, representation and storage of \jump kh_Curve {curves.}\par { \desc 7 {\sb 1 \bf Command\>What it does}\par {\bf Archive\+filter}\>displays the \jump kh_ArchFilterWin {archive filter dialog box} where you specify the \jump kh_ArchFilter {archive filter} which controls the amount of data stored in the \jump kh_CurDiagram {current diagram} during the computation of curves.\par {\bf Pause\+mode}\>displays the \jump kh_PauseModeWin {pause mode dialog box} where you specify the \jump kh_PauseMode {pause mode} which controls at what points computation will be suspended.\par {\bf Special\+points}\>displays the \jump kh_SpecPointWin {special points dialog box} where you specify visual attributes of \jump kh_SpecialPoint {special points.}\par {\bf System\+font}\>displays the \jump kh_SysFontWin {system font dialog box} where you specify the non-proportional font used for prompts, text fields, and in some \jump kh_ResultWindows {result windows,} e.g. in {\bf Graphic} and {\bf Numeric} windows. \par {\bf Text\+font}\>displays the \jump kh_TextFontWin {text font dialog box} where you specify the proportional font used in {\bf result windows} which require proportional fonts, e.g. in {\bf Table} windows. \par {\bf Main\+window}\>displays the \jump kh_MainOptWin {main options dialog box} where you specify which information fields in the \jump kh_MainWin {Main window} are visible.\par } \end \% kh_menuOptions \% ********** Help menu ********** \topic kh_menuHelp {help menu} The {\bf help menu} in the Main window provides you with access to online Help. Each command in it opens the \jump kh_HelpWin {help window} (if it is not opened already).\par { \desc 8 {\sb 1 \bf Command\>What it does}\par {\bf Main window}\>displays the description of the Main window.\par \% {\bf Index}\>displays the contents of Help information.\par {\bf Search}\>opens the \jump kh_HelpWin {Help topic search} dialog box which allows you to find information quickly.\par {\bf Point\+type}\>displays the description of the currently chosen \jump kh_PointType {type} of the \jump kh_InitialPoint {initial point.}\par {\bf Curve\+type}\>displays the description of the currently chosen \jump kh_CurveType {type} of a \jump kh_Curve {curve.}\par {\bf Starter}\>displays the description of the currently loaded \jump kh_Starter {starter.}\par {\bf Generator}\>displays the description of the currently loaded \jump kh_Generator {generator.}\par {\bf About\+Content}\>displays information about CONTENT.\par } \end \% kh_menuHelp \% ********** Hidden window ********** \topic kh_HiddenWindow {hidden window} A {\bf hidden window} is a \jump kh_ResultWindows {result window} which was hidden by the {\bf Window|Hide} command. It remains hidden until you make it visible with the \jump kh_HiddenListWin {hidden windows} dialog box \end \% kh_HiddenWindow \% ********** Hidden windows list ********** \topic kh_HiddenListWin {hidden windows dialog box} The {\bf Hidden windows dialog box} lists all \jump kh_HiddenWindow {hidden windows} and allows you to choose one to become visible.\par The following are buttons in the dialog box.\par { \desc 4 {\bf Button\>What it does\par} {\bf Ok}\>makes the window whose title is highlighted visible. This command closes the dialog box.\par {\bf Cancel}\>closes the dialog box.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } You can also choose a window by double clicking its title in the list. \end \% kh_HiddenListWin \% ********** Parameters of starters and generators ********** \topic kh_StaGenPar {-} The window is divided into {\bf sections} of parameters.\par A section has the {\bf title} at the top of it. The title marks the beginning of a section and has no other purpose.\par There are one or more lines below the title of a section. Each line displays the value of one parameters. The {\bf name} of a parameter is displayed on the left side of the line while the {\bf current value} of the parameter is adjusted to its right side.\par The way you set or change the value of a parameter depends on the {\bf kind} of the parameter which defines how the value is represented in the window. There are following kind of parameters.\par {\desc 7 {\bf Kind\+of\+parameter\>Representation and modification of values}\par {\bf Method}\>specifies currently selected {\bf numerical algorithm} (implementation) of computation of the same mathematical object. For example, method of integration (Euler, Runge-Kutta, etc.) or a way Hopf curves are defined and computed. This parameter is present only if there are at least two different implementations and it is always in the first line in the window. To change the method click somewhere in the line and then choose an item from the list of available methods. \par {\bf Number}\>values are represented by numbers, integer or float depending on particular parameter. To change the value click it by mouse and then use the keyboard as usual. You need not press any special key to indicate that you have completed typing. You may press the {\bf Enter} key as well as the {\bf Tab} key to move the input focus to the next numerical parameter in the window. Be careful when typing numbers, there is no undo facility. CONTENT also allows you to type in expressions constructed from numbers, parentheses, operators (+, -, *, /, and ^), and standard function calls (abs, acos, asin, atan, ceil, cos, exp, floor, log, log10, sin, sqrt, tan), for example sqrt(2)/2. As you type CONTENT tries to parse the expression and compute its value. If it succeeds the value is assigned to the parameter. Otherwise, the name of the parameter is grayed to indicate that the text does not form correct expression. Some parameters are for output only (for example, current step size) and you are not allowed to change them.\par {\bf Number\+with\+state}\>is the same as {\bf Number} with the extension that a parameter may be in one of two states: {\bf active} or {\bf frozen.} The meaning of these states is defined by the appropriate starter or generator. The active state of a parameter is indicated by highlighting its name and the frozen state is indicated by the absence of the highlighting. You can change the state of such a parameter by clicking its name. The parameters of \jump DynSys {dynamical systems} are of this kind which provides the user with the ability to activate parameters for procedures of bifurcation analysis.\par {\bf Full\+list}\>values are represented by a set of identifiers, e.g. {\bf (no,yes)} with each identifier denoting one possible value of a parameter. All the identifiers are grayed except for the one which represents the current value of the parameter. To change the value of the parameter click the desired identifier by the mouse.\par {\bf Exclusive\+list}\>is the same as {\bf Full list} with the exception that only one identifier representing the current value is visible. To change the value click it several times until the desired value appears.\par {\bf Function}\>a parameter of this kind is called a \jump kh_FuncPar {functional parameter} and identified by the word {\bf Edit...} after its name. The value of such a parameter is a {\bf function.} Its purpose depends on particular \jump *curstarter {starter} or \jump *curgenerator {generator.} To type in or edit the value of this parameter click the word {\bf Edit...} by the mouse. In response to this {CONTENT} displays the \jump kh_FuncParWin {function dialog box} where you type in or edit your function. A starter or generator will only call the functional parameter if it is activated. To activate the parameter click its name which becomes highlighted. To deactivate it click it once more.\par } The number of parameters may be greater than the window can accommodate. In such a case use the scroll bar at the right edge of the window to make other parameters visible. \end \% kh_StaGenPar \% ********** Starter window ********** \topic kh_StarterWin {starter window} A {\bf starter window} displays all the parameters of a \jump kh_Starter {starter} which you may set and change. For each possible combination of types of \jump kh_InitialPoint {initial point} and \jump kh_Curve {curve} there is specific starter and, correspondingly, a set of \jump *curstarter {parameters} which control its performance. After you \jump kh_menuType {choose the types} of the initial point and the curve to be computed {CONTENT} loads the appropriate starter and displays the window associated with it.\par The number and meaning of the parameters in the window depend on the particular starter but all the windows have the same layout.\par \include kh_StaGenPar \par \end \% kh_StarterWin \% ********** Generator window ********** \topic kh_GeneratorWin {generator window} A {\bf generator window} displays all the parameters of a \jump kh_Generator {generator} which you may set and change. For each possible combination of types of \jump kh_InitialPoint {initial point} and \jump kh_Curve {curve} there is specific generator and, correspondingly, a set of \jump *curgenerator {parameters} which control its performance. After you \jump kh_menuType {choose the types} of the initial point and the curve to be computed {CONTENT} loads the appropriate generator and displays the window associated with it.\par The number and meaning of the parameters in the window depend on particular generator but all the windows have the same layout.\par \include kh_StaGenPar \par \end \% kh_GeneratorWin \% ********** Include Files ********** \topic kh_IncludeFile {-} When CONTENT selects a system it compares creation time of the compiled code with the time of the last modification of the included file and automatically recompiles the functions when needed. \end \% kh_IncludeFile \% ********** User defined derivatives ********** \topic kh_UserDer {user defined derivatives} To provide your own function for the derivatives of some order of the RHS (and the additional functions if any) follow these steps.\par 1. Click appropriate radio button in the {\bf Derivatives area} in the \jump kh_RHSWin {System specification dialog box.} \par 2. From the {\bf Specify} submenu choose the appropriate command. \par 3. Click at the bottom part of the {\bf Editor area} to prepare it for input (the line between the two parts should indicate the derivatives you chose). \par 4. Type in a body of a C function which computes the derivatives. For the derivatives of the order $k,$ $1\leq k \leq 5,$ it should contain a list of assignment statements in the following form:\par {\li 1 ${\bf der}k{\bf (}f{\bf ,}v1{\bf ,}\ldots,vk {\bf)=\ldots;} $}\par which calculate values of $\frac{{\partial}^k f}{\partial v_1,\ldots,v_k}.$ For right-hand sides, the first parameter, $f$, specifies the RHS which is represented by the name of appropriate phase variable (first variable for the first RHS, etc.). For additional functions f must be the ordinal number starting from 0 of a component of the function. $v1$, ..., $vk$ are the names of the variables with respect to which derivatives are computed. $v1$, ..., $vk$ must be in {\bf non-descendent order} (the order is given by their appearance in the {\bf System specification dialog box).} {CONTENT} defines several constants which you may use in your functions. The name of a constant is created by appending the suffix {\bf DIM} to the upper-case name of an input field (e.g. for the input field {\bf Coordinates} the constant name is {\bf COORDINATESDIM}). The value of the constant is the dimension of the space defined in the field. \par You may also put the statements into a separate file. In such a case the only line you need to type in here is\par {\li 1 \bf \verbatim 1 #include "filename" }\par \%Be careful, with the {\bf #include} directive you must force \%CONTENT to recompile functions each time you change any of \%included files. To do this open the \%\jump kh_RHSWin {System specification dialog box} \%and press the {\bf Ok} button. \include kh_IncludeFile \par {\bf der1, der2, der3, der4,} and {\bf der5} are macros defined by CONTENT. They are expanded to references to elements of arrays {\bf _d1, _d2, _d3, _d4,} and {\bf _d5} correspondingly which are also declared by CONTENT.\par If you produce formulae for the derivatives with a software for symbolic computation (like Maple V) which is capable of producing C code it may be more convenient to reference elements of these arrays. The first subscript is the number of an equation, starting from zero. CONTENT assumes the order of equations is the same as the order of phase variables. The second subscript is the number of a derivative. Assume for the following that $x_0,$ $x_1,$ $\ldots,$ $x_{n-1}$ are names specified in the first input fields and $p_0,$ $p_1,$ $\ldots$ are names from the second input field in the order they are declared. The following table sets the correspondence between derivatives and elements of appropriate arrays. $i,$ $j,$ $k,$ $l,$ and $m$ must satisfy $0\leq i\leq j\leq k\leq l\leq m$\par {\desc 21 {\bf Derivative\>Assign to}\par {\li 1 \bf $\frac {\partial{f_p}}{\partial{x_i}}$}\> {\bf _d1[p][i]}\par {\li 1 \bf $\frac {\partial{f_p}}{\partial{p_i}}$}\> {\bf _d1[p][n+i]}\par {\li 1 \bf $\frac {{\partial}^2{f_p}}{\partial{x_i}\partial{x_j}}$}\> {\bf _d2[p][dersub2(i,j)]}\par {\li 1 \bf $\frac {{\partial}^2{f_p}}{\partial{x_i}\partial{p_j}}$}\> {\bf _d2[p][dersub2(i,n+j)]}\par {\li 1 \bf $\frac {{\partial}^2{f_p}}{\partial{p_i}\partial{p_j}}$}\> {\bf _d2[p][dersub2(n+i,n+j)]}\par {\li 1 \bf $\frac {{\partial}^3{f_p}}{\partial{x_i}\partial{x_j}\partial{x_k}}$}\> {\bf _d3[p][dersub3(i,j,k)]}\par {\li 1 \bf $\frac {{\partial}^3{f_p}}{\partial{x_i}\partial{x_j}\partial{p_k}}$}\> {\bf _d3[p][dersub3(i,j,n+k)]}\par {\li 1 \bf $\frac {{\partial}^3{f_p}}{\partial{x_i}\partial{p_j}\partial{p_k}}$}\> {\bf _d3[p][dersub3(i,n+j,n+k)]}\par {\li 1 \bf $\frac {{\partial}^3{f_p}}{\partial{p_i}\partial{p_j}\partial{p_k}}$}\> {\bf _d3[p][dersub3(n+i,n+j,n+k)]}\par {\li 1 \bf $\frac {{\partial}^4{f_p}}{\partial{x_i}\partial{x_j}\partial{x_k}\partial{x_l}}$}\> {\bf _d4[p][dersub4(i,j,k,l)]}\par {\li 1 \bf $\frac {{\partial}^4{f_p}}{\partial{x_i}\partial{x_j}\partial{x_k}\partial{p_l}}$}\> {\bf _d4[p][dersub4(i,j,k,n+l)]}\par {\li 1 \bf $\frac {{\partial}^4{f_p}}{\partial{x_i}\partial{x_j}\partial{p_k}\partial{p_l}}$}\> {\bf _d4[p][dersub4(i,j,n+k,n+l)]}\par {\li 1 \bf $\frac {{\partial}^4{f_p}}{\partial{x_i}\partial{p_j}\partial{p_k}\partial{p_l}}$}\> {\bf _d4[p][dersub4(i,n+j,n+k,n+l)]}\par {\li 1 \bf $\frac {{\partial}^4{f_p}}{\partial{p_i}\partial{p_j}\partial{p_k}\partial{p_l}}$}\> {\bf _d4[p][dersub4(n+i,n+j,n+k,n+l)]}\par {\li 1 \bf $\frac {{\partial}^5{f_p}}{\partial{x_i}\partial{x_j}\partial{x_k}\partial{x_l}\partial{x_m}}$}\> {\bf _d5[p][dersub5(i,j,k,l,m)]}\par {\li 1 \bf $\frac {{\partial}^5{f_p}}{\partial{x_i}\partial{x_j}\partial{x_k}\partial{x_l}\partial{p_m}}$}\> {\bf _d5[p][dersub5(i,j,k,l,n+m)]}\par {\li 1 \bf $\frac {{\partial}^5{f_p}}{\partial{x_i}\partial{x_j}\partial{x_k}\partial{p_l}\partial{p_m}}$}\> {\bf _d5[p][dersub5(i,j,k,n+l,n+m)]}\par {\li 1 \bf $\frac {{\partial}^5{f_p}}{\partial{x_i}\partial{x_j}\partial{p_k}\partial{p_l}\partial{p_m}}$}\> {\bf _d5[p][dersub5(i,j,n+k,n+l,n+m)]}\par {\li 1 \bf $\frac {{\partial}^5{f_p}}{\partial{x_i}\partial{p_j}\partial{p_k}\partial{p_l}\partial{p_m}}$}\> {\bf _d5[p][dersub5(i,n+j,n+k,n+l,n+m)]}\par {\li 1 \bf $\frac {{\partial}^5{f_p}}{\partial{p_i}\partial{p_j}\partial{p_k}\partial{p_l}\partial{p_m}}$}\> {\bf _d5[p][dersub5(n+i,n+j,n+k,n+l,n+m)]}\par } Note: arrays {\bf _d1, _d2, _d3, _d4,} and {\bf _d5} are initialized with zeros so your functions may skip assignments of derivatives whose values are zeros.\par {\bf derdub2, dersub3, dersub4,} and {\bf dersub5} are macros defined as follows:\par {\li 1 \bf \verbatim 4 #define dersub2(i,j) (i)+(((j)*((j)+1))>>1) #define dersub3(i,j,k) dersub2(i,j)+(k)*((k)+1)*((k)+2)/6 #define dersub4(i,j,k,l) dersub3(i,j,k)+(l)*((l)+1)*((l)+2)*((l)+3)/24 #define dersub5(i,j,k,l,m) dersub4(i,j,k,l)+(m)*((m)+1)*((m)+2)*((m)+3)*((m)+4)/120 }\par You should use them while deriving the derivatives to ensure assignments are made to proper elements of the arrays.\par Here is an example of how Maple may be used for producing derivatives.\par {\li 1 \bf \verbatim 19 > readlib(C): with(linalg): dersub2:=proc(i,j) i+j*(j+1)/2; end: der2:=proc(funcs,vars,file) local f,fn,vn,v,v1,v2,j,der; fn:=nops(funcs)-1; vn:=nops(vars)-1; for f from 0 to fn do for v1 from 0 to vn do for v2 from v1 to vn do v:=dersub2(v1,v2); der:=diff(funcs[f+1],vars[v1+1],vars[v2+1]); if der<>0 then C([_d2[f,v]=der],filename=file); fi; od; od; od; end: }\par {\li 1 \bf \verbatim 3 > fx:=x-x*y/(1+a*x)-b*x*x; # 1st RHS > fy:=-g*y+x*y/(1+a*x)-d*y*y; # 2nd RHS > der2([fx,fy],[x,y,a,b,g,d],`out`); }\par The file {\bf out} contains the following C statements\par {\li 1 \bf \verbatim 6 _d2[0][0] = 2.0*y/pow(1.0+a*x,2.0)*a-2.0*x*y/pow(1.0+a*x,3.0)*a*a-2.0*b; _d2[0][1] = -1/(1.0+a*x)+x/pow(1.0+a*x,2.0)*a; _d2[0][3] = 2.0*y/pow(1.0+a*x,2.0)*x-2.0*x*x*y/pow(1.0+a*x,3.0)*a; _d2[0][6] = -2.0*x; _d2[0][4] = x*x/pow(1.0+a*x,2.0); _d2[0][5] = -2.0*x*x*x*y/pow(1.0+a*x,3.0); }\par {\li 1 \bf \verbatim 8 _d2[1][0] = -2.0*y/pow(1.0+a*x,2.0)*a+2.0*x*y/pow(1.0+a*x,3.0)*a*a; _d2[1][1] = 1/(1.0+a*x)-x/pow(1.0+a*x,2.0)*a; _d2[1][3] = -2.0*y/pow(1.0+a*x,2.0)*x+2.0*x*x*y/pow(1.0+a*x,3.0)*a; _d2[1][2] = -2.0*d; _d2[1][4] = -x*x/pow(1.0+a*x,2.0); _d2[1][11] = -1.0; _d2[1][16] = -2.0*y; _d2[1][5] = 2.0*x*x*x*y/pow(1.0+a*x,3.0); }\par \end \% kh_UserDer \% ********** Symbolical derivatives and restrictions on RHS ********** \topic kh_SymDer {derivatives and restrictions on RHS} The {\bf symbolical} method of computing of derivatives of RHS and the additional functions (if any) means that {CONTENT} tries to build C source text of functions which compute exact values of derivatives. The first stage of the process is a transformation of the specification of your system into another text. For the transformation to be successful and correct the specification must comply with some restrictions {CONTENT} imposes on it. It is important to understand that {CONTENT} itself does not check whether they are met. Instead, it supposes that they are met and processes accordingly. The result may be a failure to build correct C text or compile it. {CONTENT} cannot always detect the failure so sometimes you may get wrong results without any notice. In general, the method works well for low-dimensional systems with 'simple' right-hand sides. In any case you should be reasonably careful with this method. You may also want to compare the results with results obtained by {\bf numerical} differentiation.\par The restrictions are as follows.\par {\desc 10 {$\bullet$}\>RHS and functions may use local simple variables and one-dimension arrays of types {\bf double} and {\bf int} only. All local variables must be declared before the first statement. One-line {\bf #define} directives are also allowed here. Be aware that any local variable becomes an array in functions which compute derivatives. The array is used to store values of derivatives of the variable with respect to phase variables and parameters. Similarly, any local array becomes a two-dimensional array. As a rule you should avoid local arrays and try to reduce the number of local variables.\par {$\bullet$}\>{\bf Selection} and {\bf Iteration} statements are allowed with the restriction that you cannot use any variable of the type {\bf double} in their {\bf conditional parts.} That means, for example, that loops like $for\:(i=1;\:i<10;\:i++)\ldots$ are allowed while loops like $while\:(x\leq 10.5)\ldots$ are forbidden. Each loop is unrolled in the resulting function for derivatives.\par {$\bullet$}\>The conditional operator $?\::$ is not allowed. Use the function $iff(c,e_1,e_2)$ instead which is functionally equivalent to $c?e_1:e_2$.\par {$\bullet$}\>Global variables are not allowed. That means you cannot define a variable outside functions and each function can access only its own parameters.\par {$\bullet$}\>Local functions must have type {\bf double} and all their formal parameters must be of this type only. Pointers are not allowed also. For each function {CONTENT} builds another function which computes derivatives of the function with respect to all its formal parameters. As a rule you should reduce the number of formal parameters to as small number as possible.\par {$\bullet$}\>Old-style declarations of formal parameters are not allowed. Write $double\:f(double\:x)\{\ldots\}$ instead of $double\:f(x)\:double\:x;\{\ldots\}$\par {$\bullet$}\>There must be only one {\bf return} statement in a function and it must be right before the closing brace of the function body.\par {$\bullet$}\>Derivative designators (e.g. $x\prime$) cannot be used to access values of right-hand sides. For example the following fragment is illegal: $x\prime=0;\: for\: (i=0;\: i<5;\: i++)\: x\prime=x\prime+\ldots$\par {$\bullet$}\>Only the following standard functions may be called from the RHS and your functions: {\bf fabs, exp, log, sqrt, pow, sin, cos, tan, asin, acos,} and {\bf atan.} You may also use the {\bf sqr} and {\bf cube} functions which calculate second and third power correspondingly.\par {$\bullet$}\>There are also restrictions imposed by the amount of memory needed for building the functions for derivatives but they cannot be stated explicitly. You should try and see whether they are violated.\par } \end \% kh_SymDer \% ********** System specification dialog box ********** \topic kh_RHSWin {system specification dialog box} The {\bf System specification dialog box} is where you specify your \jump DynSys {dynamical system.} You display it by {\bf Actions|Edit} or {\bf Actions|New} commands in the \jump kh_SystemWin {system list} dialog box.\par There are following components in the dialog box, listed in their order from the top to the bottom.\par {\desc 10 {\bf Component}\>{\bf What it is used for}\par {\bf Error\+messages}\>is present only if errors were found during previous compilation. Click an error message to position the cursor in the {\bf Editor area} at the line the error is related to.\par {\bf <\|Input\+fields\|>}\>are where you list names of variables you'll use in the system specification. The number and meaning of the fields are class-dependent. See description of the \jump *curclass {class.} Use the following rules when filling in the fields. You may separate names either by blanks or commas. Each name may be either a {\bf simple name} (e.g. $x$) or it may be an one-dimensional {\bf array.} In the later case the name must be followed by a dimension enclosed in brackets like this: $y[10].$ The dimension is an integer greater than one. All simple names have dimension one. References to elements of an array in the {\bf Editor area} must be made in accordance with usual C rules. The first element of an array always has subscript zero.\par {\bf Derivatives}\>is where you specify how the derivatives of the right-hand sides and additional functions will be calculated. The settings made here are echoed in the {\bf Derivatives} information field in the \jump kh_MainWin {Main window} where i-th letter reflects your choice made for the derivatives of order i (i=1, 2, 3, 4, 5):\par {\li 1 \bf numerically}\>approximate derivatives by appropriate finite differences. This method will always work (as far as your functions can be differentiated at all). This choice is indicated by the letter 'n' in the {\bf Derivatives} information field.\par {\li 1 \bf symbolically}\>automatically build and compile a C program which computes exact values of derivatives. This method may fail for large-dimension systems and for systems specified by 'very complex' functions. See \jump kh_SymDer {restrictions.} This method requires C++ compiler and generally takes more time to compile the specification of the system (and it may take quite long period for large-dimensional systems) but it provides considerable acceleration when computing curves. For derivatives of 4th and 5th order the Maple system is used. This choice is indicated by the letter 's' in the {\bf Derivatives} information field.\par {\li 1 \bf by\+a\+routine}\>use a routine you supply. If you select this method for derivatives of some order you should specify appropriate \jump kh_UserDer {C function} in the {\bf Editor area.} The only difference from the previous method is that you supply the function {CONTENT} tries to build automatically with the {\bf symbolical} method. This choice is indicated by the letter 'r' in the {\bf Derivatives} information field.\par {\bf Editor\+area}\>is where you specify your dynamical system. This component consists of one or two parts depending on which item from the {\bf Specify} menu (see below) was chosen last time. Only one part is displayed if the {\bf RHS only} was the choice. Otherwise, both parts are visible.\par {\li 1 \bf RHS}\>is where you type in statements which computes the values of right-hand sides. The notation of derivatives depends on the \jump *curclass {class} your system belongs to. (For example, the following statements might specify a map: $x\,\prime=y[1];$ $y\,\prime[0]=0.7*x;$ $y\,\prime[1]=x+0.5*y[0];$) You are free to use any feature of the C programming language although some \jump kh_SymDer {restrictions} must be met if you chose symbolical method of computation of derivatives. All text you input here becomes the body of a C function which CONTENT internally constructs and compiles. This part of the Editor area is always displayed.\par {\li 1 \bf Functions}\>is where you type in functions. This part has a title showing which functions can be edited. Use commands from the {\bf Specify} menu to choose functions you want to input or edit. See description of the menu below.\par } Technical note: you may put your C text into separate file and include it with the {\bf #include} directive. \include kh_IncludeFile \par There are following buttons in the dialog box.\par { \desc 4 {\bf Button\>What it does\par} {\bf Ok}\>closes the dialog box, stores all the changes you have made in \jump kh_Archive {archives,} constructs C source text, compile it, and makes the system the \jump kh_CurDynSys {current system.} If errors are found it shows the dialog box again with the list of error messages and allows you to correct errors.\par {\bf Cancel}\>closes the dialog box without changing the specification of your system. All modifications you have made are lost.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par }\par \include kh_EditorMenu \par The {\bf Specify} menu is used to choose which kind of functions you want to input or edit. There are following commands in this menu.\par {\desc 5 {\bf Command\>What it does\par} {\bf RHS\+only}\>hides the {\bf Functions} part of the {\bf Editor area}. This is the default mode.\par {\bf Local\+functions}\>shows the {\bf Functions} part of the {\bf Editor area} and allows you to input and edit local functions. A text you input here must be a sequence of C functions which are called form your RHS. Global (file-scope) variables are allowed unless you don't use the {\bf symbolical} method of computing derivatives. In such a case you must obey some \jump kh_SymDer {restrictions.} Don't use the following identifiers as function names: {\bf Der1, Der2, Der3, Der4,} and {\bf Der5.} When compiling the specification of the system the text from this part of the Editor area is put before the text of the RHS so the functions are available to the RHS. Usually you don't need to specify local functions.\par {\bf Derivatives}\>is a submenu which allows you to choose derivatives of which order you want to specify. You have to specify these functions only for those derivatives for which the {\bf Symbolical} method is chosen. A text you input here must be a body of a C function. See \jump kh_UserDer {user defined derivatives.}\par {\bf }\>there may be more commands in the menu. They allow you to input and edit functions which are parts of the specification of your dynamical system. The nomenclature of these functions is \jump *curclass {class-dependent.}\par } \end \% kh_RHSWin \% ********** Dynamical systems list window ********** \topic kh_SystemWin {dynamical systems list dialog box} The {\bf dynamical systems list dialog box} lists all \jump DynSys {dynamical systems} in your \jump kh_Archive {archives} and allows you to manipulate them. You display the dynamical systems list dialog box with the \jump kh_menuSelect {Select|System} command in the Main window. The dynamical system most of the following commands operates on is the one whose name is highlighted in the list (not only the \jump kh_CurDynSys {current} system). To highlight a name just click it. The menu commands are available via the {\bf Actions} menu.\par { \desc 9 {\bf Command}\>{\bf What it does}\par {\bf New}\>asks for the name of a new system and then displays the \jump kh_RHSWin {System specification dialog box} for it. After you close the dialog box the new system becomes the {\bf current} one. The name may be any text of any length. This command closes the dialog box.\par {\bf Edit}\>displays the {\bf System specification dialog box} for the highlighted system and allows you to change its specification. After you close the dialog box the system you have edited becomes the {\bf current} one. This command closes the dialog box.\par {\bf Rename}\>asks for the new name of the highlighted system and then renames it. The current system remains the same. New name may be any text of any length.\par \% {\bf Copy}\>not implemented.\par {\bf Delete}\>deletes the highlighted system or \jump kh_Group {group} (if it is empty). Before the deleting {CONTENT} asks you for acknowledgment.\par {\bf Delete\+all}\>deletes all the systems in the current \jump kh_Group {group.} All subgroups and systems in them are not affected by this operation. Before the deleting {CONTENT} asks you for acknowledgment.\par {\bf Import}\>opens the \jump kh_SysImpWin {System import dialog box} which allows you to incorporate into CONTENT previously \jump kh_ExportedSystem {exported dynamical system.}\par {\bf Export}\>opens the \jump kh_SysExpWin {System export dialog box} which allows you to \jump kh_ExportedSystem {export} the dynamical system who's name is currently highlighted.\par {\bf Group}\>asks for the name of a new \jump kh_Group {group} and then creates it. The new group is empty initially. You can enter it by pressing the {\bf Select} button.\par } { \desc 6 {\bf Button}\>{\bf What it does}\par {\bf Select}\>makes the highlighted system the \jump kh_CurDynSys {current} one (this includes deselection of the previous current system if any). If a \jump kh_Group {group} name is highlighted, enters the group. This command closes the dialog box when it selects a system.\par {\bf Deselect}\>deselects the \jump kh_CurDynSys {current system} regardless what name is highlighted currently. After this command you cannot access any system in \jump kh_Archive {archives} until you select one with the {\bf Select} button. This command closes the dialog box.\par {\bf Up}\>exits the current \jump kh_Group {group} and shows the list of systems from the parent group.\par {\bf Cancel}\>closes the dialog box leaving the selection unchanged.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } Double click a name is equivalent to clicking the name and then pressing the {\bf Select} button.\par \end \% kh_SystemWin \% ********** System export dialog box ********* \topic kh_SysExpWin {system export dialog box} The {\bf system export dialog box} allows you to set parameters for the \jump kh_ExportedSystem {export} of dynamical systems. You open the dialog box with the {\bf Action|Export} command in the \jump kh_SystemWin {systems list dialog box.}\par There are following components in the dialog box.\par { \desc 10 {\bf Component}\>{\bf What it does or used for}\par {\bf Export\+to\+file}\>is where you type in the name of a file the system will be exported to.\par {\bf Browse}\>displays the list of available files which allows you to choose a file without typing its name. The name of the file you choose is put into the input field.\par {\bf Export\+diagrams}\>specifies how diagrams associated with the system are exported:\par {\bf \li 2 don't\+export}\>diagrams are not exported,\par {\bf \li 2 initial\+points}\>diagrams are exported but for each curve only minimal amount of data is written which allows recomputation of the curve,\par {\bf \li 2 everything}\>diagrams are fully exported.\par {\bf Ok}\>exports the highlighted system to the specified file and then closes the dialog box.\par {\bf Cancel}\>closes the dialog box without doing anything.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } \end \% kh_SysExpWin \% ********** System import dialog box ********* \topic kh_SysImpWin {system import dialog box} The {\bf system import dialog box} allows you to incorporate into CONTENT \jump kh_ExportedSystem {exported dynamical systems.} You open the dialog box with the {\bf Action|Import} command in the \jump kh_SystemWin {systems list dialog box.}\par There are following components in the dialog box.\par { \desc 6 {\bf Component}\>{\bf What it does or used for}\par {\bf Import\+from\+file}\>is where you type in the name of a file with an exported system. CONTENT assumes the file was produced by the {\bf Action|Export} command.\par {\bf Browse}\>displays the list of available files which allows you to choose a file without typing its name. The name of the file you choose is put into the input field.\par {\bf Ok}\>imports a system from the specified file and then closes the dialog box.\par {\bf Cancel}\>closes the dialog box without doing anything.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } \end \% kh_SysImpWin \% ********** Diagrams list window ********** \topic kh_DiagramWin {diagrams list dialog box} The {\bf diagrams list dialog box} lists all \jump kh_Diagram {diagrams} associated with the \jump kh_CurDynSys {current system} and allows you to manipulate them. You display the diagrams list dialog box with the \jump kh_menuSelect {Select|Diagram} command in the Main window. The diagram most of the following commands operates on is that one whose name is highlighted in the list (not only the \jump kh_CurDiagram {current} diagram). To highlight a name just click it. The menu commands are available via the {\bf Actions} menu.\par { \desc 8 {\bf Command}\>{\bf What it does}\par {\bf New}\>asks for the name of a new diagram, creates it, and then makes it the {\bf current} one. The name may be any text of any length. This command closes the dialog box.\par {\bf Rename}\>asks for the new name of the highlighted diagram and then renames it. The current diagram remains the same. New name may be any text of any length.\par \% {\bf Copy}\>not implemented.\par {\bf Delete}\>deletes the highlighted diagram or \jump kh_Group {group} (if it is empty). Before the deleting {CONTENT} asks you for acknowledgment.\par {\bf Delete\+all}\>deletes all the diagrams in the current \jump kh_Group {group.} All subgroups and diagrams in them are not affected by this operation. Before the deleting {CONTENT} asks you for acknowledgment.\par {\bf Import}\>opens the \jump kh_DgmImpWin {Diagram import dialog box} which allows you to incorporate previously \jump kh_ExportedDiagram {exported diagram.} For this operation to be successful the diagram must be exported from a system which belongs to the \jump Classes {current class} and has the same number of components, parameters, etc. as the \jump kh_CurDynSys {current system.} It is not recommended to import a diagram if it contains curves computed when \jump kh_UserFunc {user functions} were defined and used (i.e. switches in the \jump kh_StarterWin {starter window} were set to values other than {\bf ignore.})\par {\bf Export}\>opens the \jump kh_DgmExpWin {Diagram export dialog box} which allows you to \jump kh_ExportedDiagram {export} the diagram who's name is currently highlighted.\par {\bf Group}\>asks for the name of a new \jump kh_Group {group} and then creates it. The new group is empty initially. You can enter it by pressing the {\bf Select} button.\par } { \desc 6 {\bf Button}\>{\bf What it does}\par {\bf Select}\>makes the highlighted diagram the \jump kh_CurDiagram {current} one (this includes deselection of the previous current diagram if any). If a \jump kh_Group {group} name is highlighted, enters the group. This command closes the dialog box when it selects a diagram.\par {\bf Deselect}\>deselects the \jump kh_CurDiagram {current diagram} regardless what name is highlighted currently. After this command you cannot access any diagram associated with the \jump kh_CurDynSys {current system} until you select one with the {\bf Select} button. This command closes the dialog box.\par {\bf Up}\>exits the current \jump kh_Group {group} and shows the list of diagrams from the parent group.\par {\bf Cancel}\>closes the dialog box leaving the selection unchanged.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } Double click a name is equivalent to clicking the name and then pressing the {\bf Select} button.\par \end \% kh_DiagramWin \% ********** Diagram export dialog box ********* \topic kh_DgmExpWin {diagram export dialog box} The {\bf diagram export dialog box} allows you to set parameters for the \jump kh_ExportedDiagram {export} of diagrams. You open the dialog box with the {\bf Action|Export} command in the \jump kh_DiagramWin {diagrams list dialog box.}\par There are following components in the dialog box.\par { \desc 9 {\bf Component}\>{\bf What it does or used for}\par {\bf Export\+to\+file}\>is where you type in the name of a file the diagram will be exported to.\par {\bf Browse}\>displays the list of available files which allows you to choose a file without typing its name. The name of the file you choose is put into the input field.\par {\bf Export\+curves}\>specifies how curves from the diagram are exported:\par {\bf \li 2 initial\+points}\>curves are exported with a minimal amount of data which allows recomputation of curves but not export or redrawing,\par {\bf \li 2 everything}\>curves are fully exported.\par {\bf Ok}\>exports the highlighted diagram to the specified file and then closes the dialog box.\par {\bf Cancel}\>closes the dialog box without doing anything.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } \end \% kh_DgmExpWin \% ********** Diagram import dialog box ********* \topic kh_DgmImpWin {diagram import dialog box} The {\bf diagram import dialog box} allows you to incorporate into CONTENT \jump kh_ExportedDiagram {exported diagrams.} You open the dialog box with the {\bf Action|Import} command in the \jump kh_DiagramWin {diagrams list dialog box.}\par There are following components in the dialog box.\par { \desc 6 {\bf Component}\>{\bf What it does or used for}\par {\bf Import\+from\+file}\>is where you type in the name of a file with an exported diagram. CONTENT assumes the file was produced by the {\bf Action|Export} command.\par {\bf Browse}\>displays the list of available files which allows you to choose a file without typing its name. The name of the file you choose is put into the input field.\par {\bf Ok}\>imports the diagram from the specified file and then closes the dialog box.\par {\bf Cancel}\>closes the dialog box without doing anything.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } \end \% kh_DgmImpWin \% ********** Curves list window ********** \topic kh_CurveWin {curves list dialog box} The {\bf curves list dialog box} lists all \jump kh_Curve {curves} in the \jump kh_CurDiagram {current diagram} and allows you to manipulate them. You display the curves list dialog box with the \jump kh_menuSelect {Select|Curve} command in the Main window. The curve most of the following commands operates on is that one whose name is highlighted in the list (not only the \jump kh_CurCurve {current} curve). To highlight a name just click it. The menu commands are available via the {\bf Actions} menu.\par { \desc 6 {\bf Command}\>{\bf What it does}\par {\bf Rename}\>asks for the new name of the highlighted curve and then renames it. The current curve remains the same. New name may be any text of any length.\par {\bf Delete}\>deletes the highlighted curve or \jump kh_Group {group} (if it is empty). Before the deleting {CONTENT} asks you for acknowledgment.\par {\bf Delete\+all}\>deletes all the curves in the current \jump kh_Group {group.} All subgroups and curves in them are not affected by this operation. Before the deleting {CONTENT} asks you for acknowledgment.\par {\bf Export}\>opens the \jump kh_CrvExpWin {Curve export dialog box} which allows you to \jump kh_ExportedCurve {export} the curve who's name is currently highlighted.\par {\bf Group}\>asks for the name of a new \jump kh_Group {group} and then creates it. The new group is empty initially. You can enter it by pressing the {\bf Select} button.\par } In addition the dialog box allows you to redraw curves via the {\bf Curves} menu.\par { \desc 4 {\bf Command}\>{\bf What it does}\par {\bf Redraw\+diagram}\>clears all windows and then redraws all the curves from the current diagram in all windows. This is the same command as the \jump kh_menuWindow {Window|Redraw diagram} command in the Main window.\par {\bf Redraw\+curve}\>redraws only the curve who's name is currently highlighted. You may also press the {\bf r} key to execute this command without even opening the menu.\par {\bf Clear}\>clears all windows. This is the same command as the \jump kh_menuWindow {Window|Clear all} command in the Main window.\par } There are following buttons in the dialog box.\par { \desc 6 {\bf Button}\>{\bf What it does}\par {\bf Select}\>makes the highlighted curve the \jump kh_CurCurve {current} one (this includes deselection of the previous current curve if any). In particular, types of \jump kh_PointType {initial point} and \jump kh_CurveType {curve} are taken from the curve. If a \jump kh_Group {group} name is highlighted, it enters the group. This command closes the dialog box when it selects a curve.\par {\bf Deselect}\>deselects the \jump kh_CurCurve {current curve} regardless what name is highlighted currently. This command closes the dialog box.\par {\bf Up}\>exits the current \jump kh_Group {group} and shows the list of curves from the parent group.\par {\bf Cancel}\>closes the dialog box leaving the selection unchanged.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } Double clicking a name is equivalent to clicking the name and then pressing the {\bf Select} button.\par \end \% kh_CurveWin \% ********** Curve export dialog box ********** \topic kh_CrvExpWin {curve export dialog box} The {\bf curve export dialog box} allows you to set parameters for the \jump kh_ExportedCurve {export} of curves. This command creates an ASCII file with the coordinates of the points of a curve for processing outside CONTENT. Note there is no corresponding import command and CONTENT does not support import of individual curves.\par You open the dialog box with the {\bf Action|Export} command in the \jump kh_CurveWin {curves list dialog box.}\par There are following components in the dialog box.\par { \desc 18 {\bf Component}\>{\bf What it does or used for}\par {\bf Export\+to\+file}\>is where you type in the name of a file the curve will be exported to.\par {\bf \li 2 Browse}\>displays the list of available files which allows you to choose a file without typing its name. The name of the file you choose is put into the input field.\par {\bf \li 2 overwrite}\>when checked specifies that export data will overwrite any data in the file. This is the default value.\par {\bf \li 2 append}\>when checked specifies that export data will be appended to the file.\par {\bf Points}\>specifies which points will be exported:\par {\bf \li 2 Special\+points\+only}\>only special points detected on the curve will be exported; the {\bf Path filter} (see below) is hidden when this option is chosen.\par {\bf \li 2 Path\+filter}\>consists of three numbers, $From,$ $To,$ and $Step.$ It specifies that only those points from the stored curve will be exported whose numbers have the form $From+i\cdot Step$ for some $i\geq 0$ and are less than or equal to $To.$ The filter is ignored if only special points are exported.\par {\bf \li 2 Trace\+filter}\>is present only for \jump kh_Path {multi-point curves} whose points contain several mathematical points (e.g., each point in a limit cycle bifurcation curve contains points which form one limit cycle). This filter is similar to the {\bf Path filter} except it selects which mathematical points will be exported.\par {\bf Columns}\>specifies which components of the points will be exported and the form of their representation:\par {\bf \li 2 Output\+title}\>if checked this box specifies that the title line with the names of coordinates will be printed to output file.\par {\bf \li 2 Format}\>specifies the format which will be used to print numbers. This field must contain one valid conversion specification for double values (to be used as the format string with the {\bf fprintf} function). The default format, {\bf %#12.6g,} will be used if the text in this field does not constitute valid specification.\par {\bf \li 2 Selected\+names}\>is a list of names of coordinates you have selected for output.\par {\bf \li 2 Add\+name}\>is a list of names which allows you to specify which coordinates of each point will be exported. The filter is a two-level list of names of coordinates. The first level lists the groups of names, e.g. {\bf Parameters, Eigenvalues,} etc. To see the list of names from a group click its name. Then choose names of coordinates you want to be exported by clicking them. The name you clicked is inserted after the highlighted name in the {\bf Selected\+names} list. To return to the first level (list of groups) click the first line in the list. If you select the special name {\bf allows you to remove names from the {\bf Selected\+names} list. When you press the button the highlighted name is removed from the list.\par {\bf Ok}\>exports the selected coordinates of the selected points to the specified file and then closes the dialog box.\par {\bf Cancel}\>closes the dialog box without doing and changing anything.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } \end \% kh_CrvExpWin \% ********** Initial points window ********** \topic kh_InitPointWin {initial points dialog box} The {\bf initial points dialog box} lists all the \jump kh_Curve {curves} in the \jump kh_CurDiagram {current diagram} along with all \jump kh_SpecialPoint {special points} detected on each curve and allows you to take any special point as an \jump kh_InitialPoint {initial point} for the curve being computed next. You display the dialog box by \jump kh_menuSelect {Select|Initial point} command in the Main window.\par There are following buttons in the dialog box.\par { \desc 4 {\bf Button}\>{\bf What it does}\par {\bf Ok}\>selects the point whose name is highlighted as an initial point for the curve being computed next. This includes loading appropriate \jump kh_Starter {starter} and \jump kh_Generator {generator} and opening their windows to allow you to set or change their parameters. To highlight a name from the list just click it. This command closes the dialog box.\par {\bf Cancel}\>closes the dialog box without selecting a point.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } You may also select a point by clicking it in a {\bf 2D graphic window.} \par In addition the dialog box allows you to redraw curves via the {\bf Curves} menu.\par { \desc 4 {\bf Command}\>{\bf What it does}\par {\bf Redraw\+diagram}\>clears all windows and then redraws all the curves from the \jump kh_CurDiagram {current diagram} in all windows. This is the same command as the \jump kh_menuWindow {Window|Redraw diagram} command in the Main window.\par {\bf Redraw\+curve}\>redraws only the curve who's name is currently highlighted. You may also press the {\bf r} key to execute this command without even opening the menu.\par {\bf Clear}\>clears all windows. This is the same command as the \jump kh_menuWindow {Window|Clear all} command in the Main window. \par } Due to some implementation restriction double clicks are processed as single clicks in this dialog box.\par \end \% kh_InitPointWin \% ********** User functions dialog box ********** \topic kh_UserFuncWin {user functions dialog box} The {\bf user functions dialog box} allows you to specify and manipulate \jump kh_UserFunc {user functions.} You display the dialog box by \jump kh_menuSelect {Select|User Functions} command in the \jump kh_MainWin {Main window.}\par The dialog box has the following components:\par { \desc 24 {\bf Component\>What it is used for\par} {\bf Error\+list}\>is at the top of the dialog box. It is present only if there were errors during compilation of user functions. Click an error message to position the cursor in the {\bf Editor area} at the line the error is related to.\par {\bf Functions\+list}\>is in the upper left corner of the dialog box. It lists all the functions you defined for the \jump kh_CurDynSys {current system.} Each line describes one function in the form ${\bf \pm\+name(label)}$ and shows its \jump kh_UserFuncStatus {status}, name, and \jump kh_UserFuncLabel {label.} To select a function click its name in the list. The selected function is the one you can operate on with Control buttons and Editor area.\par {\bf Control\+buttons}\>are in the middle of the upper part of the dialog box.\par {\sb 0 \li 2 \bf Add}\>defines a new function with \jump kh_UserFuncLabel {label} and name from {\bf Input fields} and selects it. Type in its body in the {\bf Editor area.}\par {\sb 0 \li 2 \bf Rename}\>renames the selected function, that is replaces its label and name with those from {\bf Input fields.}\par {\sb 0 \li 2 \bf Delete}\>deletes the selected function.\par {\sb 0 \li 2 \bf Enable}\>enables the selected function, that is makes it possible for \jump kh_Generator {generators} to monitor its values, detect zeros, etc. This is the default status for a new function. Enabled functions are marked by the $+$ sign in the list.\par {\sb 0 \li 2 \bf Disable}\>disables the selected function, that is makes it 'invisible' for generators. Disabled functions are marked by the $-$ sign in the list.\par {\bf Input\+fields}\>are in the upper right corner of the dialog box.\par {\sb 0 \li 2 \bf Label}\>is where you enter the \jump kh_UserFuncLabel {label} of a function for {\bf Add} and {\bf Rename} commands. Labels should be unique and differ from labels of standard \jump kh_SpecialPoint {special points.}\par {\sb 0 \li 2 \bf Name}\>is where you enter the name of a function for {\bf Add} and {\bf Rename} commands. Names must be unique.\par {\bf Header\+prompt}\>shows the header of the selected function. This header will be user for (re)compilation of the function.\par {\bf Editor\+area}\>is in the middle part of the dialog box. You use it to enter or modify the body of the selected function. Editor commands are available via the menus (see below). The text you enter may use all features of the C program language allowed in a function body: local variables, assignments, loops, etc. Names of state variables and parameters are also allowed. Note that non-zero return value (e.g. {\bf return 1;}) is considered as a failure to compute the function The following names have special meaning:\par {\sb 0 \li 2 \bf Value}\>is a pointer to a location where the function must place its result. Note that this is different from return value which is used to indicate success or failure of computation the function. Here is an example of user function:\par {\sa 0 \bf\>$\;$ if (x<0) return 1; /* cannot compute */\par} {\sb 0 \sa 0 \bf\>$\;$ *Value=sqrt(x);\par} {\sb 0 \bf\>$\;$ return 0; /* success */\par} {\sb 0 \li 2 \bf SeekPoint}\>is a function you call to retrieve the given mathematical point if a point computed by a generator contains several mathematical points, e.g. a limit cycle bifurcation curve. SeekPoint(-1) returns the number of mathematical points in a point computed by the generator and after a call to SeekPoint with an argument $k\in [0,SeekPoint(-1)-1]$ you may access coordinates of (k+1)-th mathematical point using the names you provided in the \jump kh_RHSWin {system specification dialog box.}\par {\sb 0 \li 2 \bf _v}\>is a pointer used to access state variables and parameters. You need not use this name.\par {\bf Terminal\+buttons}\>are at the bottom of the dialog box.\par {\sb 0 \li 2 \bf Ok}\>saves all user functions (both enabled and disabled) and compile them. If there are errors, this dialog box is displayed again with the {\bf Error list.} This command closes the dialog box.\par {\sb 0 \li 2 \bf Cancel}\>closes the dialog box and cancels all modifications you have made since the moment the box was displayed. If you want to save your modifications regardless are they final or not, press the {\bf Ok} button.\par {\sb 0 \li 2 \bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } \include kh_EditorMenu \par \end \% kh_UserFuncWin \% ********** editor's commands ********** \topic kh_EditorMenu {editor's commands} There are following editor's commands.\par { \desc 11 {\bf Command}\>{\bf What it does}\par {\bf Copy}\>places a copy of the \jump kh_SelectedText {selected text} in the \jump kh_Clipboard {clipboard.} The text remains unchanged.\par {\bf Cut}\>removes the selected text and places it in the clipboard.\par {\bf Paste}\>inserts the text from the clipboard at the cursor position. Text in the clipboard remains unchanged.\par {\bf Clear}\>deletes the selected text.\par {\bf Read\+from\+file}\>reads a disk file into the text at the cursor position. The selected text, if any, is deleted. {CONTENT} prompts you for the name of the file to read.\par {\bf Write\+to\+file}\>Writes the selected text (the whole text, if there is no selected text) to a file. {CONTENT} prompts you for the name of the file to write to.\par {\bf Find}\>displays the {\bf Find text} dialog box, where you type in the text you want to search for. The search starts from the cursor position.\par {\bf Search\+again}\>repeats the last {\bf Find} command starting from the cursor position.\par {\bf Replace}\>displays the {\bf Replace text} dialog box, where you type in the text you want to search for and the text you want to replace it with. The search starts from the cursor position.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of the Editor commands.\par } \end \% kh_EditorMenu \% ********** Selected text ********** \topic kh_SelectedText {text selection} You can select (highlight) text either with keyboard commands or the mouse.\par To select text from the keyboard press the {\bf Shift} key while pressing any key that moves the cursor.\par To select text with the mouse press the left button and move the mouse pointer over the desired text.\par Selected text is used in conjunction with Editor's commands {\bf Copy, Cut, Paste,} and {\bf Clear.}\par \end \% kh_SelectedText \% ********** Clipboard ********** \topic kh_Clipboard {clipboard} The clipboard is a place for temporary storage of text. It is accessed with the \jump kh_EditorMenu {editor's commands.} Only one piece of text can be stored in the clipboard at the time. \end \% kh_Clipboard \% ********** Archives filter dialog box ********** \topic kh_ArchFilterWin {archive filter dialog box} The {\bf Archives filter dialog box} allows you to set the \jump kh_ArchFilter {archive filter.} You display the dialog box by the \jump kh_menuOptions {Options|Archive filter} command in the \jump kh_MainWin {Main window.}\par There are following components in the dialog box.\par {\bf The maximum number of untitled curves}, as it follows from its name, restricts the number of {\bf untitled} curves stored in a diagram. An {\bf untitled} curve is a curve whose name was not changed by the user. When the number of untitled curves exceeds the limit, {CONTENT} automatically deletes the 'oldest' curves to comply with the restriction. You can rename curves with the \jump kh_menuSelect {Select|Curve} and \jump kh_CurveWin {Actions|Rename} commands.\par {\bf The path filter} consists of three numbers, $From,$ $To,$ and $Step.$ It specifies that only those points will be stored in the \jump kh_CurCurve {current curve} whose numbers have the form $From+i\cdot Step$ for some $i\geq 0$ and are less than or equal to $To.$ \jump kh_SpecialPoint {Special points} are always stored in the current curve regardless the filter.\par {\bf The trace filter} is present only for curves whose points contain several mathematical points (e.g., each point in a limit cycle bifurcation curve contains points which form one limit cycle). This filter is similar to the {\bf path filter} except it selects which mathematical points are to be stored.\par {\sb 0 {\bf Example.} Let us assume that the path filter is set to $\{ 1,10,3\}$ and the trace filter is set to $\{ 2,8,2\}.$ In such a case points with numbers other than 1, 4, 7, and 10 would not be stored in a curve at all. For points 1, 4, 7, and 10 only mathematical points with numbers 2, 4, 6, and 8 would be stored.\par } {\bf The coordinate filter} allows you to specify which coordinates of regular points should be stored in a curve. The filter is a two-level list of names of coordinates. The first level lists the groups of names (e.g. {\bf Parameters, Eigenvalues,} etc.) along with total and selected numbers of names. To see the list of names from a group click its name. Then choose names of coordinates you want to be stored by clicking them: selected (highlighted) coordinates will be stored while unselected will not be. The following buttons facilitate selection and deselection:\par {\sb 0 {\li 1 \desc 3 {\bf Select\+all}\>selects all the names in the list.\par {\bf Deselect\+all}\>deselects all the names in the list.\par {\bf Reverse\+selection}\>reverses selection of each name in the list.\par } To return to the first level (list of groups) click the first line in the list.\par All coordinates of special points are stored regardless the filter.\par } There are the following buttons at the bottom of the dialog box.\par {\desc 4 {\bf Button\>What it does}\par {\bf Ok}\>remembers the values you have set or changed as a new filter. All subsequent computation of curves will be affected by this filter until you change it. This command closes the dialog box.\par {\bf Cancel}\>closes the dialog box without changing the filter.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } \end \% kh_ArchFilterWin \% ********** Pause mode window ********** \topic kh_PauseModeWin {pause mode dialog box} The {\bf pause mode dialog box} allows you to set the \jump kh_PauseMode {pause mode.} You display the dialog box by the \jump kh_menuOptions {Options|Pause mode} command in the \jump kh_MainWin {Main window.}\par You can choose one of the following pause modes.\par {\desc 4 {\bf Pause mode\>How it works}\par {\bf At\+each\+point}\>suspends computation after each point.\par {\bf At\+special\+points}\>suspends computation after special points only. This is the default mode.\par {\bf Never}\>does not suspend computation.\par } There is also the {\bf Enable pause buttons} check box. Check it if you want {CONTENT} to open a special window during computation of curves. This window contains several buttons you may use to suspend and resume computation with the mouse.\par During computation of a curve you may control the process with the following keys and buttons.\par {\desc 3 {\bf Key/button\>What it does}\par {\bf Esc/Abort}\>aborts the computation of the current curve.\par {\bf Space/Suspend}\>suspends the computation of the current curve and enters the pause.\par } When in a pause (which is indicated by the word {\bf 'suspended'} in the \jump kh_MainWin {Status field} in the Main window) you can press one of the following keys and buttons.\par {\desc 4 {\bf Key/button\>What it does}\par {\bf Space/Resume}\>resumes the computation of the current curve.\par {\bf Esc/Abort}\>aborts the computation of the current curve.\par {\bf Enter/Switch}\>terminates the computation of the current curve and takes the last computed point on it as the initial point for the next curve.\par } There are following buttons in the dialog box.\par {\desc 4 {\bf Button\>What it does}\par {\bf Ok}\>remembers the settings you have made as the pause mode. It will be in effect until you change it. This command closes the dialog box.\par {\bf Cancel}\>closes the dialog box without changing the pause mode.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } \end \% kh_PauseModeWin \% ********** Special points dialog box ********** \topic kh_SpecPointWin {visual attributes of special points dialog box} The {\bf special points dialog box} allows you to set various attributes of \jump kh_SpecialPoint {special points} used for their visualization. You display the dialog box by the \jump kh_menuOptions {Options|Special points} command in the \jump kh_MainWin {Main window.}\par There are following controls in the dialog box. They are listed in conformity with their locations, from left to right and from top to bottom.\par {\desc 12 {\bf Control\>What it does or used for}\par {\bf Point\+type}\>is a pop-up menu you use to select a \jump kh_PointType {type} of special points. All settings are related to the currently selected type.\par {\bf Label}\>is a check box which specifies whether to mark special points of the selected type by an abbreviation of the type name (e.g. EQ for equilibria).\par {\bf Marker}\>is a check box which specifies whether to draw markers for special points of the selected type. To select a marker use the {\bf marker bar} (see below).\par {\bf Default\+color}\>is a checkbox which when checked tells {CONTENT} that the color of special points of the selected type is the same as for regular points of a curve.\par {\bf Set\+color}\>is a button you press to choose particular color for {\bf marker} and/or {\bf label.}\par {\bf Marker\+bar}\>is a horizontal bar which displays all available markers (use attached scroll bar to see more markers). A marker is a small picture used to distinguish special points from other points. To choose a marker for special points of the selected type click the desired marker.\par {\bf Sample\+bar}\>shows the current settings for the special points of the selected type (type, marker, and label) using selected color and scale factor. \par {\bf Scale\+factor}\>allows you to enlarge or reduce the size of markers. This setting is the same for all types.\par {\bf Ok}\>remembers all the settings you have made and closes the dialog box.\par {\bf Cancel}\>closes the dialog box without changing visual attributes (that means that all changes you have made will be lost).\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } \end \% kh_SpecPointWin \% ********** Choose font ********** \topic kh_ChooseFont {-} The dialog box has the following components.\par {\desc 7 {\bf Component}\>{\bf What it does or used for}\par {\bf Font}\>lists all available fonts. To select a font click its name in the list.\par {\bf Size}\>lists all possible sizes for the selected font. To select a size click the desired number.\par {\bf Style}\>allows you to select bold, italic, or underline variations of the selected font, when possible.\par {\bf Sample}\>shows a sample text in the selected font.\par {\bf Ok}\>remembers the selected font and closes the dialog box.\par {\bf Cancel}\>closes the dialog box without changing the font.\par } \end \% ********** System font dialog box ********** \topic kh_SysFontWin {system font dialog box} The {\bf system font dialog box} allows you to choose the {\bf system font.} The system font is a font used for prompts, input fields and in some \jump kh_ResultWindows {result windows,} e.g. {\bf Graphic} and {\bf Numeric} windows. It can be any available font.\par \include kh_ChooseFont \par You display the dialog box by the \jump kh_menuOptions {Options|System font} command in the \jump kh_MainWin {Main window.}\par \end \% kh_SysFontWin \% ********** Text font dialog box ********** \topic kh_TextFontWin {text font dialog box} The {\bf text font dialog box} allows you to choose the {\bf text font.} The text font is a monospase font (i.e. a font with the same width of all characters) used in the {\bf Editor's window} and in some of the {\bf result windows,} e.g. {\bf table} window. \par \include kh_ChooseFont \par You display the dialog box by the \jump kh_menuOptions {Options|Text font} command in the \jump kh_MainWin {Main window.}\par \end \% kh_ProgFontWin \% ********** Main window options dialog box ********** \topic kh_MainOptWin {main window options dialog box} The {\bf main window options dialog box} allows you to customize the \jump kh_MainWin {Main window.} You may specify which {\information fields} in it will be visible by clicking appropriate check boxes. Each check box corresponds to an information field and has the same name as the field.\par There are following buttons in the dialog box.\par {\desc 4 {\bf Button}\>{\bf What it does}\par {\bf Ok}\>closes all the windows (including the Main window) and then opens them again. The Main window is shown in accordance with the changes you have made.\par {\bf Cancel}\>closes the dialog box without changing the layout of the Main window.\par {\bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } You display the dialog box by the \jump kh_menuOptions {Options|Main window} command in the Main window.\par \end \% kh_MainOptWin \% ********* Help window ********** \topic kh_HelpWin {help window} The {\bf Help window} is used to display help information about {CONTENT.} You open the window (if it is not opened already) by any {\bf Help} button or menu command. The Help is context-sensitive, that is the specific topic you see depends on particular button or menu command you used to activate it. For example, it you press the {\bf Help} button in the \jump kh_SystemWin {dynamical systems list} dialog box you will see the description of the dialog box.\par The part of information you can see at each moment in the Help window is called {\bf topic.} It is always describes one particular notion, feature, command, window, etc. Essential terms are printed in {\bf boldface.} Links to related topics are printed in {\bf underlined boldface}. Click a link with the mouse to bring related topic to the window.\par There are following buttons in the window.\par {\desc 7 {\bf Button\>What it does}\par {\bf Previous}\>displays the previous page of the topic. This button is disabled (grayed) when the page displayed is the first one in the topic.\par {\bf Next}\>displays the next page of the topic. This button is disabled (grayed) when the page displayed is the last one in the topic.\par {\bf Back}\>displays the previous topic, i.e. the topic you jump here from. {CONTENT} can remember as many as 20 last jumps you made so you can go back more than one step.\par {\bf Search}\>opens the {\bf Help topic search} dialog box (described below).\par {\bf Help}\>displays the description of this window.\par {\bf Close}\>closes the {\bf Help window} and the {\bf Help topic search} dialog box (if it was opened). If you don't close the windows explicitly they are closed automatically when {CONTENT} terminates.\par } The {\bf Help topic search} dialog box allows you to find information quickly. It has the following components.\par {\desc 5 {\bf Component\>What it does or is used for}\par {\bf Input\+field}\>is where you can type in the word or phrase you want search for. As you type, the first line in the {\bf List of topics} that contains the text you type is highlighted. Press the {\bf Enter} key to force {CONTENT} to show in the List only topics associated with the text you have typed in. For example, if you want to see only topics related to windows, type in the word {\bf window} and press the {\bf Enter} key. To restore full list, erase any text from the field and press the {\bf Enter} key. More complex search requests may be constructed using operators {\bf |} ("or"), {\bf &} ("and"), {\bf !} ("not") and parentheses. For example, request {\bf curve & !current} will show you all the topics about curves except those related to the current curve.\par {\bf List\+of\+topics}\>lists all topics related to the text you have typed in the {\bf Input field.} If the field is empty all topics are listed. You can display a topic in the {\bf Help window} by double clicking it.\par {\bf Show\+topic}\>shows the highlighted topic in the {\bf Help window.}\par {\bf Close}\>closes the dialog box. You can open it again with the {\bf Search} button in the {\bf Help window.}\par } \end \% kh_HelpWin \% ********** Basic notions ********** \% ********** Defining functions ********** \topic kh_DefFunc {defining functions} {\bf Defining functions} specify a \jump kh_Curve {curve} of particular \jump *curtypes {type.} They are used by the \jump conti {continuer} to compute points of a curve. The total number of the defining functions is by one less than the number of point coordinates (including {\bf active parameters,} i.e. the parameters that may vary). \par Usually, defining functions consist of equations specifying a {\bf phase object} (for example, an equilibrium or a cycle) and equations defining its {\bf singularity} (for example, the presence of eigenvalues on the imaginary axis or on the unit circle). They are constructed by CONTENT automatically based on the type of a dynamical system and a continued curve. \par Defining functions may also include \jump kh_UserFunc {user functions}. {\bf Appending} such functions allows you to continue a singular object satisfying extra conditions. In this case, the number of active parameters must be accordingly increased. \end \% kh_DefFunc \% ********** test functions ********** \topic kh_TestFunc {test functions} {\bf Test functions} are used by a \jump kh_Generator {generator} to detect \jump kh_SpecialPoint {special points} on a \jump kh_Curve {curve.} The generator monitors the values of test functions along the curve and locates their zeros. It marks a point as a special one on a basis that a certain condition is true at the point. A typical condition is a zero value of a test function at the point. Nomenclature of test functions and types of special points which can be detected depends on a \jump *curtypes {curve type.} \end \% kh_TestFunc \% ********** Processing functions ********** \topic kh_ProcFunc {processing functions} {\bf Processing functions} are called by a generator at a \jump kh_SpecialPoint {special point} to calculate data that characterize such point and are needed to start another \jump kh_Curve {curve} from this point as an \jump kh_InitialPoint {initial point.} \end \% kh_ProcFunc \% ********** Starter ********** \topic kh_Starter {starters} A {\bf starter} is a routine that calculates the \jump kh_FirstPoint {first point} of a \jump kh_Curve {curve} from a given \jump kh_InitialPoint {initial point.}\par \jump *curstarter {Parameters} which control the starter performance may be changed via the \jump kh_StarterWin {starter window.} \end \% kh_Statrter \% ********** Generator ********** \topic kh_Generator {generators} A {\bf generator} computes points of a \jump kh_Curve {curve} starting from a given \jump kh_FirstPoint {first point.} It also locates special points on the curve by monitoring values of \jump kh_TestFunc {test functions.} It calls \jump kh_ProcFunc {processing functions} at special points to calculate data related to these points.\par \jump *curgenerator {Parameters} which control the generator performance may be changed via the \jump kh_GeneratorWin {generator window.} \end \% kh_Generator \% ********** Curve switching ********** \topic kh_CurveSwitch {curve switching} {\bf Curve switching} is a procedure of taking a \jump kh_SpecialPoint {special point} on a previously computed curve as an \jump kh_InitialPoint {initial point} of a new curve. The \jump kh_PointType {point type} of a special point completely determines \jump kh_CurveType {types of curves} which can originate from the point. \end \% kh_CurveSwitch \% ********** Curve ********** \topic kh_Curve {curve} A {\bf curve} in {CONTENT} is a sequence of points which is treated as a whole. Each point is defined by its coordinates, \jump kh_PointType {type} and special data (attached to \jump kh_SpecialPoint {special points} only). Each curve also contains appropriate data characterized the way it was computed and stored. These data include references to relevant \jump kh_Starter {starter} and \jump kh_Generator {generator} which define its \jump kh_CurveType {type,} values of their parameters used in computation and an \jump kh_ArchFilter {archive filter.} \end \% kh_Curve \% ********** Special point ********** \topic kh_SpecialPoint {special point on a curve} A {\bf special point} of a \jump kh_Curve {curve} is either a {\bf singularity} or a zero of a \jump kh_UserFunction {user function}. A {\bf singularity} is a point where certain condition on values of \jump kh_TestFunc {test functions} is true. A special point may serve as an \jump kh_InitialPoint {initial point} for another curve. Contrary to the special points, all other points of the curve are called {\bf regular points.} \end \% kh_SpecialPoint \% ********** Initial point ********** \topic kh_InitialPoint {initial point of a curve} An {\bf initial point} of a \jump kh_Curve {curve} is a point which a \jump kh_Starter {starter} uses to produce the \jump kh_FirstPoint {first point} of the curve. The coordinates of an initial point may be supplied by the user or they may be taken from a \jump kh_SpecialPoint {special point} on some other curve by the procedure known as \jump kh_CurveSwitch {curve switching.} \end \% kh_InitialPoint \% ********** First point **********/ \topic kh_FirstPoint {first point of a curve} A {\bf first point} of a \jump kh_Curve {curve} is a point from which a \jump kh_Generator {generator} begins computation the curve. The first point is supplied by a \jump kh_Starter {starter} which ensures that the first point satisfies appropriate conditions. \end \% kh_FirstPoint \% ********** Point type ********** \topic kh_PointType {point type} The term {\bf point type} refers to certain property of the point. For example, a point $x$ is said to be of type {\bf equilibrium} (or shortly, equilibrium point) of a \jump DynSys {dynamical system} $\dot x=F(x)$ if its coordinates satisfy the equation $F(x)=0.$\par Type of a point is determined by appropriate starter or generator which computes the point. You set a type of an \jump kh_InitialPoint {initial point} of a curve by \jump *curtypes {Type menu commands} in the \jump kh_MainWin {Main window.} \end \% kh_PointType \% ********** Curve type ********** \topic kh_CurveType {curve type} The term {\bf curve type} refers to the \jump kh_PointType {type} of {\bf regular points} of the curve. It is completely defined by the \jump kh_Starter {starter} and the \jump kh_Generator {generator} which compute the curve. You set a type of a \jump kh_Curve {curve} by the \jump *curtypes {Type menu commands} in the \jump kh_MainWin {Main window.} \end \% kh_CurveType \% ********** Diagram ********** \topic kh_Diagram {diagram} A {\bf diagram} is a collection of computed \jump kh_Curve {curves} stored in a special file with some additional data for their processing.\par When you create a new dynamical system (see the \jump kh_menuSelect {Select|System} command) {CONTENT} also creates an empty diagram associated with it and makes it the \jump kh_CurDiagram {current diagram.} You may manipulate (create, delete, rename, etc.) diagrams associated with the \jump kh_CurDynSys {current dynamical system} with the dialog box opened by the \jump kh_menuSelect {Select|Diagram} command.\par A computed curve always goes to the current diagram with a default name generated by {CONTENT.} Such a curve is called an {\bf untitled} curve. Only a limited number of untitled curves can be stored in the diagram. This number may be changed with the dialog box opened by the \jump kh_MainOptWin {Options|ArchFilter} command.\par When the number of untitled curves exceeds the threshold {CONTENT} removes the 'oldest' curves to comply with the restriction. To store a curve permanently, i.e. until you explicitly remove it, rename it with the \jump kh_CurveWin {curves list} dialog box opened by \jump kh_menuSelect {Select|Diagram} and \jump kh_DiagramWin {Actions|Rename} commands.\par You may set the threshold to zero which prevents new curves from storing in the diagram. Curves are not stored if there is no current diagram.\par Apart from curves a diagram contains some data used as defaults when there is no \jump kh_CurCurve {current curve} in the diagram. These include parameters of \jump kh_Starter {starters} and \jump kh_Generator {generators,} and the archive filter. Each time you change types of an \jump kh_InitialPoint {initial point} or a \jump kh_Curve {curve} {CONTENT} saves these values into the current diagram (note these data are type-dependent). It uses them as defaults when you set the same types of an initial point and a curve and there is no current curve. \end \% kh_Diagram \% ********** Current curve ********** \topic kh_CurCurve {current curve} The {\bf current curve} is a curve from the \jump kh_CurDiagram {current diagram} which is treated by {CONTENT} in somewhat special way. {CONTENT} always makes the most recently computed curve the current curve (you compute curves by \jump kh_menuCompute {Compute|Forward} and \jump kh_menuCompute {Compute|Backward} commands in the \jump kh_MainWin {Main} and \jump kh_ResultWindows {result} windows. You may change the current curve or deselect it with the \jump kh_CurveWin {curves list} dialog box opened by the \jump kh_menuSelect {Select|Curve} command in the Main window. The name of the current curve (if any) is displayed in the \jump kh_MainWin {Curve information field} in the Main window.\par The following operations can be performed on the current curve only:\par { \desc 3 {\bf Redraw\+curve}\>is initiated by the {\bf Window|Redraw curve} command from the {\bf Main} and {\bf result} windows. \par {\bf Extend\+curve}\>is initiated by the {\bf Compute|Extend} command from the {\bf Main} and {\bf result} windows. \par {\bf Change\+attributes}\>is initiated by the {\bf Attributes|Curve} command from \jump kh_ResultWindows {Graphic} result windows. \par } {CONTENT} remembers the current curve of a diagram and selects it each time the diagram becomes the \jump kh_CurDiagram {current diagram.} This happens when you explicitly select a diagram, when you select a dynamical system (which implies selection of a diagram), or when you start {CONTENT} (which implies selection of the same dynamical system as it was at the moment of the last termination). \end \% kh_CurCurve \% ********** Current diagram ********** \topic kh_CurDiagram {current diagram} A {\bf current diagram} is one of the \jump kh_Diagram {diagrams} associated with the \jump kh_CurDynSys {current dynamical system} which contains the curves you currently can operate on. In particular, curves computed by the {\bf Compute|Forward} and {\bf Compute|Backward} commands are always stored into the current diagram. The curves from a diagram other than the current one are inaccessible: they cannot be redrawn, removed, renamed, etc. until you make it the current diagram.\par When you create a new dynamical system (see the \jump kh_menuSelect {Select|System} command) {CONTENT} creates an empty diagram and makes it the current diagram. You may create a new diagram, change the current diagram or deselect it with the \jump kh_DiagramWin {diagrams list} dialog box opened by the \jump kh_menuSelect {Select|Diagram} command in the Main window. The name of the current diagram (if any) is displayed in the \jump kh_MainWin {Diagram information field} in the Main window.\par {CONTENT} remembers the current diagram associated with a dynamical system and selects it each time the system becomes the \jump kh_CurDynSys {current system.} This happens when you explicitly select a dynamical system (which implies selection of a diagram), or when you start {CONTENT} (which implies selection of the same dynamical system as it was at the moment of the last termination). \end \% kh_CurDiagram \% ********** Current dynamical system ********** \topic kh_CurDynSys {current dynamical system} A {\bf current dynamical system} is one of the dynamical systems in your \jump kh_Archive {archives} which you currently investigate. All other dynamical systems from your archives are inaccessible: you can only deal with one system at the time.\par When you create a new dynamical system it becomes the current one. You also may select another system with the \jump kh_SystemWin {systems list} dialog box opened by the \jump kh_menuSelect {Select|System} command in the \jump kh_MainWin {Main window.}\par The name of the current system (if any) is displayed in the \jump kh_MainWin {System information field} in the Main window.\par {CONTENT} remembers the current dynamical system between sessions and selects it each time you start {CONTENT.} \end \% kh_CurDynSys \% ********* Exported dynamical system ********* \topic kh_ExportedSystem {exported dynamical system} An {\bf exported dynamical system} is a text representation of all the data CONTENT keeps for particular \jump DynSys {dynamical system.} The {\bf Action|Export} command in the \jump kh_SystemWin {systems list dialog box} produces files with exported systems. These files may be imported into CONTENT with the {\bf Action|Import} command which is in the same dialog box.\par The export/import mechanism is intended to provide back-up storage and a portable way of data interchange between users of CONTENT.\par It is important to understand that you should never edit an exported file. This will definitely make it useless and even may cause damage to your \jump kh_Archive {archives} if you try to import it. \end \% kh_ExportedSystem \% ********* Exported diagram ********* \topic kh_ExportedDiagram {exported diagram} An {\bf exported diagram} is a text representation of all the data CONTENT keeps for particular \jump kh_Diagram {diagram.} The {\bf Action|Export} command in the \jump kh_DiagramWin {diagrams list dialog box} produces files with exported diagrams. These files may be imported into CONTENT with the {\bf Action|Import} command which is in the same dialog box.\par The import operation can be done only when the source system (the system the diagram was exported from) and the target system (i.e. the current system) belong to the same class and have the same number of names (e.g. parameters) which are specified in the \jump kh_RHSWin {system specification dialog box.} It is not recommended to import diagrams which contain curves computed with \jump kh_UserFunc {user functions.}\par The export/import mechanism is intended to provide back-up storage and a portable way of data interchange between users of CONTENT.\par It is important to understand that you should never edit an exported file. This will definitely make it useless and even may cause damage to your \jump kh_Archive {archives} if you try to import it. \end \% kh_ExportedDiagram \% ********* Exported curve ********* \topic kh_ExportedCurve {exported curve} An {\bf exported curve} is an ASCII representation of coordinates of points of the curve. The {\bf Action|Export} command in the \jump kh_CurveWin {curves list dialog box} produces files with exported curves. These files are intended to be processed outside CONTENT. They cannot be imported.\par An exported curve file contains several columns of data with one row per point. Each column contains values of one particular coordinate of points.\par Various output options are set via the \jump kh_CrvExpWin {curve export dialog box.}\par {\bf Example.} Suppose you computed several curves for various values of a parameter. Open the {\bf curve export dialog box} and choose three names (the name of the parameter should be the last). Then export each curve to a separate file. Now you can use 'external' software to visualize your data. Here is a Maple session in which data are read and plotted (we suppose file names are {\bf c1.ec, c2.ec, ... c10.ec}).\par {\bf \verbatim 7 with(plots): readlib(readdata): c:=array(1..10): for i from 1 to 10 do c[i]:=readdata(`c`.i.`.ec`,3) od: polygonplot3d(c); } \end \% kh_ExportedCurve \% ********** Archives ********** \topic kh_Archive {archives} Archives are a set of files where {CONTENT} stores your \jump DynSys {dynamical systems} with all data you specified for their analysis as well as the results of the analysis. Logically, archives consist of a number of independent units each of which contains all information related to one dynamical system.\par The description of the dynamical system provided by the user includes the list of the names of state variables, parameters, time (if any) and C-functions computing values of the RHS. {CONTENT} creates a corresponding \jump kh_DynObj {dynamic object} and associates with it the dynamical system.\par Results of investigation of the dynamical system are stored as \jump kh_Diagram {diagrams.} A diagram contains a number of computed curves. A \jump kh_Curve {curves} contains coordinates of points and additional data required to redraw and recompute (or extend) the curve.\par The archives manager provides \jump kh_SystemWin {dynamical systems list,} \jump kh_DiagramWin {diagrams list,} and \jump kh_CurveWin {curves list} dialog boxes you use to create, select for processing, delete, and rename dynamical systems, diagrams, and curves.\par {CONTENT} maintains a map of the logical structure onto file system and creates all necessary files automatically. The user does not deal with them directly.\par \end \% kh_Archive \% ********** Group of objects ********** \topic kh_Group {group of objects} A {\bf group} is a set of \jump DynSys {dynamical systems,} \jump kh_Diagram {diagrams,} or \jump kh_Curve {curves} which you prefer to 'keep together'. You create a group by the {\bf Actions|Group} command in appropriate dialog box and name it. To place a system, a diagram or a curve to a group you should enter it before creation of the object. To enter a group double click its name in the list or select it by clicking and then press the {\bf Select} button. To exit a group press the {\bf Up} button. To delete all objects from the current group use the {\bf Actions|Delete\+all} command.\par With the mechanism of groups archives of dynamical systems, sets of diagrams associated with each system, and curves in each diagram may be considered as a {\bf tree.} In this tree {\bf nodes} are groups of objects, while the {\bf leaves} are the objects themselves. You traverse the tree with the {\bf Select} and {\bf Up} buttons. Each new object is always created in the current group. \end \% kh_Group \% ********* Dynamic object ********** \topic kh_DynObj {dynamic object} A dynamic object is a part of {CONTENT's code} which is not kept in the memory all the time during sessions. Instead, it is brought into the memory only when it is needed and unloaded from the memory when it completes its function. There are following reasons to have dynamical objects:\par { \desc 3 1)\>it may be impossible to create a part of code prior to a session (for example, a \jump DynSys {dynamical system} is specified {\bf during} the session and, therefore cannot be compiled and linked in advance),\par 2)\>there may be a set of 'mutually exclusive' parts of code, that is no more than one part from a group is executed at a time so including them all into the resident part would be waste of memory (for example, all \jump kh_Starter {starters} as well as \jump kh_Generator {generators} are mutually exclusive),\par 3)\>The mechanism of dynamic loading provides 'openness' of the system, that is a possibility to add new computational components without even recompiling and relinking other parts.\par } Dynamic objects are implemented as:\par {\li 1 dynamic link libraries in Windows,\par shared objects in Unix,\par shared libraries on Macintosh.\par } The dynamic objects manager manages the following kinds of dynamical objects (including compiling and linking some of them):\par {\li 1 functions specifying dynamical systems,\par \jump kh_FuncPar {functional parameters} of starters and generators,\par visualization functions,\par \jump kh_Starter {starters} with \jump kh_DefFunc {defining,} \jump kh_TestFunc {test,} and \jump kh_ProcFunc {processing} functions,\par \jump kh_Generator {generators,}\par \jump kh_Decoder {decoders,}\par \jump kh_Utility {utility functions.}\par } For each dynamic object {CONTENT} maintains a special descriptor which describes how to access the object.\par \end \% kh_DynObj \% ********** Functional parameters ********** \topic kh_FuncPar {functional parameters} The term {\bf functional parameter} denotes a function you can specify for a \jump kh_Starter {starter} or \jump kh_Generator {generator} which they may use for some purpose. The number and meaning of functional parameters depend on particular starter and generator.\par You can specify or edit a functional parameter by clicking the word {\bf Edit...} in an appropriate line in the \jump kh_StarterWin {starter window} or \jump kh_GeneratorWin {generator window.} In response to this {CONTENT} displays the \jump kh_FuncParWin {function dialog box} where you specify your function. A starter or generator will only use the function-parameter if it is activated. To activate the parameter click its name which becomes highlighted. To deactivate it click it once more. \end \% kh_FuncPar \% ********** Function parameter dialog box ********** \topic kh_FuncParWin {function parameter dialog box} The {\bf function parameter dialog box} is where you specify the body of a function-parameter. The dialog box has the following components.\par {\desc 8 {\bf Component\>What it is used for}\par \jump kh_EditorMenu {Editor menu}\>used to perform such editor operations like copy, paste, search, etc.\par {\bf Header prompt}\>shows the header of the function which depends on particular starter or generator. Usually you need not access formal parameters directly.\par {\bf Editor area}\>is where you type in the body of the function. Empty text (i.e. with all non-spaces deleted) means that the parameter is not specified.{CONTENT} provides appropriate {\bf #define} directives which allow you to access values of parameters of the starter or generator by their names: if you specify a functional parameter from a window you can use in it any name shown in the window.\par {\bf Buttons}\>\par {\li 1 \bf Ok}\>closes the dialog box and compiles the function you have typed in. Errors, if any, are reported immediately after compilation in a special dialog box.\par {\li 1 \bf Cancel}\>closes the dialog box without changing the functional parameter.\par {\li 1 \bf Help}\>opens the \jump kh_HelpWin {help window} which displays the description of this dialog box.\par } \end \% kh_FuncParWin \% ********** Decoder ********** \topic kh_Decoder {decoder} The {\bf decoder} is a special routine which maps points produced by a \jump kh_Generator {generator} into spaces {\bf visible for the user} (e.g. phase space). Spaces visible for the user and these in which generators compute curves are usually different. The user does not deal with decoders. Instead, they are called internally by {CONTENT} when needed. \end \% kh_Decoder \% ********** Utility functions ********** \topic kh_Utility {utility functions} {\bf Utility functions} are those functions which are not parts of starters and generators but used by many of them. Each starter and generator has its own set of utility functions which are implemented by the developer of the starter or generator. They are described in appropriate files and {CONTENT} loads them into memory with starters and generators. The concept of utility functions allows many starters and generators to share the same functions without increasing their code size.\par The user does not deal with utility functions.\par \end \% kh_Utility \% ********** Archives filter ********** \topic kh_ArchFilter {archives filter} The {\bf archives filter} is a set of parameters which restrict the amount of data stored when computing \jump kh_Curve {curves.}\par There are the following components in the archive filter.\par {\bf The maximum number of untitled curves} restricts the number of {\bf untitled} curves stored in a diagram. To store a curve permanently you have to give it a name. This can be done by the \jump kh_menuSelect {Select|Curve} and \jump kh_CurveWin {Actions|Rename} commands.\par {\bf The path filter} specifies which points will be stored in a \jump kh_Curve {curve} by a property like 'store each 5th point from 10th to 95th'.\par {\bf The trace filter} is used only for curves whose points contain several mathematical points (e.g., each point in a limit cycle bifurcation curve contains points which form one limit cycle). This filter is similar to the {\bf path filter} except it selects which mathematical points are to be stored.\par {\bf The coordinate filter} allows you to specify which coordinates of each point should be stored in a curve.\par \jump kh_SpecialPoint {Special points} are always stored with all their coordinates regardless the filter.\par You change the filter with the \jump kh_ArchFilterWin {archives filter dialog box} which is opened by the \jump kh_menuOptions {Options|Archive filter} command in the \jump kh_MainWin {Main window.} \end \% kh_ArchFilter \% ********** Pause mode ********* \topic kh_PauseMode {pause mode} The {\bf pause mode} is a control parameter which specifies when {CONTENT} suspends computation of a curve. Its possible values are:\par {\sb 0 \li 1 \bf at each point,\par at special points,\par never.\par } You change the pause mode with the \jump kh_PauseModeWin {pause mode dialog box} which is opened by the \jump kh_menuOptions {Options|Pause mode} command in the \jump kh_MainWin {Main window.} \end \% kh_PauseMode \% ********** User functions ********** \topic kh_UserFunc {user functions} A {\bf user function} is a function specified for \jump kh_Generator {generators}\par {\li 1 to {\bf monitor} its values along \jump kh_Curve {curves,}\par to {\bf detect} its zeros along curves, or\par as a constrain {\bf appended} to \jump kh_DefFunc {defining functions}\par } according to your instructions. When a function is monitored, only its values at the points found along a curve are computed. "Detect" means accurate location of points where the function changes its sign and is sufficiently small. The function may use phase and parameter components of a point where it is evaluated, as well as the corresponding eigenvalues. Names of the components are shown in a \jump kh_StarterWin {starter window.}\par You specify user functions with the \jump kh_UserFuncWin {user functions dialog box} which is displayed by the \jump kh_menuSelect {Select|User functions} command in the \jump kh_MainWin {Main window.}\par \jump kh_StarterWin {Starter windows} contain switches you use to set appropriate processing mode for each function. \end \% kh_UserFunc \% ********** User function status ********** \topic kh_UserFuncStatus {user function status} A \jump kh_UserFunc {user functions} may be either {\bf enabled} or {\bf disabled.}\par An {\bf enabled} function may be used by a \jump kh_Generator {generator} to monitor its values, to detect its zeros, as a constrain added (appended) to \jump kh_DefFunc {defining functions,} or it may be simply ignored. The list of currently enabled user functions appears in a \jump kh_StarterWin {starter window} along with switches you use to make the appropriate setting for each function.\par A {\bf disabled} function is 'invisible' for starters and generators, that is it does not appear in starters windows. {CONTENT} keeps definitions of disabled functions but does not compile them. You can disable a user function if it is not needed now but may be needed later on. \end \% kh_UserFuncStatus \% ********** User function label ********** \topic kh_UserFuncLabel {user function label} A {\bf user function label} is an abbreviation which may be used by {CONTENT} to label points in which the function's value is zero.\par You specify the label when you define a function with the \jump kh_UserFuncWin {user functions dialog box} which is displayed by the \jump kh_menuSelect {Select|User functions} command in the \jump kh_MainWin {Main window.}\par To instruct {CONTENT} to use the label display the \jump kh_SpecPointWin {special points} dialog box by the \jump kh_menuOptions {Options|Special points} command. Then make sure the {\bf Label} check box is checked for the type of a curve you are going to compute. \end \% kh_UserFuncLabel \% ********** Spaces ********** \topic kh_Spaces {spaces} For the purpose of computation and visualization of curves {CONTENT} supports different {\bf spaces} and allows you to specify {\bf mappings} between them.\par During computation and visualization you deal with the {\bf Generator, Mathematic} and {\bf Visible} spaces. \par {\bf Generator} space (or {\bf G-space}) is the space in which a \jump kh_Generator {generator} computes \jump kh_Curve {curves.} You specify G-space implicitly when you choose the types of \jump kh_PointType {initial point} and \jump kh_CurveType {curve}. The dimension and meaning of coordinates are fully defined by corresponding \jump kh_Starter {starter} and \jump kh_DefFunc {defining,} \jump kh_TestFunc {test,} and \jump kh_ProcFunc {processing} functions. Curves in G-space are called \jump kh_Path {paths.} \par {\bf Mathematic} space (or {\bf M-space}) is the "natural" space for your \jump DynSys {dynamical system.} You specify some subspaces of this space explicitly by giving names for variables, parameters, etc. in the \jump kh_RHSWin {dynamical system specification} dialog box. The other subspaces (e.g. eigenvalues) are defined by {CONTENT} implicitly using the names. The map $G\rightarrow M^k$ (where $k\geq 1$ may depend on \jump kh_StarterWin {parameters} of the starter) is defined by appropriate \jump kh_Decoder {decoder} which "knows" structures both G- and M- spaces.\par Curves in M-space are called \jump kh_Trace {traces} and in a case $G\rightarrow M^1$ correspondence each trace contains exactly one point. In such cases a line which joins two G-points is mapped onto a single line joining corresponding M-points.\par For some curve types $k>1$ and that means that several M-points correspond to a single G-point. For example, one point on a {\bf limit point} curve is mapped on the whole limit cycle in the phase space (in fact it {\bf contains} all the M-points). Such G-points are called {\bf coded points} or {\b multi-points.} In these cases the trace is an ordered (by the Decoder) sequence of M-points which are all the images of the same G-point. Note that a line joining two G-point becomes a set of $k$ lines which join images in the M-space. \par {\bf Visible} space (or {\bf V-space}) is a space to which the M-space is mapped for visualization purposes. Strictly speaking there are as many V-spaces as you have the \jump kh_ResultWinows {result windows} open. The map $M\rightarrow V$ is controlled be the result window as well as the way you specify the map. For example, for a {\bf graphic} window you specify functions along axes (and in fact you may specify more than one pair); for a {\bf numeric} window you simply pick up names of coordinates. Curves in V-space are called shifts. Usually each shift consists of one point; for graphic windows it may contain more than one point if more than one pair of functions are defined. \end \% kh_Spaces \% ********** Trace ********** \topic kh_Trace {trace} In {CONTENT,} a {\bf trace} is defined as a sequence of points in the \jump kh_Spaces {M-space} which are the image of a single G-point computed by a \jump kh_Generator {generator.} The mapping is defined by the \jump kh_Decoder {decoder} associated with the point \jump kh_PointType {type.} Trace is a "real" curve for {\bf coded} G-points only.\par Some \jump kh_ResultWindows {result windows,} namely {\bf graphic} windows allow you to set visualization attributes related to traces: whether to join points along traces and color, width and style of lines. \end \% kh_Trace \% ********** Path ********** \topic kh_Path {path} In {CONTENT,} a {\bf path} is defined as a sequence of {\bf G-points} computed by a \jump kh_Generator {generator} in the \jump kh_Spaces {G-space} defined by the appropriate \jump kh_Starter {starter.} Note that in general this space is different from those the user deals with in \jump kh_ResultWinodws {result windows.}\par The \jump kh_Decoder {decoder} associated with the curve's \jump kh_CurveType {type} is used by {CONTENT} to map points from the G-space they were computed to the M-space which for the visualization purposes is mapped to \jump kh_Spaces {V-spaces.}\par Depending on their type points produced by generators may be either {\bf simple} or {\bf coded.} A {\bf simple} point is a point which is mapped to exactly one point in the M-spaces. A {\bf coded point} or {\bf multi-point} is a point which is mapped to more than one point in the M-space.\par Some \jump kh_ResultWindows {result windows,} namely {\bf graphic} windows allow you to set visualization attributes related to paths: width and color of points, whether to join them (in the G-space) and color, width and style of lines. Note that for coded points one line joined two successive points is mapped to several lines joined images of the points. \end \% kh_Path \% ********** Shift ********** \topic kh_Shift {shift} In {CONTENT,} a {\bf shift} is defined as a sequence of {\bf V-points} which are images of a single {\bf M-point} in the \jump kh_Spaces (M-spaces.} Graphic \jump kh_ResultWindows {result windows} allow you to define map $M\rightarrow V \times V \times \ldots \times V$ and set visualization attributes related to shifts: whether to join points along shifts (in the window) and color, width and style of lines. \end \% kh_Shift \% ********** Result windows ********** \topic kh_ResultWindows {result windows} {\bf Result windows} are used to represent computed curves in various forms. You open result windows with the commands from the \jump kh_menuWindow {Window|Open} submenu which is in the \jump kh_MainWin {Main window.}\par There is the minimal set of result windows:\par {\desc 5 {\bf 2D graphic}\>Windows of this form are used to represent two-dimensional projections of curves.\par {\bf 3D graphic}\>Windows of this form are used to represent curves in 3D spaces.\par {\bf 1D stairs}\>Windows of this form are used to represent orbits of iterated maps as staircase diagrams.\par {\bf Numeric}\>Windows of this form are used to represent coordinates of the {\bf current point} (i.e. last computed point) numerically.\par {\bf Table}\>Windows of this form are used to represent expressions made of coordinates of points as a scroll table.\par } Your version of {CONTENT} may support result windows of other forms. To see the full list of supported result windows open the \jump kh_menuWindow {Window|Open} submenu. Help topics on particular result window are available through the {\bf Help} menu in the window.\par You may open several windows of the same form. The total number of result windows cannot exceed 32. \end \% kh_ResultWindows \% -------------------------------------------------------- \% Texts which may be included by other windows' help files \% ********** Compute submenu ********** \topic kh_ComputeSubmenu {-} this menu contains commands which allow you to compute curves; they are the same as the commands in the \jump kh_menuCompute {compute menu} from the \jump kh_MainWin {Main window.} \end \%kh_ComputeSubmenu \% ********** Compute forward item ********** \topic kh_ForwardItem {-} starts the computation of a new curve in the forward direction. \end \% kh_ForwardItem \% ********** Compute backward item ********** \topic kh_BackwardItem {-} starts the computation of a new curve in the backward direction. \end \% kh_BackwardItem \% ********** Extend item ********** \topic kh_ExtendItem {-} extends the \jump kh_CurCurve {current curve} in the same direction as it was first computed. \end \% kh_ExtendItem \% ********** Redraw Diagram item ********** \topic kh_RedrawDiagramItem {-} clears this window and then redraws all the curves from the \jump kh_CurDiagram {current diagram} in the window. Other windows are not affected by the command. \end \% kh_RedrawDiagramItem \% ********** Redraw Curve item ********** \topic kh_RedrawCurveItem {-} \%clears all windows and then redraws the \jump kh_CurCurve {current curve} in the window. Other windows are not affected by the command. \end \% kh_RedrawCurveItem \% ********** Clear item ********** \topic kh_ClearItem {-} clears this window only. Other windows are not affected by the command. \end \% kh_ClearItem \% ********** Hide window ********** \topic kh_HideItem {-} makes the window \jump kh_HiddenWindow {hidden} (invisible) but retains all its attributes. This command is useful when you need not the window at the moment but don't want to recreate it later. To make the window visible again use the \jump kh_menuWindow {Window|Show hidden} command from the Main window. Don't confuse the {\bf Hide} command with the {\bf Close} command from the window's {\bf System} menu. The latter destroys the window forever. Also, don't use the {\bf minimize box} (which is at the right of the window's title bar): {CONTENT} cannot handle it correctly due to some implementation restriction. \end \% kh_HideItem \% ********** Help submenu ********** \topic kh_HelpSubmenu {-} this menu contains commands you use to access the online Help system. They open the \jump kh_HelpWin {Help window} where you can browse help topics. \end \% kh_HelpSubmenu \% ********** Help Search item ********** \topic kh_HelpSearchItem {-} opens the \jump kh_HelpWin {Help topic search} dialog box which allows you to find information quickly. \end \% kh_HelpSearchItem