Devon crab model 3

No preview image

This model is seeking new collaborators — would you please help?

2 collaborators

Paul_hart_july_2020 Paul Hart (Author)
Default-person Morgane Amelot (Team member)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by the author
Model was written in NetLogo 6.2.2 • Viewed 411 times • Downloaded 58 times • Run 0 times
Download the 'Devon crab model 3' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


WHAT IS IT?

Overview, Design concept and Details (ODD) for crab fishery model Following the scheme proposed by Railsback and Grimm (2019) Agent-based and Individual-Based Modeling. A practical introduction, 2nd Edition. Princeton University Press.

Overview

  1. Purpose and patterns.

The model is designed to capture the behaviour of female crabs, using a few movement rules, as they move through the Inshore Potting Agreement (IPA) area off south Devon between the ports of Salcombe in the west and Dartmouth in the east. The model also includes the location and number of pots deployed by fishers exploiting the crabs in the IPA. Each fisher has a fixed area he/she operates in and where pots are left all the year round. If crabs encounter a patch with pots it is caught with a given probability. The ultimate aim is to create a model that could be used to explore the assumptions behind length based Virtual Population Analysis, which is currently used to assess the status of the stock in the Western English Channel and to be used as a tool to manage the crab stock at a local (IPA) level by providing information on sustainable catch numbers. An additional aim of this model is to explore which movement rules for the crabs produce the pattern of crab catches gathered from the crab fishers.

  1. What patterns are used to determine how useful the model is for its purpose?

Data gathered during a year-long sampling programme on board vessels of a subset of the crabbing fleet showed that catches in the west of the IPA were smaller than those on the east. The data also showed that small crabs dominated the catches within the first three nautical miles from the shore whilst the catch from three miles out are larger. The model output will be analysed to determine whether these two patterns are replicated. We also used log book data on monthly catches over a ten-year period to determine the annual pattern of catches. The model output over a ten-year period will be checked against this sequence of data to determine whether it is replicated.

  1. Entities, state variables and scales. The model includes:

The seabed – this is divided into patches with side representing 0.5 km. They are labelled by a code characterising whether it is in the IPA and if in it, each patch’s status within that area, such as closed all year to mobile gear or open at some times in the year to mobile gear. The patches also have a substrate type and depth.

Crabs – Only female crabs are modelled. They are divided into three size groups, small, medium and large, representing elements of the natural population structure. The size structure of the south Devon crab population is given by Sheehy and Prior (2008) where a von Bertalanffy type equation was fitted to carapace width at age for females. The equation that best fitted the growth curve of females was;

Lcw= 〖L(∞ ) (1- e^(-0.46 × (t+0.54) ) )〗^3

Where Lcw = carapace width L∞ = asymptotic carapace width k = 0.46, rate at which the curve approaches the asymptote. t = age in years t0 = -0.54, age at which length would be zero.

Using this curve the carapace width was calculated for each age between 3 and 9, which includes most of the crabs vulnerable to traps. It is then assumed that the small crabs in the model represent those age 3, 4 and 5, medium are those crabs that are age 6 and 7 and finally ages 8 and 9 make up the large size group. These have mean carapace widths of 133.9mm, 179.9mm and 193.8mm. Using a relationship between carapace width and weight for female crabs around the Isle of Man, from Öndes et al (2017) these widths are translated into weights with small crabs weighing 357g, medium 852.7 and large 1061.3g.

As a result of a Defra tagging programme (Hunter et al., 2013), it is known that female crabs move from east to west down the English Channel. Using this information, movement rules for the crabs are designed to replicate this westward migration. The model is also run with random moves to explore the difference between the observed movements and an alternative.

Fishers are not modelled individually but their activity is represented by their pots which are set in fixed locations for each vessel. There are 20 vessels and each patch that is part of a vessel’s ‘territory’ contains 16 pots. The number of patches associated with a vessel is derived from the total number of pots each fisher deploys divided by 16. It is assumed that pots are emptied every day. Scale – the IPA area and some of the sea area surrounding it is divided into 120 (W-E) x 80 (N-S) patches each with side 500m. Land is represented by 4,962 patches and 4,718 represent the sea area.

The time scale is one day (24h) so changes happening within a day are not accounted for. The program keeps track of days and years. A run of the program extends mostly for 15 years. The first five years recruitment of new crabs from the east and south of the area for each crab size is constant. This assumes that crabs recruit to the fished stock at age five (Sheehy and Prior, 2008). From year six on recruitment is calculated from a temperature dependent recruitment function.

The equation (1) used is

R=(SS×0.1(SST-5))8/365 where R = Recruits entering per day SS = Spawning stock at day 330 SST-5 = Mean sea surface temperature for days 1 - 100 off Plymouth five years earlier.

The 8 is a scaling factor to generate sufficient recruits to sustain a crab population sufficiently large to yield a catch approximately one tenth of the actual catch. Dividing by 365 converts the annual recruitment to a daily value. One tenth actual population size was used so that model run times over fifteen years were not prohibitively long.

As a result of the fixed recruitment in the first five years, the number of crabs caught would not be a proper representation of the influence of environmental factors on catch. The catch for the final 10 years of a 15 year run of the model is used for comparison with the ten years of logbook data from four crab boats.

  1. Process overview and scheduling

This deals with the processes that change the state variables. What are the model’s entities doing? The schedule must be sure that an ACTION specifies (a) which model entity exerts (b) what process in (c) what order.

For the model there are the following entities with the actions they can execute.

Entity action

Crabs/turtles move, choose a substrate, respond to the density of other crabs on a patch they might move to, hibernate, move into the area, die naturally, be caught in a pot or leave the area.

The order these are performed in each day is as follows: Decide whether to hibernate Choose the next patch to move to and then move Die from natural causes with a set probability of dying New crabs move into the area from the east and south At day 330 the number of crabs of the three sizes are counted to determine spawning stock size If the crab is in a patch with pots then it is caught with a given probability.

Sea bed /patches are either in the IPA or not, do or do not have pots, a depth and a substrate type. The temperature is the same for all patches and is read from a file each day.

Crabs move each day unless the temperature is less than the temperature at which hibernation starts. Their choice of new patch is determined by the patch 180º ahead that has the smallest number of other crabs, the favoured depth and substrate type.

New crabs appearing on the eastern and southern margins of the modelled area simulate reproduction/recruitment.

Fishers empty their pots every day producing a daily record of catch although this periodicity can be changed by only recorded catch on a reduced number of days in a year giving weekly or monthly catch numbers. Design concepts

  1. Design concepts Basic principles. The model investigates how the crab catch from the IPA is a function of environmental variables as individuals pass through the exploited area. The immigration rate is a reflection of recruitment of new crabs from the eastern and southern edges of the modelled area. New recruits come from all three sizes of crab. The size of the crab on entry to the modelled area determines how it moves. Small crabs prefer depths less than 30 m, medium crabs prefer depths greater than 30m but less than 40m whilst large crabs prefer water over 40 m deep. Females stop moving when the sea surface temperature falls below a set value, mostly 11ºC for the majority of the simulations run. The model is used to explore how catch varies through the year as a function of temperature, depth and sea bottom properties.

Emergence. The distribution of the three different sizes of crabs across the IPA and surrounding area, is an emergent property of the model. This in turn produces the spatial and temporal pattern of catches across the IPA. The spatial and temporal pattern of exploitation emerges as does the rise and fall of total annual catch as a function of the recruitment rate of new individuals at the east and south margins of the area.
Adaptation. What adaptive behaviours do agents have? The crab distribution is steered by depth and bottom type. Crabs are also influenced in their decisions by whether they are at a stage during which they would be carrying eggs or not and how many other crabs are in the same patch.

