Source code for g3d.mesh.geo.region.ijk_region

"""IJKRegion class definition"""
from typing import Any, Tuple

import os

if os.environ.get('__USE_CUDA', '0') == '1':
    import cupy as np
    from cupy import ndarray
else:
    import numpy as np
    from numpy import ndarray

from g3d.mesh.geo import Coord
from g3d.defs import FunctionByPass
from g3d.mesh.geo.region import Region


[docs] class IJKRegion(Region): def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) self._it = 0 self._im = 0 self._i1 = 0 self._i2 = 0 self._j1 = 0 self._j2 = 0 self._k1 = 0 self._k2 = 0 self.__update_counts() def _set_default(self) -> None: super()._set_default() self.__reset_def() self._tag = 'mesh_region' def _set_from_args(self, *args: Any, **kwargs: Any) -> ndarray: bps = self._get_function_evaluate_status(**kwargs) if bps is FunctionByPass.SELF: args_stat = np.ones(len(args)) else: args_stat = super()._set_from_args(*args) if bps in [FunctionByPass.EVALUATE, FunctionByPass.SELF]: if np.sum(args_stat) > 0: r_def = [] for i in range(len(args)): if args_stat[i] == 1: arg = args[i] if type(arg) is int: args_stat[i] = 0 r_def.append(arg) elif type(arg) is IJKRegion: # if caught by a super class, the child class instance of copy will be used args_stat[i] = 0 self.copy(arg) elif type(arg) is Region: args_stat[i] = 0 super().copy(arg) elif type(arg) is list: args_stat[i] = 0 if len(arg) >= 7: if len(arg) == 7: self._im, self._i1, self._i2, self._j1, self._j2, self._k1, self._k2 = arg self.__update_counts() elif len(arg) == 8: self._im, self._i1, self._i2, self._j1, self._j2, self._k1, self._k2, self._it = arg self.__update_counts() if len(r_def) >= 7: # will be caught by the for-loop below in a sub call to _set_from_args self._set_from_args(r_def, bps=FunctionByPass.SELF) return args_stat
[docs] def set_from_key_value(self, key: str, value: Any) -> bool: if super().set_from_key_value(key, value): return True elif key == 'it': self._it = value return True elif key == 'im': self._im = value return True elif key == 'i1': self._i1 = value self.__update_counts() return True elif key == 'i2': self._i2 = value self.__update_counts() return True elif key == 'j1': self._j1 = value self.__update_counts() return True elif key == 'j2': self._j2 = value self.__update_counts() return True elif key == 'k1': self._j1 = value self.__update_counts() return True elif key == 'k2': self._j2 = value self.__update_counts() return True return False
def __reset_def(self) -> None: self._it = 0 self._im = 0 self._i1 = 0 self._i2 = 0 self._j1 = 0 self._j2 = 0 self._k1 = 0 self._k2 = 0 self.__update_counts() def __update_counts(self) -> None: self._nk = self._k2 - self._k1 self._nj = self._j2 - self._j1 self._ni = self._i2 - self._i1 self._np = self._ni * self._nj * self._nk self._nc = (self._ni - 1) * (self._nj - 1) * (self._nk - 1) @property def ni(self) -> int: """ :return: """ return self._ni @property def nj(self) -> int: """ :return: """ return self._nj @property def nk(self) -> int: """ :return: """ return self._nk @property def np(self) -> int: """ :return: """ return self._np @property def nc(self) -> int: """ :return: """ return self._nc @property def it(self) -> int: """ :return: """ return self._it @it.setter def it(self, i: int) -> None: self._it = i @property def im(self) -> int: """ :return: """ return self._im @im.setter def im(self, i: int) -> None: self._im = i @property def i1(self) -> int: """ :return: """ return self._i1 @i1.setter def i1(self, i: int) -> None: self._i1 = i self.__update_counts() @property def i2(self) -> int: """ :return: """ return self._i2 @i2.setter def i2(self, i: int) -> None: self._i2 = i self.__update_counts() @property def j1(self) -> int: """ :return: """ return self._j1 @j1.setter def j1(self, j: int) -> None: self._j1 = j self.__update_counts() @property def j2(self) -> int: """ :return: """ return self._j2 @j2.setter def j2(self, j: int) -> None: self._j2 = j self.__update_counts() @property def k1(self) -> int: """ :return: """ return self._k1 @k1.setter def k1(self, k: int) -> None: self._k1 = k self.__update_counts() @property def k2(self) -> int: """ :return: """ return self._k2 @k2.setter def k2(self, k: int) -> None: self._k2 = k self.__update_counts()
[docs] def copy(self, r: 'IJKRegion') -> None: super().copy(r) self._it = r.it self._im = r.im self._i1 = r.i1 self._i2 = r.i2 self._j1 = r.j1 self._j2 = r.j2 self._k1 = r.k1 self._k2 = r.k2 self.__update_counts()
[docs] def get_def(self) -> Tuple[int, ...]: """ :return: """ return self._im, self._i1, self._i2, self._j1, self._j2, self._k1, self._k2
[docs] def set_def(self, im, i1, i2, j1, j2, k1, k2, it=0): """ :param im: :param i1: :param i2: :param j1: :param j2: :param k1: :param k2: :param it: """ self.set(im, i1, i2, j1, j2, k1, k2, it)
[docs] def coord_is_in_region(self, c: Coord) -> bool: """ :param c: :return: """ return False