fbi_logo.gif (10730 Byte)unilogo2.gif (5281 Byte)

Department for Ecoinformatics, Biometrics and Forest Growth

Faculty of Forest Sciences and Forest Ecology
at the
University of Göttingen



==========================    GROGRA 3.3    =============================

This software was developed by the Plant Modelling Group,
University of Goettingen,
Department for Ecoinformatics, Biometrics and Forest Growth,
Buesgenweg 4, 37077 Goettingen, Germany,
Tel. +49-551-399715,
email:wk((at)) informatik.uni-goettingen.de
URL:    http://www.uni-forst.gwdg.de/forst/fbi/plant.html
Author: Winfried Kurth,
adaptation to XWindows environment by Dirk Lanwert,
adaptation to Windows 95 by Gustavo A. Anzola Juergenson.

< Remarks concerning the Windows version: see end of this file. >

This is a scientific software. It is allowed to copy and use it for
scientific and / or educational purposes (and, in fact, the author
encourages this use and is thankful for any feedback about it).
It  m a y   n o t  be distributed or used for any commercial purposes
without the written permission of the author. It  m a y   n o t
be used for any military purposes.


General Remarks:

There exist five versions of this software:
(1) one running on an IBM-compatible microcomputer (80386 or higher)
    under MS-DOS (this is only a small-memory demo version),
(2) the "master version" for a Silicon Graphics workstation (Iris Indigo)
    with GL graphics (this version has special graphics features not
    implemented in the other versions),
(3) one for various workstations (IBM, DEC-Alpha, SUN) and for micro-
    computers under Linux 7.0, with XWindows-based graphics and menues,
(4) a version running under Windows 95/98,
(5) a "text-only" version with reduced interfacing and without screen
    graphics output, designed for batch jobs.
The executable file is grogra.exe for (1), grogra for the workstation
versions (2, 3), wgrogra.exe for (4), and tgrogra for (5).

The requirements for the demo version under MS-DOS (1) are:
VGA- or EGA-card (or other graphics card supported by Borland Turbo-C++),
mouse (optional), printer (optional); MS-DOS 3.3 or higher, Borland
Graphics Interface (EGAVGA.BGI or other driver software, depending on the
graphics card), and the file "lexpla.msg" containing explanation texts.
The BGI-File is expected in the subdirectory  \tc\bgi,
the file lexpla.msg in the subdirectory where GROGRA is called.

The XWindows-version (3) expects a colour table file named grogra.col
and the explanation file lexpla.msg in the subdirectory where GROGRA
is called.
When the UNIX versions are installed, it has to be ensured
that the user has the right to execute the file grogra. If this is
not yet the case, the UNIX command chmod has to be applied
(see a UNIX manual for details).

The Windows 95/98 version (4) requires a file cw3230mt.dll (a dynamic
link library), a colour table file grogra.col and the explanation file
lexpla.msg in the same subdirectory as wgrogra.exe.

The text-only version (5) requires only the explanation file

The program is partly self-explanatory and menu-driven. Consult the
explanation item in the menu "Service functions and explanations".
You can toggle the language between English (default) and German in
the same menu.

Getting started:

Usually, the first thing to do is the generation of a new structure
(first item in the main menu). The submenu items "Give all segments
explicitely" and "Turtle geometry without grammar" are included mainly
for test purposes and are not recommended to the user, because they
require lengthy data specifications by hand. Use "non-sensitive grammars"

The following file formats, distinguished by the extensions of the
filenames, are used by GROGRA:

.A format for array variables used in parametric grammars

.ANA   analysis output file

.ARC   (SGI version only) format for the interface to AMAP

.BOL   format for results about the tree bole (stem analysis),
       interface to GROBOL

.CFG   files "gg2hy.cfg" and "gg_tn.cfg": configuration files
       controlling the transformation process for the interface to
       HYDRA and for the transformation of N-values, respectively,
       when the command line version of GROGRA is applied with
       command line options "hy" and / or "tn"

.COL   (Windows and XWindows version only) Colour table file

.DAT   data files produced by GROGRA in the analysis mode and
       readable by data analysis tools like SAS

.DTA   (SGI version only) format for the interface to AMAP

.DTB   format for the interface to AUTOCAD

.DTD   format for descriptive data (of measured plants) for comparison
       purposes; has nothing to do with L systems

.DTG   standard format for saving generated three-dimensional structures

.GPR   protocol format for data transformations for HYDRA

.INF   (SGI version only) format for the interface to AMAP

.KUB   format for results of structure analysis in the cubic grid
       (interface to mass distribution and light extinction models)

.LIG   (SGI version only) format for the interface to AMAP

.LSY   ASCII file for non-sensitive grammars
       (description of the syntax see menu item "Service functions and
       explanations", subitems "Explanations" - "L system syntax",
       or directly in the file "lexpla.msg")

.MSG   messages for the explanation part of the program (ASCII file)

.PBG   format for the interface to the water flow simulation
       program HYDRA, developed in Goettingen by Th. Frueh

.PFA   format for results of path length analysis

.RES   result file "ggvalue.res": contains evaluation results when the
       command line option "e" is specified (see below)

