diff --git a/examples/Cooling/CoolingRates/cooling_rates.c b/examples/Cooling/CoolingRates/cooling_rates.c index f23a987e3ae56db0811eb9997a8c1c48772f7f09..5ffdc7f8d56bfea68119d275b8bb574658be9d91 100644 --- a/examples/Cooling/CoolingRates/cooling_rates.c +++ b/examples/Cooling/CoolingRates/cooling_rates.c @@ -164,6 +164,7 @@ int main(int argc, char **argv) { struct part p; struct xpart xp; struct phys_const internal_const; + struct hydro_props hydro_properties; struct cooling_function_data cooling; struct cosmology cosmo; struct space s; @@ -210,8 +211,13 @@ int main(int argc, char **argv) { // Init units units_init_from_params(&us, params, "InternalUnitSystem"); + + // Init physical constants phys_const_init(&us, params, &internal_const); + // Init porperties of hydro + hydro_props_init(&hydro_properties, &internal_const, &us, params); + // Init chemistry chemistry_init(params, &us, &internal_const, &chem_data); chemistry_first_init_part(&internal_const, &us, &cosmo, &chem_data, &p, &xp); @@ -228,7 +234,7 @@ int main(int argc, char **argv) { message("Redshift is %f", cosmo.z); // Init cooling - cooling_init(params, &us, &internal_const, &cooling); + cooling_init(params, &us, &internal_const, &hydro_properties, &cooling); cooling_print(&cooling); cooling_update(&cosmo, &cooling, &s); diff --git a/examples/Cooling/CoolingRates/cooling_rates.yml b/examples/Cooling/CoolingRates/cooling_rates.yml index 985eef220b24bd398deec09ea56630118d0bc5ab..5a96c2a3d74441c616d39fb1bc672d0816356325 100644 --- a/examples/Cooling/CoolingRates/cooling_rates.yml +++ b/examples/Cooling/CoolingRates/cooling_rates.yml @@ -15,6 +15,11 @@ Cosmology: Omega_lambda: 0.693 # Dark-energy density parameter Omega_b: 0.0455 # Baryon density parameter +SPH: + resolution_eta: 1.234 + CFL_condition: 0.1 + minimal_temperature: 100. + EAGLEChemistry: init_abundance_metal: 0.014 init_abundance_Hydrogen: 0.70649785 diff --git a/examples/IsolatedGalaxy/IsolatedGalaxy_starformation/isolated_galaxy.yml b/examples/IsolatedGalaxy/IsolatedGalaxy_starformation/isolated_galaxy.yml index 7dac0a8a6c3b8d4c583ae6138513f0c5259227b1..078d5bb48a5b57856fe1d28e8d0890f05152a380 100644 --- a/examples/IsolatedGalaxy/IsolatedGalaxy_starformation/isolated_galaxy.yml +++ b/examples/IsolatedGalaxy/IsolatedGalaxy_starformation/isolated_galaxy.yml @@ -25,9 +25,8 @@ TimeIntegration: Snapshots: basename: output # Common part of the name of output files time_first: 0. # (Optional) Time of the first output if non-cosmological time-integration (in internal units) - delta_time: 0.001 # Time difference between consecutive outputs (in internal units) + delta_time: 0.001 # Time difference between consecutive outputs (in internal units) - # Parameters governing the conserved quantities statistics Statistics: delta_time: 1e-2 # Time between statistics output @@ -45,6 +44,7 @@ SPH: CFL_condition: 0.1 # Courant-Friedrich-Levy condition for time integration. h_min_ratio: 0.1 # Minimal smoothing in units of softening. h_max: 10. + minimal_temperature: 10. # Kelvin # Standard EAGLE cooling options EAGLECooling: @@ -55,18 +55,18 @@ EAGLECooling: He_reion_z_sigma: 0.5 # Spread in redshift of the Helium re-ionization Gaussian He_reion_eV_p_H: 2.0 # Energy inject by Helium re-ionization in electron-volt per Hydrogen atom -# Primordial abundances +# Solar abundances EAGLEChemistry: - init_abundance_metal: 0.0129 # Inital fraction of particle mass in *all* metals + init_abundance_metal: 0.0129 # Inital fraction of particle mass in *all* metals init_abundance_Hydrogen: 0.7065 # Inital fraction of particle mass in Hydrogen - init_abundance_Helium: 0.2806 # Inital fraction of particle mass in Helium - init_abundance_Carbon: 0.00207 # Inital fraction of particle mass in Carbon - init_abundance_Nitrogen: 0.000836 # Inital fraction of particle mass in Nitrogen - init_abundance_Oxygen: 0.00549 # Inital fraction of particle mass in Oxygen - init_abundance_Neon: 0.00141 # Inital fraction of particle mass in Neon - init_abundance_Magnesium: 0.000591 # Inital fraction of particle mass in Magnesium - init_abundance_Silicon: 0.000683 # Inital fraction of particle mass in Silicon - init_abundance_Iron: 0.0011 # Inital fraction of particle mass in Iron + init_abundance_Helium: 0.2806 # Inital fraction of particle mass in Helium + init_abundance_Carbon: 0.00207 # Inital fraction of particle mass in Carbon + init_abundance_Nitrogen: 0.000836 # Inital fraction of particle mass in Nitrogen + init_abundance_Oxygen: 0.00549 # Inital fraction of particle mass in Oxygen + init_abundance_Neon: 0.00141 # Inital fraction of particle mass in Neon + init_abundance_Magnesium: 0.000591 # Inital fraction of particle mass in Magnesium + init_abundance_Silicon: 0.000683 # Inital fraction of particle mass in Silicon + init_abundance_Iron: 0.0011 # Inital fraction of particle mass in Iron # Hernquist potential parameters HernquistPotential: diff --git a/examples/main.c b/examples/main.c index 79ff40de22cb855cd3ef8d855278e904afd4ae8d..134690c43ad5123e323e55bb388ece6341cbff5f 100644 --- a/examples/main.c +++ b/examples/main.c @@ -766,7 +766,7 @@ int main(int argc, char *argv[]) { #endif bzero(&cooling_func, sizeof(struct cooling_function_data)); if (with_cooling || with_temperature) { - cooling_init(params, &us, &prog_const, &cooling_func); + cooling_init(params, &us, &prog_const, &hydro_properties, &cooling_func); } if (myrank == 0) cooling_print(&cooling_func); diff --git a/src/cooling.c b/src/cooling.c index 34205937bbd7ce144503b10ef047cf5b552f23cc..e203ddb34d7b7f45010da9c47383966a5cf25f39 100644 --- a/src/cooling.c +++ b/src/cooling.c @@ -22,6 +22,10 @@ /* This object's header. */ #include "cooling.h" + +/* Local includes */ +#include "error.h" +#include "hydro_properties.h" #include "restart.h" /** @@ -37,8 +41,15 @@ void cooling_init(struct swift_params* parameter_file, const struct unit_system* us, const struct phys_const* phys_const, + const struct hydro_props* hydro_props, struct cooling_function_data* cooling) { + /* Verify that we are not doing something stupid here */ + if (hydro_props->minimal_temperature <= 0.) + error( + "ERROR: Cannot run with cooling switched on and no minimal " + "temperature."); + cooling_init_backend(parameter_file, us, phys_const, cooling); } diff --git a/src/cooling.h b/src/cooling.h index 9b9b255dc7f845adeed8177b4385e08aaffbd977..8592025234b28cb4ff74524cffd407ff2c6f708b 100644 --- a/src/cooling.h +++ b/src/cooling.h @@ -55,6 +55,7 @@ void cooling_init(struct swift_params* parameter_file, const struct unit_system* us, const struct phys_const* phys_const, + const struct hydro_props* hydro_props, struct cooling_function_data* cooling); void cooling_print(const struct cooling_function_data* cooling); diff --git a/src/cooling/EAGLE/cooling.c b/src/cooling/EAGLE/cooling.c index 2e5da9576afecd63b7ecf12e1636f0c7892bdbf6..3933d536720e81f3737be53d16432b20b8913c6a 100644 --- a/src/cooling/EAGLE/cooling.c +++ b/src/cooling/EAGLE/cooling.c @@ -836,15 +836,16 @@ void cooling_init_backend(struct swift_params *parameter_file, const struct phys_const *phys_const, struct cooling_function_data *cooling) { - /* read some parameters */ + /* Read model parameters */ + + /* Directory for cooling tables */ + parser_get_param_string(parameter_file, "EAGLECooling:dir_name", + cooling->cooling_table_path); /* Despite the names, the values of H_reion_heat_cgs and He_reion_heat_cgs * that are read in are actually in units of electron volts per proton mass. * We later convert to units just below */ - parser_get_param_string(parameter_file, "EAGLECooling:dir_name", - cooling->cooling_table_path); - cooling->H_reion_done = 0; cooling->H_reion_z = parser_get_param_float(parameter_file, "EAGLECooling:H_reion_z"); diff --git a/src/hydro_properties.c b/src/hydro_properties.c index eb506839c859f561756fdc77072a915ff3a383aa..ca38be1d2e32d7e4830d878e65bae796b7806457 100644 --- a/src/hydro_properties.c +++ b/src/hydro_properties.c @@ -135,10 +135,16 @@ void hydro_props_init(struct hydro_props *p, p->initial_temperature = parser_get_opt_param_float( params, "SPH:initial_temperature", hydro_props_default_init_temp); + if (p->initial_temperature < 0.f) + error("ERROR: Minimal temperature set to a negative value!!!"); + /* Minimal temperature */ p->minimal_temperature = parser_get_opt_param_float( params, "SPH:minimal_temperature", hydro_props_default_min_temp); + if (p->minimal_temperature < 0.f) + error("ERROR: Minimal temperature set to a negative value!!!"); + if ((p->initial_temperature != 0.) && (p->initial_temperature < p->minimal_temperature)) error("Initial temperature lower than minimal allowed temperature!");