From 2e368fc67d18f70f0c94dc6da2f97307c9394011 Mon Sep 17 00:00:00 2001 From: Daniel Diez Date: Tue, 17 Oct 2023 13:06:39 +0200 Subject: [PATCH 1/2] allow using different var for pressure --- kratos/linear_solvers/amgcl_ns_solver.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kratos/linear_solvers/amgcl_ns_solver.h b/kratos/linear_solvers/amgcl_ns_solver.h index b5c30c2e4940..ea94e46fa7e5 100644 --- a/kratos/linear_solvers/amgcl_ns_solver.h +++ b/kratos/linear_solvers/amgcl_ns_solver.h @@ -118,6 +118,7 @@ class AMGCL_NS_Solver : public LinearSolver< TSparseSpaceType, //kratos specific settings mTol = rParameters["inner_settings"]["solver"]["tol"].GetDouble(); mVerbosity=rParameters["verbosity"].GetInt(); + mPressureVarName = rParameters["schur_variable"].GetString(); mndof = 1; //pass settings to amgcl @@ -403,12 +404,13 @@ class AMGCL_NS_Solver : public LinearSolver< TSparseSpaceType, //***************************** //compute pressure mask if(mp.size() != rA.size1()) mp.resize( rA.size1() ); + const auto& r_pressure_var = KratosComponents>::Get(mPressureVarName); for (ModelPart::DofsArrayType::iterator it = rDofSet.begin(); it!=rDofSet.end(); it++) { const unsigned int eq_id = it->EquationId(); if( eq_id < rA.size1() ) { - mp[eq_id] = (it->GetVariable().Key() == PRESSURE); + mp[eq_id] = (it->GetVariable().Key() == r_pressure_var); } } @@ -419,6 +421,7 @@ class AMGCL_NS_Solver : public LinearSolver< TSparseSpaceType, double mTol; int mVerbosity; + std::string mPressureVarName; int mndof; std::vector< char > mp; From 9497725b928e4aff6e227efbbaf17ea3b52bd10d Mon Sep 17 00:00:00 2001 From: Daniel Diez Date: Tue, 17 Oct 2023 14:46:12 +0200 Subject: [PATCH 2/2] using pointer --- kratos/linear_solvers/amgcl_ns_solver.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/kratos/linear_solvers/amgcl_ns_solver.h b/kratos/linear_solvers/amgcl_ns_solver.h index ea94e46fa7e5..1c06fe996c08 100644 --- a/kratos/linear_solvers/amgcl_ns_solver.h +++ b/kratos/linear_solvers/amgcl_ns_solver.h @@ -28,6 +28,7 @@ // Project includes #include "includes/define.h" +#include "includes/kratos_components.h" #include "linear_solvers/iterative_solver.h" #include @@ -118,7 +119,8 @@ class AMGCL_NS_Solver : public LinearSolver< TSparseSpaceType, //kratos specific settings mTol = rParameters["inner_settings"]["solver"]["tol"].GetDouble(); mVerbosity=rParameters["verbosity"].GetInt(); - mPressureVarName = rParameters["schur_variable"].GetString(); + const std::string pressure_var_name = rParameters["schur_variable"].GetString(); + mpPressureVar = &KratosComponents>::Get(pressure_var_name); mndof = 1; //pass settings to amgcl @@ -404,13 +406,12 @@ class AMGCL_NS_Solver : public LinearSolver< TSparseSpaceType, //***************************** //compute pressure mask if(mp.size() != rA.size1()) mp.resize( rA.size1() ); - const auto& r_pressure_var = KratosComponents>::Get(mPressureVarName); for (ModelPart::DofsArrayType::iterator it = rDofSet.begin(); it!=rDofSet.end(); it++) { const unsigned int eq_id = it->EquationId(); if( eq_id < rA.size1() ) { - mp[eq_id] = (it->GetVariable().Key() == r_pressure_var); + mp[eq_id] = (it->GetVariable().Key() == *mpPressureVar); } } @@ -421,7 +422,7 @@ class AMGCL_NS_Solver : public LinearSolver< TSparseSpaceType, double mTol; int mVerbosity; - std::string mPressureVarName; + const Variable* mpPressureVar = nullptr; int mndof; std::vector< char > mp;