ClearSynchronization.h 2.33 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//======================================================================================================================
//
//  This file is part of waLBerla. waLBerla is free software: you can
//  redistribute it and/or modify it under the terms of the GNU General Public
//  License as published by the Free Software Foundation, either version 3 of
//  the License, or (at your option) any later version.
//
//  waLBerla 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 General Public License
//  for more details.
//
//  You should have received a copy of the GNU General Public License along
//  with waLBerla (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
//
//! \file ClearSynchronization.h
//! \author Sebastian Eibl <sebastian.eibl@fau.de>
//
//======================================================================================================================

#pragma once

//*************************************************************************************************
// Includes
//*************************************************************************************************

#include "pe/rigidbody/BodyStorage.h"

#include "domain_decomposition/BlockStorage.h"

namespace walberla {
namespace pe {

//*************************************************************************************************
/*!\brief Removes all synchronization information.
 *
 * \param blocks BlockStorage of the simulation.
Jean-Noël Grad's avatar
Jean-Noël Grad committed
38
 * \param storageID BlockDataID of the pe storage.
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 */
inline
void clearSynchronization( BlockStorage& blocks, BlockDataID storageID )
{
   for (auto it = blocks.begin(); it != blocks.end(); ++it)
   {
      IBlock & currentBlock      = *it;
      Storage * storage          = currentBlock.getData< Storage >( storageID );
      BodyStorage& localStorage  = (*storage)[0];
      BodyStorage& shadowStorage = (*storage)[1];

      for( auto bodyIt = localStorage.begin(); bodyIt != localStorage.end(); ++bodyIt )
      {
         bodyIt->MPITrait.clearShadowOwners();
         bodyIt->MPITrait.clearBlockStates();
      }

      shadowStorage.clear();
   }
}
//*************************************************************************************************

}  // namespace pe
}  // namespace walberla