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

restored compatibility with old realspace transfer function scheme

This commit is contained in:
Oliver Hahn 2013-11-13 01:40:42 +01:00
parent f14552e106
commit c8619e13e3
3 changed files with 43 additions and 33 deletions

View file

@ -490,7 +490,7 @@ namespace convolution{
return eval_split_recurse( tfr, xmid, dx, prevval, nsplit );
}
#define OLD_KERNEL_SAMPLING
#define OLD_KERNEL_SAMPLING
template< typename real_t >
void kernel_real_cached<real_t>::precompute_kernel( transfer_function* ptf, tf_type type, const refinement_hierarchy& refh )
@ -1095,7 +1095,9 @@ namespace convolution{
}
}
/* LOGUSER("Averaging fine kernel to coarse kernel...");
#ifdef OLD_KERNEL_SAMPLING
LOGUSER("Averaging fine kernel to coarse kernel...");
//... copy averaged and convolved fine kernel to coarse kernel
#pragma omp parallel for
@ -1132,7 +1134,8 @@ namespace convolution{
}
*/
#endif // OLD_KERNEL_SAMPLING
sprintf(cachefname,"temp_kernel_level%03d.tmp",ilevel);
LOGUSER("Storing kernel in temp file \'%s\'.",cachefname);
fp = fopen(cachefname,"w+");

View file

@ -17,9 +17,11 @@
//TODO: this should be a larger number by default, just to maintain consistency with old default
#define DEF_RAN_CUBE_SIZE 32
double blend_sharpness = 0.333;
double Blend_Function( double k, double kmax )
{
double const eps = 0.333;
double const eps = blend_sharpness; // this is a global variable
return -0.5*(tanh((fabs(k)-kmax)/eps)-1.0f);
}
@ -427,6 +429,8 @@ void GenerateDensityHierarchy( config_file& cf, transfer_function *ptf, tf_type
levelmin = cf.getValueSafe<unsigned>("setup","levelmin_TF",levelminPoisson);
levelmax = cf.getValue<unsigned>("setup","levelmax");
kspaceTF = cf.getValueSafe<bool>("setup", "kspace_TF", false);
blend_sharpness = cf.getValueSafe<double>("setup","kspace_filter",0.333);
unsigned nbase = 1<<levelmin;
@ -679,8 +683,8 @@ void GenerateDensityHierarchy( config_file& cf, transfer_function *ptf, tf_type
*coarse = coarse_save;
coarse->subtract_oct_mean();
convolution::perform<real_t>( the_tf_kernel, reinterpret_cast<void*> (coarse->get_data_ptr()), shift );
//coarse->subtract_mean();
//coarse->upload_bnd_add( *delta.get_grid(levelmin+i-1) );
coarse->subtract_mean();
coarse->upload_bnd_add( *delta.get_grid(levelmin+i-1) );
//... clean up
the_tf_kernel->deallocate();
@ -729,10 +733,10 @@ void GenerateDensityHierarchy( config_file& cf, transfer_function *ptf, tf_type
the_tf_kernel->deallocate();
//coarse->subtract_mean();
coarse->subtract_mean();
//... upload data to coarser grid
//coarse->upload_bnd_add( *delta.get_grid(levelmax-1) );
coarse->upload_bnd_add( *delta.get_grid(levelmax-1) );
delete coarse;
}

View file

@ -1563,7 +1563,8 @@ template< typename rng, typename T >
void random_number_generator<rng,T>::compute_random_numbers( void )
{
bool kavg = pcf_->getValueSafe<bool>("random","kaveraging",true);
bool rndsign = pcf_->getValueSafe<bool>("random","grafic_sign",false);
bool rndsign = pcf_->getValueSafe<bool>("random","grafic_sign",false);
bool brealspace_tf = !pcf_->getValue<bool>("setup","kspace_tf");
std::vector< rng* > randc(std::max(levelmax_,levelmin_seed_)+1,(rng*)NULL);
@ -1595,28 +1596,27 @@ void random_number_generator<rng,T>::compute_random_numbers( void )
//... seeds are given for a level finer than levelmin, obtain by averaging
if( levelmin_seed_ > levelmin_ )
{
if( rngfnames_[levelmin_seed_].size() > 0 )
if( rngfnames_[levelmin_seed_].size() > 0 )
randc[levelmin_seed_] = new rng( 1<<levelmin_seed_, rngfnames_[levelmin_seed_], rndsign );
else
else
randc[levelmin_seed_] = new rng( 1<<levelmin_seed_, ran_cube_size_, rngseeds_[levelmin_seed_], true );//, x0, lx );
for( int ilevel = levelmin_seed_-1; ilevel >= (int)levelmin_; --ilevel ){
if( rngseeds_[ilevel-levelmin_] > 0 )
LOGINFO("Warning: random seed for level %d will be ignored.\n" \
" consistency requires that it is obtained by restriction from level %d", ilevel, levelmin_seed_ );
if( ilevel >= levelmax_ )
randc[ilevel] = new rng( *randc[ilevel+1], kavg );
else
randc[ilevel] = new rng( *randc[ilevel+1], kavg );
if( ilevel+1 > levelmax_ )
{
delete randc[ilevel+1];
randc[ilevel+1] = NULL;
}
}
for( int ilevel = levelmin_seed_-1; ilevel >= (int)levelmin_; --ilevel ){
if( rngseeds_[ilevel-levelmin_] > 0 )
LOGINFO("Warning: random seed for level %d will be ignored.\n" \
" consistency requires that it is obtained by restriction from level %d", ilevel, levelmin_seed_ );
if( brealspace_tf && ilevel < levelmax_ )
randc[ilevel] = new rng( *randc[ilevel+1], false );
else // do k-space averaging
randc[ilevel] = new rng( *randc[ilevel+1], kavg );
if( ilevel+1 > levelmax_ )
{
delete randc[ilevel+1];
randc[ilevel+1] = NULL;
}
}
}
@ -1682,11 +1682,14 @@ void random_number_generator<rng,T>::compute_random_numbers( void )
delete randc[levelmax_];
randc[levelmax_] = NULL;
//... make sure that the coarse grid contains oct averages where it overlaps with a fine grid
//... this also ensures that constraints enforced on fine grids are carried to the coarser grids
//for( int ilevel=levelmax_; ilevel>levelmin_; --ilevel )
// correct_avg( ilevel-1, ilevel );
//... make sure that the coarse grid contains oct averages where it overlaps with a fine grid
//... this also ensures that constraints enforced on fine grids are carried to the coarser grids
if( brealspace_tf )
{
for( int ilevel=levelmax_; ilevel>levelmin_; --ilevel )
correct_avg( ilevel-1, ilevel );
}
//.. we do not have random numbers for a coarse level, generate them
/*if( levelmax_rand_ >= (int)levelmin_ )
{