54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
#ifndef FESA_MODEL_SHELL_GEOMETRY_H_
|
|
#define FESA_MODEL_SHELL_GEOMETRY_H_
|
|
|
|
#include <array>
|
|
#include <cstddef>
|
|
#include <vector>
|
|
|
|
#include "fesa/core/status.h"
|
|
#include "fesa/model/model_types.h"
|
|
|
|
namespace fesa {
|
|
|
|
/// @brief Classifies a mandatory shell-geometry validation location.
|
|
enum class ShellGeometryPointKind { kCenter, kStiffness, kTying, kRecovery };
|
|
|
|
/// @brief Identifies one deterministic shell-geometry validation point.
|
|
struct ShellGeometryValidationPoint {
|
|
ShellGeometryPointKind kind;
|
|
std::size_t location_index;
|
|
std::array<double, 3> natural_coordinates;
|
|
};
|
|
|
|
/// @brief Stores deterministic preprocessing data for one shell element.
|
|
struct ShellElementGeometryData {
|
|
EntityIndex element_index;
|
|
std::array<double, 3> normal_candidate;
|
|
double surface_area_weight;
|
|
};
|
|
|
|
/// @brief Owns preprocessed shell node frames and element geometry data.
|
|
struct ShellGeometry {
|
|
std::vector<ShellNodeInitialFrame> nodal_frames;
|
|
std::vector<ShellElementGeometryData> element_data;
|
|
};
|
|
|
|
/// @brief Returns the complete fixed validation-point inventory.
|
|
/// @note Ordering is center, stiffness, tying, then recovery identity.
|
|
const std::array<ShellGeometryValidationPoint, 17>&
|
|
ShellGeometryValidationPoints() noexcept;
|
|
|
|
/// @brief Builds deterministic nodal frames and validates shell geometry.
|
|
/// @param nodes Source nodes indexed by stable EntityIndex.
|
|
/// @param elements Shell definitions in stable source order.
|
|
/// @param sections Shell sections used for thickness validation.
|
|
/// @return Validated geometry or a structured model failure.
|
|
Result<ShellGeometry> PreprocessShellGeometry(
|
|
const std::vector<Node>& nodes,
|
|
const std::vector<Mitc4ShellDefinition>& elements,
|
|
const std::vector<ShellSection>& sections);
|
|
|
|
} // namespace fesa
|
|
|
|
#endif // FESA_MODEL_SHELL_GEOMETRY_H_
|