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 
19 namespace Tempus_Unit_Test {
20 
21 // ************************************************************
22 // ************************************************************
23 TEUCHOS_UNIT_TEST(Stepper_ErrorNorm, computeWRMSNorm)
24 {
25 
26  int N = 3;
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 // ************************************************************
52 TEUCHOS_UNIT_TEST(Stepper_ErrorNorm, errorNorm)
53 {
54 
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_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.