b2api
B2000++ API Reference Manual, VERSION 4.6
 
Loading...
Searching...
No Matches
b2time_integrator.H
1//------------------------------------------------------------------------
2// b2time_integrator.H --
3//
4//
5// written by Harald Klimach <harald.klimach@dlr.de>
6// Thomas Blome <thomas.blome@dlr.de>
7//
8// (c) 2023 Deutsches Zentrum für Luft- und Raumfahrt (DLR) e.V.
9// Linder Höhe, 51147 Köln
10//
11// All Rights Reserved. Proprietary source code. The contents of
12// this file may not be disclosed to third parties, copied or
13// duplicated in any form, in whole or in part, without the prior
14// written permission of SMR.
15//------------------------------------------------------------------------
16
17#ifndef B2TIME_INTEGRATOR_H_
18#define B2TIME_INTEGRATOR_H_
19
20#include <utility>
21
22#include "b2ppconfig.h"
23#include "model/b2case.H"
24#include "model/b2solver.H"
25#include "utils/b2linear_algebra.H"
26#include "utils/b2object.H"
27
28namespace b2000::solver {
29
31template <typename T>
32class TimeIntegrator : public Object {
33public:
35 using EffectiveSymmetricSystem =
36 std::pair<b2linalg::Matrix<T, b2linalg::Mpacked>, b2linalg::Vector<T, b2linalg::Vdense>>;
37 using EffectiveUnsymmetricSystem = std::pair<
38 b2linalg::Matrix<T, b2linalg::Mrectangle>, b2linalg::Vector<T, b2linalg::Vdense>>;
39
43 virtual void SetAttribute(const Case& b2case) = 0;
44
51 const b2linalg::Matrix<T, b2linalg::Mrectangle>& initial_dof, const double dt) = 0;
52
53 bool IsFinalStage() { return current_stage_number_ == max_stage_number_; }
54
55 // const auto& GetVelocities() const = 0;
56
65 b2linalg::Matrix<T, b2linalg::Mrectangle>& dof,
66 const b2linalg::Matrix<T, b2linalg::Mrectangle>& dU) = 0;
67
71 virtual void UpdateFields(
72 b2linalg::Matrix<T, b2linalg::Mrectangle>& dof,
73 const b2linalg::Matrix<T, b2linalg::Mrectangle>& dU) = 0;
74
82 virtual EffectiveSymmetricSystem GetEffectiveElementSystem(
83 const b2linalg::Matrix<T, b2linalg::Mpacked>& k,
84 const b2linalg::Matrix<T, b2linalg::Mpacked>& d,
85 const b2linalg::Matrix<T, b2linalg::Mpacked>& m,
86 const b2linalg::Matrix<T, b2linalg::Mrectangle_constref>& dof,
87 const b2linalg::Index& index) const = 0;
88
96 virtual EffectiveUnsymmetricSystem GetEffectiveElementSystem(
97 const b2linalg::Matrix<T, b2linalg::Mrectangle>& k,
98 const b2linalg::Matrix<T, b2linalg::Mrectangle>& d,
99 const b2linalg::Matrix<T, b2linalg::Mrectangle>& m,
100 const b2linalg::Matrix<T, b2linalg::Mrectangle_constref>& dof,
101 const b2linalg::Index& index) const = 0;
102
103 static type_t type;
104
105 // double time_{};
106
107protected:
114 b2linalg::Matrix<T, b2linalg::Mrectangle> V_{};
115
121 b2linalg::Matrix<T, b2linalg::Mrectangle> Z_{};
122
128 b2linalg::Matrix<T, b2linalg::Mrectangle> dot_Z_{};
129
132 double dt{1};
133};
134
135template <typename T>
136typename TimeIntegrator<T>::type_t TimeIntegrator<T>::type(
137 "TimeIntegrator", type_name<T>(), StringList(), module, &Object::type);
138
139} // namespace b2000::solver
140
141#endif // B2TIME_INTEGRATOR_H_
Interface to C++ representations of FE solvers.
Definition b2case.H:110
Definition b2object.H:340
Definition b2object.H:456
static ObjectType type
Definition b2object.H:484
Definition b2util.H:54
Interface definition for performing time steps.
Definition b2time_integrator.H:32
virtual EffectiveUnsymmetricSystem GetEffectiveElementSystem(const b2linalg::Matrix< T, b2linalg::Mrectangle > &k, const b2linalg::Matrix< T, b2linalg::Mrectangle > &d, const b2linalg::Matrix< T, b2linalg::Mrectangle > &m, const b2linalg::Matrix< T, b2linalg::Mrectangle_constref > &dof, const b2linalg::Index &index) const =0
Calculates the element effective system based on the concrete time integrator.
b2linalg::Matrix< T, b2linalg::Mrectangle > Z_
Velocities.
Definition b2time_integrator.H:121
double dt
Step size.
Definition b2time_integrator.H:132
virtual 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 =0
Calculates the element effective system based on the concrete time integrator.
b2linalg::Matrix< T, b2linalg::Mrectangle > V_
Displacements.
Definition b2time_integrator.H:114
virtual void InitializeFieldsForThisTimeStep(b2linalg::Matrix< T, b2linalg::Mrectangle > &dof, const b2linalg::Matrix< T, b2linalg::Mrectangle > &dU)=0
Update velocities and (possibly) also accelerations after each time step. This method will also save ...
int current_stage_number_
For multi-stage methods such as Runge-Kutta methods ...
Definition b2time_integrator.H:130
virtual void InitializeTimeIntegrator(const b2linalg::Matrix< T, b2linalg::Mrectangle > &initial_dof, const double dt)=0
Initialize the time integrator with the model to act on the initial condition, the initial point in t...
int max_stage_number_
... (do not confuse this with b2000 stages)
Definition b2time_integrator.H:131
virtual void SetAttribute(const Case &b2case)=0
b2linalg::Matrix< T, b2linalg::Mrectangle > dot_Z_
Accelerations.
Definition b2time_integrator.H:128
virtual void UpdateFields(b2linalg::Matrix< T, b2linalg::Mrectangle > &dof, const b2linalg::Matrix< T, b2linalg::Mrectangle > &dU)=0
Update velocities and (possibly) also accelerations after each global iteration.