엄격 수렴 기준 실행 보존과 한정 HHT 개발 계측 기록

This commit is contained in:
KOKO\Mimi
2026-10-19 02:09:22 +09:00
parent 78cb339207
commit adb809bc01
12 changed files with 450 additions and 0 deletions
@@ -1,4 +1,5 @@
#include "analysis/hht_reduced_procedure.h"
#include "analysis/hht_development_probe.h"
#include "analysis/hht_reduced_integrator.h"
#include "equilibrium_algorithm.h"
@@ -396,8 +397,16 @@ Result<DynamicExecutionResult> ExecuteReducedHht(
TangentSolver& tangent_solver) {
const ReducedCoordinateShellHhtIntegrator integrator;
NewtonStepAlgorithm algorithm;
#if defined(FESA_HHT_DEVELOPMENT_PROBE)
hht_development_probe::Session probe_session;
hht_development_probe::PositiveSolver measured_positive{positive_solver};
hht_development_probe::CorrectionSolver measured_tangent{tangent_solver};
return ExecuteReducedHht(domain, log, parallel_for, measured_positive,
measured_tangent, integrator, algorithm);
#else
return ExecuteReducedHht(domain, log, parallel_for, positive_solver,
tangent_solver, integrator, algorithm);
#endif
}
Result<DynamicExecutionResult> ExecuteReducedHht(
@@ -405,6 +414,7 @@ Result<DynamicExecutionResult> ExecuteReducedHht(
const ParallelFor& parallel_for, LinearSolver& positive_solver,
TangentSolver& tangent_solver, const ShellHhtIntegrator& integrator,
EquilibriumAlgorithm& algorithm) {
FESA_HHT_PROBE_SCOPE(kProcedure);
if (domain.Dynamic() == nullptr)
return Result<DynamicExecutionResult>::Failure(Status::Failure(
FailureCategory::kModel, {{Severity::kError, "invalid-dynamic-step", {},
@@ -1016,6 +1026,7 @@ Result<DynamicExecutionResult> ExecuteReducedHht(
};
Vector selected_solution{selected.Value().rhs.Size()};
if (selected_solution.Size() > 0U) {
FESA_HHT_PROBE_SCOPE(kOuterSolve);
status = tangent_solver.FactorizeFresh(selected.Value().tangent);
if (!status.IsOk())
return linear_failure(status);
@@ -1091,6 +1102,7 @@ Result<DynamicExecutionResult> ExecuteReducedHht(
seed = trial.Value().root.z;
for (std::size_t i = 0U; i < seed.Size(); ++i)
seed[i] += correction.Value().z[i];
FESA_HHT_PROBE_COUNT(kOuterCorrection);
return StepResult::Success(std::nullopt);
},
kMaximumOuterCorrections);