#pragma once #include #include #include namespace fesa::core { class AnalysisState { public: AnalysisState(); explicit AnalysisState(std::size_t dof_count); std::size_t dofCount() const noexcept; void resize(std::size_t dof_count); const std::vector& displacement() const noexcept; const std::vector& externalForce() const noexcept; const std::vector& internalForce() const noexcept; const std::vector& residual() const noexcept; const std::vector& reaction() const noexcept; void setDisplacement(std::vector values); void setExternalForce(std::vector values); void setInternalForce(std::vector values); void setResidual(std::vector values); void setReaction(std::vector values); void clearForces() noexcept; double currentTime() const noexcept; void setCurrentTime(double value) noexcept; std::int64_t incrementIndex() const noexcept; void setIncrementIndex(std::int64_t value) noexcept; std::int64_t iterationIndex() const noexcept; void setIterationIndex(std::int64_t value) noexcept; private: void setVector(std::vector& target, std::vector values); static void zero(std::vector& values) noexcept; std::size_t dof_count_; std::vector displacement_; std::vector external_force_; std::vector internal_force_; std::vector residual_; std::vector reaction_; double current_time_; std::int64_t increment_index_; std::int64_t iteration_index_; }; } // namespace fesa::core