created flow_pattern function with constant, linearly increasing and sawtooth flow patterns (incl outflux delay)

This commit is contained in:
Brantegger Georg
2022-05-17 10:43:16 +02:00
parent 82780978d8
commit a0b8ca98a9
2 changed files with 4034 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,67 @@
import numpy as np
import pandas as pd
import plotly.express as px
from plotly.subplots import make_subplots
import plotly.graph_objects as go
def return_flux_profiles(number_of_steps = 1,influx_identifier = 0, outflux_identifier = 0,influx_offset=0,outflux_offset=0, outflux_delay = 0):
''' Identifier patterns:
0 ... constant
'lin_SSSS' ... linear increase with slope int(SSSS)
'st_SSSS_PPPP' ... sawtooth pattern with slope int(SSSS) and period int(PPPP) steps
'''
# case identifiers for if statment
i = influx_identifier
o = outflux_identifier
n = number_of_steps
#starting value for the influx and outflux
i_o = influx_offset
o_o = outflux_offset
# number of steps, the outflux is held at 0 at the beginning
o_d = outflux_delay
# get base profile for the influx (offset will get applied later)
if i == 0:
influx_profile = np.zeros(n)
elif 'lin' in influx_identifier:
k = int(influx_identifier[-4:])
influx_profile = np.linspace(0,k*(n-1),n)
elif 'st' in influx_identifier:
k = int(influx_identifier[3:7])
p = int(influx_identifier[-4:])
influx_profile = np.tile(np.linspace(0,k*(p-1),p),int(np.ceil(n/p)))
# apply influx offset
influx_profile = influx_offset + influx_profile
if o == 0:
outflux_profile = np.zeros(n)
elif 'lin' in outflux_identifier:
k = int(outflux_identifier[-4:])
outflux_profile = np.linspace(0,k*(n-1),n)
elif 'st' in outflux_identifier:
k = int(outflux_identifier[3:7])
p = int(outflux_identifier[-4:])
outflux_profile = np.tile(np.linspace(0,k*(p-1),p),int(np.ceil(n/p)))
#apply outflux offset and delay (delay means, that the first o_d steps, the outflux will be 0)
outflux_profile = np.concatenate((np.zeros(o_d),outflux_profile[:-o_d]+o_o))
return influx_profile,outflux_profile
def make_flux_df(influx_profile,outflux_profile, time = 0):
if time == 0:
time = np.arange(0,len(influx_profile))
flux_df = pd.DataFrame(np.transpose([time, influx_profile, outflux_profile]), \
columns=['time', 'influx', 'outflux'])
return flux_df
if __name__ == "__main__":
influx_profile,outflux_profile = return_flux_profiles(100,influx_identifier='st_0010_0010',influx_offset=10)
print(influx_profile)