How are the behaviours modelled? The crabs make their choices on the basis of what they are trying to achieve, although the choices are simplified. For the crabs their objectives differ with the stage in the animal’s life cycle. Whilst the temperature is above the hibernation temperature the crabs continue their march through the area moving from east to west. In reality crab movement day to day is probably dictated by food availability, which would allow them to maximise growth rate. At present we don’t know enough about the feeding behaviour of the crabs to model foraging behaviour in detail. Consequently, we represent growth by assuming it is linear and that crabs that are small and medium size in one year become the medium and large in the next. Crabs decide which patch to move to on the basis of its substrate type, depth and how many other crabs are on the patch. The last factor is a proxy for competition for food where we assume that more crabs on a patch means that there is less food for the individual about to move. Objectives. What measure of future success of the agents is incorporated in the decision process? The measure of success for a female crab is to make it alive until the time comes for it to stop moving and bury in the sand. For the crabs, the choices we model are mostly about choosing the right habitat. Although not modelled explicitly, these choices are those that are assumed to bring about good growth, strong survival and ultimately successful reproduction. We are assuming that habitat choice is positively correlated with fitness (in the Darwinian sense). The model also takes account of the number of crabs on a patch. Favourable patches with the right substrate are likely to attract more crabs than will less favourable patches. The more crabs there are on a patch then it is likely that the feeding rate will drop, so we have to incorporate a mechanism that allows individuals to assess the number of competitors and change their behaviour accordingly. Once the sea temperature falls below a set level, 11ºC in the majority of simulations, it is assumed that females begin their hibernation period when they bury in the substrate and incubate their eggs. In the model this is reflected by the stationary state of the crabs. They are still subject to natural mortality.

Learning. Agents do not change their adaptive traits as a result of learning. Prediction. A crab predicts future fitness through its decision rule to pick the next patch with the best substrate and the preferred depth. The best substrate in the non-reproductive period of the year is the one that gives the best feeding opportunities. The high level of competition on the best sites and the need to reduce this competition by moving predicts that the crabs are driven to move from where they are so generating the continuous movement observed. Of course, the rule of ‘move to the best patch’ will not necessarily mean that all crabs will move from east to west, as observed in the tagging programme. To achieve this, we have to impose a rule so that a female crab can only choose patches in the 180º arc to the west. This limit may seem arbitrary but can be given a good biological basis by proposing that the female has to do this to ensure that her eggs are released in the west so that the current flowing east up the Channel will keep her offspring in the appropriate habitat. This westward movement could also explain why the females keep moving and one might expect a female to move less when already in the west than when further east up the Channel. As our model covers an area which is only 60 km wide, a big differential in the need to move west is unlikely. This behaviour is a prediction about the habitat and its relation to the future fitness of the individual incorporated into the adaptive behaviour of the crab.

Prediction in the model is only implied and not an outcome of learning or memory. Sensing. Crabs are able to sense the substrates of the neighbouring patches and how many other crabs will be on the next prospective patch. How they do these tasks is not explicitly modelled, they just ‘know’.

Interaction. Crabs will interact with each other on a given patch. When they look around to the west for a new patch to move to, they look at not only the substrate type but also how many other crabs are there and does the patch have the right substrate with the fewest competitors. The model does not deal with the exact mechanism of the competitive interaction between individuals. This could be by direct interactions over food or by resource depletion both of which happen at a scale below that of the models. Stochasticity. A random number generator is used to determine whether or not a crab will die on a given day. The daily natural mortality rate is set on a slider and is calculated for each crab on each day as “mortality (from the slider) ± a number chosen by the program between 0 and 0.001”. The same is true for capture in a pot so that capture probability qn is “catchability from the slider for each crab size” ± a number chosen by the program between 0 and 0.5”. This introduction of a stochastic element represents the chance nature of death by natural causes and the fact that the crab encountering a pot is to some degree due to chance. The variations around the mean are normally distributed. In addition, the mean sea surface temperature each day also has a standard deviation and as the programme runs it adds or subtracts to the mean a number between 0 and the standard deviation.

Collectives. There are no collectives that act as a unit. There will be size classes of crabs, but these do not behave as a group. In later developments it would be interesting to incorporate scallop fishers into the model so as to examine the interactions between static and mobile gear.

Observation. Output from the model includes for each vessel, day and year, the crab catches as a total and by size, the total number of crabs in the modelled area and their partition into the three sizes. The data that is output allows the catches to be assigned to specific areas in the IPA. Output of the spawning stock size divided into the three crab sizes along with the recruitments that derived from this spawning stock size is sent to a separate data file. Each vessel is given an individual switch on the interface. Using this catch from that vessel can be recorded or not so allowing for a sampling regime using different numbers of vessels recording their catches at different intervals as selected on the sampling-interval slider. The model interface also shows the values of all the variables input from sliders, the total crab population, the catch and the mean sea surface temperature (see supplementary Figure S1).

Details

  1. Initialisation Each run starts with a predetermined number of crabs randomly distributed through the sea area modelled. The pots used to catch the crabs are in set positions where they remain at all times. The seabed type is a fixed variable for each patch, and sea surface temperature has a fixed annual pattern for each run and is input from a file. The initial number of new crabs of the three sizes entering from the east is fixed with 1000±50 small crabs, 420±20 and 250±12 large crabs per day. The numbers entering per day from the south are double these numbers to account for the fact that if crabs choose to move outside the 120 x 80 frame of the model world they die. As a result, around half the crabs generated on the southern border can be expected to die as soon as they are introduced.

  2. Input data Whether or not a patch is in or out of the IPA, or on land, is defined by a colour code read from a data file which also contains data on seabed type and depth for each patch and whether or not there are pots on the patch. This file is called ‘Co-ords IPA + pots + vessels + sed2 + depth.txt’. Sea surface temperature recorded daily from a buoy in Start Bay, is input from a separate file called ‘Slapton temps daily mean + st dev.txt’. A further input file contains sea surface temperature off Plymouth for the first 100 days of each year over a ten-year period and the file is called ‘SST Plymouth 95-14 M & SD.txt’. This second set of temperature data is used as input to a recruitment function.

  3. Submodels

Hibernation. Once the temperature has dropped below the hibernation temperature the crab stops moving if it is on a patch with a soft substrate. If the patch has a rocky substrate the crab continues to move until it reaches a patch with a soft substrate. It then stays on this patch until temperatures rise again in the spring.

Crab movement. For all sizes of crab, each individual searches the patches in the arc that is 180º to the west of it and then moves to the patch with the most appropriate substrate, depth and with the least number of crabs. If the neighbouring patches have the same substrate, and number of crabs as the current patch the crab is on, it chooses which patch to go to at random. There are separate rules for each size with regard to depth, as described earlier. Small crabs for example will be biased towards keeping in or moving into shallow water whilst the large crabs will go for deeper water.

Crab catch. After the crabs have moved the catch sub-model will come into effect. For each crab, if it has landed on a patch containing pots it is subject to a probability of capture. The sub-model keeps a tally of how many crabs have been caught by all the pots on a patch since the day before and once a maximum has been reached the probability of a crab being caught falls to zero. After the pots have been ‘cleared’, the probability of capture will be reset to its original value and capture can start again. Catch data is output to a file called ‘Catchespervesselperday v2.csv’.

Natural mortality. At the end of each day each crab has a probability of dying from natural causes. For each crab a random number is selected and if it falls below the critical value, set by a slider on the model interface, the crab dies. If a crab lands in one of the patches on the westerly or southerly edges of the modelled area, it always dies, so simulating the exit of the crabs as they move west down the Channel.

