Source code for o3seespy.command.algorithm

from o3seespy.base_model import OpenSeesObject


[docs]class AlgorithmBase(OpenSeesObject): op_base_type = "algorithm"
[docs] def to_process(self, osi): if osi is None: return OpenSeesObject.to_process(self, osi)
[docs] def reapply(self, osi): self.to_process(osi)
[docs]class Linear(AlgorithmBase): op_type = "Linear" def __init__(self, osi, secant=False, initial=False, factor_once=False): self.osi = osi self.secant = secant self.initial = initial self.factor_once = factor_once self._parameters = [self.op_type, self.secant, self.initial, self.factor_once] self.to_process(osi)
[docs]class Newton(AlgorithmBase): op_type = "Newton" def __init__(self, osi, secant=False, initial=False, initial_then_current=False): self.osi = osi self.secant = secant self.initial = initial self.initial_then_current = initial_then_current self._parameters = [self.op_type, self.secant, self.initial, self.initial_then_current] self.to_process(osi)
[docs]class SecantNewton(AlgorithmBase): op_type = "SecantNewton" def __init__(self, osi, iterate='current', increment='current', maxDim=3): self.osi = osi self.iterate = iterate self.increment = increment self.maxDim = maxDim self._parameters = [self.op_type, self.iterate, self.increment, self.maxDim] self.to_process(osi)
[docs]class RaphsonNewton(AlgorithmBase): op_type = "RaphsonNewton" def __init__(self, osi, iterate='current', increment='current'): self.osi = osi self.iterate = iterate self.increment = increment self._parameters = [self.op_type, self.iterate, self.increment] self.to_process(osi)
[docs]class KrylovNewton(AlgorithmBase): op_type = "KrylovNewton" def __init__(self, osi, tang_inter='current', tang_incr='current', max_inter=3): """ Parameters ---------- osi tang_inter: str options are: 'current', 'initial', 'noTangent' tang_incr max_inter """ self.osi = osi self.tang_inter = tang_inter self.tang_incr = tang_incr self.max_inter = max_inter self._parameters = [self.op_type, self.tang_inter, self.tang_incr, self.max_inter] self.to_process(osi)
[docs]class ModifiedNewton(AlgorithmBase): op_type = "ModifiedNewton" def __init__(self, osi, secant=False, initial=False): """ Parameters ---------- osi secant: bool Flag to indicate to use secant stiffness. initial: bool Flag to indicate to use initial stiffness max_inter """ self.osi = osi self.secant = secant self.initial = initial self._parameters = [self.op_type, self.secant, self.initial] self.to_process(osi)
[docs]class NewtonLineSearch(AlgorithmBase): op_type = 'NewtonLineSearch' def __init__(self, osi, search_type=None, tol=None, max_iter=None, min_eta=None, max_eta=None): """ :param osi: :param search_type: str :param tol: default 0.8 :param max_iter: default=10 :param min_eta: deault=0.1 :param max_eta: default=10 """ self.osi = osi if search_type is None: self.search_type = None self._parameters = [self.op_type, search_type] else: self.search_type = search_type self._parameters = [self.op_type, search_type] if tol is not None: self._parameters += ['-tol', tol] if max_iter is not None: self._parameters += ['-maxIter', max_iter] if min_eta is not None: self._parameters += ['-minEta', min_eta] if max_eta is not None: self._parameters += ['-maxEta', max_eta] self.to_process(osi)
[docs]class Broyden(AlgorithmBase): op_type = 'Broyden' def __init__(self, osi, secant=False, initial=False, count=10): self.osi = osi self._parameters = [self.op_type, secant, initial, count] self.to_process(osi)
[docs]class BFGS(AlgorithmBase): op_type = 'BFGS' def __init__(self, osi, secant=False, initial=False, count=10): self.osi = osi self._parameters = [self.op_type, secant, initial, count] self.to_process(osi)