Contents

Frost 1980: selective grazing on phytoplankton

This model recreates the work by Frost in 1980 to explore how selective grazing may structure phytoplankton communities. In this model there is no interaction between grazers or phytoplankton species. The naming conventions are as follows:

Pic = Phytoplankton: control case

Pins, gins = Phytoplankton, grazing values: non-selective grazing

Pis, gis = Phytoplankton, grazing values: selective grazing

clear
close all

% set up initial variables
P0=ones(1,5);                       % Initial phytplankton concentration
mu=[0.30 0.25 0.20 0.15 0.10];      % Phytoplankton growth rate
gis=[0.35 0.25 0.13 0.02 0.01];     % Grazing rate, selective
gins=0.1.*ones(1,5);                % Grazing rate, non-selective

% duration in days,
duration=5;

% timestep in hours, then days
timestep=2;
timestep=24/timestep;

% total number of steps: add 1 to start at t0
ts=duration*timestep+1;

% set up response matrices
Pic=nan(ts,5);Pic(1,:)=P0;          % control - no grazing
Pins=nan(ts,5);Pins(1,:)=P0;        % non-selective grazing
Pis=nan(ts,5);Pis(1,:)=P0;          % selective grazing

Main loop

for i=2:ts
    Pic(i,:)=Pic(i-1,:).*exp((mu)./timestep);
    Pins(i,:)=Pins(i-1,:).*exp((mu-gins)./timestep);
    Pis(i,:)=Pis(i-1,:).*exp((mu-gis)./timestep);
end

Plot results

The two lines below are equivalent and they set up the time vector for plotting the responses.

t=linspace(0,duration,ts);
% t=0:1/timestep:duration;

cmap=colormap(hsv(5));

subplot(2,1,1)
bar([Pic(end,:);Pins(end,:);Pis(end,:)],'grouped')
set(gca,'xticklabel',{'none','non-selective','selective'});
xlabel('grazing behavior')
ylabel('P biomass')
ch=get(gca,'children');
ylim([0 5])

subplot(2,3,4)
set(gca,'nextplot','replacechildren','colororder',cmap)
plot(t,Pic)
title('No Grazing')
ylim([0 5])
ylabel('P biomass')
box on

subplot(2,3,5)
set(gca,'nextplot','replacechildren','colororder',cmap)
plot(t,Pins)
title('Non-Selective Grazing')
ylim([0 5])
xlabel('time (days)')
box on

subplot(2,3,6)
set(gca,'nextplot','replacechildren','colororder',cmap)
plot(t,Pis)
title('Selective Grazing')
ylim([0 5])
for i=1:length(mu)
    lgd(i,:)=sprintf('%0.2f',mu(i));
end
lg=legend(lgd,'location','northwest');
set(lg,'box','off','color','none')
box on

% [Pic(end,:);Pins(end,:);Pis(end,:)]'