1
0
Fork 0
mirror of https://github.com/cosmo-sims/MUSIC.git synced 2024-09-19 17:03:46 +02:00
MUSIC/general.hh
2010-07-02 11:49:30 -07:00

121 lines
2.7 KiB
C++

/*
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 <http://www.gnu.org/licenses/>.
*/
#ifndef __GENERAL_HH
#define __GENERAL_HH
#include <omp.h>
#ifdef WITH_MPI
#ifdef MANNO
#include <mpi.h>
#else
#include <mpi++.h>
#endif
#else
#include <time.h>
#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 <vector>
#include "mesh.hh"
typedef GridHierarchy<real_t> grid_hierarchy;
typedef MeshvarBnd<real_t> meshvar_bnd;
typedef Meshvar<real_t> 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<unsigned> 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