Source code for qgs.diagnostics.differential

"""
    Differential diagnostic base class
    ==================================

    Abstract base classes defining diagnostics on differentiated grids.

    Description of the classes
    --------------------------

    * :class:`DifferentialFieldDiagnostic`: Base class for diagnostics returning model's fields based on differential grids.
    * :class:`LaplacianFieldDiagnostic`: Base class for diagnostics returning model's fields based on Laplacian grids.

    Warnings
    --------

    These are `abstract base class`_, they must be subclassed to create new diagnostics!

    .. _abstract base class: https://docs.python.org/3/glossary.html#term-abstract-base-class

"""

from qgs.diagnostics.util import create_grid_basis

from qgs.diagnostics.base import FieldDiagnostic


[docs]class DifferentialFieldDiagnostic(FieldDiagnostic): """General base class for differential fields diagnostic. This is an `abstract base class`_, it must be subclassed to create new diagnostics! .. _abstract base class: https://docs.python.org/3/glossary.html#term-abstract-base-class Parameters ---------- model_params: QgParams An instance of the model parameters. dimensional: bool Indicate if the output diagnostic must be dimensionalized or not. Attributes ---------- dimensional: bool Indicate if the output diagnostic must be dimensionalized or not. """ def __init__(self, model_params, dimensional): FieldDiagnostic.__init__(self, model_params, dimensional) def _configure_differential_grid(self, basis, derivative, order, delta_x=None, delta_y=None): self._compute_grid(delta_x, delta_y) if derivative == "dx": dx_basis = basis.x_derivative(order) self._grid_basis = create_grid_basis(dx_basis, self._X, self._Y, self._subs) elif derivative == "dy": dy_basis = basis.y_derivative(order) self._grid_basis = create_grid_basis(dy_basis, self._X, self._Y, self._subs)
[docs]class LaplacianFieldDiagnostic(FieldDiagnostic): """General base class for Laplacian fields diagnostic. This is an `abstract base class`_, it must be subclassed to create new diagnostics! .. _abstract base class: https://docs.python.org/3/glossary.html#term-abstract-base-class Parameters ---------- model_params: QgParams An instance of the model parameters. dimensional: bool Indicate if the output diagnostic must be dimensionalized or not. Attributes ---------- dimensional: bool Indicate if the output diagnostic must be dimensionalized or not. """ def __init__(self, model_params, dimensional): FieldDiagnostic.__init__(self, model_params, dimensional) def _configure_laplacian_grid(self, basis, delta_x=None, delta_y=None): self._compute_grid(delta_x, delta_y) dx_basis = basis.x_derivative(2) dx_grid = create_grid_basis(dx_basis, self._X, self._Y, self._subs) dy_basis = basis.y_derivative(2) dy_grid = create_grid_basis(dy_basis, self._X, self._Y, self._subs) self._grid_basis = dx_grid + dy_grid