Commit 2b759f57 authored by Christoph Rettinger's avatar Christoph Rettinger

Added assert msg and log detail output to lbm refinement functionality

parent 9456ec88
......@@ -658,7 +658,7 @@ void PdfFieldPackInfo< LatticeModel_T, BoundaryHandling_T >::communicateLocalCoa
#ifndef NDEBUG
if( boundaryHandling->isDomain(sx,sy,sz) )
WALBERLA_ASSERT( !math::isnan( sf->get( sx, sy, sz, idx ) ) );
WALBERLA_ASSERT( !math::isnan( sf->get( sx, sy, sz, idx ) ), sx << ", " << sy << ", " << sz << ", " << idx << " coarse sender block = " << coarseSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> " );
#endif
}
rx += cell_idx_t(2);
......@@ -697,7 +697,7 @@ void PdfFieldPackInfo< LatticeModel_T, BoundaryHandling_T >::communicateLocalCoa
#ifndef NDEBUG
if( boundaryHandling->isDomain(sx,sy,sz) )
WALBERLA_ASSERT( !math::isnan( value ) );
WALBERLA_ASSERT( !math::isnan( value ), "value at " << sx << ", " << sy << ", " << sz << ", " << idx << " coarse sender block = " << coarseSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> " );
#endif
rf->get( rx, ry, rz, idx ) = value;
......@@ -779,16 +779,16 @@ void PdfFieldPackInfo< LatticeModel_T, BoundaryHandling_T >::packDataFineToCoars
#ifndef NDEBUG
if( boundaryHandling->isDomain(x,y,z) )
{
WALBERLA_ASSERT( !math::isnan( field->get( x, y, z, idx ) ) );
WALBERLA_ASSERT( !math::isnan( field->get( x + cell_idx_t(1), y, z, idx ) ) );
WALBERLA_ASSERT( !math::isnan( field->get( x, y + cell_idx_t(1), z, idx ) ) );
WALBERLA_ASSERT( !math::isnan( field->get( x + cell_idx_t(1), y + cell_idx_t(1), z, idx ) ) );
WALBERLA_ASSERT( !math::isnan( field->get( x, y, z, idx ) ), x << ", " << y << ", " << z << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> ");
WALBERLA_ASSERT( !math::isnan( field->get( x + cell_idx_t(1), y, z, idx ) ), x + cell_idx_t(1) << ", " << y << ", " << z << ", " << idx <<" fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> " );
WALBERLA_ASSERT( !math::isnan( field->get( x, y + cell_idx_t(1), z, idx ) ), x << ", " << y + cell_idx_t(1) << ", " << z << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> " );
WALBERLA_ASSERT( !math::isnan( field->get( x + cell_idx_t(1), y + cell_idx_t(1), z, idx ) ), x + cell_idx_t(1) << ", " << y + cell_idx_t(1) << ", " << z << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> " );
if( Stencil::D == uint_t(3) )
{
WALBERLA_ASSERT( !math::isnan( field->get( x, y, z + cell_idx_t(1), idx ) ) );
WALBERLA_ASSERT( !math::isnan( field->get( x + cell_idx_t(1), y, z + cell_idx_t(1), idx ) ) );
WALBERLA_ASSERT( !math::isnan( field->get( x, y + cell_idx_t(1), z + cell_idx_t(1), idx ) ) );
WALBERLA_ASSERT( !math::isnan( field->get( x + cell_idx_t(1), y + cell_idx_t(1), z + cell_idx_t(1), idx ) ) );
WALBERLA_ASSERT( !math::isnan( field->get( x, y, z + cell_idx_t(1), idx ) ), x << ", " << y << ", " << z + cell_idx_t(1) << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> " );
WALBERLA_ASSERT( !math::isnan( field->get( x + cell_idx_t(1), y, z + cell_idx_t(1), idx ) ), x + cell_idx_t(1) << ", " << y << ", " << z + cell_idx_t(1) << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> " );
WALBERLA_ASSERT( !math::isnan( field->get( x, y + cell_idx_t(1), z + cell_idx_t(1), idx ) ), x << ", " << y + cell_idx_t(1) << ", " << z + cell_idx_t(1) << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> " );
WALBERLA_ASSERT( !math::isnan( field->get( x + cell_idx_t(1), y + cell_idx_t(1), z + cell_idx_t(1), idx ) ), x + cell_idx_t(1) << ", " << y + cell_idx_t(1) << ", " << z + cell_idx_t(1) << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> " );
}
}
#endif
......@@ -925,16 +925,16 @@ void PdfFieldPackInfo< LatticeModel_T, BoundaryHandling_T >::communicateLocalFin
#ifndef NDEBUG
if( boundaryHandling->isDomain(sx,sy,sz) )
{
WALBERLA_ASSERT( !math::isnan( sf->get( sx, sy, sz, idx ) ) );
WALBERLA_ASSERT( !math::isnan( sf->get( sx + cell_idx_t(1), sy, sz, idx ) ) );
WALBERLA_ASSERT( !math::isnan( sf->get( sx, sy + cell_idx_t(1), sz, idx ) ) );
WALBERLA_ASSERT( !math::isnan( sf->get( sx + cell_idx_t(1), sy + cell_idx_t(1), sz, idx ) ) );
WALBERLA_ASSERT( !math::isnan( sf->get( sx, sy, sz, idx ) ), sx << ", " << sy << ", " << sz << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> ");
WALBERLA_ASSERT( !math::isnan( sf->get( sx + cell_idx_t(1), sy, sz, idx ) ), sx + cell_idx_t(1) << ", " << sy << ", " << sz << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> ");
WALBERLA_ASSERT( !math::isnan( sf->get( sx, sy + cell_idx_t(1), sz, idx ) ), sx << ", " << sy + cell_idx_t(1) << ", " << sz << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> ");
WALBERLA_ASSERT( !math::isnan( sf->get( sx + cell_idx_t(1), sy + cell_idx_t(1), sz, idx ) ), sx + cell_idx_t(1) << ", " << sy + cell_idx_t(1) << ", " << sz << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> ");
if( Stencil::D == uint_t(3) )
{
WALBERLA_ASSERT( !math::isnan( sf->get( sx, sy, sz + cell_idx_t(1), idx ) ) );
WALBERLA_ASSERT( !math::isnan( sf->get( sx + cell_idx_t(1), sy, sz + cell_idx_t(1), idx ) ) );
WALBERLA_ASSERT( !math::isnan( sf->get( sx, sy + cell_idx_t(1), sz + cell_idx_t(1), idx ) ) );
WALBERLA_ASSERT( !math::isnan( sf->get( sx + cell_idx_t(1), sy + cell_idx_t(1), sz + cell_idx_t(1), idx ) ) );
WALBERLA_ASSERT( !math::isnan( sf->get( sx, sy, sz + cell_idx_t(1), idx ) ), sx << ", " << sy << ", " << sz + cell_idx_t(1) << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> ");
WALBERLA_ASSERT( !math::isnan( sf->get( sx + cell_idx_t(1), sy, sz + cell_idx_t(1), idx ) ), sx + cell_idx_t(1) << ", " << sy << ", " << sz + cell_idx_t(1) << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> ");
WALBERLA_ASSERT( !math::isnan( sf->get( sx, sy + cell_idx_t(1), sz + cell_idx_t(1), idx ) ), sx << ", " << sy + cell_idx_t(1) << ", " << sz + cell_idx_t(1) << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> ");
WALBERLA_ASSERT( !math::isnan( sf->get( sx + cell_idx_t(1), sy + cell_idx_t(1), sz + cell_idx_t(1), idx ) ), sx + cell_idx_t(1) << ", " << sy + cell_idx_t(1) << ", " << sz + cell_idx_t(1) << ", " << idx << " fine sender block = " << fineSender->getId() << " in dir <" << stencil::cx[dir] << "," << stencil::cy[dir] << "," << stencil::cz[dir] << "> ");
}
}
#endif
......
......@@ -1591,91 +1591,130 @@ void TimeStep< LatticeModel_T, Sweep_T, BoundaryHandling_T >::recursiveStep( con
std::vector< Block * > blocks = selectedBlocks( level );
WALBERLA_LOG_DETAIL("Starting recursive step with level " << level << " and execution count " << executionCount);
if( asynchronousCommunication_ && level != coarsestLevel )
{
WALBERLA_LOG_DETAIL("Start communication coarse to fine, initiated by fine level " << level );
startCommunicationCoarseToFine( level ); // [start] explosion (initiated by fine level, involves "level" and "level-1")
}
WALBERLA_LOG_DETAIL("Colliding on level " << level);
collide( blocks, level, executionCount1st );
if( asynchronousCommunication_ )
{
WALBERLA_LOG_DETAIL("Start communication equal level, initiated by level " << level );
startCommunicationEqualLevel( level ); // [start] equal level communication
}
if( level != finestLevel )
{
WALBERLA_LOG_DETAIL("Calling recursive step with level " << level + uint_t(1) << " and execution count " << executionCount1st );
recursiveStep( level + uint_t(1), executionCount1st );
if( asynchronousCommunication_ )
startCommunicationFineToCoarse( level + uint_t(1) ); // [start] coalescence (initiated by coarse level)
if( asynchronousCommunication_ ) {
WALBERLA_LOG_DETAIL("Start communication fine to coarse, initiated by coarse level " << level );
startCommunicationFineToCoarse(level + uint_t(1)); // [start] coalescence (initiated by coarse level)
}
}
if( level != coarsestLevel )
{
if( !asynchronousCommunication_ )
startCommunicationCoarseToFine( level ); // [start] explosion (initiated by fine level, involves "level" and "level-1")
if( !asynchronousCommunication_ ) {
WALBERLA_LOG_DETAIL("Start communication coarse to fine, initiated by fine level " << level );
startCommunicationCoarseToFine(level); // [start] explosion (initiated by fine level, involves "level" and "level-1")
}
WALBERLA_LOG_DETAIL("End communication coarse to fine, initiated by fine level " << level );
endCommunicationCoarseToFine( level ); // [end] explosion (initiated by fine level, involves "level" and "level-1")
WALBERLA_LOG_DETAIL("Perform linear explosion on level " << level );
performLinearExplosion( blocks, level );
}
if( !asynchronousCommunication_ )
startCommunicationEqualLevel( level ); // [start] equal level communication
if( !asynchronousCommunication_ ) {
WALBERLA_LOG_DETAIL("Start communication equal level, initiated by level " << level );
startCommunicationEqualLevel(level); // [start] equal level communication
}
WALBERLA_LOG_DETAIL("End communication equal level, initiated by level " << level );
endCommunicationEqualLevel( level ); // [end] equal level communication
// performLinearExplosion( blocks, level ); // if equal level neighbor values are needed, linear explosion should be performed here
if( level == finestLevel && level != coarsestLevel )
{
WALBERLA_LOG_DETAIL("Stream + collide on level " << level );
streamCollide( blocks, level, executionCount1st );
}
else
{
WALBERLA_LOG_DETAIL("Stream on level " << level );
stream( blocks, level, executionCount1st );
if( level != finestLevel )
{
if( !asynchronousCommunication_ )
startCommunicationFineToCoarse( level + uint_t(1) ); // [start] coalescence (initiated by coarse level)
if( !asynchronousCommunication_ ) {
WALBERLA_LOG_DETAIL("Start communication fine to coarse, initiated by coarse level " << level );
startCommunicationFineToCoarse(level + uint_t(1)); // [start] coalescence (initiated by coarse level)
}
WALBERLA_LOG_DETAIL("End communication fine to coarse, initiated by coarse level " << level );
endCommunicationFineToCoarse( level + uint_t(1) ); // [end] coalescence (initiated by coarse level)
}
WALBERLA_LOG_DETAIL("Finish stream on level " << level );
finishStream( blocks, level, executionCount1st );
if( level == coarsestLevel )
{
WALBERLA_LOG_DETAIL("End recursive step on level " << level );
return;
}
WALBERLA_LOG_DETAIL("Colliding on level " << level);
collide( blocks, level, executionCount2nd );
}
if( asynchronousCommunication_ )
startCommunicationEqualLevel( level ); // [start] equal level communication
if( asynchronousCommunication_ ) {
WALBERLA_LOG_DETAIL("Start communication equal level, initiated by level " << level );
startCommunicationEqualLevel(level); // [start] equal level communication
}
if( level != finestLevel )
{
WALBERLA_LOG_DETAIL("Calling recursive step with level " << level + uint_t(1) << " and execution count " << executionCount2nd );
recursiveStep( level + uint_t(1), executionCount2nd );
if( asynchronousCommunication_ )
startCommunicationFineToCoarse( level + uint_t(1) ); // [start] coalescence (initiated by coarse level)
if( asynchronousCommunication_ ) {
WALBERLA_LOG_DETAIL("Start communication fine to coarse, initiated by coarse level " << level );
startCommunicationFineToCoarse(level + uint_t(1)); // [start] coalescence (initiated by coarse level)
}
}
if( !asynchronousCommunication_ )
startCommunicationEqualLevel( level ); // [start] equal level communication
if( !asynchronousCommunication_ ) {
WALBERLA_LOG_DETAIL("Start communication equal level, initiated by level " << level );
startCommunicationEqualLevel(level); // [start] equal level communication
}
WALBERLA_LOG_DETAIL("End communication equal level, initiated by level " << level );
endCommunicationEqualLevel( level ); // [end] equal level communication
WALBERLA_LOG_DETAIL("Stream on level " << level );
stream( blocks, level, executionCount2nd );
if( level != finestLevel )
{
if( !asynchronousCommunication_ )
{
WALBERLA_LOG_DETAIL("Start communication fine to coarse, initiated by coarse level " << level );
startCommunicationFineToCoarse( level + uint_t(1) ); // [start] coalescence (initiated by coarse level)
}
WALBERLA_LOG_DETAIL("End communication fine to coarse, initiated by coarse level " << level );
endCommunicationFineToCoarse( level + uint_t(1) ); // [end] coalescence (initiated by coarse level)
}
finishStream( blocks, level, executionCount2nd );
}
WALBERLA_LOG_DETAIL("Finish stream on level " << level );
finishStream( blocks, level, executionCount2nd );
WALBERLA_LOG_DETAIL("End recursive step on level " << level );
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment