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

added output of refinement masks for ENZO

This commit is contained in:
Oliver Hahn 2013-12-10 19:26:13 +01:00
parent 2888f0d2d0
commit 4ac0ea9323
2 changed files with 610 additions and 646 deletions

211
mesh.hh
View file

@ -663,9 +663,9 @@ public:
{
for( int ilevel = (int)levelmax(); ilevel >= (int)levelmin(); --ilevel )
{
double xq[3], dx = 1.0/(1ul<<ilevel); //1.0/(1ul<<(levelmax()-1));
double xq[3], dx = 1.0/(1ul<<ilevel);
m_ref_masks[ilevel]->init( size(ilevel,0), size(ilevel,1), size(ilevel,2), 0.0 );
m_ref_masks[ilevel]->init( size(ilevel,0), size(ilevel,1), size(ilevel,2), 0 );
for( size_t i=0; i<size(ilevel,0); i+=2 )
{
@ -678,9 +678,9 @@ public:
xq[2] = (offset_abs(ilevel,2) + k)*dx + 0.5*dx + shift[2];
short mask_val = -1.0; // outside mask
short mask_val = -1; // outside mask
if( the_region_generator->query_point( xq, ilevel ) || ilevel == (int)levelmin() )
mask_val = 1.0; // inside mask
mask_val = 1; // inside mask
(*m_ref_masks[ilevel])(i+0,j+0,k+0) = mask_val;
(*m_ref_masks[ilevel])(i+0,j+0,k+1) = mask_val;
@ -698,10 +698,6 @@ public:
bhave_refmask = true;
#if 1
#if 1
for( int ilevel = (int)levelmin(); ilevel < (int)levelmax(); ++ilevel )
{
for( size_t i=0; i<size(ilevel,0); i++ )
@ -720,176 +716,32 @@ public:
ifine[1]>=0 && ifine[1] < (int)size(ilevel+1,1) &&
ifine[2]>=0 && ifine[2] < (int)size(ilevel+1,2) )
{
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+0)>0;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+1)>0;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+0)>0;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+1)>0;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+0)>0;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+1)>0;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+0)>0;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+1)>0;
if( fine_is_flagged )//&& (*m_ref_masks[ilevel])(i,j,k) > 0. )
if( fine_is_flagged )
{
(*m_ref_masks[ilevel])(i,j,k) = 0.5; // cell is refined
(*m_ref_masks[ilevel])(i,j,k) = 2; // cell is refined
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+1) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+1) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+1) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+1) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+0) = 1;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+1) = 1;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+0) = 1;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+1) = 1;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+0) = 1;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+1) = 1;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+0) = 1;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+1) = 1;
}
}
}
}
#else
for( int ilevel = (int)levelmin(); ilevel < (int)levelmax(); ++ilevel )
{
for( size_t i=0; i<size(ilevel,0); i++ )
{
for( size_t j=0; j<size(ilevel,1); j++ )
{
for( size_t k=0; k<size(ilevel,2); k++ )
{
bool fine_is_flagged = false;
int ifine[] = {
2*(int)i-2*(int)offset(ilevel+1,0),
2*(int)j-2*(int)offset(ilevel+1,1),
2*(int)k-2*(int)offset(ilevel+1,2),
};
if(ifine[0]>=0 && ifine[0] < (int)size(ilevel+1,0) &&
ifine[1]>=0 && ifine[1] < (int)size(ilevel+1,1) &&
ifine[2]>=0 && ifine[2] < (int)size(ilevel+1,2) )
{
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+1)>0.;
if( fine_is_flagged && (*m_ref_masks[ilevel])(i,j,k) > 0. )
{
(*m_ref_masks[ilevel])(i,j,k) = 0.5; // cell is refined
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+1) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+1) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+1) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+1) = 1.0;
}
}
}
}
}
}
#endif
/*for( int ilevel = (int)levelmax(); ilevel > (int)levelmin(); --ilevel )
{
for( size_t i=0; i<size(ilevel,0); i+=2 )
{
for( size_t j=0; j<size(ilevel,1); j+=2 )
{
for( size_t k=0; k<size(ilevel,2); k+=2 )
{
bool fine_is_flagged = false;
float flag_val = 2.0;
fine_is_flagged |= (*m_ref_masks[ilevel])(i+0,j+0,k+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel])(i+0,j+0,k+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel])(i+0,j+1,k+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel])(i+0,j+1,k+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel])(i+1,j+0,k+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel])(i+1,j+0,k+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel])(i+1,j+1,k+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel])(i+1,j+1,k+1)>0.;
if( fine_is_flagged )
{
(*m_ref_masks[ilevel-1])(offset(ilevel,0)+i/2,offset(ilevel,1)+j/2,offset(ilevel,2)+k/2) = 0.5;
(*m_ref_masks[ilevel])(i+0,j+0,k+0) = 1.0;
(*m_ref_masks[ilevel])(i+0,j+0,k+1) = 1.0;
(*m_ref_masks[ilevel])(i+0,j+1,k+0) = 1.0;
(*m_ref_masks[ilevel])(i+0,j+1,k+1) = 1.0;
(*m_ref_masks[ilevel])(i+1,j+0,k+0) = 1.0;
(*m_ref_masks[ilevel])(i+1,j+0,k+1) = 1.0;
(*m_ref_masks[ilevel])(i+1,j+1,k+0) = 1.0;
(*m_ref_masks[ilevel])(i+1,j+1,k+1) = 1.0;
}
}
}
}
}*/
#else
// determine the refined cells
for( int ilevel = (int)levelmin()-1; ilevel < (int)levelmax()-1; ++ilevel )
{
for( size_t i=0; i<size(ilevel,0); i++ )
{
for( size_t j=0; j<size(ilevel,1); ++j )
{
for( size_t k=0; k<size(ilevel,2); ++k )
{
bool fine_is_flagged = false;
int ifine[] = {
2*(int)i-2*(int)offset(ilevel+1,0),
2*(int)j-2*(int)offset(ilevel+1,1),
2*(int)k-2*(int)offset(ilevel+1,2),
};
if( ifine[0]>=0 && ifine[0] < size(ilevel+1,0) &&
ifine[1]>=0 && ifine[1] < size(ilevel+1,1) &&
ifine[2]>=0 && ifine[2] < size(ilevel+1,2) )
{
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+1)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+0)>0.;
fine_is_flagged |= (*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+1)>0.;
}
if( fine_is_flagged && (*m_ref_masks[ilevel])(i,j,k) > 0. )
{
(*m_ref_masks[ilevel])(i,j,k) = 0.5; // cell is refined
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+0,ifine[2]+1) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+0,ifine[1]+1,ifine[2]+1) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+0,ifine[2]+1) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+0) = 1.0;
(*m_ref_masks[ilevel+1])(ifine[0]+1,ifine[1]+1,ifine[2]+1) = 1.0;
}
}
}
}
}
#endif
}
}
@ -985,21 +837,16 @@ public:
{
// meaning of the mask:
// -1 = outside of mask
// 0.5 = in mask and refined (i.e. cell exists also on finer level)
// 2 = in mask and refined (i.e. cell exists also on finer level)
// 1 = in mask and not refined (i.e. cell exists only on this level)
if( bhave_refmask ){
short v = (*m_ref_masks[ilevel])(i,j,k);
return (v>0.49 && v<0.51);
//return (*m_ref_masks[ilevel-1])(offset(ilevel,0)+i/2,offset(ilevel,1)+j/2,offset(ilevel,2)+k/2) < 0.99;
return (*m_ref_masks[ilevel])(i,j,k)==2;
}
//if( ilevel == levelmax()-1 && bhave_refmask )
// return (*m_ref_masks[ilevel])(i,j,k);
if( !bhave_refmask && ilevel == levelmax() )
return false;
@ -1015,15 +862,12 @@ public:
{
// meaning of the mask:
// -1 = outside of mask
// 0.5 = in mask and refined (i.e. cell exists also on finer level)
// 2 = in mask and refined (i.e. cell exists also on finer level)
// 1 = in mask and not refined (i.e. cell exists only on this level)
if( bhave_refmask ){
short v = (*m_ref_masks[ilevel])(i,j,k);
return (v>0.);
//return (*m_ref_masks[ilevel-1])(offset(ilevel,0)+i/2,offset(ilevel,1)+j/2,offset(ilevel,2)+k/2) > 0.;
return ((*m_ref_masks[ilevel])(i,j,k)>=0);
}
return true;
@ -1051,7 +895,6 @@ public:
for( unsigned i=0; i<get_grid(ilevel)->size(0); ++i )
for( unsigned j=0; j<get_grid(ilevel)->size(1); ++j )
for( unsigned k=0; k<get_grid(ilevel)->size(2); ++k )
//if( ! is_refined(ilevel,i,j,k) )
if( is_in_mask(ilevel,i,j,k) && !is_refined(ilevel,i,j,k) )
++npcount;
@ -1260,7 +1103,7 @@ public:
m_yoffabs.push_back( 2*(m_yoffabs.back() + yoff) );
m_zoffabs.push_back( 2*(m_zoffabs.back() + zoff) );
m_ref_masks.push_back( new refinement_mask(nx,ny,nz,0.0) );
m_ref_masks.push_back( new refinement_mask(nx,ny,nz,0) );
}
/*! cut a refinement patch to the specified size

File diff suppressed because it is too large Load diff