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

Gadget plugin: Fixed an overflow bug when using more than 2048**3 particles and baryons.

This commit is contained in:
Oliver Hahn 2011-09-06 17:08:36 -07:00
parent cfc16f509d
commit 06d1f88aa2

View file

@ -273,13 +273,13 @@ protected:
size_t npleft = npcoarse; size_t npleft = npcoarse;
size_t n2read = std::min((size_t)block_buf_size_,npleft); size_t n2read = std::min((size_t)block_buf_size_,npleft);
while( n2read > 0 ) while( n2read > 0ul )
{ {
std::streampos sp = iffs1.tellg(); std::streampos sp = iffs1.tellg();
iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) ); iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) );
iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) ); iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) );
for( unsigned i=0; i<n2read; ++i ) for( size_t i=0; i<n2read; ++i )
{ {
tmp1[i] = facc*tmp1[i] + facb*tmp2[i]; tmp1[i] = facc*tmp1[i] + facb*tmp2[i];
} }
@ -305,13 +305,13 @@ protected:
npleft = npcoarse; npleft = npcoarse;
n2read = std::min( (size_t)block_buf_size_,npleft); n2read = std::min( (size_t)block_buf_size_,npleft);
while( n2read > 0 ) while( n2read > 0ul )
{ {
std::streampos sp = iffs1.tellg(); std::streampos sp = iffs1.tellg();
iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) ); iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) );
iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) ); iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) );
for( unsigned i=0; i<n2read; ++i ) for( size_t i=0; i<n2read; ++i )
{ {
tmp1[i] = facc*tmp1[i] + facb*tmp2[i]; tmp1[i] = facc*tmp1[i] + facb*tmp2[i];
} }
@ -362,9 +362,10 @@ protected:
pistream iffs1, iffs2, iffs3; pistream iffs1, iffs2, iffs3;
const size_t const size_t
nptot = np_fine_gas_+np_fine_dm_+np_coarse_dm_,//header_.npart[0]+header_.npart[1]+header_.npart[5], nptot = np_fine_gas_+np_fine_dm_+np_coarse_dm_,
npgas = header_.npart[0], //npgas = np_fine_gas_,
npcdm = nptot-npgas; npcdm = np_fine_dm_+np_coarse_dm_;
size_t size_t
wrote_coarse = 0, wrote_coarse = 0,
wrote_gas = 0, wrote_gas = 0,
@ -419,7 +420,7 @@ protected:
bneed_long_ids = true; bneed_long_ids = true;
LOGWARN("Need long particle IDs, make sure to enable in Gadget!"); LOGWARN("Need long particle IDs, make sure to enable in Gadget!");
} }
for( unsigned ifile=0; ifile<nfiles_; ++ifile ) for( unsigned ifile=0; ifile<nfiles_; ++ifile )
{ {
@ -450,10 +451,10 @@ protected:
//... particle positions .................................................. //... particle positions ..................................................
blksize = 3*np_this_file*sizeof(T_store); blksize = 3ul*np_this_file*sizeof(T_store);
ofs_.write( (char *)&blksize, sizeof(int) ); ofs_.write( (char *)&blksize, sizeof(int) );
if( bbaryons && nfgas_per_file[ifile] > 0 ) if( bbaryons && nfgas_per_file[ifile] > 0ul )
{ {
iffs1.open( fnbx, npcdm, wrote_gas*sizeof(T_store) ); iffs1.open( fnbx, npcdm, wrote_gas*sizeof(T_store) );
@ -462,13 +463,13 @@ protected:
npleft = nfgas_per_file[ifile]; npleft = nfgas_per_file[ifile];
n2read = std::min(curr_block_buf_size,npleft); n2read = std::min(curr_block_buf_size,npleft);
while( n2read > 0 ) while( n2read > 0ul )
{ {
iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) ); iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) );
iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) ); iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) );
iffs3.read( reinterpret_cast<char*>(&tmp3[0]), n2read*sizeof(T_store) ); iffs3.read( reinterpret_cast<char*>(&tmp3[0]), n2read*sizeof(T_store) );
for( unsigned i=0; i<n2read; ++i ) for( size_t i=0; i<n2read; ++i )
{ {
adata3.push_back( fmod(tmp1[i]+header_.BoxSize,header_.BoxSize) ); adata3.push_back( fmod(tmp1[i]+header_.BoxSize,header_.BoxSize) );
adata3.push_back( fmod(tmp2[i]+header_.BoxSize,header_.BoxSize) ); adata3.push_back( fmod(tmp2[i]+header_.BoxSize,header_.BoxSize) );
@ -494,13 +495,13 @@ protected:
iffs2.open( fny, npcdm, wrote_dm*sizeof(T_store) ); iffs2.open( fny, npcdm, wrote_dm*sizeof(T_store) );
iffs3.open( fnz, npcdm, wrote_dm*sizeof(T_store) ); iffs3.open( fnz, npcdm, wrote_dm*sizeof(T_store) );
while( n2read > 0 ) while( n2read > 0ul )
{ {
iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) ); iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) );
iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) ); iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) );
iffs3.read( reinterpret_cast<char*>(&tmp3[0]), n2read*sizeof(T_store) ); iffs3.read( reinterpret_cast<char*>(&tmp3[0]), n2read*sizeof(T_store) );
for( unsigned i=0; i<n2read; ++i ) for( size_t i=0; i<n2read; ++i )
{ {
adata3.push_back( fmod(tmp1[i]+header_.BoxSize,header_.BoxSize) ); adata3.push_back( fmod(tmp1[i]+header_.BoxSize,header_.BoxSize) );
adata3.push_back( fmod(tmp2[i]+header_.BoxSize,header_.BoxSize) ); adata3.push_back( fmod(tmp2[i]+header_.BoxSize,header_.BoxSize) );
@ -520,11 +521,11 @@ protected:
//... particle velocities .................................................. //... particle velocities ..................................................
blksize = 3*np_this_file*sizeof(T_store); blksize = 3ul*np_this_file*sizeof(T_store);
ofs_.write( reinterpret_cast<char*>(&blksize), sizeof(int) ); ofs_.write( reinterpret_cast<char*>(&blksize), sizeof(int) );
if( bbaryons && nfgas_per_file[ifile] > 0 ) if( bbaryons && nfgas_per_file[ifile] > 0ul )
{ {
iffs1.open( fnbvx, npcdm, wrote_gas*sizeof(T_store) ); iffs1.open( fnbvx, npcdm, wrote_gas*sizeof(T_store) );
iffs2.open( fnbvy, npcdm, wrote_gas*sizeof(T_store) ); iffs2.open( fnbvy, npcdm, wrote_gas*sizeof(T_store) );
@ -532,13 +533,13 @@ protected:
npleft = nfgas_per_file[ifile]; npleft = nfgas_per_file[ifile];
n2read = std::min(curr_block_buf_size,npleft); n2read = std::min(curr_block_buf_size,npleft);
while( n2read > 0 ) while( n2read > 0ul )
{ {
iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) ); iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) );
iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) ); iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) );
iffs3.read( reinterpret_cast<char*>(&tmp3[0]), n2read*sizeof(T_store) ); iffs3.read( reinterpret_cast<char*>(&tmp3[0]), n2read*sizeof(T_store) );
for( unsigned i=0; i<n2read; ++i ) for( size_t i=0; i<n2read; ++i )
{ {
adata3.push_back( tmp1[i] ); adata3.push_back( tmp1[i] );
adata3.push_back( tmp2[i] ); adata3.push_back( tmp2[i] );
@ -565,13 +566,13 @@ protected:
npleft = nfdm_per_file[ifile]+nc_per_file[ifile]; npleft = nfdm_per_file[ifile]+nc_per_file[ifile];
n2read = std::min(curr_block_buf_size,npleft); n2read = std::min(curr_block_buf_size,npleft);
while( n2read > 0 ) while( n2read > 0ul )
{ {
iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) ); iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) );
iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) ); iffs2.read( reinterpret_cast<char*>(&tmp2[0]), n2read*sizeof(T_store) );
iffs3.read( reinterpret_cast<char*>(&tmp3[0]), n2read*sizeof(T_store) ); iffs3.read( reinterpret_cast<char*>(&tmp3[0]), n2read*sizeof(T_store) );
for( unsigned i=0; i<n2read; ++i ) for( size_t i=0; i<n2read; ++i )
{ {
adata3.push_back( tmp1[i] ); adata3.push_back( tmp1[i] );
adata3.push_back( tmp2[i] ); adata3.push_back( tmp2[i] );
@ -609,15 +610,15 @@ protected:
//... generate contiguous IDs and store in file .. //... generate contiguous IDs and store in file ..
ofs_.write( reinterpret_cast<char*>(&blksize), sizeof(int) ); ofs_.write( reinterpret_cast<char*>(&blksize), sizeof(int) );
while( n2read > 0 ) while( n2read > 0ul )
{ {
if( bneed_long_ids ) if( bneed_long_ids )
{ {
for( unsigned i=0; i<n2read; ++i ) for( size_t i=0; i<n2read; ++i )
long_ids[i] = idcount++; long_ids[i] = idcount++;
ofs_.write( reinterpret_cast<char*>(&long_ids[0]), n2read*sizeof(size_t) ); ofs_.write( reinterpret_cast<char*>(&long_ids[0]), n2read*sizeof(size_t) );
}else{ }else{
for( unsigned i=0; i<n2read; ++i ) for( size_t i=0; i<n2read; ++i )
short_ids[i] = idcount++; short_ids[i] = idcount++;
ofs_.write( reinterpret_cast<char*>(&short_ids[0]), n2read*sizeof(unsigned) ); ofs_.write( reinterpret_cast<char*>(&short_ids[0]), n2read*sizeof(unsigned) );
} }
@ -631,7 +632,7 @@ protected:
//... particle masses ....................................................... //... particle masses .......................................................
if( bmultimass_ && bmorethan2bnd_ && nc_per_file[ifile] > 0) if( bmultimass_ && bmorethan2bnd_ && nc_per_file[ifile] > 0ul)
{ {
unsigned npcoarse = nc_per_file[ifile];//header_.npart[5]; unsigned npcoarse = nc_per_file[ifile];//header_.npart[5];
iffs1.open( fnm, np_coarse_dm_, wrote_coarse*sizeof(T_store) ); iffs1.open( fnm, np_coarse_dm_, wrote_coarse*sizeof(T_store) );
@ -641,7 +642,7 @@ protected:
blksize = npcoarse*sizeof(T_store); blksize = npcoarse*sizeof(T_store);
ofs_.write( reinterpret_cast<char*>(&blksize), sizeof(int) ); ofs_.write( reinterpret_cast<char*>(&blksize), sizeof(int) );
while( n2read > 0 ) while( n2read > 0ul )
{ {
iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) ); iffs1.read( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) );
ofs_.write( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) ); ofs_.write( reinterpret_cast<char*>(&tmp1[0]), n2read*sizeof(T_store) );
@ -658,7 +659,7 @@ protected:
//... initial internal energy for gas particles //... initial internal energy for gas particles
if( bbaryons && nfgas_per_file[ifile] > 0 ) if( bbaryons && nfgas_per_file[ifile] > 0ul )
{ {
std::vector<T_store> eint(curr_block_buf_size,0.0); std::vector<T_store> eint(curr_block_buf_size,0.0);
@ -678,9 +679,9 @@ protected:
blksize = sizeof(T_store)*nfgas_per_file[ifile]; //*npgas blksize = sizeof(T_store)*nfgas_per_file[ifile]; //*npgas
ofs_.write( reinterpret_cast<char*>(&blksize), sizeof(int) ); ofs_.write( reinterpret_cast<char*>(&blksize), sizeof(int) );
while( n2read > 0 ) while( n2read > 0ul )
{ {
for( unsigned i=0; i<n2read; ++i ) for( size_t i=0; i<n2read; ++i )
eint[i] = ceint; eint[i] = ceint;
ofs_.write( reinterpret_cast<char*>(&eint[0]), n2read*sizeof(T_store) ); ofs_.write( reinterpret_cast<char*>(&eint[0]), n2read*sizeof(T_store) );
npleft -= n2read; npleft -= n2read;