Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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"
20 #include "Tempus_StepperState.hpp"
21 #include "Tempus_PhysicsState.hpp"
22 
23 
24 namespace Tempus {
25 
55 template<class Scalar>
57  public Teuchos::Describable,
58  public Teuchos::VerboseObject<Tempus::SolutionState<Scalar> >
59 {
60 public:
61 
67  SolutionState();
68 
73  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdotdot,
74  const Teuchos::RCP<StepperState<Scalar> >& stepperState,
75  const Teuchos::RCP<PhysicsState<Scalar> >& physicsState);
76 
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 
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 
104  getMetaData() const { return metaData_; }
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(
138  { metaData_ = md; metaData_nc_ = Teuchos::null; }
140  { metaData_nc_ = md; metaData_ = metaData_nc_; }
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  {
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 
201  { TEUCHOS_ASSERT(x_nc_ != Teuchos::null);
202  return x_nc_; }
204  { return x_; }
206  { return xdot_nc_; }
208  { return xdot_; }
210  { return xdotdot_nc_; }
212  { return xdotdot_; }
213 
215  { TEUCHOS_ASSERT(stepperState_nc_ != Teuchos::null);
216  return stepperState_nc_; }
218  { return stepperState_; }
219 
221  { return physicsState_nc_; }
223  { return physicsState_; }
225 
227 
229  { x_nc_ = x; x_ = x; }
231  { x_nc_ = Teuchos::null; x_ = x; }
233  { xdot_nc_ = xdot; xdot_ = xdot; }
234  virtual void setXDot(Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot)
235  { xdot_nc_ = Teuchos::null; xdot_ = xdot; }
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 
242  { stepperState_nc_ = ss; stepperState_ = ss; }
244  { stepperState_nc_ = Teuchos::null; stepperState_ = ss; }
245 
247  { physicsState_nc_ = ps; physicsState_ = ps; }
249  { physicsState_nc_ = Teuchos::null; physicsState_ = ps; }
251 
252 
254 
255  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 
297 private:
298  // Member Data
299 
303 
307 
311 
315 
319 
323 
324 };
325 
326 
328 template<class Scalar>
332  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdot = Teuchos::null,
333  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdotdot = Teuchos::null);
334 
336 template<class 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 
344 template<class 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
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.
PhysicsState is a simple class to hold information about the physics.
virtual Scalar getErrorRelNm2() const
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDot() const
virtual void setXNormL2(Scalar xNormL2)
virtual Teuchos::RCP< StepperState< Scalar > > getStepperState()
virtual int getNRunningFailures() const
virtual void setNFailures(int nFailures)
virtual void setStepperState(const Teuchos::RCP< StepperState< Scalar > > &ss)
Teuchos::RCP< Thyra::VectorBase< Scalar > > xdot_nc_
virtual bool getOutputScreen() const
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDot()
virtual void setDxNormL2Rel(Scalar dxNormL2Rel)
virtual void setXDot(Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdot)
virtual void setErrorAbs(Scalar errorAbs)
virtual Scalar getTolRel() const
Teuchos::RCP< const SolutionStateMetaData< Scalar > > metaData_
Meta Data for the solution state.
virtual Scalar getErrorRelNm1() const
virtual void setTolAbs(Scalar tolAbs)
virtual void setStepperState(Teuchos::RCP< StepperState< Scalar > > &ss)
virtual Scalar getTolAbs() const
virtual int getNConsecutiveFailures() const
virtual void setIsSynced(bool isSynced)
virtual void setIsInterpolated(bool isInterpolated)
virtual void setXDot(Teuchos::RCP< Thyra::VectorBase< Scalar > > xdot)
Teuchos::RCP< PhysicsState< Scalar > > physicsState_nc_
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getX() const
Teuchos::RCP< const PhysicsState< Scalar > > physicsState_
PhysicsState for this SolutionState.
virtual Scalar getXNormL2() const
virtual void setDxNormL2Abs(Scalar dxNormL2Abs)
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdotdot_
Second time derivative of the solution.
virtual Teuchos::RCP< PhysicsState< Scalar > > getPhysicsState()
Teuchos::RCP< Thyra::VectorBase< Scalar > > xdotdot_nc_
StepperState is a simple class to hold state information about the stepper.
virtual void setIndex(Scalar index)
virtual Scalar getTime() const
bool operator>(const SolutionState< Scalar > &ss) const
Less than comparison for sorting based on time.
Status
Status for the Integrator, the Stepper and the SolutionState.
Teuchos::RCP< const StepperState< Scalar > > stepperState_
StepperState for this SolutionState.
virtual void setSolutionStatus(const Thyra::SolveStatus< Scalar > sStatus)
virtual void setTimeStep(Scalar dt)
virtual void setErrorRel(Scalar errorRel)
virtual void setNRunningFailures(int nFailures)
virtual void copySolutionData(const Teuchos::RCP< const SolutionState< Scalar > > &s)
Deep copy solution data, but keep metaData untouched.
virtual void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getXDotDot()
virtual void setSolutionStatus(Status s)
virtual Teuchos::RCP< const PhysicsState< Scalar > > getPhysicsState() const
SolutionState()
Default Constructor – Not meant for immediate adding to SolutionHistory. This constructor does not se...
virtual void setX(Teuchos::RCP< const Thyra::VectorBase< Scalar > > x)
virtual Teuchos::RCP< const StepperState< Scalar > > getStepperState() const
virtual void setNConsecutiveFailures(int nConsecutiveFailures)
virtual bool getIsSynced() const
virtual Scalar getDxNormL2Rel() const
bool operator>=(const SolutionState< Scalar > &ss) const
Less than comparison for sorting based on time.
virtual bool getComputeNorms() const
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.
virtual void setXDotDot(Teuchos::RCP< Thyra::VectorBase< Scalar > > xdotdot)
Teuchos::RCP< const Thyra::VectorBase< Scalar > > x_
Solution.
ESolveStatus solveStatus
Teuchos::RCP< Thyra::VectorBase< Scalar > > x_nc_
bool operator==(const SolutionState< Scalar > &ss) const
Equality comparison for matching.
Teuchos::RCP< StepperState< Scalar > > stepperState_nc_
virtual Teuchos::RCP< SolutionStateMetaData< Scalar > > getMetaData()
virtual Scalar getErrorAbs() const
virtual void setAccuracy(bool accuracy)
virtual ~SolutionState()
Destructor.
virtual void setOutputScreen(bool output)
bool operator<=(const SolutionState< Scalar > &ss) const
Less than comparison for sorting based on time.
virtual Teuchos::RCP< SolutionState< Scalar > > clone() const
This is a deep copy constructor.
virtual void computeNorms(const Teuchos::RCP< const SolutionState< Scalar > > &ssIn=Teuchos::null)
Compute the solution norms, and solution change from ssIn, if provided.
virtual Teuchos::RCP< const SolutionStateMetaData< Scalar > > getMetaData() const
bool operator<(const SolutionState< Scalar > &ss) const
Less than comparison for sorting based on time.
virtual Scalar getDxNormL2Abs() const
virtual Scalar getErrorRel() const
virtual bool getIsInterpolated() const
virtual void setOrder(int order)
virtual bool getAccuracy() const
virtual void setX(Teuchos::RCP< Thyra::VectorBase< Scalar > > x)
virtual void setPhysicsState(const Teuchos::RCP< PhysicsState< Scalar > > &ps)
virtual void setXDotDot(Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdotdot)
#define TEUCHOS_ASSERT(assertion_test)
virtual void setMetaData(Teuchos::RCP< SolutionStateMetaData< Scalar > > md)
virtual Status getSolutionStatus() const
virtual void setMetaData(Teuchos::RCP< const SolutionStateMetaData< Scalar > > md)
virtual Scalar getTimeStep() const
virtual Teuchos::RCP< Thyra::VectorBase< Scalar > > getX()
virtual void setTime(Scalar time)
virtual void setPhysicsState(Teuchos::RCP< PhysicsState< Scalar > > &ps)
virtual void setComputeNorms(bool computeNorms)
virtual Teuchos::RCP< const Thyra::VectorBase< Scalar > > getXDotDot() const
Teuchos::RCP< const Thyra::VectorBase< Scalar > > xdot_
Time derivative of the solution.
virtual void setOutput(bool output)
virtual std::string description() const
Solution state for integrators and steppers. SolutionState contains the metadata for solutions and th...
virtual void setTolRel(Scalar tolRel)
Teuchos::RCP< SolutionStateMetaData< Scalar > > metaData_nc_
virtual void copy(const Teuchos::RCP< const SolutionState< Scalar > > &ss)
This is a deep copy.