Fast Methods for Cosmological Simulations
FastSim serves as a tool for quick N-body simulations in modified gravity.
core_cmd.cpp File Reference

command line arguments manipulation More...

#include "stdafx.h"
#include <boost/any.hpp>
#include <boost/program_options.hpp>
#include <iomanip>
#include <fstream>
#include "params.hpp"
#include "core_cmd.h"
#include "config.h"
Include dependency graph for core_cmd.cpp:

Go to the source code of this file.

Functions

void handle_cmd_line (int ac, const char *const av[], Sim_Param &sim)
 parse command line arguments More...
 

Detailed Description

command line arguments manipulation

Author
Michal Vrastil
Date
2018-07-11

Definition in file core_cmd.cpp.

Function Documentation

void handle_cmd_line ( int  ac,
const char *const  av[],
Sim_Param sim 
)

parse command line arguments

PUBLIC FUNCTIONS DEFINITIONS *

Definition at line 24 of file core_cmd.cpp.

References Comp_App::AA, ccl_configuration::baryons_power_spectrum_method, Chi_Opt::beta, Out_Opt::bins_per_decade, Sim_Param::box_opt, Box_Opt::box_size, Comp_App::chi, Comp_App::chi_ff, Sim_Param::chi_opt, Test_Opt::coarse_sweeps, Sim_Param::comp_app, Cosmo_Param::config, Sim_Param::cosmo, Catch::cout(), Integ_Opt::db, Comp_App::FF, Test_Opt::fine_sweeps, Comp_App::FP, Comp_App::FP_pp, Cosmo_Param::H0, Sim_Param::integ_opt, Cosmo_Param::k2_G, Chi_Opt::linear, ccl_configuration::mass_function_method, ccl_configuration::matter_power_spectrum_method, Test_Opt::max_steps, Box_Opt::mesh_num, Box_Opt::mesh_num_pwr, Run_Opt::mlt_runs, Chi_Opt::n, Test_Opt::N_grid, Test_Opt::N_min, Cosmo_Param::ns, Run_Opt::nt, Run_Opt::nt_fftw, Cosmo_Param::Omega_b, Cosmo_Param::Omega_m, Out_Opt::out_dir, Sim_Param::out_opt, Run_Opt::pair, Box_Opt::par_num_1d, Chi_Opt::phi, Comp_App::PM, Out_Opt::points_per_10_Mpc, Out_Opt::print_corr, Out_Opt::print_dens, Out_Opt::print_every, Out_Opt::print_extrap_pwr, Out_Opt::print_par_pos, Out_Opt::print_pwr, Out_Opt::print_vel_pwr, PROJECT, PROJECT_VERSION, Test_Opt::R_sphere, Sim_Param::reset(), Test_Opt::rho_sphere, Sim_Param::run_opt, Run_Opt::seed, Cosmo_Param::sigma8, sqrt(), Test_Opt::step_per_iter, Sim_Param::test_opt, ccl_configuration::transfer_function_method, Comp_App::TZA, Test_Opt::verbose, Integ_Opt::z_in, Integ_Opt::z_out, and Comp_App::ZA.

Referenced by Sim_Param::Sim_Param().

