dune-grid-glue  2.3.0
gridglue.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
10 #ifndef DUNE_GRIDGLUE_GRIDGLUE_HH
11 #define DUNE_GRIDGLUE_GRIDGLUE_HH
12 
13 #include <dune/common/array.hh>
14 #include <dune/common/exceptions.hh>
15 #include <dune/common/iteratorfacades.hh>
16 #include <dune/common/shared_ptr.hh>
17 
20 
21 #if DUNE_VERSION_NEWER_REV(DUNE_COMMON,2,3,0)
22 #include <dune/common/parallel/mpitraits.hh>
23 #include <dune/common/parallel/mpicollectivecommunication.hh>
24 #else
25 #include <dune/common/mpitraits.hh>
26 #include <dune/common/mpicollectivecommunication.hh>
27 #endif
28 #include <dune/common/parallel/indexset.hh>
29 #include <dune/common/parallel/plocalindex.hh>
30 #include <dune/common/parallel/remoteindices.hh>
31 #include <dune/common/parallel/communicator.hh>
32 #include <dune/common/parallel/interface.hh>
33 
34 namespace Dune {
35 namespace GridGlue {
36 
39  Domain = 0,
40  Target = 1
41 };
42 
43 // forward declarations
44 template<typename P0, typename P1>
45 class GridGlue;
46 
47 template<typename P0, typename P1>
49 
50 template<typename P0, typename P1, int inside, int outside>
52 
53 template<typename P0, typename P1, int inside, int outside>
55 
56 template<typename P0, typename P1>
58 
59 template<typename P0, typename P1, int P>
60 struct GridGlueView;
61 
62 template<typename P0, typename P1>
63 struct GridGlueView<P0,P1,0>
64 {
65  typedef P0 Patch;
67  typedef typename Patch::GridView::template Codim<0>::Entity GridElement;
68  static const P0& patch(const GridGlue<P0,P1>& g)
69  {
70  return *g.patch0_;
71  }
72 };
73 
74 template<typename P0, typename P1>
75 struct GridGlueView<P0,P1,1>
76 {
77  typedef P1 Patch;
79  typedef typename Patch::GridView::template Codim<0>::Entity GridElement;
80  static const P1& patch(const GridGlue<P0,P1>& g)
81  {
82  return *g.patch1_;
83  }
84 };
85 
95 template<typename P0, typename P1>
96 class GridGlue
97 {
98 private:
99 
100  /* F R I E N D S */
101 
102  friend class IntersectionData<P0,P1>;
103  friend class Intersection<P0,P1,0,1>;
104  friend class Intersection<P0,P1,1,0>;
105  friend class IntersectionIterator<P0,P1,0,1>;
106  friend class IntersectionIterator<P0,P1,1,0>;
107  friend class IntersectionIndexSet<P0,P1>;
108  friend struct GridGlueView<P0,P1,0>;
109  friend struct GridGlueView<P0,P1,1>;
110 
111  /* P R I V A T E T Y P E S */
112 
114  typedef ::Dune::GridGlue::GlobalId GlobalId;
115 
117  typedef Dune::ParallelLocalIndex <Dune::PartitionType> LocalIndex;
118 
120  typedef Dune::ParallelIndexSet <GlobalId, LocalIndex> PIndexSet;
121 
122 public:
123 
124  /* P U B L I C T Y P E S A N D C O N S T A N T S */
125 
127  typedef typename P0::GridView Grid0View;
128 
130  typedef typename Grid0View::Grid Grid0;
131 
135  typedef Grid0 DomainGridType DUNE_DEPRECATED;
136 
138  typedef P0 Grid0Patch;
139 
141  enum {
143  grid0dim = Grid0Patch::dim,
144  domdim = Grid0Patch::dim,
146  grid0dimworld = Grid0Patch::dimworld,
147  domdimworld = Grid0Patch::dimworld
148  };
149 
151  typedef typename P1::GridView Grid1View;
152 
154  typedef typename Grid1View::Grid Grid1;
155 
159  typedef Grid1 TargetGridType DUNE_DEPRECATED;
160 
162  typedef P1 Grid1Patch;
163 
165  typedef unsigned int IndexType;
166 
168  enum {
170  tardim = Grid1Patch::dim,
171  grid1dim = Grid1Patch::dim,
173  tardimworld = Grid1Patch::dimworld,
174  grid1dimworld = Grid1Patch::dimworld
175  };
176 
177 
179  enum {
182  dimworld = ((int)Grid0Patch::dimworld > (int)Grid1Patch::dimworld) ? (int)Grid0Patch::dimworld : (int)Grid1Patch::dimworld
183 
184  };
185 
189  typedef typename Grid0View::ctype ctype;
190 
192  typedef Dune::FieldVector<ctype, dimworld> Coords;
193 
195  typedef typename Grid0View::Traits::template Codim<0>::Entity Grid0Element;
196 
200  typedef typename Grid0View::Traits::template Codim<0>::Entity DomainElement DUNE_DEPRECATED;
201 
203  typedef typename Grid0View::Traits::template Codim<0>::EntityPointer Grid0ElementPtr;
204 
208  typedef typename Grid0View::Traits::template Codim<0>::EntityPointer DomainElementPtr DUNE_DEPRECATED;
209 
211  typedef typename Grid0View::Traits::template Codim<Grid0::dimension>::Entity Grid0Vertex;
212 
216  typedef typename Grid0View::Traits::template Codim<Grid0::dimension>::Entity DomainVertex DUNE_DEPRECATED;
217 
219  typedef typename Grid0View::Traits::template Codim<Grid0::dimension>::EntityPointer Grid0VertexPtr;
220 
224  typedef typename Grid0View::Traits::template Codim<Grid0::dimension>::EntityPointer DomainVertexPtr DUNE_DEPRECATED;
225 
227  typedef typename Grid1View::Traits::template Codim<0>::Entity Grid1Element;
228 
232  typedef typename Grid1View::Traits::template Codim<0>::Entity TargetElement DUNE_DEPRECATED;
233 
235  typedef typename Grid1View::Traits::template Codim<0>::EntityPointer Grid1ElementPtr;
236 
240  typedef typename Grid1View::Traits::template Codim<0>::EntityPointer TargetElementPtr DUNE_DEPRECATED;
241 
243  typedef typename Grid1View::Traits::template Codim<Grid1::dimension>::Entity Grid1Vertex;
244 
248  typedef typename Grid1View::Traits::template Codim<Grid1::dimension>::Entity TargetVertex DUNE_DEPRECATED;
249 
251  typedef typename Grid1View::Traits::template Codim<Grid1::dimension>::EntityPointer Grid1VertexPtr;
252 
256  typedef typename Grid1View::Traits::template Codim<Grid1::dimension>::EntityPointer TargetVertexPtr DUNE_DEPRECATED;
257 
259  typedef ::Merger<ctype,
260  Grid0::dimension - Grid0Patch::codim,
261  Grid1::dimension - Grid1Patch::codim,
263 
266 
269 
276 
277 private:
278 
279  /* M E M B E R V A R I A B L E S */
280 
282  const std::shared_ptr<const Grid0Patch> patch0_;
283 
285  const std::shared_ptr<const Grid1Patch> patch1_;
286 
288  const std::shared_ptr<Merger> merger_;
289 
291  IndexType index__sz;
292 
293 #if HAVE_MPI
294  MPI_Comm mpicomm_;
296 
298  PIndexSet patch0_is_;
299 
301  PIndexSet patch1_is_;
302 
304  Dune::RemoteIndices<PIndexSet> remoteIndices_;
305 #endif // HAVE_MPI
306 
309 
311  mutable std::vector<IntersectionData> intersections_;
312 
313 protected:
314 
331  void mergePatches(const std::vector<Dune::FieldVector<ctype,dimworld> >& patch0coords,
332  const std::vector<unsigned int>& patch0entities,
333  const std::vector<Dune::GeometryType>& patch0types,
334  const int patch0rank,
335  const std::vector<Dune::FieldVector<ctype,dimworld> >& patch1coords,
336  const std::vector<unsigned int>& patch1entities,
337  const std::vector<Dune::GeometryType>& patch1types,
338  const int patch1rank);
339 
340 
341  template<typename Extractor>
342  void extractGrid (const Extractor & extractor,
343  std::vector<Dune::FieldVector<ctype, dimworld> > & coords,
344  std::vector<unsigned int> & faces,
345  std::vector<Dune::GeometryType>& geometryTypes) const;
346 
347 public:
348 
349  /* C O N S T R U C T O R S A N D D E S T R U C T O R S */
350 
361  GridGlue(const Grid0Patch& gp0, const Grid1Patch& gp1, Merger* merger);
362  GridGlue(const std::shared_ptr<const Grid0Patch> gp0, const std::shared_ptr<const Grid1Patch> gp1, const std::shared_ptr<Merger> merger);
363 
364  /* G E T T E R S */
365 
367  template<int P>
368  const typename GridGlueView<P0,P1,P>::Patch & patch() const
369  {
370  return GridGlueView<P0,P1,P>::patch(*this);
371  }
372 
377  template<int P>
379  {
380  return GridGlueView<P0,P1,P>::patch(*this).gridView();
381  }
382 
383 
384  /* F U N C T I O N A L I T Y */
385 
386  void build();
387 
388  /* I N T E R S E C T I O N S A N D I N T E R S E C T I O N I T E R A T O R S */
389 
396  template<int I>
398  {
399  return typename GridGlueView<P0,P1,I>::IntersectionIterator(this, 0);
400  }
401 
402 
409  template<int I>
411  {
412  return typename GridGlueView<P0,P1,I>::IntersectionIterator(this, index__sz);
413  }
414 
415 
427  template<class DataHandleImp, class DataTypeImp>
429  Dune::InterfaceType iftype, Dune::CommunicationDirection dir) const
430  {
432  typedef typename DataHandle::DataType DataType;
433 
434 #if HAVE_MPI
435 
436  if (mpicomm_ != MPI_COMM_SELF)
437  {
438  /*
439  * P A R A L L E L V E R S I O N
440  */
441  // setup communication interfaces
442  Dune::dinfo << "GridGlue: parallel communication" << std::endl;
443  typedef Dune::EnumItem <Dune::PartitionType, Dune::InteriorEntity> InteriorFlags;
444  typedef Dune::EnumItem <Dune::PartitionType, Dune::OverlapEntity> OverlapFlags;
445  typedef Dune::EnumRange <Dune::PartitionType, Dune::InteriorEntity, Dune::GhostEntity> AllFlags;
446  Dune::Interface interface;
447  assert(remoteIndices_.isSynced());
448  switch (iftype)
449  {
450  case Dune::InteriorBorder_InteriorBorder_Interface :
451  interface.build (remoteIndices_, InteriorFlags(), InteriorFlags() );
452  break;
453  case Dune::InteriorBorder_All_Interface :
454  if (dir == Dune::ForwardCommunication)
455  interface.build (remoteIndices_, InteriorFlags(), AllFlags() );
456  else
457  interface.build (remoteIndices_, AllFlags(), InteriorFlags() );
458  break;
459  case Dune::Overlap_OverlapFront_Interface :
460  interface.build (remoteIndices_, OverlapFlags(), OverlapFlags() );
461  break;
462  case Dune::Overlap_All_Interface :
463  if (dir == Dune::ForwardCommunication)
464  interface.build (remoteIndices_, OverlapFlags(), AllFlags() );
465  else
466  interface.build (remoteIndices_, AllFlags(), OverlapFlags() );
467  break;
468  case Dune::All_All_Interface :
469  interface.build (remoteIndices_, AllFlags(), AllFlags() );
470  break;
471  default :
472  DUNE_THROW(Dune::NotImplemented, "GridGlue::communicate for interface " << iftype << " not implemented");
473  }
474 
475  // setup communication info (class needed to tunnel all info to the operator)
477  CommInfo commInfo;
478  commInfo.dir = dir;
479  commInfo.gridglue = this;
480  commInfo.data = &data;
481 
482  // create communicator
483  Dune::BufferedCommunicator bComm ;
484  bComm.template build< CommInfo >(commInfo, commInfo, interface);
485 
486  // do communication
487  // choose communication direction.
488  if (dir == Dune::ForwardCommunication)
489  bComm.forward< Dune::GridGlue::ForwardOperator >(commInfo, commInfo);
490  else
491  bComm.backward< Dune::GridGlue::BackwardOperator >(commInfo, commInfo);
492  }
493  else
494 #endif // HAVE_MPI
495  {
496  /*
497  * S E Q U E N T I A L V E R S I O N
498  */
499  Dune::dinfo << "GridGlue: sequential fallback communication" << std::endl;
500 
501  // get comm buffer size
502  int ssz = size() * 10; // times data per intersection
503  int rsz = size() * 10;
504 
505  // allocate send/receive buffer
506  DataType* sendbuffer = new DataType[ssz];
507  DataType* receivebuffer = new DataType[rsz];
508 
509  // iterators
510  Grid0IntersectionIterator rit = ibegin<0>();
511  Grid0IntersectionIterator ritend = iend<0>();
512 
513  // gather
514  Dune::GridGlue::StreamingMessageBuffer<DataType> gatherbuffer(sendbuffer);
515  for (; rit != ritend; ++rit)
516  {
517  /*
518  we need to have to variants depending on the communication direction.
519  */
520  if (dir == Dune::ForwardCommunication)
521  {
522  /*
523  dir : Forward (grid0 -> grid1)
524  */
525  if (rit->self())
526  {
527  data.gather(gatherbuffer, rit->inside(), *rit);
528  }
529  }
530  else // (dir == Dune::BackwardCommunication)
531  {
532  /*
533  dir : Backward (grid1 -> grid0)
534  */
535  if (rit->neighbor())
536  {
537  data.gather(gatherbuffer, rit->outside(), rit->flip());
538  }
539  }
540  }
541 
542  assert(ssz == rsz);
543  for (int i=0; i<ssz; i++)
544  receivebuffer[i] = sendbuffer[i];
545 
546  // scatter
547  Dune::GridGlue::StreamingMessageBuffer<DataType> scatterbuffer(receivebuffer);
548  for (rit = ibegin<0>(); rit != ritend; ++rit)
549  {
550  /*
551  we need to have to variants depending on the communication direction.
552  */
553  if (dir == Dune::ForwardCommunication)
554  {
555  /*
556  dir : Forward (grid0 -> grid1)
557  */
558  if (rit->neighbor())
559  data.scatter(scatterbuffer, rit->outside(), rit->flip(),
560  data.size(*rit));
561  }
562  else // (dir == Dune::BackwardCommunication)
563  {
564  /*
565  dir : Backward (grid1 -> grid0)
566  */
567  if (rit->self())
568  data.scatter(scatterbuffer, rit->inside(), *rit,
569  data.size(*rit));
570  }
571  }
572 
573  // cleanup pointers
574  delete[] sendbuffer;
575  delete[] receivebuffer;
576  }
577  }
578 
579  /*
580  * @brief return an IndexSet mapping from Intersection to IndexType
581  */
582  IndexSet indexSet() const
583  {
584  return IndexSet(this);
585  }
586 
587 #if QUICKHACK_INDEX
588  // indexset size
589  size_t indexSet_size() const
590  {
591  return index__sz;
592  }
593 
594 #endif
595 
596  Intersection getIntersection(int i) const
597  {
598  return Intersection(this, & intersections_[i]);
599  }
600 
601  size_t size() const
602  {
603  return index__sz;
604  }
605 
606 };
607 
608 } // end namespace GridGlue
609 } // end namespace Dune
610 
611 #include "adapter/gridglue.cc"
612 
613 #include "adapter/intersection.hh"
616 
617 #endif // DUNE_GRIDGLUE_GRIDGLUE_HH
Patch::GridView::template Codim< 0 >::Entity GridElement
Definition: gridglue.hh:79
Dune::GridGlue::IntersectionIterator< P0, P1, 1, 0 > IntersectionIterator
Definition: gridglue.hh:78
Grid0View::Traits::template Codim< 0 >::Entity Grid0Element
The type of the Grid0 elements.
Definition: gridglue.hh:195
Dune::CommunicationDirection dir
Definition: gridgluecommunicate.hh:285
Dune::GridGlue::IntersectionIterator< P0, P1, 1, 0 > Grid1IntersectionIterator
Definition: gridglue.hh:275
static const P0 & patch(const GridGlue< P0, P1 > &g)
Definition: gridglue.hh:68
void scatter(MessageBufferImp &buff, const EntityType &e, const RISType &i, size_t n)
Definition: gridgluecommunicate.hh:115
P0::GridView Grid0View
GridView of grid 0 (aka domain grid)
Definition: gridglue.hh:127
storage class for Dune::GridGlue::Intersection related data
Definition: gridglue.hh:48
const GridGlue * gridglue
Definition: gridgluecommunicate.hh:278
GridOrdering
Definition: gridglue.hh:38
Dune::GridGlue::IntersectionIndexSet< P0, P1 > IndexSet
Type of remote intersection indexSet.
Definition: gridglue.hh:268
Dimension of the grid 0 extractor.
Definition: gridglue.hh:143
GridGlueView< P0, P1, I >::IntersectionIterator ibegin() const
gets an iterator over all remote intersections in the merged grid between grid0 and grid1 ...
Definition: gridglue.hh:397
void gather(MessageBufferImp &buff, const EntityType &e, const RISType &i) const
pack data from user to message buffer
Definition: gridgluecommunicate.hh:101
const GridGlueView< P0, P1, P >::Patch & patch() const
Definition: gridglue.hh:368
P1 Patch
Definition: gridglue.hh:77
describes the features of a data handle for communication in parallel runs using the GridGlue::commun...
Definition: gridgluecommunicate.hh:73
void communicate(Dune::GridGlue::CommDataHandle< DataHandleImp, DataTypeImp > &data, Dune::InterfaceType iftype, Dune::CommunicationDirection dir) const
Communicate information on the MergedGrid of a GridGlue.
Definition: gridglue.hh:428
Grid1View::Traits::template Codim< Grid1::dimension >::EntityPointer Grid1VertexPtr
Pointer type to Grid1 vertices.
Definition: gridglue.hh:251
Dune::FieldVector< ctype, dimworld > Coords
The type used for coordinate vectors.
Definition: gridglue.hh:192
Intersection getIntersection(int i) const
Definition: gridglue.hh:596
void build()
Definition: gridglue.cc:183
Grid0View::Grid Grid0
Grid 0 type.
Definition: gridglue.hh:130
Grid1View::Traits::template Codim< 0 >::Entity Grid1Element
The type of the Grid1 elements.
Definition: gridglue.hh:227
Model of the Intersection concept provided by GridGlue.
P0 Grid0Patch
Coupling patch of grid 0.
Definition: gridglue.hh:138
Grid0View::Traits::template Codim< 0 >::EntityPointer Grid0ElementPtr
Pointer type to Grid0 elements.
Definition: gridglue.hh:203
Definition: gridglue.hh:34
P0 Patch
Definition: gridglue.hh:65
P1::GridView Grid1View
GridView of grid 1 (aka target grid)
Definition: gridglue.hh:151
World dimension of the grid 1 extractor.
Definition: gridglue.hh:173
Definition: gridgluecommunicate.hh:22
static const P1 & patch(const GridGlue< P0, P1 > &g)
Definition: gridglue.hh:80
World dimension of the grid 0 extractor.
Definition: gridglue.hh:146
const GridGlueView< P0, P1, P >::Patch::GridView & gridView() const
getter for the GridView of patch P
Definition: gridglue.hh:378
forward gather scatter to user defined CommInfo class
Definition: gridgluecommunicate.hh:190
Grid0View::Traits::template Codim< Grid0::dimension >::EntityPointer DomainVertexPtr
Pointer type to Grid0 vertices.
Definition: gridglue.hh:224
Dimension of the grid 1 extractor.
Definition: gridglue.hh:170
::Dune::GridGlue::CommDataHandle< DataHandleImp, DataTypeImp > * data
Definition: gridgluecommunicate.hh:279
size_t size(RISType &i) const
Definition: gridgluecommunicate.hh:89
Grid0View::Traits::template Codim< Grid0::dimension >::Entity DomainVertex
The type of the Grid0 vertices.
Definition: gridglue.hh:216
GridGlueView< P0, P1, I >::IntersectionIterator iend() const
gets the (general) end-iterator for grid glue iterations
Definition: gridglue.hh:410
Definition: gridgluecommunicate.hh:138
Dune::GridGlue::Intersection< P0, P1, 0, 1 > Intersection
Type of remote intersection objects.
Definition: gridglue.hh:265
Definition: gridglue.hh:174
Grid1View::Traits::template Codim< 0 >::EntityPointer TargetElementPtr
Pointer type to Grid1 elements.
Definition: gridglue.hh:240
Grid0View::ctype ctype
The type used for coordinates.
Definition: gridglue.hh:189
::Merger< ctype, Grid0::dimension-Grid0Patch::codim, Grid1::dimension-Grid1Patch::codim, dimworld > Merger
Instance of a Merger.
Definition: gridglue.hh:262
Grid1View::Traits::template Codim< Grid1::dimension >::EntityPointer TargetVertexPtr
Pointer type to Grid1 vertices.
Definition: gridglue.hh:256
Grid1 TargetGridType
Grid 1 type.
Definition: gridglue.hh:159
IndexSet indexSet() const
Definition: gridglue.hh:582
Implement iterators over GridGlue intersections.
Grid0View::Traits::template Codim< 0 >::EntityPointer DomainElementPtr
Pointer type to Grid0 elements.
Definition: gridglue.hh:208
Definition: gridglue.hh:54
Definition: gridglue.hh:60
Definition: gridglue.hh:39
export the world dimension : maximum of the two extractor world dimensions
Definition: gridglue.hh:182
Definition: gridglue.hh:147
Definition: gridglue.hh:40
The intersection of two entities of the two patches of a GridGlue.
Definition: gridglue.hh:51
Grid0View::Traits::template Codim< Grid0::dimension >::Entity Grid0Vertex
The type of the Grid0 vertices.
Definition: gridglue.hh:211
Dune::GridGlue::IntersectionIterator< P0, P1, 0, 1 > IntersectionIterator
Definition: gridglue.hh:66
void mergePatches(const std::vector< Dune::FieldVector< ctype, dimworld > > &patch0coords, const std::vector< unsigned int > &patch0entities, const std::vector< Dune::GeometryType > &patch0types, const int patch0rank, const std::vector< Dune::FieldVector< ctype, dimworld > > &patch1coords, const std::vector< unsigned int > &patch1entities, const std::vector< Dune::GeometryType > &patch1types, const int patch1rank)
after building the merged grid the intersection can be updated through this method (for internal use)...
Definition: gridglue.cc:449
Grid1View::Grid Grid1
Grid 1 type.
Definition: gridglue.hh:154
Grid0View::Traits::template Codim< Grid0::dimension >::EntityPointer Grid0VertexPtr
Pointer type to Grid0 vertices.
Definition: gridglue.hh:219
Definition: gridglue.hh:144
Grid1View::Traits::template Codim< Grid1::dimension >::Entity TargetVertex
The type of the Grid1 vertices.
Definition: gridglue.hh:248
Grid1View::Traits::template Codim< Grid1::dimension >::Entity Grid1Vertex
The type of the Grid1 vertices.
Definition: gridglue.hh:243
Patch::GridView::template Codim< 0 >::Entity GridElement
Definition: gridglue.hh:67
void extractGrid(const Extractor &extractor, std::vector< Dune::FieldVector< ctype, dimworld > > &coords, std::vector< unsigned int > &faces, std::vector< Dune::GeometryType > &geometryTypes) const
Definition: gridglue.cc:536
Dune::GridGlue::IntersectionIterator< P0, P1, 0, 1 > Grid0IntersectionIterator
Type of the iterator that iterates over remove intersections.
Definition: gridglue.hh:273
Definition: gridglue.hh:57
GridGlue(const Grid0Patch &gp0, const Grid1Patch &gp1, Merger *merger)
constructor
Definition: gridglue.cc:161
Describes the parallel communication interface class for Dune::GridGlue.
Grid0View::Traits::template Codim< 0 >::Entity DomainElement
The type of the Grid0 elements.
Definition: gridglue.hh:200
Grid0 DomainGridType
Grid 0 type.
Definition: gridglue.hh:135
Grid1View::Traits::template Codim< 0 >::Entity TargetElement
The type of the Grid1 elements.
Definition: gridglue.hh:232
Grid1View::Traits::template Codim< 0 >::EntityPointer Grid1ElementPtr
Pointer type to Grid1 elements.
Definition: gridglue.hh:235
size_t size() const
Definition: gridglue.hh:601
Provides codimension-independent methods for grid extraction.
Definition: extractor.hh:48
unsigned int IndexType
Definition: gridglue.hh:165
collects all GridGlue data requried for communication
Definition: gridgluecommunicate.hh:268
sequential adapter to couple two grids at specified close together boundaries
Definition: gridglue.hh:45
Definition: gridglue.hh:171
P1 Grid1Patch
Coupling patch of grid 1.
Definition: gridglue.hh:162