1
0
Fork 0
mirror of https://github.com/cosmo-sims/MUSIC.git synced 2024-09-19 17:03:46 +02:00

density coarsening is done using spectral sampling if spectral sampling of the transfer function is used, otherwise block averaging is used

This commit is contained in:
Oliver Hahn 2013-11-26 19:25:29 +01:00
parent 0b4d49ec06
commit 7723c9b2a7
4 changed files with 27 additions and 20 deletions

View file

@ -942,19 +942,24 @@ void normalize_density( grid_hierarchy& delta )
}
}
void coarsen_density( const refinement_hierarchy& rh, GridHierarchy<real_t>& u )
void coarsen_density( const refinement_hierarchy& rh, GridHierarchy<real_t>& u, bool kspace )
{
unsigned levelmin_TF = u.levelmin();//rh.levelmin();
unsigned levelmin_TF = u.levelmin();
/*for( int i=rh.levelmax(); i>0; --i )
mg_straight().restrict( *(u.get_grid(i)), *(u.get_grid(i-1)) );*/
for( int i=levelmin_TF; i>0; --i )
fft_coarsen( *(u.get_grid(i)), *(u.get_grid(i-1)) );
//mg_straight().restrict( *(u.get_grid(i)), *(u.get_grid(i-1)) );
if( kspace )
{
for( int i=levelmin_TF; i>=(int)rh.levelmin(); --i )
fft_coarsen( *(u.get_grid(i)), *(u.get_grid(i-1)) );
}
else
{
for( int i=levelmin_TF; i>=(int)rh.levelmin(); --i )
mg_straight().restrict( *(u.get_grid(i)), *(u.get_grid(i-1)) );
}
//for( unsigned i=levelmin_TF+1; i<=rh.levelmax(); ++i )
for( unsigned i=1; i<=rh.levelmax(); ++i )
{
if( rh.offset(i,0) != u.get_grid(i)->offset(0)

View file

@ -1077,7 +1077,7 @@ inline void enforce_mean( M& v, M& V )
void coarsen_density( const refinement_hierarchy& rh, GridHierarchy<real_t>& u );
void coarsen_density( const refinement_hierarchy& rh, GridHierarchy<real_t>& u, bool kspace );
#endif

24
main.cc
View file

@ -359,7 +359,9 @@ int main (int argc, const char * argv[])
cf.insertValue("setup","levelmin_TF",cf.getValue<std::string>("setup","levelmin"));
}
if( cf.getValueSafe<bool>( "setup", "kspace_TF", true ) )
bool bspectral_sampling;
if( bspectral_sampling = cf.getValueSafe<bool>( "setup", "kspace_TF", true ) )
LOGINFO("Using k-space sampled transfer functions...");
else
LOGINFO("Using real space sampled transfer functions...");
@ -598,7 +600,7 @@ int main (int argc, const char * argv[])
GenerateDensityHierarchy( cf, the_transfer_function_plugin, my_tf_type , rh_TF, rand, f, false, false );
coarsen_density(rh_Poisson, f);
coarsen_density(rh_Poisson, f, bspectral_sampling);
f.add_refinement_mask( rh_Poisson.get_coord_shift() );
normalize_density(f);
@ -657,7 +659,7 @@ int main (int argc, const char * argv[])
std::cout << "-------------------------------------------------------------\n";
LOGUSER("Computing baryon density...");
GenerateDensityHierarchy( cf, the_transfer_function_plugin, baryon , rh_TF, rand, f, false, bbshift );
coarsen_density(rh_Poisson, f);
coarsen_density(rh_Poisson, f, bspectral_sampling);
f.add_refinement_mask( rh_Poisson.get_coord_shift() );
normalize_density(f);
@ -730,7 +732,7 @@ int main (int argc, const char * argv[])
if( do_baryons )
{
GenerateDensityHierarchy( cf, the_transfer_function_plugin, total , rh_TF, rand, f, false, false );
coarsen_density(rh_Poisson, f);
coarsen_density(rh_Poisson, f, bspectral_sampling);
f.add_refinement_mask( rh_Poisson.get_coord_shift() );
normalize_density(f);
@ -806,7 +808,7 @@ int main (int argc, const char * argv[])
//... we do baryons and have velocity transfer functions, or we do SPH and not to shift
//... do DM first
GenerateDensityHierarchy( cf, the_transfer_function_plugin, vcdm , rh_TF, rand, f, false, false );
coarsen_density(rh_Poisson, f);
coarsen_density(rh_Poisson, f, bspectral_sampling);
f.add_refinement_mask( rh_Poisson.get_coord_shift() );
normalize_density(f);
@ -869,7 +871,7 @@ int main (int argc, const char * argv[])
LOGUSER("Computing baryon velocitites...");
//... do baryons
GenerateDensityHierarchy( cf, the_transfer_function_plugin, vbaryon , rh_TF, rand, f, false, bbshift );
coarsen_density(rh_Poisson, f);
coarsen_density(rh_Poisson, f, bspectral_sampling);
f.add_refinement_mask( rh_Poisson.get_coord_shift() );
normalize_density(f);
@ -943,7 +945,7 @@ int main (int argc, const char * argv[])
GenerateDensityHierarchy( cf, the_transfer_function_plugin, my_tf_type , rh_TF, rand, f, false, false );
coarsen_density(rh_Poisson, f);
coarsen_density(rh_Poisson, f, bspectral_sampling);
f.add_refinement_mask( rh_Poisson.get_coord_shift() );
normalize_density(f);
@ -1077,7 +1079,7 @@ int main (int argc, const char * argv[])
LOGUSER("Computing baryon displacements...");
GenerateDensityHierarchy( cf, the_transfer_function_plugin, vbaryon , rh_TF, rand, f, false, bbshift );
coarsen_density(rh_Poisson, f);
coarsen_density(rh_Poisson, f, bspectral_sampling);
f.add_refinement_mask( rh_Poisson.get_coord_shift() );
normalize_density(f);
@ -1165,7 +1167,7 @@ int main (int argc, const char * argv[])
my_tf_type = total;
GenerateDensityHierarchy( cf, the_transfer_function_plugin, my_tf_type , rh_TF, rand, f, false, false );
coarsen_density(rh_Poisson, f);
coarsen_density(rh_Poisson, f, bspectral_sampling);
f.add_refinement_mask( rh_Poisson.get_coord_shift() );
normalize_density(f);
@ -1252,7 +1254,7 @@ int main (int argc, const char * argv[])
LOGUSER("Computing baryon density...");
GenerateDensityHierarchy( cf, the_transfer_function_plugin, baryon , rh_TF, rand, f, true, false );
coarsen_density(rh_Poisson, f);
coarsen_density(rh_Poisson, f, bspectral_sampling);
f.add_refinement_mask( rh_Poisson.get_coord_shift() );
normalize_density(f);
@ -1293,7 +1295,7 @@ int main (int argc, const char * argv[])
LOGUSER("Computing baryon displacements...");
GenerateDensityHierarchy( cf, the_transfer_function_plugin, baryon , rh_TF, rand, f, false, bbshift );
coarsen_density(rh_Poisson, f);
coarsen_density(rh_Poisson, f, bspectral_sampling);
f.add_refinement_mask( rh_Poisson.get_coord_shift() );
normalize_density(f);

View file

@ -469,7 +469,7 @@ public:
LOGUSER("computing ellipsoid axes.....");
compute_axes();
}
float muold[3] = {mu[0],mu[1],mu[2]};
//float muold[3] = {mu[0],mu[1],mu[2]};
float munew[3];
for( int i=0; i<3; ++i )
munew[i] = sgn(mu[i])/sqr(1.0/sqrt(fabs(mu[i]))+dr);