/******************************************************************************* * This file is part of SWIFT. * Copyright (c) 2016 Matthieu Schaller (schaller@strw.leidenuniv.nl) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * ******************************************************************************/ #ifndef SWIFT_HYDRO_PROPERTIES #define SWIFT_HYDRO_PROPERTIES /** * @file hydro_properties.h * @brief Contains all the constants and parameters of the hydro scheme */ /* Config parameters. */ #include #if defined(HAVE_HDF5) #include #endif /* Local includes. */ #include "hydro_parameters.h" #include "restart.h" /* Forward declarations */ struct cosmology; struct swift_params; struct gravity_props; struct phys_const; struct unit_system; /** * @brief Contains all the constants and parameters of the hydro scheme */ struct hydro_props { /* ------ Smoothing lengths parameters ---------- */ /*! Resolution parameter */ float eta_neighbours; /*! Target weightd number of neighbours (for info only)*/ float target_neighbours; /*! Smoothing length tolerance */ float h_tolerance; /*! Tolerance on neighbour number (for info only)*/ float delta_neighbours; /*! Maximal smoothing length (internal units) */ float h_max; /*! Minimal smoothing length expressed as ratio to softening length */ float h_min_ratio; /*! Minimal smoothing length (internal units) */ float h_min; /*! Maximal number of iterations to converge h */ int max_smoothing_iterations; /* ------ Neighbour number definition ------------ */ /*! Are we using the mass-weighted definition of neighbour number? */ int use_mass_weighted_num_ngb; /* ------ Time integration parameters ------------ */ /*! Time integration properties */ float CFL_condition; /*! Maximal change of h over one time-step */ float log_max_h_change; /* ------ Temperature parameters ----------------- */ /*! Minimal temperature allowed */ float minimal_temperature; /*! Minimal physical internal energy per unit mass (internal units) */ float minimal_internal_energy; /*! Initial temperature */ float initial_temperature; /*! Initial physical internal energy per unit mass (internal units) */ float initial_internal_energy; /*! Primordial hydrogen mass fraction for initial energy conversion */ float hydrogen_mass_fraction; /*! Temperature of the neutral to ionized transition of Hydrogen */ float hydrogen_ionization_temperature; /*! Mean molecular weight below hydrogen ionization temperature */ float mu_neutral; /*! Mean molecular weight above hydrogen ionization temperature */ float mu_ionised; /* ------ Particle splitting parameters ---------- */ /*! Is particle splitting activated? */ int particle_splitting; /*! Mass above which particles get split (internal units) */ float particle_splitting_mass_threshold; /*! Are we generating random IDs when splitting particles? */ int generate_random_ids; /*! Are we logging the particle splits beyond the limit in a file before * reseting? */ int log_extra_splits_in_file; /* ------ Viscosity and diffusion ---------------- */ /*! Artificial viscosity parameters */ struct viscosity_global_data viscosity; /*! Thermal diffusion parameters */ struct diffusion_global_data diffusion; /* ------ MHD properties ------------------------- */ /*! MHD parameters */ struct mhd_global_data mhd; }; void hydro_props_print(const struct hydro_props *p); void hydro_props_init(struct hydro_props *p, const struct phys_const *phys_const, const struct unit_system *us, struct swift_params *params); void hydro_props_update(struct hydro_props *p, const struct gravity_props *gp, const struct cosmology *cosmo); #if defined(HAVE_HDF5) void hydro_props_print_snapshot(hid_t h_grpsph, const struct hydro_props *p); #endif /* Dump/restore. */ void hydro_props_struct_dump(const struct hydro_props *p, FILE *stream); void hydro_props_struct_restore(const struct hydro_props *p, FILE *stream); /* Setup for tests */ void hydro_props_init_no_hydro(struct hydro_props *p); #endif /* SWIFT_HYDRO_PROPERTIES */