diff --git a/SS_benchfore.tpl b/SS_benchfore.tpl index 23fb17b7..0d53df67 100644 --- a/SS_benchfore.tpl +++ b/SS_benchfore.tpl @@ -3043,7 +3043,7 @@ FUNCTION void Get_Forecast() if (Do_Retain(f) > 0) { disc_age(t, disc_fleet_list(f), g) = Hrate(f, t) * elem_prod(elem_prod(natage(t, p, g), sel_num(s, f, g)), Zrate2(p, g)); // selected numbers - disc_age(t, disc_fleet_list(f) + N_retain_fleets, g) = Hrate(f, t) * elem_prod(elem_prod(natage(t, p, g), sel_ret_num(s, f, g)), Zrate2(p, g)); // selected numbers + disc_age(t, disc_fleet_list(f) + N_retain_fleets, g) = Hrate(f, t) * elem_prod(elem_prod(natage(t, p, g), sel_ret_num(s, f, g)), Zrate2(p, g)); // retained numbers } } //close gmorph loop catch_fleet(t, f) *= temp; @@ -3212,7 +3212,7 @@ FUNCTION void Get_Forecast() if (Do_Retain(f) > 0) { disc_age(t, disc_fleet_list(f), g) = Hrate(f, t) * elem_prod(elem_prod(natage(t, p, g), sel_num(s, f, g)), Zrate2(p, g)); // selected numbers - disc_age(t, disc_fleet_list(f) + N_retain_fleets, g) = Hrate(f, t) * elem_prod(elem_prod(natage(t, p, g), sel_ret_num(s, f, g)), Zrate2(p, g)); // selected numbers + disc_age(t, disc_fleet_list(f) + N_retain_fleets, g) = Hrate(f, t) * elem_prod(elem_prod(natage(t, p, g), sel_ret_num(s, f, g)), Zrate2(p, g)); // retained numbers } } //close gmorph loop } // close fishery diff --git a/SS_param.tpl b/SS_param.tpl index 7e83b00f..2f4c50be 100644 --- a/SS_param.tpl +++ b/SS_param.tpl @@ -175,6 +175,7 @@ PARAMETER_SECTION LOCAL_CALCS // clang-format on Ave_Size.initialize(); + Wt_Age_t.initialize(); // if(SRparm(N_SRparm2)!=0.0 || SRparm_PH(N_SRparm2)>0) {SR_autocorr=1;} else {SR_autocorr=0;} // flag for recruitment autocorrelation if (do_recdev == 1) { @@ -358,7 +359,7 @@ PARAMETER_SECTION matrix Hrate(1,Nfleet,styr-3*nseas,k) //Harvest Rate for each fleet; this is F 4darray natage(styr-3*nseas,k,1,pop,1,gmorph,0,nages) // add +1 year 4darray catage(styr-3*nseas,k,1,Nfleet,1,gmorph,0,nages) - 4darray disc_age(styr-3*nseas,TimeMax_Fcast_std+nseas,1,2*N_retain_fleets,1,gmorph,0,nages); + 4darray disc_age(styr-3*nseas,TimeMax_Fcast_std+nseas,1,4*N_retain_fleets,1,gmorph,0,nages); // where 3* holds disc_bodywt and 4* holds ret_bodywt 4darray equ_catage(1,nseas,1,Nfleet,1,gmorph,0,nages) 4darray equ_numbers(1,nseas,1,pop,1,gmorph,0,3*nages) 4darray equ_Z(1,nseas,1,pop,1,gmorph,0,nages) diff --git a/SS_popdyn.tpl b/SS_popdyn.tpl index b98ea6e8..4e237b5c 100644 --- a/SS_popdyn.tpl +++ b/SS_popdyn.tpl @@ -1305,7 +1305,7 @@ FUNCTION void get_time_series() if (Do_Retain(f) > 0) { disc_age(t, disc_fleet_list(f), g) = Hrate(f, t) * elem_prod(elem_prod(natage(t, p, g), sel_num(s, f, g)), Zrate2(p, g)); // selected numbers - disc_age(t, disc_fleet_list(f) + N_retain_fleets, g) = Hrate(f, t) * elem_prod(elem_prod(natage(t, p, g), sel_ret_num(s, f, g)), Zrate2(p, g)); // selected numbers + disc_age(t, disc_fleet_list(f) + N_retain_fleets, g) = Hrate(f, t) * elem_prod(elem_prod(natage(t, p, g), sel_ret_num(s, f, g)), Zrate2(p, g)); // retained numbers } } //close gmorph loop } diff --git a/SS_selex.tpl b/SS_selex.tpl index 531d3e44..ca996510 100644 --- a/SS_selex.tpl +++ b/SS_selex.tpl @@ -2026,6 +2026,14 @@ FUNCTION void Make_FishSelex() { sel_ret_bio(s, f, g, a) = sel_a(yf, f, gg, a) * (ALK_w(a)(llo, lhi) * sel_l_r_w(llo, lhi)); sel_ret_num(s, f, g, a) = sel_a(yf, f, gg, a) * (ALK_w(a)(llo, lhi) * sel_l_r(yf, f, gg)(llo, lhi)); + if (Do_Retain(f) > 0) { + disc_age(tz, disc_fleet_list(f) + 2 * N_retain_fleets, g, a) = + ALK_w(a) * elem_prod(tempvec_l, (1.0 - retain(yf, f)(1, nlength))) / + (ALK_w(a) * elem_prod((1.0 - retain(yf, f)(1, nlength)), sel_l(yf, f, gg)) + 1.0e-09); // mean body wt of discarded fish + disc_age(tz, disc_fleet_list(f) + 3 * N_retain_fleets, g, a) = + ALK_w(a) * elem_prod(tempvec_l, (retain(yf, f)(1, nlength))) / + (ALK_w(a) * elem_prod(retain(yf, f)(1, nlength), sel_l(yf, f, gg)) + 1.0e-09); // mean body wt of retained fish + } } else if (a == nages) { diff --git a/SS_write_report.tpl b/SS_write_report.tpl index 4c323677..17aeb8f1 100644 --- a/SS_write_report.tpl +++ b/SS_write_report.tpl @@ -2987,6 +2987,11 @@ FUNCTION void write_bigoutput() { SS2out << "F " << f << " " << y << " " << s << " " << sx(g) << " " << g << " " << y << "_" << f << "_F" << Hrate(f, t) * save_sel_num(t, f, g) << endl; SS2out << "Fdead " << f << " " << y << " " << s << " " << sx(g) << " " << g << " " << y << "_" << f << "_Fdead" << Hrate(f, t) * save_F_dead(t, f, g) << endl; +// if doing length-based retention, then output the body weight for each partition + if (WTage_rd == 0 && Do_Retain(f) == 1) { + SS2out << "disc_bodywt " << f << " " << y << " " << s << " " << sx(g) << " " << g << " " << y << "_" << f << "_disc_bodywt " << disc_age(t, disc_fleet_list(f) + 2 * N_retain_fleets, g) << endl; + SS2out << "ret_bodywt " << f << " " << y << " " << s << " " << sx(g) << " " << g << " " << y << "_" << f << "_ret_bodywt " << disc_age(t, disc_fleet_list(f) + 3 * N_retain_fleets, g) << endl; + } } SS2out << "bodywt " << f << " " << y << " " << s << " " << sx(g) << " " << g << " " << y << "_" << f << "_bodywt" << Wt_Age_t(t, f, g) << endl; }