vtkMaterialInterfacePieceTransactionMatrix.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Kitware Inc.
2 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
3 // SPDX-License-Identifier: BSD-3-Clause
18 #ifndef vtkMaterialInterfacePieceTransactionMatrix_h
19 #define vtkMaterialInterfacePieceTransactionMatrix_h
20 
21 #include "vtkMaterialInterfacePieceTransaction.h" // for vtkMaterialInterfacePieceTransaction
22 #include "vtkPVVTKExtensionsFiltersMaterialInterfaceModule.h" //needed for exports
23 #include "vtkType.h" // for vtkIdType
24 #include <vector> // for std::vector
25 
26 class vtkCommunicator;
27 
29 {
30 public:
39  vtkMaterialInterfacePieceTransactionMatrix(int nFragments, int nProcs);
41 
46  void Initialize(int nFragments, int nProcs);
48 
52  void Clear();
57  vtkIdType GetNumberOfTransactions(int procId);
62  std::vector<vtkMaterialInterfacePieceTransaction>& GetTransactions(int fragmentId, int procId);
67  void PushTransaction(
68  int fragmentId, int procId, vtkMaterialInterfacePieceTransaction& transaction);
70 
74  void Broadcast(vtkCommunicator* comm, int srcProc);
75  //
76  void Print();
78 
82  {
83  return this->FlatMatrixSize +
84  this->NumberOfTransactions * sizeof(vtkMaterialInterfacePieceTransaction);
85  }
86 
87 private:
94  vtkIdType Pack(int*& buffer);
99  vtkIdType PackPartial(int*& buffer, int* rows, int nRows);
101 
105  int UnPack(int* buffer);
106  int UnPackPartial(int* buffer);
108  int NProcs;
109  int NFragments;
110  std::vector<vtkMaterialInterfacePieceTransaction>* Matrix;
111  vtkIdType FlatMatrixSize;
112  vtkIdType NumberOfTransactions;
113 };
114 //
115 inline std::vector<vtkMaterialInterfacePieceTransaction>&
117 {
118  int idx = fragmentId + procId * this->NFragments;
119  return this->Matrix[idx];
120 }
121 //
123 {
124  size_t nTransactions = 0;
126 
127  for (int fragmentId = 0; fragmentId < this->NFragments; ++fragmentId)
128  {
129  nTransactions += this->GetTransactions(fragmentId, procId).size();
130  }
131 
132  return static_cast<vtkIdType>(nTransactions);
133 }
134 #endif
Container to hold a sets of transactions (sends/recvs) indexed by fragment and proc, intended to facilitate moving fragment pieces around.
std::vector< vtkMaterialInterfacePieceTransaction > & GetTransactions(int fragmentId, int procId)
Given a proc and a fragment, return a ref to the associated list of transactions. ...
#define VTKPVVTKEXTENSIONSFILTERSMATERIALINTERFACE_EXPORT
vtkIdType GetNumberOfTransactions(int procId)
Get the number of transaction a given process will execute.
int vtkIdType
vtkIdType Capacity()
Tells how much memory the matrix has allocated.