24  {
25  std::string config_file;
26  bool no_run = false; // do not run approximations if '--help= or '--version' cmd option
27  unsigned int trans_func_cmd, matter_pwr_cmd, baryons_pwr_cmd, mass_func_cmd;
28  FTYPE_t k2_G;
29  // options ONLY on command line
30  po::options_description generic("Generic options");
31  generic.add_options()
32  ("help,h", "produce this help message")
33  ("config,c", po::value<std::string>(&config_file)->default_value("INPUT.cfg"), "configuration file name (optional)")
34  ("version,v", "print current version of the program")
35  ;
36 
37  // options both on command line and in configuration file
38  po::options_description config_mesh("Simulation box options");
39  config_mesh.add_options()
40  ("mesh_num,m", po::value<size_t>(&sim.box_opt.mesh_num)->default_value(128), "number of mesh cells per dimension (potential)")
41  ("mesh_num_pwr,M", po::value<size_t>(&sim.box_opt.mesh_num_pwr)->default_value(256), "number of mesh cells per dimension (power spectrum)")
42  ("par_num,p", po::value<size_t>(&sim.box_opt.par_num_1d)->default_value(128), "number of particles per dimension")
43  ("box_size,L", po::value<FTYPE_t>(&sim.box_opt.box_size)->default_value(512, "512"), "box size in units of Mpc/h")
44  ;
45 
46  po::options_description config_integ("Integration options");
47  config_integ.add_options()
48  ("redshift,z", po::value<FTYPE_t>(&sim.integ_opt.z_in)->default_value(200.), "redshift at the start of the simulation")
49  ("redshift_0,Z", po::value<FTYPE_t>(&sim.integ_opt.z_out)->default_value(10.), "redshift at the end of the simulation")
50  ("time_step,a", po::value<FTYPE_t>(&sim.integ_opt.db)->default_value(0.1, "0.1"), "dimensionless time-step (scale factor)")
51  ;
52 
53  po::options_description config_output("Output options");
54  config_output.add_options()
55  ("print_every", po::value<size_t>(&sim.out_opt.print_every)->default_value(1, "1"), "save particle positions and power spectrum "
56  "every n-th step, set 0 for no printing")
57  ("pwr_bins", po::value<size_t>(&sim.out_opt.bins_per_decade)->default_value(30), "number of bins per decade in power spectrum")
58  ("corr_pt", po::value<size_t>(&sim.out_opt.points_per_10_Mpc)->default_value(10), "number of points per 10 Mpc in correlation function")
59  ("out_dir,o", po::value<std::string>(&sim.out_opt.out_dir)->default_value("output/"), "output folder name")
60  ("print_par_pos", po::value<bool>(&sim.out_opt.print_par_pos)->default_value(false), "print particles positions")
61  ("print_dens", po::value<bool>(&sim.out_opt.print_dens)->default_value(false), "print density map and histogram")
62  ("print_pwr", po::value<bool>(&sim.out_opt.print_pwr)->default_value(false), "print power spectrum")
63  ("print_extrap_pwr", po::value<bool>(&sim.out_opt.print_extrap_pwr)->default_value(false), "print extrapolated power spectrum")
64  ("print_corr", po::value<bool>(&sim.out_opt.print_corr)->default_value(false), "print correlation function")
65  ("print_vel_pwr", po::value<bool>(&sim.out_opt.print_vel_pwr)->default_value(false), "print velocity power spectrum")
66  ;
67 
68  po::options_description config_app("Approximations");
69  config_app.add_options()
70  ("comp_ZA", po::value<bool>(&sim.comp_app.ZA)->default_value(false), "compute Zeldovich approximation")
71  ("comp_TZA", po::value<bool>(&sim.comp_app.TZA)->default_value(false), "compute Truncated Zeldovich approximation")
72  ("comp_FF", po::value<bool>(&sim.comp_app.FF)->default_value(false), "compute Frozen-flow approximation")
73  ("comp_FP", po::value<bool>(&sim.comp_app.FP)->default_value(false), "compute Frozen-potential approximation")
74  ("comp_PM", po::value<bool>(&sim.comp_app.PM)->default_value(false), "compute Particle-mesh approximation")
75  ("comp_AA", po::value<bool>(&sim.comp_app.AA)->default_value(false), "compute Adhesion approximation")
76  ("comp_FP_pp", po::value<bool>(&sim.comp_app.FP_pp)->default_value(false),
77  "compute Frozen-potential approximation (particle-particle interaction)")
78  ;
79 
80  po::options_description config_power("Cosmological parameters");
81  config_power.add_options()
82  ("Omega_b,B", po::value<FTYPE_t>(&sim.cosmo.Omega_b)->default_value(0.05, "0.05"), "density of baryons relative to the critical density")
83  ("Omega_m,C", po::value<FTYPE_t>(&sim.cosmo.Omega_m)->default_value(0.25, "0.25"), "density of CDM relative to the critical density")
84  ("Hubble,H", po::value<FTYPE_t>(&sim.cosmo.H0)->default_value(67, "67"), "Hubble constant in units of km/s/Mpc")
85  ("transfer_function", po::value<unsigned int>(&trans_func_cmd)->default_value(3), "transfer function type")
86  ("matter_power_spectrum", po::value<unsigned int>(&matter_pwr_cmd)->default_value(1), "matter power spectrum type")
87  ("baryons_power_spectrum", po::value<unsigned int>(&baryons_pwr_cmd)->default_value(0), "baryons power spectrum type")
88  ("mass_function", po::value<unsigned int>(&mass_func_cmd)->default_value(2), "mass function type")
89  ("n_s,n", po::value<FTYPE_t>(&sim.cosmo.ns)->default_value(1.), "spectral index of the scale-free power spectrum")
90  ("sigma8,s", po::value<FTYPE_t>(&sim.cosmo.sigma8)->default_value(1.), "normalization of the power spectrum at R = 8 Mpc/h")
91  ("smoothing_k,k", po::value<FTYPE_t>(&k2_G)->default_value(0.),
92  "smoothing wavenumber of TZA in units of h/Mpc, set 0 for ZA")
93  ;
94 
95  po::options_description config_run("Run options");
96  config_run.add_options()
97  ("num_thread,t", po::value<size_t>(&sim.run_opt.nt)->default_value(0), "number of threads the program will use, set 0 for max. available")
98  ("num_thread_fftw", po::value<size_t>(&sim.run_opt.nt_fftw)->default_value(0), "number of threads the program will use for FFTW, set 0 for max. available")
99  ("seed", po::value<size_t>(&sim.run_opt.seed)->default_value(0), "seed to random number generator, use 0 for random")
100  ("pair", po::value<bool>(&sim.run_opt.pair)->default_value(false), "if true run two simulations with opposite phases of random field")
101  ("mlt_runs", po::value<size_t>(&sim.run_opt.mlt_runs)->default_value(1), "how many runs should be simulated (only if seed = 0)")
102  ;
103 
104  po::options_description mod_grav("Modified Gravities");
105  mod_grav.add_options()
106  ("comp_chi", po::value<bool>(&sim.comp_app.chi)->default_value(false), "compute chameleon gravity (frozen-potential)")
107  ("comp_chi_ff", po::value<bool>(&sim.comp_app.chi_ff)->default_value(false), "compute chameleon gravity (frozen-flow)")
108  ;
109 
110  po::options_description config_cham("Chameleon parameters");
111  config_cham.add_options()
112  ("chi_beta", po::value<FTYPE_t>(&sim.chi_opt.beta)->default_value(1/sqrt(6), "(1/6)^1/2"), "coupling constant")
113  ("chi_n", po::value<FTYPE_t>(&sim.chi_opt.n)->default_value(0.5, "1/2"), "chameleon power-law potential exponent,\n0 < n < 1")
114  ("chi_phi", po::value<FTYPE_t>(&sim.chi_opt.phi)->default_value(1E-6, "1E-6"), "screening potential")
115  ("comp_chi_lin", po::value<bool>(&sim.chi_opt.linear)->default_value(false), "use only linear prediction in k-space")
116  ;
117  mod_grav.add(config_cham);
118 
119  po::options_description config_test("Test options");
120  config_test.add_options()
121  ("R_sphere", po::value<FTYPE_t>(&sim.test_opt.R_sphere)->default_value(1., "3.0"), "radius of a sphere sitting in a vacuum")
122  ("rho_sphere", po::value<FTYPE_t>(&sim.test_opt.rho_sphere)->default_value(2.7, "1.0"), "density of a sphere sitting in a vacuum")
123  ("N_grid", po::value<size_t>(&sim.test_opt.N_grid)->default_value(64, "64"), "finest grid size")
124  ("N_min", po::value<size_t>(&sim.test_opt.N_min)->default_value(2, "2"), "coarsest grid size")
125  ("step_per_iter", po::value<size_t>(&sim.test_opt.step_per_iter)->default_value(5, "5"), "print chameleon results after X steps")
126  ("fine_sweeps", po::value<size_t>(&sim.test_opt.fine_sweeps)->default_value(3, "3"), "number of sweeps on fine grid")
127  ("coarse_sweeps", po::value<size_t>(&sim.test_opt.coarse_sweeps)->default_value(3, "3"), "number of sweeps on coarse grids")
128  ("max_steps", po::value<size_t>(&sim.test_opt.max_steps)->default_value(1, "1"), "max number of V-cycles")
129  ("verbose", po::value<bool>(&sim.test_opt.verbose)->default_value(true, "true"), "verbosity")
130  ;
131 
132 
133  po::options_description cmdline_options("\n" PROJECT " v" PROJECT_VERSION);//< store all normal parameters
134  cmdline_options.add(generic).add(config_mesh).add(config_power).add(config_integ);
135  cmdline_options.add(config_output).add(config_app).add(config_run);
136  cmdline_options.add(mod_grav);
137 
138  config_test.add(cmdline_options);//< union of test parameters and normaln ones
139  po::variables_map vm;
140  //po::store(po::command_line_parser(ac, av).options(config_test).run(), vm);
141  po::store(po::parse_command_line(ac, av, config_test), vm);
142  po::notify(vm);
143 
144  if (vm.count("help")) {
145  std::cout << std::setprecision(3) << cmdline_options;
146  no_run = true;
147  }
148  else if (vm.count("version")) {
149  std::cout << PROJECT " v" PROJECT_VERSION "\n";
150  no_run = true;
151  }
152  else if (vm.count("config")) {
153  std::ifstream ifs(config_file.c_str());
154  if (ifs){
155  BOOST_LOG_TRIVIAL(debug) << "Using configuration options defined in file " << config_file << " (given command line options have higher priority).";
156  po::store(po::parse_config_file(ifs, config_test), vm);
157  // po::store(po::parse_config_file(ifs, cmdline_options), vm);
158  notify(vm);
159  } else{
160  BOOST_LOG_TRIVIAL(warning) << "Cannot open config file '" << config_file << "'. Using default and command lines values.";
161  }
162  }
163 
164  if (no_run) sim.reset();
165 
166  // !!!>>> THIS NEEDS TO BE AFTER ALL CALLS TO NOTIFY() <<<!!!
167  sim.cosmo.config.transfer_function_method = static_cast<transfer_function_t>(trans_func_cmd);
168  sim.cosmo.config.matter_power_spectrum_method = static_cast<matter_power_spectrum_t>(matter_pwr_cmd);
169  sim.cosmo.config.baryons_power_spectrum_method = static_cast<baryons_power_spectrum_t>(baryons_pwr_cmd);
170  sim.cosmo.config.mass_function_method = static_cast<mass_function_t>(mass_func_cmd);
171  sim.cosmo.k2_G = k2_G*k2_G;
172  sim.comp_app.TZA &= bool(sim.cosmo.k2_G);
173 }
Chi_Opt chi_opt
Definition: params.hpp:210
bool print_pwr
Definition: params.hpp:87
double box_size
Definition: params.hpp:59
bool TZA
Definition: params.hpp:100
#define PROJECT
Definition: config.h:3
Box_Opt box_opt
Definition: params.hpp:202
#define PROJECT_VERSION
Definition: config.h:4
mass_function_t
Definition: ccl_config.h:73
matter_power_spectrum_t matter_power_spectrum_method
Definition: ccl_config.h:112
size_t mesh_num_pwr
Definition: params.hpp:58
Comp_App comp_app
Definition: params.hpp:205
ccl_configuration config
Definition: params.hpp:31
size_t points_per_10_Mpc
Definition: params.hpp:85
double z_in
Definition: params.hpp:72
size_t nt_fftw
Definition: params.hpp:134
size_t step_per_iter
Definition: params.hpp:149
size_t mlt_runs
Definition: params.hpp:134
double R_sphere
Definition: params.hpp:148
bool linear
Definition: params.hpp:186
double Omega_b
Definition: params.hpp:36
double n
Definition: params.hpp:185
transfer_function_t
Definition: ccl_config.h:16
bool print_dens
Definition: params.hpp:87
transfer_function_t transfer_function_method
Definition: ccl_config.h:111
void reset()
Definition: params.cpp:550
bool FF
Definition: params.hpp:100
size_t par_num_1d
Definition: params.hpp:58
std::ostream & cout()
double rho_sphere
Definition: params.hpp:148
Cosmo_Param cosmo
Definition: params.hpp:206
bool pair
Definition: params.hpp:136
bool print_corr
Definition: params.hpp:87
double H0
Definition: params.hpp:36
bool FP_pp
Definition: params.hpp:100
Grid< NDIM, T > sqrt(Grid< NDIM, T > lhs)
Definition: grid.h:231
bool chi_ff
Definition: params.hpp:102
Test_Opt test_opt
Definition: params.hpp:211
Integ_Opt integ_opt
Definition: params.hpp:203
matter_power_spectrum_t
Definition: ccl_config.h:41
Out_Opt out_opt
Definition: params.hpp:204
bool FP
Definition: params.hpp:100
size_t coarse_sweeps
Definition: params.hpp:149
size_t print_every
Definition: params.hpp:85
size_t nt
Definition: params.hpp:134
double z_out
Definition: params.hpp:72
double db
cmd args
Definition: params.hpp:72
bool PM
Definition: params.hpp:101
baryons_power_spectrum_t baryons_power_spectrum_method
Definition: ccl_config.h:113
double k2_G
Definition: params.hpp:35
bool ZA
Definition: params.hpp:100
size_t seed
Definition: params.hpp:135
double ns
Definition: params.hpp:35
Run_Opt run_opt
Definition: params.hpp:208
size_t N_grid
Definition: params.hpp:150
size_t bins_per_decade
Definition: params.hpp:85
mass_function_t mass_function_method
Definition: ccl_config.h:114
double Omega_m
Definition: params.hpp:36
bool chi
Definition: params.hpp:102
bool print_vel_pwr
Definition: params.hpp:87
bool AA
Definition: params.hpp:100
double phi
Definition: params.hpp:185
size_t mesh_num
Definition: params.hpp:58
std::string out_dir
Definition: params.hpp:86
bool print_extrap_pwr
Definition: params.hpp:87
size_t fine_sweeps
Definition: params.hpp:149
size_t N_min
Definition: params.hpp:150
double beta
Definition: params.hpp:185
double sigma8
Definition: params.hpp:35
baryons_power_spectrum_t
Definition: ccl_config.h:58
bool verbose
Definition: params.hpp:151
bool print_par_pos
Definition: params.hpp:87
size_t max_steps
Definition: params.hpp:149