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 
136 template<class Scalar>
138  public Teuchos::Describable,
139  public Teuchos::VerboseObject<Tempus::SolutionState<Scalar> >
140 {
141 public:
142 
148  SolutionState();
149 
154  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdotdot,
155  const Teuchos::RCP<StepperState<Scalar> >& stepperState,
156  const Teuchos::RCP<PhysicsState<Scalar> >& physicsState);
157 
159  const Teuchos::RCP<const SolutionStateMetaData<Scalar> > ssmd,
160  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& x,
161  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdot,
162  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdotdot,
163  const Teuchos::RCP<const StepperState<Scalar> >& stepperState,
164  const Teuchos::RCP<const PhysicsState<Scalar> >& physicsState);
165 
168 
170  virtual Teuchos::RCP<SolutionState<Scalar> > clone() const;
171 
173  virtual void copy(const Teuchos::RCP<const SolutionState<Scalar> >& ss);
174 
176  virtual void copySolutionData(
177  const Teuchos::RCP<const SolutionState<Scalar> >& s);
178 
180  virtual ~SolutionState() {}
181 
183 
185  getMetaData() const { return metaData_; }
187  { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
188  return metaData_nc_; }
189 
190  virtual Scalar getTime() const {return metaData_->getTime();}
191  virtual int getIndex() const {return metaData_->getIStep();}
192  virtual Scalar getTimeStep() const {return metaData_->getDt();}
193  virtual Scalar getErrorAbs() const {return metaData_->getErrorAbs();}
194  virtual Scalar getErrorRel() const {return metaData_->getErrorRel();}
195  virtual Scalar getErrorRelNm1() const {return metaData_->getErrorRelNm1();}
196  virtual Scalar getErrorRelNm2() const {return metaData_->getErrorRelNm2();}
197  virtual int getOrder() const {return metaData_->getOrder();}
198  virtual int getNFailures() const {return metaData_->getNFailures();}
199  virtual int getNRunningFailures() const {return metaData_->getNRunningFailures();}
200  virtual int getNConsecutiveFailures() const {return metaData_->getNConsecutiveFailures();}
201  virtual Scalar getTolAbs() const {return metaData_->getTolAbs();}
202  virtual Scalar getTolRel() const {return metaData_->getTolRel();}
203  virtual Scalar getXNormL2() const {return metaData_->getXNormL2();}
204  virtual Scalar getDxNormL2Abs() const {return metaData_->getDxNormL2Abs();}
205  virtual Scalar getDxNormL2Rel() const {return metaData_->getDxNormL2Rel();}
206  virtual bool getComputeNorms() const {return metaData_->getComputeNorms();}
207  virtual Status getSolutionStatus() const {return metaData_->getSolutionStatus();}
208  virtual bool getOutput() const {return metaData_->getOutput();}
209  virtual bool getOutputScreen() const {return metaData_->getOutputScreen();}
210  virtual bool getIsSynced() const {return metaData_->getIsSynced();}
211  virtual bool getIsInterpolated() const {return metaData_->getIsInterpolated();}
212  virtual bool getAccuracy() const {return metaData_->getAccuracy();}
214 
216 
217  virtual void setMetaData(
219  { metaData_ = md; metaData_nc_ = Teuchos::null; }
221  { metaData_nc_ = md; metaData_ = metaData_nc_; }
222 
223  virtual void setTime(Scalar time) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
224  metaData_nc_->setTime(time);}
225  virtual void setIndex(Scalar index) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
226  metaData_nc_->setIStep(index);}
227  virtual void setTimeStep(Scalar dt) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
228  metaData_nc_->setDt(dt);}
229  virtual void setErrorAbs(Scalar errorAbs){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
230  metaData_nc_->setErrorAbs(errorAbs);}
231  virtual void setErrorRel(Scalar errorRel){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
232  metaData_nc_->setErrorRel(errorRel);}
233  virtual void setOrder(int order) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
234  metaData_nc_->setOrder(order); }
235 
236  virtual void setNFailures(int nFailures) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
237  metaData_nc_->setNFailures(nFailures); }
238  virtual void setNRunningFailures(int nFailures) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
239  metaData_nc_->setNRunningFailures(nFailures); }
240  virtual void setNConsecutiveFailures(int nConsecutiveFailures)
241  { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
242  metaData_nc_->setNConsecutiveFailures(nConsecutiveFailures); }
243  virtual void setTolRel (Scalar tolRel){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
244  metaData_nc_->setTolRel(tolRel); }
245  virtual void setTolAbs (Scalar tolAbs){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
246  metaData_nc_->setTolAbs(tolAbs); }
247 
248  virtual void setXNormL2 (Scalar xNormL2){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
249  metaData_nc_->setXNormL2(xNormL2); }
250  virtual void setDxNormL2Rel (Scalar dxNormL2Rel){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
251  metaData_nc_->setDxNormL2Rel(dxNormL2Rel); }
252  virtual void setDxNormL2Abs (Scalar dxNormL2Abs){ TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
253  metaData_nc_->setDxNormL2Abs(dxNormL2Abs); }
254  virtual void setComputeNorms(bool computeNorms) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
255  metaData_nc_->setComputeNorms(computeNorms); }
256 
257  virtual void setSolutionStatus(Status s) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
258  metaData_nc_->setSolutionStatus(s); }
259  virtual void setSolutionStatus(const Thyra::SolveStatus<Scalar> sStatus)
260  {
262  metaData_nc_->setSolutionStatus(Status::PASSED);
263  else
264  metaData_nc_->setSolutionStatus(Status::FAILED);
265  }
266 
267  virtual void setOutput(bool output) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
268  metaData_nc_->setOutput(output); }
269  virtual void setOutputScreen(bool output) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
270  metaData_nc_->setOutputScreen(output); }
271  virtual void setIsSynced(bool isSynced) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
272  metaData_nc_->setIsSynced(isSynced); }
273  virtual void setIsInterpolated(bool isInterpolated) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
274  metaData_nc_->setIsInterpolated(isInterpolated); }
275  virtual void setAccuracy(bool accuracy) { TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
276  metaData_nc_->setAccuracy(accuracy); }
278 
280 
282  { TEUCHOS_ASSERT(x_nc_ != Teuchos::null);
283  return x_nc_; }
285  { return x_; }
287  { return xdot_nc_; }
289  { return xdot_; }
291  { return xdotdot_nc_; }
293  { return xdotdot_; }
294 
296  { TEUCHOS_ASSERT(stepperState_nc_ != Teuchos::null);
297  return stepperState_nc_; }
299  { return stepperState_; }
300 
302  { return physicsState_nc_; }
304  { return physicsState_; }
306 
308 
310  { x_nc_ = x; x_ = x; }
312  { x_nc_ = Teuchos::null; x_ = x; }
314  { xdot_nc_ = xdot; xdot_ = xdot; }
315  virtual void setXDot(Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot)
316  { xdot_nc_ = Teuchos::null; xdot_ = xdot; }
318  { xdotdot_nc_ = xdotdot; xdotdot_ = xdotdot; }
319  virtual void setXDotDot(Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot)
320  { xdotdot_nc_ = Teuchos::null; xdotdot_ = xdotdot; }
321 
323  { stepperState_nc_ = ss; stepperState_ = ss; }
325  { stepperState_nc_ = Teuchos::null; stepperState_ = ss; }
326 
328  { physicsState_nc_ = ps; physicsState_ = ps; }
330  { physicsState_nc_ = Teuchos::null; physicsState_ = ps; }
332 
333 
335 
336  bool operator< (const SolutionState<Scalar>& ss) const;
338 
340  bool operator<= (const SolutionState<Scalar>& ss) const;
341 
343  bool operator< (const Scalar& t) const;
344 
346  bool operator<= (const Scalar& t) const;
347 
349  bool operator> (const SolutionState<Scalar>& ss) const;
350 
352  bool operator>= (const SolutionState<Scalar>& ss) const;
353 
355  bool operator> (const Scalar& t) const;
356 
358  bool operator>= (const Scalar& t) const;
359 
361  bool operator== (const SolutionState<Scalar>& ss) const;
362 
364  bool operator== (const Scalar& t) const;
366 
368 
369  virtual std::string description() const;
370  virtual void describe(Teuchos::FancyOStream &out,
371  const Teuchos::EVerbosityLevel verbLevel) const;
373 
375  virtual void computeNorms(
376  const Teuchos::RCP<const SolutionState<Scalar> >& ssIn = Teuchos::null);
377 
378 private:
379  // Member Data
380 
384 
388 
392 
396 
400 
404 
405 };
406 
407 
409 template<class Scalar>
413  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdot = Teuchos::null,
414  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdotdot = Teuchos::null);
415 
417 template<class Scalar>
420  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& x,
421  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdot =Teuchos::null,
422  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdotdot =Teuchos::null);
423 
425 template<class Scalar>
428  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model,
429  const Teuchos::RCP<StepperState<Scalar> >& stepperState = Teuchos::null,
430  const Teuchos::RCP<PhysicsState<Scalar> >& physicsState = Teuchos::null);
431 
432 
433 
434 } // namespace Tempus
435 
436 #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
Greater 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
Greater than or equal to 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 or equal to 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.
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.