diff --git a/ProcessLib/ComponentTransport/ComponentTransportFEM.h b/ProcessLib/ComponentTransport/ComponentTransportFEM.h index 0c60bb9f1592c2ead284b9412a1cc1a26a8a401d..8f461ad47a1303d8e5d949720243edf57197726d 100644 --- a/ProcessLib/ComponentTransport/ComponentTransportFEM.h +++ b/ProcessLib/ComponentTransport/ComponentTransportFEM.h @@ -404,13 +404,13 @@ public: { if (process_id == hydraulic_process_id) { - assembleHydraulicEquation(t, dt, local_M_data, local_K_data, - local_b_data, coupled_xs); + assembleHydraulicEquation(t, dt, local_x, local_M_data, + local_K_data, local_b_data, coupled_xs); } else { // Go for assembling in an order of transport process id. - assembleComponentTransportEquation(t, dt, local_M_data, + assembleComponentTransportEquation(t, dt, local_x, local_M_data, local_K_data, local_b_data, coupled_xs, process_id); } @@ -418,16 +418,15 @@ public: void assembleHydraulicEquation(double const t, double const dt, + Eigen::VectorXd const& local_x, std::vector<double>& local_M_data, std::vector<double>& local_K_data, std::vector<double>& local_b_data, LocalCoupledSolutions const& coupled_xs) { - auto local_p = Eigen::Map<const NodalVectorType>( - &coupled_xs.local_coupled_xs[pressure_index], pressure_size); - auto local_C = Eigen::Map<const NodalVectorType>( - &coupled_xs.local_coupled_xs[first_concentration_index], - concentration_size); + auto local_p = local_x.template segment<pressure_size>(pressure_index); + auto local_C = local_x.template segment<concentration_size>( + first_concentration_index); auto local_C0 = Eigen::Map<const NodalVectorType>( &coupled_xs.local_coupled_xs0[first_concentration_index], concentration_size); @@ -530,18 +529,15 @@ public: } void assembleComponentTransportEquation( - double const t, double const dt, std::vector<double>& local_M_data, - std::vector<double>& local_K_data, + double const t, double const dt, Eigen::VectorXd const& local_x, + std::vector<double>& local_M_data, std::vector<double>& local_K_data, std::vector<double>& /*local_b_data*/, LocalCoupledSolutions const& coupled_xs, int const transport_process_id) { - auto local_C = Eigen::Map<const NodalVectorType>( - &coupled_xs.local_coupled_xs[first_concentration_index + - (transport_process_id - 1) * - concentration_size], - concentration_size); - auto local_p = Eigen::Map<const NodalVectorType>( - &coupled_xs.local_coupled_xs[pressure_index], pressure_size); + auto local_p = local_x.template segment<pressure_size>(pressure_index); + auto local_C = local_x.template segment<concentration_size>( + first_concentration_index + + (transport_process_id - 1) * concentration_size); auto local_p0 = Eigen::Map<const NodalVectorType>( &coupled_xs.local_coupled_xs0[pressure_index], pressure_size); diff --git a/ProcessLib/HT/StaggeredHTFEM-impl.h b/ProcessLib/HT/StaggeredHTFEM-impl.h index 9e6c8e9f57de8a1ee6a896a9d9fb9f032036efd7..06d557212e3750b69e4630d2542568d65f4bb76b 100644 --- a/ProcessLib/HT/StaggeredHTFEM-impl.h +++ b/ProcessLib/HT/StaggeredHTFEM-impl.h @@ -35,7 +35,7 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>:: if (process_id == _heat_transport_process_id) { assembleHeatTransportEquation(t, local_x, local_M_data, local_K_data, - local_b_data, coupled_xs); + local_b_data); return; } @@ -53,14 +53,12 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>:: std::vector<double>& local_b_data, LocalCoupledSolutions const& coupled_xs) { - auto const local_p = Eigen::Map< - typename ShapeMatricesType::template VectorType<pressure_size> const>( - &coupled_xs.local_coupled_xs[pressure_index], pressure_size); + auto const local_p = + local_x.template segment<pressure_size>(pressure_index); auto const local_T1 = - Eigen::Map<typename ShapeMatricesType::template VectorType< - temperature_size> const>( - &coupled_xs.local_coupled_xs[temperature_index], temperature_size); + local_x.template segment<temperature_size>(temperature_index); + auto const local_T0 = Eigen::Map<typename ShapeMatricesType::template VectorType< temperature_size> const>( @@ -188,17 +186,13 @@ void StaggeredHTFEM<ShapeFunction, IntegrationMethod, GlobalDim>:: Eigen::VectorXd const& local_x, std::vector<double>& local_M_data, std::vector<double>& local_K_data, - std::vector<double>& /*local_b_data*/, - LocalCoupledSolutions const& coupled_xs) + std::vector<double>& /*local_b_data*/) { - auto const local_p = Eigen::Map< - typename ShapeMatricesType::template VectorType<pressure_size> const>( - &coupled_xs.local_coupled_xs[pressure_index], pressure_size); + auto const local_p = + local_x.template segment<pressure_size>(pressure_index); auto const local_T1 = - Eigen::Map<typename ShapeMatricesType::template VectorType< - temperature_size> const>( - &coupled_xs.local_coupled_xs[temperature_index], temperature_size); + local_x.template segment<temperature_size>(temperature_index); auto local_M = MathLib::createZeroedMatrix<LocalMatrixType>( local_M_data, temperature_size, temperature_size); diff --git a/ProcessLib/HT/StaggeredHTFEM.h b/ProcessLib/HT/StaggeredHTFEM.h index eb78700a2ab63d3e419945cbf2f44a5112cbdf68..7253962fd48c897d61a79a56783013f2dbaef500 100644 --- a/ProcessLib/HT/StaggeredHTFEM.h +++ b/ProcessLib/HT/StaggeredHTFEM.h @@ -95,8 +95,7 @@ private: Eigen::VectorXd const& local_x, std::vector<double>& local_M_data, std::vector<double>& local_K_data, - std::vector<double>& local_b_data, - LocalCoupledSolutions const& coupled_xs); + std::vector<double>& local_b_data); const int _heat_transport_process_id; const int _hydraulic_process_id; };