diff --git a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp index 4a164b8deca7e682cfa4f3c6de88cf0b00d96b4e..6e90534adf2333067594174a34f1c220c7082cf3 100644 --- a/ProcessLib/BoundaryCondition/BoundaryCondition.cpp +++ b/ProcessLib/BoundaryCondition/BoundaryCondition.cpp @@ -85,7 +85,7 @@ BoundaryConditionBuilder::createDirichletBoundaryCondition( std::vector<std::size_t> sorted_nodes_ids; auto const& mesh_subsets = - dof_table.getMeshSubsets(variable_id, config.component_id); + dof_table.getMeshSubsets(variable_id, *config.component_id); for (auto const& mesh_subset : mesh_subsets) { auto const& nodes = mesh_subset->getNodes(); @@ -106,11 +106,11 @@ BoundaryConditionBuilder::createDirichletBoundaryCondition( ids.erase(ids_new_end_iterator, std::end(ids)); DBUG("Found %d nodes for Dirichlet BCs for the variable %d and component %d", - ids.size(), variable_id, config.component_id); + ids.size(), variable_id, *config.component_id); return ProcessLib::createDirichletBoundaryCondition( config.config, std::move(ids), dof_table, mesh.getID(), variable_id, - config.component_id, parameters); + *config.component_id, parameters); } std::unique_ptr<BoundaryCondition> @@ -134,7 +134,7 @@ BoundaryConditionBuilder::createNeumannBoundaryCondition( return ProcessLib::createNeumannBoundaryCondition( config.config, getClonedElements(boundary_element_searcher, config.geometry), - dof_table, variable_id, config.component_id, + dof_table, variable_id, *config.component_id, mesh.isAxiallySymmetric(), integration_order, shapefunction_order, mesh.getDimension(), parameters); } @@ -160,7 +160,7 @@ BoundaryConditionBuilder::createRobinBoundaryCondition( return ProcessLib::createRobinBoundaryCondition( config.config, getClonedElements(boundary_element_searcher, config.geometry), - dof_table, variable_id, config.component_id, + dof_table, variable_id, *config.component_id, mesh.isAxiallySymmetric(), integration_order, shapefunction_order, mesh.getDimension(), parameters); } @@ -173,7 +173,7 @@ BoundaryConditionBuilder::createNonuniformNeumannBoundaryCondition( const unsigned shapefunction_order) { return ProcessLib::createNonuniformNeumannBoundaryCondition( - config.config, dof_table, variable_id, config.component_id, + config.config, dof_table, variable_id, *config.component_id, integration_order, shapefunction_order, mesh); } diff --git a/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h b/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h index 17bcb4aeae1d9ec35a0aae81f49bb20f2c761698..756ce055c2023a598973157c1ac097b7f1963adc 100644 --- a/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h +++ b/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h @@ -19,7 +19,7 @@ struct BoundaryConditionConfig final { BoundaryConditionConfig(BaseLib::ConfigTree&& config_, GeoLib::GeoObject const& geometry_, - int const component_id_) + boost::optional<int> const component_id_) : config(std::move(config_)), geometry(geometry_), component_id(component_id_) @@ -35,7 +35,7 @@ struct BoundaryConditionConfig final BaseLib::ConfigTree config; GeoLib::GeoObject const& geometry; - int const component_id; + boost::optional<int> const component_id; }; } // ProcessLib diff --git a/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.cpp b/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.cpp index 7a6d7605591414b9604e55e09a2dbe39395c0f2f..a6cb2e84301d94a5202b6d7cfcb11f7d76725c98 100644 --- a/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.cpp +++ b/ProcessLib/LIE/BoundaryCondition/BoundaryConditionBuilder.cpp @@ -41,7 +41,7 @@ BoundaryConditionBuilder::createNeumannBoundaryCondition( return ProcessLib::LIE::createNeumannBoundaryCondition( config.config, getClonedElements(boundary_element_searcher, config.geometry), - dof_table, variable_id, config.component_id, + dof_table, variable_id, *config.component_id, mesh.isAxiallySymmetric(), integration_order, shapefunction_order, mesh.getDimension(), parameters, _fracture_prop); } diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp index fc9f3e4a5e019292d81600cd3e84fdb5eae24c4f..404c978e2dfda928bf9e87558f743c1c89e6b879 100644 --- a/ProcessLib/ProcessVariable.cpp +++ b/ProcessLib/ProcessVariable.cpp @@ -72,21 +72,12 @@ ProcessVariable::ProcessVariable( //! \ogs_file_param{prj__process_variables__process_variable__boundary_conditions__boundary_condition__component} bc_config.getConfigParameterOptional<int>("component"); - if (!component_id) - { - if (_n_components == 1) - // default value for single component vars. - component_id = 0; - else - OGS_FATAL( - "The <component> tag could not be found for the " - "multi-component boundary condition of the process " - "variable `%s'.", - _name.c_str()); - } + if (!component_id && _n_components == 1) + // default value for single component vars. + component_id = 0; _bc_configs.emplace_back(std::move(bc_config), *geometry, - *component_id); + component_id); } } else { INFO("No boundary conditions found.");