def main(): # Дано: # коволюм 0.0010838 piston = { 'коволюм': 0, 'показатель адиабаты': 1.4, 'координата слева': 0, 'координата справа': 0.1, 'скорость лев гран': 0, 'скорость прав гран': 0 } geom = { 'координата слева': 0, 'координата справа': 2, 'диаметр слева': 0.025, 'диаметр справа': 0.025, 'количество ячеек': 100 } gas = {'пистон': piston} param_piston = {'B': 1.19e9, 'Ck': 1.73, 'ro0': 920} r = 0.5 # Число Куранта m = 0.05 # Масса снаряда eks = 0.001 # Эксцентреситет - отклонение координаты поршня от длины ствола # Создание слоя layer = IdPistLayer(param_piston, gas, 'пистон', geom, get_x_v_left, get_x_v_right, get_flux_left, get_flux_right, func_in, m) time_arr = [0] # Список времени для графика V_arr = [0] # Список скорости для графика x_arr = [layer.x[-1]] # Список координаты для графика while (geom['координата справа'] - layer.x[-1]) >= eks: tau = r * layer.time_step() # Вычисление шага по времени layer1 = layer.euler_step(layer, tau) # Шаг по времени layer = layer1 time_arr.append( layer.time ) # Добавление текущего шага по времени в список для графика V_arr.append( layer.V[-1] ) # Добавление текущей скорости поршня в список для графика x_arr.append( layer.x[-1] ) # Добавление текущей координаты поршня в список для графика print('Время вылета:', time_arr[-1], 'с') print('Скорость вылета:', V_arr[-1], 'м/с') plot_one(time_arr, V_arr, 'График скорости поршня от времени', 'Время', 'Скорость') plot_one(x_arr, V_arr, 'График скорости поршня от координаты', 'Координата', 'Скорость') plot_one(time_arr, x_arr, 'График координаты поршня от времени', 'Время', 'Координата')
def main(): # Дано: air1 = { 'коволюм': 0, 'показатель адиабаты': 1.4, 'координата слева': -1, 'координата справа': 1, 'скорость лев гран': 0, 'скорость прав гран': 0 } geom = { 'координата слева': -10, 'координата справа': 10, 'диаметр слева': 0.1, 'диаметр справа': 0.1, 'количество ячеек': 100 } gas = {'воздух1': air1} r = 0.1 # Число Куранта m = 0 # Создание ячейки и слоя layer = PnLayer(gas, 'воздух1', geom, get_x_v_left, get_x_v_right, get_flux_left, get_flux_right, func_in, m) time_arr = [0] # Список времени для графика while time_arr[-1] <= 0.5: tau = r * layer.time_step() # Вычисление шага по времени layer1 = layer.euler_step(layer, tau) # Шаг по времени layer = layer1 time_arr.append( layer.time ) # Добавление текущего шага по времени в список для графика xr = np.roll(layer.x, -1) xc = ((xr + layer.x) / 2)[:-1] plot_one(xc, layer.q[0], 'Распределение плотности', 'Координата', 'Плотность') plot_one(xc, layer.q[1] / layer.q[0], 'Распределение скорости', 'Координата', 'Скорость') plot_one(xc, layer.p, 'Распределение давления', 'Координата', 'Давление')
def main(): # Дано: # коволюм 0.0010838 air1 = {'коволюм': 0.0010838, 'показатель адиабаты': 1.4, 'координата слева': -0.5, 'координата справа': 0, 'скорость лев гран': 0, 'скорость прав гран': 0} geom = {'координата слева': -2, 'координата справа': 0, 'диаметр слева': 0.025, 'диаметр справа': 0.025, 'количество ячеек': 200} gas = {'воздух1': air1} r = 0.5 # Число Куранта m = 0.1 # Масса снаряда eks = 0.001 # Эксцентреситет - отклонение координаты поршня от длины ствола # Создание слоя layer = PnLayer(gas, 'воздух1', geom, get_x_v_left, get_x_v_right, get_flux_left, get_flux_right, func_in, m) time_arr = [0] # Список времени для графика V_arr = [0] # Список скорости для графика x_arr = [layer.x[0]] # Список координаты для графика while (abs(geom['координата слева']) - abs(layer.x[0])) >= eks: tau = r * layer.time_step() # Вычисление шага по времени layer1 = layer.euler_step(layer, tau) # Шаг по времени layer = layer1 time_arr.append(layer.time) # Добавление текущего шага по времени в список для графика V_arr.append(layer.V[0]) # Добавление текущей скорости поршня в список для графика x_arr.append(layer.x[0]) # Добавление текущей координаты поршня в список для графика print('Время вылета:', time_arr[-1], 'с') print('Скорость вылета:', layer.V[0], 'м/с') plot_one(time_arr, V_arr, 'График скорости поршня от времени', 'Время', 'Скорость') plot_one(x_arr, V_arr, 'График скорости поршня от координаты', 'Координата', 'Скорость') plot_one(time_arr, x_arr, 'График координаты поршня от времени', 'Время', 'Координата')
def main(): layers = [] for i in range(len(solver['grids'])): if solver['grids'][i]['type'] == 'gas': layers.append(pn_create_layer(i)) elif solver['grids'][i]['type'] == 'powder': layers.append(ov_create_layer(i)) time_arr = [0] # Список времени для графика V_arr = [0] # Список скорости для графика x_arr = [layers[-1].x[-1]] # Список координаты для графика while (solver['borders'][-1]['x'] - layers[-1].x[-1]) >= 0.001: tau_arr = [l.time_step() for l in layers] tau = solver['courant_number'] * min( tau_arr) # Вычисление шага по времени layer1 = layer.euler_step(layer, tau, p_right=p_atm) # Шаг по времени layer = layer1 time_arr.append( layer.time ) # Добавление текущего шага по времени в список для графика V_arr.append( layer.V[-1] ) # Добавление текущей скорости поршня в список для графика x_arr.append( layer.x[-1] ) # Добавление текущей координаты поршня в список для графика print('Время вылета:', time_arr[-1], 'с') print('Скорость вылета:', V_arr[-1], 'м/с') plot_one(time_arr, V_arr, 'График скорости поршня от времени', 'Время', 'Скорость') plot_one(x_arr, V_arr, 'График скорости поршня от координаты', 'Координата', 'Скорость') plot_one(time_arr, x_arr, 'График координаты поршня от времени', 'Время', 'Координата')
def main(): # Дано: powd = { 'коволюм': 0.0010838, 'показатель адиабаты': 1.4, 'координата слева': 0, 'координата справа': 0.25, 'скорость лев гран': 0, 'скорость прав гран': 0, 'nu': 1, 'давление форсирования': 0 } air = { 'коволюм': 0.0010838, 'показатель адиабаты': 1.4, 'координата слева': 0.25, 'координата справа': 0.5, 'скорость лев гран': 0, 'скорость прав гран': 0, 'nu': 1 } geom = { 'координата слева': 0, 'координата справа': 2, 'диаметр слева': 0.025, 'диаметр справа': 0.025, 'количество ячеек': 100 } gas = {'гпс': powd, 'газ': air} a = { 'I_k': 1.257, 'T_1': 2795.0, 'Z_k': 1.536, 'alpha_k': 1.0838, 'etta': 0.231, 'f': 1.009, 'k_1': 0.7185, 'k_2': 0.5386, 'k_f': 0.0003, 'k_l': 0.0016, 'lambda_1': 0.2049, 'lambda_2': -0.8977, 'name': 'порох', 'ro': 1.575 } dict_powder = {'порох': a} r = 0.3 # Число Куранта m = 1 # Масса снаряда m1 = 1 eks = 0.001 # Эксцентреситет - отклонение координаты поршня от длины ствола # Создание слоя layer_powd = OvLayer(gas, 'гпс', geom, dict_powder, 'порох', get_x_v_left_powd, get_x_v_right_powd, get_flux_left_powd, get_flux_right_powd, func_in_powd, m1) layer_gas = PnLayer(gas, 'газ', geom, get_x_v_left_gas, get_x_v_right_gas, get_flux_left_gas, get_flux_right_gas, func_in_gas, m) time_arr = [0] # Список времени для графика V_arr = [0] # Список скорости для графика x_arr = [layer_gas.x[-1]] # Список координаты для графика while (geom['координата справа'] - layer_gas.x[-1]) >= eks: tau = r * min(layer_powd.time_step(), layer_gas.time_step()) # Вычисление шага по времени layer_powd1 = layer_powd.euler_step(layer_powd, tau, 0, layer_gas.p[0]) # Шаг по времени layer_powd = layer_powd1 layer_gas1 = layer_gas.euler_step(layer_gas, tau, layer_powd.p[-1], 101325) # Шаг по времени layer_gas = layer_gas1 time_arr.append( layer_powd.time ) # Добавление текущего шага по времени в список для графика V_arr.append( layer_powd.V[-1] ) # Добавление текущей скорости поршня в список для графика x_arr.append( layer_powd.x[-1] ) # Добавление текущей координаты поршня в список для графика print('Время вылета:', time_arr[-1], 'с') print('Скорость вылета:', V_arr[-1], 'м/с') plot_one(time_arr, V_arr, 'График скорости поршня от времени', 'Время', 'Скорость') plot_one(x_arr, V_arr, 'График скорости поршня от координаты', 'Координата', 'Скорость') plot_one(time_arr, x_arr, 'График координаты поршня от времени', 'Время', 'Координата')
def main(): # Дано: gps = { 'коволюм': 0.0010838, 'показатель адиабаты': 1.27, 'координата слева': 0, 'координата справа': 0.762, 'скорость лев гран': 0, 'скорость прав гран': 0, 'nu': 0.9, 'давление форсирования': 13.79e6 } geom = { 'координата слева': 0, 'координата справа': 5.08, 'диаметр слева': 0.132, 'диаметр справа': 0.132, 'количество ячеек': 200 } gas = {'гпс': gps} a = { 'I_k': 0.312799, 'T_1': 2795.0, 'Z_k': 1.536, 'alpha_k': 1.0838, 'etta': 0.231, 'f': 1.009, 'k_1': 0.7185, 'k_2': 0.5386, 'k_f': 0.0003, 'k_l': 0.0016, 'lambda_1': 0.2049, 'lambda_2': -0.8977, 'name': 'порох', 'ro': 1.575 } dict_powder = {'порох': a} r = 0.3 # Число Куранта m = 45.359 # Масса снаряда eks = 0.001 # Эксцентреситет - отклонение координаты поршня от длины ствола # Создание слоя layer = OvLayer(gas, 'гпс', geom, dict_powder, 'порох', get_x_v_left, get_x_v_right, get_flux_left, get_flux_right, func_in, m) time_arr = [0] # Список времени для графика V_arr = [0] # Список скорости для графика x_arr = [layer.x[-1]] # Список координаты для графика p_arr = [layer.p[-1]] # Список давления на дно снаряда для графика z_arr = [0] # Список z для графика psi_arr = [layer.powd.psi(layer.z[-1])] # Список psi для графика while (geom['координата справа'] - layer.x[-1]) >= eks: tau = r * layer.time_step() # Вычисление шага по времени layer1 = layer.euler_step(layer, tau, 0, 101325) # Шаг по времени layer = layer1 time_arr.append( layer.time ) # Добавление текущего шага по времени в список для графика V_arr.append( layer.V[-1] ) # Добавление текущей скорости поршня в список для графика x_arr.append( layer.x[-1] ) # Добавление текущей координаты поршня в список для графика p_arr.append( layer.p[-1] ) # Добавление текущего давления на дно снаряда я в список для графика z_arr.append( layer.q[3][-1] / layer.q[0][-1]) # Добавление текущего z в список для графика psi_arr.append(layer.powd.psi( layer.q[3][-1] / layer.q[0][-1])) # Добавление текущего psi в список для графика print('Время вылета:', time_arr[-1], 'с') print('Скорость вылета:', V_arr[-1], 'м/с') plot_one(time_arr, V_arr, 'График скорости поршня от времени', 'Время', 'Скорость') plot_one(time_arr, p_arr, 'График давления на дно снаряда от времени', 'Время', 'Давление') plot_one(time_arr, x_arr, 'График координаты поршня от времени', 'Время', 'Координата') plot_one(time_arr, z_arr, 'График z от времени', 'Время', 'z') plot_one(time_arr, psi_arr, 'График psi от времени', 'Время', 'psi')