19#include "b2time_integrator.H"
21namespace b2000::solver {
38 const b2linalg::Matrix<T, b2linalg::Mrectangle>& initial_dof,
const double dt)
override;
41 b2linalg::Matrix<T, b2linalg::Mrectangle>& dof,
42 const b2linalg::Matrix<T, b2linalg::Mrectangle>& dU)
override;
45 b2linalg::Matrix<T, b2linalg::Mrectangle>& dof,
46 const b2linalg::Matrix<T, b2linalg::Mrectangle>& dU)
override;
49 const b2linalg::Matrix<T, b2linalg::Mpacked>& k,
50 const b2linalg::Matrix<T, b2linalg::Mpacked>& d,
51 const b2linalg::Matrix<T, b2linalg::Mpacked>& m,
52 const b2linalg::Matrix<T, b2linalg::Mrectangle_constref>& dof,
53 const b2linalg::Index& index)
const override;
56 const b2linalg::Matrix<T, b2linalg::Mrectangle>& k,
57 const b2linalg::Matrix<T, b2linalg::Mrectangle>& d,
58 const b2linalg::Matrix<T, b2linalg::Mrectangle>& m,
59 const b2linalg::Matrix<T, b2linalg::Mrectangle_constref>& dof,
60 const b2linalg::Index& index)
const override;
72 const b2linalg::Matrix<T, b2linalg::Mrectangle>& initial_dof,
const double dt) {
75 this->V_.resize(initial_dof.size1(), 1);
76 this->Z_.resize(initial_dof.size1(), 1);
77 this->dot_Z_.resize(initial_dof.size1(), 1);
82 b2linalg::Matrix<T, b2linalg::Mrectangle>& dof,
83 const b2linalg::Matrix<T, b2linalg::Mrectangle>& dU) {
87 this->dot_Z_[0] = dof[2];
90 UpdateFields(dof, dU);
95 b2linalg::Matrix<T, b2linalg::Mrectangle>& dof,
96 const b2linalg::Matrix<T, b2linalg::Mrectangle>& dU) {
98 dof[1] = gamma / beta / this->dt * dU[0] + (1.0 - gamma / beta) * this->Z_[0];
99 dof[1] += (1.0 - gamma / 2.0 / beta) * this->dt * this->dot_Z_[0];
102 dof[2] = 1.0 / beta / this->dt / this->dt * dU[0]
103 - (1.0 - 2 * beta) / 2.0 / beta * this->dot_Z_[0];
104 dof[2] -= 1.0 / beta / this->dt * this->Z_[0];
109 const b2linalg::Matrix<T, b2linalg::Mpacked>& k,
110 const b2linalg::Matrix<T, b2linalg::Mpacked>& d,
111 const b2linalg::Matrix<T, b2linalg::Mpacked>& m,
112 const b2linalg::Matrix<T, b2linalg::Mrectangle_constref>& dof,
113 const b2linalg::Index& index)
const {
114 b2linalg::Matrix<T, b2linalg::Mpacked> k_eff{m.size1(), m.is_upper()};
115 b2linalg::Vector<T, b2linalg::Vdense> f_eff_dyn{m.size1()};
117 k_eff = 1.0 / beta / this->dt / this->dt * m;
118 if (d.size1() != 0) { k_eff += gamma / beta / this->dt * d; }
122 b2linalg::Vector<T, b2linalg::Vdense> a{index.size()};
123 for (
size_t i{}; i < index.size(); ++i) { a[i] = dof(index[i], 2); }
127 return std::make_pair(k_eff, f_eff_dyn);
131inline TimeIntegrator<T>::EffectiveUnsymmetricSystem
133 const b2linalg::Matrix<T, b2linalg::Mrectangle>& k,
134 const b2linalg::Matrix<T, b2linalg::Mrectangle>& d,
135 const b2linalg::Matrix<T, b2linalg::Mrectangle>& m,
136 const b2linalg::Matrix<T, b2linalg::Mrectangle_constref>& dof,
137 const b2linalg::Index& index)
const {
138 b2linalg::Matrix<T, b2linalg::Mrectangle> k_eff{m.size1(), m.size2()};
139 b2linalg::Vector<T, b2linalg::Vdense> f_eff_dyn{m.size1()};
141 k_eff = 1.0 / beta / this->dt / this->dt * m;
142 if (d.size1() != 0) { k_eff += gamma / beta / this->dt * d; }
146 b2linalg::Vector<T, b2linalg::Vdense> a{index.size()};
147 for (
size_t i{}; i < index.size(); ++i) { a[i] = dof(index[i], 2); }
151 return std::make_pair(k_eff, f_eff_dyn);
Definition b2object.H:415
One-step (and direct) method, either implicit or explicit. Scheme parameters determine stability and ...
Definition b2newmark.H:31
virtual void SetAttribute(const Case &case__) override
Definition b2newmark.H:35
virtual void InitializeFieldsForThisTimeStep(b2linalg::Matrix< T, b2linalg::Mrectangle > &dof, const b2linalg::Matrix< T, b2linalg::Mrectangle > &dU) override
Update velocities and (possibly) also accelerations after each time step. This method will also save ...
Definition b2newmark.H:81
virtual void InitializeTimeIntegrator(const b2linalg::Matrix< T, b2linalg::Mrectangle > &initial_dof, const double dt) override
Initialize the time integrator with the model to act on the initial condition, the initial point in t...
Definition b2newmark.H:71
virtual void UpdateFields(b2linalg::Matrix< T, b2linalg::Mrectangle > &dof, const b2linalg::Matrix< T, b2linalg::Mrectangle > &dU) override
Update velocities and (possibly) also accelerations after each global iteration.
Definition b2newmark.H:94
virtual TimeIntegrator< T >::EffectiveSymmetricSystem GetEffectiveElementSystem(const b2linalg::Matrix< T, b2linalg::Mpacked > &k, const b2linalg::Matrix< T, b2linalg::Mpacked > &d, const b2linalg::Matrix< T, b2linalg::Mpacked > &m, const b2linalg::Matrix< T, b2linalg::Mrectangle_constref > &dof, const b2linalg::Index &index) const override
Calculates the element effective system based on the concrete time integrator.
Definition b2newmark.H:108
Interface definition for performing time steps.
Definition b2time_integrator.H:32
double dt
Step size.
Definition b2time_integrator.H:132