.SBG   second format for the interface to the water flow simulation
       program HYDRA, developed in Goettingen

.SSY   ASCII file for sensitive grammars
       (description of the syntax see menu item "Service functions and
       explanations", subitems "Explanations" - "L system syntax",
       or directly in the file "lexpla.msg")

.STR, .OLL, .TEM   auxiliary files generated by GROGRA during its work

The source code files "lmethod.c" and "lmethod.h" contain functions,
methods and evaluation procedures which can partly be used by grammars
and may be changed by the user. They have to be recompiled together with
the rest of GROGRA's object files after changement, using Borland's
Turbo-C++ 3.0 or higher, mode 'huge', or the "cc" compiler under Unix.

Grammar example files:

    COLTEST.LSY   a colour test example, producing a vertical bar with
		  all 16 standard colours according to the file
		  grogra.col (Windows and XWindows version) - use this
		  example to calibrate the colours for your machine
		  by changing grogra.col

    KOCH.LSY    )
    DRAGON.LSY  ) simple test examples without branching

    PRH32a.LSY  )
    PRH32b.LSY  ) simple examples with branching
    UHR.LSY     )

    PRUS.LSY      example of a flower from Prusinkiewicz and Lindenmayer
		  1990 (slightly modified), 4-6 steps

    EXAMP.LSY     exemplary plant with crown, roots and root-born shoots
		  (reiteration from roots), 10-15 steps

    GALIUM.LSY    example of a realistic plant (Galium odoratum, in
		  German: "Waldmeister"), developing a rhizome over
		  several years, with annual flowering, 30-60 steps

    FICHT5.LSY    simulates young spruce crown (simplified), up to
		  about 8 steps (years)

    ROOT.LSY      simulates a root system, makes sense for up to about
		  20 steps

    DICHO_N.LSY   simple example of dichotomic branching, non-sensitive
		  (7-9 steps)

    DICHO_S.SSY   example for sensitivity: growth is stopped if obstacles
		  are present in a cone above the actual tip of shoot;
		  the opening angle of the cone has to be specified
		  by the user
		  (10 steps)

    DICHOMUR.SSY  like DICHO_S.SSY, (angle 30 degrees), with simulated wall
		  (11-12 steps)

    COMPET2.SSY   a more refined plant, also exhibiting shadow sensi-
		  tivity like DICHO_S.SSY, with orthotropic side
		  branches and needle aging (seen as color change of
		  stem and branches), 20-30 steps

The start word, asked for by GROGRA in the beginning, is * in every case.
(In the example COLTEST.LSY, the start word is not asked from the user.)

All example grammars besides DICHO_S, DICHOMUR and COMPET2 work in the
mode "non-sensitive growth grammar" (submenu "Generate a new structure").

For more detailed informations, consult the written documentation
entitled "Growth Grammar Interpreter GROGRA 2.4 -- A software tool
for the 3-dimensional interpretation of stochastic, sensitive growth
grammars in the context of plant modelling" and published in the
report series "Berichte des Forschungszentrums Waldoekosysteme",
Goettingen, Ser. B, Vol. 38 (1994), available from the author
or from the office of the FZW.
An appendix containing the extensions until version 2.7 (October 1996)
is published in the paper "Some new formalisms for modelling the
interactions between plant architecture, competition and carbon
allocation" (by W. Kurth), in the journal "Bayreuther Forum Oekologie",
Vol. 52 (1998), p. 53-98.
Both documentations are available as Postscript files via internet
under http://www.uni-forst.gwdg.de/forst/fbi/public.html.
A description in German language is given in W. Kurth's habilitation
thesis ("Die Simulation der Baumarchitektur mit Wachstumsgrammatiken",
Berlin 1999).


