[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