Source code for spux.processes.precipitation
import numpy
import numba
Precipitation_numba_spec = [
('g', numba.float64[:]),
('a', numba.float64[:]),
('b', numba.float64[:]),
('c', numba.float64[:]),
('xi_1', numba.float64),
('xi_2', numba.float64),
]
[docs]class Precipitation (object):
"""Class for Precipitation process."""
def __init__ (self, g, a, b, c, xi_1, xi_2):
self.g = g
self.a = a
self.b = b
self.c = c
self.xi_1 = xi_1
self.xi_2 = xi_2
[docs] def evaluate (self, xi):
mode = 0 if xi <= self.xi_1 else (1 if xi <= self.xi_2 else 2)
x = self.a [mode] * (xi - self.b [mode]) ** self.g [mode] + self.c [mode]
return numpy.float64 (x)
[docs] def inverse (self, x):
x_1 = self.evaluate (self.xi_1)
x_2 = self.evaluate (self.xi_2)
mode = 0 if x <= x_1 else (1 if x <= x_2 else 2)
if mode == 0:
xi = self.xi_1
else:
xi = ((x - self.c [mode]) / self.a [mode]) ** (1.0 / self.g [mode]) + self.b [mode]
return numpy.float64 (xi)