From 34ed04686523ecdafb96c6cdff379df176cf1984 Mon Sep 17 00:00:00 2001 From: Aaron LI Date: Sat, 28 May 2016 09:40:25 +0800 Subject: Add astro/cosmo_calc from "chandra-acis-analysis" --- astro/cosmo_calc/main.cc | 140 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 astro/cosmo_calc/main.cc (limited to 'astro/cosmo_calc/main.cc') diff --git a/astro/cosmo_calc/main.cc b/astro/cosmo_calc/main.cc new file mode 100644 index 0000000..bbd73ba --- /dev/null +++ b/astro/cosmo_calc/main.cc @@ -0,0 +1,140 @@ +// +// simple `cosmology calculator' +// can calc commonly used cosmology distances: +// hubble distance +// comoving distance +// transverse comoving distance +// angular diameter distance +// luminoisity distance +// light-travel distance +// in addition, this calculator also calc some other +// useful infomation related with Chandra +// +// Junhua Gu +// +// Modified by: LIweitiaNux +// +// ChangeLogs: +// v2.1, 2012/08/12, LIweitiaNux +// improve cmdline parameters +// v2.2, 2013/02/09, LIweitiaNux +// add 'hubble_parameter E(z)' +// modify output format +// + + +#include "calc_distance.h" +#include "ddivid.h" +#include +#include +#include +#include + +using namespace std; + +// extern variables in `calc_distance.h' +extern double cm; +extern double s; +extern double km; +extern double Mpc; +extern double kpc; +extern double yr; +extern double Gyr; +extern double H0; // units: [km/s/Mpc] +extern double c; +extern double omega_m; +extern double omega_l; +extern double omega_k; +extern double arcsec2arc_ratio; + +// README, ABOUT +static char DESC[] = "simple cosmology calculator"; +static char VER[] = "v2.2, 2013-02-09"; + +// setting parameters +static double PI = 4*atan(1.0); +// chandra related +static double arcsec_per_pixel = 0.492; +// above cosmology paramters can also be changed +// through cmdline paramters + +// functions +void usage(const char *name); + +////////////////////////////////////////////// +// main part +////////////////////////////////////////////// +int main(int argc,char* argv[]) +{ + double z; // given redshift + + // cmdline parameters + if (argc == 2) { + // get input redshift + z = atof(argv[1]); + } + else if (argc == 3) { + z = atof(argv[1]); + // use specified `H0' + H0 = atof(argv[2]); + } + else if (argc == 4) { + z = atof(argv[1]); + H0 = atof(argv[2]); + // get specified `Omega_M' + omega_m = atof(argv[3]); + omega_l = 1.0-omega_m; + } + else { + usage(argv[0]); + exit(-1); + } + + // calc `Hubble parameter E(z)' + double E_z = E(z); + // calc `comoving distance' + double d_C = calc_comoving_distance(z); + // calc `angular diameter distance' + double d_A = calc_angdia_distance(z); + // calc `luminoisity distance' + double d_L = calc_luminosity_distance(z); + + // output results + // parameters + printf("Parameters:\n"); + printf(" z= %lf, H0= %lf, Omega_M= %lf, Omega_L= %lf\n", + z, H0, omega_m, omega_l); + printf("Distances:\n"); + printf(" Comoving_distance: D_C(%lf)= %lg [cm], %lf [Mpc]\n", + z, d_C, d_C/Mpc); + printf(" Angular_diameter_distance: D_A(%lf)= %lg [cm], %lf [Mpc]\n", + z, d_A, d_A/Mpc); + printf(" Luminoisity_distance: D_L(%lf)= %lg [cm], %lf [Mpc]\n", + z, d_L, d_L/Mpc); + printf("Chandra_related:\n"); + printf(" kpc/pixel (D_A): %lf\n", + (d_A / kpc * arcsec_per_pixel* arcsec2arc_ratio)); + printf(" cm/pixel (D_A): %lg\n", + (d_A * arcsec_per_pixel* arcsec2arc_ratio)); + printf("Other_data:\n"); + printf(" Hubble_parameter: E(%lf)= %lf\n", z, E_z); + printf(" kpc/arcsec (D_A): %lf\n", (d_A / kpc * arcsec2arc_ratio)); + printf(" norm (cooling_function): %lg\n", + (1e-14 / (4.0 * PI * pow(d_A*(1+z), 2)))); + + //cout<