From e9fa62aafcd884caa4883e685e9807a211f41eeb Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Thu, 29 Feb 2024 18:12:25 +0100 Subject: [PATCH] Changed the type of the first argument of setInitialConditionsConcrete From std::vectory<double> to Eigen::VectorXd --- .../HydroMechanics/HydroMechanicsFEM-impl.h | 16 +++------------- ProcessLib/HydroMechanics/HydroMechanicsFEM.h | 2 +- ProcessLib/LocalAssemblerInterface.cpp | 4 +++- ProcessLib/LocalAssemblerInterface.h | 11 +++++------ .../RichardsMechanicsFEM-impl.h | 7 ++----- .../RichardsMechanics/RichardsMechanicsFEM.h | 2 +- ProcessLib/TH2M/TH2MFEM-impl.h | 6 ++---- ProcessLib/TH2M/TH2MFEM.h | 2 +- .../ThermoHydroMechanicsFEM-impl.h | 8 +++----- .../ThermoHydroMechanicsFEM.h | 2 +- .../ThermoRichardsFlowFEM-impl.h | 6 ++---- .../ThermoRichardsFlow/ThermoRichardsFlowFEM.h | 2 +- .../ThermoRichardsMechanicsFEM-impl.h | 12 ++++-------- .../ThermoRichardsMechanicsFEM.h | 2 +- 14 files changed, 30 insertions(+), 52 deletions(-) diff --git a/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsFEM-impl.h index 25ef4318efd..d06402f925d 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 c4920e366d1..047d144a308 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 83a8a2935cb..142e2ae6256 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 0cd1b913123..36c7621e96d 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 57f6633df6b..fd36d170b1d 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 4befcbabdf9..91a46c88392 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 aaed4f0659b..86153b84407 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 89ce5051405..05f1d58611a 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 af2bb66c917..a48c330da71 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 d82f3789201..aafb9fd37c8 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 0cfedaccb57..eceb1e2bb03 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 2da0c458e10..b50029b06eb 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 1cf8ab51c7c..b71cf10832a 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 5cf6556c248..4fe54313a35 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; -- GitLab