/*******************************************************************************
* This file is part of SWIFT.
* Copyright (C) 2015 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 .
*
******************************************************************************/
/* Some standard headers. */
#include
/* Includes. */
#include "swift.h"
void select_output_engine_init(struct engine *e, struct space *s,
struct cosmology *cosmo,
struct swift_params *params,
struct output_options *output,
struct cooling_function_data *cooling,
struct hydro_props *hydro_properties) {
/* set structures */
e->s = s;
e->cooling_func = cooling;
e->parameter_file = params;
e->output_options = output;
e->cosmology = cosmo;
e->policy = engine_policy_hydro;
e->hydro_properties = hydro_properties;
/* initialization of threadpool */
threadpool_init(&e->threadpool, 1);
/* set parameters */
e->verbose = 1;
e->time = 0;
e->snapshot_output_count = 0;
e->snapshot_compression = 0;
};
void select_output_space_init(struct space *s, double *dim, int periodic,
size_t Ngas, size_t Nspart, size_t Ngpart,
struct part *parts, struct spart *sparts,
struct gpart *gparts) {
s->periodic = periodic;
for (int i = 0; i < 3; i++) {
s->dim[i] = dim[i];
}
/* init space particles */
s->nr_parts = Ngas;
s->nr_sparts = Nspart;
s->nr_gparts = Ngpart;
s->parts = parts;
s->gparts = gparts;
s->sparts = sparts;
/* Allocate the extra parts array for the gas particles. */
if (posix_memalign((void **)&s->xparts, xpart_align,
Ngas * sizeof(struct xpart)) != 0)
error("Failed to allocate xparts.");
bzero(s->xparts, Ngas * sizeof(struct xpart));
};
void select_output_space_clean(struct space *s) { free(s->xparts); };
void select_output_engine_clean(struct engine *e) {
threadpool_clean(&e->threadpool);
}
int main(int argc, char *argv[]) {
/* Initialize CPU frequency, this also starts time. */
unsigned long long cpufreq = 0;
clocks_set_cpufreq(cpufreq);
// const char *base_name = "testSelectOutput";
size_t Ngas = 0, Ngpart = 0, Ngpart_background = 0, Nspart = 0, Nbpart = 0,
Nsink = 0, Nnupart = 0;
int flag_entropy_ICs = -1;
int periodic = 1;
double dim[3];
struct part *parts = NULL;
struct gpart *gparts = NULL;
struct spart *sparts = NULL;
struct bpart *bparts = NULL;
struct sink *sinks = NULL;
struct ic_info ics_metadata;
strcpy(ics_metadata.group_name, "NoSUCH");
/* parse parameters */
message("Reading parameters.");
struct swift_params param_file;
const char *input_file = "selectOutputParameters.yml";
parser_read_file(input_file, ¶m_file);
struct output_options output_options;
output_options_init(¶m_file, 0, &output_options);
/* Default unit system */
message("Initialization of the unit system.");
struct unit_system us;
units_init_cgs(&us);
/* Default physical constants */
message("Initialization of the physical constants.");
struct phys_const prog_const;
phys_const_init(&us, ¶m_file, &prog_const);
/* Read data */
message("Reading initial conditions.");
read_ic_single("input.hdf5", &us, dim, &parts, &gparts, &sinks, &sparts,
&bparts, &Ngas, &Ngpart, &Ngpart_background, &Nnupart, &Nsink,
&Nspart, &Nbpart, &flag_entropy_ICs,
/*with_hydro=*/1,
/*with_gravity=*/0,
/*with_sink=*/0,
/*with_stars=*/0,
/*with_black_holes=*/0,
/*with_cosmology=*/0,
/*cleanup_h=*/0,
/*cleanup_sqrt_a=*/0,
/*h=*/1., /*a=*/1., /*n_threads=*/1, /*dry_run=*/0,
/*remap_ids=*/0, &ics_metadata);
/* pseudo initialization of the space */
message("Initialization of the space.");
struct space s;
select_output_space_init(&s, dim, periodic, Ngas, Nspart, Ngpart, parts,
sparts, gparts);
/* initialization of cosmology */
message("Initialization of the cosmology.");
struct cosmology cosmo;
cosmology_init_no_cosmo(&cosmo);
/* pseudo initialization of cooling */
message("Initialization of the cooling.");
struct cooling_function_data cooling;
/* pseudo initialization of hydro */
message("Initialization of the hydro.");
struct hydro_props hydro_properties;
hydro_props_init(&hydro_properties, &prog_const, &us, ¶m_file);
/* pseudo initialization of the engine */
message("Initialization of the engine.");
struct engine e;
e.physical_constants = &prog_const;
sprintf(e.snapshot_base_name, "testSelectOutput");
sprintf(e.run_name, "Select Output Test");
select_output_engine_init(&e, &s, &cosmo, ¶m_file, &output_options,
&cooling, &hydro_properties);
/* check output selection */
message("Checking output parameters.");
io_prepare_output_fields(&output_options, /*with_cosmology=*/0,
/*with_fof=*/0,
/*with_structure_finding=*/0,
/*verbose=*/1);
/* write output file */
message("Writing output.");
write_output_single(&e, &us, &us, /*fof=*/0);
/* Clean-up */
message("Cleaning memory.");
select_output_engine_clean(&e);
select_output_space_clean(&s);
cosmology_clean(&cosmo);
free(parts);
free(gparts);
return 0;
}