Here is a little more info about what is happening inside the SS3 code to calculate these quantities.
All of these benchmark (also called reference point) quantities are calculated as equilibrium values on a per recruit basis. This uses the SS3 function equil_calc. This same function also is used to calculate the initial equilibrium population for the time series. It returns SSB/R and Catch/R. These per recruit quantities can then be combined with the function for equilibrium spawner-recruitment to present the results in terms of SSB and Catch. All of these equilibrium calculations take into account all the details of the model setup (multiple fleets with different selectivity, growth morphs, areas with movement, etc.).
In the benchmark function, SS3 repeatedly calls equil_calc with a different level of overall F in order to match desired criteria. First it searches for the F that will produce the target SPR, then target SSB/Bzero, then MSY, etc. In this sequence, SPR is (SSB/R with fishing) / (SSB/R with F=0). You can see the details of this search in the output file: forecast-report.sso.
The table of output termed mgmt_quantities shows the results of all the searches. It can be found in ss_summary.sso and in report.sso. Below is a section of that table. The scheme for organizing and labelling the quantities is as follows:
*_Btgt are quantities that come from the search for a particular level of SSB/Bzero, e.g. Btgt. So, SPR_Btgt is the SPR that comes from finding the F that produces Btgt, and SSB_SPR is the absolute SSB that comes from fishing at F that satisfies the target SPR condition
*_SPR come from the search for a particular SPR
*_MSY come from search for MSY
You will see that the level of F for each of these searches is similar but slightly different.
SSB_Btgt 1.28468e+06
SPR_Btgt 0.4375
annF_Btgt 0.0254095
Dead_Catch_Btgt 134910
SSB_SPR 1.15622e+06
annF_SPR 0.028074
Dead_Catch_SPR 137235
SSB_MSY 1.02929e+06
SPR_MSY 0.362949
annF_MSY 0.0309164
Dead_Catch_MSY 138050
I hope this helps.
Rick