Skip to content

Commit

Permalink
Convergence accelerators new constructor
Browse files Browse the repository at this point in the history
A new constructor that takes a parameters object as unique argument has been created for all the FSI convergence accelerators.
  • Loading branch information
rubenzorrilla committed Sep 4, 2017
1 parent a87a236 commit 47fd22d
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ void AddConvergenceAcceleratorsToPython()

// Aitken convergence accelerator
class_< AitkenConvergenceAccelerator <TSpace>, bases <BaseConvergenceAcceleratorType>, boost::noncopyable > ("AitkenConvergenceAccelerator", init< double >())
.def(init< Parameters& >())
.def("InitializeSolutionStep", &AitkenConvergenceAccelerator<TSpace>::InitializeSolutionStep)
.def("UpdateSolution", &AitkenConvergenceAccelerator<TSpace>::UpdateSolution)
.def("FinalizeNonLinearIteration", &AitkenConvergenceAccelerator<TSpace>::FinalizeNonLinearIteration)
Expand All @@ -55,6 +56,7 @@ void AddConvergenceAcceleratorsToPython()

// MVQN convergence accelerator
class_< MVQNFullJacobianConvergenceAccelerator <TSpace>, bases <BaseConvergenceAcceleratorType>, boost::noncopyable > ("MVQNFullJacobianConvergenceAccelerator", init< double >())
.def(init< Parameters& >())
.def("InitializeSolutionStep", &MVQNFullJacobianConvergenceAccelerator<TSpace>::InitializeSolutionStep)
.def("UpdateSolution", &MVQNFullJacobianConvergenceAccelerator<TSpace>::UpdateSolution)
.def("FinalizeNonLinearIteration", &MVQNFullJacobianConvergenceAccelerator<TSpace>::FinalizeNonLinearIteration)
Expand All @@ -63,6 +65,7 @@ void AddConvergenceAcceleratorsToPython()

// MVQN recursive convergence accelerator
class_< MVQNRecursiveJacobianConvergenceAccelerator <TSpace>, bases <BaseConvergenceAcceleratorType>, boost::noncopyable > ("MVQNRecursiveJacobianConvergenceAccelerator", init< double, int >())
.def(init< Parameters& >())
.def("Initialize", &MVQNRecursiveJacobianConvergenceAccelerator<TSpace>::Initialize)
.def("InitializeSolutionStep", &MVQNRecursiveJacobianConvergenceAccelerator<TSpace>::InitializeSolutionStep)
.def("UpdateSolution", &MVQNRecursiveJacobianConvergenceAccelerator<TSpace>::UpdateSolution)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@
/* System includes */

/* External includes */
#include "boost/smart_ptr.hpp"
#include "utilities/math_utils.h"

/* Project includes */
#include "includes/define.h"
#include "includes/variables.h"
#include "includes/kratos_parameters.h"
#include "convergence_accelerator.hpp"

namespace Kratos
Expand Down Expand Up @@ -69,6 +69,22 @@ class AitkenConvergenceAccelerator: public ConvergenceAccelerator<TSpace>
* Constructor.
* Aitken convergence accelerator
*/
AitkenConvergenceAccelerator(Parameters& rConvAcceleratorParameters)
{
Parameters aitken_default_parameters(R"(
{
"solver_type" : "Relaxation",
"acceleration_type" : "Aitken",
"w_0" : 0.825
}
)");

rConvAcceleratorParameters.ValidateAndAssignDefaults(aitken_default_parameters);

mOmega_0 = rConvAcceleratorParameters["w_0"].GetDouble();
}


