Source code for ahkab.pss

# -*- coding: iso-8859-1 -*-
# pss.py
# Periodic Steady State analysis
# Copyright 2011-2013 Giuseppe Venturini

# This file is part of the ahkab simulator.
#
# Ahkab is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 2 of the License.
#
# Ahkab is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License v2
# along with ahkab.  If not, see <http://www.gnu.org/licenses/>.

from __future__ import (unicode_literals, absolute_import,
                        division, print_function)

from . import shooting
from . import bfpss
from . import options

# Periodic Steady State (PSS) analysis module.

# This module is an interface to a generic PSS analysis,
# which will be set up automatically for you according to
# the algorithm selected.

# Netlist syntax
# .PSS PERIOD=n [points=n step=n autonomous=bool method=str]

specs = {'pss': {'tokens': ({
                            'label': 'period',
                            'pos': 0,
                            'type': float,
                            'needed': True,
                            'dest': 'period',
                            'default': None
                            },
        {
                            'label': 'points',
                            'pos': None,
                            'type': float,
                            'needed': True,
                            'dest': 'points',
                            'default': None
                            },
                 {
                            'label': 'step',
                            'pos': None,
                            'type': float,
                            'needed': False,
                            'dest': 'step',
                            'default': None
                            },
                 {
                            'label': 'autonomous',
                            'pos': None,
                            'type': bool,
                            'needed': False,
                            'dest': 'autonomous',
                            'default': '0'
                            },
                 {
                            'label': 'method',
                            'pos': None,
                            'type': str,
                            'needed': False,
                            'dest': 'method',
                            'default': options.SHOOTINGPSS
                            }
                            )
                 }
         }


[docs]def pss_analysis(*largs, **args): """Perform a PSS analysis. The only required argument is ``method`` (string), which selects the algorithm to be used. Two algorithms are a shooting PSS, selected with the ``"shooting"`` switch and brute-force PSS, selected by the ``"brute-force"`` switch. Any other value for the ``method`` parameter will result in a ``ValueError`` exception being raised. The rest of the arguments will be passed to the algorithm implementing the analysis. For the shooting algorithm see :mod:`ahkab.shooting`, for the brute-force algorithm see :mod:`ahkab.bfpss`. **Returns:** sol : PSS solution object (:class:`results.pss_solution`) The solution. """ m = args.pop('method').lower() if m == options.SHOOTINGPSS: r = shooting.shooting_analysis(*largs, **args) elif m == options.BFPSS: r = bfpss.bfpss(*largs, **args) else: raise Exception("Unknown PSS method %s" % m) return r