/*******************************************************************************
* This file is part of SWIFT.
* Copyright (c) 2018 Loic Hausamman (loic.hausammann@epfl.ch)
*
* 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_OUTPUT_LIST_H
#define SWIFT_OUTPUT_LIST_H
/* Config parameters. */
#include
/* Local headers */
#include "common_io.h"
#include "timeline.h"
/* Pre-declarations */
struct cosmology;
struct engine;
/*! Maximal number of output lists */
#define OUTPUT_LIST_MAX_NUM_OF_SELECT_OUTPUT_STYLES 8
/*! How far past time_end do we check for an output time? */
#define OUTPUT_LIST_EPS_TIME_END 1e-4
/**
* @brief the different output_list type
*/
enum output_list_type {
OUTPUT_LIST_AGE,
OUTPUT_LIST_REDSHIFT,
OUTPUT_LIST_SCALE_FACTOR,
OUTPUT_LIST_COMOVING_DISTANCE,
};
/**
* @brief the array containing the output times
*/
struct output_list {
/* Select output names. */
char select_output_names[OUTPUT_LIST_MAX_NUM_OF_SELECT_OUTPUT_STYLES]
[FIELD_BUFFER_SIZE];
/* Time array */
double *times;
/* Select output indices - each index corresponds to a string
* in select_output. Chosen to be this instead of an array of
* pointers because of restarts. */
int *select_output_indices;
/* List of snapshot labels if not using the defaults */
int *snapshot_labels;
/* Total number of currently used select output names */
int select_output_number_of_names;
/* Size of the time array (i.e. number of outputs) */
size_t size;
/* Current index */
size_t cur_ind;
/* Was the Select Output option used? */
int select_output_on;
/* Are we using individual labels for the runs? */
int alternative_labels_on;
/* Is this output list activated? */
int output_list_on;
/* Dump on final timestep? */
int final_step_dump;
};
void output_list_read_file(struct output_list *output_list,
const char *filename, struct cosmology *cosmo);
void output_list_read_next_time(struct output_list *t, const struct engine *e,
const char *name, integertime_t *ti_next);
void output_list_get_current_select_output(struct output_list *t,
char *select_output_name);
void output_list_init(struct output_list **list, const struct engine *e,
const char *name, double *const delta_time);
void output_list_print(const struct output_list *output_list);
void output_list_clean(struct output_list **output_list);
void output_list_struct_dump(struct output_list *list, FILE *stream);
void output_list_struct_restore(struct output_list *list, FILE *stream);
void output_list_check_selection(const struct output_list *list,
const struct output_options *output_options);
#endif /* SWIFT_OUTPUT_LIST_H */