Commit 1763f1ca authored by Lukas Platz's avatar Lukas Platz

move total_volume functionality to DomainTuple

parent 4a05f59b
Pipeline #62676 passed with stages
in 7 minutes and 32 seconds
......@@ -19,6 +19,8 @@ from functools import reduce
from . import utilities
from .domains.domain import Domain
import numpy as np
class DomainTuple(object):
"""Ordered sequence of Domain objects.
......@@ -125,11 +127,28 @@ class DomainTuple(object):
"""
return self._size
@property
def total_volume(self):
def total_volume(self, spaces=None):
"""Returns the total volume of `self` or of a subspace of it.
Parameters
----------
spaces : int, tuple of int or None
Indices of the sub-domains of the domain to be considered.
If `None`, the total volume of the whole domain is returned.
Returns
-------
float
the total volume of the requested (sub-)domain.
"""
if np.isscalar(spaces):
return self._dom[spaces].total_volume
if spaces is None:
spaces = range(len(self._dom))
res = 1.
for d in self._dom:
res *= d.total_volume
for i in spaces:
res *= self._dom[i].total_volume
return res
@property
......
......@@ -260,30 +260,20 @@ class Field(object):
return res
def total_volume(self, spaces=None):
"""Returns the total volume of a sub-domain of `self`.
"""Returns the total volume of the field's domain or of a subspace of it.
Parameters
----------
spaces : int, tuple of int or None
Indices of the sub-domains of the field's domain to be considered.
If `None`, the entire domain is used.
If `None`, the total volume of the whole domain is returned.
Returns
-------
float
the total volume of the requested sub-domain.
the total volume of the requested (sub-)domain.
"""
if spaces is None:
return self._domain.total_volume
if np.isscalar(spaces):
return self._domain[spaces].total_volume
# tuple of spaces given
res = 1.
for i in spaces:
res *= self._domain[i].total_volume
return res
return self._domain.total_volume(spaces)
def weight(self, power=1, spaces=None):
"""Weights the pixels of `self` with their invidual pixel volumes.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment