From a51296c172fb2b8553faa5c8ce558c2dd3aa7625 Mon Sep 17 00:00:00 2001 From: Oliver Hahn Date: Tue, 4 Sep 2012 15:19:16 +0200 Subject: [PATCH] added new parameter [random]/grafic_sign = yes|no, (default=no) to set the sign of the input white noise file consistent with grafic2 --- random.cc | 25 ++++++++++++++++++------- random.hh | 2 +- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/random.cc b/random.cc index 5b902ff..adb0f4f 100644 --- a/random.cc +++ b/random.cc @@ -53,7 +53,7 @@ random_numbers::random_numbers( unsigned res, unsigned cubesize, long basesee } template< typename T > -random_numbers::random_numbers( unsigned res, std::string randfname ) +random_numbers::random_numbers( unsigned res, std::string randfname, bool randsign ) : res_( res ), cubesize_( res ), ncubes_(1) { rnums_.push_back( new Meshvar( res, 0, 0, 0 ) ); @@ -66,6 +66,18 @@ random_numbers::random_numbers( unsigned res, std::string randfname ) unsigned nx,ny,nz,blksz; int iseed; long seed; + + float sign4 = -1.0f; + double sign8 = -1.0; + + if( randsign ) // use grafic2 sign convention + { + sign4 = 1.0f; + sign8 = 1.0; + } + + + //ifs.read( (char*)&vartype, sizeof(unsigned) ); //... read header .../ @@ -128,7 +140,7 @@ random_numbers::random_numbers( unsigned res, std::string randfname ) sum2 += in_float[q]*in_float[q]; ++count; - (*rnums_[0])(kk,jj,ii) = -in_float[q++]; + (*rnums_[0])(kk,jj,ii) = sign4 * in_float[q++]; } ifs.read( reinterpret_cast (&blksz), sizeof(int) ); if( blksz != nx*ny*sizeof(float) ) @@ -153,7 +165,7 @@ random_numbers::random_numbers( unsigned res, std::string randfname ) sum += in_double[q]; sum2 += in_double[q]*in_double[q]; ++count; - (*rnums_[0])(kk,jj,ii) = -in_double[q++]; + (*rnums_[0])(kk,jj,ii) = sign8 * in_double[q++]; } ifs.read( reinterpret_cast (&blksz), sizeof(int) ); if( blksz != nx*ny*sizeof(double) ) @@ -1062,6 +1074,7 @@ template< typename rng, typename T > void random_number_generator::compute_random_numbers( void ) { bool kavg = pcf_->getValueSafe("random","kaveraging",true); + bool rndsign = pcf_->getValueSafe("random","grafic_sign",false); std::vector< rng* > randc(std::max(levelmax_,levelmin_seed_)+1,(rng*)NULL); @@ -1072,7 +1085,7 @@ void random_number_generator::compute_random_numbers( void ) { if( rngfnames_[levelmin_seed_].size() > 0 ) randc[levelmin_seed_] - = new rng( 1<::compute_random_numbers( void ) << " consistency requires that it is obtained by restriction from level " << levelmin_seed_ << std::endl; - - //if( levelmin_ == levelmax_ ) if( ilevel >= levelmax_ ) randc[ilevel] = new rng( *randc[ilevel+1], kavg ); else @@ -1119,7 +1130,7 @@ void random_number_generator::compute_random_numbers( void ) if( randc[levelmin_] == NULL ) { if( rngfnames_[levelmin_].size() > 0 ) - randc[levelmin_] = new rng( 1<