forked from LLNL/libROM
-
Notifications
You must be signed in to change notification settings - Fork 0
/
StaticSVDSampler.h
117 lines (103 loc) · 3.15 KB
/
StaticSVDSampler.h
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/******************************************************************************
*
* Copyright (c) 2013-2019, Lawrence Livermore National Security, LLC
* and other libROM project developers. See the top-level COPYRIGHT
* file for details.
*
* SPDX-License-Identifier: (Apache-2.0 OR MIT)
*
*****************************************************************************/
// Description: The class that determines the next time at which a sample
// should be taken for basis generation using the static SVD
// approach.
#ifndef included_StaticSVDSampler_h
#define included_StaticSVDSampler_h
#include "SVDSampler.h"
#include "StaticSVD.h"
namespace CAROM {
/**
* Class StaticSVDSampler knows, given a static svd implementation, the
* time at which the next sample is needed. It also knows given a time whether
* it is time for the next sample. All state vectors are sampled in the
* static SVD implementation so it is always time for a new sample.
*/
class StaticSVDSampler : public SVDSampler
{
public:
/**
* @brief Constructor.
*
* @pre dim > 0
* @pre samples_per_time_interval > 0
*
* @param[in] dim The dimension of the system on this processor.
* @param[in] samples_per_time_interval The maximum number of samples
* in each time interval.
* @param[in] debug_algorithm If true results of static svd algorithm
* will be printed to facilitate debugging.
*/
StaticSVDSampler(
int dim,
int samples_per_time_interval,
bool debug_algorithm = false);
/**
* @brief Destructor.
*/
~StaticSVDSampler();
/**
* @brief Returns true if it is time for the next sample.
*
* As the static algorithm samples everything this always returns true.
*
* @param[in] time Time of interest--unused.
*
* @return true
*/
virtual
bool
isNextSample(
double time);
/**
* @brief Computes next time a state sample is needed.
*
* @param[in] u_in The state at the specified time--unused.
* @param[in] rhs_in The right hand side at the specified time--unused.
* @param[in] time The simulation time for the state.
*
* @return The current simulation time as the static algorithm samples at
* each time step.
*/
virtual
double
computeNextSampleTime(
double* u_in,
double* rhs_in,
double time);
/**
* @brief Resets sample time step.
*
* @param[in] new_dt New value of sample time step.
*/
virtual
void
resetDt(
double new_dt);
private:
/**
* @brief Unimplemented default constructor.
*/
StaticSVDSampler();
/**
* @brief Unimplemented copy constructor.
*/
StaticSVDSampler(
const StaticSVDSampler& other);
/**
* @brief Unimplemented assignment operator.
*/
StaticSVDSampler&
operator = (
const StaticSVDSampler& rhs);
};
}
#endif