fix(equation-and-linear-solve): address review findings

This commit is contained in:
KOKO\Mimi
2026-07-31 16:36:07 +09:00
parent 2dd17be5d0
commit 741fc9eaea
12 changed files with 329 additions and 147 deletions
+1 -6
View File
@@ -1,6 +1,5 @@
#pragma once
#include <cstddef>
#include <optional>
#include <span>
#include <vector>
@@ -8,15 +7,12 @@
#include <fesa/assembly/equation_system.hpp>
#include <fesa/core/diagnostic.hpp>
#include <fesa/fem/dof_manager.hpp>
#include <fesa/model/step_definition.hpp>
namespace fesa {
struct ReducedSystem final {
SymmetricCsr stiffness;
std::vector<double> force;
std::vector<std::size_t> free_to_full;
std::vector<double> prescribed_full;
};
struct ConstraintResult final {
@@ -26,8 +22,7 @@ struct ConstraintResult final {
[[nodiscard]] ConstraintResult eliminate_essential_bcs(
const EquationSystem& original,
const DofManager& dofs,
std::span<const PrescribedDof> prescribed);
const DofManager& dofs);
[[nodiscard]] std::vector<double> recover_reaction(
const EquationSystem& original,
+4
View File
@@ -34,8 +34,12 @@ public:
[[nodiscard]] std::size_t free_equation_count() const noexcept;
[[nodiscard]] std::optional<std::size_t> equation(
DofAddress address) const;
[[nodiscard]] std::optional<std::size_t> equation(
std::size_t full_dof) const;
[[nodiscard]] std::optional<double> prescribed_value(
DofAddress address) const;
[[nodiscard]] std::optional<double> prescribed_value(
std::size_t full_dof) const;
[[nodiscard]] std::size_t full_dof(DofAddress address) const;
[[nodiscard]] std::array<std::size_t, 12> element_full_dofs(
const BeamElement& element) const;
@@ -10,6 +10,9 @@ class PardisoLinearSolver final : public LinearSolver {
public:
PardisoLinearSolver();
~PardisoLinearSolver() override;
PardisoLinearSolver(const PardisoLinearSolver&) = delete;
PardisoLinearSolver& operator=(
const PardisoLinearSolver&) = delete;
[[nodiscard]] LinearSolveResult solve(
const SymmetricCsr& matrix,