ss3-source-code
ss3-source-code copied to clipboard
Mean size in plus group
Imported from redmine, Issue #12336 Opened by teresa.amar on 2015-08-25 Status when imported: New
There is an approximation in SS for which I'm seeking your input.
The issue is the mean body length of fish in the plus group. That length drives body weight, fecundity, size selectivity, and M (for Lorenzen M approach).
Hence the order of operations in SS is to do growth first, then M and fecundity, and then all the selectivities. The mean body length in the plus group is a function of the growth parameters, the number of age groups (which controls how much growth occurs before entering the plus group) and Z. Because growth comes first, SS is hardwired to use Z=0.2 for that mean size calculation (note this is just for the mean size, the actual Z for that time step is used for the N calculations later). Also note that this whole issue is meaningless if fish achieve a high fraction of Linf before they reach the accumulator age.
During the time series, the updating of the mean size in the plus group is an easy weighted average of the mean size of fish already in the plus group and the mean size of the fish just entering the plus group. Easy.
The challenge is the mean size in the plus group under equilibrium conditions where the calculations become circular. As noted earlier, this uses Z=0.2 and runs out to 3*maxage to create a better mean size for the plus group under equil conditions.
However, this means that the mean size is the same for virgin, initial equilibrium, and for all steps of the F profiling for SPR and MSY calculations. All models are approximations......
I could replace that 0.2 factor with a user input, but that wouldn't solve the dynamical issue when profiling on F.
I have been pondering the equil_calc() section of SS (which calculates equil numbers-at-age from input M, F, selectivity) to see if it might be feasible to update the mean size there before calculating equilibrium SSB and Catch. It seems feasible, but still wouldn't allow updating of size selectivity or Lorenzen M.
comment from @RickMethot on 2020-02-28: Also, When Linf is > size at maxage, increased mortality at maxage should cause the size to decline during time series. This in not currently working in 3.30 and it seems it only worked in 3.24 if growth was updated every year. The code to do this is in growth2 and growth2_Richards functions. It needs to move to timeseries so it can execute every year. Best if it could be implemented such that only ALK and fishselex for maxage are updated. Updating all ages just to get maxage updated is expensive operation. Note that the updating for all ages happens whenever there is time-varying growth. So the easy switch is just to let user invoke time-vary growth switch even if growth itself is not time-varying.