dune-grid  2.11
geometrygrid/backuprestore.hh
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
2 // SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
3 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
4 // vi: set et ts=4 sw=2 sts=2:
5 #ifndef DUNE_GEOGRID_BACKUPRESTORE_HH
6 #define DUNE_GEOGRID_BACKUPRESTORE_HH
7 
8 #include <type_traits>
9 
10 #include <dune/common/exceptions.hh>
12 
15 
16 namespace Dune
17 {
18 
19  namespace GeoGrid
20  {
21 
22  // BackupRestoreFacilities
23  // -----------------------
24 
25  template< class Grid, bool hasBackupRestoreFacilities = Capabilities::hasBackupRestoreFacilities< Grid > ::v >
27  {};
28 
29  template< class Grid >
31  {
33 
34  protected:
36  {}
37 
38  private:
39  BackupRestoreFacilities ( const This & );
40  This &operator= ( const This & );
41 
42  protected:
43  const Grid &asImp () const
44  {
45  return static_cast< const Grid & >( *this );
46  }
47 
48  Grid &asImp ()
49  {
50  return static_cast< Grid & >( *this );
51  }
52  };
53 
54  } // namespace GeoGrid
55 
56 
57 
58  // BackupRestoreFacility for GeometryGrid
59  // --------------------------------------
60 
61  template< class HostGrid, class CoordFunction, class Allocator >
62  struct BackupRestoreFacility< GeometryGrid< HostGrid, CoordFunction, Allocator > >
63  {
66 
68  template <class Output>
69  static void backup ( const Grid &grid, const Output &filename_or_stream )
70  {
71  // notice: We should also backup the coordinate function
72  HostBackupRestoreFacility::backup( grid.hostGrid(), filename_or_stream );
73  }
74 
76  template <class Input>
77  static Grid *restore ( const Input &filename_or_stream )
78  {
79  // notice: assumes the CoordFunction to be default-constructible
80  return restore_impl(filename_or_stream, std::is_default_constructible<CoordFunction>{});
81  }
82 
83  private:
84  template <class Input>
85  static Grid *restore_impl ( const Input &filename_or_stream, std::true_type )
86  {
87  // notice: We should also restore the coordinate function
88  HostGrid *hostGrid = HostBackupRestoreFacility::restore( filename_or_stream );
89  CoordFunction *coordFunction = new CoordFunction();
90  return new Grid( hostGrid, coordFunction );
91  }
92 
93  template <class Input>
94  static Grid *restore_impl ( const Input &filename_stream, std::false_type )
95  {
96  DUNE_THROW(NotImplemented,
97  "Restoring a GeometryGrid with a CoordFunction that is not default-constructible is not implemented.");
98  return nullptr;
99  }
100  };
101 
102 } // namespace Dune
103 
104 #endif // #ifndef DUNE_GEOGRID_BACKUPRESTORE_HH
const Grid & asImp() const
Definition: geometrygrid/backuprestore.hh:43
BackupRestoreFacility< HostGrid > HostBackupRestoreFacility
Definition: geometrygrid/backuprestore.hh:65
Grid & asImp()
Definition: geometrygrid/backuprestore.hh:48
Grid abstract base classThis class is the base class for all grid implementations. Although no virtual functions are used we call it abstract since its methods do not contain an implementation but forward to the methods of the derived class via the Barton-Nackman trick.
Definition: common/grid.hh:375
BackupRestoreFacilities()
Definition: geometrygrid/backuprestore.hh:35
static Grid * restore(const Input &filename_or_stream)
Restore the grid from file or stream.
Definition: geometrygrid/backuprestore.hh:77
GeometryGrid< HostGrid, CoordFunction, Allocator > Grid
Definition: geometrygrid/backuprestore.hh:64
const HostGrid & hostGrid() const
obtain constant reference to the host grid
Definition: geometrygrid/grid.hh:533
facility for writing and reading grids
Definition: common/backuprestore.hh:42
Include standard header files.
Definition: agrid.hh:59
grid wrapper replacing the geometriesGeometryGrid wraps another DUNE grid and replaces its geometry b...
Definition: declaration.hh:12
concept Grid
Requirements for implementations of the Dune::Grid interface.The Grid concept defines interface requi...
Definition: concepts/grid.hh:109
Definition: geometrygrid/backuprestore.hh:30
static void backup(const Grid &grid, const Output &filename_or_stream)
Backup the grid to file or stream.
Definition: geometrygrid/backuprestore.hh:69
Definition: geometrygrid/backuprestore.hh:26