@@ -31,6 +31,8 @@ int LongleyRice(double theta_hzn[2], double f__mhz, complex<double> Z_g, double
31
31
double h_e__meter[2 ], double gamma_e, double N_s, double delta_h__meter, double h__meter[2 ],
32
32
double d__meter, int mode, double *A_ref__db, long *warnings, int *propmode)
33
33
{
34
+ double d_x__meter = 0 ;
35
+
34
36
// effective earth radius
35
37
double a_e__meter = 1 / gamma_e;
36
38
@@ -170,7 +172,6 @@ int LongleyRice(double theta_hzn[2], double f__mhz, complex<double> Z_g, double
170
172
171
173
// [ERL 79-ITS 67, Eqn 3.19]
172
174
*A_ref__db = A_o__db + kHat_1__db_per_meter * d__meter + kHat_2__db_per_meter * log (d__meter);
173
- *propmode = MODE__LINE_OF_SIGHT;
174
175
}
175
176
else // this is a trans-horizon path
176
177
{
@@ -183,7 +184,7 @@ int LongleyRice(double theta_hzn[2], double f__mhz, complex<double> Z_g, double
183
184
double A_6__db = TroposcatterLoss (d_6__meter, theta_hzn, d_hzn__meter, h_e__meter, a_e__meter, N_s, f__mhz, theta_los, &h0);
184
185
double A_5__db = TroposcatterLoss (d_5__meter, theta_hzn, d_hzn__meter, h_e__meter, a_e__meter, N_s, f__mhz, theta_los, &h0);
185
186
186
- double M_s, A_s0__db, d_x__meter ;
187
+ double M_s, A_s0__db;
187
188
188
189
// if we got a reasonable prediction value back...
189
190
if (A_5__db < 1000.0 )
@@ -207,15 +208,21 @@ int LongleyRice(double theta_hzn[2], double f__mhz, complex<double> Z_g, double
207
208
208
209
// Determine if its diffraction or troposcatter and compute the loss
209
210
if (d__meter > d_x__meter)
210
- {
211
211
*A_ref__db = M_s * d__meter + A_s0__db;
212
- *propmode = MODE__TROPOSCATTER;
213
- }
214
212
else
215
- {
216
213
*A_ref__db = M_d * d__meter + A_d0__db;
217
- *propmode = MODE__DIFFRACTION;
218
- }
214
+ }
215
+
216
+ // set mode of propagation
217
+ double delta__meter = d__meter - d_ML__meter;
218
+ if (int (delta__meter) < 0 )
219
+ *propmode = MODE__LINE_OF_SIGHT;
220
+ else
221
+ {
222
+ if (d__meter <= d_sML__meter || d__meter <= d_x__meter)
223
+ *propmode = (int (delta__meter) == 0 ) ? MODE__DIFFRACTION_SINGLE_HORIZON : MODE__DIFFRACTION_DOUBLE_HORIZON;
224
+ else
225
+ *propmode = (int (delta__meter) == 0 ) ? MODE__TROPOSCATTER_SINGLE_HORIZON : MODE__TROPOSCATTER_DOUBLE_HORIZON;
219
226
}
220
227
221
228
// Don't allow a negative loss
0 commit comments