Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Tempus_UnitTest_Stepper_ErrorNorm.cpp
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
10
11#include "Thyra_DefaultSpmdVectorSpace.hpp"
12
14#include "Tempus_Stepper_ErrorNorm.hpp"
15
16#include "../TestModels/DahlquistTestModel.hpp"
17
18
19namespace Tempus_Unit_Test {
20
21// ************************************************************
22// ************************************************************
23TEUCHOS_UNIT_TEST(Stepper_ErrorNorm, computeWRMSNorm)
24{
25
26 int N = 3;
27 Teuchos::RCP<const Thyra::VectorSpaceBase<double> > xSpace =
28 Thyra::defaultSpmdVectorSpace<double>(N);
29 auto x = Thyra::createMember(xSpace);
30 auto xNext = Thyra::createMember(xSpace);
31 auto eVec = Thyra::createMember(xSpace);
32
33 auto tol = Tempus::numericalTol<double>();
34 auto eNorm = Teuchos::rcp(new Tempus::Stepper_ErrorNorm<double>(tol, 0.0));
35
36 Thyra::assign(x.ptr(), 0.0);
37 Thyra::assign(xNext.ptr(), 0.0);
38 Thyra::assign(eVec.ptr(), 0.0);
39 double rmsNorm = eNorm->computeWRMSNorm(x, xNext, eVec);
40 TEST_FLOATING_EQUALITY(rmsNorm, 0.0, 1.0e-12);
41
42 Thyra::assign(x.ptr(), 1.0);
43 Thyra::assign(xNext.ptr(), 1.0+tol);
44 Thyra::assign(eVec.ptr(), tol);
45 rmsNorm = eNorm->computeWRMSNorm(x, xNext, eVec);
46 TEST_FLOATING_EQUALITY(rmsNorm, 1.0/std::sqrt(N), 1.0e-12);
47}
48
49
50// ************************************************************
51// ************************************************************
52TEUCHOS_UNIT_TEST(Stepper_ErrorNorm, errorNorm)
53{
54
55 Teuchos::RCP<const Thyra::VectorSpaceBase<double> > xSpace =
56 Thyra::defaultSpmdVectorSpace<double>(3);
57 auto x = Thyra::createMember(xSpace);
58
59 auto tol = Tempus::numericalTol<double>();
60 auto eNorm = Teuchos::rcp(new Tempus::Stepper_ErrorNorm<double>(tol, tol));
61
62 Thyra::assign(x.ptr(), 0.0);
63 double norm = eNorm->errorNorm(x);
64 TEST_FLOATING_EQUALITY(norm, tol, 1.0e-12);
65
66 Thyra::assign(x.ptr(), 1.0);
67 norm = eNorm->errorNorm(x);
68 TEST_FLOATING_EQUALITY(norm, 1.0/(2.0*tol), 1.0e-12);
69}
70
71
72} // namespace Tempus_Test
Stepper_ErrorNorm provides error norm calcualtions for variable time stepping.
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)