diff --git a/ProcessLib/ComponentTransport/ComponentTransportFEM.h b/ProcessLib/ComponentTransport/ComponentTransportFEM.h index 235e8d0f147e63fe9538428492eddeed434d9ddb..2c3be73ac005880c96a87f2e22a33c24b879c52d 100644 --- a/ProcessLib/ComponentTransport/ComponentTransportFEM.h +++ b/ProcessLib/ComponentTransport/ComponentTransportFEM.h @@ -85,16 +85,6 @@ template <typename ShapeFunction, typename IntegrationMethod, unsigned GlobalDim> class LocalAssemblerData : public ComponentTransportLocalAssemblerInterface { - // When staggered scheme is adopted, nodal pressure and nodal concentration - // are accessed by process id. - static const int hydraulic_process_id = 0; - // TODO (renchao-lu): This variable is used in the calculation of the - // fluid's density and flux, indicating the transport process id. For now it - // is assumed that these quantities depend on the first occurring transport - // process only. The density and flux calculations have to be extended to - // all processes. - static const int first_transport_process_id = 1; - // When monolithic scheme is adopted, nodal pressure and nodal concentration // are accessed by vector index. static const int pressure_index = 0; @@ -428,7 +418,7 @@ public: std::vector<double>& local_K_data, std::vector<double>& local_b_data, LocalCoupledSolutions const& coupled_xs) override { - if (process_id == hydraulic_process_id) + if (process_id == _process_data.hydraulic_process_id) { assembleHydraulicEquation(t, dt, local_x, local_M_data, local_K_data, local_b_data, coupled_xs); diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcessData.h b/ProcessLib/ComponentTransport/ComponentTransportProcessData.h index 79f5783686b136869b30d79295d21d82859f0e02..fcf8ac1d11cd58c21296c1ca42101d41ad4c4587 100644 --- a/ProcessLib/ComponentTransport/ComponentTransportProcessData.h +++ b/ProcessLib/ComponentTransport/ComponentTransportProcessData.h @@ -27,26 +27,20 @@ namespace ComponentTransport { struct ComponentTransportProcessData { - ComponentTransportProcessData( - std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap>&& - media_map_, - Eigen::VectorXd const& specific_body_force_, bool const has_gravity_, - bool const non_advective_form_, - std::unique_ptr<ChemicalProcessData>&& chemical_process_data_) - : media_map(std::move(media_map_)), - specific_body_force(specific_body_force_), - has_gravity(has_gravity_), - non_advective_form(non_advective_form_), - chemical_process_data(std::move(chemical_process_data_)) - { - } - std::unique_ptr<MaterialPropertyLib::MaterialSpatialDistributionMap> media_map; Eigen::VectorXd const specific_body_force; bool const has_gravity; bool const non_advective_form; std::unique_ptr<ChemicalProcessData> chemical_process_data; + + const int hydraulic_process_id; + // TODO (renchao-lu): This variable is used in the calculation of the + // fluid's density and flux, indicating the transport process id. For now it + // is assumed that these quantities depend on the first occurring transport + // process only. The density and flux calculations have to be extended to + // all processes. + const int first_transport_process_id; }; } // namespace ComponentTransport diff --git a/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp b/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp index a6e596ea2f2e2fc98ffbe8dda65928bfb2071811..a5ff1598748979ac6531d2ac2a687162b67c472e 100644 --- a/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp +++ b/ProcessLib/ComponentTransport/CreateComponentTransportProcess.cpp @@ -131,6 +131,8 @@ std::unique_ptr<Process> createComponentTransportProcess( it->get().getName(), it->get().getNumberOfGlobalComponents()); } + int const hydraulic_process_id = 0; + int const first_transport_process_id = use_monolithic_scheme ? 0 : 1; // Allocate the collected process variables into a two-dimensional vector, // depending on what scheme is adopted @@ -225,9 +227,13 @@ std::unique_ptr<Process> createComponentTransportProcess( auto chemical_process_data = createChemicalProcessData(chemical_solver_interface); - ComponentTransportProcessData process_data{ - std::move(media_map), specific_body_force, has_gravity, - non_advective_form, std::move(chemical_process_data)}; + ComponentTransportProcessData process_data{std::move(media_map), + specific_body_force, + has_gravity, + non_advective_form, + std::move(chemical_process_data), + hydraulic_process_id, + first_transport_process_id}; SecondaryVariableCollection secondary_variables;