New features of the version 2.5,
compared to GROGRA 2.4:

 -  the XWindows support for the UNIX version is new;

 -  to leave the graphics display mode quickly, the key 'q' will
       work in the same way as the  key. In the XWindows-
       version, the 'q'-key replaces the  key in this function;

 -  an interface to the AMAP-"Glance"-Software of the Unit‚ de
       Mod‚lisation des Plantes, CIRAD (Montpellier) was implemented
       in the SGI version;

 -  an interpolation modus was included in the graphical part of
       the SGI version. This made several extensions necessary:

       -  by the command line "\tsp" ( = "treat symbols as points")
	  in an LSY- or SSY-file, the grammar interpreter is told
	  to create an (invisible) zero growth unit (of length and
	  diameter zero) for each symbol which is not identical to
	  one of the standard turtle commands (normally, such symbols
	  are not interpreted by the turtle). These zero growth units
	  are used as a basis for growth in the interpolation routine.
	  (The interpolation works also without the zero units, but
	  in this case the interpolation is done between a new shoot
	  and its mother shoot, which is less realistic for botanical

       -  In the SGI version, the user is asked whether "backward
	  references" have to be created before the interpretation of
	  a growth grammar is started. These references are pointers
	  connecting a growth unit at step t+1 with its predecessor
	  at step t, and they are used in the interpolation modus.
	  There are four possible answers to this questions: "n" (or
	  simply the return key) = "no", "y" = "yes", "e" ( = "even")
	  creates references only between the structures created at
	  time steps with even number, "o" ( = "odd") creates refe-
	  rences only between the structures created at time steps
	  with odd number. The choice depends on the interpreted
	  grammar (e.g. the grammar EPI1.LSY (see the manual)
	  requires odd interpolation).

       -  In the graphics mode of the SGI version, the key "s"
	  activates a slider which has to be placed by the mouse
	  (use the left mouse button to fix it on the screen) and
	  which enabels the control of the shown timestep by clicks
	  of the left mouse button when the mouse cursor is inside
	  the slider window. The key "i" activates the interpolation
	  mode (normally, "i" should be used after "s"). To have a
	  smooth interpolation of the growing structure, move the
	  mouse cursor from the left to the right end of the slider
	  while pressing the left mouse button.
	  The keys "s" and "i" work as toggles, i.e. slider and
	  interpolation modus can be desactivated by pressing them

 -  two new turtle commands can be used (in LSY or SSY files):
	      S(n)   = "save",
	      C(m,n) = "connect".
       S(n) (n being an arbitrary integer) saves the current state of
       the turtle in an internal list under the identificator n.
       C(m,n) (m and n being integers which were used before in S-
       commands) puts the turtle at the position which was its
       position when S(m) was executed, and moves it afterwards to
       the position corresponding to the state which was actual when
       S(n) was executed, thereby creating a new elementary unit
       between the two positions. Diameter, colour, N- and V-value are
       not taken from the saved state, i.e. they can be specified before
       the C(m,n)-command is executed. Length and direction vectors
       (H, L, U) are calculated from the vector connecting the two
       positions, the other state variables of the turtle (including
       the mother shoot) are taken from the state saved by S(m).
       The commands S and C are especially useful for the construction
       of closed lines (polygons).

 -  the transformation procedure for SBG structures in the interface
       to HYDRA now offers the additional possibility to specify whether
       the basal node of an axis is included in the reorganisation of
       branching nodes or not;

 -  the former file extension .DTA was replaced by .DTG (but the file
       format has not changed) - eventually, old DTA-files have to be

 -  a bug concerning the reading of incomplete DTG-files in 'harddisk'-
       mode was removed.

 -  in the XWindows-version, the correspondence between the numbers
       (utilized by the P command) and the colours is controlled by
       a special file named grogra.col, which can be changed "by hand"
       if necessary.
       (The exact colour display can vary between different machines
       and depends generally on the current setting of the server.)
       A simple test of the colours is provided by the "t" key in
       the graphics display mode of GROGRA: The right mouse button
       then produces a coloured square, the middle mouse button
       activates the next colour (the first colour being the last
       one which was active before "t", then the colours
       corresponding to 0, 1, 2 etc. are activated).

Known problems:

 -  When GROGRA is activated several times at once on a workstation,
       there will be a confusion if the same auxiliary files
       are used by different instances of GROGRA. Assure to start
       GROGRA from different directories when several incarnations
       of GROGRA are meant to be active at the same time.

 -  In the XWindows-Version, it can happen that the first page in the
       graphics display is either not shown, i.e. the screen remains
       black after leaving the explanatory text page preceding the
       graphics, or is partially destroyed by other windows appearing
       on the screen.
       Press any key not having a specified function in the graphics
       mode, e.g. , in this case to get the first graphics page

 -  In the XWindows-Version for DEC Alpha machines, the error message
       in the case of a wrong utilization of the "zoom" option will
       possibly not appear. Press the "e" key for re-installation of
       the original scale in cases when the zoom does seemingly not
       work correctly, and try once more.


Release 2.6 / 2.7

 -  In contradiction to the Manual, the encapsulation (nesting) of
       repetition operators (&) is possible now.
       In the declaration of a variable of type "index", a nesting
       level can be specified like in the following example:
	  \var i index 0,
	  \var j index 1,
	  * # &(3) < RU20 L(i*10+3) &(2) < RU5 P(j+1) F > >
       The declaration \var i index, is equivalent to \var i index 0,
       and up to 20 < ... > - levels can be nested.

 -  The encapsulation (nesting) of rules is now possible, with the help
       of the operator E ("expand"). The rule
	  a # E(5) < b c >,
       specifies b and c to be further evaluated for 5 steps using the
       current grammar in the moment when a is replaced. That means,
       an arbitrary number of rewriting steps can be executed in one
       developmental step. E operators can also be nested.
       Index variables can be used for the E operator, analogously
       to their use in connection with the & operator. Furthermore,
       a variable of type "depth" can be used to specify which rules may
       be used on a certain level of evaluation. E.g., in the case
	  \var d depth,
	  (d = 0) a # E(5) < b >,
	  b # a b,
       the symbols "a" produced from b by the rule b # a b when the b
       inside the E(5) < b > construction is evaluated are excluded from
       transformation by the first rule during the E-evaluation, because
       the depth is 1 when the second rule is applied on the b inside
       the E(5) < b > construction and the application of the first rule
       is restricted to level 0 (i.e. "ordinary" developmental) steps.
       - For further examples on nested grammars see:
	   W. Kurth, Elemente einer Regelsprache zur dreidimensionalen
	   Modellierung des Triebwachstums von Laubbaeumen. Proceedings of
	   the 8th Annual Meeting of the Section for Forest Biometry and
	   Informatics in the DVFF, sept. 25-28 1995, Tharandt-Grillenburg
	   (in German).

 -  The semantics of the operator J has changed. Contradicting the
       specification in the Manual, a J operator appearing in the r.h.s.
       of a rule is executed in the moment when this rule is applied.

 -  The turtle commands U, U+, U*, Ul, Ul+, Ul* were introduced for the
       manipulation of the current number of internodes used in the
       creation of the next shoot as an attribute. The number of internodes
       has no effect on the graphical display, but it is counted in the
       "cubic grid analysis". The semantics of the different variants of
       the U commands is analogous to the semantics of the commands
       L, D, N and V (see the manual). The only difference is that the
       argument is always rounded to the nearest integer.
       The number of internodes has to be introduced in the list of
       elementary unit variables (manual pages 81-83) as an additional
       variable of type "long integer". The default value of this
       variable is 0.

 -  Variables of type "table" can now be called in the r.h.s. of rules
       alternatively with 0 parameters (like before; the actual step
       number is used as argument in this case, see the manual) or with
       1 parameter. The parameter specifies which number from the table
       is to be taken as argument. E.g.,
	  \var k table 5 4 3,
	  * # F(k(1))
       causes F to take the argument k(1) = 4. (k(0) would be 5, k(n) for
       n >= 2 would be 3).

 -  Variables of the types "length", "diameter", "n_value", "color" and
       "q_value" (Manual, p.71) are now also allowed in generative rules
       (but only in sensitive grammars, then). They refer to the respective
       shoot attributes of the corresponding elementary unit in the
       structure just created (like "xcoordinate" etc.). Their use in
       interpretative rules remains unchanged.

 -  A new variable type "order" (without parameter list) was introduced.
       In interpretative rules, a variable of this type takes the value
       of the current branching order (b on Manual page 56) calculated by
       the turtle, in generative rules (of sensitive systems) it takes the
       value of the branching order (b on Manual page 82-83) of the corres-
       ponding elementary unit in the structure just created.

 -  An abbreviated call of grogra on the system level is possible now.
       If the grammar file "name.lsy" is to be executed, type the command
	  grogra name
       instead of grogra. The first menu choices will be skipped then.
       If a sensitive grammar, "name.ssy", is to be executed, type
	  grogra name s
       Several command line arguments are possible to specify certain
       options. Each command line argument must be a string without
       internal blanks. (If blanks shall be included in an argument,
       the whole argument is to be enclosed in "...".) The first argument
       must always be a filename without extension (normally, the grammar
       file name to be worked with).

       List of the possible command line arguments following the first
       filename (here, "name" stands for a string and "17" for some
       arbitrary nonnegative integer):

	  s         sensitive mode, an ssy-file is read
	  d         a dtd-file is read (the first command line argument must
		    be the name of the dtd-file (without .dtd) in this case)
	  h         run GROGRA in harddisk mode
	  n17       specification of the number of steps (here, 17 steps)
		    and no user requests during grammar file reading
	  na17      like n17, but only the last developmental step is
		    translated into a geometrical structure ("n alone")
	  b         create backward references
	  be        create backward refs for even steps
	  bo        create backward refs for odd steps
	  tsp       treat symbols as points
	  w[name]   use the specified start word "name" (instead of
		    default "*")
	  g[name]   generate dtg file after reading & grammar evaluation,
		    filename "name.dtg"
	  ax[name]  make analysis after reading & grammar evaluation.
		    Here, x stands for a character, corresponding to the
		    respective menu item in the submenu "analyze the actual
	  tn        make a transformation of the N values (corresponding to
		    the transformation started from the respective submenu
		    under "Store or transform the actual structure"). When
		    this option is used, GROGRA consults the configuration
		    file "gg_tn.cfg" to determine the kind of transformation
		    to be carried out
	  hy        start the transformation to the HYDRA format (.pbg or
		    .sbg or both). The configuration file "gg2hy.cfg" is
		    required in this case. When both "tn" and "hy" are
		    given in the command line, "tn" has to appear first.
		    A description of the file formats of the .cfg-Files
		    will be given in a future documentation (ask the author
		    if these informations are required).
	  e3        apply one of the evaluation functions (here: number 3)
		    to the finished structure (this option works only
		    together with the "n" option). The menu interface is
		    suppressed, and the numerical result of the evaluation
		    is written into the file "ggvalue.res". There will be two
		    values in this file, the first one must be a "1"
		    (indicating the success of the evaluation) and the second
		    one the result itself. The following evaluation functions
		    are currently available:
		       e1  calculates the maximal extension of the structure
			     in z direction (i.e., z_max - z_min),
		       e2  calculates the height ratio of a specified tree
			     to the average height of all trees,
		       e3  calculates the length sum of all shoots,
		       e4  calculates a length sum where the length of each
			     shoot is weighted by the z coordinate of the
			     shoot tip.

       Of course, the normal call "grogra" without command line parameters
       remains also possible.

 -  The start word can be read from a file. To achieve this, the input
       at the start word request must be the character '#', immediately
       followed by the name of the file from where the start word is to
       be read. The format of the file must be that of the file
       'lstri.str' produced by GROGRA. The file lstri.str from a former
       GROGRA run can be renamed and used for this purpose, thus enabling
       the continuation of a former developmental sequence.
       When the start word is read from a file, GROGRA will first
       interprete this start word ("step zero"), i.e. an interpretative
       step will be carried out first, other than in the normal case
       when GROGRA starts with a generative step.

 -  The item "change the colors" was removed from the submenu "service
       functions and explanations". Instead, an item "change the treatment
       of symbols" was introduced. This item acts as a toggle between
       the two possibilities
	 *  interpretation of non-predefined symbols as "none", i.e. the
	    turtle ignores them (this is the default status),
	 *  interpretation as shoots of zero length, which is especially
	    useful for the interpolation modus on the SGI machine.
       The specification "\tsp" in the declaration part of a grammar file
       overrides the choice and enforces the interpretation as zero-length
       shoots in any case (tsp = "treat symbols as points").

 -  A new "movie" modus was installed for the graphical display of the
       SGI version. It is activated and inactivated by the "m" button.
       The speed of the animation can be influenced by the cursor buttons
       (cursor up = faster, cursor down = slower). The movie modus can be
       used with or without the slider.

 -  In the analysis menu of the SGI version, an item "Set of height growth
       curves" was added. This enables the display of height growth curves
       of the simulated plants (one separate curve for each plant, the
       individual plants are identified by the position of their base
       shoots). The display can be left with the "escape"-button.

 -  Some analysis options were added. A detailed description is given
       in the documentation appendix from 1996 (see above). Have a glance
       at the submenu appearing when "analyze the actual structure" is

 -  Turtle commands A ("assignment") and K ("create local register"):
       see documentation appendix (Bayreuther Forum Oekologie, see above)
       for a detailed explanation.

       Do not use the upper-case letters A, K or any other upper-case
       letters as your auxiliary symbols in grammar files! Upper-case
       letters are reserved as special symbols with predefined purposes.

 -  The dtd syntax was extended by several symbols enabling the encoding
       of branches of deciduous trees. The new symbols are:
	  B (with 1 integer argument)   number of leaves
	  C (with 1 integer argument)   colour index (referring to ega table)
	  E (with 1 integer argument)   number of internodes of g.u.
	  F (with 1 integer argument)   number of flowers or fruits of g.u.
	  I (with 1 integer argument)   node index at the mother g.u. where
					 the current g.u. originates
					 (counted from tip of mother g.u.)
	  Q (with 1 integer argument)   short shoot series (several short
					 shoots with fixed length are
					 specified at once)
	  T (with 1 integer argument)   number of daughter buds
					 (not interpreted by grogra)
	  Y (with 1 integer argument)   number of sleeping buds
					 (not interpreted by grogra)
	  Z (with 1 integer argument)   number of dead buds
					 (not interpreted by grogra)
	  $ (without argument)          enforces absolute orientation
					 in space (like in case 1 on p. 118
					 in the Manual)
	  D (with 1 floating point argument) diameter specification
					(no longer necessarily in the form
					 (Dnb nb) )
	  . (without argument)          enforces interpretation of angles
					 (specified by W, R and S) to be
					 interpreted in terms of global
       In case 2 (Manual p. 118), L lies now in the plane which is spanned
       up by H and the  l e f t  direction L(m) of the mother shoot.
       The colour specification can be chosen interactively by the user
       before a dtd file is interpreted.

 -  A new .kub data format was created which allows for the transfer of
       more information to the radiation model MicroEnv (formerly 3dCLIP)
       than before.
       This data format replaces the non-simplified .kub format described
       in the Manual on page 132. (The "simplified" format remains

       The data files in the new .kub format for the GROGRA structures
       contain the following additional informations:

       -  Needle surface areas per cell, separately for 4 needle age classes
	  (referring to needles grown in the years t, t-1, t-2 and older
	  needles when t is the last year simulated
	  [all surface values are given in mm^2 ],

       -  Needle numbers per cell, also separately for the 4 age classes

       -  a direction information, given in the form of a vector obtained
	  as the sum of all  n o r m a l  vectors of shoots in the cell
	  under consideration (each shoot normal vector is weighted with
	  the shootlength).  Attention: this direction information differs
	  from the direction vector d described in the manual (p. 132)!

       The head lines of the file are the same as in the old format.

       The line specifying a single cell has the following content:

	  mx my mz V vol a0 a1 a2 a3 n0 n1 n2 n3 dx dy dz l e

       mx  = x coordinate of cell midpoint (see old format)
       V   = upper case letter V (marker)
       vol = sum of shoot (i.e., wood) volumes [mm^3] in the cell
       a0  = sum of whole needle surface of current year (year t) needles
	     in the cell,
       a1  = sum of whole needle surface of year t-1 needles in the cell,
       a2  = sum of whole needle surface of two-years old (year t-2) needles
	     in the cell,
       a3  = sum of whole needle surface of needles older than two years
	     (i.e. <= t-3)
       n0  = total number of current year needles in the cell,
       n1 etc. analogously,
       dx  = x component of sum of all shoot normal vectors in the cell
	     (shoot normal vector = orthogonal to direction vector of shoot),
       l   = sum of all shoot lengths in the cell,
       e   = exposition angle of the cell (cf. old format).

 -  Comments can be written into a grammar file in C language style, i.e.
       /* comment */ .

 -  Three new types of random variable types are available:
       \var x binomial p n,  /* binomial distribution with parameters
				p = probability of success,
				n = number of repetitions */
       \var x negbinomial p m,  /* negative binomial distribution with
				parameters p = prob. of success (p<1)
				and m >= 0 number of successes to obtain,
				x+m is the number of necessary trials */
       \var x poisson v,     /* Poisson distribution with parameter v */.

 -  By \randomseed n, (n being a positive integer,) the random number
       generator of GROGRA is forced into a defined state. Repeated
       execution of the same stochastic L-system will reproduce exactly
       the same structure. By
       an interactive specification of the random seed value by the user
       is enabled.

 -  The command OR(n) can be used in an L-system to specify the order of
       a branch explicitely (n must be an integer >= 0).

 -  The commands C(r) and H(r) can be used analogously to L(...), D(...)
      etc. (also with modifyers l, + and *); they specify "carbon content"
      and "hardwood diameter" of the next created shoot.

 -  A "hierarchy operator" / (normal slash, without arguments) can be used
      in L-systems to distinguish entities between the elementary unit
      (the unit created by "F") and the axis (e.g. growth units, annual
      shoots). The analysis option "distribution analysis" makes use of
      the hierarchy of entities thus defined.
      The "distribution analysis" is mainly self-explanatory. Frequency
      distributions are given in the form of tables. The entities
      defined by the hierarchy operator are referred to as "compound


Release 3.0

 -  It is possible to generate several structures from several start words
      with the same L-system file. To this end, specifications of the form
	    \axiom wrd list_of_steps,
      have to be given in the declaration part of the L-system file
      (this is only possible in the normal (RAM) mode of operation, not
      in HD mode). Here, "wrd" is a start word which should appear in one
      of the rules as the left-hand side, and "list_of_steps" is a list
      of strictly monotonically increasing positive integers which specify
      the developmental steps of the structure obtained from applying the
      grammar to "wrd" which are to be kept in memory. The list may contain
      specifications like "12-17" (meaning that steps 12, 13, 14, 15, 16,
      17 are to be kept), and may also contain just one single number.
      Accessible via graphical display (and analysis) is only the structure
      for which the start word was specified last. By
      an interactive specification of a start word is enforced (like in the
      case when no "\axiom ..." is given in the file), and this will
      generate the last structure. The other structures are accessible via
      the new turtle command
	    O(wrd, n)
      where wrd is a start word used in some "\axiom ..." specification (or
      in the interactive specification) and n is an integer corresponding
      to a step number occurring in the respective list of steps.
      The "O" command has a similar effect as "F", but instead of a shoot,
      the turtle creates a reference to the structure specified by wrd and
      n. Hence, complete (sub-) structures can be inserted many times in
      a structure, but need to be kept in memory only once.
      In relation to the "O" command, the turtle variables "l" and "d",
      normally controlling the (absolute) length and diameter of the next
      shoot, have the meaning of (relative) scaling factors for the sub-
      structure to be inserted. "l" acts as global scaling factor for all
      lengths of the substructure, "d" is an additional factor affecting
      only the directions perpendicular to the current "head" (H) direction
      of the turtle.


Release 3.1

 -  In arithmetical expressions, the function "floor(...)" (with one
      argument) can be used now. It returns the greatest integer less
      than or equal to the argument.

 -  In the command line call of GROGRA, the additional option
      can be used. It enforces that a graphical image of a standard
      view of the last generated structure is written into the file
      "name.eps" in Postscript format.

 -  A new variant of GROGRA, named "TGROGRA" ("Text version of GROGRA")
      was implemented, which doesn't use any graphical display. It can
      be used when no graphical (GL or Xwindows) display is at hand,
      or when the interactive interface costs unnecessary time.
      Evaluation of the created structures is possible with the various
      analysis options, or with the "e" option, or with the above-
      mentioned "p" option in the command line.


Release 3.2

 -  A new analysis option for several trees, distinguished by their
      colour index, and a new cubic discretization analysis format
      was introduced.
      The "several tree analysis" is essentially self-explanatory
      by the text output of GROGRA. Note that the only item by which
      individual trees are distinguished is the colour index.
      If two trees of the same colour are generated, they will not
      be distinguished in this analysis. (This is a "quick-and-dirty"-
      solution which has to be improved in a later release.)

 -  The option "List the actual structure" was complemented by a
      possibility to produce a binary data file with all informations
      about the structure.

 -  An additional analysis option for population-dynamical models,
      making a table of the frequencies of elementary units of all
      colours for all time steps, was implemented.

 -  Several new methods were introduced by Veli-Pekka Ikonen (University
      of Joensuu, Finland).

 -  A bug concerning the treatment of local register values was removed.

 -  By "\lasttofile" in the declaration part of an L-system file, it is
      possible to enforce a switching to the Harddisk mode (for the
      representation of the structure) in the last developmental step.
      The previous steps are deleted.
      The structure, written into the file "vlstru.tem", can be read
      again by GROGRA when the new menu item "read from vlstru.tem"
      is activated, or by starting GROGRA with the new command line
      parameter "v" (the first parameter, specifying a file name, has
      only a dummy function in this case - it should not be removed,
      but it has no meaning.)

 -  Additional command line options were implemented:
      "ga" writes only the last developmental step into a dtg file,
      "r"  reads a single value from the command line (the value to be
	     specified directly after the "r") to be used for the
	     variable specified with "\read" in the declaration part,
      "pa", "pb", "pd" enable different views in the Postscript file
	     (pa = side view, pb = view from above, pd = view with
	     10 degree / 20 degree aspect),
      "aq" starts two analysis methods: elementary analysis (for several
	     trees) and cube analysis (for several trees).

 -  The local register creation command KL(...) uses the current turtle
       step length value (l) for the initialization of the new register.

 -  The assignment command A is also possible in the variants A+, A*,
       Ar, Ar+, Ar*. A+ and A* are analogous to L+ etc., Ar uses a
       reference shoot (chosen by a particular sensitive function,
       number 21) instead of the nearest shoot down the structure
       where normally the value of the local register is overwritten by A.

 -  New output options are available: PovRay input format (*.pov) and
       format DXF for AutoCad (*.dxf). These interfaces can now be
       accessed via a submenu under the main menu item "Store or
       transform the actual structure".


Release 3.3

 -  A new rotation operator "RS(alpha)" was introduced into the
       turtle command language (L-system syntax). It enforces a
       rotation by alpha relative to the global z axis (the "S"
       standing for "slope").

 -  In the "elementary analysis", the number of leaves and fruits
       is given in extra lines if they are not 0.

 -  Four additional columns were added in the "pathlength analysis":
       The total length of all elementary units which are distal to the
       unit considered in the line, the total volume of these units
       (each one assumed as cylindrical), the sum of their leaf parameters,
       and the branching order of the unit under consideration.

 -  Four additional columns were added in the "lengths and angles"
       analysis (option F): one gives the z coordinate of the endpoint
       of the unit considered in the line, the other three give the
       coordinates of the (normed) direction vector of the unit.

 -  The "Transformation" menu was extended by an item "Deletion of
       colours when gu is not in a layer". The colour of a unit is
       put to 0 when the z coordinate of its midpoint is situated
       outside an interval which can be specified. This enables the
       visualization of a specific horizontal layer of the structure.

 -  The "Transformation" menu was extended by the item "Normalization
       of L to 1 and D to 0". This means that all lengths are 1 and
       all diameters (unit variable edur) 0 afterwards.

 -  The "Fusion of all axes" in the "Transformation" menu melts all
       subsequent elementary units which have the same branching order.

 -  Additional analysis options:
       (n) "topological analysis": Topological parameters of the
	    structure are calculated. This option makes use of a
	    temporary copy of the structure where all subsequent
	    elementary units of the same order are first melted into
	    one axis and then split at the branching nodes.
       (w) "coordinates": A table is generated with the number and
	    the basal x, y and z coordinate of each elementary unit
	    (except units with colour 0). Each such unit corresponds
	    to one line in the file.
       (x) "axes": All subsequent elementary units of the same
	    branching order are melted into one axis. Afterwards, for
	    each axis a line is generated which contains the following
	    number of the axis (with prefix "a"),
	    branching order,
	    basal diameter,
	    number of daughter axes,
	    average distance between these daughter axes,
	    standard deviation of this distance.
       (z) "diameter table": For each elementary unit with 2, 3 or 4
	    daughter segments, a line is generated containing the
	    following entries:
	    number of the unit (with prefix "s"),
	    number of daughter units (2, 3 or 4),
	    diameter of the unit (unit variable "edur"),
	    diameter of the first daughter unit,
	    diameter of the second daughter unit,
	    diameter of the third daughter unit (if it exists; otherwise 0),
	    diameter of the fourth daughter unit (    "            "      ).
	    This analysis can be used for checking the diameter exponent
	    of a structure.

 -  The dtd format was extended by additional possible specifications
       concerning leaves and fruits:
       \leaflength xx,    specifies a length for all leaves
			  (which are given by "Byy" in the dtd code),
       \leafbreadth xx,   specifies a diameter value for all leaves,
       \leafarea xx,      specifies an "N value" for all leaves
			  (note that this is entirely independent of
			  length and diameter)
       \leafobject xxx.lsy yy nn,
			  generates an object reference to a substructure
			  defined by the L-system file xxx.lsy (xxx being
			  an arbitrary filename) using the start word
			  yy and nn steps of L-system application.
			  The file xxx.lsy must exist. Each leaf refers
			  afterwards to the object defined by the
			  L-system. In connection with \leafobject,
			  \leaflength and \leafbreadth specify only
			  relative factors (for scale and for distortion
			  in x and y direction, respectively). Management
			  of leaf objects is analogous to shared objects
			  defined by the "O" command in L-systems.
       \fruitobject xxx.lsy yy nn,
			  analogous to \leafobject, but for fruits
			  or flowers (given by "Fyy") instead of leaves.
       \phyllotaxy xxx,   specifies a leaf arrangement (phyllotaxy)
			  for the structure to be created. xxx is one of
			  the keywords spiral, opposite or alternate
			  (default: alternate). Spiral phyllotaxy
			  assumes a rotation angle of 137.5 degrees
			  between successive leaves of the same
			  growth unit.
       \min_intn nn,      sets a minimal number of pseudo-internodes
			  for each leaf-bearing elementary unit.
			  When k leaves are present (number specified
			  by Bk), they are placed at the outermost k
			  nodes, each L/nn length units apart (L=length
			  of the elementary unit). \min_intn nn is
			  equivalent to writing "Enn" in each line
			  describing a leaf-bearing unit.
       The line(s) beginning with \leafobject and / or \fruitobject
       must stand at the beginning of the dtd file. (\leaflength,
       \leafbreadth and \leafarea can also appear in the middle of
       the file and will then change the dimensions of the subsequent
       leaves while letting the previous ones unchanged.)

 -  An additional transformation option, "special diameter analysis",
       can now be found under "Store or transform the actual structure /
       Further, special transformations". This transformation creates
       a file with filename extension ".dat" (Ascii file).
       Each line of the file describes one elementary unit (shoot)
       without inner branching nodes (i.e., first a transformation
       into a pbg structure is done, cf. pp. 121-128 of the manual).
       Column 1: Number (identifyer) of the shoot,
       column 2: diameter [mm],
       column 3: volume   [mm^3],
       column 4: leaf parameter (either dry mass [g] or area [mm^2],
		 depending on the used input data set),
       column 5: number n of daughter shoots,
       columns 5+1 to 5+n: diameter of i-th daughter shoot [mm],
		 i = 1, ..., n.
       The order of the lines (shoots) is in depth-first mode, with
       the axis-continuing shoot (shoot of same branching order) coming
       in the last place among all daughter shoots. (The order of the
       daughter shoot diameters in one line, however, is arbitrary.)

 -  Under the menu item "Store or transform the actual structure",
       subitem "Further, special transformations", two additional options
       have been introduced:
       "Delete all leaves" and
       "Differentiate leaves (petiole / blade)".
       Leaves are recognized by the formal characteristic that their
       "number of internodes" is -1. (The number of internodes can be
       specified in L-systems by the U command. When a structure is read
       from a dtd file, the specification of leaves (by B) creates them
       automatically with the corresponding parameter set to -1.)
       All leaves of the structure are either deleted or split into
       two elementary units, one standing for the leaf petiole and the
       other for the leaf blade.

 -  Under the menu item "Store or transform the actual structure",
       subitem "Save in AMAP format", an option "MTG format" was
       introduced to create a representation of GROGRA plants as
       MTGs (multiple-scaled tree graphs) in the coding used by the
       AMAP team at the CIRAD, see Ch. Godin, E. Costes & H. Sinoquet,
       A method for describing plant architecture which integrates
       topology and geometry, Ann. Bot. 84 (1999), 343-357.


Additional remarks concerning the Windows 95 version of GROGRA:

The following files should be together in one directory:
wgrogra.exe, cw3230mt.dll, grogra.col, lexpla.msg, coltest.lsy.

Start wgrogra with "a: generation of a new branching structure" /
subitem "non-sensitive growth grammar " first and load the file
"coltest.lsy" by entering its name without the extension ".lsy".
Watch the graphical appearance of the resulting vertical bar (item
"e: show the actual structure graphically"). If the bar is not
visible or has unacceptable colours (all grey or the like), either
the file "grogra.col" or the internal colour table of your machine
should be changed. The colours should (approximately) be (from bottom
to top of the bar): dark blue, green, cyan, red, magenta, brown,
light grey, dark grey, light blue, light green, light cyan, light red,
light magenta, yellow, white, white. The file grogra.col contains the
colour index values which should correspond to these colours on your
machine. (The same procedure applies to the XWindows version.)

The text output in several parts of the program depends partially
on the resolution of your screen. With a coarse screen, several
text messages of the program do not fit into one window and are
displayed in several portions, with a delay of some seconds in
between. You have to wait until a prompt "Press  to continue"
(or the like) appears before you continue with the program. You can
accelerate the display by clicking with a mouse button or with some
key from the keyboard during the time when it waits. (This applies
also for the display of step numbers when an L-system is processed.)

Currently, the message handling is not done consequently in all parts
of the program. So, it can happen that text or graphics output of
GROGRA is destroyed if you shift another window above it.

When the graphical window was resized with the mouse, click the "a" key
to redraw the content in the proper proportions.

The Windows version of GROGRA is still in its test phase, and users
are encouraged to report their experiences to the authors of the


Please, tell the author any errors, strange behaviour of the program or
suggestions for further improvement.

Goettingen, November 29, 2000

			    Winfried Kurth


Back to the GROGRA homepage

Back to Plant Modelling Group Homepage


Last modifications: October 10, 2008