diff --git a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnl-run-fsm-eoc-test b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnl-run-fsm-eoc-test index 57a40528b4b33551af8ca5f34f69cb0d00fcc30f..0dc50246f5ced2ec65616f7eecc65ebf860a2cdb 100755 --- a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnl-run-fsm-eoc-test +++ b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnl-run-fsm-eoc-test @@ -2,7 +2,7 @@ device="host" dimensions="2D 3D" -dimensions="2D" +#dimensions="3D" sizes1D="16 32 64 128 256 512 1024 2048 4096" #sizes1D="256" sizes2D="16 32 64 128 256 512 1024" @@ -12,7 +12,7 @@ testFunctions="paraboloid" snapshotPeriod=0.1 finalTime=1.5 solverName="tnl-direct-eikonal-solver" -#solverName="gdb --args tnl-direct-eikonal-solver-dbg" +#solverName="gdb --args tnl-direct-eikonal-solver-dbg --catch-exceptions no" # setupTestFunction() @@ -59,7 +59,7 @@ setupGrid() setInitialCondition() { testFunction=$1 - tnl-init --test-function ${testFunction}-sdf \ + tnl-init --test-function ${testFunction} \ --output-file initial-u.tnl \ --amplitude ${amplitude} \ --wave-length ${waveLength} \ @@ -78,7 +78,7 @@ setInitialCondition() --radius ${radius} tnl-init --test-function ${testFunction}-sdf \ - --output-file final-u.tnl \ + --output-file exact-u.tnl \ --amplitude ${amplitude} \ --wave-length ${waveLength} \ --wave-length-x ${waveLengthX} \ @@ -108,7 +108,6 @@ solve() --time-step 10 \ --time-step-order 2 \ --discrete-solver ${discreteSolver} \ - --merson-adaptivity 1.0e-5 \ --min-iterations 20 \ --convergence-residue 1.0e-12 \ --snapshot-period ${snapshotPeriod} \ @@ -118,7 +117,7 @@ solve() computeError() { tnl-diff --mesh mesh.tnl \ - --input-files final-u.tnl u-*.tnl \ + --input-files aux-final.tnl exact-u.tnl \ --mode sequence \ --snapshot-period ${snapshotPeriod} \ --output-file errors.txt \ diff --git a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalMethodsBase.h b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalMethodsBase.h index 1182ac5745612aafc9e8fa1bdacec9f1883fd681..a4a46396cdc127e0ccbc9420b81c959011d18ad3 100644 --- a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalMethodsBase.h +++ b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalMethodsBase.h @@ -99,6 +99,6 @@ template < typename T1, typename T2 > T1 meet2DCondition( T1 a, T1 b, const T2 ha, const T2 hb, const T1 value, double v = 1); template < typename T1 > -T1 sortMinims( T1 a, T1 b, T1 c, T1 ha, T1 hb, T1 hc); +void sortMinims( T1 pom[] ); #include "tnlDirectEikonalMethodsBase_impl.h" diff --git a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalMethodsBase_impl.h b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalMethodsBase_impl.h index 461c70f55619556fd364c4e137d861884d67840c..4cb8327a16034a061feeb6a94f6faec15caf61e3 100644 --- a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalMethodsBase_impl.h +++ b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalMethodsBase_impl.h @@ -86,12 +86,13 @@ initInterface( const MeshFunctionType& input, for( cell.getCoordinates().x() = 0; cell.getCoordinates().x() < mesh.getDimensions().x(); cell.getCoordinates().x() ++ ) - { - output[ cell.getIndex() ] = + { + cell.refresh(); + output[ cell.getIndex() ] = input( cell ) >= 0 ? TypeInfo< RealType >::getMaxValue() : - TypeInfo< RealType >::getMaxValue(); - interfaceMap[ cell.getIndex() ] = false; - } + interfaceMap[ cell.getIndex() ] = false; + } const RealType& hx = mesh.getSpaceSteps().x(); const RealType& hy = mesh.getSpaceSteps().y(); @@ -117,15 +118,15 @@ initInterface( const MeshFunctionType& input, pom = ( hy * c )/( c - input[ n ]); if( output[ cell.getIndex() ] > pom ) output[ cell.getIndex() ] = pom; - - output[ n ] = ( hy * c )/( c - input[ n ]) - hy; + if( output[ n ] < pom-hx ) + output[ n ] = pom - hy; //( hy * c )/( c - input[ n ]) - hy; }else { pom = - ( hy * c )/( c - input[ n ]); if( output[ cell.getIndex() ] < pom ) output[ cell.getIndex() ] = pom; - - output[ n ] = hy - ( hy * c )/( c - input[ n ]); + if( output[ n ] > hy + pom ) + output[ n ] = hy + pom; //hy - ( hy * c )/( c - input[ n ]); } interfaceMap[ cell.getIndex() ] = true; interfaceMap[ n ] = true; @@ -139,7 +140,7 @@ initInterface( const MeshFunctionType& input, output[ cell.getIndex() ] = pom; pom = pom - hx; //output[ e ] = (hx * c)/( c - input[ e ]) - hx; - if( output[ e ] >= pom ) + if( output[ e ] < pom ) output[ e ] = pom; }else { @@ -148,7 +149,7 @@ initInterface( const MeshFunctionType& input, output[ cell.getIndex() ] = pom; pom = pom + hx; //output[ e ] = hx - (hx * c)/( c - input[ e ]); - if( output[ e ] < pom ) + if( output[ e ] > pom ) output[ e ] = pom; } interfaceMap[ cell.getIndex() ] = true; @@ -157,7 +158,7 @@ initInterface( const MeshFunctionType& input, } /*output[ cell.getIndex() ] = c > 0 ? TypeInfo< RealType >::getMaxValue() : - -TypeInfo< RealType >::getMaxValue();*/ + -TypeInfo< RealType >::getMaxValue(); */ //interfaceMap[ cell.getIndex() ] = false; //is on line 90 } } @@ -178,7 +179,7 @@ updateCell( MeshFunctionType& u, const RealType& hx = mesh.getSpaceSteps().x(); const RealType& hy = mesh.getSpaceSteps().y(); const RealType value = u( cell ); - Real a, b, tmp; + Real a, b, tmp = TypeInfo< Real >::getMaxValue(); if( cell.getCoordinates().x() == 0 ) a = u[ neighborEntities.template getEntityIndex< 1, 0 >() ]; @@ -211,10 +212,10 @@ updateCell( MeshFunctionType& u, a + TNL::sign( value ) * hx; }*/ tmp = meet2DCondition( a, b, hx, hy, value, v); - if( tmp == 0 ) + if( tmp == TypeInfo< Real >::getMaxValue() ) tmp = - fabs( a ) >= fabs( b ) ? fabs( b ) + TNL::sign( value ) * hy : - fabs( a ) + TNL::sign( value ) * hx; + fabs( a ) >= fabs( b ) ? b + TNL::sign( value ) * hy : + a + TNL::sign( value ) * hx; u[ cell.getIndex() ] = argAbsMin( value, tmp ); @@ -242,6 +243,7 @@ initInterface( const MeshFunctionType& input, cell.getCoordinates().x() < mesh.getDimensions().x(); cell.getCoordinates().x() ++ ) { + cell.refresh(); output[ cell.getIndex() ] = input( cell ) >= 0 ? TypeInfo< RealType >::getMaxValue() : - TypeInfo< RealType >::getMaxValue(); @@ -288,16 +290,19 @@ initInterface( const MeshFunctionType& input, { pom = ( hy * c )/( c - input[ n ]); if( output[ cell.getIndex() ] > pom ) - output[ cell.getIndex() ] = pom; + output[ cell.getIndex() ] = pom; - output[ n ] = ( hy * c )/( c - input[ n ]) - hy; + if ( output[ n ] < pom - hy) + output[ n ] = pom - hy; // ( hy * c )/( c - input[ n ]) - hy; + }else { pom = - ( hy * c )/( c - input[ n ]); if( output[ cell.getIndex() ] < pom ) output[ cell.getIndex() ] = pom; - - output[ n ] = hy - ( hy * c )/( c - input[ n ]); + if( output[ n ] > hy + pom ) + output[ n ] = hy + pom; //hy - ( hy * c )/( c - input[ n ]); + } interfaceMap[ cell.getIndex() ] = true; interfaceMap[ n ] = true; @@ -308,11 +313,12 @@ initInterface( const MeshFunctionType& input, { pom = ( hx * c )/( c - input[ e ]); if( output[ cell.getIndex() ] > pom ) - output[ cell.getIndex() ] = pom; + output[ cell.getIndex() ] = pom; pom = pom - hx; //output[ e ] = (hx * c)/( c - input[ e ]) - hx; - if( output[ e ] >= pom ) - output[ e ] = pom; + if( output[ e ] < pom ) + output[ e ] = pom; + }else { pom = - (hx * c)/( c - input[ e ]); @@ -320,7 +326,7 @@ initInterface( const MeshFunctionType& input, output[ cell.getIndex() ] = pom; pom = pom + hx; //output[ e ] = hx - (hx * c)/( c - input[ e ]); - if( output[ e ] < pom ) + if( output[ e ] > pom ) output[ e ] = pom; } interfaceMap[ cell.getIndex() ] = true; @@ -335,8 +341,9 @@ initInterface( const MeshFunctionType& input, output[ cell.getIndex() ] = pom; pom = pom - hz; //output[ e ] = (hx * c)/( c - input[ e ]) - hx; - if( output[ t ] >= pom ) - output[ t ] = pom; + if( output[ t ] < pom ) + output[ t ] = pom; + }else { pom = - (hz * c)/( c - input[ t ]); @@ -344,8 +351,9 @@ initInterface( const MeshFunctionType& input, output[ cell.getIndex() ] = pom; pom = pom + hz; //output[ e ] = hx - (hx * c)/( c - input[ e ]); - if( output[ t ] < pom ) + if( output[ t ] > pom ) output[ t ] = pom; + } interfaceMap[ cell.getIndex() ] = true; interfaceMap[ t ] = true; @@ -368,24 +376,15 @@ updateCell( MeshFunctionType& u, const MeshEntity& cell, double v ) { - const auto& neighborEntities = cell.template getNeighborEntities< 2 >(); + const auto& neighborEntities = cell.template getNeighborEntities< 3 >(); const MeshType& mesh = cell.getMesh(); const RealType& hx = mesh.getSpaceSteps().x(); const RealType& hy = mesh.getSpaceSteps().y(); const RealType& hz = mesh.getSpaceSteps().z(); const RealType value = u( cell ); - Real a, b, c, tmp = 0; + Real a, b, c, tmp = TypeInfo< Real >::getMaxValue(); - if( cell.getCoordinates().x() == 0 ) - a = u[ neighborEntities.template getEntityIndex< 1, 0 >() ]; - else if( cell.getCoordinates().x() == mesh.getDimensions().x() - 1 ) - a = u[ neighborEntities.template getEntityIndex< -1, 0 >() ]; - else - { - a = TNL::argAbsMin( u[ neighborEntities.template getEntityIndex< -1, 0 >() ], - u[ neighborEntities.template getEntityIndex< 1, 0 >() ] ); - } if( cell.getCoordinates().x() == 0 ) a = u[ neighborEntities.template getEntityIndex< 1, 0, 0 >() ]; @@ -396,17 +395,17 @@ updateCell( MeshFunctionType& u, a = TNL::argAbsMin( u[ neighborEntities.template getEntityIndex< -1, 0, 0 >() ], u[ neighborEntities.template getEntityIndex< 1, 0, 0 >() ] ); } - if( cell.getCoordinates().x() == 0 ) + if( cell.getCoordinates().y() == 0 ) b = u[ neighborEntities.template getEntityIndex< 0, 1, 0 >() ]; - else if( cell.getCoordinates().x() == mesh.getDimensions().x() - 1 ) + else if( cell.getCoordinates().y() == mesh.getDimensions().y() - 1 ) b = u[ neighborEntities.template getEntityIndex< 0, -1, 0 >() ]; else { b = TNL::argAbsMin( u[ neighborEntities.template getEntityIndex< 0, -1, 0 >() ], u[ neighborEntities.template getEntityIndex< 0, 1, 0 >() ] ); - }if( cell.getCoordinates().x() == 0 ) + }if( cell.getCoordinates().z() == 0 ) c = u[ neighborEntities.template getEntityIndex< 0, 0, 1 >() ]; - else if( cell.getCoordinates().x() == mesh.getDimensions().x() - 1 ) + else if( cell.getCoordinates().z() == mesh.getDimensions().z() - 1 ) c = u[ neighborEntities.template getEntityIndex< 0, 0, -1 >() ]; else { @@ -447,11 +446,12 @@ updateCell( MeshFunctionType& u, sign( value ) * hy * hz * sqrt( ( hy * hy + hz * hz )/v - ( b - c ) * ( b - c ) ) )/( hy * hy + hz * hz ); }*/ - Real pom = sortMinims( a, b, c, (Real)hx, (Real)hy, (Real)hz); - tmp = meet2DCondition( pom[0], pom[1], pom[3], pom[4], value, v); + Real pom[6] = { a, b, c, (Real)hx, (Real)hy, (Real)hz}; + sortMinims( pom ); + tmp = meet2DCondition( pom[0], pom[1], pom[2], pom[3], value, v); - if( tmp == 0 ) - tmp = pom[ 0 ] + TNL::sign( value ) * pom[ 3 ]; + if( tmp == TypeInfo< Real >::getMaxValue() ) + tmp = pom[ 0 ] + TNL::sign( value ) * pom[ 2 ]; } else @@ -477,33 +477,64 @@ T1 meet2DCondition( T1 a, T1 b, const T2 ha, const T2 hb, const T1 value, double ( a - b ) * ( a - b ) ) )/( ha * ha + hb * hb ); } else - tmp = 0; + { + tmp = TypeInfo< T1 >::getMaxValue(); + } return tmp; } template < typename T1 > -T1 sortMinims( T1 a, T1 b, T1 c, T1 ha, T1 hb, T1 hc) +void sortMinims( T1 pom[]) +{ + T1 tmp[6]; + if( pom[0] <= pom[1] && pom[1] <= pom[2]){ + tmp[0] = pom[0]; tmp[1] = pom[1]; tmp[2] = pom[3]; tmp[3] = pom[4]; + } + else if( pom[0] <= pom[2] && pom[2] <= pom[1] ){ + tmp[0] = pom[0]; tmp[1] = pom[2]; tmp[2] = pom[3]; tmp[3] = pom[5]; + } + else if( pom[1]<=pom[0] && pom[0] <= pom[2] ){ + tmp[0] = pom[1]; tmp[1] = pom[0]; tmp[2] = pom[4]; tmp[3] = pom[3]; + } + else if( pom[1] <= pom[2] && pom[2] <= pom[0] ){ + tmp[0] = pom[1]; tmp[1] = pom[2]; tmp[2] = pom[4]; tmp[3] = pom[5]; + } + else if( pom[2] <= pom[0] && pom[0] <= pom[1] ){ + tmp[0] = pom[2]; tmp[1] = pom[0]; tmp[2] = pom[5]; tmp[3] = pom[3]; + } + else if( pom[2] <= pom[1] && pom[1] <= pom[0] ){ + tmp[0] = pom[2]; tmp[1] = pom[1]; tmp[2] = pom[5]; tmp[3] = pom[4]; + } + for( int i = 0; i < 6; i++ ) + pom[ i ] = tmp[ i ]; + +} + +/*template < typename T1 > +T1* sortMinims( T1 pom[], T1 a, T1 b, T1 c, T1 ha, T1 hb, T1 hc) { - T1 tmp[6]; + T1 tmp[6] = pom; if( a <= b && b <= c){ - tmp = {a,b,c,ha,hb,hc}; + tmp[0] = a; tmp[1] = b; tmp[2] = ha; tmp[3] = hb; } else if( a <= c && c <= b ){ - tmp = {a,c,b,ha,hc,hb}; + tmp[0] = a; tmp[1] = c; tmp[2] = ha; tmp[3] = hc; } else if( b<=a && a<=c ){ - tmp = {b,a,c,hb,ha,hc}; + tmp[0] = b; tmp[1] = a; tmp[2] = hb; tmp[3] = ha; } else if( b <= c && c <= a ){ - tmp = {b,c,a,hb,hc,ha}; + tmp[0] = b; tmp[1] = c; tmp[2] = hb; tmp[3] = hc; } else if( c <= a && a <= b ){ - tmp = {c,a,b,hc,ha,hb}; + tmp[0] = c; tmp[1] = a; tmp[2] = hc; tmp[3] = ha; } else if( c <=b && b <= a ){ - tmp = {c,b,a,hc,hb,ha}; + tmp[0] = c; tmp[1] = b; tmp[2] = hc; tmp[3] = hb; } + for( int i = 0; i < 6; i++ ) + pom[ i ] = tmp[ i ]; - return tmp; -} \ No newline at end of file + return pom; +}*/ \ No newline at end of file diff --git a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlFastSweepingMethod2D_impl.h b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlFastSweepingMethod2D_impl.h index 13e5c824912ef387c47ddaca1c5eb98acfe30fe6..bb1d4a018faf433decb517664941c20eda746feb 100644 --- a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlFastSweepingMethod2D_impl.h +++ b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlFastSweepingMethod2D_impl.h @@ -64,7 +64,7 @@ solve( const MeshPointer& mesh, interfaceMap.setMesh( mesh ); std::cout << "Initiating the interface cells ..." << std::endl; BaseType::initInterface( u, aux, interfaceMap ); - //aux.save( "aux-ini.tnl" ); + aux.save( "aux-ini.tnl" ); typename MeshType::Cell cell( *mesh ); @@ -85,7 +85,7 @@ solve( const MeshPointer& mesh, this->updateCell( aux, cell ); } } - //aux.save( "aux-1.tnl" ); + aux.save( "aux-1.tnl" ); for( cell.getCoordinates().y() = 0; cell.getCoordinates().y() < mesh->getDimensions().y(); @@ -101,7 +101,7 @@ solve( const MeshPointer& mesh, this->updateCell( aux, cell ); } } - //aux.save( "aux-2.tnl" ); + aux.save( "aux-2.tnl" ); for( cell.getCoordinates().y() = mesh->getDimensions().y() - 1; cell.getCoordinates().y() >= 0 ; @@ -117,7 +117,7 @@ solve( const MeshPointer& mesh, this->updateCell( aux, cell ); } } - //aux.save( "aux-3.tnl" ); + aux.save( "aux-3.tnl" ); for( cell.getCoordinates().y() = mesh->getDimensions().y() - 1; @@ -134,8 +134,9 @@ solve( const MeshPointer& mesh, this->updateCell( aux, cell ); } } - //aux.save( "aux-4.tnl" ); + aux.save( "aux-4.tnl" ); iteration++; } + aux.save("aux-final.tnl"); } diff --git a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlFastSweepingMethod3D_impl.h b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlFastSweepingMethod3D_impl.h index 6fad87c7ea63f50a13e7b9e38c65994998e2b441..2c281617f4b3bf0c41fb480b3e7a32b2e348483f 100644 --- a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlFastSweepingMethod3D_impl.h +++ b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlFastSweepingMethod3D_impl.h @@ -65,5 +65,180 @@ solve( const MeshPointer& mesh, std::cout << "Initiating the interface cells ..." << std::endl; BaseType::initInterface( u, aux, interfaceMap ); aux.save( "aux-ini.tnl" ); + + typename MeshType::Cell cell( *mesh ); + + IndexType iteration( 0 ); + while( iteration < this->maxIterations ) + { + for( cell.getCoordinates().z() = 0; + cell.getCoordinates().z() < mesh->getDimensions().z(); + cell.getCoordinates().z()++ ) + { + for( cell.getCoordinates().y() = 0; + cell.getCoordinates().y() < mesh->getDimensions().y(); + cell.getCoordinates().y()++ ) + { + for( cell.getCoordinates().x() = 0; + cell.getCoordinates().x() < mesh->getDimensions().x(); + cell.getCoordinates().x()++ ) + { + cell.refresh(); + if( ! interfaceMap( cell ) ) + this->updateCell( aux, cell ); + } + } + } + aux.save( "aux-1.tnl" ); + + for( cell.getCoordinates().z() = 0; + cell.getCoordinates().z() < mesh->getDimensions().z(); + cell.getCoordinates().z()++ ) + { + for( cell.getCoordinates().y() = 0; + cell.getCoordinates().y() < mesh->getDimensions().y(); + cell.getCoordinates().y()++ ) + { + for( cell.getCoordinates().x() = mesh->getDimensions().x() - 1; + cell.getCoordinates().x() >= 0 ; + cell.getCoordinates().x()-- ) + { + //std::cerr << "2 -> "; + cell.refresh(); + if( ! interfaceMap( cell ) ) + this->updateCell( aux, cell ); + } + } + } + aux.save( "aux-2.tnl" ); + for( cell.getCoordinates().z() = 0; + cell.getCoordinates().z() < mesh->getDimensions().z(); + cell.getCoordinates().z()++ ) + { + for( cell.getCoordinates().y() = mesh->getDimensions().y() - 1; + cell.getCoordinates().y() >= 0 ; + cell.getCoordinates().y()-- ) + { + for( cell.getCoordinates().x() = 0; + cell.getCoordinates().x() < mesh->getDimensions().x(); + cell.getCoordinates().x()++ ) + { + //std::cerr << "3 -> "; + cell.refresh(); + if( ! interfaceMap( cell ) ) + this->updateCell( aux, cell ); + } + } + } + aux.save( "aux-3.tnl" ); + + for( cell.getCoordinates().z() = 0; + cell.getCoordinates().z() < mesh->getDimensions().z(); + cell.getCoordinates().z()++ ) + { + for( cell.getCoordinates().y() = mesh->getDimensions().y() - 1; + cell.getCoordinates().y() >= 0; + cell.getCoordinates().y()-- ) + { + for( cell.getCoordinates().x() = mesh->getDimensions().x() - 1; + cell.getCoordinates().x() >= 0 ; + cell.getCoordinates().x()-- ) + { + //std::cerr << "4 -> "; + cell.refresh(); + if( ! interfaceMap( cell ) ) + this->updateCell( aux, cell ); + } + } + } + aux.save( "aux-4.tnl" ); + + for( cell.getCoordinates().z() = mesh->getDimensions().z() - 1; + cell.getCoordinates().z() >= 0; + cell.getCoordinates().z()-- ) + { + for( cell.getCoordinates().y() = 0; + cell.getCoordinates().y() < mesh->getDimensions().y(); + cell.getCoordinates().y()++ ) + { + for( cell.getCoordinates().x() = 0; + cell.getCoordinates().x() < mesh->getDimensions().x(); + cell.getCoordinates().x()++ ) + { + //std::cerr << "5 -> "; + cell.refresh(); + if( ! interfaceMap( cell ) ) + this->updateCell( aux, cell ); + } + } + } + aux.save( "aux-5.tnl" ); + + for( cell.getCoordinates().z() = mesh->getDimensions().z() - 1; + cell.getCoordinates().z() >= 0; + cell.getCoordinates().z()-- ) + { + for( cell.getCoordinates().y() = 0; + cell.getCoordinates().y() < mesh->getDimensions().y(); + cell.getCoordinates().y()++ ) + { + for( cell.getCoordinates().x() = mesh->getDimensions().x() - 1; + cell.getCoordinates().x() >= 0 ; + cell.getCoordinates().x()-- ) + { + //std::cerr << "6 -> "; + cell.refresh(); + if( ! interfaceMap( cell ) ) + this->updateCell( aux, cell ); + } + } + } + aux.save( "aux-6.tnl" ); + + for( cell.getCoordinates().z() = mesh->getDimensions().z() - 1; + cell.getCoordinates().z() >= 0; + cell.getCoordinates().z()-- ) + { + for( cell.getCoordinates().y() = mesh->getDimensions().y() - 1; + cell.getCoordinates().y() >= 0 ; + cell.getCoordinates().y()-- ) + { + for( cell.getCoordinates().x() = 0; + cell.getCoordinates().x() < mesh->getDimensions().x(); + cell.getCoordinates().x()++ ) + { + //std::cerr << "7 -> "; + cell.refresh(); + if( ! interfaceMap( cell ) ) + this->updateCell( aux, cell ); + } + } + } + aux.save( "aux-7.tnl" ); + + for( cell.getCoordinates().z() = mesh->getDimensions().z() - 1; + cell.getCoordinates().z() >= 0; + cell.getCoordinates().z()-- ) + { + for( cell.getCoordinates().y() = mesh->getDimensions().y() - 1; + cell.getCoordinates().y() >= 0; + cell.getCoordinates().y()-- ) + { + for( cell.getCoordinates().x() = mesh->getDimensions().x() - 1; + cell.getCoordinates().x() >= 0 ; + cell.getCoordinates().x()-- ) + { + //std::cerr << "8 -> "; + cell.refresh(); + if( ! interfaceMap( cell ) ) + this->updateCell( aux, cell ); + } + } + } + aux.save( "aux-8.tnl" ); + iteration++; + + } + aux.save("aux-final.tnl"); }