The environmental model was designed to simulate the factors in aquaculture production environments known to affect fish performance and behaviour, and includes representations of the cage/tank structure, water temperature, light intensity and feed distribution. With the exception of the cage/tank structure, which is formulated as a set of static parameters bounding the spatial movement of the fish, all environmental factors may vary along all three spatial axes and with time.
When simulating, spatial and temporal scales and resolutions of environmental datasets primarily depended on the total duration of the simulation and the physical scale (i.e. size) of the simulated production unit. In addition, the spatial and temporal sampling frequencies of any experimentally obtained data series used as inputs to the simulation influenced the resolutions and scales of the datasets derived from these measurements. For simulations including datasets with different spatial resolutions, the dataset with the highest spatial resolution was first identified. The other datasets were then conformed to this resolution by using interpolation and extrapolation so that spatial variations in all environmental datasets were on the same level of detail. A 3D grid of cells was then generated based on the common spatial resolution, with each cell relating to distinct data values in all datasets. The only dataset not subjected to this conformation was feed distribution, which maintained a separate spatial 3D grid as a realistic representation of pellet distribution may require a higher spatial resolution than other factors (e.g. temperature, light). Interaction between fish and environment was thus more efficient as the fish then only needed to relate to two spatial cell structures to access all environmental datasets rather than using separate cell structures for each environmental factor.
When a fish requested the environmental conditions at its present location, it conveyed its position to the environmental model, which then used the position to find out which cell in the 3D structures the fish resided within. The values returned to the fish were obtained by interpolating in space (3D trilinear interpolation) between the present cell and adjacent cells, and interpolation in time (linear interpolation). This ensured that the environmental factors facing the fish were continuous and smooth in time and space, and prevented spikes or jumps in their values which might in turn elicit unrealistic responses from the fish.
To capture how the salmon interacted with the environment with sufficient resolution, the behavioural and environmental submodels were simulated and updated using a fixed timestep of 1 s. However, in cases where the spatial resolution of feed distribution was high (i.e. small cell sizes in the 3D grid structure for feed), the pellet distribution model had to be simulated using timesteps < 1 s to ensure that the mass balance and dynamics within the feed distribution were maintained. Dynamics of the energetic states of fish tend to vary more slowly than behaviour, thus a larger timestep was allowed in the energetic model than in the behavioural model. Since the main aim of this model was to evaluate growth performance over time, we set no upper limit to the duration of simulations.
2.2. Process overview and scheduling
The equation system defining a population of individual fish interacting with a dynamic environment will contain a set of complex and non-linear equations that is difficult or impossible to solve analytically. Hence, we solved our model using numerical modelling techniques, in which solutions are found through simulations in the time domain. The main processes occurring within the individuals in our model were growth, feeding (behaviour and assimilation) and movement, while the main environmental processes were to update the present environmental state and compute the pellet distribution within the production unit. For each numerical iteration of the model, these processes were executed in a fixed sequence starting with the update of the environmental states (Fig. 1). The model then iterated through all individual fish which executed their respective tasks, starting by submitting their current position to the environmental model. Based on this position, the environmental model computed local environmental conditions and supplied these back to the fish. The fish computed its behavioural response toward these conditions, resulting in an updated position and swimming speed. If the fish decided to ingest feed, it sent a request for feed intake to the environmental model. The environmental model then evaluated whether there was sufficient feed in the vicinity of the fish to cover the requested amount. If there was sufficient feed, the environmental model returned the amount originally requested by the fish. Otherwise, a feed intake reduced in accordance to local feed concentration was returned to th