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 namespace Tempus {
24 
135 template <class Scalar>
137  : public Teuchos::Describable,
138  public Teuchos::VerboseObject<Tempus::SolutionState<Scalar> > {
139  public:
145  SolutionState();
146 
150  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdotdot,
151  const Teuchos::RCP<StepperState<Scalar> >& stepperState,
152  const Teuchos::RCP<PhysicsState<Scalar> >& physicsState);
153 
155  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& x,
156  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdot,
157  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdotdot,
158  const Teuchos::RCP<const StepperState<Scalar> >& stepperState,
159  const Teuchos::RCP<const PhysicsState<Scalar> >& physicsState);
160 
163 
165  virtual Teuchos::RCP<SolutionState<Scalar> > clone() const;
166 
168  virtual void copy(const Teuchos::RCP<const SolutionState<Scalar> >& ss);
169 
171  virtual void copySolutionData(
172  const Teuchos::RCP<const SolutionState<Scalar> >& s);
173 
175  virtual ~SolutionState() {}
176 
178 
180  {
181  return metaData_;
182  }
184  {
185  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
186  return metaData_nc_;
187  }
188 
189  virtual Scalar getTime() const { return metaData_->getTime(); }
190  virtual int getIndex() const { return metaData_->getIStep(); }
191  virtual Scalar getTimeStep() const { return metaData_->getDt(); }
192  virtual Scalar getErrorAbs() const { return metaData_->getErrorAbs(); }
193  virtual Scalar getErrorRel() const { return metaData_->getErrorRel(); }
194  virtual Scalar getErrorRelNm1() const { return metaData_->getErrorRelNm1(); }
195  virtual Scalar getErrorRelNm2() const { return metaData_->getErrorRelNm2(); }
196  virtual int getOrder() const { return metaData_->getOrder(); }
197  virtual int getNFailures() const { return metaData_->getNFailures(); }
198  virtual int getNRunningFailures() const
199  {
200  return metaData_->getNRunningFailures();
201  }
202  virtual int getNConsecutiveFailures() const
203  {
204  return metaData_->getNConsecutiveFailures();
205  }
206  virtual Scalar getTolAbs() const { return metaData_->getTolAbs(); }
207  virtual Scalar getTolRel() const { return metaData_->getTolRel(); }
208  virtual Scalar getXNormL2() const { return metaData_->getXNormL2(); }
209  virtual Scalar getDxNormL2Abs() const { return metaData_->getDxNormL2Abs(); }
210  virtual Scalar getDxNormL2Rel() const { return metaData_->getDxNormL2Rel(); }
211  virtual bool getComputeNorms() const { return metaData_->getComputeNorms(); }
212  virtual Status getSolutionStatus() const
213  {
214  return metaData_->getSolutionStatus();
215  }
216  virtual bool getOutput() const { return metaData_->getOutput(); }
217  virtual bool getOutputScreen() const { return metaData_->getOutputScreen(); }
218  virtual bool getIsSynced() const { return metaData_->getIsSynced(); }
219  virtual bool getIsInterpolated() const
220  {
221  return metaData_->getIsInterpolated();
222  }
223  virtual bool getAccuracy() const { return metaData_->getAccuracy(); }
225 
227 
228  virtual void setMetaData(
230  {
231  metaData_ = md;
232  metaData_nc_ = Teuchos::null;
233  }
235  {
236  metaData_nc_ = md;
238  }
239 
240  virtual void setTime(Scalar time)
241  {
242  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
243  metaData_nc_->setTime(time);
244  }
245  virtual void setIndex(Scalar index)
246  {
247  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
248  metaData_nc_->setIStep(index);
249  }
250  virtual void setTimeStep(Scalar dt)
251  {
252  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
253  metaData_nc_->setDt(dt);
254  }
255  virtual void setErrorAbs(Scalar errorAbs)
256  {
257  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
258  metaData_nc_->setErrorAbs(errorAbs);
259  }
260  virtual void setErrorRel(Scalar errorRel)
261  {
262  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
263  metaData_nc_->setErrorRel(errorRel);
264  }
265  virtual void setOrder(int order)
266  {
267  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
268  metaData_nc_->setOrder(order);
269  }
270 
271  virtual void setNFailures(int nFailures)
272  {
273  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
274  metaData_nc_->setNFailures(nFailures);
275  }
276  virtual void setNRunningFailures(int nFailures)
277  {
278  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
279  metaData_nc_->setNRunningFailures(nFailures);
280  }
281  virtual void setNConsecutiveFailures(int nConsecutiveFailures)
282  {
283  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
284  metaData_nc_->setNConsecutiveFailures(nConsecutiveFailures);
285  }
286  virtual void setTolRel(Scalar tolRel)
287  {
288  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
289  metaData_nc_->setTolRel(tolRel);
290  }
291  virtual void setTolAbs(Scalar tolAbs)
292  {
293  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
294  metaData_nc_->setTolAbs(tolAbs);
295  }
296 
297  virtual void setXNormL2(Scalar xNormL2)
298  {
299  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
300  metaData_nc_->setXNormL2(xNormL2);
301  }
302  virtual void setDxNormL2Rel(Scalar dxNormL2Rel)
303  {
304  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
305  metaData_nc_->setDxNormL2Rel(dxNormL2Rel);
306  }
307  virtual void setDxNormL2Abs(Scalar dxNormL2Abs)
308  {
309  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
310  metaData_nc_->setDxNormL2Abs(dxNormL2Abs);
311  }
312  virtual void setComputeNorms(bool computeNorms)
313  {
314  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
315  metaData_nc_->setComputeNorms(computeNorms);
316  }
317 
318  virtual void setSolutionStatus(Status s)
319  {
320  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
321  metaData_nc_->setSolutionStatus(s);
322  }
323  virtual void setSolutionStatus(const Thyra::SolveStatus<Scalar> sStatus)
324  {
326  metaData_nc_->setSolutionStatus(Status::PASSED);
327  else
328  metaData_nc_->setSolutionStatus(Status::FAILED);
329  }
330 
331  virtual void setOutput(bool output)
332  {
333  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
334  metaData_nc_->setOutput(output);
335  }
336  virtual void setOutputScreen(bool output)
337  {
338  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
339  metaData_nc_->setOutputScreen(output);
340  }
341  virtual void setIsSynced(bool isSynced)
342  {
343  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
344  metaData_nc_->setIsSynced(isSynced);
345  }
346  virtual void setIsInterpolated(bool isInterpolated)
347  {
348  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
349  metaData_nc_->setIsInterpolated(isInterpolated);
350  }
351  virtual void setAccuracy(bool accuracy)
352  {
353  TEUCHOS_ASSERT(metaData_nc_ != Teuchos::null);
354  metaData_nc_->setAccuracy(accuracy);
355  }
357 
359 
361  {
362  TEUCHOS_ASSERT(x_nc_ != Teuchos::null);
363  return x_nc_;
364  }
366  {
367  return x_;
368  }
370  {
371  return xdot_nc_;
372  }
374  {
375  return xdot_;
376  }
378  {
379  return xdotdot_nc_;
380  }
382  {
383  return xdotdot_;
384  }
385 
387  {
388  TEUCHOS_ASSERT(stepperState_nc_ != Teuchos::null);
389  return stepperState_nc_;
390  }
392  {
393  return stepperState_;
394  }
395 
397  {
398  return physicsState_nc_;
399  }
401  {
402  return physicsState_;
403  }
405 
407 
409  {
410  x_nc_ = x;
411  x_ = x;
412  }
414  {
415  x_nc_ = Teuchos::null;
416  x_ = x;
417  }
419  {
420  xdot_nc_ = xdot;
421  xdot_ = xdot;
422  }
423  virtual void setXDot(Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot)
424  {
425  xdot_nc_ = Teuchos::null;
426  xdot_ = xdot;
427  }
429  {
430  xdotdot_nc_ = xdotdot;
431  xdotdot_ = xdotdot;
432  }
433  virtual void setXDotDot(
434  Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot)
435  {
436  xdotdot_nc_ = Teuchos::null;
437  xdotdot_ = xdotdot;
438  }
439 
441  {
442  stepperState_nc_ = ss;
443  stepperState_ = ss;
444  }
446  {
447  stepperState_nc_ = Teuchos::null;
448  stepperState_ = ss;
449  }
450 
452  {
453  physicsState_nc_ = ps;
454  physicsState_ = ps;
455  }
457  {
458  physicsState_nc_ = Teuchos::null;
459  physicsState_ = ps;
460  }
462 
464 
465  bool operator<(const SolutionState<Scalar>& ss) const;
467 
469  bool operator<=(const SolutionState<Scalar>& ss) const;
470 
472  bool operator<(const Scalar& t) const;
473 
475  bool operator<=(const Scalar& t) const;
476 
478  bool operator>(const SolutionState<Scalar>& ss) const;
479 
481  bool operator>=(const SolutionState<Scalar>& ss) const;
482 
484  bool operator>(const Scalar& t) const;
485 
487  bool operator>=(const Scalar& t) const;
488 
490  bool operator==(const SolutionState<Scalar>& ss) const;
491 
493  bool operator==(const Scalar& t) const;
495 
497 
498  virtual std::string description() const;
499  virtual void describe(Teuchos::FancyOStream& out,
500  const Teuchos::EVerbosityLevel verbLevel) const;
502 
504  virtual void computeNorms(
505  const Teuchos::RCP<const SolutionState<Scalar> >& ssIn = Teuchos::null);
506 
507  private:
508  // Member Data
509 
513 
517 
521 
525 
529 
533 };
534 
536 template <class Scalar>
539  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdot = Teuchos::null,
540  const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdotdot = Teuchos::null);
541 
543 template <class Scalar>
545  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& x,
546  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdot = Teuchos::null,
547  const Teuchos::RCP<const Thyra::VectorBase<Scalar> >& xdotdot =
548  Teuchos::null);
549 
551 template <class Scalar>
553  const Teuchos::RCP<const Thyra::ModelEvaluator<Scalar> >& model,
554  const Teuchos::RCP<StepperState<Scalar> >& stepperState = Teuchos::null,
555  const Teuchos::RCP<PhysicsState<Scalar> >& physicsState = Teuchos::null);
556 
557 } // namespace Tempus
558 
559 #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.