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 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);
137 template<
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);
virtual void aux_time_solver_init(NewmarkSolver &time_solver) override
Implements ODE: 3.14{u} = 2.71, u(0) = 0,.
virtual Number u(Real t) override
CPPUNIT_TEST(testEulerSolverConstantSecondOrderODE)
virtual Number F(FEMContext &context, unsigned int) override
void testNewmarkSolverLinearTimeSecondOrderODEFirstOrderStyle()
LIBMESH_CPPUNIT_TEST_SUITE(NewmarkSolverTest)
virtual Number F(FEMContext &, unsigned int) override
void set_theta(Real theta)
virtual Number C(FEMContext &, unsigned int) override
void testEuler2SolverConstantSecondOrderODE()
CPPUNIT_TEST_SUITE_REGISTRATION(NewmarkSolverTest)
ConstantSecondOrderODE(EquationSystems &es, const std::string &name_in, const unsigned int number_in)
CPPUNIT_TEST(testNewmarkSolverConstantSecondOrderODESecondOrderStyle)
virtual Number M(FEMContext &, unsigned int) override
void testNewmarkSolverLinearTimeSecondOrderODESecondOrderStyle()
LIBMESH_CPPUNIT_TEST_SUITE(EulerSolverSecondOrderTest)
LIBMESH_CPPUNIT_TEST_SUITE(Euler2SolverSecondOrderTest)
void testNewmarkSolverConstantSecondOrderODEFirstOrderStyle()
CPPUNIT_TEST(testEuler2SolverConstantSecondOrderODE)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual Number C(FEMContext &, unsigned int) override
virtual Number u(Real t) override
virtual void aux_time_solver_init(TimeSolverType &time_solver)
Implements ODE: 1.0{u} = 6.0*t+2.0, u(0) = 0,.
LinearTimeSecondOrderODE(EquationSystems &es, const std::string &name_in, const unsigned int number_in)
virtual Number M(FEMContext &, unsigned int) override
void testNewmarkSolverConstantSecondOrderODESecondOrderStyle()
void testEulerSolverConstantSecondOrderODE()