3 #define POW10(x) (pow(10.0, x))
16 int i, indx_lo, indx_hi;
17 double st, t3, tev, lnT, lnTmin, lnTmax, dlnT;
18 double scrh, dum_lo, dum_hi;
20 static double *lnTarr, *Rate_arr1, *Rate_arr2, *Rate_arr3, *Rate_arr4;
21 static double *Rate_arr5, *Rate_arr6;
22 static double *Emiss_arr1, *Emiss_arr2, *Emiss_arr3;
29 dlnT = (lnTmax - lnTmin)/((
double)
TABLE_NPT - 1.0);
48 lnTarr[
i] = lnTmin + i*dlnT;
54 Rate_arr1[
i] = 3.e-18*st/(1.0 + 0.04*st + 2.e-3*T + 8.e-6*T*
T);
55 Rate_arr2[
i] = 1.067e-10*pow(tev,2.012)*exp(-(4.463/tev)*pow((1.0 + 0.2472),3.512));
56 Rate_arr3[
i] = 1.e-8*exp(-84100.0/T);
57 Rate_arr4[
i] = 4.4e-10*pow(T,0.35)*exp(-102000.0/T);
58 Rate_arr5[
i] = 2.6e-11/st;
59 Rate_arr6[
i] = 1.08e-8*st*exp(-157890.0/T)/(13.6*13.6);
60 Emiss_arr1[
i] = 6.7e-19*exp(-5.86/t3) + 1.6e-18*exp(-11.7/t3);
61 Emiss_arr2[
i] = (9.5e-22*pow(t3,3.76)/(1. + 0.12*pow(t3,2.1)))*exp(pow((-0.13/t3),3.0))
62 + 3.0e-24*exp(-0.51/t3);
63 Emiss_arr3[
i] = 3.8e-33*st*(T-Tdust)*(1.0 - 0.8*exp(-75.0/T));
68 scrh = (lnT - lnTmin)/dlnT;
70 indx_hi = indx_lo + 1;
72 dum_lo = (lnTarr[indx_hi] - lnT)/dlnT;
73 dum_hi = (lnT - lnTarr[indx_lo])/dlnT;
76 print (
"! Make_RateTable: Cannot Locate Index for T = %12.6e\n",T);
79 krvals[0] = Rate_arr1[indx_lo]*dum_lo + Rate_arr1[indx_hi]*dum_hi;
80 krvals[1] = Rate_arr2[indx_lo]*dum_lo + Rate_arr2[indx_hi]*dum_hi;
81 krvals[2] = Rate_arr3[indx_lo]*dum_lo + Rate_arr3[indx_hi]*dum_hi;
82 krvals[3] = Rate_arr4[indx_lo]*dum_lo + Rate_arr4[indx_hi]*dum_hi;
83 krvals[4] = Rate_arr5[indx_lo]*dum_lo + Rate_arr5[indx_hi]*dum_hi;
84 krvals[5] = Rate_arr6[indx_lo]*dum_lo + Rate_arr6[indx_hi]*dum_hi;
85 krvals[6] = Emiss_arr1[indx_lo]*dum_lo + Emiss_arr1[indx_hi]*dum_hi;
86 krvals[7] = Emiss_arr2[indx_lo]*dum_lo + Emiss_arr2[indx_hi]*dum_hi;
87 krvals[8] = Emiss_arr3[indx_lo]*dum_lo + Emiss_arr3[indx_hi]*dum_hi;
107 int ii,
k, nv, status;
108 double T, mu, t3, rho, prs, fn, gn, hn,
x;
109 double N_H, n_el, cr, ci, rlosst, src_pr, crold,crnew;
110 double kr1, kr2, kr3, kr4, em[20], krvalues[9];
112 static int first_call = 1;
122 N_tot = N_H_rho*(1.0 + frac_He +
frac_Z);
132 v[nv] =
MAX(v[nv], 0.0);
133 v[nv] =
MIN(v[nv], 1.0);
144 print1 (
"! Radiat: mu = %f < 0 \n",mu);
170 print1 (
"! Radiat: negative electron density\n");
204 rhs[
X_HI] = Unit_Time*N_H*( gn*(kr2*fn + kr3*gn + kr4*
x) + cr*hn*x
205 -fn*(ci*x + kr1*fn));
206 rhs[
X_H2] = 0.5*Unit_Time*N_H*(kr1*fn*fn - gn*(kr2*fn + kr3*gn + kr4*
x));
207 rhs[
X_HII] = Unit_Time*N_H*(ci*fn - cr*hn)*x;
218 double logt3 = log(t3);
229 em[3] = em[1] + em[2];
232 em[4] = -16.818342 + logt3*(37.383713 + logt3*(58.145166 + logt3*(48.656103 + logt3*(20.159831 + logt3*(3.8479610)))));
234 em[4] = -24.311209 + logt3*(3.5692468 + logt3*(-11.332860 + logt3*(-27.850082 + logt3*(-21.328264 + logt3*(-4.2519023)))));
237 em[4] = -24.311209 + logt3*(4.6450521 + logt3*(-3.7209846 + logt3*(5.9369081 + logt3*(-5.5108047 + logt3*(1.5538288)))));
240 em[4] =
POW10(em[4]);
242 em[5] = -23.962112 + logt3*(2.09433740 + logt3*(-0.77151436 + logt3*(0.43693353 + logt3*(-0.14913216 + logt3*(-0.033638326)))));
244 em[5] =
POW10(em[5]);
245 em[6] = (fn*em[4] + gn*em[5])*N_H;
249 em[7] = gn*N_H*em[3]/(1.0 + (em[3]/em[6]));
253 em[8] = ci*13.6*1.6e-12*fn;
257 em[9] = cr*0.67*1.6e-12*hn*T/11590.0;
261 em[10] = 7.18e-12*(kr2*fn*gn + kr3*gn*gn + kr4*gn*(n_el/N_H))*N_H*N_H;
265 em[11] = krvalues[8]*N_H*N_H*fn*fn;
267 em[13] = em[11] + em[10] + em[7] + (em[8] + em[9])*n_el*N_H;
278 rhs[RHOE] = -E_cost*rlosst;
#define UNIT_DENSITY
Unit density in gr/cm^3.
#define T_CUT_RHOE
Sets the lowest cut-off temperature used in the PVTE_LAW equation of state.
double InternalEnergy(double *v, double T)
#define CONST_eV
Electron Volt in erg.
void print1(const char *fmt,...)
#define CONST_amu
Atomic mass unit.
void NormalizeIons(double *)
void Radiat(double *v, double *rhs)
double g_smallPressure
Small value for pressure fix.
#define UNIT_VELOCITY
Unit velocity in cm/sec.
int GetEV_Temperature(double rhoe, double *v, double *T)
#define UNIT_LENGTH
Unit Length in cm.
#define CONST_AZ
Mean atomic weight of heavy elements.
#define CONST_kB
Boltzmann constant.
void print(const char *fmt,...)
double g_minCoolingTemp
The minimum temperature (in K) below which cooling is suppressed.
#define ARRAY_1D(nx, type)
double MeanMolecularWeight(double *V)
#define CONST_AHe
Atomic weight of Helium.
void H2RateTables(double T, double *krvals)
#define QUIT_PLUTO(e_code)