From b387127c77aed9f619fc2a5439bd31d21772b0ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Fencl?= <fenclmat@fjfi.cvut.cz> Date: Fri, 30 Nov 2018 15:16:19 +0100 Subject: [PATCH] MPI ready in tnlDirectEikonal* --- .../hamilton-jacobi/HamiltonJacobiProblem.h | 2 -- .../HamiltonJacobiProblem_impl.h | 20 +++------------ .../tnlDirectEikonalMethodsBase_impl.h | 6 ++--- .../hamilton-jacobi/tnlDirectEikonalProblem.h | 8 +++++- .../tnlDirectEikonalProblem_impl.h | 25 +++++++++++++++---- .../tnlFastSweepingMethod2D_impl.h | 20 +++++++-------- 6 files changed, 44 insertions(+), 37 deletions(-) diff --git a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/HamiltonJacobiProblem.h b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/HamiltonJacobiProblem.h index 7f1bd41939..a414420002 100644 --- a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/HamiltonJacobiProblem.h +++ b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/HamiltonJacobiProblem.h @@ -25,8 +25,6 @@ #include <solvers/pde/tnlLinearSystemAssembler.h> #include <functions/tnlMeshFunction.h> -#include <TNL/Meshes/DistributedMeshes/DistributedGridIO.h> - template< typename Mesh, typename DifferentialOperator, typename BoundaryCondition, diff --git a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/HamiltonJacobiProblem_impl.h b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/HamiltonJacobiProblem_impl.h index 9244b18332..3cc6388497 100644 --- a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/HamiltonJacobiProblem_impl.h +++ b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/HamiltonJacobiProblem_impl.h @@ -123,24 +123,12 @@ setInitialCondition( const Config::ParameterContainer& parameters, { this->bindDofs( mesh, dofs ); const String& initialConditionFile = parameters.getParameter< String >( "initial-condition" ); - if(CommunicatorType::isDistributed()) + if( ! this->solution.boundLoad( initialConditionFile ) ) { - std::cout<<"Nodes Distribution: " << uPointer->getMesh().getDistributedMesh()->printProcessDistr() << std::endl; - if(distributedIOType==Meshes::DistributedMeshes::MpiIO) - Meshes::DistributedMeshes::DistributedGridIO<MeshFunctionType,Meshes::DistributedMeshes::MpiIO> ::load(initialConditionFile, *uPointer ); - if(distributedIOType==Meshes::DistributedMeshes::LocalCopy) - Meshes::DistributedMeshes::DistributedGridIO<MeshFunctionType,Meshes::DistributedMeshes::LocalCopy> ::load(initialConditionFile, *uPointer ); - uPointer->template synchronize<CommunicatorType>(); + std::cerr << "I am not able to load the initial condition from the file " << initialConditionFile << "." <<std::endl; + return false; } - else - { - if( ! this->solution.boundLoad( initialConditionFile ) ) - { - std::cerr << "I am not able to load the initial condition from the file " << initialConditionFile << "." <<std::endl; - return false; - } - } - return true; + return true; } template< typename Mesh, 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 e142152ef7..786c6a4886 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 @@ -99,7 +99,7 @@ tnlDirectEikonalMethodsBase< Meshes::Grid< 2, Real, Device, Index > >:: updateBlocks( InterfaceMapType interfaceMap, MeshFunctionType aux, MeshFunctionType helpFunc, - ArrayContainer BlockIterHost, IndexType numThreadsPerBlock/*, Real **sArray*/ ) + ArrayContainer BlockIterHost, int numThreadsPerBlock/*, Real **sArray*/ ) { #pragma omp parallel for schedule( dynamic ) for( IndexType i = 0; i < BlockIterHost.getSize(); i++ ) @@ -267,13 +267,13 @@ updateBlocks( InterfaceMapType interfaceMap, template< typename Real, typename Device, typename Index > -template< IndexType sizeSArray > +template< int sizeSArray > void tnlDirectEikonalMethodsBase< Meshes::Grid< 3, Real, Device, Index > >:: updateBlocks( const InterfaceMapType interfaceMap, const MeshFunctionType aux, MeshFunctionType& helpFunc, - ArrayContainer BlockIterHost, IndexType numThreadsPerBlock/*, Real **sArray*/ ) + ArrayContainer BlockIterHost, int numThreadsPerBlock/*, Real **sArray*/ ) { //#pragma omp parallel for schedule( dynamic ) for( IndexType i = 0; i < BlockIterHost.getSize(); i++ ) diff --git a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalProblem.h b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalProblem.h index 0dde938025..61465bee9f 100644 --- a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalProblem.h +++ b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalProblem.h @@ -18,6 +18,8 @@ #include <TNL/Pointers/SharedPointer.h> #include "tnlFastSweepingMethod.h" +#include <TNL/Meshes/DistributedMeshes/DistributedGridIO.h> + template< typename Mesh, typename Communicator, typename Anisotropy, @@ -46,6 +48,8 @@ class tnlDirectEikonalProblem using MeshPointer = Pointers::SharedPointer< MeshType >; using DofVectorPointer = Pointers::SharedPointer< DofVectorType >; + typedef Communicator CommunicatorType; + static constexpr bool isTimeDependent() { return false; }; static String getType(); @@ -79,6 +83,8 @@ class tnlDirectEikonalProblem AnisotropyPointer anisotropy; -}; + Meshes::DistributedMeshes::DistrGridIOTypes distributedIOType; + + }; #include "tnlDirectEikonalProblem_impl.h" diff --git a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalProblem_impl.h b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalProblem_impl.h index 3d5fa15dc2..7c65ef94d4 100644 --- a/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalProblem_impl.h +++ b/src/TNL/Experimental/Hamilton-Jacobi/Solvers/hamilton-jacobi/tnlDirectEikonalProblem_impl.h @@ -113,11 +113,26 @@ tnlDirectEikonalProblem< Mesh, Communicator, Anisotropy, Real, Index >:: setInitialCondition( const Config::ParameterContainer& parameters, DofVectorPointer& dofs ) { - String inputFile = parameters.getParameter< String >( "input-file" ); - this->initialData->setMesh( this->getMesh() ); - if( !this->initialData->boundLoad( inputFile ) ) - return false; - return true; + this->bindDofs( dofs ); + String inputFile = parameters.getParameter< String >( "input-file" ); + this->initialData->setMesh( this->getMesh() ); + std::cout<<"setInitialCondition" <<std::endl; + if(CommunicatorType::isDistributed()) + { + std::cout<<"Nodes Distribution: " << u->getMesh().getDistributedMesh()->printProcessDistr() << std::endl; + if(distributedIOType==Meshes::DistributedMeshes::MpiIO) + Meshes::DistributedMeshes::DistributedGridIO<MeshFunctionType,Meshes::DistributedMeshes::MpiIO> ::load(inputFile, *u ); + if(distributedIOType==Meshes::DistributedMeshes::LocalCopy) + Meshes::DistributedMeshes::DistributedGridIO<MeshFunctionType,Meshes::DistributedMeshes::LocalCopy> ::load(inputFile, *u ); + u->template synchronize<CommunicatorType>(); + } + else + { + if( !this->initialData->boundLoad( inputFile ) ) + std::cerr << "I am not able to load the initial condition from the file " << inputFile << "." << std::endl; + return false; + } + return true; } 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 27d2663416..001f4c69a4 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 @@ -85,25 +85,25 @@ solve( const MeshPointer& mesh, #ifdef HAVE_MPI int i = Communicators::MpiCommunicator::GetRank( Communicators::MpiCommunicator::AllGroup ); - printf( "Hello world from rank: %d ", i ); + //printf( "Hello world from rank: %d ", i ); //Communicators::MpiCommunicator::Request r = Communicators::MpiCommunicator::ISend( auxPtr, 0, 0, Communicators::MpiCommunicator::AllGroup ); - /*if( i == 1 ) - for( int k = 0; k < 16*16; k++ ) - aux[ k ] = 10; + if( i == 1 ) + /*for( int k = 0; k < 16*16; k++ ) + aux[ k ] = 10;*/ printf( "1: mesh x: %d\n", mesh->getDimensions().x() ); printf( "1: mesh y: %d\n", mesh->getDimensions().y() ); - aux.save("aux_proc1.tnl");*/ + //aux.save("aux_proc1.tnl"); if( i == 0 ) printf( "0: mesh x: %d\n", mesh->getDimensions().x() ); printf( "0: mesh y: %d\n", mesh->getDimensions().y() ); - aux.save("aux_proc0.tnl"); - for( int k = 0; k < 16*16; k++ ) + //aux.save("aux_proc0.tnl"); + /*for( int k = 0; k < mesh->getDimensions().x()*mesh->getDimensions().y(); k++ ) aux[ k ] = 10; - for( int k = 0; k < 16; k++ ){ - for( int l = 0; l < 16; l++ ) + for( int k = 0; k < mesh->getDimensions().x(); k++ ){ + for( int l = 0; l < mesh->getDimensions().y(); l++ ) printf("%f.2\t",aux[ k * 16 + l ] ); printf("\n"); - } + }*/ /*bool a = Communicators::MpiCommunicator::IsInitialized(); if( a ) -- GitLab