[santacruzgalaxy-list] Grackle proposal
Nick Gnedin
ngnedin at gmail.com
Wed Mar 19 11:03:08 PDT 2014
For those who see this for the first time: there was an e-mail exchange
about Grackle implementation that has almost reached an explosion point.
Hence, this proposal to focus the discussion and to formulate the whole
approach better.
The root of our problems with Grackle is that we approached the whole
question from the tail (finished library), not the head (the API). To
fix it, I propose an API that, I believe, everyone can implement easily.
API includes 1 header file, say "grackle.h", that exposes just 3 functions:
grackle_init_run()
called once per simulation
grackle_init_step(aexp,...)
called once per each time-step, uses the value of the scale
factor and other parameters as needed
grackle_solve_chemistry(dt,den,tem,...)
called for each resolution element one or more times per one
global time-step, uses gas properties to update internal energy.
Input gas properties may be required to have specific units and
be of specific data type. It should internally sense if it
runs within an OpenMP construct and support OpenMP
parallelization.
The API can also define its own data types with natutal conversion from
standard types, for example the following code should be valid:
float f;
double d;
gr_float gr_f;
gr_f = f;
gr_f = d;
An analogous API should be provided for F77.
Then in a code the API will be implemented as follows:
Begin_code
grackle_init_run()
Loop_over_timesteps(aexp)
grackle_init_step(aexp,...)
#pragma omp parallel loop
Loop_over_resolution_elements(elem)
{
gr_float dt = code_time_step*time_unit;
gr_float den = code_density(elem)*den_unit;
gr_float tem = code_temperature(elem)*tem_unit;
grackle_solve_chemistry(dt,den,tem,...)
}
End_loop
End_code
Let's converge on the API, and then the Grackle team will be able to
write a couple of wrappers that will suit everyone.
Given the wrappers, if Grackle is installed as an external library and
provides a proper Linus-style installer (that will handle all HDF5 and
other dependencies), then it should be trivial to integrate it in any code.
Nick
To unsubscribe from this group and stop receiving emails from it, send an email to santacruzgalaxy-list+unsubscribe at ucsc.edu.
More information about the santacruzgalaxy-list
mailing list