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;
134 const bool iso_parametric,
135 const Eigen::VectorXi &disc_orders,
136 const std::string &basis_type,
137 const std::string &poly_basis_type,
140 const int quadrature_order,
141 const int mass_quadrature_order,
142 const bool use_corner_quadrature,
143 const int n_harmonic_samples,
144 const int integral_constraints,
147 std::shared_ptr<GeometryMapping> geometry =
nullptr);
152 const std::string &poly_basis_type,
155 const int quadrature_order,
156 const int mass_quadrature_order,
157 const int n_harmonic_samples,
158 const int integral_constraints,
164 const std::string &basis_type,
166 Eigen::VectorXi &space_in_node_to_node,
167 Eigen::VectorXi &space_in_primitive_to_primitive)
const;
177 const bool rest_mesh_written =
false)
const;
180 void save_restart_json(
const double t0,
const double dt,
const int t,
const bool rest_mesh_written)
const;
181 void save_timestep(
const double time,
const int t,
const double t0,
const double dt,
const Eigen::MatrixXd &solution)
const;
182 void save_subsolve(
const int i,
const int t,
const Eigen::MatrixXd &solution)
const;
184 void notify_time_step(
const int t,
const int time_steps,
const double t0,
const double dt)
const;
211 const std::string &state_path,
212 const std::string &x_name,
214 const Eigen::VectorXi &in_node_to_node,
219 const std::vector<basis::ElementBases> &bases,
220 const std::vector<int> &node_ids,
221 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