libMesh
parsed_function_test.C
Go to the documentation of this file.
1 // libmesh includes
2 #include "libmesh/elem.h"
3 #include "libmesh/equation_systems.h"
4 #include "libmesh/mesh.h"
5 #include "libmesh/mesh_generation.h"
6 #include "libmesh/numeric_vector.h"
7 #include "libmesh/parsed_function.h"
8 #include "libmesh/system.h"
9 
10 #ifdef LIBMESH_HAVE_FPARSER
11 
12 // test includes
13 #include "test_comm.h"
14 #include "libmesh_cppunit.h"
15 
16 
17 using namespace libMesh;
18 
19 class ParsedFunctionTest : public CppUnit::TestCase
20 {
21 public:
22  void setUp() {}
23 
24  void tearDown() {}
25 
26  CPPUNIT_TEST_SUITE(ParsedFunctionTest);
27 
28 #if LIBMESH_DIM > 2
29  CPPUNIT_TEST(testValues);
30  CPPUNIT_TEST(testInlineGetter);
31  CPPUNIT_TEST(testInlineSetter);
32  CPPUNIT_TEST(testTimeDependence);
33 #endif
34 
35  CPPUNIT_TEST_SUITE_END();
36 
37 
38 private:
39 
40  void testValues()
41  {
42  ParsedFunction<Number> x2("x*2");
43 
44  // Test that the copy constructor works
45  ParsedFunction<Number> x2_copy(x2);
46 
47  LIBMESH_ASSERT_FP_EQUAL
48  (libmesh_real(x2_copy(Point(0.5,1.5,2.5))), 1.0, TOLERANCE*TOLERANCE);
49 
50  ParsedFunction<Number> xy8("x*y*8");
51 
52  // Test that the move ctor works
53  ParsedFunction<Number> xy8_stolen(std::move(xy8));
54 
55  LIBMESH_ASSERT_FP_EQUAL
56  (libmesh_real(xy8_stolen(Point(0.5,1.5,2.5))), 6.0, TOLERANCE*TOLERANCE);
57  }
58 
60  {
61  ParsedFunction<Number> ax2("a:=4.5;a*x*2");
62 
63  // Test whether move assignment works.
64  ParsedFunction<Number> ax2_stolen("x");
65  ax2_stolen = std::move(ax2);
66 
67  LIBMESH_ASSERT_FP_EQUAL
68  (libmesh_real(ax2_stolen(Point(0.25,0.25,0.25))), 2.25, TOLERANCE*TOLERANCE);
69 
70  LIBMESH_ASSERT_FP_EQUAL
71  (libmesh_real(ax2_stolen.get_inline_value("a")), 4.5, TOLERANCE*TOLERANCE);
72 
74  ("a := 4 ; b := a/2+1; c:=b-a+3.5; c*x*2*y*4");
75 
76  LIBMESH_ASSERT_FP_EQUAL
77  (libmesh_real(cxy8(Point(0.5,0.5,0.5))), 5.0, TOLERANCE*TOLERANCE);
78 
79  LIBMESH_ASSERT_FP_EQUAL
81 
82  LIBMESH_ASSERT_FP_EQUAL
84  }
85 
87  {
88  ParsedFunction<Number> ax2("a:=4.5;a*x*2");
89  ax2.set_inline_value("a", 2.5);
90 
91  LIBMESH_ASSERT_FP_EQUAL
92  (libmesh_real(ax2(Point(0.25,0.25,0.25))), 1.25, TOLERANCE*TOLERANCE);
93 
94  LIBMESH_ASSERT_FP_EQUAL
96 
98  ("a := 4 ; b := a/2+1; c:=b-a+3.5; c*x*2*y*4");
99  cxy8.set_inline_value("a", 2);
100 
101  LIBMESH_ASSERT_FP_EQUAL
102  (libmesh_real(cxy8(Point(0.5,0.5,0.5))), 7.0, TOLERANCE*TOLERANCE);
103 
104  LIBMESH_ASSERT_FP_EQUAL
106 
107  LIBMESH_ASSERT_FP_EQUAL
109  }
110 
112  {
113  ParsedFunction<Number> no_t("x*2+y^2-tanh(z)+atan(x-y)");
114  CPPUNIT_ASSERT(!no_t.is_time_dependent());
115 
116  ParsedFunction<Number> xyt("x+y+t");
117  CPPUNIT_ASSERT(xyt.is_time_dependent());
118 
119  ParsedFunction<Number> x2y2t2("x*2+y^2+t^2");
120  CPPUNIT_ASSERT(x2y2t2.is_time_dependent());
121 
122  ParsedFunction<Number> ztanht("z*tanh(t)");
123  CPPUNIT_ASSERT(ztanht.is_time_dependent());
124  }
125 
126 };
127 
129 
130 #endif // #ifdef LIBMESH_HAVE_FPARSER
libMesh::ParsedFunction
A Function generated (via FParser) by parsing a mathematical expression.
Definition: parsed_function.h:60
ParsedFunctionTest::testInlineGetter
void testInlineGetter()
Definition: parsed_function_test.C:59
libMesh::FunctionBase::is_time_dependent
bool is_time_dependent() const
Definition: function_base.h:219
libMesh::libmesh_real
T libmesh_real(T a)
Definition: libmesh_common.h:166
libMesh::ParsedFunction::get_inline_value
Output get_inline_value(const std::string &inline_var_name) const
Definition: parsed_function.h:368
libMesh
The libMesh namespace provides an interface to certain functionality in the library.
Definition: factoryfunction.C:55
ParsedFunctionTest::tearDown
void tearDown()
Definition: parsed_function_test.C:24
libMesh::TOLERANCE
static const Real TOLERANCE
Definition: libmesh_common.h:128
ParsedFunctionTest::testTimeDependence
void testTimeDependence()
Definition: parsed_function_test.C:111
ParsedFunctionTest::setUp
void setUp()
Definition: parsed_function_test.C:22
libMesh::Point
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:38
ParsedFunctionTest::testInlineSetter
void testInlineSetter()
Definition: parsed_function_test.C:86
libmesh_cppunit.h
ParsedFunctionTest
Definition: parsed_function_test.C:19
libMesh::ParsedFunction::set_inline_value
void set_inline_value(const std::string &inline_var_name, Output newval)
Changes the value of an inline variable.
Definition: parsed_function.h:442
CPPUNIT_TEST_SUITE_REGISTRATION
CPPUNIT_TEST_SUITE_REGISTRATION(ParsedFunctionTest)
test_comm.h
ParsedFunctionTest::testValues
void testValues()
Definition: parsed_function_test.C:40