21 #if defined (__ICC) && defined(__ia64) && __INTEL_COMPILER < 910
22 #pragma optimization_level 1
45 static double go2[5]={4.,6.,4.,4.,2.};
46 static double exo2[4]={26808.4,21.0,13637.5,1.5};
49 static double oi_cs_tsave=-1. , oi_te_tsave=-1. , oi_dcdt_tsave=-1.;
51 double rate_OH_dissoc;
56 enum{DEBUG_LOC=
false};
61 double oi_a, oi_b, oi_c, oi_d, oi_e, oi_f;
110 double neiii_a,neiii_b,neiii_c,neiii_d,neiii_e;
112 oi_cs(oi_a, oi_b, oi_c, oi_d, oi_e, oi_f);
113 oii_cs(oii_a, oii_b, oii_c, oii_d, oii_e, oii_f, oii_g,
114 oii_h, oii_i, oii_j, oii_k);
115 oiii_cs(oiii_a, oiii_b, oiii_c, oiii_d, oiii_e, oiii_f,
116 oiii_g, oiii_h, oiii_i, oiii_j);
119 sii_cs(sii_a, sii_b, sii_c, sii_d, sii_e, sii_f, sii_g,
120 sii_h, sii_i, sii_j, sii_k);
121 siii_cs(siii_a, siii_b, siii_c, siii_d, siii_e, siii_f,
122 siii_g, siii_h, siii_i, siii_j, siii_k,siii_l);
125 neiii_cs(neiii_a,neiii_b,neiii_c,neiii_d,neiii_e);
136 double oii_aold=oii_a,
147 double oiii_aold=oiii_a,
157 double oiv_aold=oiv_a,oiv_bold=oiv_b;
158 double ov_aold=ov_a,ov_bold=ov_b;
159 double sii_aold=sii_a,
170 double siii_aold=siii_a,
182 double siv_aold=siv_a;
183 double sviii_aold=sviii_a;
184 double neiii_aold=neiii_a,
190 oi_cs(oi_a, oi_b, oi_c, oi_d, oi_e, oi_f);
191 ASSERT( fabs(oi_a-oi_aold) <= oi_a*3.*tinc);
192 ASSERT( fabs(oi_b-oi_bold) <= oi_b*3.*tinc);
193 ASSERT( fabs(oi_c-oi_cold) <= oi_c*3.*tinc);
194 ASSERT( fabs(oi_d-oi_dold) <= oi_d*3.*tinc);
195 ASSERT( fabs(oi_e-oi_eold) <= oi_e*3.*tinc);
196 ASSERT( fabs(oi_f-oi_fold) <= oi_f*3.*tinc);
197 oii_cs(oii_a, oii_b, oii_c, oii_d, oii_e, oii_f,
198 oii_g, oii_h, oii_i, oii_j, oii_k);
199 ASSERT( fabs(oii_a-oii_aold) <= oii_a*3.*tinc);
200 ASSERT( fabs(oii_b-oii_bold) <= oii_b*3.*tinc);
201 ASSERT( fabs(oii_c-oii_cold) <= oii_c*3.*tinc);
202 ASSERT( fabs(oii_d-oii_dold) <= oii_d*3.*tinc);
203 ASSERT( fabs(oii_e-oii_eold) <= oii_e*3.*tinc);
204 ASSERT( fabs(oii_f-oii_fold) <= oii_f*3.*tinc);
205 ASSERT( fabs(oii_g-oii_gold) <= oii_g*3.*tinc);
206 ASSERT( fabs(oii_h-oii_hold) <= oii_h*3.*tinc);
207 ASSERT( fabs(oii_i-oii_iold) <= oii_i*3.*tinc);
208 ASSERT( fabs(oii_j-oii_jold) <= oii_j*3.*tinc);
209 ASSERT( fabs(oii_k-oii_kold) <= oii_k*3.*tinc);
210 oiii_cs(oiii_a, oiii_b, oiii_c, oiii_d, oiii_e,
211 oiii_f, oiii_g, oiii_h, oiii_i, oiii_j);
212 ASSERT( fabs(oiii_a-oiii_aold) <= oiii_a*3.*tinc);
213 ASSERT( fabs(oiii_b-oiii_bold) <= oiii_b*3.*tinc);
214 ASSERT( fabs(oiii_c-oiii_cold) <= oiii_c*3.*tinc);
215 ASSERT( fabs(oiii_d-oiii_dold) <= oiii_d*3.*tinc);
216 ASSERT( fabs(oiii_e-oiii_eold) <= oiii_e*3.*tinc);
217 ASSERT( fabs(oiii_f-oiii_fold) <= oiii_f*3.*tinc);
218 ASSERT( fabs(oiii_g-oiii_gold) <= oiii_g*3.*tinc);
219 ASSERT( fabs(oiii_h-oiii_hold) <= oiii_h*3.*tinc);
220 ASSERT( fabs(oiii_i-oiii_iold) <= oiii_i*3.*tinc);
221 ASSERT( fabs(oiii_j-oiii_jold) <= oiii_j*3.*tinc);
223 ASSERT( fabs(oiv_a-oiv_aold) <= oiv_a*3.*tinc);
224 ASSERT( fabs(oiv_b-oiv_bold) <= oiv_b*3.*tinc);
226 ASSERT( fabs(ov_a-ov_aold) <= ov_a*3.*tinc);
227 ASSERT( fabs(ov_b-ov_bold) <= ov_b*3.*tinc);
228 sii_cs(sii_a, sii_b, sii_c, sii_d, sii_e, sii_f,
229 sii_g, sii_h, sii_i, sii_j, sii_k);
230 ASSERT( fabs(sii_a-sii_aold) <= sii_a*3.*tinc);
231 ASSERT( fabs(sii_b-sii_bold) <= sii_b*3.*tinc);
232 ASSERT( fabs(sii_c-sii_cold) <= sii_c*3.*tinc);
233 ASSERT( fabs(sii_d-sii_dold) <= sii_d*3.*tinc);
234 ASSERT( fabs(sii_e-sii_eold) <= sii_e*3.*tinc);
235 ASSERT( fabs(sii_f-sii_fold) <= sii_f*3.*tinc);
236 ASSERT( fabs(sii_g-sii_gold) <= sii_g*3.*tinc);
237 ASSERT( fabs(sii_h-sii_hold) <= sii_h*3.*tinc);
238 ASSERT( fabs(sii_i-sii_iold) <= sii_i*3.*tinc);
239 ASSERT( fabs(sii_j-sii_jold) <= sii_j*3.*tinc);
240 ASSERT( fabs(sii_k-sii_kold) <= sii_k*3.*tinc);
253 ASSERT( fabs(siii_a-siii_aold) <= siii_a*3.*tinc);
254 ASSERT( fabs(siii_b-siii_bold) <= siii_b*3.*tinc);
255 ASSERT( fabs(siii_c-siii_cold) <= siii_c*3.*tinc);
256 ASSERT( fabs(siii_d-siii_dold) <= siii_d*3.*tinc);
257 ASSERT( fabs(siii_e-siii_eold) <= siii_e*3.*tinc);
258 ASSERT( fabs(siii_f-siii_fold) <= siii_f*3.*tinc);
259 ASSERT( fabs(siii_g-siii_gold) <= siii_g*3.*tinc);
260 ASSERT( fabs(siii_h-siii_hold) <= siii_h*3.*tinc);
261 ASSERT( fabs(siii_i-siii_iold) <= siii_i*3.*tinc);
262 ASSERT( fabs(siii_j-siii_jold) <= siii_j*3.*tinc);
263 ASSERT( fabs(siii_k-siii_kold) <= siii_k*3.*tinc);
264 ASSERT( fabs(siii_l-siii_lold) <= siii_l*3.*tinc);
266 ASSERT( fabs(siv_a-siv_aold) <= siv_a*3.*tinc);
268 ASSERT( fabs(sviii_a-sviii_aold) <= sviii_a*3.*tinc);
269 neiii_cs(neiii_a, neiii_b, neiii_c, neiii_d, neiii_e);
270 ASSERT( fabs(neiii_a-neiii_aold) <= neiii_a*3.*tinc);
271 ASSERT( fabs(neiii_b-neiii_bold) <= neiii_b*3.*tinc);
272 ASSERT( fabs(neiii_c-neiii_cold) <= neiii_c*3.*tinc);
273 ASSERT( fabs(neiii_d-neiii_dold) <= neiii_d*3.*tinc);
274 ASSERT( fabs(neiii_e-neiii_eold) <= neiii_e*3.*tinc);
337 oi_othercs(csh01,cshe01,csh201,csh12,cshe12,csh212,csh02,cshe02,csh202,
338 csh2o01,csh2o02,csh2o12,csh2p01,csh2p02,csh2p12,csp01,csp02,csp12);
410 oi_dcdt_tsave = (oi_cs3P23P1-oi_cs_tsave) /
414 oi_cs_tsave = oi_cs3P23P1;
420 oi_dcdt_tsave =
MAX2( 0. , oi_dcdt_tsave);
429 enum{DEBUG_LOC=
false};
432 fprintf(
ioQQQ,
"DEBUG OI\t%.2f\tte\t%.5e\tcool\t%.5e\tcs\t%.4e\told\t%.4e\tnew\t%.4e\n",
491 double Cooling , CoolingDeriv;
492 atom_pop5(go2,exo2,oii_cs4S32D5,oii_cs4S32D3,oii_cs4S32P3,oii_cs4S32P1,
493 oii_cs2D52D3,oii_cs2D52P3,oii_cs2D52P1,oii_cs2D32P3,oii_cs2D32P1,
494 oii_cs2P32P1,a21,a31,a41,a51,a32,a42,a52,a43,a53,a54,p,
513 ( (p[3]*(a41+a42+a43) + p[4]*(a51+a52+a53) ) +
514 ( p[3]*(oii_cs4S32P3+oii_cs2D52P3+oii_cs2D32P3)/go2[3] +
515 p[4]*(oii_cs4S32P1+oii_cs2D52P1+oii_cs2D32P1)/go2[4]) *
522 ( (p[1]*a21 + p[2]*a31 ) +
523 ( p[1]*oii_cs4S32D5/go2[1] + p[2]*oii_cs4S32D3/go2[2]) *
537 double oiii_cs3P25S2,
615 double oiv_cs2P2D,oiv_cs2P12P3;
622 oiv_cs(oiv_cs2P2D,oiv_cs2P12P3);
636 static vector< pair<TransitionList::iterator,double> > O4Pump;
643 O4Pump.push_back( pp );
657 branch_ratio = 2./3.;
659 branch_ratio = 1./2.;
661 branch_ratio = 1./6.;
664 pair<TransitionList::iterator,double> pp2(
TauLine2.
begin()+i, branch_ratio );
665 O4Pump.push_back( pp2 );
671 double pump_rate = 0.;
672 vector< pair<TransitionList::iterator,double> >::const_iterator o4p;
673 for( o4p=O4Pump.begin(); o4p != O4Pump.end(); ++o4p )
676 double branch_ratio = o4p->second;
677 pump_rate += (*t).Emis().pump()*branch_ratio;
680 (*t).WLAng , (*t).Emis().pump()*branch_ratio );
694 0.1367 , 0.1560 , 1.1564 , 0.0457 , pump_rate,
"O 4");
699 double ov_cs1S01P1,ov_cs1S03P;
705 ov_cs(ov_cs1S01P1,ov_cs1S03P);
747 void oi_cs(
double& oi_cs3P23P1,
double& oi_cs3P23P0,
double& oi_cs3P13P0,
748 double& oi_cs3P1D2,
double& oi_cs1D21S0,
double& oi_cs3P1S0)
805 oi_cs3P13P0 = 0.0269*(a + b*exp(-0.5*
POW2((
phycon.
te-c)/d)));
835 double te_scale =
phycon.
te / 6000.;
836 double rate_H0 = (1.74*te_scale + 0.6)*1e-12*
sexp(0.47*te_scale) / sqrt(te_scale ) *
865 void oi_othercs(
double& csh01,
double& cshe01,
double& csh201,
double& csh12,
double& cshe12,
866 double& csh212,
double& csh02,
double& cshe02,
double& csh202,
double& csh2o01,
867 double& csh2o02,
double& csh2o12,
double& csh2p01,
double& csh2p02,
double& csh2p12,
868 double& csp01,
double& csp02,
double& csp12)
936 csh212 = ortho_frac*csh2o12 + (1.-ortho_frac)*csh2p12;
940 csh201 = ortho_frac*csh2o01 + (1.-ortho_frac)*csh2p01;
944 csh202 = ortho_frac*csh2o02 + (1.-ortho_frac)*csh2p02;
1001 double& oii_cs4S32D3,
1002 double& oii_cs2D52D3,
1003 double& oii_cs4S32P3,
1004 double& oii_cs2D52P3,
1005 double& oii_cs2D32P3,
1006 double& oii_cs4S32P1,
1007 double& oii_cs2D52P1,
1008 double& oii_cs2D32P1,
1009 double& oii_cs2P32P1,
1010 double& oii_cs4S34P)
1040 double& oiii_cs3P15S2,
1041 double& oiii_cs3P05S2,
1042 double& oiii_cs3P1D2,
1043 double& oiii_cs1D21S0,
1044 double& oiii_cs3P1S0,
1045 double& oiii_cs3P03P1,
1046 double& oiii_cs3P13P2,
1047 double &oiii_cs3P03P2,
1048 double& oiii_cs3P3D)
1182 void oiv_cs(
double& oiv_cs2P2D,
double& oiv_cs2P12P3)
1184 double Te_bounded,Te_bounded_log;
1189 Te_bounded =
MIN2(Te_bounded,450000.);
1190 Te_bounded_log = log(Te_bounded);
1193 oiv_cs2P2D = -3.0102462 + 109.22973/Te_bounded_log - 18666.357/Te_bounded;
1206 oiv_cs2P12P3 =
MAX2( oiv_cs2P12P3 , 3.25e-2);
1214 void ov_cs(
double& ov_cs1S01P1,
double& ov_cs1S03P)