From 9b34875aa5a6f5d25835833ba581b23e2f7a67f9 Mon Sep 17 00:00:00 2001 From: Oliver Hahn Date: Fri, 17 Aug 2012 17:38:35 -0700 Subject: [PATCH] added change of endianness to data arrays in ART plugin, header etc. still need to be adjusted --- plugins/output_art.cc | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/plugins/output_art.cc b/plugins/output_art.cc index f671216..cc742b3 100644 --- a/plugins/output_art.cc +++ b/plugins/output_art.cc @@ -15,11 +15,24 @@ #include "output.hh" +template +inline T bytereorder(T v ) +{ + T rval; + (reinterpret_cast(&rval))[3] = (reinterpret_cast(&v))[0]; + (reinterpret_cast(&rval))[2] = (reinterpret_cast(&v))[1]; + (reinterpret_cast(&rval))[1] = (reinterpret_cast(&v))[2]; + (reinterpret_cast(&rval))[0] = (reinterpret_cast(&v))[3]; + return rval; +} + + template< typename T_store=float > class art_output_plugin : public output_plugin { public: bool do_baryons_; + bool swap_endianness_; double omegab_, omegam_; double gamma_; double astart_; @@ -209,6 +222,16 @@ protected: ofs.close(); LOGINFO("ART : done writing pt file."); } + + + void adjust_buf_endianness( T_store* buf ) + { + if( swap_endianness_ ) + { + for( size_t i=0; i( buf[i] ); + } + } /* The direct format write the particle data in pages. Each page of particles is read into a common block, @@ -277,6 +300,14 @@ protected: ifs_vy.read( reinterpret_cast(&tmp5[0]), n2read*sizeof(T_store) ); ifs_vz.read( reinterpret_cast(&tmp6[0]), n2read*sizeof(T_store) ); ifs_m.read( reinterpret_cast(&tmp7[0]), n2read*sizeof(T_store) ); + + adjust_buf_endianness( tmp1 ); + adjust_buf_endianness( tmp2 ); + adjust_buf_endianness( tmp3 ); + adjust_buf_endianness( tmp4 ); + adjust_buf_endianness( tmp5 ); + adjust_buf_endianness( tmp6 ); + adjust_buf_endianness( tmp7 ); ofs.write( reinterpret_cast(&tmp1[0]), n2read*sizeof(T_store) ); ofs.write( reinterpret_cast(&tmp2[0]), n2read*sizeof(T_store) ); @@ -344,6 +375,9 @@ public: omegam_ = cf.getValue("cosmology","Omega_m"); zstart_ = cf.getValue("setup","zstart"); astart_ = 1.0/(1.0+zstart_); + + + swap_endianness_ = cf.getValueSafe("output","art_swap_endian"); int levelmin = cf.getValue("setup","levelmin"); int levelmax = cf.getValue("setup","levelmax");