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
50#define CL_TABDP (((CL_TABPMAX) - (CL_TABPMIN))/(CL_TABRC-1.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;
102 clDerivsData *DerivsData;
103 double ** rossTab, ** plckTab, t4i;
109 void *IntegratorContext;
111 double rho,PdV,E,T,Y_Total,rFactor;
119void CoolFinalize( COOL *cl );
120clDerivsData *CoolDerivsInit(COOL *cl);
121void CoolDerivsFinalize(clDerivsData *cld ) ;
123void clInitConstants( COOL *cl,
double dGMPerCcunit,
double dComovingGmPerCcUnit,
124 double dErgPerGmUnit,
double dSecUnit,
double dKpcUnit, COOLPARAM CoolParam);
125void clInitUV(COOL *cl,
int nTableColumns,
int nTableRows,
double *dTableData );
126void clInitRatesTable( COOL *cl,
double TMin,
double TMax,
int nTable );
127void CoolInitRatesTable( COOL *cl, COOLPARAM CoolParam);
129double clThermalEnergy(
double Y_Total,
double T );
130double clTemperature(
double Y_Total,
double E );
132double clEdotInstant( COOL *cl,
double E,
double T,
double rho,
double r,
134 double *dEdotHeat,
double *dEdotCool);
135void clIntegrateEnergy(COOL *cl, clDerivsData *clData,
double *E,
136 double PdV,
double rho,
double Y_Total,
double radius,
double tStep );
138void clDerivs(
double x,
const double *y,
double *dHeat,
double *dCool,
void *Data) ;
140int clJacobn(
double x,
const double y[],
double dfdx[],
double *dfdy,
void *Data) ;
142void CoolAddParams( COOLPARAM *CoolParam, PRM );
143void CoolLogParams( COOLPARAM *CoolParam, FILE *fp );
144void CoolOutputArray( COOLPARAM *CoolParam,
int,
int *,
char * );
146#define COOL_ARRAY0_EXT "Y_Tot"
147double COOL_ARRAY0(COOL *cl_, COOLPARTICLE *cp,
double aa);
148#define COOL_ARRAY0( cl_, cp, aa ) ((cp)->Y_Total)
149double 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"
153double COOL_ARRAY1(COOL *cl_, COOLPARTICLE *cp,
double aa);
154#define COOL_ARRAY1( cl_, cp, aa ) ((cp)->dDeltaTau)
155double 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"
159double COOL_ARRAY2(COOL *cl_, COOLPARTICLE *cp,
double aa);
160#define COOL_ARRAY2( cl_, cp, aa ) (0)
161double 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"
165double COOL_ARRAY3(COOL *cl, COOLPARTICLE *cp,
double aa);
166#define COOL_ARRAY3(cl_, cp, aa ) (0)
167double COOL_SET_ARRAY3(COOL *cl_, COOLPARTICLE *cp,
double aa,
double bb_val);
168#define COOL_SET_ARRAY3( cl_, cp, aa, bb_val ) (0)
170double 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_ )))
173double 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_ )))
176double 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)
179void CoolPARTICLEtoPERBARYON(COOL *cl_,
PERBARYON *Y, COOLPARTICLE *cp);
181#define CoolPARTICLEtoPERBARYON(cl_, Y, cp) { \
182 (Y)->Total = (cp)->Y_Total; }
184double CoolCodeEnergyToTemperature( COOL *Cool, COOLPARTICLE *cp,
double E,
188void CoolSetTime( COOL *Cool,
double dTime,
double z );
190double CoolCodeTimeToSeconds( COOL *Cool,
double dCodeTime );
192#define CoolCodeTimeToSeconds( Cool, dCodeTime ) ((Cool)->dSecUnit*(dCodeTime))
194double CoolSecondsToCodeTime( COOL *Cool,
double dTime );
196#define CoolSecondsToCodeTime( Cool, dTime ) ((dTime)/(Cool)->dSecUnit)
198double CoolCodeEnergyToErgPerGm( COOL *Cool,
double dCodeEnergy );
200#define CoolCodeEnergyToErgPerGm( Cool, dCodeEnergy ) ((Cool)->dErgPerGmUnit*(dCodeEnergy))
202double CoolErgPerGmToCodeEnergy( COOL *Cool,
double dEnergy );
204#define CoolErgPerGmToCodeEnergy( Cool, dEnergy ) ((Cool)->diErgPerGmUnit*(dEnergy))
206double CoolCodeWorkToErgPerGmPerSec( COOL *Cool,
double dCodeWork );
208#define CoolCodeWorkToErgPerGmPerSec( Cool, dCodeWork ) ((Cool)->dErgPerGmPerSecUnit*(dCodeWork))
210double CoolErgPerGmPerSecToCodeWork( COOL *Cool,
double dWork );
212#define CoolErgPerGmPerSecToCodeWork( Cool, dWork ) ((dWork)/(Cool)->dErgPerGmPerSecUnit)
214double CodeDensityToComovingGmPerCc( COOL *Cool,
double dCodeDensity );
216#define CodeDensityToComovingGmPerCc( Cool, dCodeDensity ) ((Cool)->dComovingGmPerCcUnit*(dCodeDensity))
218void CoolIntegrateEnergy(COOL *cl, clDerivsData *clData, COOLPARTICLE *cp,
219 double *E,
double PdV,
double rho,
double ZMetal,
222void CoolIntegrateEnergyCode(COOL *cl, clDerivsData *clData, COOLPARTICLE *cp,
double *E,
223 double PdV,
double rho,
double ZMetal,
double *r,
double tStep );
225void CoolDefaultParticleData( COOLPARTICLE *cp );
227void CoolInitEnergyAndParticleData( COOL *cl, COOLPARTICLE *cp,
double *E,
double dDensity,
double dTemp,
double fMetals );
230double CoolHeatingRate( COOL *cl, COOLPARTICLE *cp,
double E,
double dDensity );
232double CoolEdotInstantCode(COOL *cl, COOLPARTICLE *cp,
double ECode,
233 double rhoCode,
double ZMetal,
double *posCode );
235void 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__))); }
246void CoolTableReadInfo( COOLPARAM *CoolParam,
int cntTable,
int *nTableColumns,
char *suffix );
248void CoolTableRead( COOL *Cool,
int nData,
void *vData);
Heating/Cooling context: parameters and tables.
Definition cooling_boley.h:83
per-particle cooling data
Definition cooling_boley.h:68
abundance of various species in particles/baryon
Definition cooling_boley.h:75
context for calculating cooling derivatives
Definition cooling_boley.h:108
COOL * cl
pointer to cooling context
Definition cooling_boley.h:110