"""Turbulence model variables (static & dynamic) - flow field data placeholders"""
from typing import Any, Union, 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.flow.placeholders import FlowDataPlaceHolder
from g3d.flow.vars import Turb
[docs]
class StaticTurbulenceModelVariables(FlowDataPlaceHolder):
"""Definition of class StaticTurbulenceModel, extends class FlowDataPlaceHolder:
static turbulence model variables container"""
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
[docs]
class DynamicTurbulenceModelVariables(FlowDataPlaceHolder):
"""Definition of class DynamicTurbulenceModel, extends class FlowDataPlaceHolder:
dynamic turbulence model variables container"""
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
@property
def visct(self) -> ndarray:
"""Turbulent viscosity [kg/(m s)]
Returns
-------
ndarray
turbulent viscosity array
"""
return self._visct
def _set_default(self) -> None:
super()._set_default()
self._tag = 'turbulence model variables'
def _define_variables(self) -> None:
super()._define_variables()
self._variables['visct'] = {}
self._variables['visct']['longname'] = 'turbulence viscosity'
self._variables['visct']['dimension'] = 'kg/(m s)'
def _allocate_placeholders(self) -> None:
super()._allocate_placeholders()
self._visct = np.zeros(self._size)
self._variables['visct']['ref'] = self._visct
[docs]
def set_values(self, visct: Union[float, ndarray], idx: int = None) -> None:
"""Sets array values for all cells or cell with specified cell index to a set of initial values or data from
provided arrays
Parameters
----------
visct : float or ndarray :
turbulent viscosity value or array of values
idx : int :
cell index (Default value = None)
"""
if idx is None:
idx1, idx2 = self.get_range()
self._visct[idx1:idx2] = visct
else:
self._visct[idx] = visct
[docs]
def set_from_Turb(self, t: Turb) -> None:
"""Set array values from provided turbulence model variable object
Parameters
----------
t : Turb :
turbulence model variable object
"""
idx1, idx2 = self.get_range()
self._visct[idx1:idx2] = t.visct
[docs]
def set_from_arrays(self, visct: ndarray) -> None:
"""Set data from provided arrays
Parameters
----------
visct : ndarray :
turbulence viscosity data
"""
idx1, idx2 = self.get_range()
self._visct[idx1:idx2] = visct[idx1:idx2]
[docs]
def get_arrays(self) -> Union[ndarray, Tuple[ndarray, ...]]:
"""Gets turbulence model data arrays
Returns
-------
tuple
data arrays (visct)
"""
idx1, idx2 = self.get_range()
return \
self._visct[idx1:idx2]
[docs]
def get_arrays_with_ghosts(self) -> Union[ndarray, Tuple[ndarray, ...]]:
"""Gets turbulence model data arrays including ghost cell values
Returns
-------
tuple
data arrays (visct)
"""
return \
self._visct
[docs]
def set_from_turb_field(self, t: 'DynamicTurbulenceModelVariables') -> None:
"""Copy data from provided turbulence model variables placeholder object
Parameters
----------
t : DynamicTurbulenceModelVariables :
dynamics turbulence model variables container
"""
visct = t.get_arrays()
self.set_from_arrays(visct)
[docs]
def get_visct_array(self) -> ndarray:
"""Gets turbulence viscosity array
Returns
-------
ndarray
turbulence viscosity array
"""
idx1, idx2 = self.get_range()
return self._visct[idx1:idx2]