43 #define THROW_IF_INVALID_DETAILED() {if (!valid) { \
45 if(!validWeather) e.addText("Invalid trop model: weather"); \
46 if(!validHeights) e.addText("Invalid trop model: validHeights"); \
47 if(!validRxHeight) e.addText("Invalid trop model: validRxHeight"); \
93 if(elevation < 0.0)
return 0.0;
128 double em=978.77/(2.8704e4*hrate);
129 double Tp=Ts-hrate*
hpress;
130 double ps=
press*std::pow(Ts/Tp,em)/1000.0;
131 double rs=77.624e-3/Ts;
134 double zen=(ho-
height)/ho;
135 zen = rs*zen*zen*zen*zen;
149 double Ta=7.5*Th/(237.3+Th);
151 double e0=6.11e-5*
humid*std::pow(10.0,Ta);
153 double em=978.77/(2.8704e4*hrate);
154 double Tk=Ts-hrate*
hhumid;
155 double es=e0*std::pow(Ts/Tk,4.0*em);
156 double rs=(371900.0e-3/Ts-12.92e-3)/Ts;
157 double ho=11.385*(1255/Ts+0.05)/rs;
158 double zen=(ho-
height)/ho;
159 zen = rs*es*zen*zen*zen*zen;
171 if(elevation < 0.0)
return 0.0;
175 double ho=(11.385/77.624e-3)*Ts;
180 double rt,a,b,rn[8],al[8],er=ell.
a();
182 rt = rt*rt - (1.0-
se*
se);
188 for(
int j=1; j<8; j++) rn[j]=rn[j-1]*rt;
192 al[3] = a*a*a*a/5+2.4*a*a*b+1.2*b*b;
193 al[4] = 2*a*b*(a*a+3*b)/3;
194 al[5] = b*b*(6*a*a+4*b)*0.1428571;
203 for(
int k=0; k<8; k++) map += al[k]*rn[k];
213 if(elevation < 0.0)
return 0.0;
217 double rs=(371900.0e-3/Ts-12.92e-3)/Ts;
218 double ho=11.385*(1255/Ts+0.05)/rs;
223 double rt,a,b,rn[8],al[8],er=ell.
a();
225 rt = rt*rt - (1.0-
se*
se);
231 for(
int i=1; i<8; i++) rn[i]=rn[i-1]*rt;
235 al[3] = a*a*a*a/5+2.4*a*a*b+1.2*b*b;
236 al[4] = 2*a*b*(a*a+3*b)/3;
237 al[5] = b*b*(6*a*a+4*b)*0.1428571;
246 for(
int j=0; j<8; j++) map += al[j]*rn[j];
264 catch(InvalidParameter& e)
280 catch(InvalidParameter& e)