1#include <libmesh/equation_systems.h>
2#include <libmesh/mesh.h>
3#include <libmesh/mesh_generation.h>
4#include <libmesh/fem_system.h>
5#include <libmesh/quadrature.h>
6#include <libmesh/diff_solver.h>
7#include <libmesh/newmark_solver.h>
8#include <libmesh/euler_solver.h>
9#include <libmesh/euler2_solver.h>
15template<
typename SystemBase>
20 const std::string & name_in,
21 const unsigned int number_in)
22 : SystemBase(es, name_in, number_in)
25 virtual Number
F( FEMContext & ,
unsigned int )
override
26 {
return -Real(271)/100; }
28 virtual Number
C( FEMContext & ,
unsigned int )
override
31 virtual Number
M( FEMContext & ,
unsigned int )
override
32 {
return Real(314)/100; }
34 virtual Number
u( Real t )
override
35 {
return Real(271)/Real(314)*0.5*t*t; }
39template<
typename SystemBase>
44 const std::string & name_in,
45 const unsigned int number_in)
46 : SystemBase(es, name_in, number_in)
49 virtual Number
F( FEMContext & context,
unsigned int )
override
50 {
return -6.0*context.get_time()-2.0; }
52 virtual Number
C( FEMContext & ,
unsigned int )
override
55 virtual Number
M( FEMContext & ,
unsigned int )
override
58 virtual Number
u( Real t )
override
73 { time_solver.set_beta(
_beta);
74 time_solver.compute_initial_accel(); }
88#ifdef LIBMESH_HAVE_SOLVER
103 this->run_test_with_exact_soln<ConstantSecondOrderODE<SecondOrderScalarSystemSecondOrderTimeSolverBase>>(0.5,10);
114 this->run_test_with_exact_soln<LinearTimeSecondOrderODE<SecondOrderScalarSystemSecondOrderTimeSolverBase>>(0.5,10);
121 this->run_test_with_exact_soln<ConstantSecondOrderODE<SecondOrderScalarSystemFirstOrderTimeSolverBase>>(0.5,10);
132 this->run_test_with_exact_soln<LinearTimeSecondOrderODE<SecondOrderScalarSystemFirstOrderTimeSolverBase>>(0.5,10);
137template<
typename TimeSolverType>
149 { time_solver.theta =
_theta; }
163#ifdef LIBMESH_HAVE_SOLVER
176 this->run_test_with_exact_soln<ConstantSecondOrderODE<SecondOrderScalarSystemFirstOrderTimeSolverBase>>(0.5,10);
187#ifdef LIBMESH_HAVE_SOLVER
199 this->run_test_with_exact_soln<ConstantSecondOrderODE<SecondOrderScalarSystemFirstOrderTimeSolverBase>>(0.5,10);
Implements ODE: 3.14\ddot{u} = 2.71, u(0) = 0,.
ConstantSecondOrderODE(EquationSystems &es, const std::string &name_in, const unsigned int number_in)
virtual Number F(FEMContext &, unsigned int) override
virtual Number C(FEMContext &, unsigned int) override
virtual Number M(FEMContext &, unsigned int) override
virtual Number u(Real t) override
void testEuler2SolverConstantSecondOrderODE()
LIBMESH_CPPUNIT_TEST_SUITE(Euler2SolverSecondOrderTest)
CPPUNIT_TEST(testEuler2SolverConstantSecondOrderODE)
CPPUNIT_TEST(testEulerSolverConstantSecondOrderODE)
LIBMESH_CPPUNIT_TEST_SUITE(EulerSolverSecondOrderTest)
void testEulerSolverConstantSecondOrderODE()
Implements ODE: 1.0\ddot{u} = 6.0*t+2.0, u(0) = 0,.
LinearTimeSecondOrderODE(EquationSystems &es, const std::string &name_in, const unsigned int number_in)
virtual Number F(FEMContext &context, unsigned int) override
virtual Number M(FEMContext &, unsigned int) override
virtual Number u(Real t) override
virtual Number C(FEMContext &, unsigned int) override
virtual void aux_time_solver_init(NewmarkSolver &time_solver) override
CPPUNIT_TEST(testNewmarkSolverLinearTimeSecondOrderODESecondOrderStyle)
CPPUNIT_TEST(testNewmarkSolverConstantSecondOrderODEFirstOrderStyle)
void testNewmarkSolverConstantSecondOrderODEFirstOrderStyle()
void testNewmarkSolverLinearTimeSecondOrderODEFirstOrderStyle()
LIBMESH_CPPUNIT_TEST_SUITE(NewmarkSolverTest)
void testNewmarkSolverConstantSecondOrderODESecondOrderStyle()
CPPUNIT_TEST(testNewmarkSolverLinearTimeSecondOrderODEFirstOrderStyle)
void testNewmarkSolverLinearTimeSecondOrderODESecondOrderStyle()
CPPUNIT_TEST(testNewmarkSolverConstantSecondOrderODESecondOrderStyle)
void set_theta(Real theta)
virtual void aux_time_solver_init(TimeSolverType &time_solver)
CPPUNIT_TEST_SUITE_REGISTRATION(NewmarkSolverTest)