sher_duam_class.py
3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
'''
Created on 28 авг. 2019 г.
@author: GadGet Life
'''
import math as m
import numpy as np
from matplotlib import mlab
import pylab
import csv
#import urllib.request
import requests
import json
import matplotlib.ticker as ticker
from fuzzylab import *
from datetime import datetime
# http://map.emercit.com/mgraph.php?mode=ultrasound&id=377&a=2020-01-10&b=2020-01-14&nocache=1578985253
class DuamelGidr:
def __init__(self, time,amp,Tper):
self.tbeg = time
self.amp=amp
self.T=Tper
#print("U",time,amp)
def calculation(self,tcur):
t=tcur-self.tbeg
return self.amp*(1-m.exp(-t/self.T))
def getLevel(q):
Q=np.array([
[0, 0],
[0.345148257, 0.1],
[1.097028578, 0.2],
[2.158903614, 0.3],
[3.491620674, 0.4],
[5.071512601, 0.5],
[6.882239402, 0.6],
[8.911682045, 0.7],
[11.15043894, 0.8],
[13.59098985, 0.9],
[16.22718582, 1],
[19.05391666, 1.1],
[22.06688277, 1.2],
[25.26243236, 1.3],
[28.63744147, 1.4],
[32.18922318, 1.5],
[35.91545733, 1.6],
[39.81413517, 1.7],
[43.88351498, 1.8],
[48.12208599, 1.9],
[52.52853871, 2],
[57.10174025, 2.1],
[61.84071361, 2.2],
[66.74462006, 2.3],
[71.81274423, 2.4],
[77.04448112, 2.5],
[82.43932505, 2.6],
[87.99685986, 2.7],
[93.71675045, 2.8],
[99.59873533, 2.9],
[105.64262, 3],
[111.8482711, 3.1],
[118.2156111, 3.2],
[124.7446139, 3.3],
[131.4353005, 3.4],
[138.2877352, 3.5],
[145.3020222, 3.6],
[152.4783028, 3.7],
[159.8167523, 3.8],
[167.3175775, 3.9],
[174.981015, 4]]
)
n=len(Q)
for i in range(n):
if q <= Q[i][0]:
break
return Q[i-1][1]+0.1*(q-Q[i-1][0])/(Q[i][0]-Q[i-1][0])
class TestSherDuamel:
def __init__(self, _k_up=2.8, _k_down=17.0, _k_multy=160.0, _k_addit=60.0, _zero_level=2.20):
self.k_up = _k_up
self.k_down = _k_down
self.k_multy = _k_multy
self.k_addit = _k_addit
self.zero_level = _zero_level
self.prec_old = 0.0
self.prec_sum_old = 0.0
self.UpperStore = []
self.DownStore = []
def CalculateLevel(self, _prec, _counter):
prec_delta = _prec - self.prec_old
self.prec_old = _prec
if np.abs(prec_delta) > 0.001:
self.UpperStore.append(DuamelGidr(_counter, prec_delta, self.k_up))
prec_sum = 0.0
for UpStep in self.UpperStore:
prec_sum = prec_sum + UpStep.calculation(_counter)
prec_sum_delta = prec_sum - self.prec_sum_old
self.prec_sum_old = prec_sum
if np.abs(prec_sum_delta) > 0.001:
self.DownStore.append(DuamelGidr(_counter, prec_sum_delta, self.k_down))
result_flow = 0.0
for DownStep in self.DownStore:
result_flow=result_flow+DownStep.calculation(_counter)
result_flow = result_flow * self.k_multy
result_level = getLevel(result_flow + self.k_addit)-self.zero_level
return result_level