#ifndef FESA_TESTS_SOLID_HHT_TEST_FIXTURE_H_ #define FESA_TESTS_SOLID_HHT_TEST_FIXTURE_H_ #include #include #include "fesa/elements/hex8_definition.h" #include "fesa/model/domain.h" #include "fesa/properties/solid_section.h" namespace solid_hht_test { inline fesa::ModelDefinition Brick(double h = 0.01, unsigned count = 20, bool nonlinear = false) { fesa::ModelDefinition d; d.source_path = "solid-hht-test.inp"; const std::array, 8> x{{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 1, 0}, {0, 0, 1}, {1, 0, 1}, {1, 1, 1}, {0, 1, 1}}}; for (unsigned i = 0; i < 8; ++i) { d.nodes.push_back({{"I", i + 1, std::to_string(i + 1)}, x[i], {}}); d.node_sets.push_back({"N" + std::to_string(i), {}, {i}, {}}); } d.node_sets.push_back({"ALL", {}, {0, 1, 2, 3, 4, 5, 6, 7}, {}}); d.materials = {{"M", 12.0, 0.25, {}}}; d.densities = {{0, 2.0, {}}}; d.solid_sections.emplace_back(fesa::SourceEntityId{"I", 1, "1"}, "E", 0, fesa::SourceLocation{}); d.solid_elements.emplace_back( fesa::SourceEntityId{"I", 8, "8"}, std::array{0, 1, 2, 3, 4, 5, 6, 7}, 0, 0, fesa::SourceLocation{}); fesa::DynamicStepDefinition step; step.source_step_name_raw = "Dynamic"; step.source_step_name_canonical = "DYNAMIC"; step.initial_increment = h; step.time_period = static_cast(count) * h; step.increment_count = count; step.maximum_increments = count; step.nlgeom = nonlinear; d.dynamic_step = step; return d; } inline std::string Message(const fesa::Status& s) { return s.Diagnostics().empty() ? "" : s.Diagnostics()[0].message; } } // namespace solid_hht_test #endif