Connect MITC4 drilling evidence across analysis procedures
This commit is contained in:
@@ -454,3 +454,28 @@ TEST(NonlinearAnalysisState, StoresNoUnapprovedVerificationMetrics) {
|
||||
EXPECT_FALSE((HasVerificationMetrics<fesa::NonlinearTrialState>::value));
|
||||
EXPECT_FALSE((HasVerificationMetrics<fesa::AcceptedFrameState>::value));
|
||||
}
|
||||
|
||||
TEST(NonlinearAnalysisState, DrillingEvidenceRetainsModeAndRejectsPartialCommit) {
|
||||
const auto fixture = MakeFixture();
|
||||
auto result = fesa::NonlinearAnalysisState::Create(*fixture.domain, *fixture.dofs,
|
||||
MakeBaseline(*fixture.domain));
|
||||
ASSERT_TRUE(result.HasValue());
|
||||
auto& state = result.Value();
|
||||
auto first = MakeFrame(state.CommittedState(), 0U, 1U, 0.5, 1U);
|
||||
first.mitc4_drilling = fesa::Mitc4DrillingEvidence{fesa::Mitc4DrillingMode::kDirectSpring};
|
||||
ASSERT_TRUE(state.CommitAcceptedFrame(first).IsOk());
|
||||
for (const int kind : {0, 1, 2, 3, 4}) {
|
||||
auto next = MakeFrame(state.CommittedState(), 1U, 2U, 1.0, 1U);
|
||||
next.mitc4_drilling = first.mitc4_drilling;
|
||||
if (kind == 0) next.mitc4_drilling.reset();
|
||||
if (kind == 1) next.mitc4_drilling->mode = fesa::Mitc4DrillingMode::kLegacyCorotatedTwist;
|
||||
if (kind == 2) next.mitc4_drilling->mode = static_cast<fesa::Mitc4DrillingMode>(99);
|
||||
if (kind == 3) next.mitc4_drilling->equilibrium_with_drilling[3U] = 1.0;
|
||||
if (kind == 4) next.mitc4_drilling->drilling_moment[0U] = std::numeric_limits<double>::infinity();
|
||||
EXPECT_FALSE(state.CommitAcceptedFrame(next).IsOk()) << kind;
|
||||
ASSERT_EQ(state.AcceptedFrames().size(), 1U);
|
||||
EXPECT_DOUBLE_EQ(state.CommittedState().load_factor, 0.5);
|
||||
EXPECT_EQ(state.CommittedState().mitc4_drilling->mode,
|
||||
fesa::Mitc4DrillingMode::kDirectSpring);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user