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

final fixes to masking

This commit is contained in:
Oliver Hahn 2013-11-13 01:40:20 +01:00
parent 8ecb337170
commit f14552e106

79
mesh.hh
View file

@ -667,20 +667,30 @@ public:
m_ref_masks[ilevel]->init( size(ilevel,0), size(ilevel,1), size(ilevel,2), 0.0 );
for( size_t i=0; i<size(ilevel,0); i++ )
for( size_t i=0; i<size(ilevel,0); i+=2 )
{
xq[0] = (offset_abs(ilevel,0) + i)*dx + 0.5*dx + shift[0];
for( size_t j=0; j<size(ilevel,1); ++j )
for( size_t j=0; j<size(ilevel,1); j+=2 )
{
xq[1] = (offset_abs(ilevel,1) + j)*dx + 0.5*dx + shift[1];
for( size_t k=0; k<size(ilevel,2); ++k )
for( size_t k=0; k<size(ilevel,2); k+=2 )
{
xq[2] = (offset_abs(ilevel,2) + k)*dx + 0.5*dx + shift[2];
short mask_val = -1.0; // outside mask
if( the_region_generator->query_point( xq, ilevel ) || ilevel == (int)levelmin() )
(*m_ref_masks[ilevel])(i,j,k) = 1.0; // inside mask
else
(*m_ref_masks[ilevel])(i,j,k) = -1.0; // outside mask
mask_val = 1.0; // 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;
(*m_ref_masks[ilevel])(i+0,j+1,k+0) = mask_val;
(*m_ref_masks[ilevel])(i+0,j+1,k+1) = mask_val;
(*m_ref_masks[ilevel])(i+1,j+0,k+0) = mask_val;
(*m_ref_masks[ilevel])(i+1,j+0,k+1) = mask_val;
(*m_ref_masks[ilevel])(i+1,j+1,k+0) = mask_val;
(*m_ref_masks[ilevel])(i+1,j+1,k+1) = mask_val;
}
}
}
@ -689,7 +699,57 @@ public:
bhave_refmask = true;
#if 1
for( int ilevel = (int)levelmax(); ilevel > (int)levelmin(); --ilevel )
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;
}
}
}
}
}
}
/*for( int ilevel = (int)levelmax(); ilevel > (int)levelmin(); --ilevel )
{
for( size_t i=0; i<size(ilevel,0); i+=2 )
{
@ -698,6 +758,7 @@ public:
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.;
@ -725,7 +786,7 @@ public:
}
}
}
}*/
#else
// determine the refined cells
@ -939,7 +1000,7 @@ public:
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( gh.is_in_mask(ilevel,i,j,k) && !gh.is_refined(ilevel,i,j,k) )
if( is_in_mask(ilevel,i,j,k) && !is_refined(ilevel,i,j,k) )
++npcount;
return npcount;