Commit e322f20e authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Added switch of periodic boundaries synchronization direction.

It is either from subdomain boundary to overlap or vice versa.
parent 8a659de4
Loading
Loading
Loading
Loading
+12 −17
Original line number Diff line number Diff line
@@ -49,6 +49,12 @@ class DistributedMeshSynchronizer< Functions::MeshFunction< Grid< MeshDimension,
      typedef typename DistributedGridType::CoordinatesType CoordinatesType;
      using SubdomainOverlapsType = typename DistributedGridType::SubdomainOverlapsType;

      enum PeriodicBoundariesCopyDirection
      {
         BoundaryToOverlap,
         OverlapToBoundary
      };

      DistributedMeshSynchronizer()
      {
         isSet = false;
@@ -108,22 +114,9 @@ class DistributedMeshSynchronizer< Functions::MeshFunction< Grid< MeshDimension,
            sendBuffers[ i ].setSize( sendSize );
            recieveBuffers[ i ].setSize( sendSize);

            //Periodic-BC copy from overlap into domain
            //if Im on boundary, and i is direction of the boundary i will swap source and destination
            //i do this only for basic 6 directions, 
            //because this swap at conners and edges produces writing multiple values at sam place in localsubdomain
            {
               if(  (  i==ZzYzXm || i==ZzYzXp 
                     ||i==ZzYmXz || i==ZzYpXz 
                     ||i==ZmYzXz || i==ZpYzXz ) 
                  && neighbors[ i ] == -1) 
               {
                  //swap begins
                  CoordinatesType tmp = sendBegin[i];
                  sendBegin[i]=recieveBegin[i];
                  recieveBegin[i]=tmp;
               }
            }
            if( this->periodicBoundariesCopyDirection == OverlapToBoundary &&
               neighbors[ i ] == -1 )
                  swap( sendBegin[i], recieveBegin[i] );
         }
     }

@@ -213,6 +206,8 @@ class DistributedMeshSynchronizer< Functions::MeshFunction< Grid< MeshDimension,
      Containers::Array<RealType, Device, Index> recieveBuffers[getNeighborCount()];
      Containers::StaticArray< getNeighborCount(), int > sendSizes;

      PeriodicBoundariesCopyDirection periodicBoundariesCopyDirection = BoundaryToOverlap;

      CoordinatesType sendDimensions[getNeighborCount()];
      CoordinatesType recieveDimensions[getNeighborCount()];
      CoordinatesType sendBegin[getNeighborCount()];