Go to the documentation of this file. 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>
15 template<
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; }
35 {
return Real(271)/
Real(314)*0.5*t*t; }
39 template<
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
73 { time_solver.set_beta(
_beta);
74 time_solver.compute_initial_accel(); }
88 #ifdef LIBMESH_HAVE_SOLVER
101 this->run_test_with_exact_soln<ConstantSecondOrderODE<SecondOrderScalarSystemSecondOrderTimeSolverBase>>(0.5,10);
110 this->run_test_with_exact_soln<LinearTimeSecondOrderODE<SecondOrderScalarSystemSecondOrderTimeSolverBase>>(0.5,10);
115 this->run_test_with_exact_soln<ConstantSecondOrderODE<SecondOrderScalarSystemFirstOrderTimeSolverBase>>(0.5,10);
124 this->run_test_with_exact_soln<LinearTimeSecondOrderODE<SecondOrderScalarSystemFirstOrderTimeSolverBase>>(0.5,10);
129 template<
typename TimeSolverType>
141 { time_solver.theta =
_theta; }
155 #ifdef LIBMESH_HAVE_SOLVER
166 this->run_test_with_exact_soln<ConstantSecondOrderODE<SecondOrderScalarSystemFirstOrderTimeSolverBase>>(0.5,10);
177 #ifdef LIBMESH_HAVE_SOLVER
187 this->run_test_with_exact_soln<ConstantSecondOrderODE<SecondOrderScalarSystemFirstOrderTimeSolverBase>>(0.5,10);
void testEulerSolverConstantSecondOrderODE()
void testNewmarkSolverConstantSecondOrderODESecondOrderStyle()
Implements ODE: 1.0\ddot{u} = 6.0*t+2.0, u(0) = 0,.
Implements ODE: 3.14\ddot{u} = 2.71, u(0) = 0,.
CPPUNIT_TEST_SUITE(Euler2SolverSecondOrderTest)
virtual void aux_time_solver_init(NewmarkSolver &time_solver) override
virtual Number F(FEMContext &, unsigned int) override
void testNewmarkSolverLinearTimeSecondOrderODESecondOrderStyle()
CPPUNIT_TEST(testEuler2SolverConstantSecondOrderODE)
virtual Number C(FEMContext &, unsigned int) override
void testNewmarkSolverConstantSecondOrderODEFirstOrderStyle()
CPPUNIT_TEST(testEulerSolverConstantSecondOrderODE)
CPPUNIT_TEST_SUITE_REGISTRATION(NewmarkSolverTest)
CPPUNIT_TEST_SUITE(NewmarkSolverTest)
virtual Number F(FEMContext &context, unsigned int) override
virtual Number M(FEMContext &, unsigned int) override
LinearTimeSecondOrderODE(EquationSystems &es, const std::string &name_in, const unsigned int number_in)
virtual Number u(Real t) override
virtual Number M(FEMContext &, unsigned int) override
virtual void aux_time_solver_init(TimeSolverType &time_solver)
CPPUNIT_TEST(testNewmarkSolverConstantSecondOrderODESecondOrderStyle)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual Number C(FEMContext &, unsigned int) override
virtual Number u(Real t) override
void testNewmarkSolverLinearTimeSecondOrderODEFirstOrderStyle()
ConstantSecondOrderODE(EquationSystems &es, const std::string &name_in, const unsigned int number_in)
void testEuler2SolverConstantSecondOrderODE()
CPPUNIT_TEST_SUITE(EulerSolverSecondOrderTest)
void set_theta(Real theta)