43 lines
1.7 KiB
C++
43 lines
1.7 KiB
C++
#ifndef FESA_ASSEMBLY_SURFACE_PRESSURE_ASSEMBLER_H_
|
|
#define FESA_ASSEMBLY_SURFACE_PRESSURE_ASSEMBLER_H_
|
|
|
|
#include <vector>
|
|
|
|
#include "fesa/analysis/analysis_model.h"
|
|
#include "fesa/assembly/parallel_for.h"
|
|
#include "fesa/core/diagnostic.h"
|
|
#include "fesa/core/status.h"
|
|
#include "fesa/fem/dof_manager.h"
|
|
#include "fesa/loads/shell_surface_pressure.h"
|
|
#include "fesa/math/sparse_matrix.h"
|
|
#include "fesa/math/vector.h"
|
|
|
|
namespace fesa {
|
|
|
|
/// @brief Stores one complete full-space surface-pressure assembly candidate.
|
|
struct SurfacePressureAssemblyCandidate {
|
|
Vector full_external_force;
|
|
SparseMatrix full_external_tangent;
|
|
std::vector<Diagnostic> diagnostics;
|
|
};
|
|
|
|
/// @brief Assembles active surface-pressure records into stable full DOFs.
|
|
/// @param model Non-owning active model whose Domain outlives this call.
|
|
/// @param dofs Owner of the stable shell scatter and full-DOF ordering.
|
|
/// @param full_generalized_coordinates Full `[u1,u2,u3,phi1,phi2,phi3]`
|
|
/// coordinates used only for current-configuration evaluation.
|
|
/// @param load_factor Applied exactly once to every source pressure record.
|
|
/// @param configuration Selects reference or current surface geometry.
|
|
/// @param parallel_for Runs only index-owned local evaluator candidates.
|
|
/// @return A fully validated force/tangent candidate or a structured failure.
|
|
/// @note Global vector and CSR reduction occur serially after all local work.
|
|
Result<SurfacePressureAssemblyCandidate> AssembleSurfacePressure(
|
|
const AnalysisModel& model, const DofManager& dofs,
|
|
const Vector& full_generalized_coordinates, double load_factor,
|
|
SurfacePressureConfiguration configuration,
|
|
const ParallelFor& parallel_for);
|
|
|
|
} // namespace fesa
|
|
|
|
#endif // FESA_ASSEMBLY_SURFACE_PRESSURE_ASSEMBLER_H_
|