X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FParaMEDMEM%2FMPIAccessDEC.cxx;h=f6bd1732575d8c577b364d029b0278151df4aa5e;hb=740f93fb5c29f8a2b5439f25381c0963d854272e;hp=d05698790a44b50d78d530221d9296a1f6b4cf7b;hpb=48782c06022ca2caa36f849cb5a29ea4fe2aaa83;p=tools%2Fmedcoupling.git diff --git a/src/ParaMEDMEM/MPIAccessDEC.cxx b/src/ParaMEDMEM/MPIAccessDEC.cxx index d05698790..f6bd17325 100644 --- a/src/ParaMEDMEM/MPIAccessDEC.cxx +++ b/src/ParaMEDMEM/MPIAccessDEC.cxx @@ -1,27 +1,29 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D +// Copyright (C) 2007-2019 CEA/DEN, EDF R&D // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "MPIAccessDEC.hxx" +#include + using namespace std; -namespace ParaMEDMEM +namespace MEDCoupling { /*! @@ -49,8 +51,8 @@ namespace ParaMEDMEM { procs.insert(i) ; } - MPIProcessorGroup *mpilg = (MPIProcessorGroup *)&source_group; - _MPI_union_group = new ParaMEDMEM::MPIProcessorGroup( union_group->getCommInterface(),procs,mpilg->getWorldComm()); + MPIProcessorGroup *mpilg = static_cast(const_cast(&source_group)); + _MPI_union_group = new MEDCoupling::MPIProcessorGroup( union_group->getCommInterface(),procs,mpilg->getWorldComm()); delete union_group ; _my_rank = _MPI_union_group->myRank() ; _group_size = _MPI_union_group->size() ; @@ -73,7 +75,6 @@ namespace ParaMEDMEM _data_messages->resize( _group_size ) ; _time_interpolator = NULL ; _map_of_send_buffers = new map< int , SendBuffStruct * > ; - cout << "MPIAccessDEC" << _my_rank << " Asynchronous " << _asynchronous << endl ; } MPIAccessDEC::~MPIAccessDEC() @@ -102,10 +103,6 @@ namespace ParaMEDMEM double InterpPrecision, int nStepBefore, int nStepAfter ) { - cout << "MPIAccessDEC::SetTimeInterpolator" << _my_rank << " Asynchronous " - << _asynchronous << " TimeInterpolationMethod " << aTimeInterp - << " InterpPrecision " << InterpPrecision << " nStepBefore " << nStepBefore - << " nStepAfter " << nStepAfter << endl ; if ( _time_interpolator ) delete _time_interpolator ; switch ( aTimeInterp ) @@ -155,6 +152,11 @@ namespace ParaMEDMEM sts = _MPI_access->ISend( &((int *) sendbuf)[offset] , sendcount , sendtype , target , SendRequestId ) ; } + else if ( sendtype == MPI_LONG ) + { + sts = _MPI_access->ISend( &((long *) sendbuf)[offset] , sendcount , sendtype , + target , SendRequestId ) ; + } else { sts = _MPI_access->ISend( &((double *) sendbuf)[offset] , sendcount , sendtype , @@ -168,6 +170,11 @@ namespace ParaMEDMEM sts = _MPI_access->send( &((int *) sendbuf)[offset] , sendcount , sendtype , target , SendRequestId ) ; } + else if ( sendtype == MPI_LONG ) + { + sts = _MPI_access->send( &((long *) sendbuf)[offset] , sendcount , sendtype , + target , SendRequestId ) ; + } else { sts = _MPI_access->send( &((double *) sendbuf)[offset] , sendcount , sendtype , @@ -195,6 +202,11 @@ namespace ParaMEDMEM sts = _MPI_access->IRecv( &((int *) recvbuf)[offset] , recvcount , recvtype , target , RecvRequestId ) ; } + else if ( recvtype == MPI_LONG ) + { + sts = _MPI_access->IRecv( &((long *) recvbuf)[offset] , recvcount , recvtype , + target , RecvRequestId ) ; + } else { sts = _MPI_access->IRecv( &((double *) recvbuf)[offset] , recvcount , recvtype , @@ -208,6 +220,11 @@ namespace ParaMEDMEM sts = _MPI_access->recv( &((int *) recvbuf)[offset] , recvcount , recvtype , target , RecvRequestId ) ; } + else if ( recvtype == MPI_LONG ) + { + sts = _MPI_access->recv( &((long *) recvbuf)[offset] , recvcount , recvtype , + target , RecvRequestId ) ; + } else { sts = _MPI_access->recv( &((double *) recvbuf)[offset] , recvcount , recvtype , @@ -300,10 +317,6 @@ namespace ParaMEDMEM } else { - cout << "SendRecv" << _my_rank << " target " << target << " sendbuf " - << &((double *) sendbuf)[sendoffset] << " sendcount " << sendcount - << " recvbuf " << &((double *) recvbuf)[recvoffset] << " recvcount " - << recvcount << endl ; sts = _MPI_access->sendRecv( &((double *) sendbuf)[sendoffset] , sendcount , sendtype , target , SendRequestId , &((double *) recvbuf)[recvoffset] , @@ -448,12 +461,12 @@ namespace ParaMEDMEM . We assume that buffers are allocated with a new double[]. so a delete [] is done. - . The structure SendBuffStruct permit to keep the adress of the buffer + . The structure SendBuffStruct permit to keep the address of the buffer and to manage a reference counter of that buffer. It contains also MPI_Datatype for the delete [] (double *) ... when the counter is null. - . The map _MapOfSendBuffers etablish the correspondance between each + . The map _MapOfSendBuffers establish the correspondence between each RequestId given by a MPI_Access->ISend(...) and a SendBuffStruct for each "target" of a part of the buffer. @@ -572,10 +585,10 @@ namespace ParaMEDMEM { for ( target = 0 ; target < _group_size ; target++ ) { - int recvsize = recvcount*_MPI_access->extent( recvtype ) ; + int recvsize = (int)(recvcount*_MPI_access->extent( recvtype )); checkTime( recvcount , recvtype , target , false ) ; //=========================================================================== - //TODO : it is assumed actually that we have only 1 timestep before nad after + //TODO : it is assumed actually that we have only 1 timestep before and after //=========================================================================== if ( _time_interpolator && (*_time_messages)[target][0].time != -1 ) { @@ -721,7 +734,7 @@ namespace ParaMEDMEM { if ( recvcounts[target] ) { - int recvsize = recvcounts[target]*_MPI_access->extent( recvtype ) ; + int recvsize = (int)(recvcounts[target]*_MPI_access->extent( recvtype )); checkTime( recvcounts[target] , recvtype , target , false ) ; //=========================================================================== //TODO : it is assumed actually that we have only 1 timestep before nad after @@ -909,10 +922,13 @@ namespace ParaMEDMEM { if ( WithWait ) { - cout << "CheckSent" << _my_rank << " " << i << "./" << nSendRequest - << " SendRequestId " << ArrayOfSendRequests[i] << " MPITarget " - << _MPI_access->MPITarget(ArrayOfSendRequests[i]) << " MPITag " - << _MPI_access->MPITag(ArrayOfSendRequests[i]) << " Wait :" << endl ; + if (SendTrace) + { + cout << "CheckSent" << _my_rank << " " << i << "./" << nSendRequest + << " SendRequestId " << ArrayOfSendRequests[i] << " MPITarget " + << _MPI_access->MPITarget(ArrayOfSendRequests[i]) << " MPITag " + << _MPI_access->MPITag(ArrayOfSendRequests[i]) << " Wait :" << endl ; + } sts = _MPI_access->wait( ArrayOfSendRequests[i] ) ; } else