53 lines
1.6 KiB
C++
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
|