/******************************************************************************* * This file is part of SWIFT. * Copyright (c) 2021 John Helly (j.c.helly@durham.ac.uk) * * 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_LIGHTCONE_ARRAY_H #define SWIFT_LIGHTCONE_ARRAY_H /* Config parameters. */ #include /* Local headers */ #include "lightcone/lightcone.h" #include "lightcone/lightcone_replications.h" #include "parser.h" #include "part_type.h" #include "particle_buffer.h" #include "threadpool.h" #include "timeline.h" /* Avoid cyclic inclusions */ struct cosmology; struct engine; struct space; #define MAX_LIGHTCONES 8 /** * @brief Lightcone data for multiple lightcones */ struct lightcone_array_props { /*! Number of lightcones */ int nr_lightcones; /*! Lightcone properties */ struct lightcone_props *lightcone; /*! Whether we need to do lightcone crossing checks for each type at this step */ int check_type_for_crossing[swift_type_count]; /*! Whether to generate memory usage reports */ int verbose; }; void lightcone_array_init(struct lightcone_array_props *props, const struct space *s, const struct cosmology *cosmo, struct swift_params *params, const struct unit_system *internal_units, const struct phys_const *physical_constants, const int verbose); void lightcone_array_clean(struct lightcone_array_props *props); void lightcone_array_struct_dump(const struct lightcone_array_props *props, FILE *stream); void lightcone_array_struct_restore(struct lightcone_array_props *props, FILE *stream); void lightcone_array_prepare_for_step(struct lightcone_array_props *props, const struct cosmology *cosmo, const integertime_t ti_earliest_undrifted, const integertime_t ti_current); int lightcone_array_trigger_map_update(struct lightcone_array_props *props); void lightcone_array_flush(struct lightcone_array_props *props, struct threadpool *tp, const struct cosmology *cosmo, const struct unit_system *internal_units, const struct unit_system *snapshot_units, int flush_map_updates, int flush_particles, int end_file, int dump_all_shells); struct replication_list *lightcone_array_refine_replications( struct lightcone_array_props *props, const struct cell *cell); void lightcone_array_free_replications(struct lightcone_array_props *props, struct replication_list *lists); void lightcone_array_write_index(struct lightcone_array_props *props, const struct unit_system *internal_units, const struct unit_system *snapshot_units); void lightcone_array_report_memory_use(struct lightcone_array_props *props); #endif /* SWIFT_LIGHTCONE_ARRAY_H */