#pragma once #include #include namespace fesa::analysis { struct IterationState { double time = 0.0; int increment = 0; int iteration = 0; }; class AnalysisState { public: explicit AnalysisState(int total_dof_count); const std::vector& displacement() const; const std::vector& velocity() const; const std::vector& acceleration() const; const std::vector& temperature() const; const std::vector& external_force() const; const std::vector& internal_force() const; const std::vector& residual() const; void set_displacement(std::vector values); void set_external_force(std::vector values); void set_internal_force(std::vector values); void update_residual(); IterationState& iteration_state(); const IterationState& iteration_state() const; void set_element_state(core::ElementId element_id, std::vector state); const std::vector* element_state(core::ElementId element_id) const; private: static std::vector vector_of(int size); static void assign_same_size(std::vector& target, std::vector values); std::vector displacement_; std::vector velocity_; std::vector acceleration_; std::vector temperature_; std::vector external_force_; std::vector internal_force_; std::vector residual_; IterationState iteration_state_; std::vector>> element_states_; }; } // namespace fesa::analysis