Generation of new crabs. The final element of the day’s business is to generate new crabs. These appear on the eastern and southern edges of the modelled area and have a size distribution reflecting that of a natural population. As described the number of each size of crab entering the modelled area is fixed for the first five years of a simulation. From year six on, the number of new small crabs is generated from a recruitment function. This relates recruitment to the sea surface temperature off Plymouth five years earlier and the number in the ‘parent stock’ at day 330 in the simulation. A second recruitment function is derived from a plot of mean catch as recorded by four fishers over a ten-year period against sea surface temperature off Plymouth five years earlier. This is not a true stock-recruitment relationship in that there is no spawning stock involved in the function. The spawning stock size and recruitment is output to a file called ‘Spawningstocksize.csv’. The number of medium and large crabs recruiting are those that survive from the small and medium cohort of the previous year.

References Hunter, E., Eaton, D., Stewart, C., Lawler, A., Smith, M. T. (2013). Edible Crabs “Go West”: Migrations and Incubation Cycle of Cancer pagurus Revealed by Electronic Tags. PLoS ONE 8(5): e63991. doi:10.1371/journal.pone.0063991.

Sheehy, M. R. J. and Prior, A. E. (2008). Progress on an old question for stock assessment of the edible crab Cancer pagurus. Marine Ecology Progress Series, 353: 191 – 202.

Öndes, Fikret, Kaiser Michel J. & Murray Lee G. (2017) Relative growth and size at onset of sexual maturity of the brown crab, Cancer pagurus in the Isle of Man, Irish Sea, Marine Biology Research, 13:2, 237-245

HOW IT WORKS

(what rules the agents use to create the overall behavior of the model)

HOW TO USE IT

(how to use the model, including a description of each of the items in the Interface tab)

THINGS TO NOTICE

(suggested things for the user to notice while running the model)

THINGS TO TRY

(suggested things for the user to try to do (move sliders, switches, etc.) with the model)

EXTENDING THE MODEL

(suggested things to add or change in the Code tab to make the model more complicated, detailed, accurate, etc.)

NETLOGO FEATURES

(interesting or unusual features of NetLogo that the model uses, particularly in the Code tab; or where workarounds were needed for missing features)

RELATED MODELS

(models in the NetLogo Models Library and elsewhere which are of related interest)

CREDITS AND REFERENCES

