37 lines
895 B
C++
37 lines
895 B
C++
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <optional>
|
|
#include <span>
|
|
#include <vector>
|
|
|
|
#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 {
|
|
std::optional<ReducedSystem> reduced_system;
|
|
std::vector<Diagnostic> diagnostics;
|
|
};
|
|
|
|
[[nodiscard]] ConstraintResult eliminate_essential_bcs(
|
|
const EquationSystem& original,
|
|
const DofManager& dofs,
|
|
std::span<const PrescribedDof> prescribed);
|
|
|
|
[[nodiscard]] std::vector<double> recover_reaction(
|
|
const EquationSystem& original,
|
|
std::span<const double> full_displacement);
|
|
|
|
} // namespace fesa
|