nmfs-ost / ss3-source-code

The source code for Stock Synthesis (SS3).
https://nmfs-ost.github.io/ss3-website/
Creative Commons Zero v1.0 Universal
36 stars 16 forks source link

refactor Fmethod controls and expand Fmethod 4 capabilities #581

Closed Rick-Methot-NOAA closed 5 months ago

Rick-Methot-NOAA commented 5 months ago

Describe the solution you would like.

This issue extends the work of issue #570. Here I introduce a new indexing array F_PH_time(f,t) that holds the phase in which a F parameter becomes active. In earlier phases, that F parameter will use hybrid. A value of -1 will keep the input value for that F, 99 will cause it to stay hybrid, and other values are as intended. This new time-specific array allowed deprecated some other F indexing arrays and generally simplifying the code. This array also allowed the F_detail approach previously only available with Fmethod 2 to be available in Fmethod 4. So, Fmethod 4 is now a complete superset of Fmethod 2 and 3. The syntax for F_detail with FMethod 4 looks like this:

4 # F_Method:  1=Pope midseason rate; 2=F as parameter; 3=F as hybrid; 4=fleet-specific parm/hybrid (#4 is superset of #2 and #3 and is recommended)
2.9 # max F (methods 2-4) or harvest fraction (method 1)
# Read list of fleets that do F as parameter; unlisted fleets stay hybrid, bycatch fleets must be included with start_PH=1, high F fleets should switch early
# (A) fleet;
# (B) F_starting_value (ignored if start_PH=1 or reading from ss3.par);
# (C) start_PH for fleet's Fparms (99 to stay in hybrid, <0 to stay at starting value)
# Terminate list with -9999 for fleet (use -9998 to read fleet-time specific F values after reading N hybrid tune loops)
# (A) (B) (C)
 1 0.001 99 # Art_Gillnet_1
 2 0.001 2 # LongLine_2
 3 0.001 99 # Purse_Seine_3
 4 0.1001 2 # RR_4
 5 0.1 99 # FAD_5
-9998 1 1 # end of list, trigger reading F_detail
4 #_number of loops for hybrid tuning; 4 precise; 3 faster; 2 enough if switching to parms is enabled
 # F_detail:  List of fleet-time specific F related values to read; enter -Yr to fill remaining years&seasons; -999 for phase or catch_se keeps base value for the run
#Fleet Yr Seas F_value catch_se phase
 2 1960 1 0.123 0.05 3
-9999 1 1 1 1 1  # end of F_detail: time-specific F inputs 
#
#_initial_F_parms; for each fleet x season that has init_catch; nest season in fleet; count = 0

There is pretty good detail of what is going on in echoinput; search on: 4 F_Method as read. To-Do

FMethod4_test.zip

Describe alternatives you have considered

none

Statistical validity, if applicable

NA

Describe if this is needed for a management application

NA

Additional context

much improved code internal documentation