diff --git a/thetis/configuration.py b/thetis/configuration.py index d6bb1c2cd..5f64a3c60 100644 --- a/thetis/configuration.py +++ b/thetis/configuration.py @@ -204,7 +204,6 @@ def default_value_repr(self): class PETScSolverParameters(Dict): """PETSc solver options dictionary""" - default_value = None info_text = 'a PETSc solver options dictionary' def validate(self, obj, value): @@ -331,8 +330,8 @@ def _default(self): if hasattr(name_trait, 'default_value') and name_trait.default_value is not None: return name_trait.paired_defaults[name_trait.default_value]() - obs_handler = ObserveHandler(name, type="change") - def_handler = DefaultHandler(name_trait.paired_name) + obs_handler = observe(name, type="change") + def_handler = default(name_trait.paired_name) def update_class(cls): "Programmatically update the class" diff --git a/thetis/options.py b/thetis/options.py index 10372d249..125945b53 100644 --- a/thetis/options.py +++ b/thetis/options.py @@ -84,13 +84,11 @@ class PressureProjectionTimestepperOptions2d(TimeStepperOptions): 'pc_python_type': 'thetis.AssembledSchurPC', 'schur_ksp_type': 'gmres', 'schur_ksp_max_it': 100, - 'schur_ksp_converged_reason': False, 'schur_pc_type': 'gamg', }, }).tag(config=True) solver_parameters_momentum = PETScSolverParameters({ 'ksp_type': 'gmres', - 'ksp_converged_reason': False, 'pc_type': 'bjacobi', 'sub_ksp_type': 'preonly', 'sub_pc_type': 'sor', diff --git a/thetis/utility.py b/thetis/utility.py index e9d8fdabd..b157ed969 100755 --- a/thetis/utility.py +++ b/thetis/utility.py @@ -387,6 +387,8 @@ def __init__(self, solution, uv, bathymetry, boundary_funcs={}, solver_parameters.setdefault('pc_type', 'bjacobi') solver_parameters.setdefault('sub_ksp_type', 'preonly') solver_parameters.setdefault('sub_pc_type', 'ilu') + solver_parameters.setdefault('sub_pc_factor_shift_type', 'inblocks') + fs = solution.function_space() mesh = fs.mesh() test = TestFunction(fs)