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 Eigen::VectorXi &disc_ordersq,
137 const std::string &basis_type,
138 const std::string &poly_basis_type,
141 const int quadrature_order,
142 const int mass_quadrature_order,
143 const bool use_corner_quadrature,
144 const int n_harmonic_samples,
145 const int integral_constraints,
148 std::shared_ptr<GeometryMapping> geometry =
nullptr);
153 const std::string &poly_basis_type,
156 const int quadrature_order,
157 const int mass_quadrature_order,
158 const int n_harmonic_samples,
159 const int integral_constraints,
165 const std::string &basis_type,
167 Eigen::VectorXi &space_in_node_to_node,
168 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;
184 const double time,
const int t,
const double dt,
185 const Eigen::MatrixXd &solution, paraviewo::VTMWriter &vtm,
186 const std::string &block_prefix)
const;
187 void save_subsolve(
const int i,
const int t,
const Eigen::MatrixXd &solution)
const;
189 void notify_time_step(
const int t,
const int time_steps,
const double t0,
const double dt)
const;
216 const std::string &state_path,
217 const std::string &x_name,
219 const Eigen::VectorXi &in_node_to_node,
224 const std::vector<basis::ElementBases> &bases,
225 const std::vector<int> &node_ids,
226 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