mirror of
https://git.intern.spaceteamaachen.de/ALPAKA/SPATZ.git
synced 2025-06-10 01:55:59 +00:00
47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
import math
|
|
import numpy as np
|
|
|
|
from typing import List
|
|
|
|
from spatz.sensors import Sensor
|
|
from spatz.logger import Logger
|
|
from spatz.dataset import Dataset
|
|
from spatz.transforms import Transform
|
|
|
|
|
|
class PressureSensor(Sensor):
|
|
def __init__(self, dataset: Dataset, logger: Logger, transforms: List[Transform] = [], ts_effects=True):
|
|
"""
|
|
Args:
|
|
dataset (Dataset): A dataset instance.
|
|
transforms (List[Transform], optional): Transforms to apply to the sensor outputs. Defaults to [].
|
|
ts_effects (bool, optional): If True, models transsonic effects. Defaults to True.
|
|
"""
|
|
super(PressureSensor, self).__init__(dataset, logger, transforms)
|
|
|
|
self._ts_effects = ts_effects
|
|
|
|
def _get_data(self) -> float:
|
|
x = self._dataset.get_pressure()
|
|
|
|
if self._ts_effects:
|
|
# Pre-defined constants.
|
|
_p = 3e6
|
|
sigma = 40
|
|
|
|
# How far away from transsonic speed (mach 1) are we?
|
|
vvec = self._dataset.get_velocity()
|
|
dv = np.abs(np.linalg.norm(vvec) - self._dataset.get_speed_of_sound())
|
|
|
|
# Model transsonic effects by a peak at mach 1 which decays the further we are away from it.
|
|
ts_eff = _p * math.exp(-0.5* (dv / sigma)**2 ) / (sigma * math.sqrt(2*math.pi))
|
|
|
|
# Log the values for the transsonic effect.
|
|
self._logger.write('ts_effects', ts_eff, domain=self._get_name())
|
|
self._logger.write('mach_no', self._dataset.get_mach_number(), domain='mach')
|
|
self._logger.write('speedofsound', self._dataset.get_speed_of_sound(), domain='mach')
|
|
|
|
x = x + ts_eff
|
|
|
|
return x
|