#########################################################################
#       BUILT-IN DYNAMICAL SYSTEMS
#########################################################################
 
        Lookup README file in ${KAOSHOME}/modellib directory for more
        information on how many vector fields and maps are defined.
         
        The files starting with "generic_" are
        those with examples of many different generic dynamical systems,
        which can be copied to the user directory ${KAOSHOME}/modellib
        and used as a template for entering your own dynamical system.
        Choosing the right example from the list will reduce the amount of
	time required to enter your own dynamical system.

	For more detailed info, look up the generic_def.c file and

#########################################################################
#       DESCRIPTION OF BUILT-IN DYNAMICAL SYSTEMS
#########################################################################
         
        Look up the file ending with .info
        to get a description of a given dynamical system. 
         
#########################################################################
#       BUILDING NEW DYNAMICAL SYSTEM CLASS
#########################################################################

	You must have a write permission for some kaos files to change
	parameters of the dynamical system class or build a new one.
	Therefore, this customization requires that you have a private
	copy of the entire source code of kaos in your local directory
	or you have a super-user privilege.

It if often convenient to define a set of dynamical system classes with
conveniently grouped dynamical systems. For example, one can define a
set of dynamical system classes depending on  whether dynamical systems
are mappings or vector fields, whether they are Hamiltonian or not, and
whether they are from tutorial examples or from research projects,
etc.  With fewer models installed at once, the program is smaller and
runs faster.  Each dynamical system is defined by a small set of
subroutines.  These subroutine modules can be inserted into and deleted
from a given dynamical system class.  The  Makefile in the directory
${KAOSHOME}/modellib contains most of the instructions for installing
dynamical system classes.

At the moment, the maximal dimensions of the phase, parameter, and function
space for a given dynamical system classes are specified in the file
 Makefile in the directory  $KAOSPATH/modellib. These can
be easily changed by editing a line containing these definitions. Though
this is much easier operation than what follows
class, for the sake of completeness we present how to install
the new dynamical system class in the following.

For example, in order to create and install a new class 
with the class name  class_trial, follow the steps described below.

(1) Create the file  class_trial_model_labels.h with the title of
a member dynamical system in each line. For example, the file should look like

Lorenz system 
KO torus map
Henon map

(2) Go to the file  Makefile in the directory  ${KAOSHOME}/modellib.
Define the a new environmental variable CLASS_TRIAL as follows

CLASS_TRIAL = \
	lorenz kotorusmap \\
	henonmap

(3) Copy the set of commands for making the target  class_demo
in  Makefile and change the name of the target to  class_trial.
For example,

class_trial:\\
	kwrite_init $@ 3 $CLASS_USER $CLASS_TRIAL\\
	kwrite_def $@ 12 13 5 3 $CLASS_USER $CLASS_TRIAL\\
	kwrite_model $@ $CLASS_USER $CLASS_TRIAL\\
	kwrite_f $@ $CLASS_TRIAL\\
	cp $@_kaos_init.h class_kaos_init.h\\
	cp $@_kaos_def.h class_kaos_def.h\\
	cp $@_kaos_model.h class_kaos_model.h\\
	cp $@_choose_algorithm.c class_choose_algorithm.c\\
Here,  $CLASS_USER is an environmental variable for a list of
user defined dynamical systems, that is, 
	userds0 userds1 userds2

The second argument of the command
kwrite_init (here 3) denotes the index of the
dynamical system class. Change this to a number that differs from 
the indices of the other dynamical system classes.

The numerical arguments of the command
kwrite_def (here 12 13 5 3) denote
the maximal dimensions of the phase space, the parameter space, the function
space, and the number of auxiliary windows, respectively. Edit these for the
proper dimensions of the dynamical system class 
to be installed in  class_trial.
Note that changing the values of these arguments for the existing dynamical
system class will change the corresponding maximal dimension of the spaces.

(4) In the directory  ${KAOSHOME}/modellib,
type  make class_trial to create the new dynamical system class. 
This creates a set of temporary files looked up by kaos;
 class_trial_kaos_def.h,  class_trial_kaos_init.h,
 class_trial_kaos_model.h, and 
 class_def.c.

Some constants in the temporary files which are
automatically created by "make" and are explained below.

File class_trial_kaos_def.h
---------------------------
 MODEL_DIM - the number of dynamical systems in the class

 MODEL_LABELS - a set of labels for the dynamical systems in the class

 dsclass variable - the index for a user dynamical system class 

File class_trial_kaos_init.h
---------------------------
 init_tbl - a list of dynamical systems
contained in a user dynamical system class.  
Substitute the existing ones with names of the
dynamical systems in your user dynamical system class. The number and order of entries are important. The total number of entries should be  MODEL_DIM 
as defined in  class_trial_kaos_def.h.

 *_init(),*_f(),*_func() - their names need to be changed to the names
of the dynamical systems in your user dynamical system class.  Note
that all these subroutines have to be declared to return an integer.
