diff --git a/ProcessLib/ComponentTransport/ComponentTransportFEM.h b/ProcessLib/ComponentTransport/ComponentTransportFEM.h index 2d345fa4de207e5661954bd9ee162bf330e4a97a..95d1b686b4078d1d4f9e7a19e3a4e1d5d7d663e3 100644 --- a/ProcessLib/ComponentTransport/ComponentTransportFEM.h +++ b/ProcessLib/ComponentTransport/ComponentTransportFEM.h @@ -294,6 +294,7 @@ public: _process_data.media_map->getMedium(_element.getID()); MaterialPropertyLib::VariableArray vars; + MaterialPropertyLib::VariableArray vars_prev; ParameterLib::SpatialPosition pos; pos.setElementID(_element.getID()); @@ -305,6 +306,7 @@ public: auto& ip_data = _ip_data[ip]; auto const& N = ip_data.N; auto& porosity = ip_data.porosity; + auto const& porosity_prev = ip_data.porosity_prev; auto const& chemical_system_id = ip_data.chemical_system_id; auto const n_component = _transport_process_variables.size(); @@ -323,8 +325,22 @@ public: C_int_pt[component_id]); } - vars[static_cast<int>(MaterialPropertyLib::Variable::porosity)] = - porosity; + { + vars_prev[static_cast<int>( + MaterialPropertyLib::Variable::porosity)] = porosity_prev; + + porosity = + _process_data.chemically_induced_porosity_change + ? porosity_prev + : medium + ->property( + MaterialPropertyLib::PropertyType::porosity) + .template value<double>(vars, vars_prev, pos, t, + dt); + + vars[static_cast<int>( + MaterialPropertyLib::Variable::porosity)] = porosity; + } _process_data.chemical_solver_interface->setChemicalSystemConcrete( C_int_pt, chemical_system_id, medium, vars, pos, t, dt); @@ -663,9 +679,16 @@ public: { vars_prev[static_cast<int>( MaterialPropertyLib::Variable::porosity)] = porosity_prev; + porosity = - medium.property(MaterialPropertyLib::PropertyType::porosity) - .template value<double>(vars, vars_prev, pos, t, dt); + _process_data.chemically_induced_porosity_change + ? porosity_prev + : medium + .property( + MaterialPropertyLib::PropertyType::porosity) + .template value<double>(vars, vars_prev, pos, t, + dt); + vars[static_cast<int>(MaterialPropertyLib::Variable::porosity)] = porosity; } @@ -789,9 +812,16 @@ public: { vars_prev[static_cast<int>( MaterialPropertyLib::Variable::porosity)] = porosity_prev; + porosity = - medium.property(MaterialPropertyLib::PropertyType::porosity) - .template value<double>(vars, vars_prev, pos, t, dt); + _process_data.chemically_induced_porosity_change + ? porosity_prev + : medium + .property( + MaterialPropertyLib::PropertyType::porosity) + .template value<double>(vars, vars_prev, pos, t, + dt); + vars[static_cast<int>(MaterialPropertyLib::Variable::porosity)] = porosity; }