From 6deeaa5e68034613fa0b8141d57f6a8bf336fb82 Mon Sep 17 00:00:00 2001 From: uxuech Date: Wed, 29 Jan 2025 16:53:44 +0100 Subject: [PATCH 1/9] adding new hydraulic utilities --- .../add_custom_utilities_to_python.cpp | 4 +- .../hydraulic_fluid_auxiliary_utilities.cpp | 56 +++++++++++++++++++ .../hydraulic_fluid_auxiliary_utilities.h | 18 +++++- ...est_hydraulic_fluid_auxiliary_utilities.py | 14 ++++- 4 files changed, 89 insertions(+), 3 deletions(-) diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_python/add_custom_utilities_to_python.cpp b/applications/FluidDynamicsHydraulicsApplication/custom_python/add_custom_utilities_to_python.cpp index 3ae187d9b58..daa05ac36eb 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_python/add_custom_utilities_to_python.cpp +++ b/applications/FluidDynamicsHydraulicsApplication/custom_python/add_custom_utilities_to_python.cpp @@ -31,7 +31,9 @@ void AddCustomUtilitiesToPython(pybind11::module& m) .def_static("InitialWaterDepth", [](ModelPart &rModelPart){return HydraulicFluidAuxiliaryUtilities::InitialWaterDepth(rModelPart);}) .def_static("SetInletVelocity", [](ModelPart &rModelPart, double InletVelocity, const Variable &rDistanceVariable){return HydraulicFluidAuxiliaryUtilities::SetInletVelocity(rModelPart, InletVelocity, rDistanceVariable);}) .def_static("FreeInlet", [](ModelPart &rModelPart){return HydraulicFluidAuxiliaryUtilities::FreeInlet(rModelPart);}) - .def_static("SetInletFreeSurface", [](ModelPart &rModelPart, const Flags &rSkinFlag, const Variable &rDistanceVariable){return HydraulicFluidAuxiliaryUtilities::SetInletFreeSurface(rModelPart, rSkinFlag, rDistanceVariable);}); + .def_static("SetInletFreeSurface", [](ModelPart &rModelPart, const Flags &rSkinFlag, const Variable &rDistanceVariable){return HydraulicFluidAuxiliaryUtilities::SetInletFreeSurface(rModelPart, rSkinFlag, rDistanceVariable);}) + .def_static("CalculateArtificialViscosity", [](ModelPart &rModelPart, double WaterDynamicViscosityMax){ return HydraulicFluidAuxiliaryUtilities::CalculateArtificialViscosity(rModelPart, WaterDynamicViscosityMax); }) + .def_static("ApplyOutletInflowLimiter", [](ModelPart &rModelPart,Variable>& rVariable,Variable>& rVariableNormal){ return HydraulicFluidAuxiliaryUtilities::ApplyOutletInflowLimiter(rModelPart, rVariable, rVariableNormal); }); } } // namespace Kratos::Python diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp index e108a434f85..897cb973918 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp +++ b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp @@ -307,4 +307,60 @@ void HydraulicFluidAuxiliaryUtilities::SetInletFreeSurface(ModelPart &rModelPart }); } +void HydraulicFluidAuxiliaryUtilities::CalculateArtificialViscosity(ModelPart &rModelPart,double WaterDynamicViscosityMax){ + const auto &r_process_info = rModelPart.GetProcessInfo(); + + block_for_each(rModelPart.Elements(), [&](Element &rElement) + { + double artificial_viscosity; + + rElement.Calculate(ARTIFICIAL_DYNAMIC_VISCOSITY,artificial_viscosity ,r_process_info); + if (artificial_viscosity > WaterDynamicViscosityMax) + { + artificial_viscosity = WaterDynamicViscosityMax; + } + double neg_nodes = 0.0; + double pos_nodes=0.0; + for (auto &r_node : rElement.GetGeometry()) + { + double distance = r_node.FastGetSolutionStepValue(DISTANCE); + + if (distance > 0) + { + pos_nodes += 1; + } + else + { + neg_nodes += 1; + } + } + if (neg_nodes > 0 && pos_nodes > 0) + { + artificial_viscosity = 0.0; + } + rElement.SetValue(ARTIFICIAL_DYNAMIC_VISCOSITY, artificial_viscosity); + }); +} + +void HydraulicFluidAuxiliaryUtilities::ApplyOutletInflowLimiter(ModelPart &rModelPart,const Variable>& rVariable,const Variable>& rVariableNormal) +{ + + block_for_each(rModelPart.Nodes(), [&](NodeType& rNode) + { + array_1d& r_velocity = rNode.FastGetSolutionStepValue(rVariable); + // We use a non-historical variable in case rVariableNormal is not the NORMAL variable and an auxiliary variable is used + const array_1d& r_normal = rNode.GetValue(rVariableNormal); + const double norm_n = norm_2(r_normal); + if (norm_n > 0.0) + { + array_1d n_unit = r_normal / norm_n; + const double aux = inner_prod(r_velocity, n_unit); + if (aux < 0.0) + { + noalias(r_velocity) -= aux * n_unit; + } + } + }); +} + } // namespace Kratos diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h index ad176c74bcc..386d66f9d45 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h +++ b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h @@ -116,7 +116,23 @@ class KRATOS_API(FLUID_DYNAMICS_HYDRAULICS_APPLICATION) HydraulicFluidAuxiliaryU * @param rDistancesVariable Variable name of the inlet distance. */ static void SetInletFreeSurface(ModelPart &rModelPart, const Flags &rSkinFlag, const Variable &rDistanceVariable); - + + /** + * @brief Artificial viscosity is calculated. The purpose of adding this artificial viscosity is to avoid non-physical spikes in velocities. + * @param rModelPart Fluid Model Part + * @param WaterDynamicViscosityMax It is a threshold value to prevent adding excessive artificial numerical viscosity and thereby losing the real physics. + */ + static void CalculateArtificialViscosity(ModelPart &rModelPart, double WaterDynamicViscosityMax); + + /** + * @brief When there is inflow on a boundary considered as an outlet, this function retains only the tangential component, preventing inflows that cause instabilities. + * @param rModelPart Fluid Model Part + * @param rVariable it is possible to use the variable VELOCITY_FRACTIONAL or VELOCITY + * @param rVariableNormal it is possible to use an auxiliar normal such as INLET_NORMAL + */ + static void ApplyOutletInflowLimiter(ModelPart &rModelPart, + const Variable>& rVariable, + const Variable>& rVariableNormal); ///@} diff --git a/applications/FluidDynamicsHydraulicsApplication/tests/test_hydraulic_fluid_auxiliary_utilities.py b/applications/FluidDynamicsHydraulicsApplication/tests/test_hydraulic_fluid_auxiliary_utilities.py index 8cabf41a71c..d6952f1b81b 100644 --- a/applications/FluidDynamicsHydraulicsApplication/tests/test_hydraulic_fluid_auxiliary_utilities.py +++ b/applications/FluidDynamicsHydraulicsApplication/tests/test_hydraulic_fluid_auxiliary_utilities.py @@ -1,7 +1,6 @@ import KratosMultiphysics as Kratos import KratosMultiphysics.FluidDynamicsHydraulicsApplication as KratosFluidHydraulics import KratosMultiphysics.KratosUnittest as UnitTest -import KratosMultiphysics.kratos_utilities as KratosUtils class HydraulicFluidAuxiliaryUtilitiesTest(UnitTest.TestCase): @@ -76,5 +75,18 @@ def testCalculateWettedArea(self): theoretical_wetted_area= 2.0*(level_set_z) self.assertAlmostEqual(WettedArea, theoretical_wetted_area, 12) + def testAvoidOutletInflow(self): + inlet_skin_model_part = self.model.GetModelPart("TestModelPart.Inlet") + for node in inlet_skin_model_part.Nodes: + node.SetSolutionStepValue(Kratos.VELOCITY, [0.0,0.0,1.0]) + node.SetValue(Kratos.NORMAL,[0.0,0.0,-1.0]) + + KratosFluidHydraulics.HydraulicFluidAuxiliaryUtilities.ApplyOutletInflowLimiter(inlet_skin_model_part,Kratos.VELOCITY,Kratos.NORMAL) + + for node in inlet_skin_model_part.Nodes: + if node.Id==5: + v=node.GetSolutionStepValue(Kratos.VELOCITY_Z) + self.assertAlmostEqual(v, 0.0, 12) + if __name__ == '__main__': UnitTest.main() \ No newline at end of file From 95e13dd1cc683bc214930dc86c1d0a9530a2f22f Mon Sep 17 00:00:00 2001 From: uxuech <73470625+uxuech@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:23:10 +0100 Subject: [PATCH 2/9] Update applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rubén Zorrilla --- .../custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp index 897cb973918..a405a808876 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp +++ b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp @@ -307,7 +307,10 @@ void HydraulicFluidAuxiliaryUtilities::SetInletFreeSurface(ModelPart &rModelPart }); } -void HydraulicFluidAuxiliaryUtilities::CalculateArtificialViscosity(ModelPart &rModelPart,double WaterDynamicViscosityMax){ +void HydraulicFluidAuxiliaryUtilities::CalculateNonIntersectedElementsArtificialViscosity( + ModelPart &rModelPart, + double DynamicViscosityMax) +{ const auto &r_process_info = rModelPart.GetProcessInfo(); block_for_each(rModelPart.Elements(), [&](Element &rElement) From 4e1c482b6e3cc789c725f49ce5066d2889e985d0 Mon Sep 17 00:00:00 2001 From: uxuech <73470625+uxuech@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:23:20 +0100 Subject: [PATCH 3/9] Update applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rubén Zorrilla --- .../custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp index a405a808876..4b814f300be 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp +++ b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp @@ -345,7 +345,10 @@ void HydraulicFluidAuxiliaryUtilities::CalculateNonIntersectedElementsArtificial }); } -void HydraulicFluidAuxiliaryUtilities::ApplyOutletInflowLimiter(ModelPart &rModelPart,const Variable>& rVariable,const Variable>& rVariableNormal) +void HydraulicFluidAuxiliaryUtilities::ApplyOutletInflowLimiter( + ModelPart &rModelPart, + const Variable>& rVariable, + const Variable>& rVariableNormal) { block_for_each(rModelPart.Nodes(), [&](NodeType& rNode) From 52ff838c730332abe0ca5aa6210794537361b0ea Mon Sep 17 00:00:00 2001 From: uxuech <73470625+uxuech@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:23:27 +0100 Subject: [PATCH 4/9] Update applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rubén Zorrilla --- .../custom_utilities/hydraulic_fluid_auxiliary_utilities.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h index 386d66f9d45..03d33658ed8 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h +++ b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h @@ -120,7 +120,7 @@ class KRATOS_API(FLUID_DYNAMICS_HYDRAULICS_APPLICATION) HydraulicFluidAuxiliaryU /** * @brief Artificial viscosity is calculated. The purpose of adding this artificial viscosity is to avoid non-physical spikes in velocities. * @param rModelPart Fluid Model Part - * @param WaterDynamicViscosityMax It is a threshold value to prevent adding excessive artificial numerical viscosity and thereby losing the real physics. + * @param DynamicViscosityMax It is a threshold value to prevent adding excessive artificial numerical viscosity and thereby losing the real physics. */ static void CalculateArtificialViscosity(ModelPart &rModelPart, double WaterDynamicViscosityMax); From 56bbac95ad26874047a4286c74edd737f08b37c1 Mon Sep 17 00:00:00 2001 From: uxuech <73470625+uxuech@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:23:36 +0100 Subject: [PATCH 5/9] Update applications/FluidDynamicsHydraulicsApplication/tests/test_hydraulic_fluid_auxiliary_utilities.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rubén Zorrilla --- .../tests/test_hydraulic_fluid_auxiliary_utilities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/FluidDynamicsHydraulicsApplication/tests/test_hydraulic_fluid_auxiliary_utilities.py b/applications/FluidDynamicsHydraulicsApplication/tests/test_hydraulic_fluid_auxiliary_utilities.py index d6952f1b81b..abecc3d6167 100644 --- a/applications/FluidDynamicsHydraulicsApplication/tests/test_hydraulic_fluid_auxiliary_utilities.py +++ b/applications/FluidDynamicsHydraulicsApplication/tests/test_hydraulic_fluid_auxiliary_utilities.py @@ -75,7 +75,7 @@ def testCalculateWettedArea(self): theoretical_wetted_area= 2.0*(level_set_z) self.assertAlmostEqual(WettedArea, theoretical_wetted_area, 12) - def testAvoidOutletInflow(self): + def testApplyOutletInflowLimiter(self): inlet_skin_model_part = self.model.GetModelPart("TestModelPart.Inlet") for node in inlet_skin_model_part.Nodes: node.SetSolutionStepValue(Kratos.VELOCITY, [0.0,0.0,1.0]) From fbe7538ce591b3e2cdfc9c17a222d798450d45ea Mon Sep 17 00:00:00 2001 From: uxuech <73470625+uxuech@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:23:42 +0100 Subject: [PATCH 6/9] Update applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rubén Zorrilla --- .../custom_utilities/hydraulic_fluid_auxiliary_utilities.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h index 03d33658ed8..c25a39ed92e 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h +++ b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h @@ -130,9 +130,10 @@ class KRATOS_API(FLUID_DYNAMICS_HYDRAULICS_APPLICATION) HydraulicFluidAuxiliaryU * @param rVariable it is possible to use the variable VELOCITY_FRACTIONAL or VELOCITY * @param rVariableNormal it is possible to use an auxiliar normal such as INLET_NORMAL */ - static void ApplyOutletInflowLimiter(ModelPart &rModelPart, - const Variable>& rVariable, - const Variable>& rVariableNormal); + static void ApplyOutletInflowLimiter( + ModelPart &rModelPart, + const Variable>& rVariable, + const Variable>& rVariableNormal); ///@} From 21bb5751d6afd093bbccd52d57b6ab370af76f9b Mon Sep 17 00:00:00 2001 From: uxuech <73470625+uxuech@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:23:51 +0100 Subject: [PATCH 7/9] Update applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rubén Zorrilla --- .../custom_utilities/hydraulic_fluid_auxiliary_utilities.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h index c25a39ed92e..80b271d97be 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h +++ b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h @@ -122,7 +122,9 @@ class KRATOS_API(FLUID_DYNAMICS_HYDRAULICS_APPLICATION) HydraulicFluidAuxiliaryU * @param rModelPart Fluid Model Part * @param DynamicViscosityMax It is a threshold value to prevent adding excessive artificial numerical viscosity and thereby losing the real physics. */ - static void CalculateArtificialViscosity(ModelPart &rModelPart, double WaterDynamicViscosityMax); + static void CalculateArtificialViscosity( + ModelPart &rModelPart, + double DynamicViscosityMax); /** * @brief When there is inflow on a boundary considered as an outlet, this function retains only the tangential component, preventing inflows that cause instabilities. From f727b81304e2d798dfd1b07188c5491458755d4d Mon Sep 17 00:00:00 2001 From: uxuech Date: Thu, 6 Feb 2025 20:02:15 +0100 Subject: [PATCH 8/9] minor change --- .../hydraulic_fluid_auxiliary_utilities.cpp | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp index 4b814f300be..335b9c4e922 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp +++ b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp @@ -307,27 +307,19 @@ void HydraulicFluidAuxiliaryUtilities::SetInletFreeSurface(ModelPart &rModelPart }); } -void HydraulicFluidAuxiliaryUtilities::CalculateNonIntersectedElementsArtificialViscosity( - ModelPart &rModelPart, - double DynamicViscosityMax) -{ +void HydraulicFluidAuxiliaryUtilities::CalculateArtificialViscosity(ModelPart &rModelPart, + double WaterDynamicViscosityMax) + { const auto &r_process_info = rModelPart.GetProcessInfo(); - block_for_each(rModelPart.Elements(), [&](Element &rElement) { - double artificial_viscosity; - - rElement.Calculate(ARTIFICIAL_DYNAMIC_VISCOSITY,artificial_viscosity ,r_process_info); - if (artificial_viscosity > WaterDynamicViscosityMax) - { - artificial_viscosity = WaterDynamicViscosityMax; - } + double artificial_viscosity; + // Check if the element is cut double neg_nodes = 0.0; double pos_nodes=0.0; for (auto &r_node : rElement.GetGeometry()) { double distance = r_node.FastGetSolutionStepValue(DISTANCE); - if (distance > 0) { pos_nodes += 1; @@ -337,10 +329,21 @@ void HydraulicFluidAuxiliaryUtilities::CalculateNonIntersectedElementsArtificial neg_nodes += 1; } } - if (neg_nodes > 0 && pos_nodes > 0) + // Calculate the artificial viscosity + if (neg_nodes > 0 && pos_nodes > 0) { + // If the element is cut, the artificial viscosity is set to zero. artificial_viscosity = 0.0; } + else + { + // If the element is NOT cut, the artificial viscosity is calculated. + rElement.Calculate(ARTIFICIAL_DYNAMIC_VISCOSITY,artificial_viscosity ,r_process_info); + if (artificial_viscosity > WaterDynamicViscosityMax) + { + artificial_viscosity = WaterDynamicViscosityMax; + } + } rElement.SetValue(ARTIFICIAL_DYNAMIC_VISCOSITY, artificial_viscosity); }); } From b794d80fb544de2a486f039407c870cc69c4bdb8 Mon Sep 17 00:00:00 2001 From: uxuech Date: Wed, 12 Feb 2025 11:42:15 +0100 Subject: [PATCH 9/9] rename compilation error --- .../custom_python/add_custom_utilities_to_python.cpp | 2 +- .../hydraulic_fluid_auxiliary_utilities.cpp | 9 +++++---- .../hydraulic_fluid_auxiliary_utilities.h | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_python/add_custom_utilities_to_python.cpp b/applications/FluidDynamicsHydraulicsApplication/custom_python/add_custom_utilities_to_python.cpp index daa05ac36eb..08b927fbe77 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_python/add_custom_utilities_to_python.cpp +++ b/applications/FluidDynamicsHydraulicsApplication/custom_python/add_custom_utilities_to_python.cpp @@ -32,7 +32,7 @@ void AddCustomUtilitiesToPython(pybind11::module& m) .def_static("SetInletVelocity", [](ModelPart &rModelPart, double InletVelocity, const Variable &rDistanceVariable){return HydraulicFluidAuxiliaryUtilities::SetInletVelocity(rModelPart, InletVelocity, rDistanceVariable);}) .def_static("FreeInlet", [](ModelPart &rModelPart){return HydraulicFluidAuxiliaryUtilities::FreeInlet(rModelPart);}) .def_static("SetInletFreeSurface", [](ModelPart &rModelPart, const Flags &rSkinFlag, const Variable &rDistanceVariable){return HydraulicFluidAuxiliaryUtilities::SetInletFreeSurface(rModelPart, rSkinFlag, rDistanceVariable);}) - .def_static("CalculateArtificialViscosity", [](ModelPart &rModelPart, double WaterDynamicViscosityMax){ return HydraulicFluidAuxiliaryUtilities::CalculateArtificialViscosity(rModelPart, WaterDynamicViscosityMax); }) + .def_static("CalculateNonIntersectedElementsArtificialViscosity", [](ModelPart &rModelPart, double DynamicViscosityMax){ return HydraulicFluidAuxiliaryUtilities::CalculateNonIntersectedElementsArtificialViscosity(rModelPart, DynamicViscosityMax); }) .def_static("ApplyOutletInflowLimiter", [](ModelPart &rModelPart,Variable>& rVariable,Variable>& rVariableNormal){ return HydraulicFluidAuxiliaryUtilities::ApplyOutletInflowLimiter(rModelPart, rVariable, rVariableNormal); }); } diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp index 335b9c4e922..aa0d44a2633 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp +++ b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.cpp @@ -307,8 +307,9 @@ void HydraulicFluidAuxiliaryUtilities::SetInletFreeSurface(ModelPart &rModelPart }); } -void HydraulicFluidAuxiliaryUtilities::CalculateArtificialViscosity(ModelPart &rModelPart, - double WaterDynamicViscosityMax) +void HydraulicFluidAuxiliaryUtilities::CalculateNonIntersectedElementsArtificialViscosity( + ModelPart &rModelPart, + double DynamicViscosityMax) { const auto &r_process_info = rModelPart.GetProcessInfo(); block_for_each(rModelPart.Elements(), [&](Element &rElement) @@ -339,9 +340,9 @@ void HydraulicFluidAuxiliaryUtilities::CalculateArtificialViscosity(ModelPart &r { // If the element is NOT cut, the artificial viscosity is calculated. rElement.Calculate(ARTIFICIAL_DYNAMIC_VISCOSITY,artificial_viscosity ,r_process_info); - if (artificial_viscosity > WaterDynamicViscosityMax) + if (artificial_viscosity > DynamicViscosityMax) { - artificial_viscosity = WaterDynamicViscosityMax; + artificial_viscosity = DynamicViscosityMax; } } rElement.SetValue(ARTIFICIAL_DYNAMIC_VISCOSITY, artificial_viscosity); diff --git a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h index 80b271d97be..dda00980280 100644 --- a/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h +++ b/applications/FluidDynamicsHydraulicsApplication/custom_utilities/hydraulic_fluid_auxiliary_utilities.h @@ -122,7 +122,7 @@ class KRATOS_API(FLUID_DYNAMICS_HYDRAULICS_APPLICATION) HydraulicFluidAuxiliaryU * @param rModelPart Fluid Model Part * @param DynamicViscosityMax It is a threshold value to prevent adding excessive artificial numerical viscosity and thereby losing the real physics. */ - static void CalculateArtificialViscosity( + static void CalculateNonIntersectedElementsArtificialViscosity( ModelPart &rModelPart, double DynamicViscosityMax);