diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h index 25ef4318efd499c18045c85e856700b9ba5b3de6..d06402f925d1aa9178caae5362f98c87be0c0f06 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h @@ -815,7 +815,7 @@ template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure, int DisplacementDim> void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim>:: - setInitialConditionsConcrete(std::vector<double> const& local_x, + setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const use_monolithic_scheme, int const process_id) @@ -835,20 +835,10 @@ void HydroMechanicsLocalAssembler<ShapeFunctionDisplacement, auto const& medium = _process_data.media_map.getMedium(_element.getID()); - int const displacement_offset = - use_monolithic_scheme ? displacement_index : 0; - + auto const p = local_x.template segment<pressure_size>(pressure_index); auto const u = - Eigen::Map<typename ShapeMatricesTypeDisplacement:: - template VectorType<displacement_size> const>( - local_x.data() + displacement_offset, displacement_size); - - int const pressure_offset = use_monolithic_scheme ? pressure_index : 0; + local_x.template segment<displacement_size>(displacement_index); - auto const p = - Eigen::Map<typename ShapeMatricesTypePressure::template VectorType< - pressure_size> const>(local_x.data() + pressure_offset, - pressure_size); auto const& identity2 = Invariants::identity2; const double dt = 0.0; diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h index c4920e366d16da448233f25f8ca3e28007c69031..047d144a3086df76b3fc18651ded82de74300ca0 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsFEM.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsFEM.h @@ -276,7 +276,7 @@ public: double const t, double const dt, int const process_id) override; - void setInitialConditionsConcrete(std::vector<double> const& local_x, + void setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const use_monolithic_scheme, int const process_id) override; diff --git a/ProcessLib/LocalAssemblerInterface.cpp b/ProcessLib/LocalAssemblerInterface.cpp index 83a8a2935cb7251b5d2250bba4bd43dfbd1ef636..142e2ae62561ed5e956a6e59385090c6b8ea41ae 100644 --- a/ProcessLib/LocalAssemblerInterface.cpp +++ b/ProcessLib/LocalAssemblerInterface.cpp @@ -105,8 +105,10 @@ void LocalAssemblerInterface::setInitialConditions( { auto const indices = NumLib::getIndices(mesh_item_id, dof_table); auto const local_x = x.get(indices); + auto const local_x_eigen_map = MathLib::toVector(local_x); - setInitialConditionsConcrete(local_x, t, use_monolithic_scheme, process_id); + setInitialConditionsConcrete(local_x_eigen_map, t, use_monolithic_scheme, + process_id); } void LocalAssemblerInterface::initialize( diff --git a/ProcessLib/LocalAssemblerInterface.h b/ProcessLib/LocalAssemblerInterface.h index 0cd1b9131236e1476c989e6d3e6fdb26e9761254..36c7621e96dd6cb0a74750d912f9b367a6e42739 100644 --- a/ProcessLib/LocalAssemblerInterface.h +++ b/ProcessLib/LocalAssemblerInterface.h @@ -33,11 +33,10 @@ class LocalAssemblerInterface public: virtual ~LocalAssemblerInterface() = default; - void setInitialConditions(std::size_t const mesh_item_id, - NumLib::LocalToGlobalIndexMap const& dof_table, - GlobalVector const& x, double const t, - bool const use_monolithic_scheme, - int const process_id); + virtual void setInitialConditions( + std::size_t const mesh_item_id, + NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x, + double const t, bool const use_monolithic_scheme, int const process_id); virtual void initialize(std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const& dof_table); @@ -121,7 +120,7 @@ public: private: virtual void setInitialConditionsConcrete( - std::vector<double> const& /*local_x*/, double const /*t*/, + Eigen::VectorXd const& /*local_x*/, double const /*t*/, bool const /*use_monolithic_scheme*/, int const /*process_id*/) { } diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h index 57f6633df6b2214b214e2b7207ef9d75c90257b0..fd36d170b1d527411f9e7956ba8c57e6ac411066 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM-impl.h @@ -278,17 +278,14 @@ template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure, int DisplacementDim> void RichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim>:: - setInitialConditionsConcrete(std::vector<double> const& local_x, + setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const /*use_monolithic_scheme*/, int const /*process_id*/) { assert(local_x.size() == pressure_size + displacement_size); - auto p_L = - Eigen::Map<typename ShapeMatricesTypePressure::template VectorType< - pressure_size> const>(local_x.data() + pressure_index, - pressure_size); + auto const p_L = local_x.template segment<pressure_size>(pressure_index); constexpr double dt = std::numeric_limits<double>::quiet_NaN(); auto const& medium = _process_data.media_map.getMedium(_element.getID()); diff --git a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h index 4befcbabdf9cd7ad753b6538a6425cd77d448941..91a46c8839214317885158b0b33124280e9e4b5a 100644 --- a/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h +++ b/ProcessLib/RichardsMechanics/RichardsMechanicsFEM.h @@ -94,7 +94,7 @@ public: double const* values, int const integration_order) override; - void setInitialConditionsConcrete(std::vector<double> const& local_x, + void setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const use_monolithic_scheme, int const process_id) override; diff --git a/ProcessLib/TH2M/TH2MFEM-impl.h b/ProcessLib/TH2M/TH2MFEM-impl.h index aaed4f0659b66623ecc128d6710a38fb355841f7..86153b8440746c92f716d85e65bcace73511d2dc 100644 --- a/ProcessLib/TH2M/TH2MFEM-impl.h +++ b/ProcessLib/TH2M/TH2MFEM-impl.h @@ -852,7 +852,7 @@ template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure, int DisplacementDim> void TH2MLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim>:: - setInitialConditionsConcrete(std::vector<double> const& local_x_data, + setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const /*use_monolithic_scheme*/, int const /*process_id*/) @@ -861,10 +861,8 @@ void TH2MLocalAssembler<ShapeFunctionDisplacement, ShapeFunctionPressure, gas_pressure_size + capillary_pressure_size + temperature_size + displacement_size; - assert(local_x_data.size() == matrix_size); + assert(local_x.size() == matrix_size); - auto const local_x = Eigen::Map<Eigen::VectorXd const>(local_x_data.data(), - local_x_data.size()); auto const capillary_pressure = local_x.template segment<capillary_pressure_size>( capillary_pressure_index); diff --git a/ProcessLib/TH2M/TH2MFEM.h b/ProcessLib/TH2M/TH2MFEM.h index 89ce5051405c679b981244d4bf6b3e08176754e0..05f1d58611a98ed88e8d32ff31f4630ce370b6f1 100644 --- a/ProcessLib/TH2M/TH2MFEM.h +++ b/ProcessLib/TH2M/TH2MFEM.h @@ -95,7 +95,7 @@ private: double const* values, int const integration_order) override; - void setInitialConditionsConcrete(std::vector<double> const& local_x_data, + void setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const /*use_monolithic_scheme*/, int const /*process_id*/) override; diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h index af2bb66c917f134640309e1be85603ff314b3e84..a48c330da71ad07c5da1b119c6f14fc446f49888 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM-impl.h @@ -176,7 +176,7 @@ template <typename ShapeFunctionDisplacement, typename ShapeFunctionPressure, int DisplacementDim> void ThermoHydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim>:: - setInitialConditionsConcrete(std::vector<double> const& local_x, + setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const /*use_monolithic_scheme*/, int const /*process_id*/) @@ -189,10 +189,8 @@ void ThermoHydroMechanicsLocalAssembler< // TODO: For staggered scheme, overload // LocalAssemblerInterface::setInitialConditions to enable local_x contains // the primary variables from all coupled processes. - auto const p = - Eigen::Map<typename ShapeMatricesTypePressure::template VectorType< - pressure_size> const>(local_x.data() + pressure_index, - pressure_size); + auto const p = local_x.template segment<pressure_size>(pressure_index); + double const dt = 0.0; MPL::VariableArray vars; diff --git a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h index d82f37892014b41a48ecc1fe48783141b048330d..aafb9fd37c8bf2ed1ce1febbce0fb5d133a79079 100644 --- a/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h +++ b/ProcessLib/ThermoHydroMechanics/ThermoHydroMechanicsFEM.h @@ -151,7 +151,7 @@ public: } } - void setInitialConditionsConcrete(std::vector<double> const& local_x, + void setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const use_monolithic_scheme, int const process_id) override; diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h index 0cfedaccb574a7c2867720ed95651bcbe58859cb..eceb1e2bb035c23303895d7c14ced50ff44ec6ba 100644 --- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h +++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM-impl.h @@ -109,16 +109,14 @@ std::size_t ThermoRichardsFlowLocalAssembler<ShapeFunction, GlobalDim>:: template <typename ShapeFunction, int GlobalDim> void ThermoRichardsFlowLocalAssembler<ShapeFunction, GlobalDim>:: - setInitialConditionsConcrete(std::vector<double> const& local_x, + setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const /*use_monolithic_scheme*/, int const /*process_id*/) { assert(local_x.size() == temperature_size + pressure_size); - auto p_L = Eigen::Map< - typename ShapeMatricesType::template VectorType<pressure_size> const>( - local_x.data() + pressure_index, pressure_size); + auto const p_L = local_x.template segment<pressure_size>(pressure_index); auto const& medium = *_process_data.media_map.getMedium(_element.getID()); MPL::VariableArray variables; diff --git a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h index 2da0c458e1042a3158137f23f62a8bb7ffa26842..b50029b06eb00cf8cc151e32fcc6172dddbe1b3f 100644 --- a/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h +++ b/ProcessLib/ThermoRichardsFlow/ThermoRichardsFlowFEM.h @@ -63,7 +63,7 @@ public: double const* values, int const integration_order) override; - void setInitialConditionsConcrete(std::vector<double> const& local_x, + void setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const /*use_monolithic_scheme*/, int const /*process_id*/) override; diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h index 1cf8ab51c7c557454c88f0e87bb3aaa6a2676ce1..b71cf10832a0664095aa76d4e0d4f87fd5baf503 100644 --- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h +++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM-impl.h @@ -86,7 +86,7 @@ template <typename ShapeFunctionDisplacement, typename ShapeFunction, void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, ShapeFunction, DisplacementDim, ConstitutiveTraits>:: - setInitialConditionsConcrete(std::vector<double> const& local_x, + setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const /*use_monolithic_scheme*/, int const /*process_id*/) @@ -94,13 +94,9 @@ void ThermoRichardsMechanicsLocalAssembler<ShapeFunctionDisplacement, assert(local_x.size() == temperature_size + pressure_size + displacement_size); - auto const p_L = Eigen::Map< - typename ShapeMatricesType::template VectorType<pressure_size> const>( - local_x.data() + pressure_index, pressure_size); - - auto const T = Eigen::Map<typename ShapeMatricesType::template VectorType< - temperature_size> const>(local_x.data() + temperature_index, - temperature_size); + auto const p_L = local_x.template segment<pressure_size>(pressure_index); + auto const T = + local_x.template segment<temperature_size>(temperature_index); constexpr double dt = std::numeric_limits<double>::quiet_NaN(); auto const& medium = diff --git a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h index 5cf6556c24856fb1d9d7cab897b92ec161df747a..4fe54313a3572bae9d24863662b2442a4bc24c6b 100644 --- a/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h +++ b/ProcessLib/ThermoRichardsMechanics/ThermoRichardsMechanicsFEM.h @@ -87,7 +87,7 @@ public: ThermoRichardsMechanicsProcessData<DisplacementDim, ConstitutiveTraits>& process_data); - void setInitialConditionsConcrete(std::vector<double> const& local_x, + void setInitialConditionsConcrete(Eigen::VectorXd const& local_x, double const t, bool const use_monolithic_scheme, int const process_id) override;