"""G3DRamp class definition"""
from typing import Any
import os
if os.environ.get('__USE_CUDA', '0') == '1':
import cupy as np
else:
import numpy as np
from g3d.defs import G3DEntity
from g3d.defs import G3DWorld
from g3d.defs import RampType
[docs]
class G3DRamp(G3DEntity):
"""
G3DRamp base class
extends G3DEntity
"""
def __init__(self, *args: Any, **kwargs: Any) -> None:
"""initialize G3DRamp placeholder"""
self._type = RampType.UNDEFINED
self._start_val = 0.
self._end_val = 0.
self._start_iter = 0
self._end_iter = 0
super().__init__(*args, **kwargs)
def _set_default(self) -> None:
super()._set_default()
self._tag = 'g3d_ramp'
[docs]
def set_from_key_value(self, key: str, value: Any) -> bool:
"""
sets code parameters from specified key => value data
input: key, value
valid keys for G3DCode base class:
'ramp_type', 'start_value', 'end_value', 'start_iter', 'end_iter'
example: set_from_key_value(key, value)
"""
if super().set_from_key_value(key, value):
return True
elif key == 'ramp_type':
self._type = value
return True
elif key == 'start_value':
self._start_val = np.float64(value)
return True
elif key == 'end_value':
self._end_val = np.float64(value)
return True
elif key == 'start_iter':
self._start_iter = np.int64(value)
return True
elif key == 'end_iter':
self._end_iter = np.int64(value)
return True
return False
[docs]
def copy(self, r: 'G3DRamp'):
super().copy(r)
self._type = r.type
self._start_val = r.start_val
self._end_val = r.end_val
self._start_iter = r.start_iter
self._end_iter = r.end_iter
@property
def type(self) -> Any:
"""
ramp type (Enum, default value = RampType.UNDEFINED)
valid options: UNDEFINED, MACH, PRESSURE, TOTAL_PRESSURE, TOTAL_TEMPERATURE
"""
return self._type
@type.setter
def type(self, val: Any) -> None:
if type(val) is RampType:
self._type = val
@property
def start_val(self) -> float:
"""ramp start value"""
return self._start_val
@start_val.setter
def start_val(self, val: float) -> None:
self._start_val = val
@property
def end_val(self) -> float:
"""ramp end value"""
return self._end_val
@end_val.setter
def end_val(self, val: float) -> None:
self._end_val = val
@property
def start_iter(self) -> int:
"""ramp start iteration (ramp function will be activated at
the specified iteration)"""
return self._start_iter
@start_iter.setter
def start_iter(self, val: int) -> None:
self._start_iter = val
@property
def end_iter(self) -> int:
"""ramp end iteration (ramp function will be deactivated at
the specified iteration)"""
return self._end_iter
@end_iter.setter
def end_iter(self, val: int) -> None:
self._end_iter = val
[docs]
def get_val(self) -> float:
"""
gets ramp value based on solver iteration
no input
"""
g3d_world = G3DWorld()
i = g3d_world.status.istep
if i <= self._start_iter:
return self._start_val
elif i >= self._end_iter:
return self._end_val
else:
return np.float64(i - self._start_iter + 1) / \
np.float64(self._end_iter - self._start_iter + 1) * \
(self._end_val - self._start_val) + self._start_val