1 #ifndef COOLING_BOLEY_HINCLUDED
2 #define COOLING_BOLEY_HINCLUDED
25 #define CL_B_gm (6.022e23*(938.7830/931.494))
26 #define CL_k_Boltzmann 1.38066e-16
27 #define CL_eV_erg 1.60219e-12
28 #define CL_eV_per_K (CL_k_Boltzmann/CL_eV_erg)
33 #define CL_MAX_NEG_EXP_ARG -500.
35 #define CL_NMAXBYTETABLE 56000
45 #define CL_TABRCM2 ((CL_TABRC)-2)
46 #define CL_TABRC2 10000
48 #define CL_TABPMIN -12.0
49 #define CL_TABPMAX 9.0
50 #define CL_TABDP (((CL_TABPMAX) - (CL_TABPMIN))/(CL_TABRC-1.0))
52 #define CL_TABTMIN 0.5
53 #define CL_TABTMAX 7.0
54 #define CL_TABDT (((CL_TABTMAX) - (CL_TABTMIN))/(CL_TABRC-1.0))
64 char achRossName[256];
65 char achPlckName[256];
88 double dComovingGmPerCcUnit;
91 double dErgPerGmPerSecUnit;
92 double diErgPerGmUnit;
103 double ** rossTab, ** plckTab, t4i;
109 void *IntegratorContext;
111 double rho,PdV,E,T,Y_Total,rFactor;
119 void CoolFinalize(
COOL *cl );
123 void clInitConstants(
COOL *cl,
double dGMPerCcunit,
double dComovingGmPerCcUnit,
124 double dErgPerGmUnit,
double dSecUnit,
double dKpcUnit,
COOLPARAM CoolParam);
125 void clInitUV(
COOL *cl,
int nTableColumns,
int nTableRows,
double *dTableData );
126 void clInitRatesTable(
COOL *cl,
double TMin,
double TMax,
int nTable );
129 double clThermalEnergy(
double Y_Total,
double T );
130 double clTemperature(
double Y_Total,
double E );
132 double clEdotInstant(
COOL *cl,
double E,
double T,
double rho,
double r,
134 double *dEdotHeat,
double *dEdotCool);
136 double PdV,
double rho,
double Y_Total,
double radius,
double tStep );
138 void clDerivs(
double x,
const double *y,
double *dHeat,
double *dCool,
void *Data) ;
140 int clJacobn(
double x,
const double y[],
double dfdx[],
double *dfdy,
void *Data) ;
143 void CoolLogParams(
COOLPARAM *CoolParam, FILE *fp );
144 void CoolOutputArray(
COOLPARAM *CoolParam,
int,
int *,
char * );
146 #define COOL_ARRAY0_EXT "Y_Tot"
148 #define COOL_ARRAY0( cl_, cp, aa ) ((cp)->Y_Total)
149 double COOL_SET_ARRAY0(
COOL *cl_,
COOLPARTICLE *cp,
double aa,
double bb_val);
150 #define COOL_SET_ARRAY0( cl_, cp, aa, bb_val ) ((cp)->Y_Total = (bb_val))
152 #define COOL_ARRAY1_EXT "dtau"
154 #define COOL_ARRAY1( cl_, cp, aa ) ((cp)->dDeltaTau)
155 double COOL_SET_ARRAY1(
COOL *cl_,
COOLPARTICLE *cp,
double aa,
double bb_val);
156 #define COOL_SET_ARRAY1( cl_, cp, aa, bb_val ) ((cp)->dDeltaTau = (bb_val))
158 #define COOL_ARRAY2_EXT "NA"
160 #define COOL_ARRAY2( cl_, cp, aa ) (0)
161 double COOL_SET_ARRAY2(
COOL *cl_,
COOLPARTICLE *cp,
double aa,
double bb_val);
162 #define COOL_SET_ARRAY2( cl_, cp, aa, bb_val ) (0)
164 #define COOL_ARRAY3_EXT "NA3"
166 #define COOL_ARRAY3(cl_, cp, aa ) (0)
167 double COOL_SET_ARRAY3(
COOL *cl_,
COOLPARTICLE *cp,
double aa,
double bb_val);
168 #define COOL_SET_ARRAY3( cl_, cp, aa, bb_val ) (0)
170 double COOL_EDOT(
COOL *cl_,
COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_ );
171 #define COOL_EDOT( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_) (CoolCodeWorkToErgPerGmPerSec( cl_, CoolEdotInstantCode( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_ )))
173 double COOL_COOLING(
COOL *cl_,
COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_ );
174 #define COOL_COOLING( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_) (CoolCodeWorkToErgPerGmPerSec( cl_, CoolEdotInstantCode( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_ )))
176 double COOL_HEATING(
COOL *cl_,
COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_ );
177 #define COOL_HEATING( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_) (0)
181 #define CoolPARTICLEtoPERBARYON(cl_, Y, cp) { \
182 (Y)->Total = (cp)->Y_Total; }
188 void CoolSetTime(
COOL *Cool,
double dTime,
double z );
190 double CoolCodeTimeToSeconds(
COOL *Cool,
double dCodeTime );
192 #define CoolCodeTimeToSeconds( Cool, dCodeTime ) ((Cool)->dSecUnit*(dCodeTime))
194 double CoolSecondsToCodeTime(
COOL *Cool,
double dTime );
196 #define CoolSecondsToCodeTime( Cool, dTime ) ((dTime)/(Cool)->dSecUnit)
198 double CoolCodeEnergyToErgPerGm(
COOL *Cool,
double dCodeEnergy );
200 #define CoolCodeEnergyToErgPerGm( Cool, dCodeEnergy ) ((Cool)->dErgPerGmUnit*(dCodeEnergy))
202 double CoolErgPerGmToCodeEnergy(
COOL *Cool,
double dEnergy );
204 #define CoolErgPerGmToCodeEnergy( Cool, dEnergy ) ((Cool)->diErgPerGmUnit*(dEnergy))
206 double CoolCodeWorkToErgPerGmPerSec(
COOL *Cool,
double dCodeWork );
208 #define CoolCodeWorkToErgPerGmPerSec( Cool, dCodeWork ) ((Cool)->dErgPerGmPerSecUnit*(dCodeWork))
210 double CoolErgPerGmPerSecToCodeWork(
COOL *Cool,
double dWork );
212 #define CoolErgPerGmPerSecToCodeWork( Cool, dWork ) ((dWork)/(Cool)->dErgPerGmPerSecUnit)
214 double CodeDensityToComovingGmPerCc(
COOL *Cool,
double dCodeDensity );
216 #define CodeDensityToComovingGmPerCc( Cool, dCodeDensity ) ((Cool)->dComovingGmPerCcUnit*(dCodeDensity))
219 double *E,
double PdV,
double rho,
double ZMetal,
223 double PdV,
double rho,
double ZMetal,
double *r,
double tStep );
227 void CoolInitEnergyAndParticleData(
COOL *cl,
COOLPARTICLE *cp,
double *E,
double dDensity,
double dTemp,
double fMetals );
230 double CoolHeatingRate(
COOL *cl,
COOLPARTICLE *cp,
double E,
double dDensity );
233 double rhoCode,
double ZMetal,
double *posCode );
235 void CoolCodePressureOnDensitySoundSpeed(
COOL *cl,
COOLPARTICLE *cp,
double uPred,
double fDensity,
double gamma,
double gammam1,
double *PoverRho,
double *c );
236 #define CoolCodePressureOnDensitySoundSpeed( cl__, cp__, uPred__, fDensity__, gamma__, gammam1__, PoverRho__, c__ ) { \
237 *(PoverRho__) = ((gammam1__)*(uPred__)); \
238 *(c__) = sqrt((gamma__)*(*(PoverRho__))); }
246 void CoolTableReadInfo(
COOLPARAM *CoolParam,
int cntTable,
int *nTableColumns,
char *suffix );
248 void CoolTableRead(
COOL *Cool,
int nData,
void *vData);
COOL * cl
pointer to cooling context
Definition: cooling_boley.h:110
Object containing the parameter information.
Definition: param.h:38
abundance of various species in particles/baryon
Definition: cooling_boley.h:75
Heating/Cooling context: parameters and tables.
Definition: cooling_boley.h:83
per-particle cooling data
Definition: cooling_boley.h:68
context for calculating cooling derivatives
Definition: cooling_boley.h:108