The attenuation length models implemented in AraSim give unphysical behavior at large depths. The following changes should be implemented to produce more accurate behavior and an improved design going forward:
- For each of the three attenuation functions (
IceModel::EffectiveAttenuationLength, IceModel::GetARAIceAttenuLength, and IceModel::GetFreqDepIceAttenuLength) two if statements should be added:
- if the depth is < 2.5 km (depth where Dave Besson says the model becomes unreliable/unphysical), an attenuation length of 0 should be returned
- if the depth is < bedrock, an attenuation length of 0 should be returned (this case is added as a fail-safe in case the model behavior between the bedrock and 2.5 km depth is corrected down the line)
- NB this behavior may need to be handled with some care to avoid introducing
nan's when the attenuation factor is calculated ~1/attenuation length in the Report class
- The ice temperature only enters through the attenuation length, but for safety/consistency, some safeguards should also be added to
IceModel::temperature.
- The function should do something like
return min(temp, 0), to ensure it does not return positive temperatures at large depths.
- One could consider causing the function to crash if a depth below/above the ice was passed (but this depends a bit on how the attenuation length function is corrected)
The attenuation length models implemented in AraSim give unphysical behavior at large depths. The following changes should be implemented to produce more accurate behavior and an improved design going forward:
IceModel::EffectiveAttenuationLength,IceModel::GetARAIceAttenuLength, andIceModel::GetFreqDepIceAttenuLength) two if statements should be added:nan's when the attenuation factor is calculated ~1/attenuation length in theReportclassIceModel::temperature.return min(temp, 0), to ensure it does not return positive temperatures at large depths.