@@ -666,9 +666,19 @@ FUNCTION void get_growth2(const int y)
666666 }
667667 else // in linear phase for subseas
668668 {
669- Ave_Size(t + 1, 1, g, a) = len_bins(1) + lin_grow(g, ALK_idx, a) * (Cohort_Lmin(gp, y, a) - len_bins(1));
669+ Ave_Size(t + 1, 1, g, k2) = len_bins(1) + lin_grow(g, ALK_idx, a) * (Cohort_Lmin(gp, y, a) - len_bins(1));
670+ }
671+ if (timevary_MG(y, 2) > 0)
672+ {
673+ t2 = Ave_Size(t + 1, 1, g, k2) - Ave_Size(t, 1, g, a); // growth increment
674+ if (t2 < 0.0) // trap to prevent decrease in size-at-age
675+ {
676+ join1 = 1.0 / (1.0 + mfexp(100. * t2 ));
677+ Ave_Size(t + 1, 1, g, k2) = Ave_Size(t, 1, g, a) * join1 + Ave_Size(t + 1, 1, g, k2) * (1 - join1);
678+ if (do_once == 1 && g == 1)
679+ echoinput << y << " " << a << " prevent shrink " << t2 << " " << join1 << " " << Ave_Size(t, 1, g, a) << " " << Ave_Size(t + 1, 1, g, k2) << endl;
680+ }
670681 }
671-
672682 } // done ageloop
673683 break ;
674684 }
@@ -683,6 +693,17 @@ FUNCTION void get_growth2(const int y)
683693 if (a < nages || s < nseas)
684694 Ave_Size(t + 1, 1, g, k2) = Ave_Size(t, 1, g, a) +
685695 (-VBK_work - (-VBK_work / Richards(gp)) * (log(exp(Richards(gp) * (real_age(g, 1, a) + 1 - t50)) + 1) - log(exp(Richards(gp) * (real_age(g, 1, a) - t50)) + 1))) * seasdur(s);
696+ if (timevary_MG(y, 2) > 0)
697+ {
698+ t2 = Ave_Size(t + 1, 1, g, k2) - Ave_Size(t, 1, g, a); // growth increment
699+ if (t2 < 0.0) // trap to prevent decrease in size-at-age
700+ {
701+ join1 = 1.0 / (1.0 + mfexp(100. * t2 ));
702+ Ave_Size(t + 1, 1, g, k2) = Ave_Size(t, 1, g, a) * join1 + Ave_Size(t + 1, 1, g, k2) * (1 - join1);
703+ if (do_once == 1 && g == 1)
704+ echoinput << y << " " << a << " prevent shrink " << t2 << " " << join1 << " " << Ave_Size(t, 1, g, a) << " " << Ave_Size(t + 1, 1, g, k2) << endl;
705+ }
706+ }
686707 if (a == nages && s == nseas)
687708 plusgroupsize = Ave_Size(t, 1, g, nages) +
688709 (-VBK_work - (-VBK_work / Richards(gp)) * (log(exp(Richards(gp) * (real_age(g, 1, a) + 1 - t50)) + 1) - log(exp(Richards(gp) * (real_age(g, 1, a) - t50)) + 1))) * seasdur(s);
@@ -745,15 +766,15 @@ FUNCTION void get_growth2(const int y)
745766 if (plusgroupsize_update == 0) // Linf_decay == -998.
746767 {
747768 Ave_Size(t + 1, 1, g, nages) = Ave_Size(t, 1, g, nages);
748- if (do_once == 999 && timevary_MG_firstyr == y)
769+ if (do_once == 1 && timevary_MG_firstyr == y)
749770 {
750771 warnstream << " plus group mean size is carried forward and NOT being updated for time-varying growth for sex: " << sx(g) << " . Suggest setting Linf_decay = -997, or to a pos. value that approximates Z in the initial year for the plus group" ;
751772 write_message (WARN, 0);
752773 }
753774 }
754775 else // Linf_decay == -997 or a positive Linf_decay is used in initial year growth
755776 {
756- if (do_once == 999 && timevary_MG_firstyr == y && g == 1)
777+ if (do_once == 1 && timevary_MG_firstyr == y && g == 1)
757778 {
758779 warnstream << " plus group mean size is updated in years with time-vary growth beginning in: " << y << " ; can turn this off with Linf_decay = -998" ;
759780 write_message (NOTE, 0);
@@ -875,6 +896,17 @@ FUNCTION void get_growth3(const int y, const int t, const int s, const int subse
875896 temp = LminR + (LminR - LinfR) * (mfexp(VBK(gp, 0) * sumseas_yr * VBK_seas(s) * (real_age(g, ALK_idx, a) - AFIX)) - 1.0) * Cohort_Growth(y, a);
876897 Ave_Size(t, subseas, g, a) = pow(temp, inv_Richards);
877898 }
899+ if (timevary_MG(y, 2) > 0)
900+ {
901+ t2 = Ave_Size(t, subseas, g, a) - Ave_Size(t, 1, g, a); // growth increment
902+ if (t2 < 0.0) // trap to prevent decrease in size-at-age
903+ {
904+ join1 = 1.0 / (1.0 + mfexp(100. * t2 ));
905+ Ave_Size(t, subseas, g, a) = Ave_Size(t, 1, g, a) * join1 + Ave_Size(t, subseas, g, a) * (1 - join1);
906+ if (do_once == 1 && g == 1)
907+ echoinput << y << " " << a << " prevent shrink " << t2 << " " << join1 << " " << Ave_Size(t, 1, g, a) << " " << Ave_Size(t, subseas, g, a) << endl;
908+ }
909+ }
878910 } // done ageloop
879911 break;
880912 } // done Richards
@@ -888,6 +920,17 @@ FUNCTION void get_growth3(const int y, const int t, const int s, const int subse
888920 // calculate a full year' s growth increment, then multiple by seasdur(s)
889921 Ave_Size(t, subseas, g, a) = Ave_Size(t, 1, g, a) +
890922 (VBK_temp - (VBK_temp / Richards(gp)) * (log(exp(Richards(gp) * (real_age(g, ALK_idx, a) + 1 - t50)) + 1) - log(exp(Richards(gp) * (real_age(g, ALK_idx, a) - t50)) + 1))) * subseasdur(s, subseas);
923+ if (timevary_MG(y, 2) > 0)
924+ {
925+ t2 = Ave_Size(t, subseas, g, a) - Ave_Size(t, 1, g, a); // growth increment
926+ if (t2 < 0.0) // trap to prevent decrease in size-at-age
927+ {
928+ join1 = 1.0 / (1.0 + mfexp(100. * t2 ));
929+ Ave_Size(t, subseas, g, a) = Ave_Size(t, 1, g, a) * join1 + Ave_Size(t, subseas, g, a) * (1 - join1);
930+ if (do_once == 1 && g == 1)
931+ echoinput << y << " " << a << " prevent shrink " << t2 << " " << join1 << " " << Ave_Size(t, 1, g, a) << " " << Ave_Size(t, subseas, g, a) << endl;
932+ }
933+ }
891934 } // done ageloop
892935 break;
893936 }
0 commit comments