Commit 7ce90375 authored by Matouš Fencl's avatar Matouš Fencl Committed by Tomáš Oberhuber
Browse files

MPI ready in tnlDirectEikonal*

parent da74359c
Loading
Loading
Loading
Loading
+0 −2
Original line number Original line Diff line number Diff line
@@ -25,8 +25,6 @@
#include <solvers/pde/tnlLinearSystemAssembler.h>
#include <solvers/pde/tnlLinearSystemAssembler.h>
#include <functions/tnlMeshFunction.h>
#include <functions/tnlMeshFunction.h>


#include <TNL/Meshes/DistributedMeshes/DistributedGridIO.h>

template< typename Mesh,
template< typename Mesh,
		    typename DifferentialOperator,
		    typename DifferentialOperator,
		    typename BoundaryCondition,
		    typename BoundaryCondition,
+4 −16
Original line number Original line Diff line number Diff line
@@ -123,23 +123,11 @@ setInitialCondition( const Config::ParameterContainer& parameters,
{
{
  this->bindDofs( mesh, dofs );
  this->bindDofs( mesh, dofs );
  const String& initialConditionFile = parameters.getParameter< String >( "initial-condition" );
  const String& initialConditionFile = parameters.getParameter< String >( "initial-condition" );
  if(CommunicatorType::isDistributed())
  {
    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>();
  }
  else
  {
  if( ! this->solution.boundLoad( initialConditionFile ) )
  if( ! this->solution.boundLoad( initialConditionFile ) )
  {
  {
    std::cerr << "I am not able to load the initial condition from the file " << initialConditionFile << "." <<std::endl;
    std::cerr << "I am not able to load the initial condition from the file " << initialConditionFile << "." <<std::endl;
    return false;
    return false;
  }
  }
  }
  return true;
  return true;
}
}


+3 −3
Original line number Original line Diff line number Diff line
@@ -99,7 +99,7 @@ tnlDirectEikonalMethodsBase< Meshes::Grid< 2, Real, Device, Index > >::
updateBlocks( InterfaceMapType interfaceMap,
updateBlocks( InterfaceMapType interfaceMap,
        MeshFunctionType aux,
        MeshFunctionType aux,
        MeshFunctionType helpFunc,
        MeshFunctionType helpFunc,
        ArrayContainer BlockIterHost, IndexType numThreadsPerBlock/*, Real **sArray*/ )
        ArrayContainer BlockIterHost, int numThreadsPerBlock/*, Real **sArray*/ )
{
{
#pragma omp parallel for schedule( dynamic )
#pragma omp parallel for schedule( dynamic )
  for( IndexType i = 0; i < BlockIterHost.getSize(); i++ )
  for( IndexType i = 0; i < BlockIterHost.getSize(); i++ )
@@ -267,13 +267,13 @@ updateBlocks( InterfaceMapType interfaceMap,
template< typename Real,
template< typename Real,
        typename Device,
        typename Device,
        typename Index >
        typename Index >
template< IndexType sizeSArray >
template< int sizeSArray >
void
void
tnlDirectEikonalMethodsBase< Meshes::Grid< 3, Real, Device, Index > >::
tnlDirectEikonalMethodsBase< Meshes::Grid< 3, Real, Device, Index > >::
updateBlocks( const InterfaceMapType interfaceMap,
updateBlocks( const InterfaceMapType interfaceMap,
        const MeshFunctionType aux,
        const MeshFunctionType aux,
        MeshFunctionType& helpFunc,
        MeshFunctionType& helpFunc,
        ArrayContainer BlockIterHost, IndexType numThreadsPerBlock/*, Real **sArray*/ )
        ArrayContainer BlockIterHost, int numThreadsPerBlock/*, Real **sArray*/ )
{  
{  
//#pragma omp parallel for schedule( dynamic )
//#pragma omp parallel for schedule( dynamic )
  for( IndexType i = 0; i < BlockIterHost.getSize(); i++ )
  for( IndexType i = 0; i < BlockIterHost.getSize(); i++ )
+10 −10
Original line number Original line Diff line number Diff line
@@ -85,25 +85,25 @@ solve( const MeshPointer& mesh,
  
  
#ifdef HAVE_MPI
#ifdef HAVE_MPI
  int i = Communicators::MpiCommunicator::GetRank( Communicators::MpiCommunicator::AllGroup );
  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 );
  //Communicators::MpiCommunicator::Request r = Communicators::MpiCommunicator::ISend( auxPtr, 0, 0, Communicators::MpiCommunicator::AllGroup );
  /*if( i == 1 )
  if( i == 1 )
    for( int k = 0; k < 16*16; k++ )
    /*for( int k = 0; k < 16*16; k++ )
      aux[ k ] = 10;
      aux[ k ] = 10;*/
    printf( "1: mesh x: %d\n", mesh->getDimensions().x() );
    printf( "1: mesh x: %d\n", mesh->getDimensions().x() );
    printf( "1: mesh y: %d\n", mesh->getDimensions().y() );
    printf( "1: mesh y: %d\n", mesh->getDimensions().y() );
    aux.save("aux_proc1.tnl");*/
    //aux.save("aux_proc1.tnl");
  if( i == 0 )
  if( i == 0 )
    printf( "0: mesh x: %d\n", mesh->getDimensions().x() );
    printf( "0: mesh x: %d\n", mesh->getDimensions().x() );
    printf( "0: mesh y: %d\n", mesh->getDimensions().y() );
    printf( "0: mesh y: %d\n", mesh->getDimensions().y() );
    aux.save("aux_proc0.tnl");
    //aux.save("aux_proc0.tnl");
    for( int k = 0; k < 16*16; k++ )
    /*for( int k = 0; k < mesh->getDimensions().x()*mesh->getDimensions().y(); k++ )
      aux[ k ] = 10;
      aux[ k ] = 10;
    for( int k = 0; k < 16; k++ ){
    for( int k = 0; k < mesh->getDimensions().x(); k++ ){
      for( int l = 0; l < 16; l++ )
      for( int l = 0; l < mesh->getDimensions().y(); l++ )
        printf("%f.2\t",aux[ k * 16 + l ] );
        printf("%f.2\t",aux[ k * 16 + l ] );
    printf("\n");
    printf("\n");
    }
    }*/
    
    
  /*bool a = Communicators::MpiCommunicator::IsInitialized();
  /*bool a = Communicators::MpiCommunicator::IsInitialized();
  if( a )
  if( a )