Ticket #1011 (closed assessed: fixed)
Relative and Absolute biomass time series do not work well together
Reported by: | villyc | Owned by: | |
---|---|---|---|
Priority: | normal | Milestone: | Ecopath 6: release 6.2.1 |
Component: | Ecosim | Version: | |
Severity: | NOT SET | Keywords: | |
Cc: |
Description
Here's a weird behavior using EwE6.2. Read in the (zip) lionfish model; Ecosim: prueba taller lionfish. Import the attached time series. You'll see that lionfish dies off (green line, high fishing), and other than that nothing much happens. That is wrong, there is a time series that introduces lionfish after five years. Now go to time series and disable the third time series, a relative biomass for lion fish. Run again. Now it's OK, the lionfish bounces back.
So, adding a relative B time series to a group that has a forced biomass causes the forced biomass to be ignored. That doesn't make sense.
Change History
comment:2 Changed 14 years ago by jeroens
I see in the code exactly what you describe. Both Relative and Absolute Biomass TS calculate PoolForceBB(k) in DoDatValCalculations; in case of an absolute biomass this value is set to DatVal(,) and in case of a relative biomass this value is set to 0.
Order thus matters: if both an absolute and relative TS are defined for the same poolcode, and the relative biomass TS is handled after the absolute biomass TS, any previously calculated value of PoolForceBB is set to 0 and the effect of the absolute biomass TS is negated. This happens both in EwE5 and EwE6.
I see a solution but I am not sure of its implications. If relative biomass time series are ONLY meant for display and should not in any way affect the biomass calculations, then I would suggest to remove the code that sets PoolForceBB to 0 for Relative Biomass time series. I have attached a patch file that illustrates this change for EwE6.
Let's figure out what is expected to happen
' ================================================ ' EwE5 code ' ================================================ Public Sub DoDatValCalculations(NdatYear As Integer, _ NdatType As Integer, _ DatVal() As Single, _ ReadingCsvFile As Boolean) .. .. For i = 1 To NdatYear For j = 1 To NdatType If IsDatShown(j) = True Then Select Case DatType(j) Case 0, 1 If DatVal(i, j) > 0 Then Iobs = Iobs + 1 PoolForceBB(DatPool(j), i) = 0 Case -1 'pool biomass forcing PoolForceBB(DatPool(j), i) = DatVal(i, j) Case 2 'time forcing data If DatPool(j) > ForcingShapes + 3 Then .. ..
Changing the order of the timeseries so that the forced biomass comes after the relative biomass: then it works.