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

command line arguments manipulation More...

This graph shows which files directly or indirectly include this file:

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.h.

Function Documentation

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

parse command line arguments

Take command line arguments and store parameters in sim. If config file is specified in arguments (or the default one is present), parse also this file.

Parameters
acnumber of command line arguments
avcommand line arguments
simwhere to store simulation parameters

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