Files
FESADev/include/fesa/core/AnalysisState.hpp
T
2026-06-09 15:12:41 +09:00

53 lines
1.6 KiB
C++

#pragma once
#include <cstddef>
#include <cstdint>
#include <vector>
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<double>& displacement() const noexcept;
const std::vector<double>& externalForce() const noexcept;
const std::vector<double>& internalForce() const noexcept;
const std::vector<double>& residual() const noexcept;
const std::vector<double>& reaction() const noexcept;
void setDisplacement(std::vector<double> values);
void setExternalForce(std::vector<double> values);
void setInternalForce(std::vector<double> values);
void setResidual(std::vector<double> values);
void setReaction(std::vector<double> 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<double>& target, std::vector<double> values);
static void zero(std::vector<double>& values) noexcept;
std::size_t dof_count_;
std::vector<double> displacement_;
std::vector<double> external_force_;
std::vector<double> internal_force_;
std::vector<double> residual_;
std::vector<double> reaction_;
double current_time_;
std::int64_t increment_index_;
std::int64_t iteration_index_;
};
} // namespace fesa::core