Source code for capytaine.post_pro.impedance
"""Computation of the impendance matrix."""
# Copyright (C) 2017-2019 Matthieu Ancellin
# See LICENSE file at <https://github.com/mancellin/capytaine>
import logging
LOG = logging.getLogger(__name__)
[docs]
def rao_transfer_function(dataset, dissipation=None, stiffness=None):
"""Complex-valued matrix used for the computation of the RAO.
Parameters
----------
dataset: xarray Dataset
The hydrodynamical dataset.
This function supposes that variables named 'inertia_matrix' and 'hydrostatic_stiffness' are in the dataset.
Other variables can be computed by Capytaine, by those two should be manually added to the dataset.
dissipation: array, optional
An optional dissipation matrix (e.g. Power Take Off) to be included in the transfer function.
Default: none.
stiffness: array, optional
An optional stiffness matrix (e.g. mooring stiffness) to be included in the transfer function.
Default: none.
Returns
-------
xarray DataArray
The matrix as an array depending of omega and the degrees of freedom.
"""
if not hasattr(dataset, 'inertia_matrix'):
raise AttributeError('Computing the impedance matrix requires an `inertia_matrix` matrix to be defined in the hydrodynamical dataset')
if not hasattr(dataset, 'hydrostatic_stiffness'):
raise AttributeError('Computing the impedance matrix requires an `hydrostatic_stiffness` matrix to be defined in the hydrodynamical dataset')
if 'encounter_omega' in dataset.coords:
omega = dataset.coords['encounter_omega']
else:
omega = dataset.coords['omega']
# ASSEMBLE MATRICES
H = (-omega**2*(dataset['inertia_matrix'] + dataset['added_mass'])
- 1j*omega*dataset['radiation_damping']
+ dataset['hydrostatic_stiffness'])
if dissipation is not None:
H = H - 1j*omega*dissipation
if stiffness is not None:
H = H + stiffness
return H
[docs]
def impedance(dataset, dissipation=None, stiffness=None):
"""Complex-valued mechanical impedance matrix.
See Falnes for more theoretical details::
@book{falnes2002ocean,
title={Ocean Waves and Oscillating Systems: Linear Interactions Including Wave-Energy Extraction},
author={Falnes, J.},
isbn={9781139431934},
url={https://books.google.com/books?id=bl1FyQjCklgC},
year={2002},
publisher={Cambridge University Press}
}
Parameters
----------
dataset: xarray Dataset
The hydrodynamical dataset.
This function supposes that variables named 'inertia_matrix' and 'hydrostatic_stiffness' are in the dataset.
Other variables can be computed by Capytaine, by those two should be manually added to the dataset.
dissipation: array, optional
An optional dissipation matrix (e.g. Power Take Off) to be included in the impedance.
Default: none.
stiffness: array, optional
An optional stiffness matrix (e.g. mooring stiffness) to be included in the impedance.
Default: none.
Returns
-------
xarray DataArray
The impedance as an array depending of omega and the degrees of freedom.
"""
if 'encounter_omega' in dataset.coords:
omega = dataset.coords['encounter_omega']
else:
omega = dataset.coords['omega']
return 1/(-1j * omega) * rao_transfer_function(dataset, dissipation, stiffness)