/******************************************************************************* * This file is part of SWIFT. * Copyright (c) 2018 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_DEFAULT_BLACK_HOLES_PROPERTIES_H #define SWIFT_DEFAULT_BLACK_HOLES_PROPERTIES_H #include "chemistry.h" #include "hydro_properties.h" /** * @brief Properties of the black hole scheme. * * In this default scheme, we only have the properties * required by the neighbour search. */ struct black_holes_props { /*! 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 number of iterations to converge h */ int max_smoothing_iterations; /*! Maximal change of h over one time-step */ float log_max_h_change; /*! Use nibbling? (Always set to 0 in the default model) */ int use_nibbling; }; /** * @brief Initialise the black hole properties from the parameter file. * * We read the defaults from the hydro properties. * * @param bp The #black_holes_props. * @param phys_const The physical constants in the internal unit system. * @param us The internal unit system. * @param params The parsed parameters. * @param hydro_props The already read-in properties of the hydro scheme. * @param cosmo The cosmological model. */ static INLINE void black_holes_props_init(struct black_holes_props *bp, const struct phys_const *phys_const, const struct unit_system *us, struct swift_params *params, const struct hydro_props *hydro_props, const struct cosmology *cosmo) { /* Kernel properties */ bp->eta_neighbours = parser_get_opt_param_float( params, "BlackHoles:resolution_eta", hydro_props->eta_neighbours); /* Tolerance for the smoothing length Newton-Raphson scheme */ bp->h_tolerance = parser_get_opt_param_float(params, "BlackHoles:h_tolerance", hydro_props->h_tolerance); /* Get derived properties */ bp->target_neighbours = pow_dimension(bp->eta_neighbours) * kernel_norm; const float delta_eta = bp->eta_neighbours * (1.f + bp->h_tolerance); bp->delta_neighbours = (pow_dimension(delta_eta) - pow_dimension(bp->eta_neighbours)) * kernel_norm; /* Number of iterations to converge h */ bp->max_smoothing_iterations = parser_get_opt_param_int(params, "BlackHoles:max_ghost_iterations", hydro_props->max_smoothing_iterations); /* Time integration properties */ const float max_volume_change = parser_get_opt_param_float(params, "BlackHoles:max_volume_change", -1); if (max_volume_change == -1) bp->log_max_h_change = hydro_props->log_max_h_change; else bp->log_max_h_change = logf(powf(max_volume_change, hydro_dimension_inv)); /* No nibbling in this default model! */ bp->use_nibbling = 0; } /** * @brief Write a black_holes_props struct to the given FILE as a stream of * bytes. * * @param props the black hole properties struct * @param stream the file stream */ INLINE static void black_holes_struct_dump( const struct black_holes_props *props, FILE *stream) { restart_write_blocks((void *)props, sizeof(struct black_holes_props), 1, stream, "black_holes props", "black holes props"); } /** * @brief Restore a black_holes_props struct from the given FILE as a stream of * bytes. * * @param props the black hole properties struct * @param stream the file stream */ INLINE static void black_holes_struct_restore( const struct black_holes_props *props, FILE *stream) { restart_read_blocks((void *)props, sizeof(struct black_holes_props), 1, stream, NULL, "black holes props"); } #endif /* SWIFT_DEFAULT_BLACK_HOLES_PROPERTIES_H */