85 lines
2.6 KiB
C++
85 lines
2.6 KiB
C++
#ifndef FESA_IO_ABAQUS_DOMAIN_MAPPING_CONTEXT_H_
|
|
#define FESA_IO_ABAQUS_DOMAIN_MAPPING_CONTEXT_H_
|
|
|
|
#include <cstddef>
|
|
#include <memory>
|
|
|
|
#include "fesa/core/status.h"
|
|
#include "fesa/io/abaqus/input_syntax.h"
|
|
#include "fesa/model/domain.h"
|
|
|
|
namespace fesa::abaqus_internal {
|
|
|
|
class DomainBuilder;
|
|
class MaterialPropertyMapper;
|
|
class SurfaceDefinitionMapper;
|
|
class StepDefinitionMapper;
|
|
class TopologyMapper;
|
|
|
|
/// @brief Summarizes syntax-derived candidates before Domain ownership begins.
|
|
struct DomainMappingCandidateSummary {
|
|
std::size_t part_count;
|
|
std::size_t node_count;
|
|
std::size_t element_count;
|
|
std::size_t instance_count;
|
|
std::size_t node_set_count;
|
|
std::size_t element_set_count;
|
|
std::size_t material_count;
|
|
std::size_t beam_section_count;
|
|
std::size_t shell_section_count;
|
|
std::size_t model_boundary_count;
|
|
std::size_t step_boundary_count;
|
|
std::size_t step_load_count;
|
|
bool has_static_step;
|
|
};
|
|
|
|
/// @brief Owns uncommitted Abaqus mapping candidates shared by private stages.
|
|
/// @note The ParsedInput reference must outlive this context and all stages.
|
|
class DomainMappingContext {
|
|
public:
|
|
/// @brief Starts an empty mapping candidate for one parsed input.
|
|
explicit DomainMappingContext(const ParsedInput& input);
|
|
~DomainMappingContext();
|
|
|
|
DomainMappingContext(const DomainMappingContext&) = delete;
|
|
DomainMappingContext& operator=(const DomainMappingContext&) = delete;
|
|
DomainMappingContext(DomainMappingContext&&) = delete;
|
|
DomainMappingContext& operator=(DomainMappingContext&&) = delete;
|
|
|
|
/// @brief Reports stable raw candidate counts for component verification.
|
|
DomainMappingCandidateSummary CandidateSummary() const noexcept;
|
|
|
|
private:
|
|
class Impl;
|
|
|
|
friend class DomainBuilder;
|
|
friend class MaterialPropertyMapper;
|
|
friend class SurfaceDefinitionMapper;
|
|
friend class StepDefinitionMapper;
|
|
friend class TopologyMapper;
|
|
|
|
/// @brief Parses syntax into uncommitted topology and semantic candidates.
|
|
Status ParseSyntax();
|
|
|
|
/// @brief Validates and projects material and property candidates.
|
|
Status FinalizeMaterialProperties();
|
|
|
|
/// @brief Expands identity instances and stable topology candidates.
|
|
Status FinalizeTopology();
|
|
|
|
/// @brief Resolves assembly-level element surfaces after topology expansion.
|
|
Status FinalizeElementSurfaces();
|
|
|
|
/// @brief Resolves the sole static step against finalized source targets.
|
|
Status FinalizeStep();
|
|
|
|
/// @brief Atomically transfers a complete candidate into Domain ownership.
|
|
Result<Domain> Commit();
|
|
|
|
std::unique_ptr<Impl> impl_;
|
|
};
|
|
|
|
} // namespace fesa::abaqus_internal
|
|
|
|
#endif // FESA_IO_ABAQUS_DOMAIN_MAPPING_CONTEXT_H_
|