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