open-AIMS / ADRIA_matlab

Repository for the development of ADRIA: Adaptive Dynamic Reef Intervention Algorithms. ADRIA is a multi-criteria decision support tool set particularly useful for informing reef restoration and adaptation interventions.
1 stars 0 forks source link

Updated bleaching function #63

Closed KRNA01 closed 2 years ago

KRNA01 commented 2 years ago

The current bleaching function and associated parameters have two issues:

  1. The function overestimates bleaching mortality at low heat stress (DHWs < 3 degC weeks)
  2. Same bleaching sensitivity for year 1 is applied to all coral groups, except for enhanced corals .

I propose a simple way to fix this, but will need your help to ensure I don't stuff up a parameter table somewhere.

Firstly, new parameter values for the general Gompertz function will fix point 1, specifically replacing the parameter value pair of [-2.74, -0.25] to [-6.0, -0.40]. This is shown below as the change from the grey dashed line to the red solid curve. I'm in conversation with Yves-Marie Bozec around this parameterisation, and have already implemented these new values (red curve) as placeholders in the 40Corals branch.

image

Fixing the second point is a bit more curly and involves adding a bleaching sensitivity (or hardiness) parameter for the four different coral taxa.

Currently, the bleaching function looks like this.

> ad = a_adapt + tstep .* n_adapt;
> 
> % Model 1: %Based on delta covers observed by Hughes et al. 2018 (Fig 2A)
> Y = exp(n_p1 * (exp(n_p2 * (dhw - ad) )));

While we cater for assisted adaptation (an immediate reduction in bleaching sensitivity effected by intervention) and natural adaptation (a gradual reduction in sensitivity), we don't capture current (this year's) natural differences in sensitivity between taxa.

Can I suggest we do this by adding a vector for taxa-specific sensitivity, which then simply adds to assisted and natural adaptation?

The 'ad' line in the bleaching function would then look like this:

> ad = a_adapt + bleaching_hardiness + tstep .* n_adapt;

(I'm opting for 'hardiness' to keep parameters positive.)

@ConnectedSystems, can we then define this new bleaching_hardiness parameter as a vector where we assign different values to different taxa?

This new taxa-specific sensitivity parameters would replace the taxa-specific differences in natural adaptation. So, in the coralSpec()' function, I suggest we then simply change natad image

to

natad = repmat(0.025, 36,1)

and we then capture differences in sensitivities between taxa via the bleaching_hardiness vector. Based on the Hughes et al. 2018 data for differences in bleaching sensitivities between taxa during the 2016 bleaching event, these sensitivities can roughly be captured by a 1DHW difference in sensitivity (hardiness) between acropora (tabular and corymbose) and large massives (Poritidae) and 2 DHW between acropora and small massives (Faviids). These are captured in the yellow and blue curves in the figure above.

image

@ConnectedSystems, if you agree we need this, please let me know how we best implement the bleaching_hardiness vector and where.

For the two Acropora taxa (four first coral groups), I suggest we assign a bleaching-hardiness score of 0 DHW (max sensitivity consistent with Hughes et al. 2018 data). For small massives and encrusting (taxon 3), I suggest we assign these a score of 2 DHW (right-shift of the bleaching mortality curve). For large massives (Porites), I suggest we assign these a bleaching-hardiness score of 1DHW.

We can adjust these specific values when we (RRAP) get better data for calibrations.

ConnectedSystems commented 2 years ago

Hi @KRNA01

~If the hardiness values simply shift the adaptation values, I think it simpler to add those values to natad, especially if "this new taxa-specific sensitivity parameters would replace the taxa-specific differences in natural adaptation."~

~Doing so would then require no other code change beyond adjusting natad values, e.g.~

natad = repmat(0.025, 36, 1);
natad = natad + hardiness;
params.natad = natad;

~We could indeed make hardiness its own parameter set. Keep in mind doing so would increase the overall number of model dimensions to > 300. Multiply by nsites if we ever go to a fully spatially explicit per-site scale.~

~Would it be necessary/informative to be able to attribute outcomes to coral hardiness levels? If not, my suggestion above would lower the number of dimensions.~

EDIT: Scratch the above, misinterpreted the code.

I think an additional hardiness parameter is indeed what you need.

The coralSpec file is the most appropriate place for these additions/changes.

I'll make a note of this so I can change other affected parts of the codebase (need to make these more generic!)

KRNA01 commented 2 years ago

Great, thanks @ConnectedSystems

KRNA01 commented 2 years ago

@ConnectedSystems, have now implemented this and results make sense.

  1. Added 'bleaching_resistance' parameter to coralSpec() function and updated natad accordingly.
  2. Updated _ADRIA_bleachingmortality() function

If you agree with this, then happy to close issue.

ConnectedSystems commented 2 years ago

Let me run a few more tests on this but I can confirm extractCoralSamples is working without issue for this (the function that was causing non-proportional values discussed via email).

ConnectedSystems commented 2 years ago

Closing as relevant tests pass and I cannot see any undue changes as a result of including this hardiness parameter.