Exemple #1
0
def multitrace_operator(grid, parameters=None, spaces='linear', target=None):
    """Return the Laplace multitrace operator.

    Parameters
    ----------
    grid : bempp.api.grid.Grid
        The underlying grid for the multitrace operator
    parameters : bempp.api.common.ParameterList
        Parameters for the operator. If none given
        the default global parameter object
        `bempp.api.global_parameters` is used.
    spaces: string
        Choose 'linear' to assemble the operator
        with continuous linear function spaces for the
        Dirichlet and Neumann component (default). For
        a dual pairing of a linear space for the Dirichlet
        data and piecewise constant space for the Neumann
        data choose 'dual'.
    target: bempp.api.grid.Grid
        Specifies a target grid. If it is different from
        'grid' then the operator maps from 'grid' to
        'target'.

    """

    from bempp.api.operators.boundary import _common
    return _common.multitrace_operator_impl(grid,
                                            single_layer,
                                            double_layer,
                                            hypersingular,
                                            parameters,
                                            spaces,
                                            laplace=True,
                                            target=target)
Exemple #2
0
def multitrace_operator(grid, wave_number, parameters=None):
    """Return the modified Helmholtz multitrace operator.

    Parameters
    ----------
    grid : bempp.api.grid.Grid
        The underlying grid for the multitrace operator
    wave_number : complex
        Wavenumber of the operator.
    parameters : bempp.api.common.ParameterList
        Parameters for the operator. If none given
        the default global parameter object
        `bempp.api.global_parameters` is used.

    """

    def op(operator):
        if operator==hypersingular:
            def op_impl(domain, range_, dual_to_range, label="HYP", symmetry="no_symmetry",
                        parameters=None, use_slp=False):
                return hypersingular(domain, range_, dual_to_range, wave_number, label, symmetry, parameters,
                                     use_slp)
            return op_impl
        else:
            import inspect
            defaults = inspect.getargspec(operator).defaults
            def op_impl(domain, range_, dual_to_range, label=defaults[0], symmetry=defaults[1],
                        parameters=None):
                return operator(domain, range_, dual_to_range, wave_number, label, symmetry, parameters)
            return op_impl

    from bempp.api.operators.boundary import _common
    return _common.multitrace_operator_impl(grid, op(single_layer), op(double_layer),
                                            op(hypersingular), parameters)
Exemple #3
0
def multitrace_operator(grid, parameters=None):
    """Return the Laplace multitrace operator.

    Parameters
    ----------
    grid : bempp.api.grid.Grid
        The underlying grid for the multitrace operator
    parameters : bempp.api.common.ParameterList
        Parameters for the operator. If none given
        the default global parameter object
        `bempp.api.global_parameters` is used.

    """

    from bempp.api.operators.boundary import _common
    return _common.multitrace_operator_impl(grid, single_layer, double_layer, hypersingular, parameters)
Exemple #4
0
def multitrace_operator(grid, wave_number, parameters=None, spaces="linear"):
    """Return the modified Helmholtz multitrace operator.

    Parameters
    ----------
    grid : bempp.api.grid.Grid
        The underlying grid for the multitrace operator
    wave_number : complex
        Wavenumber of the operator.
    parameters : bempp.api.common.ParameterList
        Parameters for the operator. If none given
        the default global parameter object
        `bempp.api.global_parameters` is used.
    spaces: string
        Choose 'linear' to assemble the operator
        with continuous linear function spaces for the
        Dirichlet and Neumann component (default). For
        a dual pairing of a linear space for the Dirichlet
        data and piecewise constant space for the Neumann
        data choose 'dual'.

    """

    def op(operator):
        if operator == hypersingular:

            def op_impl(
                domain, range_, dual_to_range, label="HYP", symmetry="no_symmetry", parameters=None, use_slp=False
            ):
                return hypersingular(domain, range_, dual_to_range, wave_number, label, symmetry, parameters, use_slp)

            return op_impl
        else:
            import inspect

            defaults = inspect.getargspec(operator).defaults

            def op_impl(domain, range_, dual_to_range, label=defaults[0], symmetry=defaults[1], parameters=None):
                return operator(domain, range_, dual_to_range, wave_number, label, symmetry, parameters)

            return op_impl

    from bempp.api.operators.boundary import _common

    return _common.multitrace_operator_impl(
        grid, op(single_layer), op(double_layer), op(hypersingular), parameters, spaces
    )
Exemple #5
0
def multitrace_operator(grid, parameters=None, spaces='linear'):
    """Return the Laplace multitrace operator.

    Parameters
    ----------
    grid : bempp.api.grid.Grid
        The underlying grid for the multitrace operator
    parameters : bempp.api.common.ParameterList
        Parameters for the operator. If none given
        the default global parameter object
        `bempp.api.global_parameters` is used.
    spaces: string
        Choose 'linear' to assemble the operator
        with continuous linear function spaces for the
        Dirichlet and Neumann component (default). For
        a dual pairing of a linear space for the Dirichlet
        data and piecewise constant space for the Neumann
        data choose 'dual'.

    """

    from bempp.api.operators.boundary import _common
    return _common.multitrace_operator_impl(
            grid, single_layer, double_layer, hypersingular, parameters, spaces, laplace=True)
Exemple #6
0
def multitrace_operator(grid,
                        wave_number,
                        parameters=None,
                        spaces='linear',
                        target=None):
    """Return the modified Helmholtz multitrace operator.

    Parameters
    ----------
    grid : bempp.api.grid.Grid
        The underlying grid for the multitrace operator
    wave_number : complex
        Wavenumber of the operator.
    parameters : bempp.api.common.ParameterList
        Parameters for the operator. If none given
        the default global parameter object
        `bempp.api.global_parameters` is used.
    spaces: string
        Choose 'linear' to assemble the operator
        with continuous linear function spaces for the
        Dirichlet and Neumann component (default). For
        a dual pairing of a linear space for the Dirichlet
        data and piecewise constant space for the Neumann
        data choose 'dual'.
    target: bempp.api.grid.Grid
        Specifies a target grid. If it is different from
        'grid' then the operator maps from 'grid' to
        'target'.

    """

    #pylint: disable=invalid-name
    def op(operator):
        """Partial lambda that removes the wavenumber."""
        if operator == hypersingular:

            def op_impl(domain,
                        range_,
                        dual_to_range,
                        label="HYP",
                        symmetry="no_symmetry",
                        parameters=None,
                        use_slp=False):
                """Implementation of operator without wavenumber param."""
                return hypersingular(domain, range_, dual_to_range,
                                     wave_number, label, symmetry, parameters,
                                     use_slp)

            return op_impl
        else:
            import inspect
            #pylint: disable=deprecated-method
            defaults = inspect.getargspec(operator).defaults

            def op_impl(domain,
                        range_,
                        dual_to_range,
                        label=defaults[0],
                        symmetry=defaults[1],
                        parameters=None):
                """Implementation of operator without wavenumber param."""
                return operator(domain, range_, dual_to_range, wave_number,
                                label, symmetry, parameters)

            return op_impl

    from bempp.api.operators.boundary import _common
    return _common.multitrace_operator_impl(grid,
                                            op(single_layer),
                                            op(double_layer),
                                            op(hypersingular),
                                            parameters,
                                            spaces,
                                            target=target)