Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_SolutionState_decl.hpp
Go to the documentation of this file.
1// @HEADER
2// ****************************************************************************
3// Tempus: Copyright (2017) Sandia Corporation
4//
5// Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6// ****************************************************************************
7// @HEADER
8
9#ifndef Tempus_SolutionState_decl_hpp
10#define Tempus_SolutionState_decl_hpp
11
12#include "Teuchos_VerboseObject.hpp"
13#include "Teuchos_Describable.hpp"
14
15#include "Thyra_VectorBase.hpp"
16#include "Thyra_ModelEvaluator.hpp"
17
18#include "Tempus_config.hpp"
19#include "Tempus_SolutionStateMetaData.hpp"
21#include "Tempus_PhysicsState.hpp"
22
23
24namespace Tempus {
25
55template<class Scalar>
57 public Teuchos::Describable,
58 public Teuchos::VerboseObject<Tempus::SolutionState<Scalar> >
59{
60public:
61
68
70 const Teuchos::RCP<SolutionStateMetaData<Scalar> > ssmd,
71 const Teuchos::RCP<Thyra::VectorBase<Scalar> >& x,
72 const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdot,
73 const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdotdot,
74 const Teuchos::RCP<StepperState<Scalar> >& stepperState,
75 const Teuchos::RCP<PhysicsState<Scalar> >& physicsState);
76
78 const Teuchos::RCP<const SolutionStateMetaData<Scalar> > ssmd,
79 const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& x,
80 const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdot,
81 const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdotdot,
82 const Teuchos::RCP<const StepperState<Scalar> >& stepperState,
83 const Teuchos::RCP<const PhysicsState<Scalar> >& physicsState);
84
86 SolutionState(const SolutionState<Scalar>& ss);
87
89 virtual Teuchos::RCP<SolutionState<Scalar> > clone() const;
90
92 virtual void copy(const Teuchos::RCP<const SolutionState<Scalar> >& ss);
93
95 virtual void copySolutionData(
96 const Teuchos::RCP<const SolutionState<Scalar> >& s);
97
99 virtual ~SolutionState() {}
100
102
103 virtual Teuchos::RCP<const SolutionStateMetaData<Scalar> >
104 getMetaData() const { return metaData_; }
105 virtual Teuchos::RCP<SolutionStateMetaData<Scalar> > getMetaData()
106 { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
107 return metaData_nc_; }
108
109 virtual Scalar getTime() const {return metaData_->getTime();}
110 virtual int getIndex() const {return metaData_->getIStep();}
111 virtual Scalar getTimeStep() const {return metaData_->getDt();}
112 virtual Scalar getErrorAbs() const {return metaData_->getErrorAbs();}
113 virtual Scalar getErrorRel() const {return metaData_->getErrorRel();}
114 virtual Scalar getErrorRelNm1() const {return metaData_->getErrorRelNm1();}
115 virtual Scalar getErrorRelNm2() const {return metaData_->getErrorRelNm2();}
116 virtual int getOrder() const {return metaData_->getOrder();}
117 virtual int getNFailures() const {return metaData_->getNFailures();}
118 virtual int getNRunningFailures() const {return metaData_->getNRunningFailures();}
119 virtual int getNConsecutiveFailures() const {return metaData_->getNConsecutiveFailures();}
120 virtual Scalar getTolAbs() const {return metaData_->getTolAbs();}
121 virtual Scalar getTolRel() const {return metaData_->getTolRel();}
122 virtual Scalar getXNormL2() const {return metaData_->getXNormL2();}
123 virtual Scalar getDxNormL2Abs() const {return metaData_->getDxNormL2Abs();}
124 virtual Scalar getDxNormL2Rel() const {return metaData_->getDxNormL2Rel();}
125 virtual bool getComputeNorms() const {return metaData_->getComputeNorms();}
126 virtual Status getSolutionStatus() const {return metaData_->getSolutionStatus();}
127 virtual bool getOutput() const {return metaData_->getOutput();}
128 virtual bool getOutputScreen() const {return metaData_->getOutputScreen();}
129 virtual bool getIsSynced() const {return metaData_->getIsSynced();}
130 virtual bool getIsInterpolated() const {return metaData_->getIsInterpolated();}
131 virtual bool getAccuracy() const {return metaData_->getAccuracy();}
133
135
136 virtual void setMetaData(
137 Teuchos::RCP<const SolutionStateMetaData<Scalar> > md)
138 { metaData_ = md; metaData_nc_ = Teuchos::null; }
139 virtual void setMetaData(Teuchos::RCP<SolutionStateMetaData<Scalar> > md)
141
142 virtual void setTime(Scalar time) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
143 metaData_nc_->setTime(time);}
144 virtual void setIndex(Scalar index) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
145 metaData_nc_->setIStep(index);}
146 virtual void setTimeStep(Scalar dt) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
147 metaData_nc_->setDt(dt);}
148 virtual void setErrorAbs(Scalar errorAbs){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
149 metaData_nc_->setErrorAbs(errorAbs);}
150 virtual void setErrorRel(Scalar errorRel){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
151 metaData_nc_->setErrorRel(errorRel);}
152 virtual void setOrder(int order) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
153 metaData_nc_->setOrder(order); }
154
155 virtual void setNFailures(int nFailures) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
156 metaData_nc_->setNFailures(nFailures); }
157 virtual void setNRunningFailures(int nFailures) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
158 metaData_nc_->setNRunningFailures(nFailures); }
159 virtual void setNConsecutiveFailures(int nConsecutiveFailures)
160 { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
161 metaData_nc_->setNConsecutiveFailures(nConsecutiveFailures); }
162 virtual void setTolRel (Scalar tolRel){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
163 metaData_nc_->setTolRel(tolRel); }
164 virtual void setTolAbs (Scalar tolAbs){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
165 metaData_nc_->setTolAbs(tolAbs); }
166
167 virtual void setXNormL2 (Scalar xNormL2){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
168 metaData_nc_->setXNormL2(xNormL2); }
169 virtual void setDxNormL2Rel (Scalar dxNormL2Rel){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
170 metaData_nc_->setDxNormL2Rel(dxNormL2Rel); }
171 virtual void setDxNormL2Abs (Scalar dxNormL2Abs){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
172 metaData_nc_->setDxNormL2Abs(dxNormL2Abs); }
173 virtual void setComputeNorms(bool computeNorms) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
174 metaData_nc_->setComputeNorms(computeNorms); }
175
176 virtual void setSolutionStatus(Status s) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
177 metaData_nc_->setSolutionStatus(s); }
178 virtual void setSolutionStatus(const Thyra::SolveStatus<Scalar> sStatus)
179 {
180 if (sStatus.solveStatus == Thyra::SOLVE_STATUS_CONVERGED )
181 metaData_nc_->setSolutionStatus(Status::PASSED);
182 else
183 metaData_nc_->setSolutionStatus(Status::FAILED);
184 }
185
186 virtual void setOutput(bool output) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
187 metaData_nc_->setOutput(output); }
188 virtual void setOutputScreen(bool output) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
189 metaData_nc_->setOutputScreen(output); }
190 virtual void setIsSynced(bool isSynced) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
191 metaData_nc_->setIsSynced(isSynced); }
192 virtual void setIsInterpolated(bool isInterpolated) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
193 metaData_nc_->setIsInterpolated(isInterpolated); }
194 virtual void setAccuracy(bool accuracy) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
195 metaData_nc_->setAccuracy(accuracy); }
197
199
200 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getX()
201 { TEUCHOS_ASSERT(x_nc_ != Teuchos::null);
202 return x_nc_; }
203 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getX() const
204 { return x_; }
205 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDot()
206 { return xdot_nc_; }
207 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDot() const
208 { return xdot_; }
209 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDotDot()
210 { return xdotdot_nc_; }
211 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDotDot() const
212 { return xdotdot_; }
213
214 virtual Teuchos::RCP<StepperState<Scalar> > getStepperState()
215 { TEUCHOS_ASSERT(stepperState_nc_ != Teuchos::null);
216 return stepperState_nc_; }
217 virtual Teuchos::RCP<const StepperState<Scalar> > getStepperState() const
218 { return stepperState_; }
219
220 virtual Teuchos::RCP<PhysicsState<Scalar> > getPhysicsState()
221 { return physicsState_nc_; }
222 virtual Teuchos::RCP<const PhysicsState<Scalar> > getPhysicsState() const
223 { return physicsState_; }
225
227
228 virtual void setX(Teuchos::RCP<Thyra::VectorBase<Scalar> > x)
229 { x_nc_ = x; x_ = x; }
230 virtual void setX(Teuchos::RCP<const Thyra::VectorBase<Scalar> > x)
231 { x_nc_ = Teuchos::null; x_ = x; }
232 virtual void setXDot(Teuchos::RCP<Thyra::VectorBase<Scalar> > xdot)
233 { xdot_nc_ = xdot; xdot_ = xdot; }
234 virtual void setXDot(Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot)
235 { xdot_nc_ = Teuchos::null; xdot_ = xdot; }
236 virtual void setXDotDot(Teuchos::RCP<Thyra::VectorBase<Scalar> > xdotdot)
237 { xdotdot_nc_ = xdotdot; xdotdot_ = xdotdot; }
238 virtual void setXDotDot(Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot)
239 { xdotdot_nc_ = Teuchos::null; xdotdot_ = xdotdot; }
240
241 virtual void setStepperState(Teuchos::RCP<StepperState<Scalar> >& ss)
242 { stepperState_nc_ = ss; stepperState_ = ss; }
243 virtual void setStepperState(const Teuchos::RCP<StepperState<Scalar> >& ss)
244 { stepperState_nc_ = Teuchos::null; stepperState_ = ss; }
245
246 virtual void setPhysicsState(Teuchos::RCP<PhysicsState<Scalar> >& ps)
247 { physicsState_nc_ = ps; physicsState_ = ps; }
248 virtual void setPhysicsState(const Teuchos::RCP<PhysicsState<Scalar> >& ps)
249 { physicsState_nc_ = Teuchos::null; physicsState_ = ps; }
251
252
254
255
256 bool operator< (const SolutionState<Scalar>& ss) const;
257
259 bool operator<= (const SolutionState<Scalar>& ss) const;
260
262 bool operator< (const Scalar& t) const;
263
265 bool operator<= (const Scalar& t) const;
266
268 bool operator> (const SolutionState<Scalar>& ss) const;
269
271 bool operator>= (const SolutionState<Scalar>& ss) const;
272
274 bool operator> (const Scalar& t) const;
275
277 bool operator>= (const Scalar& t) const;
278
280 bool operator== (const SolutionState<Scalar>& ss) const;
281
283 bool operator== (const Scalar& t) const;
285
287
288 virtual std::string description() const;
289 virtual void describe(Teuchos::FancyOStream &out,
290 const Teuchos::EVerbosityLevel verbLevel) const;
292
294 virtual void computeNorms(
295 const Teuchos::RCP<const SolutionState<Scalar> >& ssIn = Teuchos::null);
296
297private:
298 // Member Data
299
301 Teuchos::RCP<const SolutionStateMetaData<Scalar> > metaData_;
302 Teuchos::RCP<SolutionStateMetaData<Scalar> > metaData_nc_;
303
305 Teuchos::RCP<const Thyra::VectorBase<Scalar> > x_;
306 Teuchos::RCP<Thyra::VectorBase<Scalar> > x_nc_;
307
309 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot_;
310 Teuchos::RCP<Thyra::VectorBase<Scalar> > xdot_nc_;
311
313 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot_;
314 Teuchos::RCP<Thyra::VectorBase<Scalar> > xdotdot_nc_;
315
317 Teuchos::RCP<const StepperState<Scalar> > stepperState_;
318 Teuchos::RCP<StepperState<Scalar> > stepperState_nc_;
319
321 Teuchos::RCP<const PhysicsState<Scalar> > physicsState_;
322 Teuchos::RCP<PhysicsState<Scalar> > physicsState_nc_;
323
324};
325
326
328template<class Scalar>
329Teuchos::RCP<SolutionState<Scalar> >
331 const Teuchos::RCP<Thyra::VectorBase<Scalar> >& x,
332 const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdot = Teuchos::null,
333 const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdotdot = Teuchos::null);
334
336template<class Scalar>
337Teuchos::RCP<SolutionState<Scalar> >
339 const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& x,
340 const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdot =Teuchos::null,
341 const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdotdot =Teuchos::null);
342
344template<class Scalar>
345Teuchos::RCP<SolutionState<Scalar> >
347 const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model,
348 const Teuchos::RCP<StepperState<Scalar> >& stepperState = Teuchos::null,
349 const Teuchos::RCP<PhysicsState<Scalar> >& physicsState = Teuchos::null);
350
351
352
353} // namespace Tempus
354
355#endif // Tempus_SolutionState_decl_hpp
Solution state for integrators and steppers. SolutionState contains the metadata for solutions and th...
virtual void setStepperState(Teuchos::RCP< StepperState< Scalar > > &ss)
virtual void setNConsecutiveFailures(int nConsecutiveFailures)
Teuchos::RCP< SolutionStateMetaData< Scalar > > metaData_nc_
virtual void setIsInterpolated(bool isInterpolated)
Teuchos::RCP< Thyra::VectorBase< Scalar > > x_nc_
virtual int getNConsecutiveFailures() const
virtual void setXDotDot(Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdotdot)
virtual Scalar getErrorRelNm2() const
virtual Scalar getDxNormL2Rel() const
Teuchos::RCP< const Thyra::VectorBase< Scalar > > x_
Solution.
virtual Scalar getDxNormL2Abs() const
virtual void setNFailures(int nFailures)
virtual void setOutput(bool output)
virtual Scalar getTimeStep() const
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
virtual Scalar getErrorRel() const
virtual void setMetaData(Teuchos::RCP< const SolutionStateMetaData< Scalar > > md)
virtual void copy(const Teuchos::RCP< const SolutionState< Scalar > > &ss)
This is a deep copy.
virtual void setErrorAbs(Scalar errorAbs)
virtual void setXDot(Teuchos::RCP< Thyra::VectorBase< Scalar > > xdot)
virtual void setStepperState(const Teuchos::RCP< StepperState< Scalar > > &ss)
virtual void setOutputScreen(bool output)
virtual void setTolAbs(Scalar tolAbs)
virtual void computeNorms(const Teuchos::RCP< const SolutionState< Scalar > > &ssIn=Teuchos::null)
Compute the solution norms, and solution change from ssIn, if provided.
Teuchos::RCP< StepperState< Scalar > > stepperState_nc_
Teuchos::RCP< const SolutionStateMetaData< Scalar > > metaData_
Meta Data for the solution state.
virtual void setXNormL2(Scalar xNormL2)
virtual void setIndex(Scalar index)
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getX() const
virtual void setX(Teuchos::RCP< const Thyra::VectorBase< Scalar > > x)
virtual std::string description() const
virtual void setAccuracy(bool accuracy)
virtual void setSolutionStatus(Status s)
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdotdot_
Second time derivative of the solution.
virtual void copySolutionData(const Teuchos::RCP< const SolutionState< Scalar > > &s)
Deep copy solution data, but keep metaData untouched.
virtual void setPhysicsState(const Teuchos::RCP< PhysicsState< Scalar > > &ps)
virtual Teuchos::RCP< PhysicsState< Scalar > > getPhysicsState()
virtual void setX(Teuchos::RCP< Thyra::VectorBase< Scalar > > x)
virtual Scalar getErrorAbs() const
virtual void setPhysicsState(Teuchos::RCP< PhysicsState< Scalar > > &ps)
virtual Scalar getXNormL2() const
SolutionState()
Default Constructor – Not meant for immediate adding to SolutionHistory. This constructor does not se...
virtual Teuchos::RCP< StepperState< Scalar > > getStepperState()
virtual void setTime(Scalar time)
Teuchos::RCP< const PhysicsState< Scalar > > physicsState_
PhysicsState for this SolutionState.
virtual Status getSolutionStatus() const
virtual ~SolutionState()
Destructor.
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getX()
virtual void setXDotDot(Teuchos::RCP< Thyra::VectorBase< Scalar > > xdotdot)
virtual void setErrorRel(Scalar errorRel)
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDotDot()
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
bool operator==(const SolutionState< Scalar > &ss) const
Equality comparison for matching.
virtual Teuchos::RCP< const PhysicsState< Scalar > > getPhysicsState() const
Teuchos::RCP< Thyra::VectorBase< Scalar > > xdotdot_nc_
bool operator<(const SolutionState< Scalar > &ss) const
Less than comparison for sorting based on time.
virtual void setOrder(int order)
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDotDot() const
virtual Scalar getErrorRelNm1() const
virtual void setDxNormL2Rel(Scalar dxNormL2Rel)
virtual void setTimeStep(Scalar dt)
virtual Teuchos::RCP< const StepperState< Scalar > > getStepperState() const
bool operator>(const SolutionState< Scalar > &ss) const
Less than comparison for sorting based on time.
virtual void setXDot(Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdot)
bool operator<=(const SolutionState< Scalar > &ss) const
Less than comparison for sorting based on time.
virtual Teuchos::RCP< SolutionStateMetaData< Scalar > > getMetaData()
virtual void setSolutionStatus(const Thyra::SolveStatus< Scalar > sStatus)
virtual void setNRunningFailures(int nFailures)
Teuchos::RCP< const StepperState< Scalar > > stepperState_
StepperState for this SolutionState.
virtual void setDxNormL2Abs(Scalar dxNormL2Abs)
virtual void setTolRel(Scalar tolRel)
virtual void setMetaData(Teuchos::RCP< SolutionStateMetaData< Scalar > > md)
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDot()
virtual void setIsSynced(bool isSynced)
bool operator>=(const SolutionState< Scalar > &ss) const
Less than comparison for sorting based on time.
Teuchos::RCP< PhysicsState< Scalar > > physicsState_nc_
virtual int getNRunningFailures() const
virtual Teuchos::RCP< SolutionState< Scalar > > clone() const
This is a deep copy constructor.
virtual bool getIsInterpolated() const
virtual void setComputeNorms(bool computeNorms)
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdot_
Time derivative of the solution.
virtual Teuchos::RCP< const SolutionStateMetaData< Scalar > > getMetaData() const
Teuchos::RCP< Thyra::VectorBase< Scalar > > xdot_nc_
Teuchos::RCP< SolutionState< Scalar > > createSolutionStateME(const Teuchos::RCP< const Thyra::ModelEvaluator< Scalar > > &model, const Teuchos::RCP< StepperState< Scalar > > &stepperState=Teuchos::null, const Teuchos::RCP< PhysicsState< Scalar > > &physicsState=Teuchos::null)
Nonmember constructor from Thyra ModelEvaluator.
Status
Status for the Integrator, the Stepper and the SolutionState.
Teuchos::RCP< SolutionState< Scalar > > createSolutionStateX(const Teuchos::RCP< Thyra::VectorBase< Scalar > > &x, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &xdot=Teuchos::null, const Teuchos::RCP< Thyra::VectorBase< Scalar > > &xdotdot=Teuchos::null)
Nonmember constructor from non-const solution vectors, x.