42 #define THROW_IF_INVALID_DETAILED() {if (!valid) { \
44 if(!validWeather) e.addText("Invalid trop model: weather"); \
45 if(!validHeights) e.addText("Invalid trop model: validHeights"); \
46 if(!validRxHeight) e.addText("Invalid trop model: validRxHeight"); \
59 Cdrymap = 42973.886942182834900;
60 Cwetmap = 12700.210042018454260;
96 if(elevation < 0.0)
return 0.0;
105 double Ad[9], ad2=ad*ad, bd2=bd*bd;
108 Ad[2] = 6.0*ad2 + 4.0*bd;
109 Ad[3] = 4.0*ad*(ad2+3.0*bd);
110 Ad[4] = ad2*ad2 + 12.0*ad2*bd + 6.0*bd2;
111 Ad[5] = 4.0*ad*bd*(ad2+3.0*bd);
112 Ad[6] = bd2*(6.0*ad2+4.0*bd);
113 Ad[7] = 4.0*ad*bd*bd2;
118 for(
int j=9; j>=1; j--) {
119 sumd += Ad[j-1]/double(j);
131 if(elevation < 0.0)
return 0.0;
140 double Aw[9], aw2=aw*aw, bw2=bw*bw;
143 Aw[2] = 6.0*aw2 + 4.0*bw;
144 Aw[3] = 4.0*aw*(aw2+3.0*bw);
145 Aw[4] = aw2*aw2 + 12.0*aw2*bw + 6.0*bw2;
146 Aw[5] = 4.0*aw*bw*(aw2+3.0*bw);
147 Aw[6] = bw2*(6.0*aw2+4.0*bw);
148 Aw[7] = 4.0*aw*bw*bw2;
152 for(
int j=9; j>=1; j--) {
153 sumw += Aw[j-1]/double(j);
170 double wvpp=2.409e9*
humid*th*th*th*th*std::exp(-22.64*th);