/******************************************************************************* * 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 . * ******************************************************************************/ /* Some standard headers. */ #include /* Includes. */ #include "swift.h" #define N_CHECK 20 #define TOLERANCE 1e-7 void test_params_init(struct swift_params *params) { parser_init("", params); parser_set_param(params, "Cosmology:Omega_cdm:0.2589"); parser_set_param(params, "Cosmology:Omega_lambda:0.6910"); parser_set_param(params, "Cosmology:Omega_b:0.0486"); parser_set_param(params, "Cosmology:h:0.6774"); parser_set_param(params, "Cosmology:a_begin:0.1"); parser_set_param(params, "Cosmology:a_end:1.0"); } int main(int argc, char *argv[]) { message("Initialization..."); /* pseudo initialization of params */ struct swift_params params; test_params_init(¶ms); /* initialization of unit system */ struct unit_system us; units_init_cgs(&us); /* initialization of phys_const */ struct phys_const phys_const; phys_const_init(&us, ¶ms, &phys_const); /* initialization of cosmo */ struct cosmology cosmo; cosmology_init(¶ms, &us, &phys_const, &cosmo); message("Start checking time since big bang computation..."); for (int i = 0; i < N_CHECK; i++) { double a = 0.1 + 0.9 * i / (N_CHECK - 1.); /* Compute a(t(a)) and check if same results */ double tmp = cosmology_get_time_since_big_bang(&cosmo, a); tmp = cosmology_get_scale_factor(&cosmo, tmp); /* check accuracy */ tmp = (tmp - a) / a; message("Accuracy of %g at a=%g", tmp, a); assert(fabs(tmp) < TOLERANCE); } message("Start checking comoving distance computation..."); for (int i = 0; i < N_CHECK; i++) { double a = 0.1 + 0.9 * i / (N_CHECK - 1.); /* Compute a(comoving_distance(a)) and check if same results */ double tmp = cosmology_get_comoving_distance(&cosmo, a); tmp = cosmology_scale_factor_at_comoving_distance(&cosmo, tmp); /* check accuracy */ tmp = (tmp - a) / a; message("Accuracy of %g at a=%g", tmp, a); assert(fabs(tmp) < TOLERANCE); } message("Everything seems fine with cosmology."); cosmology_clean(&cosmo); return 0; }