ALMaSS Partridge ODdox
1.1
The partridge model description following ODdox protocol
|
The partridge model classes presented here forms part of the ALMaSS framework of models (Topping et al., 2003). ALMaSS integrates a detailed simulation of the landscape together with agent-based models of individual animals to elucidate impacts of changes in environmental factors including man's management on animal population dynamics.
The partridge model simulates partridge life-stages as clutches, chicks<5wks old, chicks >5wks< 12 wks old, and males and females. The birds exist in coveys which vary in number of members depending upon the time of year. Early in the year the overwintering coveys break up and individuals form pairs with non-sibling birds. Those that cannot find mates in the covey must seek mates in nearby coveys or search more widely in the landscape. After covey breakup, female birds search for suitable breeding locations which must contain suitable nesting habitat. Once paired and with a breeding location the pair initiate breeding, find a nest location, and lay and incubate a clutch. Birds are constantly subject to predation mortality probabilities, but during nesting the female is also subject to density-dependent mortality. After egg hatch the chicks must be fed with insects which are gathered by foraging trips in the landscape. Insect abundance and physical structure of the vegetation are used to determine the rate of energy intake, and this compared to age-determined energy requirements results in either chick growth or starvation. After 5 weeks of life it is assumed that, like adults the chicks can always find food since they no longer require only insects. After clutch hatch the chicks and parents form a covey which will exist until covey breakup in the next season. During the intervening time barren pairs or single birds may join the covey providing potential mates for the following year. Losses to hunting are simulated as an autumn hunt.
Over the last 5 decades grey partridge (Perdix perdix) populations have undergone major declines across Europe in a more or less synchronised manner. The grey partridge ABM was built as part of the ALMaSS framework (The Animal, Landscape and Man Simulation System) with a view to investigating causes of this decline and evaluating management strategies for the species. Some of the factors implicated in the decline of partridges have been reduced chick survival due to intensive herbicide and pesticide use, changes in landscape structure, increase in predation pressure etc. The cause of partridge declines is probably multi-factorial since many of the factors co-vary either through direct linkage or through common causes e.g. larger fields and more pesticide use often go hand in hand but are not causally linked. The principal objective of the partridge model is to therefore determine the relative importance of different factors on the population dynamics of partridges.
Individual partridges shared a set of common state variables and some that were unique to each life history class. The common state variables are inherited from a base class which is never actually used to create a partridge object, but only to house these common attributes and methods. The common attributes are:
The Partridge_Clutch class introduces 3 new state variables:
The Partridge_Chick class is descended from Partridge_Base and introduces 2 new state variables:
The Partridge_Chick2 is descended from the Partridge_Chick class and dose not introduce new state variables.
Partridge_Male is descended from Partridge_Base and introduces 3 new state variable:
Partridge_Female is descended from Partridge_Base and introduces 12 new state variables:
The partridge model consisted of 5 life-stage classes (Fig. P1): Clutch, Chick, Chick2, adult female and adult male. Partridge chicks were separated into 2 classes (< 6 weeks old and > 6 weeks old) because chicks > 6 weeks of age had survival rates no different than those of adult birds (Potts and Aebischer 1995; Potts 1986).
Figure 1: Partridge state diagram. NB All stages could transition to state Dying from any other behavioural state due to external messaging.
The "life-cycle" in the simulation is as follows:
At any point in time a model partridge is in a behavioural state, which is represented by a method. Transitions to different behaviours are controlled by either messaging or as conditional rules (usually in the form or a return parameter on calling the state behaviour method in Step (see below).
3.a.i Mortality
A partridge object can die (due to daily mortality, farm event etc) during any behavioral state. If this happens its behavioral state is changed to Dying and it is removed from the simulation. All objects related to the dead partridge object (i.e. clutch, chicks, mate, covey etc.) are informed of its demise through messages. Clutch, Chick, and Chick2 objects are subject to a single individual daily mortality parameter for non-explicitly modelled mortalities (e.g. predation). The daily mortality in adult female and male partridge objects is divided into 3 parameters each and provided more control over mortalities associated with different times of year. In addition there is a scaling factor applied for birds that are alone i.e. a covey size of 1. Daily mortality in adult birds could be varied in spring (February and March), Summer/Autumn (April to October) and, Winter (October to February).
All life-stage classes were also subject to agricultural mortality and the model includes density-dependent predation mortality on incubating females and clutches.
For most of the year partridges live in family groups known as a covey and simulated by Partridge_Covey. To maintain realism many of the common behaviors exhibited by individual male and female partridges are incorporated into a separate covey class (Partridge_Covey). All partridge objects whether alone or in a group are always part of a covey. All behaviours related to movement, foraging, habitat quality assessment, and nest location are build into the covey class (see Partridge_Covey::MoveDistance, Partridge_Covey::MoveMagicVegToFood, Partridge_Covey::NestFindLocation, Partridge_Covey::HabitatEvaluate), as well as covey administrative operations such as keeping track of chicks and pairing and covey breakup (dissolve), and mortality functions (e.g. Partridge_Covey::ActOnParentDeath).
At the start of the breeding season pairing is possible for all members within a covey depending upon their age and relatedness. Pairing occurs with a previous mate or between members who were not blood related over 2 generations. Paring birds received pcomm_OnStartBreeding message and the covey starts to dissolve with all paired members forming their own new covey.
Single males and females from the covey stay together until other non-pair coveys come within a customisable distance (see Partridge_Covey.cpp::cfg_min_merge_dist ) meters when single males could engage in a 'covey hopping' behaviour and find mates in nearby covies. The original covey dissolves completely when the last remaining unpaired female either pairs or dies. Once paired, a breeding pair do not accept more birds into their covey at this point. The covey proceeds to find suitable nesting area.
If the partridge pair nest successfully and have chicks they all now belong to the same covey. Coveys also grow in size when barren pairs (a covey with 2 partridges) or single adults (a covey with 1 partridge) within Partridge_Covey.cpp::cfg_min_merge_dist distance join a family group. This is allowed up to a maximum of 4 extra adults. Males and females who joined a family group become 'uncles' and 'aunts' to the chicks. All adult coveys resulting from the merger of barren pairs and single individuals are also permissible, up to a maximum of 8 individuals. Two family groups (pair + chicks) never merge in the model. Merging of coveys occurs only between May 31st and March 1st of the following year and only if all adults within the coveys were in behavioral state Flocking.
Naturally partridge objects interact with each other during a simulation run, but this can cause concurrency issues since ALMaSS is designed to run on seriol computers. For example when an incubating female is killed by a predator the clutch needs to be killed immediately afterwards, letting the eggs develop while the mother is dead would lead to model incongruity, especially if they subsequently hatched. As with other ALMaSS models, concurrency problems between partridge objects were avoided in the model by defining execution in a hierarchical structure.
During the course of each time step every partridge object runs through 3 important sub-time steps called BeginStep, Step, and Endstep. The Population_Manager controls the order of the execution of the 3 sub-time steps within each time step. For each of the sub-time steps the hierarchy of execution started with partridge clutches followed by chick1, chick2, male, female, and lastly covey objects (Table 1):
Tabel 1: Partridge states possible for each class during each time-step sub-step.
In BeginStep all objects are subjected to the daily backround mortalities, if they surivived this they are subject to potential mortality due to a management eventa that occurred at that location. In BeginStep adult male and female partridges can also die if their lifespan was exceeded. The lifespan of adult partridge objects differed among each other (as a random integer between a minimum and maximum). Objects that died as a result of daily mortality, a farm event, or due to old age transitioned immediately to Dying. The objects that survived BeginStep, remained in their behavioral state unless they died later while being subjected to an alternate mortality parameter (e.g. predation on incubating females) or received a message (e.g. OnMumDead message received by clutch objects) that caused an immediate behavioral transition.
After BeginStep has been executed for all objects Step is called starting with partridge clutches untill all objects have signalled they are finished with Step. This can be after a number of different behaviours are carried out..
During Step partridge clutches remain in the behavioral state they are in, unless they receive messages that result in an immediate behavioral state transition. However, Chick Chick2 objects can mature into Chick2 and adult objects respectively. The Step code for female and male objects performs activities according to the behavioral state they are in (e.g. a female object in behavioral state Incubating will perform the role of incubating a clutch object). If there are chicks present during Step then at least one adult will initiate a foraging movement to gather food for the chicks. When the Step code has finished the EndStep is called for all objects.
For partridge Clutch, Chicks, and Chick2 objects the EndStep executes behaviors based on what has happened to their parent objects. If parent objects are alive after Step, partridge clutches either hatch or develop, otherwise they transition to Dying. Similarly Chick and Chick2 objects either develop or transition to Dying depending on the status of their parents and the food collected during Step.
EndStep did not do anything in female and male adult partridges. One day was added to the age of objects that survived the EndStep.
Partridge population dynamics, use versus availability of resources (i.e. resource dynamics), and movement patterns are emergent properties of the model. A number of emergent population descriptors may be extracted from the model. A few examples are:
Female and male adult partridges exhibit many adaptive traits. They are:
Fitness is measured by the ability of individuals to survive and reproduce. As such there are a number of behaviours which relate to this. Examples are:
Model individuals did not perform prediction.
Sensing/knowing mechanisms were modeled implicitly on the basis of rules; therefore, individuals were able to sense/know each variable accurately. Patterns in partridge biology are well documented but underlying mechanisms as to why they occur are not always well understood. For example, covey break up and pairing starts in the end of January but why partridges do this during this time is not completely understood. Also intra-family mating is not observed in nature. The sensing/knowing mechanisms behind these behaviors are not known but the patterns are clearly documented. The assumption we make is that we are accurate in following patterns observed in field data by creating simple rules though the sensing/knowing mechanisms are not modeled explicitly. Variables considered by adult female partridge objects in their decisions were:
Variables adult partridge males sensed/knew were:
Coveys were able to move and exert pressure on other coveys because they sensed/knew:
Individual model partridges can communicate with each other through messages (see Partridge_Communication). Types of inter-partridge communcation handled by this class are listed in TypeOfPartridge_Communication. Messages are passed via Partridge_Communication::PassMessage and the receiver executes specific code depending upon the message passed and their current state. Complex behavioral patterns are possible since the effect of a message depend on the behavioral state of the receiving individual e.g. a pcomm_Mating message results in calling Partridge_Female::OnMating which depending whether she has a 'territory' already results in either a transition to the state pars_FBuildingUpResources or to pars_FFindingTerritory.
Interactions in the model were:
Stochasticity is used extensively within the model, usually to deterine probabilisitic results, where there is no more detailed mechanism modelled. Examples are:
The model makes extensive use of the Covey as a collective (Partridge_Covey). A covey consisted of one or more partridge objects. Covey objects do not have their own state variables or traits but performed functions common to adult male and female partridges. Good examples of their use is in updating food collected where it is possible for almost any bird from the covey to initiate this behaviour ( see Partridge_Chick::BeginStep & Partridge_Covey::MoveDistance). Primary covey functions are involved with foraging, movement, finding nest locations and mates (e.g. see Partridge_Covey::MoveDistance, Partridge_Covey::MoveTo, Partridge_Covey::NestFindLocation, Partridge_Covey::FindMeAWife ) and with inter- and intra-covey communcications (See also under Process Overview above).
One advantage of the partridge model was the flexibility in obtaining any possible desired information from the system. Information needed from the model could be queried (i.e. by writing C++ code to extract the information) and obtained in output text files. Information could also be obtained at different time scales (daily, weekly, monthly, yearly etc.). Typical output from a simulation run contained annual information on variables such as number of males and females in september, number of chicks in september, number of clutches (including relayings), number of clutches that hatched successfully, number of hens predated, number of dead chicks, males, and females etc.. This information is by default logged to a text file called POM_InfoBase.txt.
Partridge_Population_Manager has a number of methods where outputs can be generated e.g. Partridge_Population_Manager::DoFirst. These methods are safe points during execution where all object administration should be done and therefore counts of individuals etc are internally consistent.
Each simulation run started with a number of female and male partridge objects that were randomly placed within a landscape. The model is highly configurable and parameter values are controlled through a set of configuration variables set using text file inputs. If these variables are not set by the user then default values are used. All these variables have names starting with 'cfg_'. For a linked set of default configuration entries see the table below.
Input parameters vary with each application of the ALMaSS partridge model but cover these basic types:
Primary interactions are between the partridge classes and Farm and Crop classes, and the interface of the Landscape, which is repsonsible for supplying the necessary local environmental information, Table 2 below:
Code link | Configuration file entry | Default Value |
Partridge_All.cpp::cfg_buildupwait | PAR_BUILDUP_WAIT | 0 |
Partridge_All.cpp::cfg_female_mowing_chance | PAR_FEMALEMOWNMORTALITY | 100 |
Partridge_All.cpp::cfg_par_ad_cut | PAR_AD_CUT_MORT | 1 |
Partridge_All.cpp::cfg_par_adult_mortality_alone | PAR_ADULT_MORTALITY_ALONE | 1.4 |
Partridge_All.cpp::cfg_par_adult_mortalitySpring | PAR_ADULT_MORTALITYSPRING | 96 |
Partridge_All.cpp::cfg_par_adult_mortalitySummer | PAR_ADULT_MORTALITYSUMMER | 0.00001 |
Partridge_All.cpp::cfg_par_adult_mortalityWinter | PAR_ADULT_MORTALITYWINTER | 217 |
Partridge_All.cpp::cfg_par_base_mortality | PAR_BASE_MORTALITY | 0 |
Partridge_All.cpp::cfg_par_ch_cut | PAR_CH_CUT_MORT | 5 |
Partridge_All.cpp::cfg_par_chick_mortality | PAR_CHICK_MORTALITY | 2043 |
Partridge_All.cpp::cfg_par_chick2_mortality | PAR_CHICK_TWO_MORTALITY | 1 |
Partridge_All.cpp::cfg_par_cl_cut | PAR_CL_CUT_MORT | 29 |
Partridge_All.cpp::cfg_par_clutch_mortality | PAR_CLUTCH_MORTALITY | 135 |
Partridge_All.cpp::cfg_par_days_per_egg | PAR_DAY_PER_EGG | 1.5 |
Partridge_All.cpp::cfg_par_days_to_make_nest | PAR_DAYS_TO_MAKE_NEST | 5 |
Partridge_All.cpp::cfg_par_extraction_rate | PAR_EXTRACTION_RATE | 0.0085 |
Partridge_All.cpp::cfg_par_female_incubation_mortality_const | PAR_FEMALE_INCUBATION_MORTALITY_CONST | 1.00192 |
Partridge_All.cpp::cfg_par_female_incubation_mortality_slope | PAR_FEMALE_INCUBATION_MORTALITY_SLOPE | -0.00122 |
Partridge_All.cpp::cfg_par_female_movement_max | PAR_FEMALE_MOVEMENT_MAX | 100 |
Partridge_All.cpp::cfg_par_incubation_period | PAR_INCUBATION_PERIOD | 24 |
Partridge_All.cpp::cfg_par_infertile_eggs | PAR_INFERTILE_EGGS | 800 |
Partridge_All.cpp::cfg_par_last_brood_date | PAR_LAST_BROOD_DATE | 180 |
Partridge_All.cpp::cfg_par_male_gives_up | PAR_MALE_GIVES_UP | 170 |
Partridge_All.cpp::cfg_par_MaleFlyingDistance | PAR_MALEFLYINGDISTANCE | 2000 |
Partridge_All.cpp::cfg_par_MaleMateSearchArea | PAR_MALEMATESEARCHAREA | 500 |
Partridge_All.cpp::cfg_par_mature_threshold | PAR_MATURE_THRESHOLD | 84 |
Partridge_All.cpp::cfg_par_max_lifespan | PAR_MAX_LIFESPAN | 3650 |
Partridge_All.cpp::cfg_par_max_terr_qual | PAR_MAX_TERR_QUAL | 13000 |
Partridge_All.cpp::cfg_par_min_lifespan | PAR_MIN_LIFESPAN | 1825 |
Partridge_All.cpp::cfg_par_min_no_eggs | PAR_MIN_NO_EGGS | 7 |
Partridge_All.cpp::cfg_par_min_terr_qual | PAR_MIN_TERR_QUAL | 6900 |
Partridge_All.cpp::cfg_par_start_dissolve | PAR_START_DISSOLVE | 30 |
Partridge_All.cpp::cfg_par_starve_threshold | PAR_STARVE_THRESHOLD | 4 |
Partridge_All.cpp::cfg_par_triggerlayingvar | PAR_TRIGGERLAYINGVAR | 48 |
Partridge_All.cpp::cfg_par_triggerlaying | PAR_TRIGGERLAYING | 850 |
Partridge_Covey.cpp::cfg_min_merge_dist | PAR_MIN_MERGE_DIST | 50 |
Partridge_Covey.cpp::cfg_nest_field | PAR_NEST_FIELD | 1 |
Partridge_Covey.cpp::cfg_nest_fieldboundary | PAR_NEST_FIELDBOUNDARY | 200 |
Partridge_Covey.cpp::cfg_nest_hedgebank0 | PAR_NEST_HEDGEBANKZERO | 1 |
Partridge_Covey.cpp::cfg_nest_hedgebank1 | PAR_NEST_HEDGEBANKONE | 100 |
Partridge_Covey.cpp::cfg_nest_hedgebank2 | PAR_NEST_HEDGEBANKTWO | 200 |
Partridge_Covey.cpp::cfg_nest_naturalgrass | PAR_NEST_NATURALGRASS | 100 |
Partridge_Covey.cpp::cfg_nest_permpastlow | PAR_NEST_PERMPASTLOW | 50 |
Partridge_Covey.cpp::cfg_nest_permsetaside | PAR_NEST_PERMSETASIDE | 100 |
Partridge_Covey.cpp::cfg_nest_railway | PAR_NEST_RAILWAY | 100 |
Partridge_Covey.cpp::cfg_nest_roadside | PAR_NEST_ROADSIDE | 100 |
Partridge_Covey.cpp::cfg_NOT1950sinsects | PAR_NOTFIFTIESINSECTSSCALER | 0.1 |
Partridge_Covey.cpp::cfg_par_bio_hindrance_inv | PAR_BIO_HINDRANCE | 0.00667 |
Partridge_Covey.cpp::cfg_par_bio_hindrance_inv | PAR_BIO_HINDRANCE | 0.00667 |
Partridge_Covey.cpp::cfg_par_chick_extra_mort | PAR_CHICK_EXTRA_MORT | 200 |
Partridge_Covey.cpp::cfg_par_covey_drift_enable | PAR_COVEY_DRIFT_ENABLE | true |
Partridge_Covey.cpp::cfg_par_covey_drift_enable | PAR_COVEY_DRIFT_ENABLE | TRUE |
Partridge_Covey.cpp::cfg_par_covey_drift_speed | PAR_COVEY_DRIFT_SPEED | 2 |
Partridge_Covey.cpp::cfg_par_covey_drift_speed | PAR_COVEY_DRIFT_SPEED | 2 |
Partridge_Covey.cpp::cfg_par_firstmerge | PAR_FIRSTMERGE | 170 |
Partridge_Covey.cpp::cfg_par_flyto_stepsize | PAR_FLYTO_STEPSIZE | 1 |
Partridge_Covey.cpp::cfg_par_flyto_stepsize | PAR_FLYTO_STEPSIZE | 1 |
Partridge_Covey.cpp::cfg_par_force_abs_limit | PAR_COVEY_FORCE_ABS_LIMIT | 100 |
Partridge_Covey.cpp::cfg_par_force_abs_limit | PAR_COVEY_FORCE_ABS_LIMIT | 100 |
Partridge_Covey.cpp::cfg_par_force_below | PAR_COVEY_FORCE_BELOW | 0.1 |
Partridge_Covey.cpp::cfg_par_force_below | PAR_COVEY_FORCE_BELOW | 0.1 |
Partridge_Covey.cpp::cfg_par_force_enable | PAR_COVEY_FORCE_ENABLE | true |
Partridge_Covey.cpp::cfg_par_force_enable | PAR_COVEY_FORCE_ENABLE | TRUE |
Partridge_Covey.cpp::cfg_par_force_ignore_below | PAR_COVEY_FORCE_IGNORE_BELOW | 0 |
Partridge_Covey.cpp::cfg_par_force_ignore_below | PAR_COVEY_FORCE_IGNORE_BELOW | 0.1 |
Partridge_Covey.cpp::cfg_par_force_ignore_dist_sq | PAR_COVEY_FORCE_IGNORE_DIST_SQ | 250000 |
Partridge_Covey.cpp::cfg_par_force_ignore_dist_sq | PAR_COVEY_FORCE_IGNORE_DIST_SQ | 250000 |
Partridge_Covey.cpp::cfg_par_force_speed | PAR_COVEY_FORCE_SPEED | 2 |
Partridge_Covey.cpp::cfg_par_force_speed | PAR_COVEY_FORCE_SPEED | 2 |
Partridge_Covey.cpp::cfg_par_hei_hindrance_inv | PAR_HEI_HINDRANCE | 0.04 |
Partridge_Covey.cpp::cfg_par_hei_hindrance_inv | PAR_HEI_HINDRANCE | 0.04 |
Partridge_Covey.cpp::cfg_par_move_fuzzy_chance | PAR_MOVE_FUZZY_CHANCE | 50 |
Partridge_Covey.cpp::cfg_par_movequal_histlimit | PAR_MOVEQUAL_HISTLIMIT | 3 |
Partridge_Covey.cpp::cfg_ParShootStartYear | PAR_SHOOTSTARTYEAR | 1 |
Partridge_Population_Manager.cpp::cfg_breedingpairs_date | PAR_BREEDINGPAIRS_DATE | 90 |
Partridge_Population_Manager.cpp::cfg_Emigration | PAR_EMIGRATION | 1 |
Partridge_Population_Manager.cpp::cfg_FemalePopSizeMaxCutoff | PAR_FEMMAXPOPSIZECUTOFF | 7000 |
Partridge_Population_Manager.cpp::cfg_flockdata_date | PAR_FLOCKDATA_DATE | 270 |
Partridge_Population_Manager.cpp::cfg_HindranceScalingFactor | PAR_HINDRANCE_SCALING | 1000 |
Partridge_Population_Manager.cpp::cfg_IndividualEmigration | PAR_INDIVIDUALEMIGRATION | 3500 |
Partridge_Population_Manager.cpp::cfg_kfactoroutput_date | PAR_KFACTOROUTPUT_DATE | 90 |
Partridge_Population_Manager.cpp::cfg_par_energyslope_perday | PAR_ENERGYSLOPE_PERDAY | 1.06 |
Partridge_Population_Manager.cpp::cfg_par_rainfactor | PAR_RAINFACTOR | 0.2 |
Partridge_Population_Manager.cpp::cfg_ParHuntingGridSize | PAR_HUNTINGGRIDSIZE | 1000 |
Partridge_Population_Manager.cpp::cfg_ParHuntingThreshold | PAR_HUNTINGTHRESHOLD | 1 |
Partridge_Population_Manager.cpp::cfg_ParHuntingType | PAR_HUNTINGTYPE | 1 |
Partridge_Population_Manager.cpp::cfg_ParShotMax | PAR_SHOTPERCENTAGE_MAX | 1500 |
Partridge_Population_Manager.cpp::cfg_ParShotMin | PAR_SHOTPERCENTAGE_MIN | 1500 |
Partridge_Population_Manager.cpp::cfg_rainscaling | PAR_RAINSCALING | 0.767 |
Partridge_Population_Manager.cpp::cfg_springcensusdate | PAR_SPRINGCENSUSDATE | March+21 |
Partridge_Population_Manager.cpp::cfg_StartingNumberFemalePartridges | PAR_STARTING_NO_FEMALES | 5000 |
Partridge_Population_Manager.cpp::cfg_StartingNumberMalePartridges | PAR_STARTING_NO_MALES | 5000 |
Partridge_Population_Manager.cpp::cfg_unpaireddata_date | PAR_UNPAIREDDATA_DATE | 150 |
ODdox documentation was created by combining a modified version of the ODD protocol (Grimm et al. 2006) with documented code using doxygen (van Heesch, 1997) to create what we term ODdox documentation. The original ODD (Overview, Design, Detail) protocol divides the model documentation into defined sections covering aspects of model structure and functioning, and finally model details. The new ODdox protocol (Overview, Design, doxygen) broadly follows ODD protocol, but is completed and augmented by extracting comments from the source code. The details of the model are therefore described via descriptions of classes, methods, and variables using hyperlinks to the relevant sections in the source code. In contrast to the ODD, this means that by far the major part of the documentation is placed outside the traditional ODD sections, but linked to them via hyperlinks. The ODdox was specifically designed to facilitate documentation of large object-oriented models with many interacting components, and to provide a flexible way of building documentation as the software is developed. It is therefore structured following logical divisions of the model entities, primarily base class types. At each subdivision there is a class or set of linked classes in focus, and six of the seven ODD sections are written for these classes. The "Submodels" section of ODD becomes superfluous since any links to sub-models are covered by class descriptions for the classes in focus, and submodels per se should not exist. However, there may be important connections between the focus classes and other ODdox sections (e.g. other species, environment). A new section, "Interconnections", is used to describe these and provide html links to them. This approach permits the documentation of large models to be built as an expandable library, and rather than rewriting documentation for additions only requires judicious updating of the interconnection section, doxygen performs the rest of the tasks based on software comments in the new code. Our aim in developing ODdox was therefore to provide an easier, more complete, and more flexible method of documenting large models together with a more user friendly interface, benefitting developers and readers alike.
Grimm, V., Berger, U., Bastiansen, F., Eliassen, S., Ginot, V., Giske, J., Goss-Custard, J., Grand, T., Heinz, S.K., Huse, G., Huth, A., Jepsen, J.U., Jorgensen, C., Mooij, W.M., Muller, B., Pe'er, G., Piou, C., Railsback, S.F., Robbins, A.M., Robbins, M.M., Rossmanith, E., Ruger, N., Strand, E., Souissi, S., Stillman, R.A., Vabo, R., Visser, U., & DeAngelis, D.L. (2006) A standard protocol for describing individual-based and agent-based models. Ecological Modelling, 198, 115-126.