diff --git a/src/language/ASTNodeAffectationExpressionBuilder.cpp b/src/language/ASTNodeAffectationExpressionBuilder.cpp index 38e6f9802f90c324df42d30e7ef40ccdc05a8a77..b78871b88d0b45a6cea8255b7f5f78dbdfbf6f2f 100644 --- a/src/language/ASTNodeAffectationExpressionBuilder.cpp +++ b/src/language/ASTNodeAffectationExpressionBuilder.cpp @@ -198,6 +198,27 @@ ASTNodeAffectationExpressionBuilder::ASTNodeAffectationExpressionBuilder(ASTNode } }; + auto set_affectation_processor_for_embedded_data = [&](const ASTNodeDataType& data_type) { + using OperatorT = std::decay_t<decltype(operator_v)>; + + if constexpr (std::is_same_v<OperatorT, language::eq_op>) { + switch (data_type) { + case ASTNodeDataType::type_id_t: { + n.m_node_processor = std::make_unique<AffectationProcessor<OperatorT, EmbeddedData, EmbeddedData>>(n); + break; + } + // LCOV_EXCL_START + default: { + throw parse_error("unexpected error: undefined operand type for string affectation", + std::vector{n.children[1]->begin()}); + } + // LCOV_EXCL_STOP + } + } else { + throw parse_error("invalid operator for '" + data_type.typeName() + "' affectation", std::vector{n.begin()}); + } + }; + auto set_affectation_processor_for_value = [&](const ASTNodeDataType& value_type) { const ASTNodeDataType data_type = n.children[1]->m_data_type; @@ -244,6 +265,10 @@ ASTNodeAffectationExpressionBuilder::ASTNodeAffectationExpressionBuilder(ASTNode set_affectation_processor_for_string_data(data_type); break; } + case ASTNodeDataType::type_id_t: { + set_affectation_processor_for_embedded_data(data_type); + break; + } default: { throw parse_error("unexpected error: undefined value type for affectation", std::vector{n.begin()}); } diff --git a/src/language/CMakeLists.txt b/src/language/CMakeLists.txt index 683ef786049fc0e0c43c424f05e02687c365d056..b04b00c14356938a706749756dda7f7ce6653e20 100644 --- a/src/language/CMakeLists.txt +++ b/src/language/CMakeLists.txt @@ -40,9 +40,12 @@ add_library( # Additional dependencies add_dependencies(PugsLanguage - PugsUtils) + PugsUtils + PugsMesh) + +include_directories("${PUGS_SOURCE_DIR}/src/mesh" + "${PUGS_SOURCE_DIR}/src/algebra") -#add_dependencies(PugsMesh) # ------------------- Installation -------------------- # temporary version workaround diff --git a/src/language/MeshModule.cpp b/src/language/MeshModule.cpp index 60c038b1f9994e1428d7fd8779ed06ac829c59d1..85e2f74e5e1cab868b5d7b29a1dc59a2438d9318 100644 --- a/src/language/MeshModule.cpp +++ b/src/language/MeshModule.cpp @@ -3,6 +3,9 @@ #include <BuiltinFunctionEmbedder.hpp> #include <TypeDescriptor.hpp> +#include <GmshReader.hpp> +#include <Mesh.hpp> + class IMesh; template <> @@ -15,10 +18,11 @@ MeshModule::MeshModule() this->_addBuiltinFunction("readGmsh", std::make_shared<BuiltinFunctionEmbedder<std::shared_ptr<IMesh>, std::string>>( std::function<std::shared_ptr<IMesh>(std::string)>{ - [](std::string s) -> std::shared_ptr<IMesh> { - std::cout << "evaluating 'readGmsh' using argument '" << rang::fg::yellow - << s << rang::style::reset << "'\n"; - return {}; - }})); + [](std::string file_name) -> std::shared_ptr<IMesh> { + GmshReader gmsh_reader(file_name); + return gmsh_reader.mesh(); + }} + + )); } diff --git a/src/main.cpp b/src/main.cpp index 93ff1e39f0d3ad18c556d141f91754dcc1d4c211..000377ea2d320d4a4df4acf53fb93efb89e63d93 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -37,7 +37,9 @@ main(int argc, char* argv[]) std::regex gmsh_regex("(.*).msh"); if (not std::regex_match(filename, gmsh_regex)) { + SynchronizerManager::create(); parser(filename); + SynchronizerManager::destroy(); return 0; } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3801492358455b25801deabedf2eed2fae6e6ac4..429774f72f17c22b80974e5790d33c6f500ea3a5 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -82,6 +82,7 @@ add_executable (mpi_unit_tests target_link_libraries (unit_tests PugsLanguage + PugsMesh PugsUtils kokkos ${PARMETIS_LIBRARIES} @@ -91,6 +92,7 @@ target_link_libraries (unit_tests target_link_libraries (mpi_unit_tests PugsUtils + PugsMesh kokkos ${PARMETIS_LIBRARIES} ${MPI_CXX_LINK_FLAGS} ${MPI_CXX_LIBRARIES}