dune-grid 2.9.0
geometrygrid/backuprestore.hh
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (C) 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
16namespace 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
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
Include standard header files.
Definition: agrid.hh:60
facility for writing and reading grids
Definition: common/backuprestore.hh:43
Grid abstract base class.
Definition: common/grid.hh:375
Definition: geometrygrid/backuprestore.hh:27
Definition: geometrygrid/backuprestore.hh:31
const Grid & asImp() const
Definition: geometrygrid/backuprestore.hh:43
BackupRestoreFacilities()
Definition: geometrygrid/backuprestore.hh:35
Grid & asImp()
Definition: geometrygrid/backuprestore.hh:48
BackupRestoreFacility< HostGrid > HostBackupRestoreFacility
Definition: geometrygrid/backuprestore.hh:65
static void backup(const Grid &grid, const Output &filename_or_stream)
Backup the grid to file or stream.
Definition: geometrygrid/backuprestore.hh:69
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
grid wrapper replacing the geometries
Definition: geometrygrid/grid.hh:86
const HostGrid & hostGrid() const
obtain constant reference to the host grid
Definition: geometrygrid/grid.hh:538