Skip to content

Commit d3add0f

Browse files
prevent mean length shrinkage in Richards, gompertz, and cessation
1 parent a497590 commit d3add0f

1 file changed

Lines changed: 47 additions & 4 deletions

File tree

SS_biofxn.tpl

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)