완성된 HHT trial의 constraint 자료 중복 평가 제거

This commit is contained in:
KOKO\Mimi
2026-10-14 21:46:11 +09:00
parent 2850ceaa89
commit 0e5b3e05dd
11 changed files with 939 additions and 16 deletions
@@ -0,0 +1,24 @@
#ifndef FESA_SRC_FESA_ELEMENTS_NONLINEAR_MITC4_CONFIGURATION_INTERNAL_H_
#define FESA_SRC_FESA_ELEMENTS_NONLINEAR_MITC4_CONFIGURATION_INTERNAL_H_
#include <array>
#include <string>
#include "fesa/elements/nonlinear_mitc4_shell.h"
namespace fesa::nonlinear_mitc4_internal {
/// @brief Owns reference values without depending on an analysis or identity
/// key.
struct ConfigurationSnapshot {
std::array<double, 64> values{};
SourceLocation source{};
std::string identity;
/// @brief Copies all immutable inputs of the internal equilibrium evaluator.
static ConfigurationSnapshot Read(const NonlinearMitc4Shell& element);
};
} // namespace fesa::nonlinear_mitc4_internal
#endif // FESA_SRC_FESA_ELEMENTS_NONLINEAR_MITC4_CONFIGURATION_INTERNAL_H_
@@ -10,9 +10,34 @@
#include <utility>
#include "fesa/elements/finite_rotation.h"
#include "elements/nonlinear_mitc4_configuration_internal.h"
#include "math/dense_blas_internal.h"
namespace fesa {
nonlinear_mitc4_internal::ConfigurationSnapshot
nonlinear_mitc4_internal::ConfigurationSnapshot::Read(
const NonlinearMitc4Shell& element) {
ConfigurationSnapshot result{};
std::size_t index = 0U;
for (const auto& coordinates : element.coordinates_)
for (std::size_t c = 0U; c < 3U; ++c)
result.values[index++] = coordinates[c];
for (const auto& frame : element.initial_frames_)
for (std::size_t i = 0U; i < 3U; ++i)
for (std::size_t j = 0U; j < 3U; ++j)
result.values[index++] = frame(i, j);
for (const auto& director : element.initial_directors_)
for (std::size_t c = 0U; c < 3U; ++c) result.values[index++] = director[c];
result.values[index++] = element.thickness_;
result.values[index++] = element.youngs_modulus_;
result.values[index++] = element.poisson_ratio_;
result.values[index] = element.drilling_stiffness_;
result.source = element.source_location_;
result.identity = element.identity_;
return result;
}
namespace {
constexpr std::size_t kNodeCount = 4U;