Commit d3aba369 authored by Vít Hanousek's avatar Vít Hanousek
Browse files

Without synchronization, refactorization of DistributedGrid and Sychronizer is needed.

parent 5e235292
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -11,6 +11,10 @@
#ifndef TNL_HEAT_EQUATION_H_
#define TNL_HEAT_EQUATION_H_

#ifdef HAVE_MPI
    #define USE_MPI
#endif

#include <TNL/Solvers/Solver.h>
#include <TNL/Solvers/FastBuildConfigTag.h>
#include <TNL/Solvers/BuildConfigTags.h>
+18 −0
Original line number Diff line number Diff line
@@ -24,6 +24,10 @@

#include "HeatEquationProblem.h"

#ifdef USE_MPI
    #include <TNL/Meshes/DistributedGridIO.h>
#endif

namespace TNL {
namespace Problems {

@@ -133,11 +137,18 @@ setInitialCondition( const Config::ParameterContainer& parameters,
{
   this->bindDofs( meshPointer, dofs );
   const String& initialConditionFile = parameters.getParameter< String >( "initial-condition" );
#ifdef USE_MPI
   File file;
   file.open( initialConditionFile+convertToString(MPI::COMM_WORLD.Get_rank()), IOMode::read );
   Meshes::DistributedGridIO<MeshFunctionType> ::load(file, *uPointer );
   file.close();
#else
   if( ! this->uPointer->boundLoad( initialConditionFile ) )
   {
      std::cerr << "I am not able to load the initial condition from the file " << initialConditionFile << "." << std::endl;
      return false;
   }
#endif
   return true;
}

@@ -187,8 +198,15 @@ makeSnapshot( const RealType& time,
   fileName.setFileNameBase( "u-" );
   fileName.setExtension( "tnl" );
   fileName.setIndex( step );
#ifdef USE_MPI
   File file;
   file.open( fileName.getFileName()+convertToString(MPI::COMM_WORLD.Get_rank()), IOMode::write );
   Meshes::DistributedGridIO<MeshFunctionType> ::save(file, *uPointer );
   file.close();
#else
   if( ! this->uPointer->save( fileName.getFileName() ) )
      return false;
#endif
   return true;
}

+4 −0
Original line number Diff line number Diff line
@@ -19,6 +19,10 @@
#include <TNL/Meshes/GridDetails/Traverser_Grid3D.h>
#include <TNL/Solvers/PDE/ExplicitUpdater.h>

#ifdef USE_MPI
    #include <TNL/Meshes/DistributedGridSynchronizer.h>
#endif


namespace TNL {
namespace Solvers {
+14 −0
Original line number Diff line number Diff line
@@ -16,6 +16,10 @@
#include <TNL/SharedPointer.h>
#include <TNL/Solvers/PDE/PDESolver.h>

#ifdef USE_MPI
    #include <TNL/Meshes/DistributedGrid.h>
#endif

namespace TNL {
namespace Solvers {
namespace PDE {   
@@ -45,6 +49,10 @@ class TimeDependentPDESolver : public PDESolver< typename Problem::RealType,

      TimeDependentPDESolver();

#ifdef USE_MPI
      ~TimeDependentPDESolver();
#endif

      static void configSetup( Config::ConfigDescription& config,
                               const String& prefix = "" );

@@ -84,6 +92,12 @@ class TimeDependentPDESolver : public PDESolver< typename Problem::RealType,

      MeshPointer meshPointer;

#ifdef USE_MPI
      MeshPointer globalMeshPointer;

      Meshes::DistributedGrid<MeshType> * distrGrid;
#endif

      DofVectorPointer dofsPointer;

      MeshDependentDataPointer meshDependentDataPointer;
+27 −0
Original line number Diff line number Diff line
@@ -30,6 +30,17 @@ TimeDependentPDESolver()
{
}

#ifdef USE_MPI
template< typename Problem,
          typename DiscreteSolver,
          typename TimeStepper >
TimeDependentPDESolver< Problem, DiscreteSolver, TimeStepper >::
~TimeDependentPDESolver()
{
    delete distrGrid;
}
#endif

template< typename Problem,
          typename DiscreteSolver,   
          typename TimeStepper >
@@ -62,6 +73,21 @@ setup( const Config::ParameterContainer& parameters,
    * Load the mesh from the mesh file
    */
   const String& meshFile = parameters.getParameter< String >( "mesh" );
#ifdef USE_MPI
   std::cout << "Loading a global mesh from the file " << meshFile << "...";
   if( ! this->globalMeshPointer->load( meshFile ) )
   {
      std::cerr << std::endl;
      std::cerr << "I am not able to load the global mesh from the file " << meshFile << "." << std::endl;
      return false;
   }
   std::cout << " [ OK ] " << std::endl;

   typename Meshes::DistributedGrid<MeshType>::CoordinatesType overlap;
   overlap.setValue(1);
   this->distrGrid=new Meshes::DistributedGrid<MeshType>(*globalMeshPointer,overlap);
   distrGrid->SetupGrid(*meshPointer);
#else
   std::cout << "Loading a mesh from the file " << meshFile << "...";
   if( ! this->meshPointer->load( meshFile ) )
   {
@@ -71,6 +97,7 @@ setup( const Config::ParameterContainer& parameters,
      return false;
   }
  std::cout << " [ OK ] " << std::endl;
#endif

   /****
    * Setup the problem
Loading