/* general.hh - This file is part of MUSIC - a code to generate multi-scale initial conditions for cosmological simulations Copyright (C) 2010 Oliver Hahn This program is free software: you can redistribute it and/or modify it under the terms of the GNU 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 General Public License along with this program. If not, see . */ #ifndef __GENERAL_HH #define __GENERAL_HH #include "log.hh" #include #ifdef WITH_MPI #ifdef MANNO #include #else #include #endif #else #include #endif #ifdef SINGLE_PRECISION #ifdef WITH_MPI #include "srfftw_mpi.h" #define MPI_TREAL MPI_FLOAT #else #include "srfftw.h" #endif typedef float real_t; #else #ifdef WITH_MPI #include "drfftw_mpi.h" #define MPI_TREAL MPI_DOUBLE #else #include "drfftw.h" #endif typedef double real_t; #endif #include #include "mesh.hh" typedef GridHierarchy grid_hierarchy; typedef MeshvarBnd meshvar_bnd; typedef Meshvar meshvar; /* Convenience from Numerical Recipes in C, 2nd edition */ template< typename T > inline T SQR( T a ){ return a*a; } template< typename T > inline T CUBE( T a ){ return a*a*a; } template< typename T > inline T POW4( T a ){ return a*a*a*a; } // --- structure for cosmological parameters --- // typedef struct cosmology{ double Omega_m, // baryon+dark matter density Omega_b, // baryon matter density Omega_L, // dark energy density H0, // Hubble constant nspect, // long-wave spectral index (scale free is nspect=1) sigma8, // power spectrum normalization //Gamma, // shape parameter (of historical interest, as a free parameter) //fnl, // non-gaussian contribution parameter //w0, // dark energy equation of state parameter (not implemented, i.e. =1 at the moment) //wa, // dark energy equation of state parameter (not implemented, i.e. =1 at the moment) dplus, pnorm, vfact, WDMmass, WDMg_x, astart; // expansion factor a for which to generate initial conditions }Cosmology; typedef struct { unsigned levelmin, levelmax; double boxlength; std::vector offx,offy,offz,llx,lly,llz; }Parameters; inline double time_seconds( void ) { #ifdef WITH_MPI return MPI_Wtime(); #else return ((double) clock()) / CLOCKS_PER_SEC; #endif } #endif