10 Anisotropic1::Anisotropic1(Pvl &pvl, PhotoModel &pmodel) : AtmosModel(pvl, pmodel) {
13 p_atmosAlpha0_0 = 0.0;
14 p_atmosAlpha1_0 = 0.0;
76 double xmunot_0, ymunot_0;
78 double xmunot_1, ymunot_1;
83 if(p_atmosBha == 0.0) {
87 if(p_atmosTau == 0.0) {
96 if(p_atmosWha == 1.0) {
97 QString msg =
"Anisotropic conservative case not implemented yet - WHA parameter cannot be set to 1.0";
98 msg +=
"This will cause negative planetary curvature to occur.";
104 p_atmosWha2 = 0.5 * p_atmosWha;
105 p_atmosWham = 1.0 - p_atmosWha;
112 p_atmosX0_0 = p_atmosWha2 * (1.0 + (1.0 / 3.0) * p_atmosBha *
114 p_atmosY0_0 = p_atmosWha2 * (p_atmosE2 + p_atmosBha * p_atmosWham *
117 p_atmosDelta_0 = (1.0 - (p_atmosX0_0 + p_atmosY0_0) - (1.0 - p_atmosWha *
118 (1.0 + (1.0 / 3.0) * p_atmosBha * p_atmosWham)) / (1.0 -
119 (p_atmosX0_0 - p_atmosY0_0))) / (p_atmosWha * (0.5 - p_atmosE3 +
120 p_atmosBha * p_atmosWham * (0.25 - p_atmosE5)));
123 p_atmosAlpha0_0 = 1.0 + p_atmosDelta_0 * (0.5 - p_atmosE3);
124 p_atmosAlpha1_0 = 0.5 + p_atmosDelta_0 * ((1.0 / 3.0) - p_atmosE4);
125 p_atmosBeta0_0 = p_atmosE2 + p_atmosDelta_0 * (0.5 - p_atmosE3);
126 p_atmosBeta1_0 = p_atmosE3 + p_atmosDelta_0 * ((1.0 / 3.0) - p_atmosE4);
130 p_atmosFac = 2.0 - p_atmosWha * p_atmosAlpha0_0;
131 p_atmosDen = pow(p_atmosFac, 2.0) - pow(p_atmosWha * p_atmosBeta0_0, 2.0);
132 p_atmosQ0 = p_atmosBha * p_atmosWha * p_atmosWham * (p_atmosFac *
133 p_atmosAlpha1_0 - p_atmosWha * p_atmosBeta0_0 * p_atmosBeta1_0) /
135 p_atmosP0 = p_atmosBha * p_atmosWha * p_atmosWham * (-p_atmosFac *
136 p_atmosBeta1_0 - p_atmosWha * p_atmosBeta0_0 * p_atmosAlpha1_0) /
138 p_atmosQ02p02 = p_atmosQ0 * p_atmosQ0 - p_atmosP0 * p_atmosP0;
139 p_atmosQ1 = (2.0 * p_atmosWham * p_atmosFac) / p_atmosDen;
140 p_atmosP1 = (2.0 * p_atmosWham * p_atmosWha * p_atmosBeta0_0) /
142 p_atmosQ12p12 = p_atmosQ1 * p_atmosQ1 - p_atmosP1 * p_atmosP1;
144 p_sbar = 1.0 - 2.0 * (p_atmosQ1 * p_atmosAlpha1_0 + p_atmosP1 *
148 p_atmosX0_1 = 0.5 * p_atmosWha2 * p_atmosBha * (1.0 - (1.0 / 3.0));
149 p_atmosY0_1 = 0.5 * p_atmosWha2 * p_atmosBha * (p_atmosE2 - p_atmosE4);
151 p_atmosDelta_1 = (1.0 - (p_atmosX0_1 + p_atmosY0_1) - (1.0 -
152 (1.0 / 3.0) * p_atmosWha * p_atmosBha) / (1.0 - (p_atmosX0_1 -
153 p_atmosY0_1))) / (p_atmosWha2 * p_atmosBha * ((0.5 - 0.25) -
154 (p_atmosE3 - p_atmosE5)));
156 SetOldTau(p_atmosTau);
157 SetOldWha(p_atmosWha);
163 if(incidence == 90.0) {
167 munot = cos((
PI / 180.0) * incidence);
170 maxval = max(1.0e-30, hpsq1 + munot * munot);
172 munotp = max(munotp, p_atmosTau / 69.0);
173 if(emission == 90.0) {
177 mu = cos((
PI / 180.0) * emission);
180 maxval = max(1.0e-30, hpsq1 + mu * mu);
182 mup = max(mup, p_atmosTau / 69.0);
184 maxval = max(1.0e-30, munotp);
185 xx = -p_atmosTau / maxval;
194 emunot = exp(-p_atmosTau / munotp);
197 maxval = max(1.0e-30, mup);
198 xx = -p_atmosTau / maxval;
207 emu = exp(-p_atmosTau / mup);
211 xmunot_0 = 1.0 + p_atmosDelta_0 * munotp * (1.0 - emunot);
212 ymunot_0 = emunot + p_atmosDelta_0 * munotp * (1.0 - emunot);
213 xmu_0 = 1.0 + p_atmosDelta_0 * mup * (1.0 - emu);
214 ymu_0 = emu + p_atmosDelta_0 * mup * (1.0 - emu);
217 xmunot_1 = 1.0 + p_atmosDelta_1 * munotp * (1.0 - emunot);
218 ymunot_1 = emunot + p_atmosDelta_1 * munotp * (1.0 - emunot);
219 xmu_1 = 1.0 + p_atmosDelta_1 * mup * (1.0 - emu);
220 ymu_1 = emu + p_atmosDelta_1 * mup * (1.0 - emu);
223 gmunot = p_atmosP1 * xmunot_0 + p_atmosQ1 * ymunot_0;
224 gmu = p_atmosP1 * xmu_0 + p_atmosQ1 * ymu_0;
229 cxx = 1.0 - p_atmosQ0 * sum + (p_atmosQ02p02 - p_atmosBha *
230 p_atmosQ12p12) * prod;
231 cyy = 1.0 + p_atmosQ0 * sum + (p_atmosQ02p02 - p_atmosBha *
232 p_atmosQ12p12) * prod;
235 cosazss = 0.0 - munot * mu;
238 cosazss = cos((
PI / 180.0) * phase) - munot * mu;
241 xystuff = cxx * xmunot_0 * xmu_0 - cyy * ymunot_0 *
242 ymu_0 - p_atmosP0 * sum * (xmu_0 * ymunot_0 + ymu_0 *
243 xmunot_0) + cosazss * p_atmosBha * (xmu_1 *
244 xmunot_1 - ymu_1 * ymunot_1);
245 p_pstd = 0.25 * p_atmosWha * munotp / (munotp + mup) * xystuff;