diff --git a/ProcessLib/HT/CreateHTProcess.cpp b/ProcessLib/HT/CreateHTProcess.cpp index 9caebb641d1c44d2baf19834f0c359c243ee69bd..7250c0875150660ad85b71543490df136117d314 100644 --- a/ProcessLib/HT/CreateHTProcess.cpp +++ b/ProcessLib/HT/CreateHTProcess.cpp @@ -135,14 +135,22 @@ std::unique_ptr<Process> createHTProcess( thermal_conductivity_fluid.name.c_str()); // Specific body force parameter. - Eigen::Vector3d specific_body_force; + Eigen::VectorXd specific_body_force; std::vector<double> const b = //! \ogs_file_param{prj__processes__process__HT__specific_body_force} config.getConfigParameter<std::vector<double>>("specific_body_force"); - assert(!b.empty() && b.size() < 4); + assert(b.size() > 0 && b.size() < 4); + if (b.size() < mesh.getDimension()) + OGS_FATAL( + "specific body force (gravity vector) has %d components, mesh " + "dimension is %d", + b.size(), mesh.getDimension()); bool const has_gravity = MathLib::toVector(b).norm() > 0; if (has_gravity) + { + specific_body_force.resize(b.size()); std::copy_n(b.data(), b.size(), specific_body_force.data()); + } HTProcessData process_data{ std::move(porous_media_properties), diff --git a/ProcessLib/HT/HTFEM.h b/ProcessLib/HT/HTFEM.h index 92ff83a8aaa995c68237c8b9455c751ad6253ce1..b7afdf6fc207ee573ae08f0d59275f09d1adc7b1 100644 --- a/ProcessLib/HT/HTFEM.h +++ b/ProcessLib/HT/HTFEM.h @@ -146,7 +146,7 @@ public: auto p_nodal_values = Eigen::Map<const NodalVectorType>(&local_x[num_nodes], num_nodes); - auto const & b = _process_data.specific_body_force.head(GlobalDim); + auto const& b = _process_data.specific_body_force; MaterialLib::Fluid::FluidProperty::ArrayType vars; diff --git a/ProcessLib/HT/HTProcessData.h b/ProcessLib/HT/HTProcessData.h index 94343ddeae1788e0a131af1478be0d6702d7f4ea..906ef3e60239184d3396f295a4888a1e8b508aaa 100644 --- a/ProcessLib/HT/HTProcessData.h +++ b/ProcessLib/HT/HTProcessData.h @@ -39,7 +39,7 @@ struct HTProcessData ProcessLib::Parameter<double> const& specific_heat_capacity_fluid_, ProcessLib::Parameter<double> const& thermal_conductivity_solid_, ProcessLib::Parameter<double> const& thermal_conductivity_fluid_, - Eigen::Vector3d specific_body_force_, + Eigen::VectorXd specific_body_force_, bool const has_gravity_) : porous_media_properties(std::move(porous_media_properties_)), viscosity_model(std::move(viscosity_model_)), @@ -96,7 +96,7 @@ struct HTProcessData Parameter<double> const& thermal_dispersivity_transversal; Parameter<double> const& thermal_conductivity_solid; Parameter<double> const& thermal_conductivity_fluid; - Eigen::Vector3d const specific_body_force; + Eigen::VectorXd const specific_body_force; bool const has_gravity; };