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);
747void 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 ) *
865void 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)
1182void 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);
1214void ov_cs(
double& ov_cs1S01P1,
double& ov_cs1S03P)
void ligbar(long int ized, const TransitionProxy &t2s2p, const TransitionProxy &t2s3p, double *cs2s2p, double *cs2s3p)
void atom_level2(const TransitionProxy &t)
void atom_level3(const TransitionProxy &t10, const TransitionProxy &t21, const TransitionProxy &t20)
void atom_oi_calc(double *coloi)
double atom_pop3(double g1, double g2, double g3, double o12, double o13, double o23, double a21, double a31, double a32, double Tex12, double Tex23, realnum *pop2, double abund, double gam2, double r12, double r13)
void atom_pop5(const double g[], const double EnerWN[], double cs12, double cs13, double cs14, double cs15, double cs23, double cs24, double cs25, double cs34, double cs35, double cs45, double a21, double a31, double a41, double a51, double a32, double a42, double a52, double a43, double a53, double a54, double p[], realnum abund, double *Cooling, double *CoolingDeriv, double pump01, double pump02, double pump03, double pump04)
void AtomSeqBeryllium(double cs12, double cs13, double cs23, const TransitionProxy &t, double a30)
void AtomSeqBoron(const TransitionProxy &t10, const TransitionProxy &t20, const TransitionProxy &t30, const TransitionProxy &t21, const TransitionProxy &t31, const TransitionProxy &t41, double cs40, double cs32, double cs42, double cs43, double pump_rate, const char *chLabel)
sys_float sexp(sys_float x)
int dprintf(FILE *fp, const char *format,...)
bool fp_equal(sys_float x, sys_float y, int n=3)
NORETURN void TotalInsanity(void)
sys_float SDIV(sys_float x)
#define DEBUG_ENTRY(funcname)
double findrate(const char buf[]) const
void CoolAdd(const char *chLabel, realnum lambda, double cool)
void neiii_cs(double &neiii_cs3P13P0, double &neiii_cs3P23P1, double &neiii_cs3P23P0, double &neiii_cs3P1D2, double &neiii_cs3P1S0)
void oi_cs(double &oi_cs3P23P1, double &oi_cs3P23P0, double &oi_cs3P13P0, double &oi_cs3P1D2, double &oi_cs1D21S0, double &oi_cs3P1S0)
void ov_cs(double &ov_cs1S01P1, double &ov_cs1S03P)
void oiii_cs(double &oiii_cs3P25S2, double &oiii_cs3P15S2, double &oiii_cs3P05S2, double &oiii_cs3P1D2, double &oiii_cs1D21S0, double &oiii_cs3P1S0, double &oiii_cs3P03P1, double &oiii_cs3P13P2, double &oiii_cs3P03P2, double &oiii_cs3P3D)
void oi_othercs(double &csh01, double &cshe01, double &csh201, double &csh12, double &cshe12, double &csh212, double &csh02, double &cshe02, double &csh202, double &csh2o01, double &csh2o02, double &csh2o12, double &csh2p01, double &csh2p02, double &csh2p12, double &csp01, double &csp02, double &csp12)
void oiv_cs(double &oiv_cs2P2D, double &oiv_cs2P12P3)
void oii_cs(double &oii_cs4S32D5, double &oii_cs4S32D3, double &oii_cs2D52D3, double &oii_cs4S32P3, double &oii_cs2D52P3, double &oii_cs2D32P3, double &oii_cs4S32P1, double &oii_cs2D52P1, double &oii_cs2D32P1, double &oii_cs2P32P1, double &oii_cs4S34P)
void siii_cs(double &siii_cs3P03P1, double &siii_cs3P03P2, double &siii_cs3P01D2, double &siii_cs3P01S0, double &siii_cs3P13P2, double &siii_cs3P11D2, double &siii_cs3P11S0, double &siii_cs3P21D2, double &siii_cs3P21S0, double &siii_cs1D21S0, double &siii_cs3P3D, double &siii_cs3P5S2)
void sii_cs(double &sii_cs4S32D3, double &sii_cs4S32D5, double &sii_cs4S32P1, double &sii_cs4S32P3, double &sii_cs2D32D5, double &sii_cs2D32P1, double &sii_cs2D52P1, double &sii_cs2D32P3, double &sii_cs2D52P3, double &sii_cs2P12P3, double &sii_cs4S34P)
void siv_cs(double &siv_cs2P12P3)
void sviii_cs(double &sviii_cs2P32P1)
diatomics h2("h2", 4100., &hmi.H2_total, Yan_H2_CS)
double ConvRate2CS(realnum gHi, realnum rate)
double PopLevels[LIMLEVELN+1]
double xIonDense[LIMELM][LIMELM+1]
const double TEMP_LIMIT_HIGH
const double TEMP_LIMIT_LOW
TransitionList TauLine2("TauLine2", &AnonStates)
TransitionProxy::iterator TauDummy
TransitionList TauLines("TauLines", &AnonStates)
void TempChange(double TempNew, bool lgForceUpdate)
void DumpLine(const TransitionProxy &t)
void PutCS(double cs, const TransitionProxy &t)