(a reference to the model's URL on the web if it has one, as well as any other necessary credits, citations, and links)

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

globals [ year years day temperature stdeviation hibernation temperature-data SST-temperature-data SSTtemperature list1 incubationtemp  multiplier
  list2 list3 list4 list5 list6 list7 list8 list9 list10 list11 list12 list13 list14 list15 list16 list17 list18 list19 list20 list21 list22 list23 list24 list25 list26 list27 list28 list29 list30 list31
  list32 list33 list34 list35 list36 list37 list38 list39 list40 list41 list42 list43 list44 list45 list46 list47 list48 list49 list50 list51 list52 list53 list54 list55 list56 list57 list58
  list59 list60 catch1 catch2 catch3 catch4 catch5 catch6 catch7 catch8 catch9 catch10 catch11 catch12 catch13 catch14 catch15 catch16 catch17 catch18 catch19 catch20  catch21 catch22
  catch23 catch24 catch25 catch26 catch27 catch28 catch29 catch30 catch31 catch32 catch33 catch34 catch35 catch36 catch37 catch38 catch39 catch40 catch41 catch42 catch43 catch44 catch45 catch46
  catch47 catch48 catch49 catch50 catch51 catch52 catch53 catch54 catch55 catch56 catch57 catch58 catch59 catch60 totalcatch1 totalcatch2 totalcatch3 totalcatch listparentstockyear parentstockS
  parentstockM parentstockL listparentstockS listparentstockM listparentstockL totalcrabs totalcrabs1 totalcrabs2 totalcrabs3 catchtotal
  parentstock1 parentstock2 parentstock3 parentstock123  newrecruits recruits11 recruits12 recruits13  samples  area1 area2 area3 area4 area5 area6 area7 area8 area9 area10 area11 area12 area13 area14 area15
area16 area17 area18 area19 area20 newrecruits1 newrecruits2 newrecruits3 newrecruits1S newrecruits2S newrecruits3S ]
patches-own [ substrate  pots  vessel depth catchability1 catchability2 catchability3 catchS catchM catchL available-patches available-patches2 available-patches3 best-patch best-patch2 best-patch3 ]
turtles-own [ natmortality   ]
breed [ crabs1 crab1 ]
breed [ crabs2 crab2 ]
breed [ crabs3 crab3 ]
crabs1-own [ crabcatch1 ]
crabs2-own [ crabcatch2 ]
crabs3-own [ crabcatch3 ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup
  clear-all
  set year year + 1
  set samples 1
  setup-patches  ;; uses information in Co-ords IPA + pots + vessels + sed2 + depth.txt to create the modelled environment.
  setup-crabshapes
  setup-crab-pots  ;; assigns vessel number to the patch locaion of the pots for each vessel.
  setup-lists
  set-up-population-total-lists
  setup-output-file
  setup-spawningstock-output-file
  setup-temp-profile
  setup-SST-profile
  sum-area
  reset-ticks
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to go

  if ticks = 366 [ set year year + 1 ]
  if ticks = 366 [ set samples 1 ]
  if ticks = 366 [ reset-ticks ]
  if year > maxyears [ stop ]
  burying-temperature ;; using the input daily temperature record assigns a value to the temperature at which the crab begins to hibernate.
  move-turtles
  naturalmortality
  immigration
  count-spawningstock
  crab-catch
  if round ( ticks / sampling-interval ) = samples and year > 5 [ sum-catches ]
  if ticks = 0 and year >= 6 [ incubation-temperature ]
 tick
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup-patches; read from a file the colour code for each patch to creat the IPA areas, the number of pots in each patch and the
  ;; vessel owning those pots plus information on water depth and bottom type
  file-open "Co-ords IPA + pots + vessels + sed2 + depth.txt"
  while [not file-at-end?]
  [
    let next-X file-read
    let next-Y file-read
    let next-color file-read
    ask patch next-X next-Y [set pcolor next-color]
    ask patch next-X next-Y [set pots file-read]
    ask patch next-X next-Y [set vessel file-read]
    ask patch next-X next-Y [set substrate file-read
      if substrate = 1 [ let proportion random 100
        if proportion < 30 [ set substrate random 9 ] ]
    ask patch next-X next-Y [ set depth file-read ]
 ]]
  file-close
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup-crabshapes  ;; this procedure populates the sea area with the three sizes of crab. Crabs are assigned to patches at random.
  ;; If they are placed on a patch which represent land, they die.

  set-default-shape crabs1 "crab1"
  create-crabs1 18000  ;; create the smallest crabs, then initialize their variables
  [
    set color 27
    set size 1  ;; smallest size class
    setxy  random-pxcor random-pycor
    if pcolor = 67 [ die ]
    ]

  set-default-shape crabs2 "crab2"
  create-crabs2 7500  ;; create the medium crabs, then initialize their variables
  [
    set color 26
    set size 1.5  ;; medium size class
    setxy  random-pxcor random-pycor
    if pcolor = 67 [ die ]

  ]
  set-default-shape crabs3 "crab3"
  create-crabs3 4500  ;; create the largest crabs, then initialize their variables
  [
    set color 25
    set size 2  ;; largest size class
    setxy  random-pxcor random-pycor
    if pcolor = 67 [ die ]
     ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup-crab-pots  ;; this subroutine places crab pots where each vessel fishes.
      ask patches [ if pots != 0
     [ set plabel-color 15 set plabel vessel ]
    ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup-lists  ;; these lists are used to store the catches of each vessel.
  ask patches with [ vessel != 0 ] [
  if vessel = 1 [ set list1  [ 1 ] ]
    if vessel = 2 [ set list2  [ 2 ] ]
    if vessel = 3 [ set list3  [ 3 ] ]
    if vessel = 4 [ set list4  [ 4 ] ]
    if vessel = 5 [ set list5  [ 5 ] ]
    if vessel = 6 [ set list6  [ 6 ] ]
    if vessel = 7 [ set list7  [ 7 ] ]
    if vessel = 8 [ set list8  [ 8 ] ]
    if vessel = 9 [ set list9  [ 9 ] ]
    if vessel = 10 [ set list10  [ 10 ] ]
    if vessel = 11 [ set list11  [ 11 ] ]
    if vessel = 12 [ set list12  [ 12 ] ]
    if vessel = 13 [ set list13  [ 13 ] ]
    if vessel = 14 [ set list14  [ 14 ] ]
    if vessel = 15 [ set list15  [ 15 ] ]
    if vessel = 16 [ set list16  [ 16 ] ]
    if vessel = 17 [ set list17  [ 17 ] ]
    if vessel = 18 [ set list18  [ 18 ] ]
    if vessel = 19 [ set list19  [ 19 ] ]
    if vessel = 20 [ set list20  [ 20 ] ]

    if vessel = 1 [ set list21  [ 1 ] ]
    if vessel = 2 [ set list22  [ 2 ] ]
    if vessel = 3 [ set list23  [ 3 ] ]
    if vessel = 4 [ set list24  [ 4 ] ]
    if vessel = 5 [ set list25  [ 5 ] ]
    if vessel = 6 [ set list26  [ 6 ] ]
    if vessel = 7 [ set list27  [ 7 ] ]
    if vessel = 8 [ set list28  [ 8 ] ]
    if vessel = 9 [ set list29  [ 9 ] ]
    if vessel = 10 [ set list30  [ 10 ] ]
    if vessel = 11 [ set list31  [ 11 ] ]
    if vessel = 12 [ set list32  [ 12 ] ]
    if vessel = 13 [ set list33  [ 13 ] ]
    if vessel = 14 [ set list34  [ 14 ] ]
    if vessel = 15 [ set list35  [ 15 ] ]
    if vessel = 16 [ set list36  [ 16 ] ]
    if vessel = 17 [ set list37  [ 17 ] ]
    if vessel = 18 [ set list38  [ 18 ] ]
    if vessel = 19 [ set list39  [ 19 ] ]
    if vessel = 20 [ set list40  [ 20 ] ]

    if vessel = 1 [ set list41  [ 1 ] ]
    if vessel = 2 [ set list42  [ 2 ] ]
    if vessel = 3 [ set list43  [ 3 ] ]
    if vessel = 4 [ set list44  [ 4 ] ]
    if vessel = 5 [ set list45  [ 5 ] ]
    if vessel = 6 [ set list46  [ 6 ] ]
    if vessel = 7 [ set list47  [ 7 ] ]
    if vessel = 8 [ set list48  [ 8 ] ]
    if vessel = 9 [ set list49  [ 9 ] ]
    if vessel = 10 [ set list50  [ 10 ] ]
    if vessel = 11 [ set list51  [ 11 ] ]
    if vessel = 12 [ set list52  [ 12 ] ]
    if vessel = 13 [ set list53  [ 13 ] ]
    if vessel = 14 [ set list54  [ 14 ] ]
    if vessel = 15 [ set list55  [ 15 ] ]
    if vessel = 16 [ set list56  [ 16 ] ]
    if vessel = 17 [ set list57  [ 17 ] ]
    if vessel = 18 [ set list58  [ 18 ] ]
    if vessel = 19 [ set list59  [ 19 ] ]
    if vessel = 20 [ set list60  [ 20 ] ]
  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to set-up-population-total-lists ;; this subroutine sets up the list that will contain the parent stock of crabs used in the recruitment function.

  set listparentstockS [ ]
  set listparentstockM [ ]
  set listparentstockL [ ]
  set listparentstockyear [ ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup-output-file

; this sub-routine sets up the file that will store the output from the model. Output is for catch by size and in total and by vessel,
  ;; the numbers of crabs by size, the sample number and the number of patches covered by each vessel.

  if (file-exists? "Catches_per_vessel_per_day v11.csv")
  [
    carefully
    [ file-delete "Catches_per_vessel_per_day v11.csv" ]
    [ print error-message ]
  ]

  file-open "Catches_per_vessel_per_day v11.csv"
  file-type "Year,"
  file-type "Sample,"
  file-type "Catchability1,"
  file-type "Catchability2,"
  file-type "Catchability3,"
  file-type "Catch small,"
  file-type "Catch medium,"
  file-type "Catch large,"
  file-type "Total catch,"
  file-type "Total N,"
  file-type "Total N small,"
  file-type "Total N medium,"
  file-type "Total N large,"
  file-type "Vessel,"
  file-print "Pot coverage"
  file-close
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup-spawningstock-output-file

  ; this sub-routine sets up the file that will store the number of crabs in the spawning stock and the resulting recruitment.

  if (file-exists? "Spawning_stock_size_v11.csv")
  [
    carefully
    [ file-delete "Spawning_stock_size_v11.csv" ]
    [ print error-message ]
  ]

  file-open "Spawning_stock_size_v11.csv"
  file-type "Year,"
  file-type "Spawning stock small,"
  file-type "Spawning stock medium,"
  file-type "Spawning stock large,"
  file-type "Total Spawning stock,"
  file-type "Recruits size 1E,"
  file-type "Recruits size 2E,"
  file-type "Recruits size 3E,"
  file-type "Recruits size 1S,"
  File-type "Recruits size 2S,"
  file-type "Recruits size 3S,"
  file-type "Total recruits1,"
  file-type "Total recruits2,"
  file-print "Total recruits3"
  file-close
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup-temp-profile ;; this subroutine reads the daily sea surface temperature taken off Slapton, South Devon, UK

  set temperature-data [ ]

   file-open "Slapton temps daily mean + st dev.txt"
    while [ not file-at-end? ] [
   set temperature-data sentence temperature-data (list (list file-read file-read file-read))
    ]
  file-close
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup-SST-profile ;; this subroutine reads the mean sea surface temperature for the first 100 days of each year off Plymouth, Devon, UK and is used in the recruitment function.

    set SST-temperature-data [ ]

   file-open "SST Plymouth 95-14 M & SD.txt"
    while [ not file-at-end? ] [
   set SST-temperature-data sentence SST-temperature-data (list (list file-read file-read file-read))
    ]
  file-close
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to sum-area  ;; so that catch per unit area can be calculated, this routine sums the area occupied by the pots of each vessel

   ask patches with [ vessel != 0 ] [



    if vessel = 1 [ set area1 area1 + 1 ]
    if vessel = 2 [ set area2 area2 + 1 ]
    if vessel = 3 [ set area3 area3 + 1 ]
    if vessel = 4 [ set area4 area4 + 1 ]
    if vessel = 5 [ set area5 area5 + 1 ]
    if vessel = 6 [ set area6 area6 + 1 ]
    if vessel = 7 [ set area7 area7 + 1 ]
    if vessel = 8 [ set area8 area8 + 1 ]
    if vessel = 9 [ set area9 area9 + 1 ]
    if vessel = 10 [ set area10 area10 + 1 ]
    if vessel = 11 [ set area11 area11 + 1 ]
    if vessel = 12 [ set area12 area12 + 1 ]
    if vessel = 13 [ set area13 area13 + 1 ]
    if vessel = 14 [ set area14 area14 + 1 ]
    if vessel = 15 [ set area15 area15 + 1 ]
    if vessel = 16 [ set area16 area16 + 1 ]
    if vessel = 17 [ set area17 area17 + 1 ]
    if vessel = 18 [ set area18 area18 + 1 ]
    if vessel = 19 [ set area19 area19 + 1 ]
    if vessel = 20 [ set area20 area20 + 1 ]
  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to count-spawningstock  ;; this procedure counts how many crabs are alive at day 330 and adds them to give a total. These numbers form the basis for calculating recruitment.
  if ticks = 330  [
     set parentstock1 count crabs1
     set parentstock2 count crabs2
     set parentstock3 count crabs3
     set listparentstockS lput parentstock1 listparentstockS
     set listparentstockM lput parentstock2 listparentstockM
     set listparentstockL lput parentstock3 listparentstockL

     set parentstock123 parentstock1 + parentstock2 + parentstock3
     set listparentstockyear lput parentstock123 listparentstockyear
  ]
  if ticks = 330 [
  file-open "Spawning_stock_size_v11.csv"
  file-type (word year ",")
  file-type (word parentstock1 ",")
  file-type (word parentstock2 ",")
  file-type (word parentstock3 ",")
  file-type (word parentstock123 ",")
  file-type (word newrecruits1 ",")
  file-type (word newrecruits2 ",")
  file-type (word newrecruits3 ",")
  file-type (word newrecruits1S ",")
  file-type (word newrecruits2S ",")
  file-type (word newrecruits3S ",")
  file-type (word (newrecruits1 + newrecruits1S) "," )
  file-type (word (newrecruits2 + newrecruits2S) "," )
  file-print (word (newrecruits3 + newrecruits3S) )
  file-close
  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to burying-temperature  ;; this section looks up the temperature for the day and adds some variation to the mean to give the realised temperature for the day.
  ;; This determines whether the crab continues to move or to stop moving and bury.
   if ( is-list? temperature-data )
  [ foreach temperature-data [ ?1 -> if first ?1 = ticks - 5 [ set day first ?1 set temperature item 1 ?1 set stdeviation last ?1 ]
  set hibernation random-normal temperature stdeviation ]
  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to move-turtles; this procedure moves the crabs using the three criteria of choice - depth, substrate type and smallest number of other crabs.

  ask crabs1 [
    if pcolor = 67
    [ die ]; if a crab encounters land it dies.

    ifelse hibernation > hibernation-temperature ;; As long as the sea temp is greater than the temperature at which crabs hibernate, the crab keeps moving west.
    [

       let potential-destinations ( patch-set patch (pxcor - 1) (pycor + 1)  patch (pxcor - 1) pycor  patch (pxcor - 1) (pycor - 1) patch pxcor (pycor + 1) patch pxcor (pycor - 1)  patch-here )
        ;the line above selects the five patches north & south, NW, West and SW of the patch the subject crab is on
      set available-patches potential-destinations with [ depth < 3 and substrate != 1 ]

      ifelse  any? available-patches
     [
        set best-patch min-one-of available-patches [ count turtles-here ] ;; If there are patches satisfying depth and substrate requirements, then the crab chooses the patch in that subset with
                                                                           ;; the lowest number of crabs
        move-to best-patch                                                 ;; The crab then moves to that patch
      ]
     [
        move-to min-one-of potential-destinations [ count turtles-here ]   ;; If there are no available patches with the desired characterisitcs then the crab moves to the patch
        ;; in the set with the lowest number of crabs

     ]


    ]

    ; if a crab moves to a patch with a hard substrate when the temperature is below the hibernation temperature and is supposed to bury
    ; it moves to a new patch with the lowest number of crabs. If substrate is not equal to 1 (rock) then it stays where it is.
     [
      ifelse substrate = 1 [
        let potential-destinations ( patch-set patch (pxcor - 1) (pycor + 1)  patch (pxcor - 1) pycor  patch (pxcor - 1) (pycor - 1) patch pxcor (pycor + 1) patch pxcor (pycor - 1) )
        move-to min-one-of potential-destinations [ count turtles-here ]
      ]
      [
      move-to patch-here
      ]
    ]
    ]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ask crabs2 [
    if pcolor = 67
    [ die ]; if a crab encounters land it dies.

    ifelse hibernation > hibernation-temperature  [ ;; if the temperature is below the value set on the slider, the crabs are assumed to be buried and not moving. They can stil die.
        ; First identify potential neighbor destination patches
       let potential-destinations2 ( patch-set patch (pxcor - 1) (pycor + 1)  patch (pxcor - 1) pycor  patch (pxcor - 1) (pycor - 1) patch pxcor (pycor + 1) patch pxcor (pycor - 1)  patch-here )
        ;the line above selects the five patches north & south, NW, West and SW of the patch the subject crab is on
      set available-patches2 potential-destinations2 with [  depth < 4  and  substrate != 1 ]
       ifelse  any? available-patches2
     [
        set best-patch2 min-one-of available-patches2 [ count turtles-here ]
        move-to best-patch2
     ]
     [
        move-to min-one-of potential-destinations2 [ count turtles-here ]

     ]
    ]
        [
      ifelse substrate = 1 [
        let potential-destinations2 ( patch-set patch (pxcor - 1) (pycor + 1)  patch (pxcor - 1) pycor  patch (pxcor - 1) (pycor - 1) patch pxcor (pycor + 1) patch pxcor (pycor - 1) )
        move-to min-one-of potential-destinations2 [ count turtles-here ]
      ]
      [
        move-to patch-here
      ]
    ]
]

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

      ask crabs3 [
    if pcolor = 67
    [ die ]; if a crab encounters land it dies.

    ifelse hibernation > hibernation-temperature
    [
      ;; if the temperature is below the value set on the slider, the crabs are assumed to be buried and not moving. They can stil die.
        ; First identify potential neighbor destination patches

       let potential-destinations3 ( patch-set patch (pxcor - 1) (pycor + 1)  patch (pxcor - 1) pycor  patch (pxcor - 1) (pycor - 1) patch pxcor (pycor + 1) patch pxcor (pycor - 1)  patch-here )
        ;the line above selects the five patches north & south, NW, West and SW of the patch the subject crab is on

       set available-patches3 potential-destinations3 with [ depth > 4 and substrate != 1 ]

       ifelse  any? available-patches3
     [
        set best-patch3 min-one-of available-patches3 [ count turtles-here ]
        move-to best-patch3
     ]
     [
        move-to min-one-of potential-destinations3 [ count turtles-here ]
     ]

      ]
        [
      ifelse substrate = 1
      [
        let potential-destinations3 ( patch-set patch (pxcor - 1) (pycor + 1)  patch (pxcor - 1) pycor  patch (pxcor - 1) (pycor - 1) patch pxcor (pycor + 1) patch pxcor (pycor - 1) )
        move-to min-one-of potential-destinations3 [ count turtles-here ]
      ]
      [
        move-to patch-here
      ]
    ]

  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to naturalmortality ;; this applies the natural daily mortality rate read from the slider

  ask turtles [
       let mortality random-float .001
       if mortality < m [ die ]  ; this is the natural mortality rate per day
       if pxcor = 0 [ die ]; when crabs get to westerly or southerly edge of the area they die which represents them exiting the area modelled.
       if pycor = 0 [ die ]

  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to incubation-temperature  ;; this section looks up the SST temperature off Plymouth for the year and adds some variation to the mean to give the realised temperature for the year.
   if ( is-list? SST-temperature-data )
  [ foreach SST-temperature-data [ ?1 -> if first ?1 = year - 5 [ set SSTtemperature item 1 ?1 set stdeviation last ?1 ]
  set incubationtemp random-normal SSTtemperature stdeviation ]
  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to immigration  ;; this procedure calculates daily recruitment rates for the three crab sizes. The rates are a function of spawning stock size,and the average temperature
                ;; of the first 100 days of the year class's life. Data from off Plymouth is used as this is downstream of where the crabs eventually move to benthic living.
                ;; In version MR1 RF2 the recruitment is calculated as a function of temperature alone.

    if hibernation > hibernation-temperature
  [
    ifelse year >= 6 [

     set-default-shape crabs1 "crab1"
     set recruits11 item (year - 6) listparentstockyear
    set multiplier ( 0.1 * incubationtemp ) ;; the factor by which recruits are multiplied to give immigration rates per day is a straight line function of temp,

     set newrecruits ( ( recruits11 * multiplier ) * 6.5 ) / 365

     create-crabs1 random-normal newrecruits 500 ;; create the smallest crabs, then initialize their variables
  [
     set color 27
     set size 1  ;; smallest size class
     setxy  120 random-pycor
  ]

      ; the following code is for the alternative recruitment function where recruitment is just a function of the temperature five years earlier.

;     ;set newrecruits ( ( ( -16.93 + 24.82 * incubationtemp ) * 1000 ) * 3 ) / 365
;      set newrecruits ( ( ( -16.93 + 24.82 * incubationtemp ) * 7000 ) ) / 365
;      set newrecruits1 random-normal newrecruits 500
;      if newrecruits1 < 0 [ set newrecruits1 0 ]
;      set-default-shape crabs1 "crab1"
;  create-crabs1 newrecruits1  ;; create the smallest crabs, then initialize their variables
;  [
;    set color 27
;    set size 1  ;; smallest size class
;    setxy  120 random-pycor
;  ]

  set-default-shape crabs2 "crab2"
  set recruits12 item (year - 2) listparentstockS
      set newrecruits2 random-normal ( ( recruits12 / 365 ) * 4.5 ) 500
      if newrecruits2 < 0  [ set newrecruits2  0 ]
  create-crabs2  newrecruits2 ;; create the medium crabs, then initialize their variables
  [
    set color 26
    set size 1.5  ;; medium size class
    setxy  120 random-pycor
  ]

  set-default-shape crabs3 "crab3"
  set recruits13 item (year - 2) listparentstockM
      set newrecruits3 random-normal ( ( recruits13 / 365 ) * 2.5 ) 500
      if newrecruits3 < 0 [ set newrecruits3  0 ]
  create-crabs3  newrecruits3 ;; create the largest crabs, then initialize their variables
  [
    set color 25
    set size 2  ;; largest size class
    setxy  120 random-pycor
  ]
;;;;;;;;;;;;;;;;;;;;;;;

      ; this and the next two sets of code provide the immigration from the south

      set-default-shape crabs1 "crab1"
      set newrecruits ( ( recruits11 * multiplier ) * 6.5 ) / 365
      ;set newrecruits ( ( ( -16.93 + 24.82 * incubationtemp ) * 4000 ) ) / 365
      set newrecruits1S ( random-normal newrecruits 500 )
      set-default-shape crabs1 "crab1"
      if newrecruits1S < 0 [ set newrecruits1S  0 ]
  create-crabs1 newrecruits1S ;; create the smallest crabs, then initialize their variables
  [
    set color 27
    set size 1  ;; smallest size class
    setxy random-pxcor 0

  ]
  set-default-shape crabs2 "crab2"

  set recruits12 item (year - 2) listparentstockS
      set newrecruits2S ( random-normal ( ( recruits12 / 365 ) * 4.5 ) 500 )
      if newrecruits2S < 0 [ set newrecruits2S  0 ]
  create-crabs2  newrecruits2S ;; create the medium crabs, then initialize their variables
  [
    set color 26
    set size 1.5  ;; medium size class
   setxy random-pxcor 0

  ]
  set-default-shape crabs3 "crab3"
  set recruits13 item (year - 2) listparentstockM
      set newrecruits3S ( random-normal ( ( recruits13 / 365 ) * 2.5 ) 500 )
      if newrecruits3S < 0 [ set newrecruits3S  0 ]
  create-crabs3  newrecruits3S ;; create the largest crabs, then initialize their variables
  [
    set color 25
    set size 2  ;; largest size class
    setxy random-pxcor 0
  ]
  ]
;;;;;;;;;;;;;;;;;;;;;;;;;;

   ; the following immigration is read from the sliders and comes into play during the first 5 years of the simulation. Crabs are assumed to recruit to the fishery at age 5.
   ; crabs entering from the east

    [ set-default-shape crabs1 "crab1"
  create-crabs1 random-normal 3000 50 ;; create the smallest crabs, then initialize their variables
  [
    set color 27
    set size 1  ;; smallest size class
    setxy  120 random-pycor
  ]
  set-default-shape crabs2 "crab2"
  create-crabs2 random-normal 2300 20 ;; create the medium crabs, then initialize their variables
  [
    set color 26
    set size 1.5  ;; medium size class
    setxy  120 random-pycor
  ]
  set-default-shape crabs3 "crab3"
  create-crabs3 random-normal 1000 12 ;; create the largest crabs, then initialize their variables
  [
    set color 25
    set size 2  ;; largest size class
    setxy  120 random-pycor
  ]
;;;;;;;;;;;;;;;;;;;;;

      ; crabs entering from the south

      set-default-shape crabs1 "crab1"
  create-crabs1 ( random-normal 3000 50 ) ;; create the smallest crabs, then initialize their variables
  [
    set color 27
    set size 1  ;; smallest size class
    setxy random-pxcor 0

  ]
  set-default-shape crabs2 "crab2"
  create-crabs2 ( random-normal 2300 20 );; create the medium crabs, then initialize their variables
  [
    set color 26
    set size 1.5  ;; medium size class
   setxy random-pxcor 0

  ]
  set-default-shape crabs3 "crab3"
  create-crabs3 ( random-normal 1000 12 ) ;; create the largest crabs, then initialize their variables
  [
    set color 25
    set size 2  ;; largest size class
    setxy random-pxcor 0
  ]
  ] ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to crab-catch  ;; the procedure calculates the daily catch of each boat fishing the area.

   setup-lists  ;; resets the lists at the start of a day.
   if hibernation > hibernation-temperature
   [
   ask patches with [ vessel != 0 ] ; selecting only those patches that have pots and therefore the presence of a fishing boat
   [
     set catchS 0

  ask crabs1-here ; cycle through every size 1 crab on the patch in question and determine whether or not it gets caught
  [

    set catchability1 random-float 1.0  ;; catchability is the chance that the crab will be caught.

    ifelse catchability1 < q1 and (catchS + catchM + catchL) < 320 [  set crabcatch1 crabcatch1 + 1 ;; if the chance of being caught is less than this threshold the crab
          ; is caught and removed from the population.
      ; In addition if the number of crabs already caught exceeds 320, the pot is deemed full and the crab cannot be caught. This applies to all crab sizes.
     set catchS catchS + crabcatch1    ; adds the crabs of size 1 to the catch total for this patch
      if catchability1 < q1 [ die ]  ; caught crabs are removed from the population.
      ]
    [ set catchS catchS + 0 ] ]

   if vessel = 1 [ set list1 lput catchS list1 ] ; the programme looks for the list accumulating catches for each vessel and adds the catch.
    if vessel = 2 [ set list2 lput catchS list2 ]
    if vessel = 3 [ set list3 lput catchS list3 ]
    if vessel = 4 [ set list4 lput catchS list4 ]
    if vessel = 5 [ set list5 lput catchS list5 ]
    if vessel = 6 [ set list6 lput catchS list6 ]
    if vessel = 7 [ set list7 lput catchS list7 ]
    if vessel = 8 [ set list8 lput catchS list8 ]
    if vessel = 9 [ set list9 lput catchS list9 ]
    if vessel = 10 [ set list10 lput catchS list10 ]
    if vessel = 11 [ set list11 lput catchS list11 ]
    if vessel = 12 [ set list12 lput catchS list12 ]
    if vessel = 13 [ set list13 lput catchS list13 ]
    if vessel = 14 [ set list14 lput catchS list14 ]
    if vessel = 15 [ set list15 lput catchS list15 ]
    if vessel = 16 [ set list16 lput catchS list16 ]
    if vessel = 17 [ set list17 lput catchS list17 ]
    if vessel = 18 [ set list18 lput catchS list18 ]
    if vessel = 19 [ set list19 lput catchS list19 ]
    if vessel = 20 [ set list20 lput catchS list20 ]
   ]

    ask patches with [ vessel != 0 ] [
      set catchM 0

   ask crabs2-here  ;; cycles through all the crabs of size 2 and calculates the catch by each vessel on each day.

   [
     set catchability2 random-float 1.0  ;; catchability can be different for the different crab sizes
     ifelse catchability2 < q2 and (catchS + catchM + catchL) < 320 [ set crabcatch2 crabcatch2 + 1 ;; if the chance of being caught is less than this threshold
                                                                                                       ;the crab is caught and removed from the population.
     set catchM catchM + crabcatch2  ; adds the crabs of size 2 to the catch total for this patch
     if catchability2 < q2 [ die ]
      ]

    [ set catchM catchM + 0 ] ]

   if vessel = 1 [ set list21  lput catchM list21 ]
    if vessel = 2 [ set list22 lput catchM list22 ]
    if vessel = 3 [ set list23 lput catchM list23 ]
    if vessel = 4 [ set list24 lput catchM list24 ]
    if vessel = 5 [ set list25 lput catchM list25 ]
    if vessel = 6 [ set list26 lput catchM list26 ]
    if vessel = 7 [ set list27 lput catchM list27 ]
    if vessel = 8 [ set list28 lput catchM list28 ]
    if vessel = 9 [ set list29 lput catchM list29]
    if vessel = 10 [ set list30 lput catchM list30 ]
    if vessel = 11 [ set list31 lput catchM list31 ]
    if vessel = 12 [ set list32 lput catchM list32 ]
    if vessel = 13 [ set list33 lput catchM list33]
    if vessel = 14 [ set list34 lput catchM list34 ]
    if vessel = 15 [ set list35 lput catchM list35 ]
    if vessel = 16 [ set list36 lput catchM list36 ]
    if vessel = 17 [ set list37 lput catchM list37]
    if vessel = 18 [ set list38 lput catchM list38 ]
    if vessel = 19 [ set list39 lput catchM list39]
    if vessel = 20 [ set list40 lput catchM list40 ]
    ]

    ask patches with [ vessel != 0 ] [

      set catchL 0

   ask crabs3-here  ;; cycles through all the crabs of size 3 and calculates the catch by each vessel on each day.
   [
     set catchability3 random-float 1.0
      ifelse catchability3 < q3 and (catchS + catchM + catchL) < 320 [ set crabcatch3 crabcatch3 + 1 ;; if the chance of being caught is less than this threshold the crab
                                                                                                       ;is caught and removed from the population.
     set catchL catchL + crabcatch3 ; adds the crabs of size 3 to the catch total for this patch
     if catchability3 < q3 [ die ]
      ]

    [ set catchL catchL + 0 ] ]

   if vessel = 1 [ set list41  lput catchL list41 ]
    if vessel = 2 [ set list42 lput catchL list42 ]
    if vessel = 3 [ set list43 lput catchL list43 ]
    if vessel = 4 [ set list44 lput catchL list44 ]
    if vessel = 5 [ set list45 lput catchL list45 ]
    if vessel = 6 [ set list46 lput catchL list46 ]
    if vessel = 7 [ set list47 lput catchL list47 ]
    if vessel = 8 [ set list48 lput catchL list48 ]
    if vessel = 9 [ set list49 lput catchL list49]
    if vessel = 10 [ set list50 lput catchL list50 ]
    if vessel = 11 [ set list51 lput catchL list51 ]
    if vessel = 12 [ set list52 lput catchL list52 ]
    if vessel = 13 [ set list53 lput catchL list53]
    if vessel = 14 [ set list54 lput catchL list54 ]
    if vessel = 15 [ set list55 lput catchL list55 ]
    if vessel = 16 [ set list56 lput catchL list56 ]
    if vessel = 17 [ set list57 lput catchL list57]
    if vessel = 18 [ set list58 lput catchL list58 ]
    if vessel = 19 [ set list59 lput catchL list59]
    if vessel = 20 [ set list60 lput catchL list60 ]


    ]
   ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to sum-catches



  ask turtles [

    set totalcrabs count turtles
    set totalcrabs1 count crabs1
    set totalcrabs2 count crabs2
    set totalcrabs3 count crabs3

  ]

  ask patches with [ vessel != 0 ] [


  ;before the catches for each vessel from each patch for each crab size are summed, the variable for the totals is set to zero

  set catch1 0 set catch21 0 set catch41 0
  set catch2 0 set catch22 0 set catch42 0
  set catch3 0 set catch23 0 set catch43 0
  set catch4 0 set catch24 0 set catch44 0
  set catch5 0 set catch25 0 set catch45 0
  set catch6 0 set catch26 0 set catch46 0
  set catch7 0 set catch27 0 set catch47 0
  set catch8 0 set catch28 0 set catch48 0
  set catch9 0 set catch29 0 set catch49 0
  set catch10 0 set catch30 0 set catch50 0
  set catch11 0 set catch31 0 set catch51 0
  set catch12 0 set catch32 0 set catch52 0
  set catch13 0 set catch33 0 set catch53 0
  set catch14 0 set catch34 0 set catch54 0
  set catch15 0 set catch35 0 set catch55 0
  set catch16 0 set catch36 0 set catch56 0
  set catch17 0 set catch37 0 set catch57 0
  set catch18 0 set catch38 0 set catch58 0
  set catch19 0 set catch39 0 set catch59 0
  set catch20 0 set catch40 0 set catch60 0
  ]



  ask n-of 1 patches with [ vessel = 1 ] [ ; without this line the programme prints the same totals for every patch belonging to a vessel.
      set catchtotal 0
  set catch1 sum butfirst list1
  set catch21 sum butfirst list21
  set catch41 sum butfirst list41
  set catchtotal catch1 + catch21 + catch41
  if v1 [
  file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch1 ",")
  file-type (word catch21 ",")
  file-type (word catch41 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area1)
] file-close
  ]


  ask n-of 1 patches with [ vessel = 2 ] [
  set catchtotal 0
  set catch2 sum butfirst list2
  set catch22 sum butfirst list22
  set catch42 sum butfirst list42
  set catchtotal catch2 + catch22 + catch42
  if v2 [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch2 ",")
  file-type (word catch22 ",")
  file-type (word catch42 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area2)
]file-close
  ]



  ask n-of 1 patches with [ vessel = 3 ] [
  set catchtotal 0
  set catch3 sum butfirst list3
  set catch23 sum butfirst list23
  set catch43 sum butfirst list43
  set catchtotal catch3 + catch23 + catch43
  if v3 [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch3 ",")
  file-type (word catch23 ",")
  file-type (word catch43 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area3)
]file-close
  ]



  ask n-of 1 patches with [ vessel = 4 ] [
        set catchtotal 0
  set catch4 sum butfirst list4
   set catch24 sum butfirst list24
  set catch44 sum butfirst list44
      set catchtotal catch4 + catch24 + catch44
  if v4 [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch4 ",")
  file-type (word catch24 ",")
  file-type (word catch44 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area14)
]file-close
  ]


  ask n-of 1 patches with [ vessel = 5 ] [
        set catchtotal 0
  set catch5 sum butfirst list5
  set catch25 sum butfirst list25
  set catch45 sum butfirst list45
  set catchtotal catch5 + catch25 + catch45
  if v5  [
       file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch5 ",")
  file-type (word catch25 ",")
  file-type (word catch45 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area5)
]file-close
  ]


  ask n-of 1 patches with [ vessel = 6 ] [
        set catchtotal 0
  set catch6 sum butfirst list6
  set catch26 sum butfirst list26
  set catch46 sum butfirst list46
  set catchtotal catch6 + catch26 + catch46
  if v6 [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch6 ",")
  file-type (word catch26 ",")
  file-type (word catch46 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area6)
]file-close
  ]


    ask n-of 1 patches with [ vessel = 7 ] [
        set catchtotal 0
    set catch7 sum butfirst list7
  set catch27 sum butfirst list27
  set catch47 sum butfirst list47
  set catchtotal catch7 + catch27 + catch47
  if v7  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch7 ",")
  file-type (word catch27 ",")
  file-type (word catch47 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area7)
]file-close
  ]


  ask n-of 1 patches with [ vessel = 8 ] [
        set catchtotal 0
  set catch8 sum butfirst list8
  set catch28 sum butfirst list28
  set catch48 sum butfirst list48
  set catchtotal catch8 + catch28 + catch48
  if v8  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch8 ",")
  file-type (word catch28 ",")
  file-type (word catch48 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area8)
]file-close
  ]


  ask n-of 1 patches with [ vessel = 9 ] [
        set catchtotal 0
  set catch9 sum butfirst list9
  set catch29 sum butfirst list29
  set catch49 sum butfirst list49
  set catchtotal catch9 + catch29 + catch49
  if v9  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch9 ",")
  file-type (word catch29 ",")
  file-type (word catch49 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area9)
]file-close
  ]


  ask n-of 1 patches with [ vessel = 10 ] [
        set catchtotal 0
    set catch10 sum butfirst list10
  set catch30 sum butfirst list30
  set catch50 sum butfirst list30
  set catchtotal catch10 + catch30 + catch50
  if v10  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch10 ",")
  file-type (word catch30 ",")
  file-type (word catch50 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area10)
]file-close
  ]


    ask n-of 1 patches with [ vessel = 11 ] [
        set catchtotal 0
    set catch11 sum butfirst list11
  set catch31 sum butfirst list31
  set catch51 sum butfirst list51
  set catchtotal catch11 + catch31 + catch51
  if v11  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch11 ",")
  file-type (word catch31 ",")
  file-type (word catch51 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area11)
] file-close
  ]


  ask n-of 1 patches with [ vessel = 12 ] [
        set catchtotal 0
  set catch12 sum butfirst list12
  set catch32 sum butfirst list32
  set catch52 sum butfirst list52
  set catchtotal catch12 + catch32 + catch52
  if v12  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch12 ",")
  file-type (word catch32 ",")
  file-type (word catch52 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area12)
]file-close
  ]


  ask n-of 1 patches with [ vessel = 13 ] [
        set catchtotal 0
    set catch13 sum butfirst list13
  set catch33 sum butfirst list33
  set catch53 sum butfirst list53
  set catchtotal catch13 + catch33 + catch53
  if v13  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch12 ",")
  file-type (word catch33 ",")
  file-type (word catch53 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area13)
] file-close
  ]


  ask n-of 1 patches with [ vessel = 14 ] [
        set catchtotal 0
 set catch14 sum butfirst list14
  set catch34 sum butfirst list34
  set catch54 sum butfirst list54
  set catchtotal catch14 + catch34 + catch54
  if v14 [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch14 ",")
  file-type (word catch34 ",")
  file-type (word catch54 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area14)
]file-close
  ]


  ask n-of 1 patches with [ vessel = 15 ] [
        set catchtotal 0
  set catch15 sum butfirst list15
  set catch35 sum butfirst list35
  set catch55 sum butfirst list55
  set catchtotal catch15 + catch35 + catch55
  if v15  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch15 ",")
  file-type (word catch35 ",")
  file-type (word catch55 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area15)
]file-close
  ]


  ask n-of 1 patches with [ vessel = 16 ] [
        set catchtotal 0
    set catch16 sum butfirst list16
  set catch36 sum butfirst list36
  set catch56 sum butfirst list56
  set catchtotal catch16 + catch36 + catch56
  if v16  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch16 ",")
  file-type (word catch36 ",")
  file-type (word catch56 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area16)
      ] file-close
  ]


  ask n-of 1 patches with [ vessel = 17 ] [
        set catchtotal 0
    set catch17 sum butfirst list17
  set catch37 sum butfirst list37
  set catch57 sum butfirst list57
  set catchtotal catch17 + catch37 + catch57
  if v17 [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch17 ",")
  file-type (word catch37 ",")
  file-type (word catch57 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area17)
 ] file-close
  ]


  ask n-of 1 patches with [ vessel = 18 ] [
        set catchtotal 0
    set catch18 sum butfirst list18
  set catch38 sum butfirst list38
  set catch58 sum butfirst list58
  set catchtotal catch18 + catch38 + catch58
  if v18  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch18 ",")
  file-type (word catch38 ",")
  file-type (word catch58 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area18)
  ] file-close
  ]


  ask n-of 1 patches with [ vessel = 19 ] [
  set catchtotal 0
  set catch19 sum butfirst list19
  set catch39 sum butfirst list39
  set catch59 sum butfirst list59
  set catchtotal catch19 + catch39 + catch59
  if v19  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch19 ",")
  file-type (word catch39 ",")
  file-type (word catch59 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area19)
  ] file-close
  ]


  ask n-of 1 patches with [ vessel = 20 ] [
        set catchtotal 0
    set catch20 sum butfirst list20
  set catch40 sum butfirst list40
  set catch60 sum butfirst list60
  set catchtotal catch20 + catch40 + catch60
  if v20  [
      file-open "Catches_per_vessel_per_day v11.csv"
  file-type (word year ",")
  file-type (word samples ",")
  file-type (word catchability1 ",")
  file-type (word catchability2 ",")
  file-type (word catchability3 ",")
  file-type (word catch20 ",")
  file-type (word catch40 ",")
  file-type (word catch60 ",")
  file-type (word catchtotal ",")
  file-type (word totalcrabs ",")
  file-type (word totalcrabs1 ",")
  file-type (word totalcrabs2 ",")
  file-type (word totalcrabs3 ",")
  file-type (word vessel ",")
  file-print (word area20)
  ]file-close
  ]


