#ifndef FESA_LOADS_SHELL_SURFACE_PRESSURE_H_ #define FESA_LOADS_SHELL_SURFACE_PRESSURE_H_ #include #include #include "fesa/core/status.h" #include "fesa/math/vector3.h" #include "fesa/model/model_types.h" namespace fesa { /// @brief Selects the surface geometry used to evaluate uniform pressure. enum class SurfacePressureConfiguration { kReference, kCurrent }; /// @brief Supplies one four-node shell facet pressure evaluation. struct ShellSurfacePressureInput { std::array reference_coordinates; std::array translational_displacements; ShellSurfaceSide side; double pressure_magnitude; double load_factor; SurfacePressureConfiguration configuration; SourceLocation location; std::string entity_identity; }; /// @brief Stores one fixed-order pressure force and external tangent. struct ShellSurfacePressureContribution { std::array force; std::array external_tangent; }; /// @brief Evaluates one four-node reference or follower surface pressure. /// @param input Geometry, pressure, side, load factor, and diagnostic identity. /// @return A finite 24-DOF force and external tangent or a structured failure. /// @note Translation DOFs occupy components zero through two of each node. /// @warning The returned tangent is the positive derivative of external force. Result EvaluateShellSurfacePressure( const ShellSurfacePressureInput& input); } // namespace fesa #endif // FESA_LOADS_SHELL_SURFACE_PRESSURE_H_