AitkenConvergenceAccelerator(double rOmegaInitial = 0.825)
{
mOmega_0 = rOmegaInitial;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@
/* System includes */

/* External includes */
#include "boost/smart_ptr.hpp"
#include "utilities/math_utils.h"

/* Project includes */
#include "includes/define.h"
#include "includes/variables.h"
#include "includes/ublas_interface.h"
#include "includes/kratos_parameters.h"
#include "convergence_accelerator.hpp"

namespace Kratos
Expand Down Expand Up @@ -73,6 +73,22 @@ class MVQNFullJacobianConvergenceAccelerator: public ConvergenceAccelerator<TSpa
* Constructor.
* Aitken convergence accelerator
*/
MVQNFullJacobianConvergenceAccelerator( Parameters &rConvAcceleratorParameters )
{
Parameters mvqn_default_parameters(R"(
{
"solver_type" : "MVQN",
"w_0" : 0.825
}
)");

rConvAcceleratorParameters.ValidateAndAssignDefaults(mvqn_default_parameters);

mOmega_0 = rConvAcceleratorParameters["w_0"].GetDouble();
mConvergenceAcceleratorIteration = 0;
mConvergenceAcceleratorFirstCorrectionPerformed = false;
}

MVQNFullJacobianConvergenceAccelerator( double rOmegaInitial = 0.825 )
{
mOmega_0 = rOmegaInitial;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,25 @@ class MVQNRecursiveJacobianConvergenceAccelerator: public ConvergenceAccelerator
* Constructor.
* MVQN convergence accelerator
*/
MVQNRecursiveJacobianConvergenceAccelerator( Parameters &rConvAcceleratorParameters )
{
Parameters mvqn_recursive_default_parameters(R"(
{
"solver_type" : "MVQN",
"w_0" : 0.825,
"buffer_size" : 10
}
)");

rConvAcceleratorParameters.ValidateAndAssignDefaults(mvqn_recursive_default_parameters);

mOmega_0 = rConvAcceleratorParameters["w_0"].GetDouble();
mJacobianBufferSize = rConvAcceleratorParameters["buffer_size"].GetInt();
mConvergenceAcceleratorStep = 0;
mConvergenceAcceleratorIteration = 0;
mConvergenceAcceleratorFirstCorrectionPerformed = false;
}

MVQNRecursiveJacobianConvergenceAccelerator( double rOmegaInitial = 0.825, unsigned int rJacobianBufferSize = 10 )
{
mOmega_0 = rOmegaInitial;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,6 @@
except ImportError:
have_trilinos = False

_aitken_defaults = KratosMultiphysics.Parameters("""{ "solver_type" : "Relaxation",
"acceleration_type" : "Aitken",
"w_0" : 0.825 }""")

_mvqn_defaults = KratosMultiphysics.Parameters("""{ "solver_type" : "MVQN",
"w_0" : 0.825 }""")

_mvqn_defaults_recursive = KratosMultiphysics.Parameters("""{ "solver_type" : "MVQN_recursive",
"w_0" : 0.825,
"buffer_size" : 7 }""")

def CreateConvergenceAccelerator(configuration):

if(type(configuration) != KratosMultiphysics.Parameters):
Expand All @@ -27,24 +16,13 @@ def CreateConvergenceAccelerator(configuration):
convergence_accelerator_type = configuration["solver_type"].GetString()

if(convergence_accelerator_type == "Relaxation"):

configuration.ValidateAndAssignDefaults(_aitken_defaults)

if (configuration["acceleration_type"].GetString() == "Aitken"):
convergence_accelerator = KratosFSI.AitkenConvergenceAccelerator(configuration["w_0"].GetDouble())
return KratosFSI.AitkenConvergenceAccelerator(configuration)

elif(convergence_accelerator_type == "MVQN"):

configuration.ValidateAndAssignDefaults(_mvqn_defaults)

convergence_accelerator = KratosFSI.MVQNFullJacobianConvergenceAccelerator(configuration["w_0"].GetDouble())
return KratosFSI.MVQNFullJacobianConvergenceAccelerator(configuration)

elif(convergence_accelerator_type == "MVQN_recursive"):

configuration.ValidateAndAssignDefaults(_mvqn_defaults_recursive)

convergence_accelerator = KratosFSI.MVQNRecursiveJacobianConvergenceAccelerator(configuration["w_0"].GetDouble(),
configuration["buffer_size"].GetInt())
return KratosFSI.MVQNRecursiveJacobianConvergenceAccelerator(configuration)

else:
raise Exception("Convergence accelerator not found. Asking for : " + convergence_accelerator_type)
Expand All @@ -62,11 +40,7 @@ def CreateTrilinosConvergenceAccelerator(configuration):
convergence_accelerator_type = configuration["solver_type"].GetString()

if(convergence_accelerator_type == "Relaxation"):

configuration.ValidateAndAssignDefaults(_aitken_defaults)

if (configuration["acceleration_type"].GetString() == "Aitken"):
convergence_accelerator = KratosTrilinos.TrilinosAitkenConvergenceAccelerator(configuration["w_0"].GetDouble())
return KratosTrilinos.TrilinosAitkenConvergenceAccelerator(configuration)

else:
raise Exception("Trilinos convergence accelerator not found. Asking for : " + convergence_accelerator_type)
Expand Down

0 comments on commit 47fd22d

Please sign in to comment.