feat: add solver core skeleton
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
file(GLOB FESA_INTEGRATION_TEST_SOURCES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*_test.cpp")
|
||||
|
||||
foreach(test_source IN LISTS FESA_INTEGRATION_TEST_SOURCES)
|
||||
get_filename_component(test_name "${test_source}" NAME_WE)
|
||||
add_executable("${test_name}" "${test_source}")
|
||||
target_link_libraries("${test_name}" PRIVATE fesa_core)
|
||||
add_test(NAME "${test_name}" COMMAND "${test_name}")
|
||||
endforeach()
|
||||
@@ -0,0 +1,64 @@
|
||||
#include <fesa/analysis/linear_static_analysis.hpp>
|
||||
#include <fesa/results/results.hpp>
|
||||
|
||||
namespace {
|
||||
|
||||
int fail()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
fesa::model::Domain make_domain()
|
||||
{
|
||||
fesa::model::Domain domain;
|
||||
domain.add_node({fesa::core::NodeId{1}, {0.0, 0.0, 0.0}});
|
||||
domain.add_node({fesa::core::NodeId{2}, {1.0, 0.0, 0.0}});
|
||||
domain.add_material({fesa::core::MaterialId{3}, "steel"});
|
||||
domain.add_property({fesa::core::PropertyId{4}, "bar", fesa::core::MaterialId{3}});
|
||||
domain.add_element({
|
||||
fesa::core::ElementId{5},
|
||||
fesa::model::ElementTopology::truss2,
|
||||
{fesa::core::NodeId{1}, fesa::core::NodeId{2}},
|
||||
fesa::core::PropertyId{4}
|
||||
});
|
||||
fesa::model::AnalysisStep step{fesa::core::StepId{6}, "static-step"};
|
||||
step.add_boundary_condition({fesa::core::NodeId{1}, fesa::model::DofComponent::ux, 0.0});
|
||||
step.add_load({fesa::core::NodeId{2}, fesa::model::DofComponent::ux, 10.0});
|
||||
domain.add_step(step);
|
||||
return domain;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
const auto domain = make_domain();
|
||||
fesa::analysis::LinearStaticAnalysis analysis{domain, fesa::core::StepId{6}};
|
||||
analysis.run();
|
||||
|
||||
if (analysis.analysis_model() == nullptr || analysis.state() == nullptr) {
|
||||
return fail();
|
||||
}
|
||||
if (analysis.analysis_model()->active_elements().size() != 1 ||
|
||||
analysis.analysis_model()->active_boundary_conditions().size() != 1 ||
|
||||
analysis.analysis_model()->active_loads().size() != 1) {
|
||||
return fail();
|
||||
}
|
||||
|
||||
fesa::results::ResultStep result_step{"static-step"};
|
||||
auto& frame = result_step.add_frame(0, 0.0);
|
||||
frame.add_field_output({
|
||||
"U",
|
||||
fesa::results::FieldLocation::nodal,
|
||||
{"ux", "uy", "uz"},
|
||||
{1, 2},
|
||||
{0.0, 0.0, 0.0, 0.0, 0.0, 0.0}
|
||||
});
|
||||
|
||||
if (result_step.frames().size() != 1 ||
|
||||
result_step.frames()[0].field_outputs().size() != 1) {
|
||||
return fail();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user