feat(result-contract-completion): step 1 — complete-result-contract
This commit is contained in:
@@ -59,7 +59,7 @@ fesa::Domain build_axial_domain(const bool all_constrained) {
|
||||
2.0,
|
||||
fesa::ShearPropertySource::input,
|
||||
fesa::Vec3{0.0, 1.0, 0.0},
|
||||
{},
|
||||
{{1.0, 2.0}, {-1.0, -2.0}},
|
||||
});
|
||||
builder.add_beam_element({
|
||||
fesa::ElementId{0},
|
||||
@@ -214,4 +214,49 @@ TEST(LinearStaticAnalysis, SolvesAllConstrainedSystemWithoutPardiso) {
|
||||
EXPECT_NEAR(nodal.reaction[1][0], -5.0, 1.0e-12);
|
||||
}
|
||||
|
||||
TEST(CompleteResultContract, PreservesOriginsConnectivityAndBeamRecovery) {
|
||||
const fesa::Domain domain = build_axial_domain(false);
|
||||
|
||||
const fesa::AnalysisRunResult run =
|
||||
fesa::LinearStaticAnalysis{}.run(domain);
|
||||
|
||||
ASSERT_TRUE(run.succeeded);
|
||||
ASSERT_TRUE(run.results.has_value());
|
||||
const fesa::ResultFrame& frame = run.results->steps[0].frames[0];
|
||||
EXPECT_EQ(
|
||||
frame.nodal.origins,
|
||||
(std::vector<fesa::EntityOrigin>{
|
||||
{"BeamPart", "Beam-1", 2},
|
||||
{"BeamPart", "Beam-1", 1},
|
||||
}));
|
||||
|
||||
ASSERT_EQ(frame.element.beams.size(), 1U);
|
||||
const fesa::BeamElementFrame& beam = frame.element.beams[0];
|
||||
EXPECT_EQ(beam.element, fesa::ElementId{0});
|
||||
EXPECT_EQ(
|
||||
beam.origin,
|
||||
(fesa::EntityOrigin{"BeamPart", "Beam-1", 1}));
|
||||
EXPECT_DOUBLE_EQ(beam.local_frame.ex.x, 1.0);
|
||||
EXPECT_DOUBLE_EQ(beam.local_frame.ex.y, 0.0);
|
||||
EXPECT_DOUBLE_EQ(beam.local_frame.ex.z, 0.0);
|
||||
EXPECT_DOUBLE_EQ(beam.local_frame.ey.x, 0.0);
|
||||
EXPECT_DOUBLE_EQ(beam.local_frame.ey.y, 1.0);
|
||||
EXPECT_DOUBLE_EQ(beam.local_frame.ey.z, 0.0);
|
||||
EXPECT_DOUBLE_EQ(beam.local_frame.ez.x, 0.0);
|
||||
EXPECT_DOUBLE_EQ(beam.local_frame.ez.y, 0.0);
|
||||
EXPECT_DOUBLE_EQ(beam.local_frame.ez.z, 1.0);
|
||||
EXPECT_EQ(beam.end_results[0].end_node, fesa::NodeId{20});
|
||||
EXPECT_EQ(beam.end_results[1].end_node, fesa::NodeId{4});
|
||||
EXPECT_DOUBLE_EQ(beam.end_results[0].xi, -1.0);
|
||||
EXPECT_DOUBLE_EQ(beam.end_results[1].xi, 1.0);
|
||||
for (const fesa::BeamSectionResult& end : beam.end_results) {
|
||||
EXPECT_NEAR(end.section_strain[0], 0.05, 1.0e-12);
|
||||
EXPECT_NEAR(end.section_force[0], 10.0, 1.0e-12);
|
||||
EXPECT_NEAR(end.centroid_sigma_xx, 5.0, 1.0e-12);
|
||||
ASSERT_EQ(end.sigma_xx.size(), 2U);
|
||||
EXPECT_NEAR(end.sigma_xx[0], 5.0, 1.0e-12);
|
||||
EXPECT_NEAR(end.sigma_xx[1], 5.0, 1.0e-12);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user