;; In what follows the vessel totals are added together to produce the global catch for a given day
  set totalcatch1 0 set totalcatch2 0 set totalcatch3 0 set totalcatch 0
  set totalcatch1 totalcatch1 + catch1 + catch2 + catch3 + catch4 + catch5 + catch6 + catch7 + catch8 + catch9 + catch10 + catch11 + catch12 + catch13 + catch14 + catch15 + catch16 + catch17 + catch18 + catch19 + catch20
  set totalcatch2 totalcatch2 + catch21 + catch22 + catch23 + catch24 + catch25 + catch26 + catch27 + catch28 + catch29 + catch30 + catch31 + catch32 + catch33 + catch34 + catch35 + catch36 + catch37 + catch38 + catch39 + catch40
  set totalcatch3 totalcatch3 + catch41 + catch42 + catch43 + catch44 + catch45 + catch46 + catch47 + catch48 + catch49 + catch50 + catch51 + catch52 + catch53 + catch54 + catch55 + catch56 + catch57 + catch58 + catch59 + catch60
  set totalcatch totalcatch + totalcatch1 + totalcatch2 + totalcatch3

set samples samples + 1

 file-close
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

There are 2 versions of this model.

Uploaded by When Description Download
Paul Hart almost 3 years ago Updated version with best recruitment function Download this version
Paul Hart over 3 years ago Initial upload Download this version

Attached files

File Type Description Last updated
Catches_per_vessel_per_day v11.csv data File for the output of catch data by vessel and day almost 3 years ago, by Paul Hart Download
Co-ords IPA pots vessels sed2 depth.txt data File with input data over 3 years ago, by Paul Hart Download
Slapton temps daily mean st dev.txt data Temperature profile for the model almost 3 years ago, by Paul Hart Download
Spawning_stock_size_v11.csv data File for recording spawning stock size each year almost 3 years ago, by Paul Hart Download
SST Plymouth 95-14 M & SD.txt data Sea surface temperature off Plymouth for recruitment function almost 3 years ago, by Paul Hart Download

This model does not have any ancestors.

This model does not have any descendants.