diff --git a/configure.ac b/configure.ac index 2f88793960d9a695064e2edaf82ffd253b8b6c34..c2954cacd28499b80e9d003f32003885caf2dcaf 100644 --- a/configure.ac +++ b/configure.ac @@ -935,7 +935,7 @@ esac # chemistry function AC_ARG_WITH([chemistry], [AS_HELP_STRING([--with-chemistry=<function>], - [chemistry function @<:@none, grackle default: none@:>@] + [chemistry function @<:@none, gear default: none@:>@] )], [with_chemistry="$withval"], [with_chemistry="none"] @@ -944,8 +944,8 @@ case "$with_chemistry" in none) AC_DEFINE([CHEMISTRY_NONE], [1], [No chemistry function]) ;; - grackle) - AC_DEFINE([CHEMISTRY_GRACKLE], [1], [Chemistry compatible with the grackle cooling]) + gear) + AC_DEFINE([CHEMISTRY_GEAR], [1], [Chemistry taken from the GEAR model]) ;; *) AC_MSG_ERROR([Unknown chemistry function: $with_chemistry]) diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index 0193760d3114aecab91f0c2ad27a9c1dd77dec9a..844a6fa68029af3c119d7c03e09e6dec957c5da4 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -765,7 +765,8 @@ INPUT += @top_srcdir@/src/gravity/Default INPUT += @top_srcdir@/src/stars/Default INPUT += @top_srcdir@/src/riemann INPUT += @top_srcdir@/src/potential/point_mass -INPUT += @top_srcdir@/src/cooling/const_du +INPUT += @top_srcdir@/src/cooling/none +INPUT += @top_srcdir@/src/chemistry/none # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses diff --git a/examples/main.c b/examples/main.c index 24a9412ecc76bb5262b9c402cf86661233d454dd..bdd559c9b8aab718962398f6f6e06c43f94f9df6 100644 --- a/examples/main.c +++ b/examples/main.c @@ -612,6 +612,9 @@ int main(int argc, char *argv[]) { if (with_cooling) cooling_init(params, &us, &prog_const, &cooling_func); if (with_cooling && myrank == 0) cooling_print(&cooling_func); + /* Initialise the chemistry */ + chemistry_print(); + /* Initialise the feedback properties */ struct sourceterms sourceterms; if (with_sourceterms) sourceterms_init(params, &us, &sourceterms); diff --git a/src/Makefile.am b/src/Makefile.am index ed330b8abbe307bf6055b607a4b9d9899413d433..e191bb9008e5f4eb9b2aaec4876acc76cd00fd59 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -123,9 +123,9 @@ nobase_noinst_HEADERS = align.h approx_math.h atomic.h barrier.h cycle.h error.h chemistry/none/chemistry.h \ chemistry/none/chemistry_io.h \ chemistry/none/chemistry_struct.h \ - chemistry/grackle/chemistry.h \ - chemistry/grackle/chemistry_io.h \ - chemistry/grackle/chemistry_struct.h + chemistry/gear/chemistry.h \ + chemistry/gear/chemistry_io.h \ + chemistry/gear/chemistry_struct.h # Sources and flags for regular library diff --git a/src/chemistry.c b/src/chemistry.c index a80459f3cac56be1287b87aecaca9178b4ea0c32..ae9fcc31f5f8bd91d00744d7c96c7b4095356026 100644 --- a/src/chemistry.c +++ b/src/chemistry.c @@ -31,24 +31,17 @@ * @param parameter_file The parsed parameter file. * @param us The current internal system of units. * @param phys_const The physical constants in internal units. - * @param chemistry The chemistry properties to initialize */ void chemistry_init(const struct swift_params* parameter_file, const struct unit_system* us, - const struct phys_const* phys_const, - struct chemistry_part_data* chemistry) { + const struct phys_const* phys_const) { - chemistry_init_backend(parameter_file, us, phys_const, chemistry); + chemistry_init_backend(parameter_file, us, phys_const); } /** * @brief Prints the properties of the chemistry model to stdout. * - * Calls chemistry_print_backend for the chosen chemistry function. - * - * @param chemistry The properties of the chemistry function. + * Calls chemistry_print_backend for the chosen chemistry model. */ -void chemistry_print(const struct chemistry_part_data* chemistry) { - - chemistry_print_backend(chemistry); -} +void chemistry_print() { chemistry_print_backend(); } diff --git a/src/chemistry.h b/src/chemistry.h index e151e9803fed5abed7558834c51c08980bdc8a00..c464106a7c09eb4dd13f57a0b17cb34131f99091 100644 --- a/src/chemistry.h +++ b/src/chemistry.h @@ -31,8 +31,8 @@ /* Import the right chemistry definition */ #if defined(CHEMISTRY_NONE) #include "./chemistry/none/chemistry.h" -#elif defined(CHEMISTRY_GRACKLE) -#include "./chemistry/grackle/chemistry.h" +#elif defined(CHEMISTRY_GEAR) +#include "./chemistry/gear/chemistry.h" #else #error "Invalid choice of chemistry function." #endif @@ -40,9 +40,8 @@ /* Common functions */ void chemistry_init(const struct swift_params* parameter_file, const struct unit_system* us, - const struct phys_const* phys_const, - struct chemistry_part_data* chem); + const struct phys_const* phys_const); -void chemistry_print(const struct chemistry_part_data* chem); +void chemistry_print(); #endif /* SWIFT_CHEMISTRY_H */ diff --git a/src/chemistry/grackle/chemistry.h b/src/chemistry/gear/chemistry.h similarity index 80% rename from src/chemistry/grackle/chemistry.h rename to src/chemistry/gear/chemistry.h index 86cbdcb03608627c30d831456ef6f10697a5ea7f..de8badb08eb3742cc7105b84f673a517c50b81ee 100644 --- a/src/chemistry/grackle/chemistry.h +++ b/src/chemistry/gear/chemistry.h @@ -16,11 +16,11 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * ******************************************************************************/ -#ifndef SWIFT_CHEMISTRY_NONE_H -#define SWIFT_CHEMISTRY_NONE_H +#ifndef SWIFT_CHEMISTRY_GEAR_H +#define SWIFT_CHEMISTRY_GEAR_H /** - * @file src/chemistry/none/chemistry.h + * @file src/chemistry/gear/chemistry.h * @brief Empty infrastructure for the cases without chemistry function */ @@ -57,22 +57,17 @@ __attribute__((always_inline)) INLINE static void chemistry_init_part( * @param parameter_file The parsed parameter file. * @param us The current internal system of units. * @param phys_const The physical constants in internal units. - * @param chemistry The chemistry properties to initialize */ static INLINE void chemistry_init_backend( const struct swift_params* parameter_file, const struct unit_system* us, - const struct phys_const* phys_const, - struct chemistry_part_data* chemistry) {} + const struct phys_const* phys_const) {} /** * @brief Prints the properties of the chemistry model to stdout. - * - * @param chemistry The properties of the chemistry function. */ -static INLINE void chemistry_print_backend( - const struct chemistry_part_data* chemistry) { +static INLINE void chemistry_print_backend() { - message("Chemistry function is 'grackle'."); + message("Chemistry function is 'gear'."); } -#endif /* SWIFT_CHEMISTRY_NONE_H */ +#endif /* SWIFT_CHEMISTRY_GEAR_H */ diff --git a/src/chemistry/grackle/chemistry_io.h b/src/chemistry/gear/chemistry_io.h similarity index 77% rename from src/chemistry/grackle/chemistry_io.h rename to src/chemistry/gear/chemistry_io.h index f1affe8cef35e3a74efc0a12b10f0488708853d7..1be8ee49e33c5a7a0193db4af57d69408c2c1134 100644 --- a/src/chemistry/grackle/chemistry_io.h +++ b/src/chemistry/gear/chemistry_io.h @@ -16,6 +16,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * ******************************************************************************/ +#ifndef SWIFT_CHEMISTRY_IO_GEAR_H +#define SWIFT_CHEMISTRY_IO_GEAR_H #include "io_properties.h" @@ -24,18 +26,17 @@ * * @param parts The particle array. * @param list The list of i/o properties to read. - * @param num_fields The number of i/o fields to read. + * + * @return Returns the number of fields to read. */ -void chemistry_read_particles(struct part* parts, struct io_props* list, - int* num_fields) { - - list += *num_fields; - *num_fields += 1; +int chemistry_read_particles(struct part* parts, struct io_props* list) { /* List what we want to read */ list[0] = io_make_input_field("HeDensity", FLOAT, 1, COMPULSORY, UNIT_CONV_DENSITY, parts, chemistry_data.he_density); + + return 1; } /** @@ -43,16 +44,16 @@ void chemistry_read_particles(struct part* parts, struct io_props* list, * * @param parts The particle array. * @param list The list of i/o properties to write. - * @param num_fields The number of i/o fields to write. + * + * @return Returns the number of fields to write. */ -void chemistry_write_particles(const struct part* parts, struct io_props* list, - int* num_fields) { - - list += *num_fields; - *num_fields += 1; +int chemistry_write_particles(const struct part* parts, struct io_props* list) { + /* List what we want to write */ list[0] = io_make_output_field("HeDensity", FLOAT, 1, UNIT_CONV_DENSITY, parts, chemistry_data.he_density); + + return 1; } /** @@ -61,5 +62,7 @@ void chemistry_write_particles(const struct part* parts, struct io_props* list, */ void writeChemistryFlavor(hid_t h_grpsph) { - io_write_attribute_s(h_grpsph, "Chemistry Model", "Grackle"); + io_write_attribute_s(h_grpsph, "Chemistry Model", "GEAR"); } + +#endif /* SWIFT_CHEMISTRY_IO_GEAR_H */ diff --git a/src/chemistry/grackle/chemistry_struct.h b/src/chemistry/gear/chemistry_struct.h similarity index 87% rename from src/chemistry/grackle/chemistry_struct.h rename to src/chemistry/gear/chemistry_struct.h index f62b81b56cecae8ab38816d8d2ee34ee3a7470c3..dee3f267d4c61825bf67febab7397396cf071773 100644 --- a/src/chemistry/grackle/chemistry_struct.h +++ b/src/chemistry/gear/chemistry_struct.h @@ -16,11 +16,11 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * ******************************************************************************/ -#ifndef SWIFT_CHEMISTRY_STRUCT_NONE_H -#define SWIFT_CHEMISTRY_STRUCT_NONE_H +#ifndef SWIFT_CHEMISTRY_STRUCT_GEAR_H +#define SWIFT_CHEMISTRY_STRUCT_GEAR_H /** - * @file src/chemistry/none/chemistry_struct.h + * @file src/chemistry/gear/chemistry_struct.h * @brief Empty infrastructure for the cases without chemistry function */ @@ -31,4 +31,4 @@ struct chemistry_part_data { float he_density; }; -#endif /* SWIFT_CHEMISTRY_STRUCT_NONE_H */ +#endif /* SWIFT_CHEMISTRY_STRUCT_GEAR_H */ diff --git a/src/chemistry/none/chemistry.h b/src/chemistry/none/chemistry.h index 6f2cb354d9f011689479554528c142e45bd9c32a..d4aa7fb10a5cb1d872dde201e8ec6caa3c9c62f0 100644 --- a/src/chemistry/none/chemistry.h +++ b/src/chemistry/none/chemistry.h @@ -57,20 +57,15 @@ __attribute__((always_inline)) INLINE static void chemistry_init_part( * @param parameter_file The parsed parameter file. * @param us The current internal system of units. * @param phys_const The physical constants in internal units. - * @param chemistry The chemistry properties to initialize */ static INLINE void chemistry_init_backend( const struct swift_params* parameter_file, const struct unit_system* us, - const struct phys_const* phys_const, - struct chemistry_part_data* chemistry) {} + const struct phys_const* phys_const) {} /** * @brief Prints the properties of the chemistry model to stdout. - * - * @param chemistry The properties of the chemistry function. */ -static INLINE void chemistry_print_backend( - const struct chemistry_part_data* chemistry) { +static INLINE void chemistry_print_backend() { message("Chemistry function is 'No chemistry'."); } diff --git a/src/chemistry/none/chemistry_io.h b/src/chemistry/none/chemistry_io.h index 55e41772b3bcf955d9c170ff24cf7d4e79ccf462..6070ca0df12c67077b15e8d86f02d0d3390156ef 100644 --- a/src/chemistry/none/chemistry_io.h +++ b/src/chemistry/none/chemistry_io.h @@ -16,6 +16,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * ******************************************************************************/ +#ifndef SWIFT_CHEMISTRY_IO_NONE_H +#define SWIFT_CHEMISTRY_IO_NONE_H #include "io_properties.h" @@ -24,12 +26,15 @@ * * @param parts The particle array. * @param list The list of i/o properties to read. - * @param num_fields The number of i/o fields to read. + * + * @return Returns the number of fields to write. */ -void chemistry_read_particles(struct part* parts, struct io_props* list, - int* num_fields) { +int chemistry_read_particles(struct part* parts, struct io_props* list) { + + /* update list according to hydro_io */ - /* update num_fields and list according to hydro_io */ + /* Return the number of fields to read */ + return 0; } /** @@ -37,12 +42,15 @@ void chemistry_read_particles(struct part* parts, struct io_props* list, * * @param parts The particle array. * @param list The list of i/o properties to write. - * @param num_fields The number of i/o fields to write. + * + * @return Returns the number of fields to write. */ -void chemistry_write_particles(const struct part* parts, struct io_props* list, - int* num_fields) { +int chemistry_write_particles(const struct part* parts, struct io_props* list) { - /* update num_fields and list according to hydro_io */ + /* update list according to hydro_io */ + + /* Return the number of fields to write */ + return 0; } /** @@ -53,3 +61,5 @@ void writeChemistryFlavor(hid_t h_grpsph) { io_write_attribute_s(h_grpsph, "Chemistry Model", "None"); } + +#endif /* SWIFT_CHEMISTRY_IO_NONE_H */ diff --git a/src/chemistry_io.h b/src/chemistry_io.h index 315248d690d0199730034b290de12648ff76e115..8ba1c8f78de9adb87fc327c1ce04b13849755aa6 100644 --- a/src/chemistry_io.h +++ b/src/chemistry_io.h @@ -25,8 +25,8 @@ /* Import the right functions */ #if defined(CHEMISTRY_NONE) #include "./chemistry/none/chemistry_io.h" -#elif defined(CHEMISTRY_GRACKLE) -#include "./chemistry/grackle/chemistry_io.h" +#elif defined(CHEMISTRY_GEAR) +#include "./chemistry/gear/chemistry_io.h" #else #error "Invalid choice of chemistry function." #endif diff --git a/src/chemistry_struct.h b/src/chemistry_struct.h index f75cd3ff486a1c25964dd40e4ab29433273aa2a4..5bb228dac084ab080ba720fd64283e147c7e1fff 100644 --- a/src/chemistry_struct.h +++ b/src/chemistry_struct.h @@ -30,8 +30,8 @@ /* Import the right chemistry definition */ #if defined(CHEMISTRY_NONE) #include "./chemistry/none/chemistry_struct.h" -#elif defined(CHEMISTRY_GRACKLE) -#include "./chemistry/grackle/chemistry_struct.h" +#elif defined(CHEMISTRY_GEAR) +#include "./chemistry/gear/chemistry_struct.h" #else #error "Invalid choice of chemistry function." #endif diff --git a/src/cooling/const_du/cooling.h b/src/cooling/const_du/cooling.h index 4d5b12ed808ea38f7cd9e861b12e16af4e7fb80f..1becafb4fe3702240d726ab5f177c16f0f4e1415 100644 --- a/src/cooling/const_du/cooling.h +++ b/src/cooling/const_du/cooling.h @@ -51,7 +51,7 @@ __attribute__((always_inline)) INLINE static void writeCoolingFlavor( hid_t h_grpsph) { - io_write_attribute_s(h_grpsph, "Cooling Model", "const_du"); + io_write_attribute_s(h_grpsph, "Cooling Model", "Constant du/dt"); } /** diff --git a/src/cooling/const_lambda/cooling.h b/src/cooling/const_lambda/cooling.h index 2daa93d7ab6a5f52235318de67f4b97eaeb39ec0..5e166b562a34f7111468d40e2eb79e97f61a0bd8 100644 --- a/src/cooling/const_lambda/cooling.h +++ b/src/cooling/const_lambda/cooling.h @@ -44,7 +44,7 @@ __attribute__((always_inline)) INLINE static void writeCoolingFlavor( hid_t h_grpsph) { - io_write_attribute_s(h_grpsph, "Cooling Model", "const_lambda"); + io_write_attribute_s(h_grpsph, "Cooling Model", "Constant Lambda"); } /** diff --git a/src/cooling/grackle/cooling_struct.h b/src/cooling/grackle/cooling_struct.h index 8895137eb9884c54fd982ee9a2b1d61db453a44d..9ad1470922fdcbf892014f988389eccc1a4e9014 100644 --- a/src/cooling/grackle/cooling_struct.h +++ b/src/cooling/grackle/cooling_struct.h @@ -53,8 +53,6 @@ struct cooling_function_data { /** * @brief Properties of the cooling stored in the extra particle data - * - * theses data are not processed during the SPH density/force. */ struct cooling_xpart_data { diff --git a/src/hydro/Gadget2/hydro_io.h b/src/hydro/Gadget2/hydro_io.h index 4260501b48763172114e5d04a9e932b17536346d..24d4718168fef46c96b407902c9d548ba9132a4e 100644 --- a/src/hydro/Gadget2/hydro_io.h +++ b/src/hydro/Gadget2/hydro_io.h @@ -36,8 +36,6 @@ void hydro_read_particles(struct part* parts, struct io_props* list, int* num_fields) { - *num_fields = 8; - /* List what we want to read */ list[0] = io_make_input_field("Coordinates", DOUBLE, 3, COMPULSORY, UNIT_CONV_LENGTH, parts, x); @@ -56,7 +54,13 @@ void hydro_read_particles(struct part* parts, struct io_props* list, list[7] = io_make_input_field("Density", FLOAT, 1, OPTIONAL, UNIT_CONV_DENSITY, parts, rho); - chemistry_read_particles(parts, list, num_fields); + *num_fields = 8; + list += *num_fields; + + /* Read in chemistry information */ + const int num_chem_fields = chemistry_read_particles(parts, list); + *num_fields += num_chem_fields; + list += num_chem_fields; } void convert_u(const struct engine* e, const struct part* p, float* ret) { @@ -93,12 +97,6 @@ void convert_part_pos(const struct engine* e, const struct part* p, void hydro_write_particles(const struct part* parts, struct io_props* list, int* num_fields) { - *num_fields = 10; - -#ifdef DEBUG_INTERACTIONS_SPH - *num_fields += 4; -#endif - /* List what we want to write */ list[0] = io_make_output_field_convert_part( "Coordinates", DOUBLE, 3, UNIT_CONV_LENGTH, parts, convert_part_pos); @@ -122,21 +120,30 @@ void hydro_write_particles(const struct part* parts, struct io_props* list, list[9] = io_make_output_field_convert_part( "Pressure", FLOAT, 1, UNIT_CONV_PRESSURE, parts, convert_P); + *num_fields = 10; + list += *num_fields; + + /* Write some chemistry information */ + const int num_chem_fields = chemistry_write_particles(parts, list); + *num_fields += num_chem_fields; + list += num_chem_fields; + #ifdef DEBUG_INTERACTIONS_SPH - list[10] = io_make_output_field("Num_ngb_density", INT, 1, UNIT_CONV_NO_UNITS, - parts, num_ngb_density); - list[11] = io_make_output_field("Num_ngb_force", INT, 1, UNIT_CONV_NO_UNITS, - parts, num_ngb_force); - list[12] = + list[0] = io_make_output_field("Num_ngb_density", INT, 1, UNIT_CONV_NO_UNITS, + parts, num_ngb_density); + list[1] = io_make_output_field("Num_ngb_force", INT, 1, UNIT_CONV_NO_UNITS, + parts, num_ngb_force); + list[2] = io_make_output_field("Ids_ngb_density", LONGLONG, MAX_NUM_OF_NEIGHBOURS, UNIT_CONV_NO_UNITS, parts, ids_ngbs_density); - list[13] = + list[3] = io_make_output_field("Ids_ngb_force", LONGLONG, MAX_NUM_OF_NEIGHBOURS, UNIT_CONV_NO_UNITS, parts, ids_ngbs_force); -#endif - chemistry_write_particles(parts, list, num_fields); + *num_fields += 4; + list += 4; +#endif } /** @@ -153,9 +160,6 @@ void writeSPHflavour(hid_t h_grpsph) { "as in Springel (2005), i.e. Monaghan (1992) with Balsara (1995) switch"); io_write_attribute_f(h_grpsph, "Viscosity alpha", const_viscosity_alpha); io_write_attribute_f(h_grpsph, "Viscosity beta", 3.f); - - writeCoolingFlavor(h_grpsph); - writeChemistryFlavor(h_grpsph); } /** diff --git a/src/hydro/Gadget2/hydro_part.h b/src/hydro/Gadget2/hydro_part.h index 1d82451509682a8e8c267d9af5c0527c551025e4..55745b52f4459905b02adf4824c489510ee93f97 100644 --- a/src/hydro/Gadget2/hydro_part.h +++ b/src/hydro/Gadget2/hydro_part.h @@ -131,11 +131,12 @@ struct part { } force; }; + /* Chemistry information */ + struct chemistry_part_data chemistry_data; + /* Time-step length */ timebin_t time_bin; - struct chemistry_part_data chemistry_data; - #ifdef SWIFT_DEBUG_CHECKS /* Time of the last drift */ diff --git a/src/parallel_io.c b/src/parallel_io.c index 0711cc1d8ec3014ea23a2abf1d7c31309539fed2..d8b7adeca74cb949d2aa39f1f31e8d47f5354dd9 100644 --- a/src/parallel_io.c +++ b/src/parallel_io.c @@ -961,6 +961,14 @@ void write_output_parallel(struct engine* e, const char* baseName, H5Gclose(h_grp); } + /* Print the subgrid parameters */ + h_grp = H5Gcreate(h_file, "/SubgridScheme", H5P_DEFAULT, H5P_DEFAULT, + H5P_DEFAULT); + if (h_grp < 0) error("Error while creating subgrid group"); + writeCoolingFlavor(h_grp); + writeChemistryFlavor(h_grp); + H5Gclose(h_grp); + /* Print the gravity parameters */ if (e->policy & engine_policy_self_gravity) { h_grp = H5Gcreate(h_file, "/GravityScheme", H5P_DEFAULT, H5P_DEFAULT, diff --git a/src/serial_io.c b/src/serial_io.c index 7f87c0183d637e8266f80e208783411664274edd..9c0f53850ffa3241335a8ba6c69df1edd050b625 100644 --- a/src/serial_io.c +++ b/src/serial_io.c @@ -811,10 +811,18 @@ void write_output_serial(struct engine* e, const char* baseName, H5P_DEFAULT); if (h_grp < 0) error("Error while creating SPH group"); hydro_props_print_snapshot(h_grp, e->hydro_properties); - writeSPHflavour(h_grp); + writeChemistryFlavor(h_grp); H5Gclose(h_grp); } + /* Print the subgrid parameters */ + h_grp = H5Gcreate(h_file, "/SubgridScheme", H5P_DEFAULT, H5P_DEFAULT, + H5P_DEFAULT); + if (h_grp < 0) error("Error while creating subgrid group"); + writeCoolingFlavor(h_grp); + writeChemistryFlavor(h_grp); + H5Gclose(h_grp); + /* Print the gravity parameters */ if (e->policy & engine_policy_self_gravity) { h_grp = H5Gcreate(h_file, "/GravityScheme", H5P_DEFAULT, H5P_DEFAULT, diff --git a/src/single_io.c b/src/single_io.c index 3cf1d313dc5ed03073e794695d077f1f71e5b30a..1635ce5c526043e40ed2d9b1d0227cb93f82fcfb 100644 --- a/src/single_io.c +++ b/src/single_io.c @@ -665,6 +665,14 @@ void write_output_single(struct engine* e, const char* baseName, H5Gclose(h_grp); } + /* Print the subgrid parameters */ + h_grp = H5Gcreate(h_file, "/SubgridScheme", H5P_DEFAULT, H5P_DEFAULT, + H5P_DEFAULT); + if (h_grp < 0) error("Error while creating subgrid group"); + writeCoolingFlavor(h_grp); + writeChemistryFlavor(h_grp); + H5Gclose(h_grp); + /* Print the gravity parameters */ if (e->policy & engine_policy_self_gravity) { h_grp = H5Gcreate(h_file, "/GravityScheme", H5P_DEFAULT, H5P_DEFAULT,