HARM
harm and utilities
 All Data Structures Files Functions Variables Typedefs Macros Pages
eos.c
Go to the documentation of this file.
1 #include "decs.h"
2 
7 
28 
31 #define OLDCALC 0
32 
33 // below not used anymore since want compiler to know all files are included so don't have to repeat "make prep"
34 // now #if is inside each file
35 // this chooses the equation of state
36 //#if(WHICHEOS==GRBPWF99)
37 //#include "grbpwf99eos.c"
38 //#elif(WHICHEOS==IDEALGAS)
39 //#include "idealgaseos.c"
40 //#elif(WHICHEOS==MIGNONE)
41 //#include "mignoneeos.c"
42 //#elif(WHICHEOS==KAZFULL)
43 //#include "kazfulleos.c"
44 //#endif
45 
46 // always include all of the ever-wanted EOSs so included in dependencies when compiling
47 #include "coldeos.c"
48 #include "idealgaseos.c"
49 #include "mignoneeos.c"
50 #include "grbpwf99eos.c"
51 #include "kazfulleos.c"
52 
53 
54 
55 
56 
57 
59 //
60 // wrappers for any EOS and any EOMTYPE
61 // Currently 20 wrapper functions
62 //
64 
66 FTYPE pressure_rho0_u(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE u)
67 {
68  return( (*(ptr_pressure_rho0_u[whicheos]))(EOSextra,rho0,u) );
69 }
70 
72 FTYPE u_rho0_p(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE p)
73 {
74  return( (*(ptr_u_rho0_p[whicheos]))(EOSextra,rho0,p) );
75 }
76 
78 FTYPE u_rho0_T(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE T)
79 {
80  return( (*(ptr_u_rho0_T[whicheos]))(EOSextra,rho0,T) );
81 }
82 
84 FTYPE dpdu_rho0_u(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE u)
85 {
86  return( (*(ptr_dpdu_rho0_u[whicheos]))(EOSextra,rho0,u) );
87 }
88 
90 FTYPE dpdrho0_rho0_u(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE u)
91 {
92  return( (*(ptr_dpdrho0_rho0_u[whicheos]))(EOSextra,rho0,u) );
93 }
94 
96 FTYPE cs2_compute(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE u)
97 {
98  return( (*(ptr_cs2_compute[whicheos]))(EOSextra,rho0,u) );
99 }
100 
103 FTYPE compute_entropy(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE u)
104 {
105  return( (*(ptr_compute_entropy[whicheos]))(EOSextra,rho0,u) );
106 }
107 
109 FTYPE compute_u_from_entropy(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE entropy)
110 {
111  return( (*(ptr_compute_u_from_entropy[whicheos]))(EOSextra,rho0,entropy) );
112 }
113 
115 FTYPE compute_dSdrho(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE u)
116 {
117  return( (*(ptr_compute_dSdrho[whicheos]))(EOSextra,rho0,u) );
118 }
119 
120 
122 FTYPE compute_dSdu(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE u)
123 {
124  return( (*(ptr_compute_dSdu[whicheos]))(EOSextra,rho0,u) );
125 }
126 
127 
128 
129 
132 FTYPE compute_specificentropy_wmrho0(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE wmrho0)
133 {
134  return( (*(ptr_compute_specificentropy_wmrho0[whicheos]))(EOSextra,rho0,wmrho0) );
135 }
136 
138 FTYPE compute_dspecificSdrho_wmrho0(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE wmrho0)
139 {
140  return( (*(ptr_compute_dspecificSdrho_wmrho0[whicheos]))(EOSextra,rho0,wmrho0) );
141 }
142 
144 FTYPE compute_dspecificSdwmrho0_wmrho0(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE wmrho0)
145 {
146  return( (*(ptr_compute_dspecificSdwmrho0_wmrho0[whicheos]))(EOSextra,rho0,wmrho0) );
147 }
148 
149 
150 
151 
153 FTYPE pressure_wmrho0(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE wmrho0)
154 {
155  return( (*(ptr_pressure_wmrho0[whicheos]))(EOSextra,rho0,wmrho0) );
156 }
157 
158 
160 FTYPE compute_idwmrho0dp(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE wmrho0)
161 {
162  return( (*(ptr_compute_idwmrho0dp[whicheos]))(EOSextra,rho0,wmrho0) );
163 }
164 
165 
167 FTYPE compute_idrho0dp(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE wmrho0)
168 {
169  return( (*(ptr_compute_idrho0dp[whicheos]))(EOSextra,rho0,wmrho0) );
170 }
171 
172 
174 FTYPE compute_qdot(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE u)
175 {
176  return( (*(ptr_compute_qdot[whicheos]))(EOSextra,rho0,u) );
177 }
178 
180 int compute_sources_EOS(int whicheos, FTYPE *EOSextra, FTYPE *pr, struct of_geom *geom, struct of_state *q, FTYPE *Ui, FTYPE *dUother, FTYPE(*dUcomp)[NPR])
181 {
182  return( (*(ptr_compute_sources_EOS[whicheos]))(EOSextra,pr, geom, q, Ui, dUother, dUcomp));
183 }
184 
185 
187 void compute_allextras(int whicheos, int justnum, FTYPE *EOSextra, FTYPE rho0, FTYPE u, int *numextrasreturn, FTYPE *extras)
188 {
189  (*(ptr_compute_allextras[whicheos]))(justnum,EOSextra,rho0,u,numextrasreturn,extras);
190  return;
191 }
192 
194 int get_extrasprocessed(int whicheos, int doall, FTYPE *EOSextra, FTYPE *pr, FTYPE *extras, FTYPE *processed)
195 {
196  return((*(ptr_get_extrasprocessed[whicheos]))(doall,EOSextra,pr,extras,processed));
197 }
198 
199 
201 FTYPE compute_temp(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE u)
202 {
203  return( (*(ptr_compute_temp[whicheos]))(EOSextra,rho0,u) );
204 }
205 
207 void compute_EOS_parms(int whicheos, FTYPE (*EOSextra)[NSTORE2][NSTORE3][NUMEOSGLOBALS], FTYPE (*prim)[NSTORE2][NSTORE3][NPR])
208 {
209  (*(ptr_compute_EOS_parms[whicheos]))(EOSextra,prim);
210 }
211 
213 void compute_EOS_parms_full(int whicheos, FTYPE (*EOSextra)[NSTORE2][NSTORE3][NUMEOSGLOBALS], FTYPE (*prim)[NSTORE2][NSTORE3][NPR])
214 {
215  (*(ptr_compute_EOS_parms_full[whicheos]))(EOSextra,prim);
216 }
217 
219 void store_EOS_parms(int whicheos, int numparms, FTYPE *EOSextra, FTYPE *parlist)
220 {
221  (*(ptr_store_EOS_parms[whicheos]))(numparms,EOSextra,parlist);
222 }
223 
225 void get_EOS_parms(int whicheos, int*numparms, FTYPE *EOSextra, FTYPE *parlist)
226 {
227  (*(ptr_get_EOS_parms[whicheos]))(numparms, EOSextra, parlist);
228 }
229 
231 void fix_primitive_eos_scalars(int whicheos, FTYPE *EOSextra, FTYPE *pr)
232 {
233  (*(ptr_fix_primitive_eos_scalars[whicheos]))(EOSextra, pr);
234 }
235 
237 void getall_forinversion(int whicheos, int eomtype, int whichd, FTYPE *EOSextra, FTYPE quant1, FTYPE quant2, FTYPE *fun, FTYPE *dfunofrho, FTYPE *dfunofu)
238 {
239  return( (*(ptr_getall_forinversion[whicheos]))(eomtype, whichd, EOSextra,quant1,quant2,fun,dfunofrho,dfunofu) );
240 }
241 
242 
243 
245 //
246 // ANY EOS
247 //
248 
249 
252 FTYPE pressure_rho0_w(int whicheos, FTYPE *EOSextra, FTYPE rho0, FTYPE w)
253 {
254  FTYPE wmrho0=w-rho0;
255 
256 #if(OLDCALC)
257  return((GAMMA-1.)*(w - rho0)/GAMMA) ;
258 #else
259  return(pressure_wmrho0(whicheos,EOSextra,rho0,wmrho0)) ;
260 #endif
261 }
262 
263 
265 int pickeos_eomtype(int whicheosinput, int whicheom, int *whicheosoutput)
266 {
267  //COLDEOS
268  //IDEALGAS
269  //MIGNONE
270  //GRBPWF99
271  //KAZFULL
272 
273 
274 
275  // EOS functions used during inversion and other places
276  if(whicheom==EOMCOLDGRMHD||whicheom==EOMFFDE||whicheom==EOMFFDE2){
277  *whicheosoutput=COLDEOS;
278  }
279  else{
280  *whicheosoutput=whicheosinput;
281  }
282 
283 
284 
285 
286  if(*whicheosoutput==IDEALGAS){
287  // then need to set gamideal
288  gamideal=gam; // OPENMPMARK: Since global, would need to make this threadprivate .. figure out how to avoid.
289  // OPENMPMARK: Expensive for OpenMP to have to allow all those functions for EOS to be different for each thread (which generally be allowed). So force pickeos_eomtype() to be called outside parallel region so can avoid having EOS functions ptr's as threadprivate
290  }
291  else{
292  // otherwise assume gam and gamideal could be different, where gam is used to true EOS for some purpose while gamideal is particular always for ideal EOS
293  }
294 
295  return(0);
296 
297 }
298 
299 
300 
301 
303 int initeos_eomtype(void)
304 {
305  int whicheos;
306 
308  whicheos=IDEALGAS;
309  ptr_pressure_rho0_u[whicheos] = &pressure_rho0_u_idealgas;
310  ptr_compute_u_from_entropy[whicheos] = &compute_u_from_entropy_idealgas;
311  ptr_u_rho0_p[whicheos] = &u_rho0_p_idealgas;
312  ptr_u_rho0_T[whicheos] = &u_rho0_T_idealgas;
313  ptr_dpdu_rho0_u[whicheos] = &dpdu_rho0_u_idealgas;
314  ptr_dpdrho0_rho0_u[whicheos] = &dpdrho0_rho0_u_idealgas;
315  ptr_cs2_compute[whicheos] = &cs2_compute_idealgas;
316 
317  ptr_compute_dSdrho[whicheos] = &compute_dSdrho_idealgas;
318  ptr_compute_dSdu[whicheos] = &compute_dSdu_idealgas;
319  ptr_compute_entropy[whicheos] = &compute_entropy_idealgas;
320 
321  ptr_compute_dspecificSdrho_wmrho0[whicheos] = &compute_dspecificSdrho_wmrho0_idealgas;
322  ptr_compute_dspecificSdwmrho0_wmrho0[whicheos] = &compute_dspecificSdwmrho0_wmrho0_idealgas;
323  ptr_compute_specificentropy_wmrho0[whicheos] = &compute_specificentropy_wmrho0_idealgas;
324 
325  ptr_pressure_wmrho0[whicheos] = &pressure_wmrho0_idealgas;
326  ptr_compute_idwmrho0dp[whicheos] = &compute_idwmrho0dp_idealgas;
327  ptr_compute_idrho0dp[whicheos] = &compute_idrho0dp_idealgas;
328 
329  ptr_compute_qdot[whicheos] = &compute_qdot_idealgas;
330  ptr_compute_sources_EOS[whicheos] = &compute_sources_EOS_idealgas;
331  ptr_compute_allextras[whicheos] = &compute_allextras_idealgas;
332  ptr_get_extrasprocessed[whicheos] = &get_extrasprocessed_idealgas;
333 
334  ptr_compute_temp[whicheos] = &compute_temp_idealgas;
335 
336  ptr_compute_EOS_parms[whicheos] = &compute_EOS_parms_idealgas;
337  ptr_compute_EOS_parms_full[whicheos] = &compute_EOS_parms_idealgas; // same as non-full
338  ptr_store_EOS_parms[whicheos] = &store_EOS_parms_idealgas;
339  ptr_get_EOS_parms[whicheos] = &get_EOS_parms_idealgas;
340  ptr_fix_primitive_eos_scalars[whicheos] = &fix_primitive_eos_scalars_idealgas;
341  ptr_getall_forinversion[whicheos] = &getall_forinversion_idealgas;
342 
343 
345  whicheos=MIGNONE;
346  ptr_pressure_rho0_u[whicheos] = &pressure_rho0_u_mignone;
347  ptr_compute_u_from_entropy[whicheos] = &compute_u_from_entropy_mignone;
348  ptr_u_rho0_T[whicheos] = &u_rho0_T_mignone;
349  ptr_dpdu_rho0_u[whicheos] = &dpdu_rho0_u_mignone;
350  ptr_dpdrho0_rho0_u[whicheos] = &dpdrho0_rho0_u_mignone;
351  ptr_cs2_compute[whicheos] = &cs2_compute_mignone;
352 
353  ptr_compute_dSdrho[whicheos] = &compute_dSdrho_mignone;
354  ptr_compute_dSdu[whicheos] = &compute_dSdu_mignone;
355  ptr_compute_entropy[whicheos] = &compute_entropy_mignone;
356 
357  ptr_compute_dspecificSdrho_wmrho0[whicheos] = &compute_dspecificSdrho_wmrho0_mignone;
358  ptr_compute_dspecificSdwmrho0_wmrho0[whicheos] = &compute_dspecificSdwmrho0_wmrho0_mignone;
359  ptr_compute_specificentropy_wmrho0[whicheos] = &compute_specificentropy_wmrho0_mignone;
360 
361  ptr_pressure_wmrho0[whicheos] = &pressure_wmrho0_mignone;
362  ptr_compute_idwmrho0dp[whicheos] = &compute_idwmrho0dp_mignone;
363  ptr_compute_idrho0dp[whicheos] = &compute_idrho0dp_mignone;
364 
365  ptr_compute_qdot[whicheos] = &compute_qdot_mignone;
366  ptr_compute_sources_EOS[whicheos] = &compute_sources_EOS_mignone;
367  ptr_compute_allextras[whicheos] = &compute_allextras_mignone;
368  ptr_get_extrasprocessed[whicheos] = &get_extrasprocessed_mignone;
369 
370  ptr_compute_temp[whicheos] = &compute_temp_mignone;
371 
372  ptr_compute_EOS_parms[whicheos] = &compute_EOS_parms_mignone;
373  ptr_compute_EOS_parms_full[whicheos] = &compute_EOS_parms_mignone; // same as non-full
374  ptr_store_EOS_parms[whicheos] = &store_EOS_parms_mignone;
375  ptr_get_EOS_parms[whicheos] = &get_EOS_parms_mignone;
376  ptr_fix_primitive_eos_scalars[whicheos] = &fix_primitive_eos_scalars_mignone;
377  ptr_getall_forinversion[whicheos] = &getall_forinversion_mignone;
378 
380  whicheos=GRBPWF99;
381  ptr_pressure_rho0_u[whicheos] = &pressure_rho0_u_grbpwf99;
382  ptr_compute_u_from_entropy[whicheos] = &compute_u_from_entropy_grbpwf99;
383  ptr_u_rho0_T[whicheos] = &u_rho0_T_grbpwf99;
384  ptr_dpdu_rho0_u[whicheos] = &dpdu_rho0_u_grbpwf99;
385  ptr_dpdrho0_rho0_u[whicheos] = &dpdrho0_rho0_u_grbpwf99;
386  ptr_cs2_compute[whicheos] = &cs2_compute_grbpwf99;
387 
388  ptr_compute_dSdrho[whicheos] = &compute_dSdrho_grbpwf99;
389  ptr_compute_dSdu[whicheos] = &compute_dSdu_grbpwf99;
390  ptr_compute_entropy[whicheos] = &compute_entropy_grbpwf99;
391 
392  ptr_compute_dspecificSdrho_wmrho0[whicheos] = &compute_dspecificSdrho_wmrho0_grbpwf99;
393  ptr_compute_dspecificSdwmrho0_wmrho0[whicheos] = &compute_dspecificSdwmrho0_wmrho0_grbpwf99;
394  ptr_compute_specificentropy_wmrho0[whicheos] = &compute_specificentropy_wmrho0_grbpwf99;
395 
396  ptr_pressure_wmrho0[whicheos] = &pressure_wmrho0_grbpwf99;
397  ptr_compute_idwmrho0dp[whicheos] = &compute_idwmrho0dp_grbpwf99;
398  ptr_compute_idrho0dp[whicheos] = &compute_idrho0dp_grbpwf99;
399 
400  ptr_compute_qdot[whicheos] = &compute_qdot_grbpwf99;
401  ptr_compute_sources_EOS[whicheos] = &compute_sources_EOS_grbpwf99;
402  ptr_compute_allextras[whicheos] = &compute_allextras_grbpwf99;
403  ptr_get_extrasprocessed[whicheos] = &get_extrasprocessed_grbpwf99;
404 
405 
406  ptr_compute_temp[whicheos] = &compute_temp_grbpwf99;
407 
408  ptr_compute_EOS_parms[whicheos] = &compute_EOS_parms_grbpwf99;
409  ptr_compute_EOS_parms_full[whicheos] = &compute_EOS_parms_grbpwf99; // same as non-full
410  ptr_store_EOS_parms[whicheos] = &store_EOS_parms_grbpwf99;
411  ptr_get_EOS_parms[whicheos] = &get_EOS_parms_grbpwf99;
412  ptr_fix_primitive_eos_scalars[whicheos] = &fix_primitive_eos_scalars_grbpwf99;
413  ptr_getall_forinversion[whicheos] = &getall_forinversion_grbpwf99;
414 
415 
417  whicheos=KAZFULL;
418  ptr_pressure_rho0_u[whicheos] = &pressure_rho0_u_kazfull;
419  ptr_compute_u_from_entropy[whicheos] = &compute_u_from_entropy_kazfull;
420  ptr_u_rho0_T[whicheos] = &u_rho0_T_kazfull;
421  ptr_dpdu_rho0_u[whicheos] = &dpdu_rho0_u_kazfull;
422  ptr_dpdrho0_rho0_u[whicheos] = &dpdrho0_rho0_u_kazfull;
423  ptr_cs2_compute[whicheos] = &cs2_compute_kazfull;
424 
425  ptr_compute_dSdrho[whicheos] = &compute_dSdrho_kazfull;
426  ptr_compute_dSdu[whicheos] = &compute_dSdu_kazfull;
427  ptr_compute_entropy[whicheos] = &compute_entropy_kazfull;
428 
429  ptr_compute_dspecificSdrho_wmrho0[whicheos] = &compute_dspecificSdrho_wmrho0_kazfull;
430  ptr_compute_dspecificSdwmrho0_wmrho0[whicheos] = &compute_dspecificSdwmrho0_wmrho0_kazfull;
431  ptr_compute_specificentropy_wmrho0[whicheos] = &compute_specificentropy_wmrho0_kazfull;
432 
433  ptr_pressure_wmrho0[whicheos] = &pressure_wmrho0_kazfull;
434  ptr_compute_idwmrho0dp[whicheos] = &compute_idwmrho0dp_kazfull;
435  ptr_compute_idrho0dp[whicheos] = &compute_idrho0dp_kazfull;
436 
437  ptr_compute_qdot[whicheos] = &compute_qdot_kazfull;
438  ptr_compute_sources_EOS[whicheos] = &compute_sources_EOS_kazfull;
439  ptr_compute_allextras[whicheos] = &compute_allextras_kazfull;
440  ptr_get_extrasprocessed[whicheos] = &get_extrasprocessed_kazfull;
441 
442 
443  ptr_compute_temp[whicheos] = &compute_temp_kazfull;
444 
445  ptr_compute_EOS_parms[whicheos] = &compute_EOS_parms_kazfull;
446  ptr_compute_EOS_parms_full[whicheos] = &compute_EOS_parms_full_kazfull; // different than non-full
447  ptr_store_EOS_parms[whicheos] = &store_EOS_parms_kazfull;
448  ptr_get_EOS_parms[whicheos] = &get_EOS_parms_kazfull;
449  ptr_fix_primitive_eos_scalars[whicheos] = &fix_primitive_eos_scalars_kazfull;
450  ptr_getall_forinversion[whicheos] = &getall_forinversion_kazfull;
451 
452 
454  whicheos=COLDEOS;
455  ptr_pressure_rho0_u[whicheos] = &pressure_rho0_u_coldgrmhd;
456  ptr_compute_u_from_entropy[whicheos] = &compute_u_from_entropy_coldgrmhd;
457  ptr_u_rho0_T[whicheos] = &u_rho0_T_coldgrmhd;
458  ptr_dpdu_rho0_u[whicheos] = &dpdu_rho0_u_coldgrmhd;
459  ptr_dpdrho0_rho0_u[whicheos] = &dpdrho0_rho0_u_coldgrmhd;
460  ptr_cs2_compute[whicheos] = &cs2_compute_coldgrmhd;
461 
462  ptr_compute_dSdrho[whicheos] = &compute_dSdrho_coldgrmhd;
463  ptr_compute_dSdu[whicheos] = &compute_dSdu_coldgrmhd;
464  ptr_compute_entropy[whicheos] = &compute_entropy_coldgrmhd;
465 
466  ptr_compute_dspecificSdrho_wmrho0[whicheos] = &compute_dspecificSdrho_wmrho0_coldgrmhd;
467  ptr_compute_dspecificSdwmrho0_wmrho0[whicheos] = &compute_dspecificSdwmrho0_wmrho0_coldgrmhd;
468  ptr_compute_specificentropy_wmrho0[whicheos] = &compute_specificentropy_wmrho0_coldgrmhd;
469 
470  ptr_pressure_wmrho0[whicheos] = &pressure_wmrho0_coldgrmhd;
471  ptr_compute_idwmrho0dp[whicheos] = &compute_idwmrho0dp_coldgrmhd;
472  ptr_compute_idrho0dp[whicheos] = &compute_idrho0dp_coldgrmhd;
473 
474  ptr_compute_qdot[whicheos] = &compute_qdot_coldgrmhd;
475  ptr_compute_sources_EOS[whicheos] = &compute_sources_EOS_coldgrmhd;
476  ptr_compute_allextras[whicheos] = &compute_allextras_coldgrmhd;
477  ptr_get_extrasprocessed[whicheos] = &get_extrasprocessed_coldgrmhd;
478 
479 
480  ptr_compute_temp[whicheos] = &compute_temp_coldgrmhd;
481 
482  ptr_compute_EOS_parms[whicheos] = &compute_EOS_parms_coldgrmhd;
483  ptr_compute_EOS_parms_full[whicheos] = &compute_EOS_parms_coldgrmhd; // same as non-full
484  ptr_store_EOS_parms[whicheos] = &store_EOS_parms_coldgrmhd;
485  ptr_get_EOS_parms[whicheos] = &get_EOS_parms_coldgrmhd;
486  ptr_fix_primitive_eos_scalars[whicheos] = &fix_primitive_eos_scalars_coldgrmhd;
487  ptr_getall_forinversion[whicheos] = &getall_forinversion_coldgrmhd;
488 
489 
491 
492 
493 
494  return(0);
495 
496 }
497 
498 
499 
500 
501