Tempus
Version of the Day
Time Integration
Toggle main menu visibility
Loading...
Searching...
No Matches
unit_test
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
9
#include "
Tempus_UnitTest_Utils.hpp
"
10
11
#include "Thyra_DefaultSpmdVectorSpace.hpp"
12
13
#include "
Tempus_NumericalUtils.hpp
"
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;
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
// ************************************************************
52
TEUCHOS_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_Unit_Test
Tempus_NumericalUtils.hpp
Tempus_UnitTest_Utils.hpp
Tempus::Stepper_ErrorNorm
Stepper_ErrorNorm provides error norm calcualtions for variable time stepping.
Definition
Tempus_Stepper_ErrorNorm_decl.hpp:24
Tempus_Unit_Test
Definition
Tempus_UnitTest_BackwardEuler.cpp:22
Tempus_Unit_Test::TEUCHOS_UNIT_TEST
TEUCHOS_UNIT_TEST(BackwardEuler, Default_Construction)
Definition
Tempus_UnitTest_BackwardEuler.cpp:34
Tempus::numericalTol
const Scalar numericalTol()
Numerical Tolerance (approx. max. significant digits minus two).
Definition
Tempus_NumericalUtils.hpp:21
Generated by
1.17.0