Advanced Multi-Physics (AMP)
On-Line Documentation
TimeIntegrator.h
Go to the documentation of this file.
1#ifndef included_AMP_TimeIntegrator
2 #define included_AMP_TimeIntegrator
3
4 #include "AMP/operators/Operator.h"
5 #include "AMP/time_integrators/TimeIntegratorParameters.h"
6 #include "AMP/utils/Database.h"
7 #include "AMP/vectors/Vector.h"
8
9 #include <cstdint>
10 #include <memory>
11 #include <string>
12
13
14// Declare some classes
15namespace AMP::IO {
16class Writer;
17class RestartManager;
18} // namespace AMP::IO
19
20
21namespace AMP::TimeIntegrator {
22
34{
35public:
37 typedef std::shared_ptr<AMP::TimeIntegrator::TimeIntegrator> shared_ptr;
38
49 explicit TimeIntegrator( std::shared_ptr<TimeIntegratorParameters> parameters );
50
54 virtual ~TimeIntegrator();
55
58 virtual std::string type() const;
59
61 uint64_t getID() const;
62
68 virtual void initialize( std::shared_ptr<TimeIntegratorParameters> parameters );
69
76 virtual void reset( std::shared_ptr<const TimeIntegratorParameters> parameters ) = 0;
77
105 virtual int advanceSolution( const double dt,
106 const bool first_step,
107 std::shared_ptr<AMP::LinearAlgebra::Vector> in,
108 std::shared_ptr<AMP::LinearAlgebra::Vector> out ) = 0;
109
116 virtual bool checkNewSolution( void ) = 0;
117
132 virtual void updateSolution( void ) = 0;
133
137 virtual std::shared_ptr<AMP::LinearAlgebra::Vector> getSolution( void )
138 {
139 return d_solution_vector;
140 }
141
150 virtual double getNextDt( const bool good_solution );
151
156 virtual double getInitialTime() const;
157
162 virtual double getFinalTime() const;
163
168 virtual double getCurrentTime() const;
169
174 virtual double getCurrentDt() const;
175
179 virtual double getInitialDt() { return d_initial_dt; };
180
185 virtual int getIntegratorStep() const;
186
191 virtual int getMaxIntegratorSteps() const;
192
199 virtual bool stepsRemaining() const;
200
211
220
227 virtual void registerWriter( std::shared_ptr<AMP::IO::Writer> writer ) { d_writer = writer; }
228
232 void printClassData( std::ostream &os ) const;
233
239 void putToDatabase( std::shared_ptr<AMP::Database> db );
240
241 virtual void registerOperator( std::shared_ptr<AMP::Operator::Operator> op )
242 {
243 d_operator = op;
244 }
245
246 std::shared_ptr<AMP::Operator::Operator> getOperator( void ) { return d_operator; }
247
248 virtual int getTotalRejectedSteps() const { return d_total_steprejects; }
249
250 virtual void setCurrentDt( const double dt ) { d_current_dt = dt; }
251
252 virtual void setInitialDt( const double dt ) { d_initial_dt = dt; }
253
254 virtual void setCurrentTime( const double t ) { d_current_time = t; }
255
256 virtual void setInitialTime( const double t ) { d_initial_time = t; }
257
258 virtual void setFinalTime( const double t ) { d_final_time = t; }
259
260 virtual void printStatistics( std::ostream &os = AMP::pout );
261
267
268 virtual double getGamma( void ) { return d_current_dt; }
269
276 virtual std::vector<double> getTimeHistoryScalings( void )
277 {
278 return std::vector<double>( 1, 1.0 );
279 }
280
281 /*
282 * Returns the number of previous solutions that are stored
283 */
284 virtual size_t sizeOfTimeHistory() const { return 1; }
285
286protected:
287 /*
288 * Read input data from specified database and initialize class members.
289 * If run is from restart, a subset of the restart values may be replaced
290 * with those read from input.
291 *
292 * When assertion checking is active, the database pointer must be non-null.
293 */
294 void getFromInput( std::shared_ptr<const AMP::Database> db );
295
296 /*
297 * Read object state from restart database and initialize class members.
298 * Check that class and restart version numbers are the same.
299 */
301
302 /*
303 * String used to identify specific class instantiation.
304 */
305 std::string d_object_name;
306
310 std::shared_ptr<TimeIntegratorParameters> d_pParameters;
311
312 /*
313 * Initial conditions vector
314 */
315 std::shared_ptr<AMP::LinearAlgebra::Vector> d_ic_vector = nullptr;
316
317 /*
318 * Solution vector advanced during the time integration process.
319 */
320 std::shared_ptr<AMP::LinearAlgebra::Vector> d_solution_vector;
321
328 std::shared_ptr<AMP::Operator::Operator> d_operator;
329
333 std::shared_ptr<AMP::Operator::Operator> d_pMassOperator;
334
335 /*
336 * Source-sink vector, g, when the time integration problem is of the form u_t = f(u)+g
337 */
338 std::shared_ptr<AMP::LinearAlgebra::Vector> d_pSourceTerm;
339
340 /*
341 * Data members representing integrator times, time increments,
342 * and step count information.
343 */
344 double d_initial_time = std::numeric_limits<double>::signaling_NaN();
345 double d_final_time = std::numeric_limits<double>::signaling_NaN();
346 double d_current_time = std::numeric_limits<double>::signaling_NaN();
347
349 double d_initial_dt = std::numeric_limits<double>::signaling_NaN();
350 double d_current_dt = std::numeric_limits<double>::signaling_NaN();
351 double d_old_dt = std::numeric_limits<double>::signaling_NaN();
352 double d_min_dt = std::numeric_limits<double>::signaling_NaN();
353
355 double d_max_dt = std::numeric_limits<double>::max();
356
360
362
363 // Writer for internal data
364 std::shared_ptr<AMP::IO::Writer> d_writer;
365
366 TimeIntegrator() = default;
367
370 bool d_initialized = false;
371
372public: // Write/read restart data
379
385 virtual void writeRestart( int64_t fid ) const;
386
394
395private:
396 // The following are not implemented:
397 explicit TimeIntegrator( const TimeIntegrator & ) = delete;
398 void operator=( const TimeIntegrator & ) = delete;
399};
400
401} // namespace AMP::TimeIntegrator
402
403#endif
404
405#include "AMP/time_integrators/TimeIntegrator.I"
Class to manage reading/writing restart data.
std::shared_ptr< Vector > shared_ptr
Shorthand for shared pointer to Vector.
Definition Vector.h:60
Abstract base class for time integration.
virtual void writeRestart(int64_t fid) const
Write restart data to file.
double d_max_dt
maximum allowable timestep (user defined)
virtual void printStatistics(std::ostream &os=AMP::pout)
virtual double getCurrentTime() const
Return final integration time.
virtual void registerOperator(std::shared_ptr< AMP::Operator::Operator > op)
virtual double getInitialTime() const
Return initial integration time.
std::shared_ptr< AMP::LinearAlgebra::Vector > d_ic_vector
virtual void setInitialDt(const double dt)
std::shared_ptr< AMP::TimeIntegrator::TimeIntegrator > shared_ptr
Convience typedef.
virtual int getTotalRejectedSteps() const
virtual void setCurrentDt(const double dt)
std::shared_ptr< AMP::LinearAlgebra::Vector > d_solution_vector
virtual std::shared_ptr< AMP::LinearAlgebra::Vector > getSolution(void)
TimeIntegrator(int64_t fid, AMP::IO::RestartManager *manager)
Read restart data to file.
virtual void updateSolution(void)=0
Update solution after time advance.
void getFromInput(std::shared_ptr< const AMP::Database > db)
virtual AMP::LinearAlgebra::Vector::shared_ptr getSourceTerm(void)
virtual double getFinalTime() const
Return final integration time.
virtual std::string type() const
Return the name of the TimeIntegrator.
virtual void setSourceTerm(AMP::LinearAlgebra::Vector::shared_ptr src)
std::shared_ptr< AMP::Operator::Operator > d_operator
TimeIntegrator(std::shared_ptr< TimeIntegratorParameters > parameters)
virtual double getCurrentDt() const
Return current timestep.
virtual void initialize(std::shared_ptr< TimeIntegratorParameters > parameters)
Initialize state of time integrator.
void operator=(const TimeIntegrator &)=delete
virtual void appendRhsVector(AMP::LinearAlgebra::Vector::shared_ptr vec)
Append the vectors of interest to the rhs vector.
virtual bool checkNewSolution(void)=0
virtual void setCurrentTime(const double t)
std::shared_ptr< AMP::IO::Writer > d_writer
keeps track of total number of step rejections
double d_initial_dt
initial time increment
virtual std::vector< double > getTimeHistoryScalings(void)
Scaling factors for previous time history vectors.
virtual void registerChildObjects(AMP::IO::RestartManager *manager) const
Register any child objects.
virtual void appendSolutionVector(AMP::LinearAlgebra::Vector::shared_ptr vec)
Append the vectors of interest to the solution vector.
std::shared_ptr< TimeIntegratorParameters > d_pParameters
virtual void reset(std::shared_ptr< const TimeIntegratorParameters > parameters)=0
Resets the internal state of the time integrator.
void printClassData(std::ostream &os) const
std::shared_ptr< AMP::LinearAlgebra::Vector > d_pSourceTerm
virtual int advanceSolution(const double dt, const bool first_step, std::shared_ptr< AMP::LinearAlgebra::Vector > in, std::shared_ptr< AMP::LinearAlgebra::Vector > out)=0
Integrate through the specified time increment.
virtual void setFinalTime(const double t)
virtual double getNextDt(const bool good_solution)
Return time increment for next solution advance.
virtual void setInitialTime(const double t)
uint64_t getID() const
Get a unique id hash for the vector.
TimeIntegrator(const TimeIntegrator &)=delete
virtual size_t sizeOfTimeHistory() const
void putToDatabase(std::shared_ptr< AMP::Database > db)
virtual void registerWriter(std::shared_ptr< AMP::IO::Writer > writer)
Registers a writer with the solver.
std::shared_ptr< AMP::Operator::Operator > d_pMassOperator
virtual bool stepsRemaining() const
Have the number of integration steps reached the maximum.
virtual int getMaxIntegratorSteps() const
Return maximum number of integration steps.
virtual int getIntegratorStep() const
Return current integration step number.
std::shared_ptr< AMP::Operator::Operator > getOperator(void)
std::ostream pout



Advanced Multi-Physics (AMP)
Oak Ridge National Laboratory
Idaho National Laboratory
Los Alamos National Laboratory
This page automatically produced from the
source code by doxygen
Last updated: Tue Mar 10 2026 13:06:41.
Comments on this page