/******************************************************************************* * 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_STATISTICS_H #define SWIFT_STATISTICS_H /* Config parameters. */ #include /* Local headers. */ #include "lock.h" /* Some standard headers. */ #include /* Pre-declarations */ struct phys_const; struct space; struct unit_system; /** * @brief Quantities collected for physics statistics */ struct statistics { /*! Kinetic energy (internal units)*/ double E_kin; /*! Internal energy (internal units)*/ double E_int; /*! Self potential energy (internal units)*/ double E_pot_self; /*! External potential energy (internal units)*/ double E_pot_ext; /*! Radiated energy (internal units) */ double E_rad; /*! Entropy (internal units) */ double entropy; /*! Total mass (internal units)*/ double total_mass; /*! Total dm mass (internal units)*/ double dm_mass; /*! Total gas mass (internal units)*/ double gas_mass; /*! Total sink mass (internal units)*/ double sink_mass; /*! Total stellar mass (internal units)*/ double star_mass; /*! Total BH mass (internal units)*/ double bh_mass; /*! Total BH subgrid mass (internal units)*/ double bh_subgrid_mass; /*! Total metal mass in gas (internal units)*/ double gas_Z_mass; /*! Total metal mass in stars (internal units)*/ double star_Z_mass; /*! Total metal mass in BH (internal units)*/ double bh_Z_mass; /*! Sum of instantaneous accretion rate of all BHs (internal units)*/ double bh_accretion_rate; /*! Total accreted mass of all BHs (internal units)*/ double bh_accreted_mass; /* Total BH bolometric luminosity of all BHs (internal units) */ double bh_bolometric_luminosity; /* Total jet power of all BHs (internal units) */ double bh_jet_power; /*! Momentum (internal units)*/ double mom[3]; /*! Angular momentum (internal units) */ double ang_mom[3]; /*! Centre of mass (internal units)*/ double centre_of_mass[3]; /*! Total gas mass that is in Hydrogen (all species) */ double gas_H_mass; /*! Total gas mass that is in Molecular Hydrogen */ double gas_H2_mass; /*! Total gas mass that is in Atomic Hydrogen */ double gas_HI_mass; /*! Total gas mass that is in Helium (all species) */ double gas_He_mass; /*! Total Magnetic Energy */ double E_mag; /*! Total divB error */ double divB_error; /*! Total Cross Helicity */ double H_cross; /*! Total Magnetic helicity */ double H_mag; /*! Lock for threaded access */ swift_lock_type lock; }; void stats_collect(const struct space* s, struct statistics* stats); void stats_add(struct statistics* a, const struct statistics* b); void stats_write_file_header(FILE* file, const struct unit_system* us, const struct phys_const* phys_const); void stats_write_to_file(FILE* file, const struct statistics* stats, const double time, const double a, const double z, const int step); void stats_init(struct statistics* s); void stats_finalize(struct statistics* s); #ifdef WITH_MPI extern MPI_Datatype statistics_mpi_type; extern MPI_Op statistics_mpi_reduce_op; void stats_create_mpi_type(void); void stats_free_mpi_type(void); #endif #endif /* SWIFT_STATISTICS_H */