Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 namespace Tempus_Unit_Test {
19 
20 // ************************************************************
21 // ************************************************************
22 TEUCHOS_UNIT_TEST(Stepper_ErrorNorm, computeWRMSNorm)
23 {
24  int N = 3;
26  Thyra::defaultSpmdVectorSpace<double>(N);
27  auto x = Thyra::createMember(xSpace);
28  auto xNext = Thyra::createMember(xSpace);
29  auto eVec = Thyra::createMember(xSpace);
30 
31  auto tol = Tempus::numericalTol<double>();
32  auto eNorm = Teuchos::rcp(new Tempus::Stepper_ErrorNorm<double>(tol, 0.0));
33 
34  Thyra::assign(x.ptr(), 0.0);
35  Thyra::assign(xNext.ptr(), 0.0);
36  Thyra::assign(eVec.ptr(), 0.0);
37  double rmsNorm = eNorm->computeWRMSNorm(x, xNext, eVec);
38  TEST_FLOATING_EQUALITY(rmsNorm, 0.0, 1.0e-12);
39 
40  Thyra::assign(x.ptr(), 1.0);
41  Thyra::assign(xNext.ptr(), 1.0 + tol);
42  Thyra::assign(eVec.ptr(), tol);
43  rmsNorm = eNorm->computeWRMSNorm(x, xNext, eVec);
44  TEST_FLOATING_EQUALITY(rmsNorm, 1.0 / std::sqrt(N), 1.0e-12);
45 }
46 
47 // ************************************************************
48 // ************************************************************
49 TEUCHOS_UNIT_TEST(Stepper_ErrorNorm, errorNorm)
50 {
52  Thyra::defaultSpmdVectorSpace<double>(3);
53  auto x = Thyra::createMember(xSpace);
54 
55  auto tol = Tempus::numericalTol<double>();
56  auto eNorm = Teuchos::rcp(new Tempus::Stepper_ErrorNorm<double>(tol, tol));
57 
58  Thyra::assign(x.ptr(), 0.0);
59  double norm = eNorm->errorNorm(x);
60  TEST_FLOATING_EQUALITY(norm, tol, 1.0e-12);
61 
62  Thyra::assign(x.ptr(), 1.0);
63  norm = eNorm->errorNorm(x);
64  TEST_FLOATING_EQUALITY(norm, 1.0 / (2.0 * tol), 1.0e-12);
65 }
66 
67 } // namespace Tempus_Unit_Test
#define TEST_FLOATING_EQUALITY(v1, v2, tol)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
Stepper_ErrorNorm provides error norm calcualtions for variable time stepping.