@@ -14,6 +14,19 @@ abstract type MediumProperties end
14
14
15
15
_not_implemented (type) = error (" Not implemented for type $(typeof (type)) " )
16
16
17
+ """
18
+ get_dispersion_model(medium::MediumProperties)
19
+ Return the dispersion model for a given medium.
20
+ """
21
+ get_dispersion_model (medium:: MediumProperties ) = _not_implemented (medium)
22
+
23
+
24
+ """
25
+ get_scattering_model(medium::MediumProperties)
26
+ Return the scattering model for a given medium.
27
+ """
28
+ get_scattering_model (medium:: MediumProperties ) = _not_implemented (medium)
29
+
17
30
"""
18
31
pressure(medium::MediumProperties)
19
32
@@ -47,15 +60,22 @@ radiation_length(medium::MediumProperties) = _not_implemented(medium)
47
60
48
61
Return a scattering angle sampled from the scattering function of the medium.
49
62
"""
50
- sample_scattering_function (medium:: MediumProperties ) = _not_implemented (medium)
63
+ function sample_scattering_function (medium:: MediumProperties )
64
+ model = scattering_model (medium)
65
+
66
+
67
+ end
51
68
52
69
"""
53
70
scattering_length(medium::MediumProperties, wavelength)
54
71
55
72
Return scattering length at `wavelength` in units m.
56
73
`wavelength` is expected to be in units nm. Returned length is in units m.
57
74
"""
58
- scattering_length (medium:: MediumProperties , wavelength) = _not_implemented (medium)
75
+ function scattering_length (medium:: MediumProperties , wavelength)
76
+ model = get_scattering_model (medium)
77
+ return scattering_length (model, wavelength)
78
+ end
59
79
60
80
"""
61
81
absorption_length(medium::MediumProperties, wavelength)
@@ -71,15 +91,21 @@ absorption_length(medium::MediumProperties, wavelength) = _not_implemented(mediu
71
91
Return the phase refractive index at `wavelength`.
72
92
`wavelength` is expected to be in units nm.
73
93
"""
74
- phase_refractive_index (medium:: MediumProperties , wavelength) = _not_implemented (medium)
94
+ function phase_refractive_index (medium:: MediumProperties , wavelength)
95
+ model = get_dispersion_model (medium)
96
+ return phase_refractive_index (model, wavelength)
97
+ end
75
98
76
99
"""
77
100
dispersion(medium::MediumProperties, wavelength)
78
101
79
102
Return the dispersion dn/dλ at `wavelength` in units 1/nm.
80
103
`wavelength` is expected to be in units nm.
81
104
"""
82
- dispersion (medium:: MediumProperties , wavelength) = _not_implemented (medium)
105
+ function dispersion (medium:: MediumProperties , wavelength)
106
+ model = get_dispersion_model (medium)
107
+ return dispersion (model, wavelength)
108
+ end
83
109
84
110
"""
85
111
cherenkov_angle(medium, wavelength)
0 commit comments