/******************************************************************************* * This file is part of SWIFT. * Copyright (c) 2018 Folkert Nobels (nobels@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_NONE_STAR_FORMATION_H #define SWIFT_NONE_STAR_FORMATION_H /* Local includes */ #include "cooling_properties.h" #include "cosmology.h" #include "entropy_floor.h" #include "error.h" #include "hydro_properties.h" #include "parser.h" #include "part.h" #include "physical_constants.h" #include "units.h" /* Starformation struct */ struct star_formation {}; /* Does the star formation model move the hydro particles? This will update the c->hydro.dx_max_part and c->hydro.dx_max_sort after forming a star. */ #define star_formation_need_update_dx_max 0 /** * @brief Calculate if the gas has the potential of becoming * a star. * * No star formation should occur, so return 0. * * @param starform the star formation law properties to use. * @param p the gas particles. * @param xp the additional properties of the gas particles. * @param phys_const the physical constants in internal units. * @param cosmo the cosmological parameters and properties. * @param hydro_props The properties of the hydro scheme. * @param us The internal system of units. * @param cooling The cooling data struct. * */ INLINE static int star_formation_is_star_forming( const struct part* p, const struct xpart* xp, const struct star_formation* starform, const struct phys_const* phys_const, const struct cosmology* cosmo, const struct hydro_props* hydro_props, const struct unit_system* us, const struct cooling_function_data* cooling, const struct entropy_floor_properties* entropy_floor) { return 0; } /** * @brief Compute the star-formation rate of a given particle and store * it into the #xpart. * * Nothing to do here. * * @param p #part. * @param xp the #xpart. * @param starform the star formation law properties to use * @param phys_const the physical constants in internal units. * @param hydro_props The properties of the hydro scheme. * @param cosmo the cosmological parameters and properties. * @param dt_star The time-step of this particle. */ INLINE static void star_formation_compute_SFR( const struct part* p, struct xpart* xp, const struct star_formation* starform, const struct phys_const* phys_const, const struct hydro_props* hydro_props, const struct cosmology* cosmo, const double dt_star) {} /** * @brief Decides whether a particle should be converted into a * star or not. * * No SF should occur, so return 0. * * @param p The #part. * @param xp The #xpart. * @param starform The properties of the star formation model. * @param e The #engine (for random numbers). * @param dt_star The time-step of this particle * @return 1 if a conversion should be done, 0 otherwise. */ INLINE static int star_formation_should_convert_to_star( const struct part* p, const struct xpart* xp, const struct star_formation* starform, const struct engine* e, const double dt_star) { return 0; } /** * @brief Returns the number of new star particles to create per SF event. * * @param p The #part. * @param xp The #xpart. * @param starform The properties of the star formation model. * * @return The number of extra star particles to generate per gas particles. * (return 0 if the gas particle itself is to be converted) */ INLINE static int star_formation_number_spart_to_spawn( const struct part* p, const struct xpart* xp, const struct star_formation* starform) { return 0; } /** * @brief Returns the number of particles to convert per SF event. * * @param p The #part. * @param xp The #xpart. * @param starform The properties of the star formation model. * * @return The number of particles to generate per gas particles. * (This has to be 0 or 1) */ INLINE static int star_formation_number_spart_to_convert( const struct part* p, const struct xpart* xp, const struct star_formation* starform) { return 0; } /** * @brief Update the SF properties of a particle that is not star forming. * * Nothing to do here. * * @param p The #part. * @param xp The #xpart. * @param e The #engine. * @param starform The properties of the star formation model. * @param with_cosmology Are we running with cosmology switched on? */ INLINE static void star_formation_update_part_not_SFR( struct part* p, struct xpart* xp, const struct engine* e, const struct star_formation* starform, const int with_cosmology) {} /** * @brief Copies the properties of the gas particle over to the * star particle. * * Nothing to do here. * * @param e The #engine * @param p the gas particles. * @param xp the additional properties of the gas particles. * @param sp the new created star particle with its properties. * @param starform the star formation law properties to use. * @param phys_const the physical constants in internal units. * @param cosmo the cosmological parameters and properties. * @param with_cosmology if we run with cosmology. * @param convert_part Did we convert a part (or spawned one)? */ INLINE static void star_formation_copy_properties( const struct part* p, const struct xpart* xp, struct spart* sp, const struct engine* e, const struct star_formation* starform, const struct cosmology* cosmo, const int with_cosmology, const struct phys_const* phys_const, const struct hydro_props* hydro_props, const struct unit_system* us, const struct cooling_function_data* cooling, const int convert_part) {} /** * @brief initialization of the star formation law * * @param parameter_file The parsed parameter file * @param phys_const Physical constants in internal units * @param us The current internal system of units * @param hydro_props The propertis of the hydro model. * @param cosmo The current cosmological model. * @param entropy_floor The properties of the entropy floor used in this * simulation. * @param starform the star formation law properties to initialize */ INLINE static void starformation_init_backend( struct swift_params* parameter_file, const struct phys_const* phys_const, const struct unit_system* us, const struct hydro_props* hydro_props, const struct cosmology* cosmo, const struct entropy_floor_properties* entropy_floor, const struct star_formation* starform) {} /** * @brief Prints the used parameters of the star formation law * * @param starform the star formation law properties. */ INLINE static void starformation_print_backend( const struct star_formation* starform) { message("Star formation law is 'No Star Formation'"); } /** * @brief Return the star formation rate of a particle. * * No star formation in this model --> we return 0 * * @param p The particle. * @param xp The extended data of the particle. */ INLINE static float star_formation_get_SFR(const struct part* p, const struct xpart* xp) { return 0.f; } /** * @brief Finishes the density calculation. * * Nothing to do here. * * @param p The particle to act upon * @param xp The extra particle to act upon * @param cd The global star_formation information. * @param cosmo The current cosmological model. */ __attribute__((always_inline)) INLINE static void star_formation_end_density( struct part* p, struct xpart* xp, const struct star_formation* cd, const struct cosmology* cosmo) {} /** * @brief Sets all particle fields to sensible values when the #part has 0 ngbs. * * Nothing to do here. * * @param p The particle to act upon * @param xp The extended particle data to act upon * @param cd #star_formation containing star_formation informations. * @param cosmo The current cosmological model. */ __attribute__((always_inline)) INLINE static void star_formation_part_has_no_neighbours(struct part* p, struct xpart* xp, const struct star_formation* cd, const struct cosmology* cosmo) {} /** * @brief Sets the star_formation properties of the (x-)particles to a valid * state to start the density loop. * * Nothing to do here. * * @param data The global star_formation information used for this run. * @param p Pointer to the particle data. */ __attribute__((always_inline)) INLINE static void star_formation_init_part( struct part* p, const struct star_formation* data) {} /** * @brief Sets the star_formation properties of the (x-)particles to a valid * start state at the beginning of the simulation after the ICs have been read. * * Nothing to do here. * * @param phys_const The physical constant in internal units. * @param us The unit system. * @param cosmo The current cosmological model. * @param data The global star_formation information used for this run. * @param p Pointer to the particle data. * @param xp Pointer to the extended particle data. */ __attribute__((always_inline)) INLINE static void star_formation_first_init_part(const struct phys_const* phys_const, const struct unit_system* us, const struct cosmology* cosmo, const struct star_formation* data, const struct part* p, struct xpart* xp) {} /** * @brief Split the star formation content of a particle into n pieces * * @param p The #part. * @param xp The #xpart. * @param n The number of pieces to split into. */ __attribute__((always_inline)) INLINE static void star_formation_split_part( struct part* p, struct xpart* xp, const double n) {} /** * @brief Deal with the case where no spart are available for star formation. * * @param e The #engine. * @param p The #part. * @param xp The #xpart. */ __attribute__((always_inline)) INLINE static void star_formation_no_spart_available(const struct engine* e, const struct part* p, const struct xpart* xp) { /* Nothing to do, we just skip it and deal with it next step */ } /** * @brief Compute some information for the star formation model based * on all the particles that were read in. * * This is called once on start-up of the code. * * Nothing to do here. * * @param star_form The #star_formation structure. * @param e The #engine. */ __attribute__((always_inline)) INLINE static void star_formation_first_init_stats(struct star_formation* star_form, const struct engine* e) {} #endif /* SWIFT_NONE_STAR_FORMATION_H */