feat: implement consistent-mass HHT shell dynamics

This commit is contained in:
KOKO\Mimi
2026-09-22 21:38:42 +09:00
parent fec8cf09c2
commit f0dc42a280
41 changed files with 9294 additions and 125 deletions
+9 -4
View File
@@ -5,6 +5,7 @@
#include <string>
#include <vector>
#include "fesa/analysis/hht_dynamic_procedure.h"
#include "fesa/analysis/linear_frequency_procedure.h"
#include "fesa/analysis/linear_static_procedure.h"
#include "fesa/analysis/newton_iteration_log.h"
@@ -13,6 +14,7 @@
#include "fesa/app/output_paths.h"
#include "fesa/assembly/parallel_for.h"
#include "fesa/core/diagnostic.h"
#include "fesa/io/hdf5/dynamic_hdf5_results_writer.h"
#include "fesa/io/hdf5/eigen_hdf5_results_writer.h"
#include "fesa/io/hdf5/hdf5_results_writer.h"
#include "fesa/io/hdf5/nonlinear_hdf5_results_writer.h"
@@ -84,6 +86,7 @@ int FesaApplication::Run(const std::vector<std::string>& arguments) {
Hdf5ResultsWriter linear_writer;
NonlinearHdf5ResultsWriter nonlinear_writer;
EigenHdf5ResultsWriter eigen_writer;
DynamicHdf5ResultsWriter dynamic_writer;
NewtonIterationLogWriter log;
Status status = log.Open(paths.Value().log_path);
@@ -101,9 +104,11 @@ int FesaApplication::Run(const std::vector<std::string>& arguments) {
NonlinearStaticProcedureExecutor nonlinear_executor(parallel_for,
tangent_solver);
const LinearFrequencyProcedureExecutor frequency_executor;
Result<PreparedAnalysisOutcome> outcome =
ExecutePreparedAnalysis(prepared.Value().domain, linear_executor,
nonlinear_executor, frequency_executor, log);
const HhtDynamicProcedureExecutor dynamic_executor(
parallel_for, linear_solver, tangent_solver);
Result<PreparedAnalysisOutcome> outcome = ExecutePreparedAnalysis(
prepared.Value().domain, linear_executor, nonlinear_executor,
frequency_executor, log, &dynamic_executor);
if (!outcome.HasValue()) {
status = outcome.GetStatus();
} else {
@@ -115,7 +120,7 @@ int FesaApplication::Run(const std::vector<std::string>& arguments) {
status = FinalizePreparedAnalysisResult(
paths.Value(), prepared.Value().domain, outcome.Value(),
prepared.Value().diagnostics, linear_writer, nonlinear_writer,
eigen_writer);
eigen_writer, &dynamic_writer);
if (status.IsOk()) {
return kSuccessExitCode;
}