Advanced Multi-Physics (AMP)
On-Line Documentation
TimeOperator.h
Go to the documentation of this file.
1#ifndef included_AMP_TimeOperator
2#define included_AMP_TimeOperator
3
4#include "AMP/operators/Operator.h"
5#include "AMP/operators/OperatorParameters.h"
6#include "AMP/utils/Utilities.h"
7#include "AMP/vectors/Vector.h"
8#include <memory>
9
10
11namespace AMP::TimeIntegrator {
12
33{
34public:
74 explicit TimeOperator( std::shared_ptr<const AMP::Operator::OperatorParameters> params );
75
79 virtual ~TimeOperator();
80
81 std::string type() const override { return "TimeOperator"; }
82
88 void reset( std::shared_ptr<const AMP::Operator::OperatorParameters> params ) override;
89
94 void registerRhsOperator( std::shared_ptr<AMP::Operator::Operator> op ) { d_pRhsOperator = op; }
95
101 void registerMassOperator( std::shared_ptr<AMP::Operator::Operator> op )
102 {
104 }
105
109 void registerAlgebraicVariable( std::shared_ptr<AMP::LinearAlgebra::Variable> var )
110 {
112 }
113
117 std::shared_ptr<AMP::Operator::Operator> getRhsOperator( void ) { return d_pRhsOperator; }
118
122 std::shared_ptr<AMP::Operator::Operator> getMassOperator( void ) { return d_pMassOperator; }
123
128 void setDt( double dt ) { d_dCurrentDt = dt; }
129
135 std::shared_ptr<AMP::LinearAlgebra::Variable> getOutputVariable() const override
136 {
137 return d_pRhsOperator->getOutputVariable();
138 }
139
145
146 virtual void applyRhs( std::shared_ptr<const AMP::LinearAlgebra::Vector> x,
147 std::shared_ptr<AMP::LinearAlgebra::Vector> f );
148
149 void residual( std::shared_ptr<const AMP::LinearAlgebra::Vector> f,
150 std::shared_ptr<const AMP::LinearAlgebra::Vector> u,
151 std::shared_ptr<AMP::LinearAlgebra::Vector> r ) override;
152
156 virtual void setTimeOperatorScaling( const double gamma ) { d_dGamma = gamma; }
160 virtual double getGamma( void ) const { return d_dGamma; }
161
162 std::shared_ptr<AMP::Operator::OperatorParameters>
163 getParameters( const std::string &type,
165 std::shared_ptr<AMP::Operator::OperatorParameters> params = nullptr ) override;
166
168 // and nonlinear function for correct solution of the implicit problem
169 // each timestep. The first vector is for solution scaling, the second for function
170 void setComponentScalings( std::shared_ptr<AMP::LinearAlgebra::Vector> s,
171 std::shared_ptr<AMP::LinearAlgebra::Vector> f )
172 {
175 }
176
177 void makeConsistent( std::shared_ptr<AMP::LinearAlgebra::Vector> vec ) override
178 {
180 d_pRhsOperator->makeConsistent( vec );
181 }
182
183 void reInitializeVector( std::shared_ptr<AMP::LinearAlgebra::Vector> v ) override
184 {
186 d_pRhsOperator->reInitializeVector( v );
187 }
188
190 bool isValidVector( std::shared_ptr<const AMP::LinearAlgebra::Vector> u ) override
191 {
193 return d_pRhsOperator->isValidVector( u );
194 }
195
196protected:
198
199 void getFromInput( std::shared_ptr<AMP::Database> db );
200
202
204
209
211
215 std::shared_ptr<AMP::Operator::Operator> d_pRhsOperator;
216
220 std::shared_ptr<AMP::Operator::Operator> d_pMassOperator;
221
225 std::shared_ptr<AMP::LinearAlgebra::Variable> d_pAlgebraicVariable;
226
230 std::shared_ptr<AMP::LinearAlgebra::Vector> d_pScratchSolVector;
231
235 std::shared_ptr<AMP::LinearAlgebra::Vector> d_pScratchVector;
236
240 std::shared_ptr<AMP::LinearAlgebra::Vector> d_pSourceTerm;
241
242 std::shared_ptr<AMP::LinearAlgebra::Vector> d_pSolutionScaling;
243 std::shared_ptr<AMP::LinearAlgebra::Vector> d_pFunctionScaling;
244
245 double d_dGamma = 0.0;
246
247private:
248};
249} // namespace AMP::TimeIntegrator
250
251#endif
std::shared_ptr< Vector > shared_ptr
Shorthand for shared pointer to Vector.
Definition Vector.h:60
std::shared_ptr< const Vector > const_shared_ptr
Definition Vector.h:65
std::shared_ptr< AMP::Operator::Operator > shared_ptr
Definition Operator.h:29
base class for operator class associated with ImplicitTimeIntegrator
void getFromInput(std::shared_ptr< AMP::Database > db)
std::shared_ptr< AMP::LinearAlgebra::Vector > d_pSolutionScaling
void residual(std::shared_ptr< const AMP::LinearAlgebra::Vector > f, std::shared_ptr< const AMP::LinearAlgebra::Vector > u, std::shared_ptr< AMP::LinearAlgebra::Vector > r) override
void registerMassOperator(std::shared_ptr< AMP::Operator::Operator > op)
std::shared_ptr< AMP::Operator::Operator > getRhsOperator(void)
std::shared_ptr< AMP::Operator::Operator > d_pRhsOperator
virtual void applyRhs(std::shared_ptr< const AMP::LinearAlgebra::Vector > x, std::shared_ptr< AMP::LinearAlgebra::Vector > f)
void apply(AMP::LinearAlgebra::Vector::const_shared_ptr u, AMP::LinearAlgebra::Vector::shared_ptr r) override
std::shared_ptr< AMP::LinearAlgebra::Vector > d_pScratchSolVector
std::string type() const override
Return the name of the operator.
std::shared_ptr< AMP::LinearAlgebra::Vector > d_pFunctionScaling
std::shared_ptr< AMP::LinearAlgebra::Variable > d_pAlgebraicVariable
void reset(std::shared_ptr< const AMP::Operator::OperatorParameters > params) override
std::shared_ptr< AMP::Operator::Operator > getMassOperator(void)
virtual double getGamma(void) const
std::shared_ptr< AMP::Operator::Operator > d_pMassOperator
bool isValidVector(std::shared_ptr< const AMP::LinearAlgebra::Vector > u) override
given a vector return whether it is valid or not
void setComponentScalings(std::shared_ptr< AMP::LinearAlgebra::Vector > s, std::shared_ptr< AMP::LinearAlgebra::Vector > f)
for multiphysics problems it may be necessary to scale the solution
std::shared_ptr< AMP::LinearAlgebra::Vector > d_pScratchVector
std::shared_ptr< AMP::LinearAlgebra::Vector > d_pSourceTerm
void makeConsistent(std::shared_ptr< AMP::LinearAlgebra::Vector > vec) override
std::shared_ptr< AMP::Operator::OperatorParameters > getParameters(const std::string &type, AMP::LinearAlgebra::Vector::const_shared_ptr u, std::shared_ptr< AMP::Operator::OperatorParameters > params=nullptr) override
std::shared_ptr< AMP::LinearAlgebra::Variable > getOutputVariable() const override
void registerRhsOperator(std::shared_ptr< AMP::Operator::Operator > op)
virtual void setTimeOperatorScaling(const double gamma)
void reInitializeVector(std::shared_ptr< AMP::LinearAlgebra::Vector > v) override
TimeOperator(std::shared_ptr< const AMP::Operator::OperatorParameters > params)
void registerAlgebraicVariable(std::shared_ptr< AMP::LinearAlgebra::Variable > var)
#define AMP_ASSERT(EXP)
Assert error.



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