24#include <unordered_map>
30 namespace time_integrator
33 class ImplicitTimeIntegrator;
38 class VarFormTestAccess;
52 virtual std::string
name()
const = 0;
68 virtual void init(
const std::string &formulation,
const Units &
units,
const json &
args,
const std::string &out_path);
72 void set_mesh(std::unique_ptr<mesh::Mesh> mesh,
const double loading_mesh_time = 0);
76 void solve(Eigen::MatrixXd &sol);
96 const Eigen::MatrixXd &solution,
109 virtual void save_json(
const Eigen::MatrixXd &solution, std::ostream &out)
const = 0;
112 void save_json(
const Eigen::MatrixXd &solution)
const;
113 virtual void export_data(
const Eigen::MatrixXd &solution)
const = 0;
117 std::string
resolve_input_path(
const std::string &path,
const bool only_if_exists =
false)
const;
120 virtual void reset() = 0;
133 const bool iso_parametric,
134 const Eigen::VectorXi &disc_orders,
135 const std::string &basis_type,
136 const std::string &poly_basis_type,
139 const int quadrature_order,
140 const int mass_quadrature_order,
141 const bool use_corner_quadrature,
142 const int n_harmonic_samples,
143 const int integral_constraints,
146 std::shared_ptr<GeometryMapping> geometry =
nullptr);
151 const std::string &poly_basis_type,
154 const int quadrature_order,
155 const int mass_quadrature_order,
156 const int n_harmonic_samples,
157 const int integral_constraints,
163 const std::string &basis_type,
165 Eigen::VectorXi &space_in_node_to_node,
166 Eigen::VectorXi &space_in_primitive_to_primitive)
const;
178 const bool rest_mesh_written =
false)
const;
181 void save_restart_json(
const double t0,
const double dt,
const int t,
const bool rest_mesh_written)
const;
182 void save_timestep(
const double time,
const int t,
const double t0,
const double dt,
const Eigen::MatrixXd &solution)
const;
183 void save_subsolve(
const int i,
const int t,
const Eigen::MatrixXd &solution)
const;
185 void notify_time_step(
const int t,
const int time_steps,
const double t0,
const double dt)
const;
212 const std::string &state_path,
213 const std::string &x_name,
215 const Eigen::VectorXi &in_node_to_node,
220 const std::vector<basis::ElementBases> &bases,
221 const std::vector<int> &node_ids,
222 std::vector<RowVectorNd> &positions);
Utilies related to export of geometry.
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
Implicit time integrator of a second order ODE (equivently a system of coupled first order ODEs).
std::function< std::vector< OutputField >(const OutputSample &)> OutputFieldFunction
std::array< int, 2 > QuadratureOrders