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
136template<class Scalar>
138 public Teuchos::Describable,
139 public Teuchos::VerboseObject<Tempus::SolutionState<Scalar> >
140{
141public:
142
149
151 const Teuchos::RCP<SolutionStateMetaData<Scalar> > ssmd,
152 const Teuchos::RCP<Thyra::VectorBase<Scalar> >& x,
153 const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdot,
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
184 virtual Teuchos::RCP<const SolutionStateMetaData<Scalar> >
185 getMetaData() const { return metaData_; }
186 virtual Teuchos::RCP<SolutionStateMetaData<Scalar> > getMetaData()
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(
218 Teuchos::RCP<const SolutionStateMetaData<Scalar> > md)
219 { metaData_ = md; metaData_nc_ = Teuchos::null; }
220 virtual void setMetaData(Teuchos::RCP<SolutionStateMetaData<Scalar> > md)
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 {
261 if (sStatus.solveStatus == Thyra::SOLVE_STATUS_CONVERGED )
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); }
277
278
280
281 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getX()
282 { TEUCHOS_ASSERT(x_nc_ != Teuchos::null);
283 return x_nc_; }
284 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getX() const
285 { return x_; }
286 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDot()
287 { return xdot_nc_; }
288 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDot() const
289 { return xdot_; }
290 virtual Teuchos::RCP<Thyra::VectorBase<Scalar> > getXDotDot()
291 { return xdotdot_nc_; }
292 virtual Teuchos::RCP<const Thyra::VectorBase<Scalar> > getXDotDot() const
293 { return xdotdot_; }
294
295 virtual Teuchos::RCP<StepperState<Scalar> > getStepperState()
296 { TEUCHOS_ASSERT(stepperState_nc_ != Teuchos::null);
297 return stepperState_nc_; }
298 virtual Teuchos::RCP<const StepperState<Scalar> > getStepperState() const
299 { return stepperState_; }
300
301 virtual Teuchos::RCP<PhysicsState<Scalar> > getPhysicsState()
302 { return physicsState_nc_; }
303 virtual Teuchos::RCP<const PhysicsState<Scalar> > getPhysicsState() const
304 { return physicsState_; }
305
306
308
309 virtual void setX(Teuchos::RCP<Thyra::VectorBase<Scalar> > x)
310 { x_nc_ = x; x_ = x; }
311 virtual void setX(Teuchos::RCP<const Thyra::VectorBase<Scalar> > x)
312 { x_nc_ = Teuchos::null; x_ = x; }
313 virtual void setXDot(Teuchos::RCP<Thyra::VectorBase<Scalar> > xdot)
314 { xdot_nc_ = xdot; xdot_ = xdot; }
315 virtual void setXDot(Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot)
316 { xdot_nc_ = Teuchos::null; xdot_ = xdot; }
317 virtual void setXDotDot(Teuchos::RCP<Thyra::VectorBase<Scalar> > xdotdot)
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
322 virtual void setStepperState(Teuchos::RCP<StepperState<Scalar> >& ss)
323 { stepperState_nc_ = ss; stepperState_ = ss; }
324 virtual void setStepperState(const Teuchos::RCP<StepperState<Scalar> >& ss)
325 { stepperState_nc_ = Teuchos::null; stepperState_ = ss; }
326
327 virtual void setPhysicsState(Teuchos::RCP<PhysicsState<Scalar> >& ps)
328 { physicsState_nc_ = ps; physicsState_ = ps; }
329 virtual void setPhysicsState(const Teuchos::RCP<PhysicsState<Scalar> >& ps)
330 { physicsState_nc_ = Teuchos::null; physicsState_ = ps; }
331
332
333
335
336
337 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
378private:
379 // Member Data
380
382 Teuchos::RCP<const SolutionStateMetaData<Scalar> > metaData_;
383 Teuchos::RCP<SolutionStateMetaData<Scalar> > metaData_nc_;
384
386 Teuchos::RCP<const Thyra::VectorBase<Scalar> > x_;
387 Teuchos::RCP<Thyra::VectorBase<Scalar> > x_nc_;
388
390 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdot_;
391 Teuchos::RCP<Thyra::VectorBase<Scalar> > xdot_nc_;
392
394 Teuchos::RCP<const Thyra::VectorBase<Scalar> > xdotdot_;
395 Teuchos::RCP<Thyra::VectorBase<Scalar> > xdotdot_nc_;
396
398 Teuchos::RCP<const StepperState<Scalar> > stepperState_;
399 Teuchos::RCP<StepperState<Scalar> > stepperState_nc_;
400
402 Teuchos::RCP<const PhysicsState<Scalar> > physicsState_;
403 Teuchos::RCP<PhysicsState<Scalar> > physicsState_nc_;
404
405};
406
407
409template<class Scalar>
410Teuchos::RCP<SolutionState<Scalar> >
412 const Teuchos::RCP<Thyra::VectorBase<Scalar> >& x,
413 const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdot = Teuchos::null,
414 const Teuchos::RCP<Thyra::VectorBase<Scalar> >& xdotdot = Teuchos::null);
415
417template<class Scalar>
418Teuchos::RCP<SolutionState<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
425template<class Scalar>
426Teuchos::RCP<SolutionState<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
PhysicsState is a simple class to hold information about the physics.
Solution state for integrators and steppers.
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 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
Greater 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 or equal to 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
Greater than or equal to 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_
StepperState is a simple class to hold state information about the stepper.
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.